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

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

255 lines 9.4 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\Integration\IntegrationHandler;
6 use BitCode\BitForm\Core\Messages\SuccessMessageHandler;
7 use BitCode\BitForm\Core\Util\Utilities;
8
9 final class Actions
10 {
11 private static $_formID;
12
13 public function __construct($formId)
14 {
15 static::$_formID = $formId;
16 }
17
18 public function setValue($actionDetail, $fieldData, $fields)
19 {
20 if (!empty($actionDetail->val)) {
21 $actionValue = '';
22 $fieldType = $fields->{$fieldData[$actionDetail->field]['key']}->typ;
23 $evalMathExpr = preg_match('/month|date/', $fieldType);
24 $fields->{$fieldData[$actionDetail->field]['key']}->val = '';
25 $actionValue = Helper::replaceFieldWithValue($actionDetail->val, $fieldData, !(bool)$evalMathExpr);
26 $fields->{$fieldData[$actionDetail->field]['key']}->val = $actionValue;
27 $fieldData[$actionDetail->field]['value'] = $actionValue;
28 }
29 return [$fields, $fieldData];
30 }
31
32 public function getActionValue($actionDetail, $fieldData, $fields)
33 {
34 $actionValue = '';
35 if (!empty($actionDetail->val)) {
36 $fieldType = $fields->{$fieldData[$actionDetail->field]['key']}->typ;
37 $evalMathExpr = preg_match('/month|date/', $fieldType);
38 $fields->{$fieldData[$actionDetail->field]['key']}->val = '';
39 $actionValue = Helper::replaceFieldWithValue($actionDetail->val, $fieldData, !(bool)$evalMathExpr);
40 }
41 return $actionValue;
42 }
43
44 public function getActiveListIndex($actionDetail, $fieldData, $fields)
45 {
46 $activeList = $this->getActionValue($actionDetail, $fieldData, $fields);
47 $optionsList = $fields->{$fieldData[$actionDetail->field]['key']}->optionsList;
48 $activeListIndex = 0;
49 foreach ($optionsList as $key => $optionObj) {
50 $valueArr = (array) $optionObj;
51 $listName = array_keys($valueArr)[0];
52 if ($listName === $activeList) {
53 $activeListIndex = $key;
54 break;
55 }
56 }
57
58 return $activeListIndex;
59 }
60
61 public function show($fields, $fieldData, $actionDetail)
62 {
63 $fields->{$fieldData[$actionDetail->field]['key']}->valid->hide = false;
64 if ('hidden' === $fields->{$fieldData[$actionDetail->field]['key']}->typ) {
65 $fields->{$fieldData[$actionDetail->field]['key']}->typ = 'text';
66 }
67 }
68
69 public function setFieldProperty($actions, $fieldData, $fields)
70 {
71 if (empty($actions)) {
72 return [$fields, $fieldData];
73 }
74 foreach ($actions as $actionDetail) {
75 if (!empty($actionDetail->action) && !empty($actionDetail->field) && isset($fields->{$fieldData[$actionDetail->field]['key']}) && !empty($fields->{$fieldData[$actionDetail->field]['key']})) {
76 $fk = $fieldData[$actionDetail->field]['key'];
77 switch ($actionDetail->action) {
78 case 'value':
79 $data = $this->setValue($actionDetail, $fieldData, $fields);
80 $fields = $data[0];
81 $fieldData = $data[1];
82 break;
83 case 'hide':
84 // $fields->{$fk}->valid->hide = true;
85 Helper::setNestedProperty($fields, "{$fk}->valid->hide", true);
86 break;
87 case 'disable':
88 $fields->{$fk}->valid->disabled = true;
89 break;
90 case 'show':
91 $this->show($fields, $fieldData, $actionDetail);
92 break;
93 case 'enable':
94 $fields->{$fk}->valid->disabled = false;
95 break;
96 case 'readonly':
97 $fields->{$fk}->valid->readonly = true;
98 break;
99 case 'writeable':
100 $fields->{$fk}->valid->readonly = false;
101 break;
102 case 'required':
103 $fields->{$fk}->valid->required = true;
104 break;
105 case 'limit':
106 $fields->{$fk}->valid->limit = true;
107 break;
108 case 'min':
109 $fields->{$fk}->valid->min = true;
110 break;
111 case 'max':
112 $fields->{$fk}->valid->max = true;
113 break;
114 case 'activelist':
115 $fields->{$fk}->config->activeList = $this->getActiveListIndex($actionDetail, $fieldData, $fields);
116 break;
117 case 'lbl':
118 case 'ct':
119 $fields->{$fk}->lbl = $this->getActionValue($actionDetail, $fieldData, $fields);
120 break;
121 case 'sub-titl':
122 $fields->{$fk}->subtitle = $this->getActionValue($actionDetail, $fieldData, $fields);
123 break;
124 case 'hlp-txt':
125 $fields->{$fk}->helperTxt = $this->getActionValue($actionDetail, $fieldData, $fields);
126 break;
127 case 'placeholder':
128 $fields->{$fk}->ph = $this->getActionValue($actionDetail, $fieldData, $fields);
129 break;
130 case 'title':
131 $fields->{$fk}->title = $this->getActionValue($actionDetail, $fieldData, $fields);
132 break;
133 }
134 }
135 }
136 return [$fields, $fieldData];
137 }
138
139 public function setOnSubmitSetFieldValue($actions, $fieldValue)
140 {
141 if (empty($actions)) {
142 return $fieldValue;
143 }
144 foreach ($actions as $actionDetail) {
145 if (!empty($actionDetail->action) && !empty($actionDetail->field)) {
146 switch ($actionDetail->action) {
147 case 'value':
148 if (!empty($actionDetail->val)) {
149 $fieldValue[$actionDetail->field] = '';
150 $actionValue = Helper::replaceFieldWithValue($actionDetail->val, $fieldValue);
151 $fieldValue[$actionDetail->field] = $actionValue;
152 }
153 break;
154 }
155 }
156 }
157 return $fieldValue;
158 }
159
160 public function setOnFormSuccess($data, $actions, $fieldValue, $entryID)
161 {
162 if (empty($actions)) {
163 return $data;
164 }
165
166 foreach ($actions as $successActionDetail) {
167 $id = $successActionDetail->details->id;
168 if (!empty($id)) {
169 switch ($successActionDetail->type) {
170 case 'successMsg':
171 $data['workFlowReturnable'] = $this->confirmationMessage($data['workFlowReturnable'], $id, $fieldValue, $entryID);
172 break;
173 case 'redirectPage':
174 $data['workFlowReturnable'] = $this->redirectPage($data['workFlowReturnable'], $id, $fieldValue);
175 break;
176 case 'webHooks':
177 if (!$data['isWebHookQueued']) {
178 $data['isWebHookQueued'] = true;
179 }
180 $data['integrationsToExc'][] = $id;
181 break;
182 case 'mailNotify':
183 $data['mailData'][] = $successActionDetail->details;
184 break;
185 case 'dblOptin':
186 $data['dblOptin'][] = $successActionDetail->details;
187 break;
188 case 'integ':
189 $data['integrationsToExc'][] = $id;
190 break;
191 default:
192 break;
193 }
194 }
195 }
196 return $data;
197 }
198
199 public function confirmationMessage($workFlowReturnable, $successActionDetailId, $fieldValue, $entryID = null)
200 {
201 $id = Utilities::jsonObj($successActionDetailId)->id ?? null;
202 $messageHandler = new SuccessMessageHandler(static::$_formID);
203 $message = $messageHandler->getAMessage($id);
204 if (!is_wp_error($message) && !empty($message)) {
205 $msgConfig = Utilities::jsonObj($message[0]->message_config ?? '');
206 // Honor enable/disable: a disabled confirmation message is skipped so the default confirmation applies.
207 if (isset($msgConfig->status) && empty($msgConfig->status)) {
208 return $workFlowReturnable;
209 }
210 $messageContent = $message[0]->message_content;
211
212 // replace pdf link and password
213 if (class_exists('\BitCode\BitFormPro\Admin\DownloadFile') && !empty($entryID)) {
214 $downloadFile = new \BitCode\BitFormPro\Admin\DownloadFile();
215 $messageContent = $downloadFile->replacePdfShortCodeToLink($messageContent, static::$_formID, $entryID);
216 $messageContent = $downloadFile->replaceShortCodeToPdfPassword($messageContent, static::$_formID, $entryID);
217 }
218
219 $workFlowReturnable['message'] = Helper::replaceFieldWithValue($messageContent, $fieldValue, true, static::$_formID, true);
220 if (!empty($workFlowReturnable['message'])) {
221 $workFlowReturnable['message'] = do_shortcode($workFlowReturnable['message']);
222 }
223 $workFlowReturnable['msg_id'] = $message[0]->id;
224 $msgConfig = Utilities::jsonObj($message[0]->message_config ?? '');
225 if (!empty($msgConfig->autoHide)) {
226 $workFlowReturnable['msg_duration'] = abs(floatval($msgConfig->duration ?? 0) * 1000);
227 }
228 // expose the form's after-submission behaviour ('reset' | 'hide' | 'keep') to the frontend
229 if (isset($msgConfig->afterSubmit)) {
230 $workFlowReturnable['afterSubmit'] = $msgConfig->afterSubmit;
231 }
232 }
233 return $workFlowReturnable;
234 }
235
236 public function redirectPage($workFlowReturnable, $successActionDetailId, $fieldValue)
237 {
238 $id = Utilities::jsonObj($successActionDetailId)->id ?? null;
239 $integrationHandler = new IntegrationHandler(static::$_formID);
240 $redirectPage = $integrationHandler->getAIntegration($id, 'form', 'redirectPage');
241 if (!is_wp_error($redirectPage) && !empty($redirectPage)) {
242 // Honor enable/disable: a disabled redirect is skipped.
243 if (isset($redirectPage[0]->status) && empty($redirectPage[0]->status)) {
244 return $workFlowReturnable;
245 }
246 $url = Utilities::jsonObj($redirectPage[0]->integration_details ?? '')->url ?? '';
247 if (!empty($url)) {
248 $url = Helper::replaceFieldWithValue($url, $fieldValue);
249 }
250 $workFlowReturnable['redirectPage'] = empty($url) ? false : esc_url_raw($url);
251 }
252 return $workFlowReturnable;
253 }
254 }
255