Drupal 8.0.0 beta 12. More info: https://www.drupal.org/node/2514176
This commit is contained in:
commit
9921556621
13277 changed files with 1459781 additions and 0 deletions
153
core/modules/user/src/RegisterForm.php
Normal file
153
core/modules/user/src/RegisterForm.php
Normal file
|
@ -0,0 +1,153 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\user\RegisterForm.
|
||||
*/
|
||||
|
||||
namespace Drupal\user;
|
||||
|
||||
use Drupal\Core\Entity\EntityManagerInterface;
|
||||
use Drupal\Core\Entity\Query\QueryFactory;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Language\LanguageManagerInterface;
|
||||
|
||||
/**
|
||||
* Form controller for the user register forms.
|
||||
*/
|
||||
class RegisterForm extends AccountForm {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct(EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager, QueryFactory $entity_query) {
|
||||
parent::__construct($entity_manager, $language_manager, $entity_query);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function form(array $form, FormStateInterface $form_state) {
|
||||
$user = $this->currentUser();
|
||||
/** @var \Drupal\user\UserInterface $account */
|
||||
$account = $this->entity;
|
||||
$admin = $user->hasPermission('administer users');
|
||||
// Pass access information to the submit handler. Running an access check
|
||||
// inside the submit function interferes with form processing and breaks
|
||||
// hook_form_alter().
|
||||
$form['administer_users'] = array(
|
||||
'#type' => 'value',
|
||||
'#value' => $admin,
|
||||
);
|
||||
|
||||
$form['#attached']['library'][] = 'core/drupal.form';
|
||||
|
||||
// For non-admin users, populate the form fields using data from the
|
||||
// browser.
|
||||
if (!$admin) {
|
||||
$form['#attributes']['data-user-info-from-browser'] = TRUE;
|
||||
}
|
||||
|
||||
// Because the user status has security implications, users are blocked by
|
||||
// default when created programmatically and need to be actively activated
|
||||
// if needed. When administrators create users from the user interface,
|
||||
// however, we assume that they should be created as activated by default.
|
||||
if ($admin) {
|
||||
$account->activate();
|
||||
}
|
||||
|
||||
// Start with the default user account fields.
|
||||
$form = parent::form($form, $form_state, $account);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides Drupal\Core\Entity\EntityForm::actions().
|
||||
*/
|
||||
protected function actions(array $form, FormStateInterface $form_state) {
|
||||
$element = parent::actions($form, $form_state);
|
||||
$element['submit']['#value'] = $this->t('Create new account');
|
||||
return $element;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function submitForm(array &$form, FormStateInterface $form_state) {
|
||||
$admin = $form_state->getValue('administer_users');
|
||||
|
||||
if (!\Drupal::config('user.settings')->get('verify_mail') || $admin) {
|
||||
$pass = $form_state->getValue('pass');
|
||||
}
|
||||
else {
|
||||
$pass = user_password();
|
||||
}
|
||||
|
||||
// Remove unneeded values.
|
||||
$form_state->cleanValues();
|
||||
|
||||
$form_state->setValue('pass', $pass);
|
||||
$form_state->setValue('init', $form_state->getValue('mail'));
|
||||
|
||||
parent::submitForm($form, $form_state);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
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.', array('%name' => $form_state->getValue('name'), '%email' => '<' . $form_state->getValue('mail') . '>', 'type' => $account->link($this->t('Edit'), 'edit-form')));
|
||||
|
||||
// Add plain text password into user account to generate mail tokens.
|
||||
$account->password = $pass;
|
||||
|
||||
// New administrative account without notification.
|
||||
if ($admin && !$notify) {
|
||||
drupal_set_message($this->t('Created a new user account for <a href="@url">%name</a>. No email has been sent.', array('@url' => $account->url(), '%name' => $account->getUsername())));
|
||||
}
|
||||
// No email verification required; log in user immediately.
|
||||
elseif (!$admin && !\Drupal::config('user.settings')->get('verify_mail') && $account->isActive()) {
|
||||
_user_mail_notify('register_no_approval_required', $account);
|
||||
user_login_finalize($account);
|
||||
drupal_set_message($this->t('Registration successful. You are now logged in.'));
|
||||
$form_state->setRedirect('<front>');
|
||||
}
|
||||
// No administrator approval required.
|
||||
elseif ($account->isActive() || $notify) {
|
||||
if (!$account->getEmail() && $notify) {
|
||||
drupal_set_message($this->t('The new user <a href="@url">%name</a> was created without an email address, so no welcome message was sent.', array('@url' => $account->url(), '%name' => $account->getUsername())));
|
||||
}
|
||||
else {
|
||||
$op = $notify ? 'register_admin_created' : 'register_no_approval_required';
|
||||
if (_user_mail_notify($op, $account)) {
|
||||
if ($notify) {
|
||||
drupal_set_message($this->t('A welcome message with further instructions has been emailed to the new user <a href="@url">%name</a>.', array('@url' => $account->url(), '%name' => $account->getUsername())));
|
||||
}
|
||||
else {
|
||||
drupal_set_message($this->t('A welcome message with further instructions has been sent to your email address.'));
|
||||
$form_state->setRedirect('<front>');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Administrator approval required.
|
||||
else {
|
||||
_user_mail_notify('register_pending_approval', $account);
|
||||
drupal_set_message($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>');
|
||||
}
|
||||
}
|
||||
}
|
Reference in a new issue