Mercurial > hg > cmmr2012-drupal-site
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php Thu May 09 15:34:47 2019 +0100 @@ -0,0 +1,111 @@ +<?php + +namespace Egulias\EmailValidator\Validation; + +use Egulias\EmailValidator\EmailLexer; +use Egulias\EmailValidator\Validation\Exception\EmptyValidationList; + +class MultipleValidationWithAnd implements EmailValidation +{ + /** + * If one of validations gets failure skips all succeeding validation. + * This means MultipleErrors will only contain a single error which first found. + */ + const STOP_ON_ERROR = 0; + + /** + * All of validations will be invoked even if one of them got failure. + * So MultipleErrors will contain all causes. + */ + const ALLOW_ALL_ERRORS = 1; + + /** + * @var EmailValidation[] + */ + private $validations = []; + + /** + * @var array + */ + private $warnings = []; + + /** + * @var MultipleErrors + */ + private $error; + + /** + * @var bool + */ + private $mode; + + /** + * @param EmailValidation[] $validations The validations. + * @param int $mode The validation mode (one of the constants). + */ + public function __construct(array $validations, $mode = self::ALLOW_ALL_ERRORS) + { + if (count($validations) == 0) { + throw new EmptyValidationList(); + } + + $this->validations = $validations; + $this->mode = $mode; + } + + /** + * {@inheritdoc} + */ + public function isValid($email, EmailLexer $emailLexer) + { + $result = true; + $errors = []; + foreach ($this->validations as $validation) { + $emailLexer->reset(); + $validationResult = $validation->isValid($email, $emailLexer); + $result = $result && $validationResult; + $this->warnings = array_merge($this->warnings, $validation->getWarnings()); + $errors = $this->addNewError($validation->getError(), $errors); + + if ($this->shouldStop($result)) { + break; + } + } + + if (!empty($errors)) { + $this->error = new MultipleErrors($errors); + } + + return $result; + } + + private function addNewError($possibleError, array $errors) + { + if (null !== $possibleError) { + $errors[] = $possibleError; + } + + return $errors; + } + + private function shouldStop($result) + { + return !$result && $this->mode === self::STOP_ON_ERROR; + } + + /** + * {@inheritdoc} + */ + public function getError() + { + return $this->error; + } + + /** + * {@inheritdoc} + */ + public function getWarnings() + { + return $this->warnings; + } +}