public function Login::validatePaneForm in Commerce Core 8.2
Validates the pane form.
Parameters
array $pane_form: The pane form.
\Drupal\Core\Form\FormStateInterface $form_state: The form state of the parent form.
array $complete_form: The complete form structure.
Overrides CheckoutPaneBase::validatePaneForm
File
- modules/
checkout/ src/ Plugin/ Commerce/ CheckoutPane/ Login.php, line 324
Class
- Login
- Provides the login pane.
Namespace
Drupal\commerce_checkout\Plugin\Commerce\CheckoutPaneCode
public function validatePaneForm(array &$pane_form, FormStateInterface $form_state, array &$complete_form) {
$values = $form_state
->getValue($pane_form['#parents']);
$triggering_element = $form_state
->getTriggeringElement();
$trigger = !empty($triggering_element['#op']) ? $triggering_element['#op'] : 'continue';
switch ($trigger) {
case 'continue':
return;
case 'login':
$name_element = $pane_form['returning_customer']['name'];
$username = $values['returning_customer']['name'];
$password = trim($values['returning_customer']['password']);
// Generate the "reset password" url.
$query = !empty($username) ? [
'name' => $username,
] : [];
$password_url = Url::fromRoute('user.pass', [], [
'query' => $query,
])
->toString();
if (empty($username) || empty($password)) {
$form_state
->setError($pane_form['returning_customer'], $this
->t('Unrecognized username or password. <a href=":url">Have you forgotten your password?</a>', [
':url' => $password_url,
]));
return;
}
if (user_is_blocked($username)) {
$form_state
->setError($name_element, $this
->t('The username %name has not been activated or is blocked.', [
'%name' => $username,
]));
return;
}
if (!$this->credentialsCheckFlood
->isAllowedHost($this->clientIp)) {
$form_state
->setError($name_element, $this
->t('Too many failed login attempts from your IP address. This IP address is temporarily blocked. Try again later or <a href=":url">request a new password</a>.', [
':url' => $password_url,
]));
$this->credentialsCheckFlood
->register($this->clientIp, $username);
return;
}
elseif (!$this->credentialsCheckFlood
->isAllowedAccount($this->clientIp, $username)) {
$form_state
->setError($name_element, $this
->t('Too many failed login attempts for this account. It is temporarily blocked. Try again later or <a href=":url">request a new password</a>.', [
':url' => $password_url,
]));
$this->credentialsCheckFlood
->register($this->clientIp, $username);
return;
}
$uid = $this->userAuth
->authenticate($username, $password);
if (!$uid) {
$this->credentialsCheckFlood
->register($this->clientIp, $username);
$form_state
->setError($name_element, $this
->t('Unrecognized username or password. <a href=":url">Have you forgotten your password?</a>', [
':url' => $password_url,
]));
}
$form_state
->set('logged_in_uid', $uid);
break;
case 'register':
$email = $values['register']['mail'];
$username = $values['register']['name'];
$password = trim($values['register']['password']);
if (empty($email)) {
$form_state
->setError($pane_form['register']['mail'], $this
->t('Email field is required.'));
return;
}
if (empty($username)) {
$form_state
->setError($pane_form['register']['name'], $this
->t('Username field is required.'));
return;
}
if (empty($password)) {
$form_state
->setError($pane_form['register']['password'], $this
->t('Password field is required.'));
return;
}
/** @var \Drupal\user\UserInterface $account */
$account = $this->entityTypeManager
->getStorage('user')
->create([
'mail' => $email,
'name' => $username,
'pass' => $password,
'status' => TRUE,
'langcode' => $this->languageManager
->getCurrentLanguage()
->getId(),
'preferred_langcode' => $this->languageManager
->getCurrentLanguage()
->getId(),
'preferred_admin_langcode' => $this->languageManager
->getCurrentLanguage()
->getId(),
]);
$form_display = EntityFormDisplay::collectRenderDisplay($account, 'register');
$form_display
->extractFormValues($account, $pane_form['register'], $form_state);
$form_display
->validateFormValues($account, $pane_form['register'], $form_state);
// Manually flag violations of fields not handled by the form display.
// This is necessary as entity form displays only flag violations for
// fields contained in the display.
// @see \Drupal\user\AccountForm::flagViolations
$violations = $account
->validate();
foreach ($violations
->getByFields([
'name',
'pass',
'mail',
]) as $violation) {
list($field_name) = explode('.', $violation
->getPropertyPath(), 2);
$form_state
->setError($pane_form['register'][$field_name], $violation
->getMessage());
}
if (!$form_state
->hasAnyErrors()) {
$account
->save();
$form_state
->set('logged_in_uid', $account
->id());
}
break;
}
}