PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 2.15.3
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v2.15.3
3.3.1 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 All 138 releases
← All changes | includes/Core/Integration/Integrations.php +194 -133 1.42.15.3 View file →
@@ -5,165 +5,226 @@
5 5 * @package BitForms
6 6 */
7 7
8 8 namespace BitCode\BitForm\Core\Integration;
9 +
9 10 use BitCode\BitForm\Core\Database\FormEntryModel;
10 11 use BitCode\BitForm\Core\Database\FormModel;
12 +use BitCode\BitForm\Core\Util\ApiResponse;
13 +use BitCode\BitForm\Core\Util\SmartTags;
14 +use BitCode\BitForm\Core\Util\Utilities;
11 15 /**
12 16 * Provides details of available integration and helps to
13 17 * execute available integrations
14 18 */
15 19
16 -use WP_Error;
17 20 use FilesystemIterator;
18 21
19 22 final class Integrations
20 23 {
21 - public $integrations = array();
24 + public $integrations = [];
22 25
23 - /**
24 - * Undocumented function
25 - *
26 - * @return all
27 - */
28 - public function getAllIntegrations()
29 - {
30 - return $this->allIntegrations();
26 + /**
27 + * Undocumented function
28 + *
29 + * @return array
30 + */
31 + public function getAllIntegrations()
32 + {
33 + return $this->allIntegrations();
34 + }
35 +
36 + /**
37 + * Undocumented function
38 + *
39 + * @return array
40 + */
41 + protected function allIntegrations()
42 + {
43 + $dirs = new FilesystemIterator(__DIR__);
44 + foreach ($dirs as $dirInfo) {
45 + if ($dirInfo->isDir()) {
46 + $integrationsBaseName = basename($dirInfo);
47 + if (
48 + file_exists(__DIR__ . '/' . $integrationsBaseName)
49 + && file_exists(__DIR__ . '/' . $integrationsBaseName . '/' . $integrationsBaseName . 'Handler.php')
50 + ) {
51 + $integrations[] = $integrationsBaseName;
52 + }
53 + }
31 54 }
32 - /**
33 - * Undocumented function
34 - *
35 - * @return void
36 - */
37 - protected function allIntegrations()
38 - {
39 - $dirs = new FilesystemIterator(__DIR__);
40 - foreach ($dirs as $dirInfo) {
41 - if ($dirInfo->isDir()) {
42 - $integartionBaseName = basename($dirInfo);
43 - if (
44 - file_exists(__DIR__ . '/' . $integartionBaseName)
45 - && file_exists(__DIR__ . '/' . $integartionBaseName . '/' . $integartionBaseName . 'Handler.php')
46 - ) {
47 - $integrations[] = $integartionBaseName;
48 - }
49 - }
50 - }
51 - return $integrations;
55 + return $integrations;
56 + }
57 +
58 + /**
59 + * Checks a Integration Exists or not
60 + *
61 + * @param string $name Name of Integration
62 + * @return boolean | string
63 + */
64 + protected static function isExists($name)
65 + {
66 + $path = Utilities::getRealPath(__DIR__, $name);
67 + if (!empty($path) && $fileName = Utilities::getRealPath(__DIR__ . "/{$path}", "{$name}Handler.php")) {
68 + $className = Utilities::getFileNameExceptExtension($fileName);
69 + return __NAMESPACE__ . "\\{$path}\\{$className}";
52 70 }
53 - /**
54 - * Checks a Integration Exists or not
55 - *
56 - * @param String $name Name of Integration
57 - * @return boolean
58 - */
59 - protected static function isExists($name)
60 - {
61 - if (file_exists(__DIR__ . '/' . $name) && file_exists(__DIR__ . '/' . $name . '/' . $name . 'Handler.php')) {
62 - return __NAMESPACE__ . "\\{$name}\\{$name}Handler";
63 - } else if (class_exists("BitCode\\BitFormPro\\Integration\\{$name}\\{$name}Handler")) {
64 - return "BitCode\\BitFormPro\\Integration\\{$name}\\{$name}Handler";
65 - } else {
66 - return false;
67 - }
71 +
72 + if (!defined('BITFORMPRO_PLUGIN_DIR_PATH')) {
73 + return false;
68 74 }
69 - /**
70 - * This function helps to get single intgration information
71 - *
72 - * @return bool setIntegration()
73 - */
74 - public function getIntegration($integartionBaseName)
75 - {
76 - return $this->setIntegration($integartionBaseName);
75 +
76 + $proPath = BITFORMPRO_PLUGIN_DIR_PATH . '/includes/Integration';
77 + $proNamespace = 'BitCode\\BitFormPro\\Integration';
78 + $path = Utilities::getRealPath($proPath, $name);
79 + if (!empty($path) && $fileName = Utilities::getRealPath("{$proPath}/{$path}", "{$name}Handler.php")) {
80 + $className = Utilities::getFileNameExceptExtension($fileName);
81 + return "{$proNamespace}\\{$path}\\{$className}";
77 82 }
78 83
79 - public function registerAjax()
80 - {
81 - $dirs = new FilesystemIterator(__DIR__);
82 - foreach ($dirs as $dirInfo) {
83 - if ($dirInfo->isDir()) {
84 - $integartionBaseName = basename($dirInfo);
85 - if (
86 - file_exists(__DIR__ . '/' . $integartionBaseName)
87 - && file_exists(__DIR__ . '/' . $integartionBaseName . '/' . $integartionBaseName . 'Handler.php')
88 - ) {
89 - $integration = __NAMESPACE__ . "\\{$integartionBaseName}\\{$integartionBaseName}Handler";
90 - if (method_exists($integration, 'registerAjax')) {
91 - $integration::registerAjax();
92 - // (new $integration(0, 0))->registerAjax();
93 - }
94 - /* $handler = new $integration($integrationID, $formID);
95 - $handler->execute($integrationHandler, $integrationDetails, $fieldValues); */
96 - }
97 - }
84 + return false;
85 + }
86 +
87 + /**
88 + * This function helps to get single integration information
89 + *
90 + * @return bool setIntegration()
91 + */
92 + public function getIntegration($integrationBaseName)
93 + {
94 + return $this->setIntegration($integrationBaseName);
95 + }
96 +
97 + public function registerAjax()
98 + {
99 + $dirs = new FilesystemIterator(__DIR__);
100 + foreach ($dirs as $dirInfo) {
101 + if ($dirInfo->isDir()) {
102 + $integrationBaseName = basename($dirInfo);
103 + if (
104 + file_exists(__DIR__ . '/' . $integrationBaseName)
105 + && file_exists(__DIR__ . '/' . $integrationBaseName . '/' . $integrationBaseName . 'Handler.php')
106 + ) {
107 + $integration = __NAMESPACE__ . "\\{$integrationBaseName}\\{$integrationBaseName}Handler";
108 + if (method_exists($integration, 'registerAjax')) {
109 + $integration::registerAjax();
110 + // (new $integration(0, 0))->registerAjax();
111 + }
112 + /* $handler = new $integration($integrationID, $formID);
113 + $handler->execute($integrationHandler, $integrationDetails, $fieldValues); */
98 114 }
115 + }
99 116 }
117 + }
100 118
101 - protected static function entryDeleted($formId,$entryId){
102 - $formModel = new FormModel();
103 - $formContent = $formModel->get(
104 - [
105 - "id",
106 - "form_content",
107 - ],
108 - array(
109 - 'id' => $formId,
110 - )
119 + protected static function entryDeleted($formId, $entryId)
120 + {
121 + $formModel = new FormModel();
122 + $formContent = $formModel->get(
123 + [
124 + 'id',
125 + 'form_content',
126 + ],
127 + [
128 + 'id' => $formId,
129 + ]
130 + );
131 + if (!is_wp_error($formContent)) {
132 + $content = \json_decode($formContent[0]->form_content);
133 + if (isset($content->additional->enabled->submission)) {
134 + global $wpdb;
135 + $prefix = $wpdb->prefix;
136 + $formEntryModel = new FormEntryModel();
137 + $formEntryModel->bulkDelete(
138 + [
139 + "`{$prefix}bitforms_form_entries`.`id`" => $entryId,
140 + "`{$prefix}bitforms_form_entries`.`form_id`" => $formId,
141 + ]
111 142 );
112 - if(!is_wp_error($formContent)){
113 - $content = \json_decode($formContent[0]->form_content);
114 - if(isset($content->additional->enabled->submission)){
115 - global $wpdb;
116 - $prefix = $wpdb->prefix;
117 - $formEntryModel = new FormEntryModel();
118 - $formEntryModel->bulkDelete(
119 - array(
120 - "`{$prefix}bitforms_form_entries`.`id`" => $entryId,
121 - "`{$prefix}bitforms_form_entries`.`form_id`" => $formId,
122 - )
123 - );
124 - }
143 + }
144 + }
145 + }
146 +
147 + public static function specialTagFields($fieldMap)
148 + {
149 + $specialTagFieldValue = [];
150 +
151 + foreach ($fieldMap as $value) {
152 + $triggerValue = $value->formField;
153 + $specialTagFieldValue[$value->formField] = SmartTags::getSmartTagValue($triggerValue);
154 + }
155 + return $specialTagFieldValue;
156 + }
157 +
158 + /**
159 + * This function helps to execute Integration
160 + *
161 + * @param array $integrations List of integration to execute.
162 + * Element will be json string like {"id":1}
163 + * @param array $fieldValues Values of submitted fields
164 + * @param integer $formID ID of current form
165 + *
166 + * @return void Nothing to return
167 + */
168 + public static function executeIntegrations($integrations, $fieldValues, $formID, $logID = null, $entryID = 0)
169 + {
170 + $integrationHandler = new IntegrationHandler($formID);
171 + $logResponse = new ApiResponse();
172 + if (is_array($integrations)) {
173 + foreach ($integrations as $integrationIDStr) {
174 + if (!is_string($integrationIDStr)) {
175 + return;
125 176 }
126 - }
177 + $integrationID = intval(json_decode($integrationIDStr)->id, 10);
178 + if (!empty($integrationID) && is_int($integrationID)) {
179 + $integrationResult
180 + = $integrationHandler->getAIntegration($integrationID);
181 + $integrationDetails = is_wp_error($integrationResult) ? null : $integrationResult[0];
182 + $integrationName = is_null($integrationDetails) ? null : ucfirst(str_replace(' ', '', $integrationDetails->integration_type));
183 + if ('Brevo(SendinBlue)' === $integrationName) {
184 + $integrationName = 'SendinBlue';
185 + }
186 + if (!is_null($integrationName) && static::isExists($integrationName)) {
187 + $integration = static::isExists($integrationName);
188 + $handler = new $integration($integrationID, $formID);
189 + $integDetails = is_string($integrationDetails->integration_details) ? json_decode($integrationDetails->integration_details) : $integrationDetails->integration_details;
190 + if (isset($integDetails->field_map)) {
191 + $sptagData = self::specialTagFields($integDetails->field_map);
192 + $fieldValues = $fieldValues + $sptagData;
193 + }
194 + $handler->execute($integrationHandler, $integrationDetails, $fieldValues, $entryID, $logID);
195 + } else {
196 + do_action('bitform_integration_run_failure', $integrationID, $formID);
127 197
128 - /**
129 - * This function helps to execute Integration
130 - *
131 - * @param Array $integrations List of integrstion to execute.
132 - * Element will be json string like {"id":1}
133 - * @param Array $fieldValues Values of submitted fields
134 - * @param Integer $formID ID of current form
135 - *
136 - * @return void Nothing to return
137 - */
138 - public static function executeIntegrations($integrations, $fieldValues, $formID, $logID=null, $entryID = 0)
139 - {
140 - $integrationHandler = new IntegrationHandler($formID);
141 - if (is_array($integrations)) {
142 - foreach ($integrations as $integrationIDStr) {
143 - $integrationID = intval(json_decode($integrationIDStr)->id, 10);
144 - if (!empty($integrationID) && is_int($integrationID)) {
145 - $integrationResult
146 - = $integrationHandler->getAIntegration($integrationID);
147 - $integrationDetails = is_wp_error($integrationResult) ? null : $integrationResult[0];
148 - $integrationName = is_null($integrationDetails) ? null : ucfirst(str_replace(' ', null, $integrationDetails->integration_type));
149 - if (!is_null($integrationName) && static::isExists($integrationName)) {
150 - $integration = static::isExists($integrationName);
151 - $handler = new $integration($integrationID, $formID);
152 - $handler->execute($integrationHandler, $integrationDetails, $fieldValues, $entryID, $logID);
153 - }
154 - }
155 - }
198 + $errorMsg = apply_filters('bitform_filter_integration_run_failure_message', __('Integration execution failed', 'bit-form'), $integrationID, $formID);
199 +
200 + error_log('[+] Integration execution failed: ' . print_r($errorMsg, true));
201 +
202 + $logResponse->apiResponse(
203 + $logID,
204 + $integrationID,
205 + ['type' => 'record', 'type_name' => $integrationName || 'Integration'],
206 + 'errors',
207 + $errorMsg
208 + );
209 + }
156 210 }
211 + }
157 212 }
213 + }
158 214
159 - public static function integrationExecutionHelper($integrations, $fieldValue, $formID, $entryID, $logID)
160 - {
161 - if (empty($integrations) || empty($formID)) {
162 - return;
163 - }
164 - foreach ($integrations as $key => $value) {
165 - self::executeIntegrations($value, $fieldValue, $formID, $logID, $entryID);
166 - }
167 - self::entryDeleted($formID,$entryID);
215 + public static function integrationExecutionHelper($integrations, $fieldValue, $formID, $entryID, $logID)
216 + {
217 + if (empty($integrations) || empty($formID)) {
218 + return;
168 219 }
220 + $trnasientData = get_transient("bitform_trigger_transient_{$entryID}");
221 + $trnasientData = is_string($trnasientData) ? json_decode($trnasientData) : $trnasientData;
222 + if (!empty($trnasientData['fields'])) {
223 + $fieldValue = array_merge($fieldValue, $trnasientData['fields']);
224 + }
225 + foreach ($integrations as $key => $value) {
226 + self::executeIntegrations($value, $fieldValue, $formID, $logID, $entryID);
227 + }
228 + self::entryDeleted($formID, $entryID);
229 + }
169 230 }