Пример #1
0
 /**
  * Link a completed sale to a user.
  *
  * @param \Drupal\uc_order\Entity\Order $order
  *   The order entity that has just been completed.
  */
 protected function completeSaleAccount($order)
 {
     // Order already has a user ID, so the user was logged in during checkout.
     if ($order->getOwnerId()) {
         $order->data->complete_sale = 'logged_in';
         return;
     }
     // Email address matches an existing account.
     if ($account = user_load_by_mail($order->getEmail())) {
         $order->setOwner($account);
         $order->data->complete_sale = 'existing_user';
         return;
     }
     // Set up a new user.
     $cart_config = \Drupal::config('uc_cart.settings');
     $fields = array('name' => uc_store_email_to_username($order->getEmail()), 'mail' => $order->getEmail(), 'init' => $order->getEmail(), 'pass' => user_password(), 'roles' => array(), 'status' => $cart_config->get('new_customer_status_active') ? 1 : 0);
     // Override the username, if specified.
     if (isset($order->data->new_user_name)) {
         $fields['name'] = $order->data->new_user_name;
     }
     // Create the account.
     $account = User::create($fields);
     $account->save();
     // Override the password, if specified.
     if (isset($order->data->new_user_hash)) {
         db_query('UPDATE {users_field_data} SET pass = :hash WHERE uid = :uid', [':hash' => $order->data->new_user_hash, ':uid' => $account->id()]);
         $account->password = t('Your password');
     } else {
         $account->password = $fields['pass'];
         $order->password = $fields['pass'];
     }
     // Send the customer their account details if enabled.
     if ($cart_config->get('new_customer_email')) {
         $type = $cart_config->get('new_customer_status_active') ? 'register_no_approval_required' : 'register_pending_approval';
         \Drupal::service('plugin.manager.mail')->mail('user', $type, $order->getEmail(), uc_store_mail_recipient_langcode($order->getEmail()), array('account' => $account), uc_store_email_from());
     }
     $order->setOwner($account);
     $order->data->new_user_name = $fields['name'];
     $order->data->complete_sale = 'new_user';
 }