public function MobileNumberValidator::validate in Mobile Number 8
Same name and namespace in other branches
- 2.0.x src/Plugin/Validation/Constraint/MobileNumberValidator.php \Drupal\mobile_number\Plugin\Validation\Constraint\MobileNumberValidator::validate()
File
- src/
Plugin/ Validation/ Constraint/ MobileNumberValidator.php, line 26
Class
- MobileNumberValidator
- Validates a mobile number.
Namespace
Drupal\mobile_number\Plugin\Validation\ConstraintCode
public function validate($item, Constraint $constraint) {
/** @var \Drupal\mobile_number\Plugin\Field\FieldType\MobileNumberItem $item */
$values = $item
->getValue();
if (empty($values['value']) && empty($values['local_number'])) {
return;
}
/** @var \Drupal\mobile_number\MobileNumberUtilInterface $util */
$util = \Drupal::service('mobile_number.util');
$field_label = $item
->getFieldDefinition()
->getLabel();
/** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
$entity = $item
->getEntity();
$entity_type = $entity
->getEntityType()
->getSingularLabel();
$allowed_countries = $item
->getFieldDefinition()
->getSetting('countries');
$verify = $item
->getFieldDefinition()
->getSetting('verify');
$unique = $item
->getFieldDefinition()
->getFieldStorageDefinition()
->getSetting('unique');
$tfa = $item
->get('tfa')
->getValue();
try {
$mobile_number = $item
->getMobileNumber(TRUE);
$country = $util
->getCountry($mobile_number);
$display_number = $util
->libUtil()
->format($mobile_number, 2);
if (!in_array($util
->getCountry($mobile_number), $allowed_countries) && $allowed_countries) {
$this->context
->addViolation($constraint->allowedCountry, [
'@value' => $util
->getCountryName($country),
'@field_name' => mb_strtolower($field_label),
]);
}
else {
$bypass_verification = \Drupal::currentUser()
->hasPermission('bypass mobile number verification requirement');
$verification = $item
->verify();
if ($verification === -1) {
$this->context
->addViolation($constraint->flood, [
'@value' => $display_number,
'@field_name' => mb_strtolower($field_label),
]);
}
elseif ($verification === FALSE) {
$this->context
->addViolation($constraint->verification, [
'@value' => $display_number,
'@field_name' => mb_strtolower($field_label),
]);
}
elseif (!$verification && !$bypass_verification && ($tfa || $verify === MobileNumberUtilInterface::MOBILE_NUMBER_VERIFY_REQUIRED)) {
$this->context
->addViolation($constraint->verifyRequired, [
'@value' => $display_number,
'@entity_type' => $entity_type,
'@field_name' => mb_strtolower($field_label),
]);
}
elseif ($unique && !$item
->isUnique($unique)) {
$this->context
->addViolation($constraint->unique, [
'@value' => $display_number,
'@entity_type' => $entity_type,
'@field_name' => mb_strtolower($field_label),
]);
}
}
} catch (MobileNumberException $e) {
$this->context
->addViolation($constraint->validity, [
'@value' => $values['local_number'],
'@entity_type' => $entity_type,
'@field_name' => mb_strtolower($field_label),
'@message' => t($e
->getMessage()),
]);
}
}