/**
  * Create a customer.
  *
  * ## OPTIONS
  *
  * <email>
  * : The email address of the customer to create.
  *
  * [--<field>=<value>]
  * : Associative args for the new customer.
  *
  * [--porcelain]
  * : Outputs just the new customer id.
  *
  * ## AVAILABLE FIELDS
  *
  * These fields are optionally available for create command:
  *
  * * username
  * * password
  * * first_name
  * * last_name
  *
  * Billing address fields:
  *
  * * billing_address.first_name
  * * billing_address.last_name
  * * billing_address.company
  * * billing_address.address_1
  * * billing_address.address_2
  * * billing_address.city
  * * billing_address.state
  * * billing_address.postcode
  * * billing_address.country
  * * billing_address.email
  * * billing_address.phone
  *
  * Shipping address fields:
  *
  * * shipping_address.first_name
  * * shipping_address.last_name
  * * shipping_address.company
  * * shipping_address.address_1
  * * shipping_address.address_2
  * * shipping_address.city
  * * shipping_address.state
  * * shipping_address.postcode
  * * shipping_address.country
  *
  * ## EXAMPLES
  *
  *     wp wc customer create new-customer@example.com --first_name=Akeda
  *
  * @since 2.5.0
  */
 public function create($args, $assoc_args)
 {
     global $wpdb;
     try {
         $porcelain = isset($assoc_args['porcelain']);
         unset($assoc_args['porcelain']);
         $assoc_args['email'] = $args[0];
         $data = apply_filters('woocommerce_cli_create_customer_data', $this->unflatten_array($assoc_args));
         // Sets the username.
         $data['username'] = !empty($data['username']) ? $data['username'] : '';
         // Sets the password.
         $data['password'] = !empty($data['password']) ? $data['password'] : '';
         // Attempts to create the new customer.
         $id = wc_create_new_customer($data['email'], $data['username'], $data['password']);
         // Checks for an error in the customer creation.
         if (is_wp_error($id)) {
             throw new WC_CLI_Exception($id->get_error_code(), $id->get_error_message());
         }
         // Added customer data.
         $this->update_customer_data($id, $data);
         do_action('woocommerce_cli_create_customer', $id, $data);
         if ($porcelain) {
             WP_CLI::line($id);
         } else {
             WP_CLI::success("Created customer {$id}.");
         }
     } catch (WC_CLI_Exception $e) {
         WP_CLI::error($e->getMessage());
     }
 }
 public function create(&$object)
 {
     if ('user' === $this->meta_type) {
         $content_id = wc_create_new_customer($object->get_content(), 'username-' . time(), 'hunter2');
     } else {
         $content_id = wp_insert_post(array('post_title' => $object->get_content()));
     }
     if ($content_id) {
         $object->set_id($content_id);
     }
     $object->apply_changes();
 }
 /**
  * Method to create a new customer in the database.
  *
  * @since 2.7.0
  * @param WC_Customer
  */
 public function create(&$customer)
 {
     $id = wc_create_new_customer($customer->get_email(), $customer->get_username(), $customer->get_password());
     if (is_wp_error($id)) {
         throw new WC_Data_Exception($id->get_error_code(), $id->get_error_message());
     }
     $customer->set_id($id);
     $this->update_user_meta($customer);
     wp_update_user(array('ID' => $customer->get_id(), 'role' => $customer->get_role(), 'display_name' => $customer->get_first_name() . ' ' . $customer->get_last_name()));
     $wp_user = new WP_User($customer->get_id());
     $customer->set_date_created(strtotime($wp_user->user_registered));
     $customer->set_date_modified(get_user_meta($customer->get_id(), 'last_update', true));
     $customer->save_meta_data();
     $customer->apply_changes();
     do_action('woocommerce_new_customer', $customer->get_id());
 }
