PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.27.2
GiveWP – Donation Plugin and Fundraising Platform v2.27.2
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 / src / Form / LegacyConsumer / Actions / DetermineVisibilityForRequest.php
give / src / Form / LegacyConsumer / Actions Last commit date
DetermineVisibilityForRequest.php 4 years ago UploadFilesAction.php 4 years ago
DetermineVisibilityForRequest.php
141 lines
1 <?php
2
3 namespace Give\Form\LegacyConsumer\Actions;
4
5 use ArrayObject;
6 use Give\Framework\FieldsAPI\Conditions\BasicCondition;
7 use Give\Framework\FieldsAPI\Conditions\Condition;
8 use Give\Framework\FieldsAPI\Field;
9 use Give\ValueObjects\Money;
10
11 /**
12 * @since 2.21.0
13 */
14 class DetermineVisibilityForRequest
15 {
16 /** @var bool */
17 const IS_VISIBLE = true;
18
19 /** @var Field */
20 private $field;
21
22 /** @var ArrayObject */
23 protected $postData;
24
25 /**
26 * @since 2.21.0
27 * @param Field $field
28 * @param array $postData
29 */
30 public function __construct(Field $field, array $postData)
31 {
32 $this->field = $field;
33 $this->postData = new ArrayObject($postData);
34 }
35
36 /**
37 * @since 2.21.0
38 */
39 public function __invoke()
40 {
41 if (!$this->fieldHasVisibilityConditions()) {
42 return self::IS_VISIBLE;
43 }
44
45 $conditions = $this->field->getVisibilityConditions();
46 return array_reduce($conditions, [$this, 'reduceVisibility'], self::IS_VISIBLE);
47 }
48
49 /**
50 * @since 2.21.0
51 * @return bool
52 */
53 protected function fieldHasVisibilityConditions()
54 {
55 return method_exists($this->field, 'hasVisibilityConditions')
56 && $this->field->hasVisibilityConditions();
57 }
58
59 /**
60 * @since 2.21.0
61 * @param bool $visibility
62 * @param Condition $condition
63 * @return bool
64 */
65 protected function reduceVisibility($visibility, Condition $condition)
66 {
67 $result = $this->compareConditionWithOperator($condition);
68
69 return 'and' === $condition->boolean
70 ? $visibility && $result
71 : $visibility || $result;
72 }
73
74 /**
75 * @since 2.21.0
76 * @param Condition $condition
77 * @return bool
78 */
79 protected function compareConditionWithOperator(Condition $condition)
80 {
81 if (is_a($condition, BasicCondition::class)) {
82 return $this->compareBasicConditionWithOperator($condition);
83 }
84
85 // @TODO Implement nested conditions.
86 return self::IS_VISIBLE;
87 }
88
89 /**
90 * @since 2.21.0
91 * @param BasicCondition $condition
92 * @return bool
93 */
94 protected function compareBasicConditionWithOperator(BasicCondition $condition)
95 {
96 $conditionValue = $condition->value;
97 $comparisonValue = $this->postData[$condition->field];
98
99 if ('give-amount' === $condition->field) {
100 $conditionValue = $this->normalizeMinorAmount($conditionValue);
101 $comparisonValue = $this->normalizeMinorAmount($comparisonValue);
102 }
103
104 switch ($condition->operator) {
105 case '=':
106 return $comparisonValue === $conditionValue;
107 case '!=':
108 return $comparisonValue !== $conditionValue;
109 case '>':
110 return $comparisonValue > $conditionValue;
111 case '>=':
112 return $comparisonValue >= $conditionValue;
113 case '<':
114 return $comparisonValue < $conditionValue;
115 case '<=':
116 return $comparisonValue <= $conditionValue;
117 default:
118 return false;
119 }
120 }
121
122 /**
123 * @since 2.21.0
124 * @param $amount
125 * @return int
126 */
127 protected function normalizeMinorAmount($amount)
128 {
129 $currency = give_get_currency($this->postData['give-form-id']);
130 $settings = give_get_currencies('all')[$currency]['setting'];
131
132 $amount = str_replace(
133 [$settings['thousands_separator'], $settings['decimal_separator']],
134 ['', '.'],
135 $amount
136 );
137
138 return Money::of($amount, $currency)->getMinorAmount();
139 }
140 }
141