PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.27.2
GiveWP – Donation Plugin and Fundraising Platform v2.27.2
4.16.4 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
Concerns 3 years ago Contracts 3 years ago Exceptions 3 years ago Rules 3 years ago Config.php 3 years ago ServiceProvider.php 3 years ago ValidationRuleSet.php 3 years ago ValidationRulesRegistrar.php 3 years ago Validator.php 3 years ago
Validator.php
182 lines
1 <?php
2 /**
3 * @license GPL-2.0-or-later
4 *
5 * Modified by impress-org on 24-May-2023 using Strauss.
6 * @see https://github.com/BrianHenryIE/strauss
7 */
8
9 declare(strict_types=1);
10
11 namespace Give\Vendors\StellarWP\Validation;
12
13 use Give\Vendors\StellarWP\Validation\Contracts\Sanitizer;
14
15 /**
16 * A tool for taking in a set of values and corresponding validation rules, and then validating the values.
17 *
18 * @unreleased
19 */
20 class Validator
21 {
22 /**
23 * @var array<string, ValidationRuleSet>
24 */
25 private $ruleSets;
26
27 /**
28 * @var array<string, mixed>
29 */
30 private $values;
31
32 /**
33 * @var array<string, string>
34 */
35 private $labels;
36
37 /**
38 * @var array<string, string>
39 */
40 private $errors = [];
41
42 /**
43 * @var array<string, mixed>
44 */
45 private $validatedValues = [];
46
47 /**
48 * @var bool
49 */
50 private $ranValidationRules = false;
51
52 /**
53 * @unreleased
54 *
55 * @param array<string, ValidationRuleSet|array> $ruleSets
56 * @param array<string, mixed> $values
57 */
58 public function __construct(array $ruleSets, array $values, array $labels = [])
59 {
60 $this->validateRulesAndValues($ruleSets, $values);
61
62 $validatedRules = [];
63 foreach ($ruleSets as $key => $rule) {
64 if (is_array($rule)) {
65 $validatedRules[$key] = Config::getServiceContainer()->get(ValidationRuleSet::class)->rules(...$rule);
66 } elseif ($rule instanceof ValidationRuleSet) {
67 $validatedRules[$key] = $rule;
68 } else {
69 Config::throwInvalidArgumentException(
70 'Validation rules must be an instance of ValidationRuleSet or a compatible array'
71 );
72 }
73 }
74
75 $this->ruleSets = $validatedRules;
76 $this->values = $values;
77 $this->labels = $labels;
78 }
79
80 /**
81 * Validates that all rules have a corresponding value with the same key.
82 *
83 * @unreleased
84 *
85 * @return void
86 */
87 private function validateRulesAndValues(array $rules, array $values)
88 {
89 $missingKeys = array_diff_key($rules, $values);
90
91 if (!empty($missingKeys)) {
92 Config::throwInvalidArgumentException(
93 "Missing values for rules: " . implode(', ', array_keys($missingKeys))
94 );
95 }
96 }
97
98 /**
99 * Returns whether the values failed validation or not.
100 *
101 * @unreleased
102 */
103 public function fails(): bool
104 {
105 return !$this->passes();
106 }
107
108 /**
109 * Returns whether the values passed validation or not.
110 *
111 * @unreleased
112 */
113 public function passes(): bool
114 {
115 $this->runValidationRules();
116
117 return empty($this->errors);
118 }
119
120 /**
121 * Runs the validation rules on the values, and stores any resulting errors.
122 * Will run only once, and then store the results for subsequent calls.
123 *
124 * @unreleased
125 *
126 * @return void
127 */
128 private function runValidationRules()
129 {
130 if ($this->ranValidationRules) {
131 return;
132 }
133
134 foreach ($this->ruleSets as $key => $ruleSet) {
135 $label = $this->labels[$key] ?? $key;
136 $value = $this->values[$key] ?? null;
137
138 $fail = function (string $message) use ($key, $label) {
139 $this->errors[$key] = str_ireplace('{field}', $label, $message);
140 };
141
142 foreach ($ruleSet as $rule) {
143 $rule($value, $fail, $key, $this->values);
144
145 if ($rule instanceof Sanitizer) {
146 $value = $rule->sanitize($value);
147 }
148 }
149
150 $this->validatedValues[$key] = $value;
151 }
152
153 $this->ranValidationRules = true;
154 }
155
156 /**
157 * Returns the errors that were found during validation.
158 *
159 * @unreleased
160 *
161 * @return array<string, string>
162 */
163 public function errors(): array
164 {
165 $this->runValidationRules();
166
167 return $this->errors;
168 }
169
170 /**
171 * Returns the validated values, with any sanitization rules applied.
172 *
173 * @unreleased
174 */
175 public function validated(): array
176 {
177 $this->runValidationRules();
178
179 return $this->validatedValues;
180 }
181 }
182