Beispiel #4
0
 /**
  * Parses the WXR file and prepares us for the task of processing parsed data
  *
  * @param string $file Path to the WXR file for importing
  */
 function import_start($file)
 {
     global $wpdb;
     if (!is_file($file)) {
         echo '<p><strong>' . __('Sorry, there has been an error.', 'wc_customer_relationship_manager') . '</strong><br />';
         echo __('The file does not exist, please try again.', 'wc_customer_relationship_manager') . '</p>';
         die;
     }
     if (in_array('user_email', $_POST['import_options'])) {
         $this->key_email = array_search('user_email', $_POST['import_options']);
     }
     if (empty($this->key_email) && in_array('billing_email', $_POST['import_options'])) {
         $this->key_email = array_search('billing_email', $_POST['import_options']);
     }
     if (empty($this->key_email) && $this->key_email !== 0) {
         echo '<p><strong>' . __('Sorry, there has been an error.', 'wc_customer_relationship_manager') . '</strong><br />';
         echo __('Please select user email and please try again.', 'wc_customer_relationship_manager') . '</p>';
         wp_import_cleanup($this->id);
         wp_cache_flush();
         die;
     }
     $import_data = $this->parse($file);
     if (is_wp_error($import_data)) {
         echo '<p><strong>' . __('Sorry, there has been an error.', 'wc_customer_relationship_manager') . '</strong><br />';
         echo esc_html($import_data->get_error_message()) . '</p>';
         wp_import_cleanup($this->id);
         wp_cache_flush();
         die;
     }
     if (in_array('first_name', $_POST['import_options'])) {
         $this->key_fname = array_search('first_name', $_POST['import_options']);
     }
     if (empty($this->key_fname) && in_array('billing_first_name', $_POST['import_options'])) {
         $this->key_fname = array_search('billing_first_name', $_POST['import_options']);
     }
     if (in_array('last_name', $_POST['import_options'])) {
         $this->key_lname = array_search('last_name', $_POST['import_options']);
     }
     if (empty($this->key_lname) && in_array('billing_last_name', $_POST['import_options'])) {
         $this->key_lname = array_search('billing_last_name', $_POST['import_options']);
     }
     if (in_array('user_nicename', $_POST['import_options'])) {
         $this->key_nice = array_search('user_nicename', $_POST['import_options']);
     }
     if (in_array('user_role', $_POST['import_options'])) {
         $this->key_role = array_search('user_role', $_POST['import_options']);
     }
     if (in_array('customer_status', $_POST['import_options'])) {
         $this->key_status = array_search('customer_status', $_POST['import_options']);
     }
     $skiped = false;
     while (($data = fgetcsv($import_data, 1000, ",")) !== FALSE) {
         if (isset($_POST['skip_first']) && $_POST['skip_first'] == 'yes' && !$skiped) {
             $skiped = true;
             continue;
         }
         $user_email = trim($data[$this->key_email]);
         if (empty($user_email) || email_exists($user_email)) {
             $this->not_import[] = $data;
             continue;
         }
         $nickname = '';
         if (empty($this->key_nice)) {
             if (isset($data[$this->key_fname])) {
                 $nickname .= sanitize_title($data[$this->key_fname]);
             }
             if (isset($data[$this->key_lname])) {
                 $nickname .= '_' . sanitize_title($data[$this->key_lname]);
             }
         } else {
             $nickname .= sanitize_title($data[$this->key_nice]);
         }
         $user_login = '';
         if (in_array('user_login', $_POST['import_options'])) {
             $key = array_search('user_login', $_POST['import_options']);
             $user_login = $data[$key];
         } else {
             $user_login = $this->get_user_login($user_email, $nickname);
         }
         //$password = wp_generate_password();
         add_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password');
         $user_id = wc_create_new_customer($user_email, $user_login);
         remove_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password');
         if (!empty($user_id) && !is_wp_error($user_id)) {
             if (empty($this->key_role) && isset($_POST['customer_role'])) {
                 wp_update_user(array('ID' => $user_id, 'role' => $_POST['customer_role']));
             }
             if (empty($this->key_status) && isset($_POST['customer_status'])) {
                 $status = $_POST['customer_status'];
                 wc_crm_change_customer_status($status, array($user_id));
             }
             foreach ($_POST['import_options'] as $f_key => $meta_key) {
                 if (empty($meta_key)) {
                     continue;
                 }
                 if ($meta_key == 'user_login' || $meta_key == 'user_email') {
                     continue;
                 }
                 if ($meta_key == 'url') {
                     wp_update_user(array('ID' => $user_id, 'user_url' => $data[$f_key]));
                     continue;
                 }
                 if ($meta_key == 'display_name') {
                     wp_update_user(array('ID' => $user_id, 'display_name' => $data[$f_key]));
                     continue;
                 }
                 if ($meta_key == 'wcrm_custom_meta') {
                     $custom_meta_key = $_POST['import_options_custom_meta'][$f_key];
                     update_user_meta($user_id, $custom_meta_key, $data[$f_key]);
                     continue;
                 }
                 if ($meta_key == 'user_nicename') {
                     wp_update_user(array('ID' => $user_id, 'user_nicename' => $data[$f_key]));
                     continue;
                 }
                 if ($meta_key == 'user_role') {
                     wp_update_user(array('ID' => $user_id, 'role' => $data[$f_key]));
                     continue;
                 }
                 if ($meta_key == 'customer_status') {
                     $status = $this->check_customer_status($data[$f_key]);
                     if (!$status) {
                         $status = $_POST['customer_status'];
                     }
                     wc_crm_change_customer_status($status, array($user_id));
                     continue;
                 }
                 if ($meta_key == 'industry') {
                     $industries = wc_crm_get_industries();
                     if (!in_array($data[$f_key], $industries)) {
                         continue;
                     }
                 }
                 if ($meta_key == 'user_group') {
                     //global $wpdb
                     $groups = $data[$f_key];
                     $groups = explode(',', $groups);
                     if (!empty($groups)) {
                         $group_ids = array();
                         foreach ($groups as $group_name) {
                             $group_slug = wc_sanitize_taxonomy_name(stripslashes($group_name));
                             $group_exists = wc_crm_group_exists($group_slug);
                             if (!$group_exists) {
                                 $group = array('group_name' => $group_name, 'group_slug' => $group_slug, 'group_type' => 'static');
                                 $wpdb->insert($wpdb->prefix . 'wc_crm_groups', $group);
                                 $group_ids[] = $wpdb->insert_id;
                                 $this->groups_added[] = $group_name;
                                 do_action('wc_crm_group_added', $wpdb->insert_id, $group);
                             } else {
                                 $group_ids[] = $wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->prefix}wc_crm_groups WHERE group_slug = %s LIMIT 1", $group_slug));
                             }
                         }
                         wc_crm_update_user_groups($group_ids, $user_email);
                     }
                     continue;
                 }
                 update_user_meta($user_id, $meta_key, $data[$f_key]);
             }
             $this->row++;
         }
     }
 }
 public static function create_user()
 {
     if (empty($_POST['user_email'])) {
         wc_crm_add_notice(__('Please enter an e-mail address.', 'wc_crm'), 'error');
     } elseif (!is_email($_POST['user_email'])) {
         wc_crm_add_notice(__("The email address isn't correct.", 'wc_crm'), 'error');
     } elseif (email_exists($_POST['user_email'])) {
         wc_crm_add_notice(__("This email is already registered, please choose another one.", 'wc_crm'), 'error');
     }
     if (wc_crm_notice_count('error') > 0) {
         return;
     }
     global $wpdb;
     $nickname = str_replace(' ', '', ucfirst(strtolower($_POST['first_name']))) . str_replace(' ', '', ucfirst(strtolower($_POST['last_name'])));
     $username_opt = get_option('wc_crm_username_add_customer');
     switch ($username_opt) {
         case 2:
             $username = str_replace(' ', '', strtolower($_POST['first_name'])) . '-' . str_replace(' ', '', strtolower($_POST['last_name']));
             break;
         case 3:
             $username = $_POST['user_email'];
             break;
         default:
             $username = strtolower($nickname);
             break;
     }
     $username = _truncate_post_slug($username, 60);
     $check_sql = "SELECT user_login FROM {$wpdb->users} WHERE user_login = '******' LIMIT 1";
     $user_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $username));
     if ($user_name_check) {
         $suffix = 1;
         do {
             $alt_user_name = _truncate_post_slug($username, 60 - (strlen($suffix) + 1)) . "-{$suffix}";
             $user_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $alt_user_name));
             $suffix++;
         } while ($user_name_check);
         $username = $alt_user_name;
     }
     add_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password');
     $user_id = wc_create_new_customer($_POST['user_email'], $username);
     remove_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password');
     do_action('wc_crm_create_customer', $user_id);
     if (!is_wp_error($user_id)) {
         update_user_meta($user_id, 'nickname', $nickname);
         wp_update_user(array('ID' => $user_id, 'role' => 'customer'));
         $customer_id = $wpdb->get_var("SELECT c_id FROM {$wpdb->prefix}wc_crm_customer_list WHERE user_id = {$user_id} ");
         if ($customer_id) {
             WC_CRM_Screen_Customers_Edit::save($customer_id, true);
         }
         wc_crm_add_notice(__("Customer created.", 'wc_crm'), 'success');
         wp_safe_redirect(admin_url() . 'admin.php?page=' . WC_CRM_TOKEN);
     } else {
         wc_crm_add_notice($user_id->get_error_message(), 'error');
     }
 }
 function create_user()
 {
     global $wpdb;
     extract($_POST);
     $user_email = trim($user_email);
     if (empty($user_email)) {
         $this->error[] = __('<p><strong>ERROR</strong>: The email address isn’t correct.</p>');
     } else {
         if (!email_exists($user_email)) {
             //$random_password = wp_generate_password( $length=12, $include_standard_special_chars=false );
             $nickname = str_replace(' ', '', ucfirst(strtolower($_POST['first_name']))) . str_replace(' ', '', ucfirst(strtolower($_POST['last_name'])));
             $username_opt = get_option('woocommerce_crm_username_add_customer');
             switch ($username_opt) {
                 case 2:
                     $username = str_replace(' ', '', strtolower($_POST['first_name'])) . '-' . str_replace(' ', '', strtolower($_POST['last_name']));
                     break;
                 case 3:
                     $username = $user_email;
                     break;
                 default:
                     $username = strtolower($nickname);
                     break;
             }
             $username = _truncate_post_slug($username, 60);
             $check_sql = "SELECT user_login FROM {$wpdb->users} WHERE user_login = '******' LIMIT 1";
             $user_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $username));
             if ($user_name_check) {
                 $suffix = 1;
                 do {
                     $alt_user_name = _truncate_post_slug($username, 60 - (strlen($suffix) + 1)) . "-{$suffix}";
                     $user_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $alt_user_name));
                     $suffix++;
                 } while ($user_name_check);
                 $username = $alt_user_name;
             }
             add_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password');
             $user_id = wc_create_new_customer($user_email, $username);
             remove_filter('pre_option_woocommerce_registration_generate_password', 'wcrm_enable_generate_password');
             do_action('wc_crm_create_customer', $user_id);
             $this->save($user_id, true);
             if (!is_wp_error($user_id)) {
                 update_user_meta($user_id, 'nickname', $nickname);
                 wp_update_user(array('ID' => $user_id, 'role' => 'customer'));
             }
         } else {
             $errors = new WP_Error();
             $errors->add('invalid_email', __('<strong>ERROR</strong>: User already exists.'), array('form-field' => 'user_email'));
             $_SESSION['customer_save_errors'] = $errors;
         }
     }
 }
 /**
  * Create a customer.
  * @since 2.7.0.
  */
 public function create()
 {
     $customer_id = wc_create_new_customer($this->get_email(), $this->get_username(), $this->password);
     if (!is_wp_error($customer_id)) {
         $this->set_id($customer_id);
         $this->update_post_meta();
         wp_update_user(array('ID' => $this->get_id(), 'role' => $this->get_role()));
         $wp_user = new WP_User($this->get_id());
         $this->set_date_created(strtotime($wp_user->user_registered));
         $this->set_date_modified(get_user_meta($this->get_id(), 'last_update', true));
         $this->read_meta_data();
     }
 }
 /**
  * Process the registration form.
  */
 public function process_registration()
 {
     if (!empty($_POST['register'])) {
         wp_verify_nonce($_POST['register'], 'woocommerce-register');
         if ('no' === get_option('woocommerce_registration_generate_username')) {
             $_username = $_POST['username'];
         } else {
             $_username = '';
         }
         if ('no' === get_option('woocommerce_registration_generate_password')) {
             $_password = $_POST['password'];
         } else {
             $_password = '';
         }
         try {
             $validation_error = new WP_Error();
             $validation_error = apply_filters('woocommerce_process_registration_errors', $validation_error, $_username, $_password, $_POST['email']);
             if ($validation_error->get_error_code()) {
                 throw new Exception('<strong>' . __('Error', 'woocommerce') . ':</strong> ' . $validation_error->get_error_message());
             }
         } catch (Exception $e) {
             wc_add_notice($e->getMessage(), 'error');
             return;
         }
         $username = !empty($_username) ? wc_clean($_username) : '';
         $email = !empty($_POST['email']) ? sanitize_email($_POST['email']) : '';
         $password = $_password;
         // Anti-spam trap
         if (!empty($_POST['email_2'])) {
             wc_add_notice('<strong>' . __('ERROR', 'woocommerce') . '</strong>: ' . __('Anti-spam field was filled in.', 'woocommerce'), 'error');
             return;
         }
         $new_customer = wc_create_new_customer($email, $username, $password);
         if (is_wp_error($new_customer)) {
             wc_add_notice($new_customer->get_error_message(), 'error');
             return;
         }
         wc_set_customer_auth_cookie($new_customer);
         // Redirect
         if (wp_get_referer()) {
             $redirect = esc_url(wp_get_referer());
         } else {
             $redirect = esc_url(get_permalink(wc_get_page_id('myaccount')));
         }
         wp_redirect(apply_filters('woocommerce_registration_redirect', $redirect));
         exit;
     }
 }
 /**
  * Create a single customer.
  *
  * @param WP_REST_Request $request Full details about the request.
  * @return WP_Error|WP_REST_Response
  */
 public function create_item($request)
 {
     if (!empty($request['id'])) {
         return new WP_Error('woocommerce_rest_customer_exists', __('Cannot create existing resource.', 'woocommerce'), array('status' => 400));
     }
     // Sets the username.
     $request['username'] = !empty($request['username']) ? $request['username'] : '';
     // Sets the password.
     $request['password'] = !empty($request['password']) ? $request['password'] : '';
     // Create customer.
     $customer_id = wc_create_new_customer($request['email'], $request['username'], $request['password']);
     if (is_wp_error($customer_id)) {
         return $customer_id;
     }
     $customer = get_user_by('id', $customer_id);
     $this->update_additional_fields_for_object($customer, $request);
     // Add customer data.
     $this->update_customer_meta_fields($customer, $request);
     /**
      * Fires after a customer is created or updated via the REST API.
      *
      * @param WP_User         $customer  Data used to create the customer.
      * @param WP_REST_Request $request   Request object.
      * @param boolean         $creating  True when creating customer, false when updating customer.
      */
     do_action('woocommerce_rest_insert_customer', $customer, $request, true);
     $request->set_param('context', 'edit');
     $response = $this->prepare_item_for_response($customer, $request);
     $response = rest_ensure_response($response);
     $response->set_status(201);
     $response->header('Location', rest_url(sprintf('/%s/%s/%d', $this->namespace, $this->rest_base, $customer_id)));
     return $response;
 }
 /**
  * Create a customer.
  * @since 2.7.0.
  */
 public function create()
 {
     $customer_id = wc_create_new_customer($this->get_email(), $this->get_username(), $this->password);
     if (!is_wp_error($customer_id)) {
         $this->set_id($customer_id);
         update_user_meta($this->get_id(), 'billing_first_name', $this->get_billing_first_name());
         update_user_meta($this->get_id(), 'billing_last_name', $this->get_billing_last_name());
         update_user_meta($this->get_id(), 'billing_company', $this->get_billing_company());
         update_user_meta($this->get_id(), 'billing_phone', $this->get_billing_phone());
         update_user_meta($this->get_id(), 'billing_email', $this->get_billing_email());
         update_user_meta($this->get_id(), 'billing_postcode', $this->get_billing_postcode());
         update_user_meta($this->get_id(), 'billing_city', $this->get_billing_city());
         update_user_meta($this->get_id(), 'billing_address_1', $this->get_billing_address());
         update_user_meta($this->get_id(), 'billing_address_2', $this->get_billing_address_2());
         update_user_meta($this->get_id(), 'billing_state', $this->get_billing_state());
         update_user_meta($this->get_id(), 'billing_country', $this->get_billing_country());
         update_user_meta($this->get_id(), 'shipping_first_name', $this->get_shipping_first_name());
         update_user_meta($this->get_id(), 'shipping_last_name', $this->get_shipping_last_name());
         update_user_meta($this->get_id(), 'shipping_company', $this->get_shipping_company());
         update_user_meta($this->get_id(), 'shipping_postcode', $this->get_shipping_postcode());
         update_user_meta($this->get_id(), 'shipping_city', $this->get_shipping_city());
         update_user_meta($this->get_id(), 'shipping_address_1', $this->get_shipping_address());
         update_user_meta($this->get_id(), 'shipping_address_2', $this->get_shipping_address_2());
         update_user_meta($this->get_id(), 'shipping_state', $this->get_shipping_state());
         update_user_meta($this->get_id(), 'shipping_country', $this->get_shipping_country());
         update_user_meta($this->get_id(), 'paying_customer', $this->get_is_paying_customer());
         update_user_meta($this->get_id(), 'last_update', $this->get_date_modified());
         update_user_meta($this->get_id(), 'first_name', $this->get_first_name());
         update_user_meta($this->get_id(), 'last_name', $this->get_last_name());
         wp_update_user(array('ID' => $this->get_id(), 'role' => $this->get_role()));
         $wp_user = new WP_User($this->get_id());
         $this->set_date_created(strtotime($wp_user->user_registered));
         $this->set_date_modified(get_user_meta($this->get_id(), 'last_update', true));
         $this->read_meta_data();
     }
 }
 /**
  * Create a customer
  *
  * Based on WC_API_Customers::create_customer
  *
  * @since 3.0.0
  * @param array $data
  * @param array $options
  * @return int|WP_Error
  */
 public function create_customer($data, $options)
 {
     try {
         /**
          * Filter new customer data from CSV
          *
          * @since 3.0.0
          * @param array $data
          * @param array $options
          * @param object $this
          */
         $data = apply_filters('wc_csv_import_suite_create_customer_data', $data, $options, $this);
         // checks if the email is missing.
         if (!isset($data['email'])) {
             throw new WC_CSV_Import_Suite_Import_Exception('wc_csv_import_suite_missing_customer_email', sprintf(__('Missing parameter %s', 'woocommerce-csv-import-suite'), 'email'));
         }
         // sets the username.
         $data['username'] = !empty($data['username']) ? $data['username'] : '';
         // sets the password.
         $data['password'] = !empty($data['password']) ? $data['password'] : '';
         // force generate the password if not provided
         if (!$data['password']) {
             add_filter('pre_option_woocommerce_registration_generate_password', array($this, 'force_password_generation'), 1);
         }
         // enable/disable new customer emails
         $send_welcome_emails = isset($options['send_welcome_emails']) && $options['send_welcome_emails'];
         $enabled = $send_welcome_emails ? '__return_true' : '__return_false';
         add_filter('woocommerce_email_enabled_customer_new_account', $enabled, 1000);
         // attempts to create the new customer
         $id = wc_create_new_customer($data['email'], $data['username'], $data['password']);
         // remove send_welcome_emails filter
         remove_filter('woocommerce_email_enabled_customer_new_account', $enabled, 1000);
         // remove forced password generation
         if (!$data['password']) {
             remove_filter('pre_option_woocommerce_registration_generate_password', array($this, 'force_password_generation'), 1);
         }
         // checks for an error in the customer creation.
         if (is_wp_error($id)) {
             throw new WC_CSV_Import_Suite_Import_Exception($id->get_error_code(), $id->get_error_message());
         }
         // update customer data.
         $this->update_customer_data($id, $data, $options);
         /**
          * Triggered after a customer has been created via CSV import
          *
          * @since 3.0.0
          * @param int $id Customer ID
          * @param array $data Data from CSV
          * @param array $options Import options
          */
         do_action('wc_csv_import_suite_create_customer', $id, $data, $options);
         return $id;
     } catch (WC_CSV_Import_Suite_Import_Exception $e) {
         return new WP_Error($e->getErrorCode(), $e->getMessage());
     }
 }
 /**
  * Create a customer
  *
  * @since 2.2
  * @param array $data
  * @return array
  */
 public function create_customer($data)
 {
     $data = isset($data['customer']) ? $data['customer'] : array();
     // Checks with can create new users.
     if (!current_user_can('create_users')) {
         return new WP_Error('woocommerce_api_user_cannot_create_customer', __('You do not have permission to create this customer', 'woocommerce'), array('status' => 401));
     }
     $data = apply_filters('woocommerce_api_create_customer_data', $data, $this);
     // Checks with the email is missing.
     if (!isset($data['email'])) {
         return new WP_Error('woocommerce_api_missing_customer_email', sprintf(__('Missing parameter %s', 'woocommerce'), 'email'), array('status' => 400));
     }
     // Sets the username.
     if (!isset($data['username'])) {
         $data['username'] = '';
     }
     // Sets the password.
     if (!isset($data['password'])) {
         $data['password'] = wp_generate_password();
     }
     // Attempts to create the new customer
     $id = wc_create_new_customer($data['email'], $data['username'], $data['password']);
     // Checks for an error in the customer creation.
     if (is_wp_error($id)) {
         return new WP_Error('woocommerce_api_cannot_create_customer', $id->get_error_message(), array('status' => 400));
     }
     // Added customer data.
     $this->update_customer_data($id, $data);
     do_action('woocommerce_api_create_customer', $id, $data);
     $this->server->send_status(201);
     return $this->get_customer($id);
 }
 /**
  * Process the registration form.
  */
 public static function process_registration()
 {
     $nonce_value = isset($_POST['_wpnonce']) ? $_POST['_wpnonce'] : '';
     $nonce_value = isset($_POST['woocommerce-register-nonce']) ? $_POST['woocommerce-register-nonce'] : $nonce_value;
     if (!empty($_POST['register']) && wp_verify_nonce($nonce_value, 'woocommerce-register')) {
         $username = '******' === get_option('woocommerce_registration_generate_username') ? $_POST['username'] : '';
         $password = '******' === get_option('woocommerce_registration_generate_password') ? $_POST['password'] : '';
         $email = $_POST['email'];
         try {
             $validation_error = new WP_Error();
             $validation_error = apply_filters('woocommerce_process_registration_errors', $validation_error, $username, $password, $email);
             if ($validation_error->get_error_code()) {
                 throw new Exception($validation_error->get_error_message());
             }
             // Anti-spam trap
             if (!empty($_POST['email_2'])) {
                 throw new Exception(__('Anti-spam field was filled in.', 'woocommerce'));
             }
             $new_customer = wc_create_new_customer(sanitize_email($email), wc_clean($username), $password);
             if (is_wp_error($new_customer)) {
                 throw new Exception($new_customer->get_error_message());
             }
             if (apply_filters('woocommerce_registration_auth_new_customer', true, $new_customer)) {
                 wc_set_customer_auth_cookie($new_customer);
             }
             wp_safe_redirect(apply_filters('woocommerce_registration_redirect', wp_get_referer() ? wp_get_referer() : wc_get_page_permalink('myaccount')));
             exit;
         } catch (Exception $e) {
             wc_add_notice('<strong>' . __('Error:', 'woocommerce') . '</strong> ' . $e->getMessage(), 'error');
         }
     }
 }
