/** * {@inheritdoc} */ public function validate($items, Constraint $constraint) { /** @var \Drupal\Core\Field\FieldItemListInterface $items */ /** @var \Drupal\user\UserInterface $account */ $account = $this->context->getMetadata()->getTypedData()->getEntity(); $existing_value = NULL; if ($account->id()) { $account_unchanged = \Drupal::entityManager()->getStorage('user')->loadUnchanged($account->id()); $existing_value = $account_unchanged->getEmail(); } $required = !(!$existing_value && \Drupal::currentUser()->hasPermission('administer users')); if ($required && (!isset($items) || $items->isEmpty())) { $this->context->addViolation($this->message, array('!name' => SafeMarkup::placeholder($account->getFieldDefinition('mail')->getLabel()))); } }