You are here

public function ChildDeprecatedController::registerReturn in Bakery Single Sign-On System 8.2

Custom return for child registration process.

Redirects to the homepage on success or to the register page if there was a problem.

File

src/Controller/ChildDeprecatedController.php, line 49

Class

ChildDeprecatedController

Namespace

Drupal\bakery\Controller

Code

public function registerReturn() {
  $cookie = $this->kitchen
    ->taste(Kitchen::OATMEAL);
  if ($cookie) {

    // Valid cookie, now destroy it.
    $this->kitchen
      ->eat(Kitchen::OATMEAL);

    // Destination in cookie was set before user left this site, extract it to
    // be sure destination workflow is followed.
    if (empty($cookie['data']['destination'])) {
      $destination = '<front>';
    }
    else {
      $destination = $cookie['data']['destination'];
    }
    $errors = $cookie['data']['errors'];
    if (empty($errors)) {
      $this
        ->messenger()
        ->addMessage($this
        ->t('Registration successful. You are now logged in.'));

      // Redirect to destination.
      $this
        ->redirect($destination);
    }
    else {
      if (!empty($errors['register'])) {
        $this
          ->messenger()
          ->addError($this
          ->t('Registration is not enabled on @master. Please contact a site administrator.', [
          '@master' => $this
            ->config('bakery.settings')
            ->get('bakery_master'),
        ]));
        $this
          ->getLogger('bakery')
          ->error('Master Bakery site user registration is disabled', []);
      }
      if (!empty($errors['validate'])) {

        // If the user must validate their email then we need to create an
        // account for them on the child site.
        // Save a stub account so we have a child UID to send.
        $language = $this
          ->languageManager()
          ->getCurrentLanguage()
          ->getId();
        $account = User::create();

        // Mandatory settings.
        $account
          ->setPassword(user_password());
        $account
          ->enforceIsNew();
        $account
          ->setEmail($cookie['data']['mail']);

        // This username must be unique and accept only a-Z,0-9, - _ @ .
        $account
          ->setUsername($cookie['name']);

        // Optional settings.
        $account
          ->set('init', $this->kitchen
          ->generateInitField($cookie['data']['uid']));
        $account
          ->set('langcode', $language);
        $account
          ->set('preferred_langcode', $language);
        $account
          ->set('preferred_admin_langcode', $language);

        // $user->set("setting_name", 'setting_value');.
        $account
          ->activate();

        // Save user.
        $account
          ->save();

        // Notify the user that they need to validate their email.
        _user_mail_notify('register_no_approval_required', $account);
        unset($_SESSION['bakery']['register']);
        $this
          ->messenger()
          ->addMessage($this
          ->t('A welcome message with further instructions has been sent to your e-mail address.'));
      }
      if (!empty($errors['name'])) {
        $this
          ->messenger()
          ->addError($this
          ->t('Name is already taken.'));
      }
      if (!empty($errors['mail'])) {
        $this
          ->messenger()
          ->addError($this
          ->t('E-mail address is already registered.'));
      }
      if (!empty($errors['mail_denied'])) {
        $this
          ->messenger()
          ->addError($this
          ->t('The e-mail address has been denied access..'));
      }
      if (!empty($errors['name_denied'])) {
        $this
          ->messenger()
          ->addError($this
          ->t('The name has been denied access..'));
      }

      // There are errors so keep user on registration page.
      $this
        ->redirect('user.register');
    }
  }
  throw new AccessDeniedHttpException();
}