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

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

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