Code Coverage  | 
      ||||||||||
Classes and Traits  | 
       Functions and Methods  | 
       Lines  | 
      ||||||||
| Total |         | 
       100.00%  | 
       1 / 1  | 
               | 
       100.00%  | 
       5 / 5  | 
       CRAP |         | 
       100.00%  | 
       24 / 24  | 
      
| RequisitesValidator |         | 
       100.00%  | 
       1 / 1  | 
               | 
       100.00%  | 
       5 / 5  | 
       13 |         | 
       100.00%  | 
       24 / 24  | 
      
| init |         | 
       100.00%  | 
       1 / 1  | 
       4 |         | 
       100.00%  | 
       9 / 9  | 
      |||
| getDefaultErrorMessages | n/a  | 
       0 / 0  | 
       0 | n/a  | 
       0 / 0  | 
      |||||
| checkValueLength | n/a  | 
       0 / 0  | 
       0 | n/a  | 
       0 / 0  | 
      |||||
| checkValueInstanceOf |         | 
       100.00%  | 
       1 / 1  | 
       2 |         | 
       100.00%  | 
       1 / 1  | 
      |||
| checkIsValuesCharsValid |         | 
       100.00%  | 
       1 / 1  | 
       1 |         | 
       100.00%  | 
       1 / 1  | 
      |||
| prepareData |         | 
       100.00%  | 
       1 / 1  | 
       1 |         | 
       100.00%  | 
       3 / 3  | 
      |||
| preValidate |         | 
       100.00%  | 
       1 / 1  | 
       5 |         | 
       100.00%  | 
       10 / 10  | 
      |||
| 1 | <?php | 
| 2 | |
| 3 | namespace shumorkiniv\validators; | 
| 4 | |
| 5 | use yii\validators\Validator; | 
| 6 | |
| 7 | /** | 
| 8 | * Class RequisitesValidator | 
| 9 | * | 
| 10 | * The basic class for requisites validators. | 
| 11 | * | 
| 12 | * @author Shumorkin Ilya <shumorkinilya@mail.ru> | 
| 13 | */ | 
| 14 | abstract class RequisitesValidator extends Validator | 
| 15 | { | 
| 16 | /** @var ?string User wrong count message */ | 
| 17 | public ?string $wrongLengthMessage = null; | 
| 18 | /** @var ?string User wrong character message */ | 
| 19 | public ?string $wrongCharMessage = null; | 
| 20 | |
| 21 | /** @var array */ | 
| 22 | protected array $numbers; | 
| 23 | /** @var int */ | 
| 24 | protected int $length; | 
| 25 | |
| 26 | /** | 
| 27 | * @inheritdoc | 
| 28 | */ | 
| 29 | public function init() | 
| 30 | { | 
| 31 | parent::init(); | 
| 32 | |
| 33 | $defaultErrorMessages = $this->getDefaultErrorMessages(); | 
| 34 | |
| 35 | if ($this->wrongLengthMessage === null) { | 
| 36 | $this->wrongLengthMessage = $defaultErrorMessages['wrongLength']; | 
| 37 | } | 
| 38 | |
| 39 | if ($this->wrongCharMessage === null) { | 
| 40 | $this->wrongCharMessage = $defaultErrorMessages['wrongChar']; | 
| 41 | } | 
| 42 | |
| 43 | if ($this->message === null) { | 
| 44 | $this->message = $defaultErrorMessages['invalidValue']; | 
| 45 | } | 
| 46 | } | 
| 47 | |
| 48 | |
| 49 | /** | 
| 50 | * Returns array of default error messages | 
| 51 | * | 
| 52 | * The returns array the array is as follows: | 
| 53 | * | 
| 54 | * ['wrongLength' => 'wrongLength text', 'wrongChar' => 'wrongChar text', 'invalidValue' => 'invalidValue text'] | 
| 55 | * | 
| 56 | * @return string[] | 
| 57 | */ | 
| 58 | protected abstract function getDefaultErrorMessages(): array; | 
| 59 | |
| 60 | /** | 
| 61 | * Returns true if value is in valid length range | 
| 62 | * | 
| 63 | * @param string $value | 
| 64 | * @return bool | 
| 65 | */ | 
| 66 | protected abstract function checkValueLength(string $value): bool; | 
| 67 | |
| 68 | /** | 
| 69 | * Returns true if value instance is string or int | 
| 70 | * | 
| 71 | * @param mixed $value | 
| 72 | * @return bool | 
| 73 | */ | 
| 74 | protected function checkValueInstanceOf($value): bool | 
| 75 | { | 
| 76 | return is_int($value) || is_string($value); | 
| 77 | } | 
| 78 | |
| 79 | /** | 
| 80 | * Returns true if value is numeric | 
| 81 | * | 
| 82 | * @param string $value | 
| 83 | * @return bool | 
| 84 | */ | 
| 85 | protected function checkIsValuesCharsValid(string $value): bool | 
| 86 | { | 
| 87 | return is_numeric($value); | 
| 88 | } | 
| 89 | |
| 90 | /** | 
| 91 | * Set properties numbers and length for next calculations | 
| 92 | * | 
| 93 | * @param string $value | 
| 94 | */ | 
| 95 | protected function prepareData(string $value) { | 
| 96 | $this->numbers = array_map('intval', str_split($value)); | 
| 97 | $this->length = count($this->numbers); | 
| 98 | } | 
| 99 | |
| 100 | /** | 
| 101 | * Make preparatory actions before validation. | 
| 102 | * | 
| 103 | * Returns empty array if no errors. | 
| 104 | * | 
| 105 | * @param mixed $value | 
| 106 | * @return array | 
| 107 | */ | 
| 108 | protected function preValidate($value): array | 
| 109 | { | 
| 110 | if (!$this->checkValueInstanceOf($value)) { | 
| 111 | return [$this->message, []]; | 
| 112 | } | 
| 113 | |
| 114 | if (is_int($value)) { | 
| 115 | $value = (string)$value; | 
| 116 | } | 
| 117 | |
| 118 | if (!$this->checkValueLength($value)) { | 
| 119 | return [$this->wrongLengthMessage, []]; | 
| 120 | } | 
| 121 | |
| 122 | if (!$this->checkIsValuesCharsValid($value)) { | 
| 123 | return [$this->wrongCharMessage, []]; | 
| 124 | } | 
| 125 | |
| 126 | $this->prepareData($value); | 
| 127 | |
| 128 | return []; | 
| 129 | } | 
| 130 | } |