PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 1.5.2
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v1.5.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 / Integration / IntegrationHandler.php

IntegrationHandler.php in Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder 1.5.2, at includes/Core/Integration/IntegrationHandler.php

318 lines 12.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\Integration;
4
5 use BitCode\BitForm\Admin\Form\AdminFormManager;
6 use BitCode\BitForm\Core\Util\MailNotifier;
7 use BitCode\BitForm\Core\Database\IntegrationModel;
8 use BitCode\BitForm\Core\Database\FormEntryLogModel;
9 use BitCode\BitForm\Core\Util\FieldValueHandler;
10
11 final class IntegrationHandler
12 {
13 private static $_formID;
14 private static $_integrationModel;
15 private $_user_details;
16
17 /**
18 * Constructor of Integration Handler
19 *
20 * @param Integer $formID If Integration is accessible globally then
21 * $formID will be 0 and category app
22 * @param Array $user_details Details of user accessing data
23 * @return void
24 */
25 public function __construct($formID, $user_details = null)
26 {
27 static::$_formID = $formID;
28 static::$_integrationModel = new IntegrationModel();
29 $this->_user_details = $user_details;
30 }
31
32 public function getAIntegration($integrationID, $integrationCategory = null, $integrationType = null)
33 {
34 $conditions = [
35 'form_id' => static::$_formID,
36 'id' => $integrationID,
37 ];
38 if (!is_null($integrationType)) {
39 $conditions = array_merge($conditions, ['integration_type' => $integrationType]);
40 }
41 if (!is_null($integrationCategory)) {
42 $conditions = array_merge($conditions, ['category' => $integrationCategory]);
43 }
44 return static::$_integrationModel->get(
45 [
46 'id',
47 'integration_name',
48 'integration_type',
49 'integration_details',
50 'form_id'
51 ],
52 $conditions
53 );
54 }
55
56 public function getAllIntegration($integrationCategory = null, $integrationType = null, $status = null, $id = null)
57 {
58 $conditions = [
59 'form_id' => static::$_formID
60 ];
61 if (!is_null($integrationType)) {
62 $conditions = array_merge($conditions, ['integration_type' => $integrationType]);
63 }
64
65 if (!is_null($integrationCategory)) {
66 $conditions = array_merge($conditions, ['category' => $integrationCategory]);
67 }
68 if (!is_null($status)) {
69 $conditions = array_merge($conditions, ['status' => 1]);
70 }
71 if (!is_null($id)) {
72 $conditions = array_merge($conditions, ['id' => $id]);
73 }
74 return static::$_integrationModel->get(
75 [
76 'id',
77 'form_id',
78 'integration_name',
79 'integration_type',
80 'integration_details',
81 'status'
82 ],
83 $conditions
84 );
85 }
86
87 public function getIntegrationWithoutFormId($integrationCategory = null, $integrationType = null, $status = null, $id = null)
88 {
89 $conditions = [];
90 if (!is_null($integrationType)) {
91 $conditions = array_merge($conditions, ['integration_type' => $integrationType]);
92 }
93
94 if (!is_null($integrationCategory)) {
95 $conditions = array_merge($conditions, ['category' => $integrationCategory]);
96 }
97 if (!is_null($status)) {
98 $conditions = array_merge($conditions, ['status' => 1]);
99 }
100 if (!is_null($id)) {
101 $conditions = array_merge($conditions, ['id' => $id]);
102 }
103 return static::$_integrationModel->get(
104 [
105 'id',
106 'form_id',
107 'integration_name',
108 'integration_type',
109 'integration_details',
110 'status'
111 ],
112 $conditions
113 );
114 }
115
116 public function saveIntegration($integrationName, $integrationType, $integrationDetails, $integrationCategory, $status = null)
117 {
118 if ($status == null) {
119 $status = 1;
120 }
121 return static::$_integrationModel->insert(
122 [
123 'integration_name' => $integrationName,
124 'integration_type' => $integrationType,
125 'integration_details' => $integrationDetails,
126 'category' => $integrationCategory,
127 'form_id' => static::$_formID,
128 'user_id' => $this->_user_details['id'],
129 'user_ip' => $this->_user_details['ip'],
130 'status' => $status,
131 'created_at' => $this->_user_details['time'],
132 'updated_at' => $this->_user_details['time']
133 ]
134 );
135 }
136
137 public function updateIntegration($integrationID, $integrationName, $integrationType, $integrationDetails, $integrationCategory, $status = null)
138 {
139 if ($status === null) {
140 $status = 1;
141 }
142 return static::$_integrationModel->update(
143 [
144 'integration_name' => $integrationName,
145 'integration_type' => $integrationType,
146 'integration_details' => $integrationDetails,
147 'category' => $integrationCategory,
148 'form_id' => static::$_formID,
149 'user_id' => $this->_user_details['id'],
150 'user_ip' => $this->_user_details['ip'],
151 'status' => $status,
152 'updated_at' => $this->_user_details['time']
153 ],
154 [
155 'id' => $integrationID
156 ]
157 );
158 }
159
160 public function duplicateAllInAForm($oldFormId)
161 {
162 $integCols = ['integration_name', 'integration_type', 'integration_details', 'category', 'form_id', 'user_id', 'user_ip', 'status', 'created_at', 'updated_at'];
163 $integDupData = [
164 'integration_name',
165 'integration_type',
166 'integration_details',
167 'category',
168 static::$_formID,
169 $this->_user_details['id'],
170 $this->_user_details['ip'],
171 'status',
172 $this->_user_details['time'],
173 $this->_user_details['time']
174 ];
175 return static::$_integrationModel->duplicate($integCols, $integDupData, ['form_id' => $oldFormId]);
176 }
177
178 public function deleteIntegration($integrationID)
179 {
180 return static::$_integrationModel->delete(
181 [
182 'id' => $integrationID,
183 'form_id' => static::$_formID,
184 ]
185 );
186 }
187
188 public static function replaceFieldWithValue($dataToReplaceField, $fieldValues)
189 {
190 if (empty($dataToReplaceField)) {
191 return false;
192 }
193 if (is_string($dataToReplaceField)) {
194 $dataToReplaceField = static::replaceFieldWithValueHelper($dataToReplaceField, $fieldValues);
195 } elseif (is_array($dataToReplaceField)) {
196 foreach ($dataToReplaceField as $field => $value) {
197 if (is_array($value) && count($value) === 1) {
198 $dataToReplaceField[$field] = static::replaceFieldWithValueHelper($value[0], $fieldValues);
199 } elseif (is_array($value)) {
200 $dataToReplaceField[$field] = static::replaceFieldWithValue($value, $fieldValues);
201 } else {
202 $dataToReplaceField[$field] = static::replaceFieldWithValueHelper($value, $fieldValues);
203 }
204 }
205 }
206 return $dataToReplaceField;
207 }
208
209 private static function replaceFieldWithValueHelper($stringToReplaceField, $fieldValues)
210 {
211 if (empty($stringToReplaceField)) {
212 return $stringToReplaceField;
213 }
214 $fieldPattern = '/\${\w[^ ${}]*}/';
215 preg_match_all($fieldPattern, $stringToReplaceField, $matchedField);
216 $uniqueFieldsInStr = array_unique($matchedField[0]);
217 foreach ($uniqueFieldsInStr as $key => $value) {
218 $fieldName = substr($value, 2, strlen($value) - 3);
219 if (!empty($fieldValues[$fieldName])) {
220 $stringToReplaceField = is_string($fieldValues[$fieldName]) ? str_replace($value, $fieldValues[$fieldName], $stringToReplaceField) :
221 wp_json_encode($fieldValues[$fieldName]);
222 }
223 }
224 return $stringToReplaceField;
225 }
226
227 public static function maybeSetCronForIntegration($workFlowReturnedData, $opType)
228 {
229 $responseData = [];
230
231 if (isset($workFlowReturnedData['message'])) {
232 $responseData['message'] = $workFlowReturnedData['message'];
233 }
234 if (isset($workFlowReturnedData['redirectPage'])) {
235 $responseData['redirectPage'] = $workFlowReturnedData['redirectPage'];
236 }
237 if ($opType === 'update' && isset($workFlowReturnedData['updatedData'])) {
238 $responseData['updatedData'] = $workFlowReturnedData['updatedData'];
239 }
240 if (!isset($workFlowReturnedData['triggerData'])) {
241 return $responseData;
242 }
243 $triggerData = $workFlowReturnedData['triggerData'];
244 // if (function_exists('fastcgi_finish_request')) {
245 // var_dump($triggerData['integrations'], 'beforeif');
246 // }
247
248 if (function_exists('fastcgi_finish_request') || !wp_doing_ajax()) {
249 if (!headers_sent()) {
250 header('Connection: close');
251 $contentType = wp_doing_ajax() || defined('REST_REQUEST') ? 'application/json' : 'text/html';
252 header('Content-Type: ' . $contentType . '; charset=' . get_option('blog_charset'));
253 status_header(200);
254 $response = [
255 'success' => true,
256 'data' => $responseData,
257 ];
258 }
259 ob_start();
260 echo wp_doing_ajax() || defined('REST_REQUEST') ? wp_json_encode($response) : $workFlowReturnedData['message'];
261 ob_end_flush();
262 flush();
263 session_write_close();
264 // if (function_exists('fastcgi_finish_request')) {
265 // fastcgi_finish_request();
266 // }
267 //var_dump('after');
268 if (isset($triggerData['mail'])) {
269 $formManager = new AdminFormManager($triggerData['formID']);
270 $formContent = $formManager->getFormContent();
271 $submitted_fields = $formContent->fields;
272 $fieldValueForMail = FieldValueHandler::formatFieldValueForMail($submitted_fields, $workFlowReturnedData['fields']);
273 foreach ($triggerData['mail'] as $value) {
274 MailNotifier::notify($value, $triggerData['formID'], $fieldValueForMail, $triggerData['entryID']);
275 }
276 }
277 do_action('bitforms_exec_integrations', $triggerData['integrations'], $workFlowReturnedData['fields'], $triggerData['formID'], $triggerData['entryID'], $triggerData['logID']);
278
279 if (function_exists('fastcgi_finish_request')) {
280 fastcgi_finish_request();
281 }
282
283 if (defined('REST_REQUEST') || wp_doing_ajax()) {
284 die;
285 }
286 return $workFlowReturnedData;
287 }
288
289 $entryID = $triggerData['entryID'];
290 if (isset($workFlowReturnedData['cron']) && $workFlowReturnedData['cron'] && !isset($triggerData['mail'])) {
291 $eventScheuled = wp_schedule_single_event(time(), 'bitforms_exec_integrations', [$triggerData['integrations'], $workFlowReturnedData['fields'], $triggerData['formID'], $triggerData['entryID'], $triggerData['logID']]);
292 $scheduleTime = wp_next_scheduled('bitforms_exec_integrations', [$triggerData['integrations'], $workFlowReturnedData['fields'], $triggerData['formID'], $triggerData['entryID'], $triggerData['logID']]);
293 $responseData['cron'] = get_site_url(null, "/wp-cron.php?doing_wp_cron&{$scheduleTime}");
294 } elseif (!empty($triggerData['integrations']) || !empty($triggerData['mail'])) {
295 $triggerData['fields'] = $workFlowReturnedData['fields'];
296 set_transient("bitform_trigger_transient_{$entryID}", $triggerData, HOUR_IN_SECONDS);
297 $entryLog = new FormEntryLogModel();
298 $queueuEntry = $entryLog->log_history_insert(
299 [
300 'log_id' => $triggerData['logID'],
301 'integration_id' => 0,
302 'api_type' => wp_json_encode(['type' => 'trigger', 'type_name' => 'Workflow', 'on' => $opType]),
303 'response_type' => 'queued',
304 'response_obj' => json_encode(['status' => 'queued']),
305 'created_at' => current_time('mysql'),
306 ]
307 );
308 $responseData['cronNotOk'] = [
309 $triggerData['entryID'],
310 $triggerData['logID'],
311 $queueuEntry
312 ];
313 }
314
315 return $responseData;
316 }
317 }
318