PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 3.1.3
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v3.1.3
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 / WorkFlowHandler.php

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

404 lines 15.5 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 use BitCode\BitForm\Core\Database\WorkFlowModel;
6
7 final class WorkFlowHandler
8 {
9 private static $_formID;
10 private static $_workFlowModel;
11 private $_user_details;
12
13 public function __construct($formID, array $user_details = null)
14 {
15 static::$_formID = $formID;
16 static::$_workFlowModel = new WorkFlowModel();
17 $this->_user_details = $user_details;
18 }
19
20 public function getAllworkFlowV1()
21 {
22 $workFlows = static::$_workFlowModel->get(
23 [
24 'id',
25 'workflow_name',
26 'workflow_type',
27 'workflow_run',
28 'workflow_behaviour',
29 'workflow_condition',
30 'workflow_action'
31 ],
32 [
33 'form_id' => static::$_formID,
34 ],
35 null,
36 null,
37 'id',
38 'desc'
39 );
40 $workFlowsFormated = [];
41 if (empty($workFlows) || is_wp_error($workFlows)) {
42 return [];
43 }
44 foreach ($workFlows as $key => $value) {
45 $allAction = json_decode($value->workflow_action);
46 $workFlow['id'] = $value->id;
47 $workFlow['title'] = $value->workflow_name;
48 $workFlow['action_type'] = $value->workflow_type;
49 $workFlow['action_run'] = $value->workflow_run;
50 $workFlow['action_behaviour'] = $value->workflow_behaviour;
51 $workFlow['logics'] = json_decode($value->workflow_condition);
52 $workFlow['actions'] = $allAction->action;
53 $workFlow['successAction'] = $allAction->successAction;
54 if (isset($allAction->validateMsg)) {
55 $workFlow['validateMsg'] = $allAction->validateMsg;
56 }
57 if (isset($allAction->avoid_delete)) {
58 $workFlow['avoid_delete'] = $allAction->avoid_delete;
59 }
60 $workFlowsFormated[$key] = $workFlow;
61 }
62
63 return $workFlowsFormated;
64 }
65
66 public function getAllworkFlow()
67 {
68 $workFlows = static::$_workFlowModel->get(
69 [
70 'id',
71 'workflow_name',
72 'workflow_type',
73 'workflow_run',
74 'workflow_behaviour',
75 'workflow_condition',
76 'workflow_info',
77 'workflow_order',
78 'workflow_status',
79 ],
80 [
81 'form_id' => static::$_formID,
82 ],
83 null,
84 null,
85 'workflow_order',
86 'ASC'
87 );
88 $workFlowsFormated = [];
89 if (empty($workFlows) || is_wp_error($workFlows)) {
90 return [];
91 }
92 foreach ($workFlows as $workFlowKey => $value) {
93 $workFlow['id'] = $value->id;
94 $workFlow['title'] = $value->workflow_name;
95 $workFlow['action_type'] = $value->workflow_type;
96 $workFlow['action_run'] = $value->workflow_run;
97 $workFlow['action_behaviour'] = $value->workflow_behaviour;
98 $workFlow['conditions'] = json_decode($value->workflow_condition ?? '');
99 $workFlow['info'] = json_decode($value->workflow_info ?? '');
100 $workFlow['status'] = (int) $value->workflow_status;
101 foreach ((array) $workFlow['conditions'] as $conIndex => $condition) {
102 if (property_exists($condition, 'logics')) {
103 $workFlow['conditions'][$conIndex]->logics = $condition->logics;
104 }
105 if (property_exists($condition, 'actions')) {
106 $workFlow['conditions'][$conIndex]->actions = $condition->actions;
107 }
108 }
109
110 $workFlowsFormated[$workFlowKey] = $workFlow;
111 }
112
113 return $workFlowsFormated;
114 }
115
116 public function updateworkFlow($workFlowID, $workFlowDetails, $actionIntegrationDetails, $workFlowOrder, $errorCode = [])
117 {
118 $conditions = $workFlowDetails->conditions;
119 foreach ($conditions as $conIndex => $condition) {
120 $actions = $condition->actions;
121 if (!empty($actions->success)) {
122 foreach ($actions->success as $actionKey => $actionValue) {
123 $detailIds = $actionValue->details->id;
124 if (!empty($detailIds)) {
125 if (is_array($detailIds)) {
126 foreach ($detailIds as $key => $id) {
127 $actionIntegrationID = \json_decode($id);
128 if (isset($actionIntegrationID->index)) {
129 $value = wp_json_encode(['id' => (string) $actionIntegrationDetails[$actionValue->type][$actionIntegrationID->index]]);
130 $errorCode['workflow'] = 1;
131 } else {
132 $value = $id;
133 }
134 $workFlowDetails->conditions[$conIndex]->actions->success[$actionKey]->details->id[$key] = $value;
135 }
136 } else {
137 $actionIntegrationID = \json_decode($detailIds);
138 if (isset($actionIntegrationDetails[$actionValue->type])) {
139 if (isset($actionIntegrationID->index)) {
140 $value = wp_json_encode(['id' => (string) $actionIntegrationDetails[$actionValue->type][$actionIntegrationID->index]]);
141 $errorCode['workflow'] = 1;
142 } else {
143 $value = $actionValue->details->id;
144 }
145
146 $workFlowDetails->conditions[$conIndex]->actions->success[$actionKey]->details->id = $value;
147 }
148 }
149 }
150 // pdfId update
151 if (isset($actionIntegrationDetails['pdfTem']) && !empty($actionValue->details->pdfId)) {
152 $pdfDetailId = $actionValue->details->pdfId;
153 $actionIntegrationID = \json_decode($pdfDetailId);
154 if (isset($actionIntegrationID->index)) {
155 $value = wp_json_encode(['id' => (string) $actionIntegrationDetails['pdfTem'][$actionIntegrationID->index]]);
156 $errorCode['workflow'] = 1;
157 } else {
158 $value = $actionValue->details->pdfId;
159 }
160
161 $workFlowDetails->conditions[$conIndex]->actions->success[$actionKey]->details->pdfId = $value;
162 }
163 }
164 }
165 if (!empty($actions->failure)) {
166 $validateMsgID = \json_decode($actions->failure);
167 $failure = isset($validateMsgID->index) ?
168 wp_json_encode(
169 [
170 'id' => $actionIntegrationDetails['successMsg'][$validateMsgID->index],
171 ]
172 )
173 : $actions->failure;
174
175 $conditions[$conIndex]->actions->failure = $failure;
176 }
177
178 if (!empty($workFlowDetails->avoid_delete)) {
179 $conditions[$conIndex]->actions['avoid_delete'] = $workFlowDetails->avoid_delete;
180 }
181 }
182
183 $status = static::$_workFlowModel->update(
184 [
185 'workflow_name' => $workFlowDetails->title,
186 'workflow_type' => 'delete' === $workFlowDetails->action_run ? 'delete' : $workFlowDetails->action_type,
187 'workflow_run' => $workFlowDetails->action_run,
188 'workflow_behaviour' => $workFlowDetails->action_behaviour,
189 'workflow_condition' => wp_json_encode($conditions),
190 'workflow_info' => wp_json_encode($workFlowDetails->info),
191 // "workflow_action" => wp_json_encode($workFlowActions),
192 'workflow_order' => $workFlowOrder,
193 'workflow_status' => $workFlowDetails->status,
194 'user_id' => $this->_user_details['id'],
195 'user_ip' => $this->_user_details['ip'],
196 'user_location' => '',
197 'user_device' => $this->_user_details['device'],
198 'updated_at' => $this->_user_details['time'],
199 ],
200 [
201 'id' => $workFlowID,
202 'form_id' => static::$_formID,
203 ]
204 );
205
206 if (is_wp_error($status) && 'result_empty' !== $status->get_error_code()) {
207 $errorCode['workflow'] = 2;
208 }
209 return $errorCode;
210 }
211
212 public function saveworkFlow($workFlowDetails, $actionIntegrationDetails, $workFlowOrder)
213 {
214 $conditions = $workFlowDetails->conditions;
215 foreach ($conditions as $conIndex => $condition) {
216 $actions = $condition->actions;
217 if (property_exists($actions, 'success')) {
218 foreach ($actions->success as $actionKey => $actionValue) {
219 $detailIds = $actionValue->details->id;
220 if (!empty($detailIds)) {
221 if (is_array($detailIds)) {
222 foreach ($detailIds as $key => $id) {
223 $actionIntegrationID = \json_decode($id);
224
225 $value = $this->maybeGetSuccessActionID($actionIntegrationID, $actionIntegrationDetails, $actionValue->type);
226
227 $workFlowDetails->conditions[$conIndex]->actions->success[$actionKey]->details->id[$key] = false === $value ? $id : wp_json_encode(['id' => "$value"]);
228 }
229 } else {
230 $actionIntegrationID = \json_decode($detailIds);
231 $value = $this->maybeGetSuccessActionID($actionIntegrationID, $actionIntegrationDetails, $actionValue->type);
232 $workFlowDetails->conditions[$conIndex]->actions->success[$actionKey]->details->id = false === $value ? $actionValue->details->id : wp_json_encode(['id' => "$value"]);
233 }
234 }
235
236 // pdfId update
237 if (isset($actionIntegrationDetails['pdfTem']) && !empty($actionValue->details->pdfId)) {
238 $pdfDetailId = $actionValue->details->pdfId;
239 $actionIntegrationID = \json_decode($pdfDetailId);
240 $value = $this->maybeGetSuccessActionID($actionIntegrationID, $actionIntegrationDetails, 'pdfTem');
241
242 $workFlowDetails->conditions[$conIndex]->actions->success[$actionKey]->details->pdfId = false === $value ? $pdfDetailId : wp_json_encode(['id' => "$value"]);
243 }
244 }
245 }
246
247 if (!empty($actions->failure)) {
248 $validateMsgID = \json_decode($actions->failure);
249 $failure = isset($validateMsgID->index) ?
250 wp_json_encode(
251 [
252 'id' => $actionIntegrationDetails['successMsg'][$validateMsgID->index],
253 ]
254 )
255 : $actions->failure;
256
257 $conditions[$conIndex]->actions->failure = $failure;
258 }
259
260 if (!empty($actions->avoid_delete)) {
261 $conditions[$conIndex]->actions->avoid_delete = $workFlowDetails->avoid_delete;
262 }
263 }
264
265 return static::$_workFlowModel->insert(
266 [
267 'workflow_name' => $workFlowDetails->title,
268 'workflow_type' => 'delete' === $workFlowDetails->action_run ? 'delete' : $workFlowDetails->action_type,
269 'workflow_run' => $workFlowDetails->action_run,
270 'workflow_behaviour' => $workFlowDetails->action_behaviour,
271 'workflow_condition' => wp_json_encode($conditions),
272 'workflow_info' => wp_json_encode($workFlowDetails->info),
273 'workflow_order' => $workFlowOrder,
274 'workflow_status' => isset($workFlowDetails->status) ? $workFlowDetails->status : 1,
275 'form_id' => static::$_formID,
276 'user_id' => $this->_user_details['id'],
277 'user_ip' => $this->_user_details['ip'],
278 'user_location' => '',
279 'user_device' => $this->_user_details['device'],
280 'created_at' => $this->_user_details['time'],
281 'updated_at' => $this->_user_details['time'],
282 ]
283 );
284 }
285
286 public function oldupdateworkFlow($workFlowID, $workFlowDetails, $actionIntegrationDetails)
287 {
288 // $workFlowActions['action'] = $workFlowDetails->actions;
289 // foreach ($workFlowDetails->successAction as $successActionkey => $successActionValue) {
290 // if (!empty($successActionValue->details->id)) {
291 // if (is_array($successActionValue->details->id)) {
292 // foreach ($successActionValue->details->id as $key => $value) {
293 // $actionIntegrationID = \json_decode($value);
294 // $workFlowDetails->successAction[$successActionkey]->details->id[$key]
295 // = isset($actionIntegrationID->index) ?
296 // wp_json_encode(
297 // [
298 // 'id'=>
299 // $actionIntegrationDetails[$successActionValue->type][$actionIntegrationID->index]
300 // ]
301 // )
302 // : $value;
303 // }
304 // } else {
305 // $actionIntegrationID = \json_decode($successActionValue->details->id);
306 // $workFlowDetails->successAction[$successActionkey]->details->id
307 // = isset($actionIntegrationID->index) ?
308 // wp_json_encode(
309 // [
310 // 'id'=>
311 // $actionIntegrationDetails[$successActionValue->type][$actionIntegrationID->index]
312 // ]
313 // )
314 // : $successActionValue->details->id;
315 // }
316 // }
317 // }
318 // $workFlowActions['success'] = $workFlowDetails->successAction;
319 // if (!empty($workFlowDetails->validateMsg)) {
320 // $validateMsgID = \json_decode($workFlowDetails->validateMsg);
321 // $workFlowActions['validateMsg'] = isset($validateMsgID->index) ?
322 // wp_json_encode(
323 // [
324 // 'id'=>
325 // $actionIntegrationDetails['successMsg'][$validateMsgID->index]
326 // ]
327 // )
328 // : $workFlowDetails->validateMsg;
329 // }
330 // if (!empty($workFlowDetails->avoid_delete)) {
331 // $workFlowActions['avoid_delete'] = $workFlowDetails->avoid_delete;
332 // }
333 return static::$_workFlowModel->update(
334 [
335 'workflow_name' => $workFlowDetails->title,
336 'workflow_type' => 'delete' === $workFlowDetails->action_run ? 'delete' : $workFlowDetails->action_type,
337 'workflow_run' => $workFlowDetails->action_run,
338 'workflow_behaviour' => $workFlowDetails->action_behaviour,
339 'workflow_condition' => wp_json_encode($workFlowDetails->conditions),
340 // "workflow_action" => null,
341 'workflow_status' => $workFlowDetails->status,
342 'user_id' => $this->_user_details['id'],
343 'user_ip' => $this->_user_details['ip'],
344 'user_location' => '',
345 'user_device' => $this->_user_details['device'],
346 'updated_at' => $this->_user_details['time'],
347 ],
348 [
349 'id' => $workFlowID,
350 'form_id' => static::$_formID,
351 ]
352 );
353 }
354
355 public function duplicateWorkFlow($currentFormID)
356 {
357 $workFlowCols = [
358 'workflow_name', 'workflow_type', 'workflow_run', 'workflow_behaviour',
359 'workflow_condition', 'workflow_info', 'workflow_action', 'workflow_status', 'form_id', 'user_id',
360 'user_ip', 'user_location', 'user_device', 'created_at', 'updated_at',
361 ];
362 $dupData = [
363 'workflow_name',
364 'workflow_type',
365 'workflow_run',
366 'workflow_behaviour',
367 'workflow_condition',
368 'workflow_info',
369 'workflow_action',
370 'workflow_status',
371 static::$_formID,
372 $this->_user_details['id'],
373 $this->_user_details['ip'],
374 '',
375 $this->_user_details['device'],
376 $this->_user_details['time'],
377 $this->_user_details['time'],
378 ];
379 return static::$_workFlowModel->duplicate($workFlowCols, $dupData, ['form_id' => $currentFormID]);
380 }
381
382 public function deleteworkFlow($workFlowID)
383 {
384 return static::$_workFlowModel->delete(
385 [
386 'id' => $workFlowID,
387 'form_id' => static::$_formID,
388 ]
389 );
390 }
391
392 public function maybeGetSuccessActionID($actionIntegrationID, $actionIntegrationDetails, $actionType)
393 {
394 if (isset($actionIntegrationDetails[$actionType])) {
395 if (isset($actionIntegrationID->index)) {
396 return $actionIntegrationDetails[$actionType][$actionIntegrationID->index];
397 } elseif (isset($actionIntegrationID->id, $actionIntegrationDetails[$actionType][wp_json_encode($actionIntegrationID)])) {
398 return $actionIntegrationDetails[$actionType][wp_json_encode($actionIntegrationID)];
399 }
400 }
401 return false;
402 }
403 }
404