function RegisterForm::save

Same name in other branches
  1. 9 core/modules/user/src/RegisterForm.php \Drupal\user\RegisterForm::save()
  2. 10 core/modules/user/src/RegisterForm.php \Drupal\user\RegisterForm::save()
  3. 11.x core/modules/user/src/RegisterForm.php \Drupal\user\RegisterForm::save()

Overrides EntityForm::save

File

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

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')
        ->notice('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>');
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.