You are here

function email_confirmer_user_form_user_form_alter in Email confirmer 8

Implements hook_form_FORM_ID_alter().

File

email_confirmer_user/email_confirmer_user.module, line 118
Users related email confirmation module.

Code

function email_confirmer_user_form_user_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $config = \Drupal::config('email_confirmer_user.settings')
    ->get('user_email_change');

  /** @var \Drupal\user\UserInterface $user */
  $user = $form_state
    ->getFormObject()
    ->getEntity();

  // Nothing to do with new accounts.
  if ($user
    ->isNew()) {
    return;
  }

  // Tell the user about email changes pending confirmation.

  /** @var \Drupal\email_confirmer\EmailConfirmationInterface $confirmation */
  if ($config['enabled'] && ($new_email = \Drupal::service('user.data')
    ->get('email_confirmer_user', $user
    ->id(), 'email_change_new_address')) && !empty($confirmations = \Drupal::service('email_confirmer')
    ->getConfirmations($new_email, 'pending', 0, 'email_confirmer_user'))) {
    foreach ($confirmations as $confirmation) {
      if ($confirmation->uid->target_id == $user
        ->id()) {
        $confirmation_url = Url::fromRoute('entity.email_confirmer_confirmation.resend', [
          'confirmation' => $confirmation
            ->id(),
        ], [
          'query' => \Drupal::destination()
            ->getAsArray(),
        ])
          ->toString();
        $form['account']['mail']['#description'] = t('<strong>An update of your email address to %mail is pending of confirmation</strong>. <a href=":resend_url">Resend confirmation email</a> or <a href=":cancel_url">cancel the pending change</a>.', [
          '%mail' => $new_email,
          ':resend_url' => $confirmation_url,
          ':cancel_url' => Url::fromRoute('entity.user.cancel_email_change', [
            'user' => $user
              ->id(),
          ])
            ->toString(),
        ]) . ' ' . $form['account']['mail']['#description'];
        break;
      }
    }
  }
}