nginxsonarrradarrplexorganizrdashboardbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbget
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							110 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							110 lines
						
					
					
						
							2.5 KiB
						
					
					
				| <?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(); | |
|             $result = $result && $validation->isValid($email, $emailLexer); | |
|             $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; | |
|     } | |
| }
 | |
| 
 |