PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 3.2.2
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v3.2.2
V-3.3.0 3.2.2 3.2.1 3.2.0 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 V3.0.3 V3.0.2 -3.0.1 V_3.0.0 1.1.1 1.1.8 1.2 1.3 1.4 1.4.18 1.5.2 1.9 2.0 2.10.0 2.10.1 2.10.2 All 137 releases
bit-form / includes / Core / WorkFlow / ConditionalLogic.php

ConditionalLogic.php in Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder 3.2.2, at includes/Core/WorkFlow/ConditionalLogic.php

363 lines 11.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace BitCode\BitForm\Core\WorkFlow;
4
5 final class ConditionalLogic
6 {
7 protected $_workflow_condition;
8 protected $_data;
9
10 public function __construct($workFlowCondition, $data)
11 {
12 $this->_workflow_condition = $workFlowCondition;
13 $this->_data = $data;
14 }
15
16 public function valueToCheck($logic)
17 {
18 if ((isset($this->_data[$this->_workflow_condition->field]['mul']) && $this->_data[$this->_workflow_condition->field]['mul'])
19 || 'check' === $this->_data[$this->_workflow_condition->field]['type']
20 ) {
21 $fieldValue = !empty($this->_data[$this->_workflow_condition->field]['value']) ? $this->_data[$this->_workflow_condition->field]['value'] : [];
22 if (is_string($fieldValue)) {
23 if ('[' === $fieldValue[0] && ']' === $fieldValue[strlen($fieldValue) - 1]) {
24 $fieldValue = json_decode($fieldValue);
25 } else {
26 $fieldValue = explode(',', $fieldValue);
27 }
28 }
29 return [\explode(',', $this->_workflow_condition->val), $fieldValue];
30 }
31 $default = [
32 'between' => $this->_data[$this->_workflow_condition->field]['value'] === $this->_workflow_condition->val,
33 'equal' => $this->_data[$this->_workflow_condition->field]['value'] === $this->_workflow_condition->val,
34 'not_equal' => $this->_data[$this->_workflow_condition->field]['value'] !== $this->_workflow_condition->val,
35 'contain' => isset($this->_data[$this->_workflow_condition->field]['value']) && false !== stripos($this->_data[$this->_workflow_condition->field]['value'], $this->_workflow_condition->val),
36 'not_contain' => false === stripos($this->_data[$this->_workflow_condition->field]['value'], $this->_workflow_condition->val),
37 'contain_all' => isset($this->_data[$this->_workflow_condition->field]['value']) && false !== stripos($this->_data[$this->_workflow_condition->field]['value'], $this->_workflow_condition->val),
38 ];
39
40 return $default[$logic];
41 }
42
43 public function isBetween()
44 {
45 $fldValue = $this->_data[$this->_workflow_condition->field]['value'];
46 $actionsValue = json_decode($this->_workflow_condition->val);
47 if (is_object($actionsValue)) {
48 $min = empty($actionsValue->min) ? '' : $actionsValue->min;
49 $max = empty($actionsValue->max) ? '' : $actionsValue->max;
50 return $fldValue >= $min && $fldValue <= $max;
51 }
52 return false;
53 }
54
55 public function isEqual()
56 {
57 $valueToCheckFun = self::valueToCheck('equal');
58
59 if (!is_array($valueToCheckFun)) {
60 return $valueToCheckFun;
61 }
62
63 $valueToCheck = $valueToCheckFun[0];
64 $fieldValue = $valueToCheckFun[1];
65
66 if (count($valueToCheck) !== count($fieldValue)) {
67 return false;
68 }
69 $checker = 0;
70 foreach ($valueToCheck as $value) {
71 if (!empty($fieldValue) && \in_array($value, $fieldValue)) {
72 $checker = $checker + 1;
73 }
74 }
75 if ($checker === count($valueToCheck) && count($valueToCheck) === count($fieldValue)) {
76 return true;
77 }
78 return false;
79 }
80
81 public function isNotEqual()
82 {
83 $valueToCheckFun = self::valueToCheck('not_equal');
84
85 if (!is_array($valueToCheckFun)) {
86 return $valueToCheckFun;
87 }
88
89 $valueToCheck = $valueToCheckFun[0];
90
91 $fieldValue = $valueToCheckFun[1];
92
93 $valueToCheckLenght = count($valueToCheck);
94 if ($valueToCheckLenght !== count($fieldValue)) {
95 return true;
96 }
97 $checker = 0;
98 foreach ($valueToCheck as $value) {
99 if (!in_array($value, $fieldValue)) {
100 $checker += 1;
101 }
102 }
103 return $valueToCheckLenght === $checker;
104 }
105
106 public function isNull()
107 {
108 return empty($this->_data[$this->_workflow_condition->field]['value']);
109 }
110
111 public function isNotNull()
112 {
113 return !empty($this->_data[$this->_workflow_condition->field]['value']);
114 }
115
116 public function isContain()
117 {
118 $valueToCheckFun = self::valueToCheck('contain');
119
120 if (!is_array($valueToCheckFun)) {
121 return $valueToCheckFun;
122 }
123
124 $valueToCheck = $valueToCheckFun[0];
125 $fieldValue = $valueToCheckFun[1];
126
127 $checker = 0;
128 foreach ($valueToCheck as $value) {
129 if (\in_array($value, $fieldValue)) {
130 $checker = $checker + 1;
131 }
132 }
133 if ($checker > 0) {
134 return true;
135 }
136 return false;
137 }
138
139 public function isContainAll()
140 {
141 $valueToCheckFun = self::valueToCheck('contain_all');
142
143 if (!is_array($valueToCheckFun)) {
144 return $valueToCheckFun;
145 }
146
147 $valueToCheck = $valueToCheckFun[0];
148 $fieldValue = $valueToCheckFun[1];
149
150 $checker = 0;
151 foreach ($valueToCheck as $value) {
152 if (\in_array($value, $fieldValue)) {
153 $checker = $checker + 1;
154 }
155 }
156 if ($checker >= count($valueToCheck)) {
157 return true;
158 }
159 return false;
160 }
161
162 public function isNotContain()
163 {
164 $valueToCheckFun = self::valueToCheck('not_contain');
165
166 if (!is_array($valueToCheckFun)) {
167 return $valueToCheckFun;
168 }
169
170 $valueToCheck = $valueToCheckFun[0];
171 $fieldValue = $valueToCheckFun[1];
172
173 $checker = 0;
174 foreach ($valueToCheck as $value) {
175 if (!in_array($value, $fieldValue)) {
176 $checker = $checker + 1;
177 }
178 }
179 if ($checker === count($valueToCheck)) {
180 return true;
181 }
182 return false;
183 }
184
185 public function isGreaterThenValue()
186 {
187 if (!isset($this->_data[$this->_workflow_condition->field]['value'])) {
188 return false;
189 }
190 return isset($this->_data[$this->_workflow_condition->field]['value']) && $this->_data[$this->_workflow_condition->field]['value'] > $this->_workflow_condition->val;
191 }
192
193 public function isLessThenValue()
194 {
195 if (!isset($this->_data[$this->_workflow_condition->field]['value'])) {
196 return false;
197 }
198 return isset($this->_data[$this->_workflow_condition->field]['value']) && $this->_data[$this->_workflow_condition->field]['value'] < $this->_workflow_condition->val;
199 }
200
201 public function isGreatertOrEqual()
202 {
203 if (!isset($this->_data[$this->_workflow_condition->field]['value'])) {
204 return false;
205 }
206 return isset($this->_data[$this->_workflow_condition->field]['value']) && $this->_data[$this->_workflow_condition->field]['value'] >= $this->_workflow_condition->val;
207 }
208
209 public function isLessOrEqual()
210 {
211 if (!isset($this->_data[$this->_workflow_condition->field]['value'])) {
212 return false;
213 }
214 return isset($this->_data[$this->_workflow_condition->field]['value']) && $this->_data[$this->_workflow_condition->field]['value'] <= $this->_workflow_condition->val;
215 }
216
217 public function isStarttWithString()
218 {
219 if (!isset($this->_data[$this->_workflow_condition->field]['value'])) {
220 return false;
221 }
222 return isset($this->_data[$this->_workflow_condition->field]['value']) && 0 === stripos($this->_data[$this->_workflow_condition->field]['value'], $this->_workflow_condition->val);
223 }
224
225 public function isEndWithString()
226 {
227 if (!isset($this->_data[$this->_workflow_condition->field]['value'])) {
228 return false;
229 }
230 $fieldValue = $this->_data[$this->_workflow_condition->field]['value'];
231 $fieldValueLength = strlen($this->_data[$this->_workflow_condition->field]['value']);
232 $compareValue = strtolower($this->_workflow_condition->val);
233 $compareValueLength = strlen($this->_workflow_condition->val);
234 $fieldValueEnds = strtolower(substr($fieldValue, $fieldValueLength - $compareValueLength, $fieldValueLength));
235 return $compareValue === $fieldValueEnds;
236 }
237
238 public function logicOnFieldActionValue($actionDetail, $fieldData, $fields)
239 {
240 if (!empty($actionDetail->val) && !empty($fieldData[$actionDetail->field]['key'])) {
241 $actionValue = Helper::replaceFieldWithValue($actionDetail->val, $fieldData);
242 $fields->{$fieldData[$actionDetail->field]['key']}->val = Helper::evalMathExpression($actionValue);
243 $fieldData[$actionDetail->field]['value'] = $actionValue;
244 }
245 return $fieldData;
246 }
247
248 public function logicOnFieldActionShow($actionDetail, $fieldData, $fields)
249 {
250 $fields->{$fieldData[$actionDetail->field]['key']}->valid->hide = false;
251 if ('hidden' === $fields->{$fieldData[$actionDetail->field]['key']}->typ) {
252 $fields->{$fieldData[$actionDetail->field]['key']}->typ = 'text';
253 }
254 return $fieldData;
255 }
256
257 public function logicOnFieldActions($workFlowReturnable, $fieldData, $fields, $actionDetail)
258 {
259 return [
260 'value' => self::logicOnFieldActionValue($actionDetail, $fieldData, $fields),
261 'hide' => $fields->{$fieldData[$actionDetail->field]['key']}->valid->disabled = true,
262 'enable' => $fields->{$fieldData[$actionDetail->field]['key']}->valid->disabled = false,
263 'disable' => $fields->{$fieldData[$actionDetail->field]['key']}->valid->disabled = true,
264 'readonly' => $fields->{$fieldData[$actionDetail->field]['key']}->valid->readonly = true,
265 'show' => self::logicOnFieldActionShow($actionDetail, $fieldData, $fields),
266 ];
267 // return $workFlowReturnable['fields'];
268 }
269
270 public function getConditionStatus()
271 {
272 $workflows = $this->_workflow_condition;
273 if (is_array($this->_workflow_condition)) {
274 foreach ($this->_workflow_condition as $sskey => $ssvalue) {
275 if (!is_string($ssvalue)) {
276 $this->_workflow_condition = $ssvalue;
277 $isCondition = $this->getConditionStatus();
278 if (0 === $sskey) {
279 $conditionStatus = $isCondition;
280 }
281
282 if ($sskey - 1 >= 0 && is_string($workflows[$sskey - 1])) {
283 switch (strtolower($workflows[$sskey - 1])) {
284 case 'or':
285 $conditionStatus = $conditionStatus || $isCondition;
286 break;
287
288 case 'and':
289 $conditionStatus = $conditionStatus && $isCondition;
290 break;
291
292 default:
293 break;
294 }
295 }
296 }
297 }
298 return (bool) $conditionStatus;
299 } else {
300 $this->_workflow_condition->val = Helper::replaceFieldWithValue($this->_workflow_condition->val, $this->_data);
301
302 return $this->isLogicMatch($this->_workflow_condition->logic);
303 }
304 }
305
306 public function isLogicMatch($logic)
307 {
308 if (isset($this->_workflow_condition->smartKey)) {
309 $this->_workflow_condition->field = str_replace('()', '', $this->_workflow_condition->field);
310 }
311
312 if (!isset($this->_data[$this->_workflow_condition->field])) {
313 return false;
314 }
315 switch (strtolower($logic)) {
316 case 'equal':
317 return self::isEqual();
318
319 case 'not_equal':
320 return self::isNotEqual();
321
322 case 'null':
323 return self::isNull();
324
325 case 'not_null':
326 return self::isNotNull();
327
328 case 'contain':
329 return self::isContain();
330
331 case 'contain_all':
332 return self::isContainAll();
333
334 case 'not_contain':
335 return self::isNotContain();
336
337 case 'greater':
338 return self::isGreaterThenValue();
339
340 case 'less':
341 return self::isLessThenValue();
342
343 case 'greater_or_equal':
344 return self::isGreatertOrEqual();
345
346 case 'less_or_equal':
347 return self::isLessOrEqual();
348
349 case 'start_with':
350 return self::isStarttWithString();
351
352 case 'end_with':
353 return self::isEndWithString();
354
355 case 'between':
356 return self::isBetween();
357
358 default:
359 return false;
360 }
361 }
362 }
363