You are here

public function LogintobogganMailNameValidator::validate in LoginToboggan 8

Check that user name is not an email used for another account.

File

src/Plugin/Validation/Constraint/LogintobogganMailNameValidator.php, line 19

Class

LogintobogganMailNameValidator
Validates that user name that uses email is not using a pre-existing email.

Namespace

Drupal\logintoboggan\Plugin\Validation\Constraint

Code

public function validate($items, Constraint $constraint) {
  $parent = $items
    ->getEntity();
  $uid = $parent
    ->get('uid')->value;
  $name = $items
    ->get(0)->value;
  $connection = Database::getConnection();
  if (is_null($uid)) {
    $result = $connection
      ->select('users_field_data', 'ufd')
      ->fields('ufd', [
      'mail',
    ])
      ->condition('mail', $name, 'LIKE')
      ->countQuery()
      ->execute()
      ->fetchField();
  }
  else {
    $result = $connection
      ->select('users_field_data', 'ufd')
      ->fields('ufd', [
      'mail',
    ])
      ->condition('mail', $name, 'LIKE')
      ->condition('uid', $uid, '<>')
      ->countQuery()
      ->execute()
      ->fetchField();
  }
  if ($result > 0) {
    $this->context
      ->addViolation($constraint->message, []);
  }
}