PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 6.2.12
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v6.2.12
6.2.15 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 All 197 releases
fluentform / app / Hooks / filters.php

filters.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 6.2.12, at app/Hooks/filters.php

432 lines 15.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 defined('ABSPATH') or die;
4
5 /**
6 * All registered filter's handlers should be in app\Hooks\Handlers,
7 * addFilter is similar to add_filter and addCustomFlter is just a
8 * wrapper over add_filter which will add a prefix to the hook name
9 * using the plugin slug to make it unique in all wordpress plugins,
10 * ex: $app->addCustomFilter('foo', ['FooHandler', 'handleFoo']) is
11 * equivalent to add_filter('slug-foo', ['FooHandler', 'handleFoo']).
12 */
13
14 /**
15 * @var $app FluentForm\Framework\Foundation\Application
16 */
17
18 add_filter('fluentform/addons_extra_menu', function ($menus) {
19 $menus['fluentform_pdf'] = __('Fluent Forms PDF', 'fluentform');
20
21 return $menus;
22 }, 99, 1);
23
24 //Add file upload location in global settings
25 add_filter('fluentform/get_global_settings_values', function ($values, $key) {
26 if (is_array($key)) {
27 if (in_array('_fluentform_global_form_settings', $key)) {
28 $values['file_upload_optoins'] = FluentForm\App\Helpers\Helper::fileUploadLocations();
29 }
30
31 if (in_array('_fluentform_turnstile_details', $key)) {
32 $values = FluentForm\App\Modules\Turnstile\Turnstile::ensureSettings($values);
33 }
34
35 if (in_array('_fluentform_global_default_message_setting_fields', $key)) {
36 $values['_fluentform_global_default_message_setting_fields'] = \FluentForm\App\Helpers\Helper::globalDefaultMessageSettingFields();
37 }
38
39 if (in_array('_fluentform_global_form_settings', $key) &&
40 !\FluentForm\Framework\Helpers\ArrayHelper::isTrue($values, '_fluentform_global_form_settings.default_messages')
41 ) {
42 $values['_fluentform_global_form_settings']['default_messages'] = \FluentForm\App\Helpers\Helper::getAllGlobalDefaultMessages();
43 }
44
45 // Ensure _fluentform_default_style_template has default structure if not set
46 if (in_array('_fluentform_default_style_template', $key)) {
47 if (empty($values['_fluentform_default_style_template']) || $values['_fluentform_default_style_template'] === false) {
48 $values['_fluentform_default_style_template'] = [
49 'enabled' => 'no',
50 'custom_css' => '',
51 'styler_enabled' => 'no',
52 'styler_theme' => '',
53 ];
54 }
55 }
56 }
57
58 return $values;
59 }, 10, 2);
60
61 //Enables recaptcha validation when autoload recaptcha enabled for all forms
62
63 add_action('fluentform/before_form_validation',function (){
64 $autoIncludeRecaptcha = [
65 [
66 'type' => 'hcaptcha',
67 'is_disabled' => !get_option('_fluentform_hCaptcha_keys_status', false),
68 ],
69 [
70 'type' => 'recaptcha',
71 'is_disabled' => !get_option('_fluentform_reCaptcha_keys_status', false),
72 ],
73 [
74 'type' => 'turnstile',
75 'is_disabled' => !get_option('_fluentform_turnstile_keys_status', false),
76 ],
77 ];
78 foreach ($autoIncludeRecaptcha as $input) {
79 if ($input['is_disabled']) {
80 continue;
81 }
82
83 add_filter('fluentform/has_' . $input['type'], function () use ($input) {
84 $option = get_option('_fluentform_global_form_settings');
85 $autoload = \FluentForm\Framework\Helpers\ArrayHelper::get($option, 'misc.autoload_captcha');
86 $type = \FluentForm\Framework\Helpers\ArrayHelper::get($option, 'misc.captcha_type');
87
88 if ($autoload && $type == $input['type']) {
89 return true;
90 }
91
92 return false;
93 });
94 }
95 });
96
97 /*
98 * Push captcha in all forms when enabled from global settings
99 */
100 $app->addFilter('fluentform/rendering_form', function ($form) {
101 $option = get_option('_fluentform_global_form_settings');
102 $enabled = \FluentForm\Framework\Helpers\ArrayHelper::get($option, 'misc.autoload_captcha');
103 if (!$enabled) {
104 return $form;
105 }
106 $type = \FluentForm\Framework\Helpers\ArrayHelper::get($option, 'misc.captcha_type');
107 $reCaptcha = [
108 'element' => 'recaptcha',
109 'attributes' => [
110 'name' => 'recaptcha',
111 ],
112 ];
113 $hCaptcha = [
114 'element' => 'hcaptcha',
115 'attributes' => [
116 'name' => 'hcaptcha',
117 ],
118 ];
119 $turnstile = [
120 'element' => 'turnstile',
121 'attributes' => [
122 'name' => 'turnstile',
123 ],
124 ];
125
126 if ('recaptcha' == $type) {
127 $captcha = $reCaptcha;
128 } elseif ('hcaptcha' == $type) {
129 $captcha = $hCaptcha;
130 } elseif ('turnstile' == $type) {
131 $captcha = $turnstile;
132 }
133 if (!isset($captcha)) {
134 return $form;
135 }
136 // place captcha below custom submit button
137 $formFields = $form->fields;
138 $hasCustomSubmit = false;
139 foreach ($formFields['fields'] as $index => $field) {
140 if (in_array($field['element'], ['recaptcha', 'hcaptcha', 'turnstile'])) {
141 \FluentForm\Framework\Helpers\ArrayHelper::forget($formFields['fields'], $index);
142 }
143 if ('custom_submit_button' == $field['element']) {
144 $hasCustomSubmit = true;
145 array_splice($formFields['fields'], $index, 0, [$captcha]);
146 break;
147 }
148 }
149 if (!$hasCustomSubmit) {
150 $formFields['fields'][] = $captcha;
151 }
152
153 $form->fields = $formFields;
154
155 return $form;
156 }, 10, 1);
157
158 $fluentformElements = [
159 'select',
160 'input_checkbox',
161 'input_radio',
162 'address',
163 'select_country',
164 'gdpr_agreement',
165 'terms_and_condition',
166 'dynamic_field',
167 'multi_payment_component'
168 ];
169
170 foreach ($fluentformElements as $fluentformElement) {
171 $fluentformEvent = 'fluentform/response_render_' . $fluentformElement;
172 $app->addFilter($fluentformEvent, function ($response, $field, $form_id, $isHtml = false) {
173 $element = $field['element'];
174 $isHtml = apply_filters("fluentform/format_{$element}_response_as_html", $isHtml, $response, $field);
175
176 if ('dynamic_field' == $element) {
177 $dynamicFetchValue = 'yes' == \FluentForm\Framework\Helpers\ArrayHelper::get($field, 'raw.settings.dynamic_fetch');
178 if ($dynamicFetchValue) {
179 $field = apply_filters('fluentform/dynamic_field_re_fetch_result_and_resolve_value', $field);
180 }
181 $attrType = \FluentForm\Framework\Helpers\ArrayHelper::get($field, 'raw.attributes.type');
182 if ('radio' == $attrType) {
183 $element = 'input_radio';
184 } elseif ('checkbox' == $attrType) {
185 $element = 'input_checkbox';
186 } elseif ('select' == $attrType) {
187 $element = 'select';
188 }
189 }
190
191 if ('address' == $element && !empty($response->country)) {
192 $countryList = getFluentFormCountryList();
193 if (isset($countryList[$response->country])) {
194 $response->country = $countryList[$response->country];
195 }
196 }
197
198 if ('address' == $element) {
199 unset($response->latitude, $response->longitude);
200 }
201
202 if ('select_country' == $element) {
203 $countryList = getFluentFormCountryList();
204 if (isset($countryList[$response])) {
205 $response = $countryList[$response];
206 }
207 }
208
209 if (in_array($field['element'], ['gdpr_agreement', 'terms_and_condition'])) {
210 if (!empty($response) && 'on' == $response) {
211 $response = __('Accepted', 'fluentform');
212 } else {
213 $response = __('Declined', 'fluentform');
214 }
215 }
216
217 if ($response && ($isHtml || defined('FLUENTFORM_RENDERING_ENTRIES')) && in_array($element, ['select', 'input_radio']) && !is_array($response)) {
218 if (!isset($field['options'])) {
219 $field['options'] = \FluentForm\App\Helpers\Helper::advancedOptionsValueLabelMap(
220 \FluentForm\Framework\Helpers\ArrayHelper::get($field, 'raw.settings.advanced_options', [])
221 );
222 }
223 if (isset($field['options'][$response])) {
224 return $field['options'][$response];
225 }
226 }
227
228 if (in_array($element, ['select', 'input_checkbox', 'multi_payment_component']) && is_array($response)) {
229 return \FluentForm\App\Modules\Form\FormDataParser::formatCheckBoxValues($response, $field, $isHtml);
230 }
231
232 return \FluentForm\App\Modules\Form\FormDataParser::formatValue($response);
233 }, 10, 4);
234 }
235
236 /*
237 * Validation rule wise resolve global validation message.
238 *
239 */
240 $fluentformRules = [
241 "required",
242 "email",
243 "numeric",
244 "min",
245 "max",
246 "digits",
247 "url",
248 "allowed_image_types",
249 "allowed_file_types",
250 "max_file_size",
251 "max_file_count",
252 "valid_phone_number",
253 ];
254 foreach ($fluentformRules as $fluentformRuleName) {
255 $app->addFilter('fluentform/get_global_message_' . $fluentformRuleName,
256 function ($message) use ($fluentformRuleName) {
257 return \FluentForm\App\Helpers\Helper::getGlobalDefaultMessage($fluentformRuleName);
258 }
259 );
260 }
261
262
263 $app->addFilter('fluentform/response_render_textarea', function ($value, $field, $formId, $isHtml) {
264 if (is_array($value) || is_object($value)) {
265 $value = fluentImplodeRecursive(', ', array_filter(array_values((array) $value)));
266 }
267
268 $value = $value ? nl2br($value) : $value;
269
270 if (!$isHtml || !$value) {
271 return $value;
272 }
273
274 return nl2br($value);
275 }, 10, 4);
276
277 $app->addFilter('fluentform/response_render_input_file', function ($response, $field, $form_id, $isHtml = false) {
278 return \FluentForm\App\Modules\Form\FormDataParser::formatFileValues($response, $isHtml, $form_id);
279 }, 10, 4);
280
281 $app->addFilter('fluentform/response_render_input_image', function ($response, $field, $form_id, $isHtml = false) {
282 return \FluentForm\App\Modules\Form\FormDataParser::formatImageValues($response, $isHtml, $form_id);
283 }, 10, 4);
284
285 $app->addFilter('fluentform/response_render_input_repeat', function ($response, $field, $form_id) {
286 return \FluentForm\App\Modules\Form\FormDataParser::formatRepeatFieldValue($response, $field, $form_id);
287 }, 10, 3);
288
289 $app->addFilter('fluentform/response_render_tabular_grid', function ($response, $field, $form_id, $isHtml = false) {
290 return \FluentForm\App\Modules\Form\FormDataParser::formatTabularGridFieldValue($response, $field, $form_id, $isHtml);
291 }, 10, 4);
292
293 $app->addFilter('fluentform/response_render_input_name', function ($response) {
294 return \FluentForm\App\Modules\Form\FormDataParser::formatName($response);
295 }, 10, 1);
296
297 $app->addFilter('fluentform/response_render_input_password', function ($value, $field, $formId) {
298 if (\FluentForm\App\Helpers\Helper::shouldHidePassword($formId)) {
299 $value = str_repeat('*', 6) . ' ' . __('(truncated)', 'fluentform');
300 }
301
302 return $value;
303 }, 10, 3);
304
305 $app->addFilter('fluentform/filter_insert_data', function ($data) {
306 $settings = get_option('_fluentform_global_form_settings', false);
307 if (is_array($settings) && isset($settings['misc'])) {
308 if (isset($settings['misc']['isIpLogingDisabled'])) {
309 if ($settings['misc']['isIpLogingDisabled']) {
310 unset($data['ip']);
311 }
312 }
313 }
314
315 return $data;
316 });
317
318 $app->addFilter('fluentform/disabled_analytics', function ($status) {
319 $settings = get_option('_fluentform_global_form_settings');
320 if (isset($settings['misc']['isAnalyticsDisabled']) && !$settings['misc']['isAnalyticsDisabled']) {
321 return false;
322 }
323
324 return $status;
325 });
326
327 // permission based filters
328 $app->addFilter('fluentform/permission_callback', function ($status, $permission) {
329 return \FluentForm\App\Modules\Acl\Acl::getCurrentUserCapability();
330 }, 10, 2);
331
332 // Get current user allowed form ids, if current user has specific form permission
333 $app->addFilter('fluentform/current_user_allowed_forms', function ($form){
334 return \FluentForm\App\Services\Manager\FormManagerService::getUserAllowedFormsScope();
335 });
336
337 $app->addFilter('fluentform/validate_input_item_input_email', ['\FluentForm\App\Helpers\Helper', 'isUniqueValidation'], 10, 5);
338
339 $app->addFilter('fluentform/validate_input_item_input_text', ['\FluentForm\App\Helpers\Helper', 'isUniqueValidation'], 10, 5);
340
341 $app->addFilter('fluentform/will_return_html', function ($result, $integration, $key) {
342 $dictionary = [
343 'notifications' => ['message'],
344 'pdfFeed' => apply_filters('fluentform/pdf_html_format', [])
345 ];
346
347 if (!isset($dictionary[$integration])) {
348 return $result;
349 }
350
351 if (in_array($key, $dictionary[$integration])) {
352 return true;
353 }
354
355 return $result;
356 }, 10, 3);
357
358 $app->addFilter('fluentform/response_render_input_number', function ($response, $field, $form_id, $isHtml = false) {
359 if (!$response || !$isHtml) {
360 return $response;
361 }
362 $fieldSettings = \FluentForm\Framework\Helpers\ArrayHelper::get($field, 'raw.settings');
363 $formatter = \FluentForm\Framework\Helpers\ArrayHelper::get($fieldSettings, 'numeric_formatter');
364 if (!$formatter) {
365 return $response;
366 }
367
368 return \FluentForm\App\Helpers\Helper::getNumericFormatted($response, $formatter);
369 }, 10, 4);
370
371 $app->addFilter(
372 'fluentform/create_default_settings',
373 function($defaultSettings) {
374 if (!isset($defaultSettings['restrictions']['restrictForm'])) {
375 $defaultSettings['restrictions']['restrictForm'] = [
376 'enabled' => false,
377 'fields' => [
378 'ip' => [
379 'status' => false,
380 'values' => '',
381 'message' => __('Sorry! You can\'t submit a form from your IP address.', 'fluentform'),
382 'validation_type' => 'fail_on_condition_met'
383 ],
384 'country' => [
385 'status' => false,
386 'values' => [],
387 'message' => __('Sorry! You can\'t submit a form the country you are residing.', 'fluentform'),
388 'validation_type' => 'fail_on_condition_met',
389 ],
390 'keywords' => [
391 'status' => false,
392 'values' => '',
393 'message' => __('Sorry! Your submission contains some restricted keywords.', 'fluentform'),
394 ],
395 ]
396 ];
397 }
398
399 if (!isset($defaultSettings['conv_form_per_step_save'])) {
400 $defaultSettings['conv_form_per_step_save'] = false;
401 }
402
403 if (!isset($defaultSettings['conv_form_resume_from_last_step'])) {
404 $defaultSettings['conv_form_resume_from_last_step'] = false;
405 }
406
407 return $defaultSettings;
408 }
409 );
410
411 // render badge toggle in form editor in case of recaptcha v3
412 $app->addFilter('fluentform/editor_element_settings_placement', function($placements, $form) {
413 $recaptchaDetails = get_option('_fluentform_reCaptcha_details');
414 if (!$recaptchaDetails) {
415 return $placements;
416 }
417
418 $isRecaptchaV3 = \FluentForm\Framework\Helpers\ArrayHelper::get($recaptchaDetails, 'api_version') === 'v3_invisible';
419 if (!$isRecaptchaV3) {
420 return $placements;
421 }
422
423 $placements['recaptcha']['general'][] = 'render_recaptcha_v3_badge';
424 return $placements;
425 }, 10, 2);
426
427
428 /*
429 * Remove this after WP Fusion Update their plugin
430 */
431 add_filter('fluentform/is_integration_enabled_wpfusion', '__return_true');
432