/**
 * @deprecated
 */
function woocommerce_create_new_customer($email, $username = '', $password = '')
{
    return wc_create_new_customer($email, $username, $password);
}
 /**
  * Process the checkout after the confirm order button is pressed
  *
  * @access public
  * @return void
  */
 public function process_checkout()
 {
     global $wpdb, $current_user;
     wp_verify_nonce($_POST['_wpnonce'], 'woocommerce-process_checkout');
     if (!defined('WOOCOMMERCE_CHECKOUT')) {
         define('WOOCOMMERCE_CHECKOUT', true);
     }
     // Prevent timeout
     @set_time_limit(0);
     do_action('woocommerce_before_checkout_process');
     if (sizeof(WC()->cart->get_cart()) == 0) {
         wc_add_notice(sprintf(__('Sorry, your session has expired. <a href="%s" class="wc-backward">Return to homepage</a>', 'woocommerce'), home_url()), 'error');
     }
     do_action('woocommerce_checkout_process');
     // Checkout fields (not defined in checkout_fields)
     $this->posted['terms'] = isset($_POST['terms']) ? 1 : 0;
     $this->posted['createaccount'] = isset($_POST['createaccount']) ? 1 : 0;
     $this->posted['payment_method'] = isset($_POST['payment_method']) ? stripslashes($_POST['payment_method']) : '';
     $this->posted['shipping_method'] = isset($_POST['shipping_method']) ? $_POST['shipping_method'] : '';
     $this->posted['ship_to_different_address'] = isset($_POST['ship_to_different_address']) ? true : false;
     if (isset($_POST['shiptobilling'])) {
         _deprecated_argument('WC_Checkout::process_checkout()', '2.1', 'The "shiptobilling" field is deprecated. THe template files are out of date');
         $this->posted['ship_to_different_address'] = $_POST['shiptobilling'] ? false : true;
     }
     // Ship to billing only option
     if (WC()->cart->ship_to_billing_address_only()) {
         $this->posted['ship_to_different_address'] = false;
     }
     // Update customer shipping and payment method to posted method
     $chosen_shipping_methods = WC()->session->get('chosen_shipping_methods');
     if (isset($this->posted['shipping_method']) && is_array($this->posted['shipping_method'])) {
         foreach ($this->posted['shipping_method'] as $i => $value) {
             $chosen_shipping_methods[$i] = wc_clean($value);
         }
     }
     WC()->session->set('chosen_shipping_methods', $chosen_shipping_methods);
     WC()->session->set('chosen_payment_method', $this->posted['payment_method']);
     // Note if we skip shipping
     $skipped_shipping = false;
     // Get posted checkout_fields and do validation
     foreach ($this->checkout_fields as $fieldset_key => $fieldset) {
         // Skip shipping if not needed
         if ($fieldset_key == 'shipping' && ($this->posted['ship_to_different_address'] == false || !WC()->cart->needs_shipping())) {
             $skipped_shipping = true;
             continue;
         }
         // Ship account if not needed
         if ($fieldset_key == 'account' && (is_user_logged_in() || $this->must_create_account == false && empty($this->posted['createaccount']))) {
             continue;
         }
         foreach ($fieldset as $key => $field) {
             if (!isset($field['type'])) {
                 $field['type'] = 'text';
             }
             // Get Value
             switch ($field['type']) {
                 case "checkbox":
                     $this->posted[$key] = isset($_POST[$key]) ? 1 : 0;
                     break;
                 case "multiselect":
                     $this->posted[$key] = isset($_POST[$key]) ? implode(', ', array_map('wc_clean', $_POST[$key])) : '';
                     break;
                 case "textarea":
                     $this->posted[$key] = isset($_POST[$key]) ? wp_strip_all_tags(wp_check_invalid_utf8(stripslashes($_POST[$key]))) : '';
                     break;
                 default:
                     $this->posted[$key] = isset($_POST[$key]) ? wc_clean($_POST[$key]) : '';
                     break;
             }
             // Hooks to allow modification of value
             $this->posted[$key] = apply_filters('woocommerce_process_checkout_' . sanitize_title($field['type']) . '_field', $this->posted[$key]);
             $this->posted[$key] = apply_filters('woocommerce_process_checkout_field_' . $key, $this->posted[$key]);
             // Validation: Required fields
             if (isset($field['required']) && $field['required'] && empty($this->posted[$key])) {
                 wc_add_notice('<strong>' . $field['label'] . '</strong> ' . __('is a required field.', 'woocommerce'), 'error');
             }
             if (!empty($this->posted[$key])) {
                 // Validation rules
                 if (!empty($field['validate']) && is_array($field['validate'])) {
                     foreach ($field['validate'] as $rule) {
                         switch ($rule) {
                             case 'postcode':
                                 $this->posted[$key] = strtoupper(str_replace(' ', '', $this->posted[$key]));
                                 if (!WC_Validation::is_postcode($this->posted[$key], $_POST[$fieldset_key . '_country'])) {
                                     wc_add_notice(__('Please enter a valid postcode/ZIP.', 'woocommerce'), 'error');
                                 } else {
                                     $this->posted[$key] = wc_format_postcode($this->posted[$key], $_POST[$fieldset_key . '_country']);
                                 }
                                 break;
                             case 'phone':
                                 $this->posted[$key] = wc_format_phone_number($this->posted[$key]);
                                 if (!WC_Validation::is_phone($this->posted[$key])) {
                                     wc_add_notice('<strong>' . $field['label'] . '</strong> ' . __('is not a valid phone number.', 'woocommerce'), 'error');
                                 }
                                 break;
                             case 'email':
                                 $this->posted[$key] = strtolower($this->posted[$key]);
                                 if (!is_email($this->posted[$key])) {
                                     wc_add_notice('<strong>' . $field['label'] . '</strong> ' . __('is not a valid email address.', 'woocommerce'), 'error');
                                 }
                                 break;
                             case 'state':
                                 // Get valid states
                                 $valid_states = WC()->countries->get_states($_POST[$fieldset_key . '_country']);
                                 if ($valid_states) {
                                     $valid_state_values = array_flip(array_map('strtolower', $valid_states));
                                 }
                                 // Convert value to key if set
                                 if (isset($valid_state_values[strtolower($this->posted[$key])])) {
                                     $this->posted[$key] = $valid_state_values[strtolower($this->posted[$key])];
                                 }
                                 // Only validate if the country has specific state options
                                 if ($valid_states && sizeof($valid_states) > 0) {
                                     if (!in_array($this->posted[$key], array_keys($valid_states))) {
                                         wc_add_notice('<strong>' . $field['label'] . '</strong> ' . __('is not valid. Please enter one of the following:', 'woocommerce') . ' ' . implode(', ', $valid_states), 'error');
                                     }
                                 }
                                 break;
                         }
                     }
                 }
             }
         }
     }
     // Update customer location to posted location so we can correctly check available shipping methods
     if (isset($this->posted['billing_country'])) {
         WC()->customer->set_country($this->posted['billing_country']);
     }
     if (isset($this->posted['billing_state'])) {
         WC()->customer->set_state($this->posted['billing_state']);
     }
     if (isset($this->posted['billing_postcode'])) {
         WC()->customer->set_postcode($this->posted['billing_postcode']);
     }
     // Shipping Information
     if (!$skipped_shipping) {
         // Update customer location to posted location so we can correctly check available shipping methods
         if (isset($this->posted['shipping_country'])) {
             WC()->customer->set_shipping_country($this->posted['shipping_country']);
         }
         if (isset($this->posted['shipping_state'])) {
             WC()->customer->set_shipping_state($this->posted['shipping_state']);
         }
         if (isset($this->posted['shipping_postcode'])) {
             WC()->customer->set_shipping_postcode($this->posted['shipping_postcode']);
         }
     } else {
         // Update customer location to posted location so we can correctly check available shipping methods
         if (isset($this->posted['billing_country'])) {
             WC()->customer->set_shipping_country($this->posted['billing_country']);
         }
         if (isset($this->posted['billing_state'])) {
             WC()->customer->set_shipping_state($this->posted['billing_state']);
         }
         if (isset($this->posted['billing_postcode'])) {
             WC()->customer->set_shipping_postcode($this->posted['billing_postcode']);
         }
     }
     // Update cart totals now we have customer address
     WC()->cart->calculate_totals();
     // Terms
     if (!isset($_POST['woocommerce_checkout_update_totals']) && empty($this->posted['terms']) && wc_get_page_id('terms') > 0) {
         wc_add_notice(__('You must accept our Terms &amp; Conditions.', 'woocommerce'), 'error');
     }
     if (WC()->cart->needs_shipping()) {
         if (!in_array(WC()->customer->get_shipping_country(), array_keys(WC()->countries->get_shipping_countries()))) {
             wc_add_notice(sprintf(__('Unfortunately <strong>we do not ship to %s</strong>. Please enter an alternative shipping address.', 'woocommerce'), WC()->countries->shipping_to_prefix() . ' ' . WC()->customer->get_shipping_country()), 'error');
         }
         // Validate Shipping Methods
         $packages = WC()->shipping->get_packages();
         $this->shipping_methods = WC()->session->get('chosen_shipping_methods');
         foreach ($packages as $i => $package) {
             if (!isset($package['rates'][$this->shipping_methods[$i]])) {
                 wc_add_notice(__('Invalid shipping method.', 'woocommerce'), 'error');
                 $this->shipping_methods[$i] = '';
             }
         }
     }
     if (WC()->cart->needs_payment()) {
         // Payment Method
         $available_gateways = WC()->payment_gateways->get_available_payment_gateways();
         if (!isset($available_gateways[$this->posted['payment_method']])) {
             $this->payment_method = '';
             wc_add_notice(__('Invalid payment method.', 'woocommerce'), 'error');
         } else {
             $this->payment_method = $available_gateways[$this->posted['payment_method']];
             $this->payment_method->validate_fields();
         }
     }
     // Action after validation
     do_action('woocommerce_after_checkout_validation', $this->posted);
     if (!isset($_POST['woocommerce_checkout_update_totals']) && wc_notice_count('error') == 0) {
         try {
             // Customer accounts
             $this->customer_id = apply_filters('woocommerce_checkout_customer_id', get_current_user_id());
             if (!is_user_logged_in() && ($this->must_create_account || !empty($this->posted['createaccount']))) {
                 $username = !empty($this->posted['account_username']) ? $this->posted['account_username'] : '';
                 $password = !empty($this->posted['account_password']) ? $this->posted['account_password'] : '';
                 $new_customer = wc_create_new_customer($this->posted['billing_email'], $username, $password);
                 if (is_wp_error($new_customer)) {
                     throw new Exception($new_customer->get_error_message());
                 }
                 $this->customer_id = $new_customer;
                 wc_set_customer_auth_cookie($this->customer_id);
                 // As we are now logged in, checkout will need to refresh to show logged in data
                 WC()->session->set('reload_checkout', true);
                 // Add customer info from other billing fields
                 if ($this->posted['billing_first_name'] && apply_filters('woocommerce_checkout_update_customer_data', true, $this)) {
                     $userdata = array('ID' => $this->customer_id, 'first_name' => $this->posted['billing_first_name'] ? $this->posted['billing_first_name'] : '', 'last_name' => $this->posted['billing_last_name'] ? $this->posted['billing_last_name'] : '', 'display_name' => $this->posted['billing_first_name'] ? $this->posted['billing_first_name'] : '');
                     wp_update_user(apply_filters('woocommerce_checkout_customer_userdata', $userdata, $this));
                 }
             }
             // Do a final stock check at this point
             $this->check_cart_items();
             // Abort if errors are present
             if (wc_notice_count('error') > 0) {
                 throw new Exception();
             }
             $order_id = $this->create_order();
             do_action('woocommerce_checkout_order_processed', $order_id, $this->posted);
             // Process payment
             if (WC()->cart->needs_payment()) {
                 // Store Order ID in session so it can be re-used after payment failure
                 WC()->session->order_awaiting_payment = $order_id;
                 // Process Payment
                 $result = $available_gateways[$this->posted['payment_method']]->process_payment($order_id);
                 // Redirect to success/confirmation/payment page
                 if ($result['result'] == 'success') {
                     $result = apply_filters('woocommerce_payment_successful_result', $result, $order_id);
                     if (is_ajax()) {
                         echo '<!--WC_START-->' . json_encode($result) . '<!--WC_END-->';
                         exit;
                     } else {
                         wp_redirect($result['redirect']);
                         exit;
                     }
                 }
             } else {
                 if (empty($order)) {
                     $order = new WC_Order($order_id);
                 }
                 // No payment was required for order
                 $order->payment_complete();
                 // Empty the Cart
                 WC()->cart->empty_cart();
                 // Get redirect
                 $return_url = $order->get_checkout_order_received_url();
                 // Redirect to success/confirmation/payment page
                 if (is_ajax()) {
                     echo '<!--WC_START-->' . json_encode(array('result' => 'success', 'redirect' => apply_filters('woocommerce_checkout_no_payment_needed_redirect', $return_url, $order))) . '<!--WC_END-->';
                     exit;
                 } else {
                     wp_safe_redirect(apply_filters('woocommerce_checkout_no_payment_needed_redirect', $return_url, $order));
                     exit;
                 }
             }
         } catch (Exception $e) {
             if (!empty($e)) {
                 wc_add_notice($e->getMessage(), 'error');
             }
         }
     }
     // endif
     // If we reached this point then there were errors
     if (is_ajax()) {
         ob_start();
         wc_print_notices();
         $messages = ob_get_clean();
         echo '<!--WC_START-->' . json_encode(array('result' => 'failure', 'messages' => $messages, 'refresh' => isset(WC()->session->refresh_totals) ? 'true' : 'false', 'reload' => isset(WC()->session->reload_checkout) ? 'true' : 'false')) . '<!--WC_END-->';
         unset(WC()->session->refresh_totals, WC()->session->reload_checkout);
         exit;
     }
 }
 /**
  * Create a customer
  *
  * @since 2.2
  * @param array $data
  * @return array
  */
 public function create_customer($data)
 {
     try {
         if (!isset($data['customer'])) {
             throw new WC_API_Exception('woocommerce_api_missing_customer_data', sprintf(__('No %1$s data specified to create %1$s', 'woocommerce'), 'customer'), 400);
         }
         $data = $data['customer'];
         // Checks with can create new users.
         if (!current_user_can('create_users')) {
             throw new WC_API_Exception('woocommerce_api_user_cannot_create_customer', __('You do not have permission to create this customer', 'woocommerce'), 401);
         }
         $data = apply_filters('woocommerce_api_create_customer_data', $data, $this);
         // Checks with the email is missing.
         if (!isset($data['email'])) {
             throw new WC_API_Exception('woocommerce_api_missing_customer_email', sprintf(__('Missing parameter %s', 'woocommerce'), 'email'), 400);
         }
         // Sets the username.
         $data['username'] = !empty($data['username']) ? $data['username'] : '';
         // Sets the password.
         $data['password'] = !empty($data['password']) ? $data['password'] : '';
         // Attempts to create the new customer
         $id = wc_create_new_customer($data['email'], $data['username'], $data['password']);
         // Checks for an error in the customer creation.
         if (is_wp_error($id)) {
             throw new WC_API_Exception($id->get_error_code(), $id->get_error_message(), 400);
         }
         // Added customer data.
         $this->update_customer_data($id, $data);
         do_action('woocommerce_api_create_customer', $id, $data);
         $this->server->send_status(201);
         return $this->get_customer($id);
     } catch (WC_API_Exception $e) {
         return new WP_Error($e->getErrorCode(), $e->getMessage(), array('status' => $e->getCode()));
     }
 }
 /**
  * Simple create.
  */
 public function create()
 {
     if ('user' === $this->_meta_type) {
         $content_id = wc_create_new_customer($this->get_content(), 'username-' . time(), 'hunter2');
     } else {
         $content_id = wp_insert_post(array('post_title' => $this->get_content()));
     }
     if ($content_id) {
         $this->_data['id'] = $content_id;
     }
 }
 /**
  * Regular checkout process
  */
 function regular_checkout($posted)
 {
     if ($posted['payment_method'] == 'paypal_express' && wc_notice_count('error') == 0) {
         if (!is_user_logged_in() && (get_option('woocommerce_enable_guest_checkout') != 'yes' || isset($posted['createaccount']) && $posted['createaccount'] == 1)) {
             $this->customer_id = apply_filters('woocommerce_checkout_customer_id', get_current_user_id());
             $username = !empty($posted['account_username']) ? $posted['account_username'] : '';
             $password = !empty($posted['account_password']) ? $posted['account_password'] : '';
             $new_customer = wc_create_new_customer($posted['billing_email'], $username, $password);
             if (is_wp_error($new_customer)) {
                 throw new Exception($new_customer->get_error_message());
             }
             $this->customer_id = $new_customer;
             wc_set_customer_auth_cookie($this->customer_id);
             // As we are now logged in, checkout will need to refresh to show logged in data
             WC()->session->set('reload_checkout', true);
             // Also, recalculate cart totals to reveal any role-based discounts that were unavailable before registering
             WC()->cart->calculate_totals();
             // Add customer info from other billing fields
             if ($posted['billing_first_name'] && apply_filters('woocommerce_checkout_update_customer_data', true, $this)) {
                 $userdata = array('ID' => $this->customer_id, 'first_name' => $posted['billing_first_name'] ? $posted['billing_first_name'] : '', 'last_name' => $posted['billing_last_name'] ? $posted['billing_last_name'] : '', 'display_name' => $posted['billing_first_name'] ? $posted['billing_first_name'] : '');
                 wp_update_user(apply_filters('woocommerce_checkout_customer_userdata', $userdata, $this));
             }
         }
         $this->set_session('checkout_form', serialize($posted));
         $this->paypal_express_checkout($posted);
         return;
     }
 }
 /**
  * Create a new customer account if needed.
  * @param  array $data
  * @throws Exception
  */
 protected function process_customer($data)
 {
     $customer_id = get_current_user_id();
     if (!is_user_logged_in() && ($this->is_registration_required() || !empty($data['createaccount']))) {
         $username = !empty($data['account_username']) ? $data['account_username'] : '';
         $password = !empty($data['account_password']) ? $data['account_password'] : '';
         $customer_id = wc_create_new_customer($data['billing_email'], $username, $password);
         if (is_wp_error($customer_id)) {
             throw new Exception($customer_id->get_error_message());
         }
         wp_set_current_user($customer_id);
         wc_set_customer_auth_cookie($customer_id);
         // As we are now logged in, checkout will need to refresh to show logged in data
         WC()->session->set('reload_checkout', true);
         // Also, recalculate cart totals to reveal any role-based discounts that were unavailable before registering
         WC()->cart->calculate_totals();
     }
     // Add customer info from other fields.
     if ($customer_id && apply_filters('woocommerce_checkout_update_customer_data', true, $this)) {
         $customer = new WC_Customer($customer_id);
         $customer->set_first_name($data['billing_first_name']);
         $customer->set_last_name($data['billing_last_name']);
         foreach ($data as $key => $value) {
             if (is_callable(array($customer, "set_{$key}"))) {
                 $customer->{"set_{$key}"}($value);
             }
         }
         $customer->save();
     }
     do_action('woocommerce_checkout_update_user_meta', $customer_id, $data);
 }
 private function get_user_id_by_login($login)
 {
     $customerId = get_user_by("login", $login);
     if (!$customerId) {
         $password = wp_generate_password();
         $customerId = wc_create_new_customer($login, wc_clean($login), $password);
     } else {
         $customerId = $customerId->data->ID;
     }
     return $customerId;
 }