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

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

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