annotate vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php @ 19:fa3358dc1485 tip

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