PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 6.2.14
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v6.2.14
6.2.14 6.2.13 6.2.12 6.2.10 6.2.11 6.2.9 6.2.8 6.2.7 6.2.6 6.2.5 6.2.4 6.2.3 6.2.2 3.6.22 3.6.31 3.6.40 3.6.41 3.6.42 3.6.50 3.6.51 3.6.60 3.6.61 3.6.62 3.6.64 3.6.65 All 196 releases
fluentform / app / Services / Integrations / FormIntegrationService.php

FormIntegrationService.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 6.2.14, at app/Services/Integrations/FormIntegrationService.php

267 lines 11.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentForm\App\Services\Integrations;
4
5 use FluentForm\App\Models\FormMeta;
6 use FluentForm\Framework\Helpers\ArrayHelper as Arr;
7
8 class FormIntegrationService
9 {
10 public function find($attr)
11 {
12 $formId = intval(Arr::get($attr, 'form_id'));
13 $integrationId = intval(Arr::get($attr, 'integration_id'));
14 $integrationName = sanitize_text_field(Arr::get($attr, 'integration_name'));
15
16 $settings = [
17 'conditionals' => [
18 'conditions' => [],
19 'status' => false,
20 'type' => 'all',
21 ],
22 'enabled' => true,
23 'list_id' => '',
24 'list_name' => '',
25 'name' => '',
26 'merge_fields' => [],
27 ];
28
29 $mergeFields = false;
30 if ($integrationId) {
31 $feed = FormMeta::where(['form_id' => $formId, 'id' => $integrationId])->first();
32
33
34 if ($feed->value) {
35 $settings = json_decode($feed->value, true);
36 $settings = apply_filters_deprecated(
37 'fluentform_get_integration_values_' . $integrationName,
38 [
39 $settings,
40 $feed,
41 $formId
42 ],
43 FLUENTFORM_FRAMEWORK_UPGRADE,
44 'fluentform/get_integration_values_' . $integrationName,
45 'Use fluentform/get_integration_values_' . $integrationName . ' instead of fluentform_get_integration_values_' . $integrationName
46 );
47 $settings = apply_filters('fluentform/get_integration_values_' . $integrationName, $settings, $feed, $formId);
48 if (!empty($settings['list_id'])) {
49 $mergeFields = apply_filters_deprecated(
50 'fluentform_get_integration_merge_fields_' . $integrationName,
51 [
52 false,
53 $settings['list_id'],
54 $formId
55 ],
56 FLUENTFORM_FRAMEWORK_UPGRADE,
57 'fluentform/get_integration_merge_fields_' . $integrationName,
58 'Use fluentform/get_integration_merge_fields_' . $integrationName . ' instead of fluentform_get_integration_merge_fields_' . $integrationName
59 );
60 $mergeFields = apply_filters('fluentform/get_integration_merge_fields_' . $integrationName, false, $settings['list_id'], $formId);
61 }
62 }
63 } else {
64 $settings = apply_filters_deprecated(
65 'fluentform_get_integration_defaults_' . $integrationName,
66 [
67 false,
68 $formId
69 ],
70 FLUENTFORM_FRAMEWORK_UPGRADE,
71 'fluentform/get_integration_defaults_' . $integrationName,
72 'Use fluentform/get_integration_defaults_' . $integrationName . ' instead of fluentform_get_integration_defaults_' . $integrationName
73 );
74 $settings = apply_filters('fluentform/get_integration_defaults_' . $integrationName, $settings, $formId);
75 }
76
77 if ('true' == $settings['enabled']) {
78 $settings['enabled'] = true;
79 } elseif ('false' == $settings['enabled'] || $settings['enabled']) {
80 $settings['enabled'] = false;
81 }
82 $settings = apply_filters_deprecated(
83 'fluentform_get_integration_settings_fields_' . $integrationName,
84 [
85 $settings,
86 $formId,
87 $settings
88 ],
89 FLUENTFORM_FRAMEWORK_UPGRADE,
90 'fluentform/get_integration_settings_fields_' . $integrationName,
91 'Use fluentform/get_integration_settings_fields_' . $integrationName . ' instead of fluentform_get_integration_settings_fields_' . $integrationName
92 );
93 $settingsFields = apply_filters('fluentform/get_integration_settings_fields_' . $integrationName, $settings, $formId, $settings);
94
95 return ([
96 'settings' => $settings,
97 'settings_fields' => $settingsFields,
98 'merge_fields' => $mergeFields,
99 ]);
100 }
101
102 public function update($attr)
103 {
104 $formId = intval(Arr::get($attr, 'form_id'));
105 $integrationId = intval(Arr::get($attr, 'integration_id'));
106 $integrationName = sanitize_text_field(Arr::get($attr, 'integration_name'));
107 $dataType = sanitize_text_field(Arr::get($attr, 'data_type'));
108 $status = Arr::get($attr, 'status', true);
109 $metaValue = Arr::get($attr, 'integration');
110
111
112 if ('stringify' == $dataType) {
113 $metaValue = \json_decode($metaValue, true);
114 } else {
115 $metaValue = wp_unslash($metaValue);
116 }
117 $isUpdatingStatus = empty($metaValue);
118
119 if ($isUpdatingStatus) {
120 $integrationData = FormMeta::findOrFail($integrationId);
121 $metaValue = \json_decode($integrationData->value, true);
122 $metaValue['enabled'] = $status;
123 $metaKey = $integrationData->meta_key;
124 } else {
125 if (empty($metaValue['name'])) {
126 $errors['name'] = [__('Feed name is required', 'fluentform')];
127 wp_send_json_error([
128 'message' => __('Validation Failed! Feed name is required', 'fluentform'),
129 'errors' => $errors
130 ], 423);
131 }
132 $metaValue = apply_filters_deprecated(
133 'fluentform_save_integration_value_' . $integrationName,
134 [
135 $metaValue,
136 $integrationId,
137 $formId
138 ],
139 FLUENTFORM_FRAMEWORK_UPGRADE,
140 'fluentform/save_integration_value_' . $integrationName,
141 'Use fluentform/save_integration_value_' . $integrationName . ' instead of fluentform_save_integration_value_' . $integrationName
142 );
143 $metaValue = apply_filters('fluentform/save_integration_value_' . $integrationName, $metaValue,
144 $integrationId, $formId);
145 $metaKey = $integrationName . '_feeds';
146 }
147 $data = [
148 'form_id' => $formId,
149 'meta_key' => $metaKey,
150 'value' => \json_encode($metaValue),
151 ];
152 $data = apply_filters_deprecated(
153 'fluentform_save_integration_settings_' . $integrationName,
154 [
155 $data,
156 $integrationId
157 ],
158 FLUENTFORM_FRAMEWORK_UPGRADE,
159 'fluentform/save_integration_settings_' . $integrationName,
160 'Use fluentform/save_integration_settings_' . $integrationName . ' instead of fluentform_save_integration_settings_' . $integrationName
161 );
162 $data = apply_filters('fluentform/save_integration_settings_' . $integrationName, $data, $integrationId);
163 $created = false;
164 if ($integrationId) {
165 FormMeta::where('form_id', $formId)
166 ->where('id', $integrationId)
167 ->update($data);
168 } else {
169 $integrationId = FormMeta::insertGetId($data);
170 $created = true;
171 }
172
173
174 return ([
175 'message' => __('Integration successfully saved', 'fluentform'),
176 'integration_id' => $integrationId,
177 'integration_name' => $integrationName,
178 'created' => $created,
179 ]);
180 }
181
182 public function get($formId)
183 {
184 $notificationKeys = apply_filters_deprecated(
185 'fluentform_global_notification_types',
186 [
187 [],
188 $formId
189 ],
190 FLUENTFORM_FRAMEWORK_UPGRADE,
191 'fluentform/global_notification_types',
192 'Use fluentform/global_notification_types instead of fluentform_global_notification_types.'
193 );
194 $notificationKeys = apply_filters('fluentform/global_notification_types', $notificationKeys, $formId);
195 $feeds = [];
196 if ($notificationKeys) {
197 $feeds = FormMeta::whereIn('meta_key', $notificationKeys)->where('form_id', $formId)->get();
198 }
199 $formattedFeeds = [];
200
201 if (count($feeds)) {
202 foreach ($feeds as $feed) {
203 $data = json_decode($feed->value, true);
204 $enabled = $data['enabled'];
205 if ($enabled && 'true' == $enabled) {
206 $enabled = true;
207 } elseif ('false' == $enabled) {
208 $enabled = false;
209 }
210 $feedData = [
211 'id' => $feed->id,
212 'name' => Arr::get($data, 'name'),
213 'enabled' => $enabled,
214 'provider' => $feed->meta_key,
215 'feed' => $data,
216 ];
217 $feedData = apply_filters_deprecated(
218 'fluentform_global_notification_feed_' . $feed->meta_key,
219 [
220 $feedData,
221 $formId
222 ],
223 FLUENTFORM_FRAMEWORK_UPGRADE,
224 'fluentform/global_notification_feed_' . $feed->meta_key,
225 'Use fluentform/global_notification_feed_' . $feed->meta_key . ' instead of fluentform_global_notification_feed_' . $feed->meta_key
226 );
227 $feedData = apply_filters('fluentform/global_notification_feed_' . $feed->meta_key, $feedData,
228 $formId);
229 $formattedFeeds[] = $feedData;
230 }
231 }
232 $availableIntegrations = apply_filters_deprecated(
233 'fluentform_get_available_form_integrations',
234 [
235 [],
236 $formId
237 ],
238 FLUENTFORM_FRAMEWORK_UPGRADE,
239 'fluentform/get_available_form_integrations',
240 'Use fluentform/get_available_form_integrations instead of fluentform_get_available_form_integrations.'
241 );
242 $availableIntegrations = apply_filters('fluentform/get_available_form_integrations', $availableIntegrations, $formId);
243
244 return ([
245 'feeds' => $formattedFeeds,
246 'available_integrations' => $availableIntegrations,
247 'all_module_config_url' => admin_url('admin.php?page=fluent_forms_add_ons'),
248 ]);
249 }
250
251 public function delete($id, $formId = null)
252 {
253 // SECURITY (FINDING-10): a non-numeric route form id (e.g. /integrations/abc) made
254 // the caller-supplied $formId falsy, which previously dropped the form_id predicate
255 // and deleted an arbitrary fluentform_form_meta row cross-form. Fail closed: require
256 // a positive form id and always scope the delete to it, so a meta row is only ever
257 // removed when it belongs to the authorized form.
258 $id = (int) $id;
259 $formId = (int) $formId;
260 if ($id < 1 || $formId < 1) {
261 return;
262 }
263 FormMeta::where('id', $id)->where('form_id', $formId)->delete();
264 }
265
266 }
267