PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.16.2
GiveWP – Donation Plugin and Fundraising Platform v3.16.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 3 years ago UploadFilesAction.php 4 years ago
DetermineVisibilityForRequest.php
90 lines
1 <?php
2
3 namespace Give\Form\LegacyConsumer\Actions;
4
5 use Give\Framework\FieldsAPI\Field;
6 use Give\Vendors\StellarWP\FieldConditions\Contracts\Condition;
7 use Give\Vendors\StellarWP\FieldConditions\FieldCondition;
8
9 /**
10 * @since 2.27.3 change postData to an array
11 * @since 2.21.0
12 */
13 class DetermineVisibilityForRequest
14 {
15 /** @var bool */
16 const IS_VISIBLE = true;
17
18 /** @var Field */
19 private $field;
20
21 /** @var array */
22 protected $postData;
23
24 /**
25 * @since 2.27.3 add parameter and return types
26 * @since 2.21.0
27 */
28 public function __construct(Field $field, array $postData)
29 {
30 $this->field = $field;
31 $this->postData = $postData;
32 }
33
34 /**
35 * @since 2.21.0
36 */
37 public function __invoke(): bool
38 {
39 if (!$this->fieldHasVisibilityConditions()) {
40 return self::IS_VISIBLE;
41 }
42
43 $conditions = $this->field->getVisibilityConditions();
44 return array_reduce($conditions, [$this, 'reduceVisibility'], self::IS_VISIBLE);
45 }
46
47 /**
48 * @since 2.21.0
49 * @return bool
50 */
51 protected function fieldHasVisibilityConditions(): bool
52 {
53 return method_exists($this->field, 'hasVisibilityConditions')
54 && $this->field->hasVisibilityConditions();
55 }
56
57 /**
58 * @since 2.27.3 update to use FieldConditions
59 * @since 2.21.0
60 */
61 protected function reduceVisibility(bool $visibility, Condition $condition): bool
62 {
63 $result = $this->compareConditionWithOperator($condition);
64
65 return 'and' === $condition->getLogicalOperator()
66 ? $visibility && $result
67 : $visibility || $result;
68 }
69
70 /**
71 * @since 2.29.2 Return false if the condition's field isn't present in the post data
72 * @since 2.27.3 update to use FieldConditions
73 * @since 2.21.0
74 */
75 protected function compareConditionWithOperator(Condition $condition): bool
76 {
77 if (is_a($condition, FieldCondition::class)) {
78 $conditionField = $condition->jsonSerialize()['field'];
79
80 if ( ! isset($this->postData[$conditionField])) {
81 return false;
82 }
83
84 return $condition->passes($this->postData);
85 }
86
87 return self::IS_VISIBLE;
88 }
89 }
90