PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.3
GiveWP – Donation Plugin and Fundraising Platform v4.16.3
4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / vendor-prefixed / stellarwp / validation / src / Validator.php
give / vendor / vendor-prefixed / stellarwp / validation / src Last commit date
Commands 1 year ago Concerns 1 year ago Contracts 1 year ago Exceptions 1 year ago Rules 1 year ago Config.php 1 year ago ServiceProvider.php 1 year ago ValidationRuleSet.php 1 year ago ValidationRulesRegistrar.php 1 year ago Validator.php 1 year ago
Validator.php
170 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Give\Vendors\StellarWP\Validation;
6
7 use Give\Vendors\StellarWP\Validation\Commands\ExcludeValue;
8 use Give\Vendors\StellarWP\Validation\Commands\SkipValidationRules;
9 use Give\Vendors\StellarWP\Validation\Contracts\Sanitizer;
10 use Give\Vendors\StellarWP\Validation\Contracts\ValidationRule;
11 use Closure;
12
13 /**
14 * A tool for taking in a set of values and corresponding validation rules, and then validating the values.
15 *
16 * @since 1.0.0
17 */
18 class Validator
19 {
20 /**
21 * @var array<string, ValidationRuleSet>
22 */
23 private array $ruleSets;
24
25 /**
26 * @var array<string, mixed>
27 */
28 private array $values;
29
30 /**
31 * @var array<string, string>
32 */
33 private array $labels;
34
35 /**
36 * @var array<string, string>
37 */
38 private array $errors = [];
39
40 /**
41 * @var array<string, mixed>
42 */
43 private array $validatedValues = [];
44
45 /**
46 * @var bool
47 */
48 private bool $ranValidationRules = false;
49
50 /**
51 * @since 1.0.0
52 *
53 * @param array<string, ValidationRuleSet|array<string|ValidationRule|Closure>> $ruleSets
54 * @param array<string, mixed> $values
55 * @param array<string, string> $labels
56 */
57 public function __construct(array $ruleSets, array $values, array $labels = [])
58 {
59 $validatedRules = [];
60 foreach ($ruleSets as $key => $rule) {
61 if (is_array($rule)) {
62 $validatedRules[$key] = Config::getServiceContainer()->get(ValidationRuleSet::class)->rules(...$rule);
63 } elseif ($rule instanceof ValidationRuleSet) {
64 $validatedRules[$key] = $rule;
65 } else {
66 Config::throwInvalidArgumentException(
67 'Validation rules must be an instance of ValidationRuleSet or a compatible array'
68 );
69 }
70 }
71
72 $this->ruleSets = $validatedRules;
73 $this->values = $values;
74 $this->labels = $labels;
75 }
76
77 /**
78 * Returns whether the values failed validation or not.
79 *
80 * @since 1.0.0
81 */
82 public function fails(): bool
83 {
84 return !$this->passes();
85 }
86
87 /**
88 * Returns whether the values passed validation or not.
89 *
90 * @since 1.0.0
91 */
92 public function passes(): bool
93 {
94 $this->runValidationRules();
95
96 return empty($this->errors);
97 }
98
99 /**
100 * Runs the validation rules on the values, and stores any resulting errors.
101 * Will run only once, and then store the results for subsequent calls.
102 *
103 * @since 1.0.0
104 */
105 private function runValidationRules(): void
106 {
107 if ($this->ranValidationRules) {
108 return;
109 }
110
111 foreach ($this->ruleSets as $key => $ruleSet) {
112 $label = $this->labels[$key] ?? $key;
113 $value = $this->values[$key] ?? null;
114
115 $fail = function (string $message) use ($key, $label) {
116 $this->errors[$key] = str_ireplace('{field}', $label, $message);
117 };
118
119 foreach ($ruleSet as $rule) {
120 $command = $rule($value, $fail, $key, $this->values);
121
122 if ($command instanceof SkipValidationRules) {
123 break;
124 }
125
126 if ($command instanceof ExcludeValue) {
127 // Skip the rest of the rule and do not store the value
128 continue 2;
129 }
130
131 if ($rule instanceof Sanitizer) {
132 $value = $rule->sanitize($value);
133 }
134 }
135
136 $this->validatedValues[$key] = $value;
137 }
138
139 $this->ranValidationRules = true;
140 }
141
142 /**
143 * Returns the errors that were found during validation.
144 *
145 * @since 1.0.0
146 *
147 * @return array<string, string>
148 */
149 public function errors(): array
150 {
151 $this->runValidationRules();
152
153 return $this->errors;
154 }
155
156 /**
157 * Returns the validated values, with any sanitization rules applied.
158 *
159 * @since 1.0.0
160 *
161 * @return array<string, mixed>
162 */
163 public function validated(): array
164 {
165 $this->runValidationRules();
166
167 return $this->validatedValues;
168 }
169 }
170