Same name and namespace in other branches
  1. 8.9.x core/modules/user/src/RegisterForm.php \Drupal\user\RegisterForm::save()
  2. 9 core/modules/user/src/RegisterForm.php \Drupal\user\RegisterForm::save()

File

core/modules/user/src/RegisterForm.php, line 92

Class

RegisterForm
Form handler for the user register forms.

Namespace

Drupal\user

Code

public function save(array $form, FormStateInterface $form_state) {
  $account = $this->entity;
  $pass = $account
    ->getPassword();
  $admin = $form_state
    ->getValue('administer_users');
  $notify = !$form_state
    ->isValueEmpty('notify');

  // Save has no return value so this cannot be tested.
  // Assume save has gone through correctly.
  $account
    ->save();
  $form_state
    ->set('user', $account);
  $form_state
    ->setValue('uid', $account
    ->id());
  $this
    ->logger('user')
    ->info('New user: %name %email.', [
    '%name' => $form_state
      ->getValue('name'),
    '%email' => '<' . $form_state
      ->getValue('mail') . '>',
    'type' => $account
      ->toLink($this
      ->t('Edit'), 'edit-form')
      ->toString(),
  ]);

  // Add plain text password into user account to generate mail tokens.
  $account->password = $pass;

  // New administrative account without notification.
  if ($admin && !$notify) {
    $this
      ->messenger()
      ->addStatus($this
      ->t('Created a new user account for <a href=":url">%name</a>. No email has been sent.', [
      ':url' => $account
        ->toUrl()
        ->toString(),
      '%name' => $account
        ->getAccountName(),
    ]));
  }
  elseif (!$admin && !\Drupal::config('user.settings')
    ->get('verify_mail') && $account
    ->isActive()) {
    _user_mail_notify('register_no_approval_required', $account);
    user_login_finalize($account);
    $this
      ->messenger()
      ->addStatus($this
      ->t('Registration successful. You are now logged in.'));
    $form_state
      ->setRedirect('<front>');
  }
  elseif ($account
    ->isActive() || $notify) {
    if (!$account
      ->getEmail() && $notify) {
      $this
        ->messenger()
        ->addStatus($this
        ->t('The new user <a href=":url">%name</a> was created without an email address, so no welcome message was sent.', [
        ':url' => $account
          ->toUrl()
          ->toString(),
        '%name' => $account
          ->getAccountName(),
      ]));
    }
    else {
      $op = $notify ? 'register_admin_created' : 'register_no_approval_required';
      if (_user_mail_notify($op, $account)) {
        if ($notify) {
          $this
            ->messenger()
            ->addStatus($this
            ->t('A welcome message with further instructions has been emailed to the new user <a href=":url">%name</a>.', [
            ':url' => $account
              ->toUrl()
              ->toString(),
            '%name' => $account
              ->getAccountName(),
          ]));
        }
        else {
          $this
            ->messenger()
            ->addStatus($this
            ->t('A welcome message with further instructions has been sent to your email address.'));
          $form_state
            ->setRedirect('<front>');
        }
      }
    }
  }
  else {
    _user_mail_notify('register_pending_approval', $account);
    $this
      ->messenger()
      ->addStatus($this
      ->t('Thank you for applying for an account. Your account is currently pending approval by the site administrator.<br />In the meantime, a welcome message with further instructions has been sent to your email address.'));
    $form_state
      ->setRedirect('<front>');
  }
}