Merge pull request #4730 from claudiosmweb/fix_4672

Corrections for the wc_create_new_customer() function
This commit is contained in:
Mike Jolley 2014-02-12 11:40:56 +00:00
commit fbda89f76c
1 changed files with 105 additions and 91 deletions

View File

@ -7,10 +7,12 @@
* @author WooThemes
* @category Core
* @package WooCommerce/Functions
* @version 2.1.0
* @version 2.1.0
*/
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Prevent any user who cannot 'edit_posts' (subscribers, customers etc) from seeing the admin bar
@ -22,7 +24,7 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
* @return bool
*/
function wc_disable_admin_bar( $show_admin_bar ) {
if ( apply_filters( 'woocommerce_disable_admin_bar', get_option( 'woocommerce_lock_down_admin', "yes" ) == "yes" ) && ! ( current_user_can('edit_posts') || current_user_can('manage_woocommerce') ) ) {
if ( apply_filters( 'woocommerce_disable_admin_bar', get_option( 'woocommerce_lock_down_admin', 'yes' ) == 'yes' ) && ! ( current_user_can( 'edit_posts' ) || current_user_can( 'manage_woocommerce' ) ) ) {
$show_admin_bar = false;
}
@ -42,24 +44,25 @@ add_filter( 'show_admin_bar', 'wc_disable_admin_bar', 10, 1 );
function wc_create_new_customer( $email, $username = '', $password = '' ) {
// Check the e-mail address
if ( empty( $email ) || ! is_email( $email ) )
return new WP_Error( "registration-error", __( "Please provide a valid email address.", "woocommerce" ) );
if ( empty( $email ) || ! is_email( $email ) ) {
return new WP_Error( 'registration-error', __( 'Please provide a valid email address.', 'woocommerce' ) );
}
if ( email_exists( $email ) )
return new WP_Error( "registration-error", __( "An account is already registered with your email address. Please login.", "woocommerce" ) );
wp_verify_nonce( $_POST['register'], 'woocommerce-register' );
if ( email_exists( $email ) ) {
return new WP_Error( 'registration-error', __( 'An account is already registered with your email address. Please login.', 'woocommerce' ) );
}
// Handle username creation
if ( get_option( 'woocommerce_registration_generate_username' ) == 'no' || ! empty( $username ) ) {
if ( 'no' == get_option( 'woocommerce_registration_generate_username' ) || ! empty( $username ) ) {
$username = sanitize_user( $username );
if ( empty( $username ) || ! validate_username( $username ) )
return new WP_Error( "registration-error", __( "Please enter a valid account username.", "woocommerce" ) );
if ( empty( $username ) || ! validate_username( $username ) ) {
return new WP_Error( 'registration-error', __( 'Please enter a valid account username.', 'woocommerce' ) );
}
if ( username_exists( $username ) )
return new WP_Error( "registration-error", __( "An account is already registered with that username. Please choose another.", "woocommerce" ) );
return new WP_Error( 'registration-error', __( 'An account is already registered with that username. Please choose another.', 'woocommerce' ) );
} else {
$username = sanitize_user( current( explode( '@', $email ) ) );
@ -75,11 +78,11 @@ function wc_create_new_customer( $email, $username = '', $password = '' ) {
}
// Handle password creation
if ( get_option( 'woocommerce_registration_generate_password' ) == 'yes' && empty( $password ) ) {
if ( 'yes' == get_option( 'woocommerce_registration_generate_password' ) && empty( $password ) && ! isset( $_POST['register'] ) ) {
$password = wp_generate_password();
$password_generated = true;
} elseif ( empty( $password ) ) {
return new WP_Error( "registration-error", __( "Please enter an account password.", "woocommerce" ) );
return new WP_Error( 'registration-error', __( 'Please enter an account password.', 'woocommerce' ) );
} else {
$password_generated = false;
}
@ -94,17 +97,18 @@ function wc_create_new_customer( $email, $username = '', $password = '' ) {
if ( $validation_errors->get_error_code() )
return $validation_errors;
$new_customer_data = apply_filters( 'woocommerce_new_customer_data', array(
'user_login' => $username,
'user_pass' => $password,
'user_email' => $email,
'role' => 'customer'
) );
$new_customer_data = apply_filters( 'woocommerce_new_customer_data', array(
'user_login' => $username,
'user_pass' => $password,
'user_email' => $email,
'role' => 'customer'
) );
$customer_id = wp_insert_user( $new_customer_data );
$customer_id = wp_insert_user( $new_customer_data );
if ( is_wp_error( $customer_id ) )
return new WP_Error( "registration-error", '<strong>' . __( 'ERROR', 'woocommerce' ) . '</strong>: ' . __( 'Couldn&#8217;t register you&hellip; please contact us if you continue to have problems.', 'woocommerce' ) );
if ( is_wp_error( $customer_id ) ) {
return new WP_Error( 'registration-error', '<strong>' . __( 'ERROR', 'woocommerce' ) . '</strong>: ' . __( 'Couldn&#8217;t register you&hellip; please contact us if you continue to have problems.', 'woocommerce' ) );
}
do_action( 'woocommerce_created_customer', $customer_id, $new_customer_data, $password_generated );
@ -133,14 +137,14 @@ function wc_set_customer_auth_cookie( $customer_id ) {
*/
function wc_update_new_customer_past_orders( $customer_id ) {
$customer = get_user_by( 'id', absint( $customer_id ) );
$customer = get_user_by( 'id', absint( $customer_id ) );
$customer_orders = get_posts( array(
'numberposts' => -1,
'post_type' => 'shop_order',
'post_status' => 'publish',
'fields' => 'ids',
'meta_query' => array(
$customer_orders = get_posts( array(
'numberposts' => -1,
'post_type' => 'shop_order',
'post_status' => 'publish',
'fields' => 'ids',
'meta_query' => array(
array(
'key' => '_customer_user',
'value' => array( 0, '' ),
@ -151,16 +155,16 @@ function wc_update_new_customer_past_orders( $customer_id ) {
'value' => $customer->user_email,
)
),
) );
) );
$linked = 0;
$complete = 0;
$linked = 0;
$complete = 0;
if ( $customer_orders )
foreach ( $customer_orders as $order_id ) {
update_post_meta( $order_id, '_customer_user', $customer->ID );
if ( $customer_orders )
foreach ( $customer_orders as $order_id ) {
update_post_meta( $order_id, '_customer_user', $customer->ID );
$order_status = wp_get_post_terms( $order_id, 'shop_order_status' );
$order_status = wp_get_post_terms( $order_id, 'shop_order_status' );
if ( $order_status ) {
$order_status = current( $order_status );
@ -170,16 +174,16 @@ function wc_update_new_customer_past_orders( $customer_id ) {
if ( $order_status == 'completed' )
$complete ++;
$linked ++;
}
$linked ++;
}
if ( $complete ) {
update_user_meta( $customer_id, 'paying_customer', 1 );
update_user_meta( $customer_id, '_order_count', '' );
update_user_meta( $customer_id, '_money_spent', '' );
}
if ( $complete ) {
update_user_meta( $customer_id, 'paying_customer', 1 );
update_user_meta( $customer_id, '_order_count', '' );
update_user_meta( $customer_id, '_money_spent', '' );
}
return $linked;
return $linked;
}
/**
@ -225,11 +229,13 @@ function wc_customer_bought_product( $customer_email, $user_id, $product_id ) {
$emails[] = $user->user_email;
}
if ( is_email( $customer_email ) )
if ( is_email( $customer_email ) ) {
$emails[] = $customer_email;
}
if ( sizeof( $emails ) == 0 )
if ( sizeof( $emails ) == 0 ) {
return false;
}
$completed = get_term_by( 'slug', 'completed', 'shop_order_status' );
$processing = get_term_by( 'slug', 'processing', 'shop_order_status' );
@ -268,64 +274,72 @@ function wc_customer_bought_product( $customer_email, $user_id, $product_id ) {
* @return bool
*/
function wc_customer_has_capability( $allcaps, $caps, $args ) {
if ( isset( $caps[0] ) ) {
switch ( $caps[0] ) {
if ( isset( $caps[0] ) ) {
switch ( $caps[0] ) {
case 'view_order':
$user_id = $args[1];
$order = new WC_Order( $args[2] );
case 'view_order' :
$user_id = $args[1];
$order = new WC_Order( $args[2] );
if ( $user_id == $order->user_id )
$allcaps['view_order'] = true;
if ( $user_id == $order->user_id ) {
$allcaps['view_order'] = true;
}
break;
break;
case 'pay_for_order':
$user_id = $args[1];
$order_id = isset($args[2]) ? $args[2] : null;
case 'pay_for_order' :
$user_id = $args[1];
$order_id = isset( $args[2] ) ? $args[2] : null;
// When no order ID, we assume it's a new order
// and thus, customer can pay for it
if (!$order_id) {
$allcaps['pay_for_order'] = true;
break;
}
// When no order ID, we assume it's a new order
// and thus, customer can pay for it
if ( ! $order_id ) {
$allcaps['pay_for_order'] = true;
$order = new WC_Order( $order_id );
break;
}
if ( $user_id == $order->user_id )
$allcaps['pay_for_order'] = true;
$order = new WC_Order( $order_id );
break;
if ( $user_id == $order->user_id ) {
$allcaps['pay_for_order'] = true;
}
case 'order_again':
$user_id = $args[1];
$order = new WC_Order( $args[2] );
break;
if ( $user_id == $order->user_id )
$allcaps['order_again'] = true;
case 'order_again' :
$user_id = $args[1];
$order = new WC_Order( $args[2] );
break;
if ( $user_id == $order->user_id ) {
$allcaps['order_again'] = true;
}
case 'cancel_order':
$user_id = $args[1];
$order = new WC_Order( $args[2] );
break;
if ( $user_id == $order->user_id )
$allcaps['cancel_order'] = true;
case 'cancel_order' :
$user_id = $args[1];
$order = new WC_Order( $args[2] );
break;
if ( $user_id == $order->user_id ) {
$allcaps['cancel_order'] = true;
}
case 'download_file':
$user_id = $args[1];
$download = $args[2];
break;
if ( $user_id == $download->user_id )
$allcaps['download_file'] = true;
case 'download_file' :
$user_id = $args[1];
$download = $args[2];
break;
}
}
return $allcaps;
if ( $user_id == $download->user_id ) {
$allcaps['download_file'] = true;
}
break;
}
}
return $allcaps;
}
add_filter( 'user_has_cap', 'wc_customer_has_capability', 10, 3);
add_filter( 'user_has_cap', 'wc_customer_has_capability', 10, 3 );