View source
<?php
namespace Drupal\logintoboggan\Form;
use Drupal\Core\Form\FormStateInterface;
use Drupal\logintoboggan\Utility\LogintobogganUtility;
use Drupal\user\RegisterForm;
use Drupal\Core\Url;
class LogintobogganRegister extends RegisterForm {
public function form(array $form, FormStateInterface $form_state) {
$user = $this
->currentUser();
$account = $this->entity;
$admin = $user
->hasPermission('administer users');
$form['administer_users'] = [
'#type' => 'value',
'#value' => $admin,
];
$form['#attached']['library'][] = 'core/drupal.form';
if (!$admin) {
$form['#attributes']['data-user-info-from-browser'] = TRUE;
}
if ($admin) {
$account
->activate();
}
$form = parent::form($form, $form_state, $account);
$mail_confirm = $this
->config('logintoboggan.settings')
->get('confirm_email_at_registration');
if ($mail_confirm) {
$form['account']['conf_mail'] = [
'#type' => 'textfield',
'#title' => $this
->t('Confirm e-mail address'),
'#weight' => -28,
'#maxlength' => 64,
'#description' => $this
->t('Please re-type your e-mail address to confirm it is accurate.'),
'#required' => TRUE,
];
$form['account']['name']['#weight'] = -30;
$form['account']['mail']['#weight'] = -29;
}
$pass = $this
->config('user.settings')
->get('user_email_verification');
$min_pass = \Drupal::config('logintoboggan.settings')
->get('minimum_password_length', 0);
if ($pass && $min_pass > 0) {
$form['account']['pass']['#description'] = isset($form['account']['pass']['#description']) ? $form['account']['pass']['#description'] . " " : "";
$form['account']['pass']['#description'] .= $this
->t('Password must be at least %length characters.', [
'%length' => $min_pass,
]);
}
return $form;
}
protected function actions(array $form, FormStateInterface $form_state) {
$element = parent::actions($form, $form_state);
$element['submit']['#value'] = $this
->t('Create new account');
return $element;
}
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();
}
$form_state
->cleanValues();
$form_state
->setValue('pass', $pass);
$form_state
->setValue('init', $form_state
->getValue('mail'));
parent::submitForm($form, $form_state);
}
public function validateForm(array &$form, FormStateInterface $form_state) {
parent::validateForm($form, $form_state);
if ($this
->config('logintoboggan.settings')
->get('confirm_email_at_registration') && $form_state
->hasValue('conf_mail')) {
if ($form_state
->getValue('mail') != $form_state
->getValue('conf_mail')) {
$form_state
->setErrorByName('conf_mail', $this
->t('Your e-mail address and confirmed e-mail address must match.'));
}
}
}
public function save(array $form, FormStateInterface $form_state) {
$account = $this->entity;
$admin = $form_state
->getValue('administer_users');
$notify = !$form_state
->isValueEmpty('notify');
$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
->link($this
->t('Edit'), 'edit-form'),
]);
$immediate = \Drupal::config('logintoboggan.settings')
->get('immediate_login_on_register');
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() && $immediate == '1') {
user_login_finalize($account);
_user_mail_notify('register_no_approval_required', $account);
$this
->messenger()
->addStatus($this
->t('Registration successful.'));
$redirect_setting = \Drupal::config('logintoboggan.settings')
->get('redirect_on_register');
$redirect_on_register = !empty($redirect_setting) ? $redirect_setting : '/';
$redirect = LogintobogganUtility::processRedirect($redirect_on_register, $account);
$form_state
->setRedirectUrl($redirect);
}
elseif ($account
->isActive() || $notify) {
if (!$account
->getEmail() && $notify) {
$this
->messenger()
->addMessage($this
->t('The new user <a href=":url">%name</a> was created
without an email address so no welcome message was sent', [
':url' => Url::fromRoute('entity.user.edit_form', [
'user' => $account
->id(),
])
->toString(),
'%name' => $account
->get('name')->value,
]));
}
else {
$op = $notify ? 'register_admin_created' : 'register_no_approval_required';
if (_user_mail_notify($op, $account)) {
if ($notify) {
$this
->messenger()
->addMessage($this
->t('A welcome message with further instructions
has been emailed to the new user <a href=":url">%name</a>.', [
':url' => Url::fromRoute('entity.user.edit_form', [
'user' => $account
->id(),
])
->toString(),
'%name' => $account
->get('name')->value,
]));
}
else {
$this
->messenger()
->addMessage($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()
->addMessage($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>');
}
}
}