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

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

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