PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.6
GiveWP – Donation Plugin and Fundraising Platform v4.16.6
4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 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 / field-conditions / src / FieldCondition.php
give / vendor / vendor-prefixed / stellarwp / field-conditions / src Last commit date
Concerns 1 year ago Contracts 1 year ago ComplexConditionSet.php 1 year ago Config.php 1 year ago FieldCondition.php 1 year ago NestedCondition.php 1 year ago SimpleConditionSet.php 1 year ago
FieldCondition.php
148 lines
1 <?php
2
3 namespace Give\Vendors\StellarWP\FieldConditions;
4
5 use InvalidArgumentException;
6 use Give\Vendors\StellarWP\FieldConditions\Concerns\HasLogicalOperator;
7 use Give\Vendors\StellarWP\FieldConditions\Contracts\Condition;
8
9 /**
10 * @since 1.0.0
11 */
12 class FieldCondition implements Condition
13 {
14 use HasLogicalOperator;
15
16 const COMPARISON_OPERATORS = ['=', '!=', '>', '>=', '<', '<=', 'contains', 'not_contains'];
17
18 /** @var string */
19 const TYPE = 'basic';
20
21 /** @var string */
22 protected $field;
23
24 /** @var mixed */
25 protected $value;
26
27 /** @var string */
28 protected $comparisonOperator;
29
30 protected $strict = false;
31
32 /**
33 * Create a new FieldCondition.
34 *
35 * @since 1.0.0
36 *
37 * @param mixed $value
38 */
39 public function __construct(string $field, string $comparisonOperator, $value, string $logicalOperator = 'and')
40 {
41 if ($this->isInvalidComparisonOperator($comparisonOperator)) {
42 throw Config::throwInvalidArgumentException(
43 "Invalid comparison operator: $comparisonOperator. Must be one of: " . implode(
44 ', ',
45 self::COMPARISON_OPERATORS
46 )
47 );
48 }
49
50 $this->field = $field;
51 $this->comparisonOperator = $comparisonOperator;
52 $this->value = $value;
53 $this->setLogicalOperator($logicalOperator);
54 }
55
56 /**
57 * @since 1.0.0
58 *
59 * @inheritDoc
60 */
61 public function jsonSerialize(): array
62 {
63 return [
64 'type' => static::TYPE,
65 'field' => $this->field,
66 'value' => $this->value,
67 'strictComparison' => $this->strict,
68 'comparisonOperator' => $this->comparisonOperator,
69 'logicalOperator' => $this->logicalOperator,
70 ];
71 }
72
73 /**
74 * @since 1.0.0
75 */
76 public function passes(array $values): bool
77 {
78 if (!isset($values[$this->field])) {
79 throw new InvalidArgumentException("Field {$this->field} not found in test values.");
80 }
81
82 $testValue = $values[$this->field];
83
84 if ($this->strict && $this->comparisonOperator !== '!=' && gettype($testValue) !== gettype($this->value)) {
85 return false;
86 }
87
88 switch ($this->comparisonOperator) {
89 case '=':
90 return $testValue == $this->value;
91 case '!=':
92 return $this->strict ? $testValue !== $this->value : $testValue != $this->value;
93 case '>':
94 return $testValue > $this->value;
95 case '>=':
96 return $testValue >= $this->value;
97 case '<':
98 return $testValue < $this->value;
99 case '<=':
100 return $testValue <= $this->value;
101 case 'contains':
102 return ('' == $this->value || false !== strpos($testValue, $this->value));
103 case 'not_contains':
104 return ('' == $this->value || false === strpos($testValue, $this->value));
105 }
106 }
107
108 /**
109 * @inheritDoc
110 */
111 public function fails(array $values): bool
112 {
113 return !$this->passes($values);
114 }
115
116 /**
117 * Sets the condition to strict mode.
118 *
119 * @since 1.1.0
120 */
121 public function strict(bool $strict = true): self
122 {
123 $this->strict = $strict;
124
125 return $this;
126 }
127
128 /**
129 * Check if the provided operator is invalid.
130 *
131 * @since 1.0.0
132 */
133 protected function isInvalidComparisonOperator(string $operator): bool
134 {
135 return !in_array($operator, static::COMPARISON_OPERATORS, true);
136 }
137
138 /**
139 * Check if the provided boolean is invalid.
140 *
141 * @since 1.0.0
142 */
143 protected function isInvalidLogicalOperator(string $operator): bool
144 {
145 return !in_array($operator, Condition::LOGICAL_OPERATORS, true);
146 }
147 }
148