annotate vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents
children
rev   line source
Chris@5 1 <?php
Chris@5 2
Chris@5 3 namespace Egulias\EmailValidator\Validation;
Chris@5 4
Chris@5 5 use Egulias\EmailValidator\EmailLexer;
Chris@5 6 use Egulias\EmailValidator\Validation\Exception\EmptyValidationList;
Chris@5 7
Chris@5 8 class MultipleValidationWithAnd implements EmailValidation
Chris@5 9 {
Chris@5 10 /**
Chris@5 11 * If one of validations gets failure skips all succeeding validation.
Chris@5 12 * This means MultipleErrors will only contain a single error which first found.
Chris@5 13 */
Chris@5 14 const STOP_ON_ERROR = 0;
Chris@5 15
Chris@5 16 /**
Chris@5 17 * All of validations will be invoked even if one of them got failure.
Chris@5 18 * So MultipleErrors will contain all causes.
Chris@5 19 */
Chris@5 20 const ALLOW_ALL_ERRORS = 1;
Chris@5 21
Chris@5 22 /**
Chris@5 23 * @var EmailValidation[]
Chris@5 24 */
Chris@5 25 private $validations = [];
Chris@5 26
Chris@5 27 /**
Chris@5 28 * @var array
Chris@5 29 */
Chris@5 30 private $warnings = [];
Chris@5 31
Chris@5 32 /**
Chris@5 33 * @var MultipleErrors
Chris@5 34 */
Chris@5 35 private $error;
Chris@5 36
Chris@5 37 /**
Chris@5 38 * @var bool
Chris@5 39 */
Chris@5 40 private $mode;
Chris@5 41
Chris@5 42 /**
Chris@5 43 * @param EmailValidation[] $validations The validations.
Chris@5 44 * @param int $mode The validation mode (one of the constants).
Chris@5 45 */
Chris@5 46 public function __construct(array $validations, $mode = self::ALLOW_ALL_ERRORS)
Chris@5 47 {
Chris@5 48 if (count($validations) == 0) {
Chris@5 49 throw new EmptyValidationList();
Chris@5 50 }
Chris@5 51
Chris@5 52 $this->validations = $validations;
Chris@5 53 $this->mode = $mode;
Chris@5 54 }
Chris@5 55
Chris@5 56 /**
Chris@5 57 * {@inheritdoc}
Chris@5 58 */
Chris@5 59 public function isValid($email, EmailLexer $emailLexer)
Chris@5 60 {
Chris@5 61 $result = true;
Chris@5 62 $errors = [];
Chris@5 63 foreach ($this->validations as $validation) {
Chris@5 64 $emailLexer->reset();
Chris@5 65 $validationResult = $validation->isValid($email, $emailLexer);
Chris@5 66 $result = $result && $validationResult;
Chris@5 67 $this->warnings = array_merge($this->warnings, $validation->getWarnings());
Chris@5 68 $errors = $this->addNewError($validation->getError(), $errors);
Chris@5 69
Chris@5 70 if ($this->shouldStop($result)) {
Chris@5 71 break;
Chris@5 72 }
Chris@5 73 }
Chris@5 74
Chris@5 75 if (!empty($errors)) {
Chris@5 76 $this->error = new MultipleErrors($errors);
Chris@5 77 }
Chris@5 78
Chris@5 79 return $result;
Chris@5 80 }
Chris@5 81
Chris@5 82 private function addNewError($possibleError, array $errors)
Chris@5 83 {
Chris@5 84 if (null !== $possibleError) {
Chris@5 85 $errors[] = $possibleError;
Chris@5 86 }
Chris@5 87
Chris@5 88 return $errors;
Chris@5 89 }
Chris@5 90
Chris@5 91 private function shouldStop($result)
Chris@5 92 {
Chris@5 93 return !$result && $this->mode === self::STOP_ON_ERROR;
Chris@5 94 }
Chris@5 95
Chris@5 96 /**
Chris@5 97 * {@inheritdoc}
Chris@5 98 */
Chris@5 99 public function getError()
Chris@5 100 {
Chris@5 101 return $this->error;
Chris@5 102 }
Chris@5 103
Chris@5 104 /**
Chris@5 105 * {@inheritdoc}
Chris@5 106 */
Chris@5 107 public function getWarnings()
Chris@5 108 {
Chris@5 109 return $this->warnings;
Chris@5 110 }
Chris@5 111 }