PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 6.2.13
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v6.2.13
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.13, at app/Hooks/filters.php

434 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 "min_selection",
247 "max_selection",
248 "digits",
249 "url",
250 "allowed_image_types",
251 "allowed_file_types",
252 "max_file_size",
253 "max_file_count",
254 "valid_phone_number",
255 ];
256 foreach ($fluentformRules as $fluentformRuleName) {
257 $app->addFilter('fluentform/get_global_message_' . $fluentformRuleName,
258 function ($message) use ($fluentformRuleName) {
259 return \FluentForm\App\Helpers\Helper::getGlobalDefaultMessage($fluentformRuleName);
260 }
261 );
262 }
263
264
265 $app->addFilter('fluentform/response_render_textarea', function ($value, $field, $formId, $isHtml) {
266 if (is_array($value) || is_object($value)) {
267 $value = fluentImplodeRecursive(', ', array_filter(array_values((array) $value)));
268 }
269
270 $value = $value ? nl2br($value) : $value;
271
272 if (!$isHtml || !$value) {
273 return $value;
274 }
275
276 return nl2br($value);
277 }, 10, 4);
278
279 $app->addFilter('fluentform/response_render_input_file', function ($response, $field, $form_id, $isHtml = false) {
280 return \FluentForm\App\Modules\Form\FormDataParser::formatFileValues($response, $isHtml, $form_id);
281 }, 10, 4);
282
283 $app->addFilter('fluentform/response_render_input_image', function ($response, $field, $form_id, $isHtml = false) {
284 return \FluentForm\App\Modules\Form\FormDataParser::formatImageValues($response, $isHtml, $form_id);
285 }, 10, 4);
286
287 $app->addFilter('fluentform/response_render_input_repeat', function ($response, $field, $form_id) {
288 return \FluentForm\App\Modules\Form\FormDataParser::formatRepeatFieldValue($response, $field, $form_id);
289 }, 10, 3);
290
291 $app->addFilter('fluentform/response_render_tabular_grid', function ($response, $field, $form_id, $isHtml = false) {
292 return \FluentForm\App\Modules\Form\FormDataParser::formatTabularGridFieldValue($response, $field, $form_id, $isHtml);
293 }, 10, 4);
294
295 $app->addFilter('fluentform/response_render_input_name', function ($response) {
296 return \FluentForm\App\Modules\Form\FormDataParser::formatName($response);
297 }, 10, 1);
298
299 $app->addFilter('fluentform/response_render_input_password', function ($value, $field, $formId) {
300 if (\FluentForm\App\Helpers\Helper::shouldHidePassword($formId)) {
301 $value = str_repeat('*', 6) . ' ' . __('(truncated)', 'fluentform');
302 }
303
304 return $value;
305 }, 10, 3);
306
307 $app->addFilter('fluentform/filter_insert_data', function ($data) {
308 $settings = get_option('_fluentform_global_form_settings', false);
309 if (is_array($settings) && isset($settings['misc'])) {
310 if (isset($settings['misc']['isIpLogingDisabled'])) {
311 if ($settings['misc']['isIpLogingDisabled']) {
312 unset($data['ip']);
313 }
314 }
315 }
316
317 return $data;
318 });
319
320 $app->addFilter('fluentform/disabled_analytics', function ($status) {
321 $settings = get_option('_fluentform_global_form_settings');
322 if (isset($settings['misc']['isAnalyticsDisabled']) && !$settings['misc']['isAnalyticsDisabled']) {
323 return false;
324 }
325
326 return $status;
327 });
328
329 // permission based filters
330 $app->addFilter('fluentform/permission_callback', function ($status, $permission) {
331 return \FluentForm\App\Modules\Acl\Acl::getCurrentUserCapability();
332 }, 10, 2);
333
334 // Get current user allowed form ids, if current user has specific form permission
335 $app->addFilter('fluentform/current_user_allowed_forms', function ($form){
336 return \FluentForm\App\Services\Manager\FormManagerService::getUserAllowedFormsScope();
337 });
338
339 $app->addFilter('fluentform/validate_input_item_input_email', ['\FluentForm\App\Helpers\Helper', 'isUniqueValidation'], 10, 5);
340
341 $app->addFilter('fluentform/validate_input_item_input_text', ['\FluentForm\App\Helpers\Helper', 'isUniqueValidation'], 10, 5);
342
343 $app->addFilter('fluentform/will_return_html', function ($result, $integration, $key) {
344 $dictionary = [
345 'notifications' => ['message'],
346 'pdfFeed' => apply_filters('fluentform/pdf_html_format', [])
347 ];
348
349 if (!isset($dictionary[$integration])) {
350 return $result;
351 }
352
353 if (in_array($key, $dictionary[$integration])) {
354 return true;
355 }
356
357 return $result;
358 }, 10, 3);
359
360 $app->addFilter('fluentform/response_render_input_number', function ($response, $field, $form_id, $isHtml = false) {
361 if (!$response || !$isHtml) {
362 return $response;
363 }
364 $fieldSettings = \FluentForm\Framework\Helpers\ArrayHelper::get($field, 'raw.settings');
365 $formatter = \FluentForm\Framework\Helpers\ArrayHelper::get($fieldSettings, 'numeric_formatter');
366 if (!$formatter) {
367 return $response;
368 }
369
370 return \FluentForm\App\Helpers\Helper::getNumericFormatted($response, $formatter);
371 }, 10, 4);
372
373 $app->addFilter(
374 'fluentform/create_default_settings',
375 function($defaultSettings) {
376 if (!isset($defaultSettings['restrictions']['restrictForm'])) {
377 $defaultSettings['restrictions']['restrictForm'] = [
378 'enabled' => false,
379 'fields' => [
380 'ip' => [
381 'status' => false,
382 'values' => '',
383 'message' => __('Sorry! You can\'t submit a form from your IP address.', 'fluentform'),
384 'validation_type' => 'fail_on_condition_met'
385 ],
386 'country' => [
387 'status' => false,
388 'values' => [],
389 'message' => __('Sorry! You can\'t submit a form the country you are residing.', 'fluentform'),
390 'validation_type' => 'fail_on_condition_met',
391 ],
392 'keywords' => [
393 'status' => false,
394 'values' => '',
395 'message' => __('Sorry! Your submission contains some restricted keywords.', 'fluentform'),
396 ],
397 ]
398 ];
399 }
400
401 if (!isset($defaultSettings['conv_form_per_step_save'])) {
402 $defaultSettings['conv_form_per_step_save'] = false;
403 }
404
405 if (!isset($defaultSettings['conv_form_resume_from_last_step'])) {
406 $defaultSettings['conv_form_resume_from_last_step'] = false;
407 }
408
409 return $defaultSettings;
410 }
411 );
412
413 // render badge toggle in form editor in case of recaptcha v3
414 $app->addFilter('fluentform/editor_element_settings_placement', function($placements, $form) {
415 $recaptchaDetails = get_option('_fluentform_reCaptcha_details');
416 if (!$recaptchaDetails) {
417 return $placements;
418 }
419
420 $isRecaptchaV3 = \FluentForm\Framework\Helpers\ArrayHelper::get($recaptchaDetails, 'api_version') === 'v3_invisible';
421 if (!$isRecaptchaV3) {
422 return $placements;
423 }
424
425 $placements['recaptcha']['general'][] = 'render_recaptcha_v3_badge';
426 return $placements;
427 }, 10, 2);
428
429
430 /*
431 * Remove this after WP Fusion Update their plugin
432 */
433 add_filter('fluentform/is_integration_enabled_wpfusion', '__return_true');
434