You are here

class OrderAdminController in Ubercart 8.4

Controller routines for order routes.

Hierarchy

Expanded class hierarchy of OrderAdminController

File

uc_order/src/Controller/OrderAdminController.php, line 18

Namespace

Drupal\uc_order\Controller
View source
class OrderAdminController extends ControllerBase implements ContainerInjectionInterface {

  /**
   * The database service.
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected $database;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('database'));
  }

  /**
   * Constructs an OrderAdminController object.
   *
   * @param \Drupal\Core\Database\Connection $database
   *   A database connection.
   */
  public function __construct(Connection $database) {
    $this->database = $database;
  }

  /**
   * Displays a form to select a previously entered address.
   */
  public function addressBook(Request $request) {
    $uid = intval($request->request
      ->get('uid'));
    $type = $request->request
      ->get('type');
    $func = $request->request
      ->get('func');
    $form = $this
      ->formBuilder()
      ->getForm('\\Drupal\\uc_order\\Form\\AddressBookForm', $uid, $type, $func);
    return new Response(\Drupal::service('renderer')
      ->render($form));
  }

  /**
   * Presents the customer search results and let one of them be chosen.
   */
  public function selectCustomer(Request $request, $email = NULL, $operation = NULL) {
    $build = [];
    $options = NULL;

    // Return the search results and let them pick one!
    switch ($operation) {
      case 'search':
        $first_name = str_replace('*', '%', $this->database
          ->escapeLike($request->request
          ->get('first_name')));
        $last_name = str_replace('*', '%', $this->database
          ->escapeLike($request->request
          ->get('last_name')));
        $email = str_replace('*', '%', $this->database
          ->escapeLike($request->request
          ->get('email')));
        $query = $this->database
          ->select('users_field_data', 'u')
          ->distinct();
        $query
          ->leftJoin('uc_orders', 'o', 'u.uid = o.uid');
        $query
          ->fields('u', [
          'uid',
          'mail',
        ])
          ->fields('o', [
          'billing_first_name',
          'billing_last_name',
        ])
          ->condition('u.uid', 0, '>')
          ->orderBy('o.billing_last_name');
        if ($first_name && $first_name !== '%') {
          $query
            ->condition('o.billing_first_name', $first_name, 'LIKE');
        }
        if ($last_name && $last_name !== '%') {
          $query
            ->condition('o.billing_last_name', $last_name, 'LIKE');
        }
        if ($email && $email !== '%') {
          $query
            ->condition((new Condition('OR'))
            ->condition('o.primary_email', $email, 'LIKE')
            ->condition('u.mail', $email, 'LIKE'));
        }
        $result = $query
          ->execute();
        $options = [];
        foreach ($result as $user) {
          if (empty($user->billing_first_name) && empty($user->billing_last_name)) {
            $name = '';
          }
          else {
            $name = $user->billing_last_name . ', ' . $user->billing_first_name . ' ';
          }
          $options[$user->uid . ':' . $user->mail] = $name . '(' . $user->mail . ')';
        }
        if (count($options) == 0) {
          $build['description'] = [
            '#prefix' => '<p>',
            '#markup' => $this
              ->t('Search returned no results.'),
            '#suffix' => '</p>',
          ];
          $options = NULL;
        }
        else {
          $build['description'] = [
            '#prefix' => '<p>',
            '#markup' => $this
              ->t('Search returned the following:'),
            '#suffix' => '</p>',
          ];
        }
        break;
      case 'new':
        if ($request->request
          ->get('check') == TRUE) {

          // Check to see if the e-mail address for a new user is unique.
          $email = SafeMarkup::checkPlain($request->request
            ->get('email'));
          $build['email'] = [
            '#markup' => '',
          ];
          $result = $this->database
            ->query("SELECT uid, mail FROM {users_field_data} WHERE mail = :mail", [
            ':mail' => $email,
          ]);
          if ($user_field_data = $result
            ->fetchObject()) {
            $build['#attached']['drupalSettings'] = [
              'userId' => $user_field_data->uid,
              'userEmail' => $user_field_data->mail,
            ];
            $build['email']['#markup'] .= $this
              ->t('An account already exists for that e-mail.') . '<br /><br />';
            $build['email']['#markup'] .= '<b>' . $this
              ->t('Use this account now?') . '</b><br />' . $this
              ->t('User @uid - @mail', [
              '@uid' => $user_field_data->uid,
              '@mail' => $user_field_data->mail,
            ]) . ' <input type="button" id="select-existing-customer" value="' . $this
              ->t('Apply') . '" /><br /><br /><hr /><br/>';
          }
          else {
            $name = uc_store_email_to_username($email);
            $fields = [
              'name' => $name,
              'mail' => $email,
              // @todo Replace the following line with:
              // 'pass' => \Drupal::service('password_generator')->generate(),
              // when Drupal 9.1 becomes the lowest-supported version of Drupal.
              // @see https://www.drupal.org/project/ubercart/issues/3217319
              'pass' => user_password(6),
              'status' => $this
                ->config('uc_cart.settings')
                ->get('new_customer_status_active') ? 1 : 0,
            ];
            $account = User::create($fields);
            $account
              ->save();
            if ($request->request
              ->get('sendmail') == 'true') {

              // Manually set the password so it appears in the e-mail.
              $account->password = $fields['pass'];

              // Send the e-mail through the user module.
              \Drupal::service('plugin.manager.mail')
                ->mail('user', 'register_admin_created', $email, uc_store_mail_recipient_langcode($email), [
                'account' => $account,
              ], uc_store_email_from());
              $build['email']['#markup'] .= $this
                ->t('Account details sent to e-mail provided.<br /><br /><strong>Username:</strong> @username<br /><strong>Password:</strong> @password', [
                '@username' => $fields['name'],
                '@password' => $fields['pass'],
              ]) . '<br /><br />';
            }
            $build['#attached']['drupalSettings'] = [
              'userId' => $account
                ->id(),
              'userEmail' => $account
                ->getEmail(),
            ];
            $build['result'] = [
              '#markup' => '<strong>' . $this
                ->t('Use this account now?') . '</strong><br />' . $this
                ->t('User @uid - @mail', [
                '@uid' => $account
                  ->id(),
                '@mail' => $account
                  ->getEmail(),
              ]) . ' <input type="button" ' . 'id="select-existing-customer" value="' . $this
                ->t('Apply') . '" /><br /><br /><hr /><br/>',
            ];
          }
        }
        break;
      default:
        break;
    }
    $build['customer_select_form'] = $this
      ->formBuilder()
      ->getForm('\\Drupal\\uc_order\\Form\\SelectCustomerForm', $operation, $options);
    return new Response(\Drupal::service('renderer')
      ->render($build));
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityManager protected property The entity manager.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityManager Deprecated protected function Retrieves the entity manager service.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
ControllerBase::state protected function Returns the state storage service.
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
OrderAdminController::$database protected property The database service.
OrderAdminController::addressBook public function Displays a form to select a previously entered address.
OrderAdminController::create public static function Instantiates a new instance of this class. Overrides ControllerBase::create
OrderAdminController::selectCustomer public function Presents the customer search results and let one of them be chosen.
OrderAdminController::__construct public function Constructs an OrderAdminController object.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.