PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 6.2.2
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v6.2.2
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 / Hooks / filters.php

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

424 lines 15.1 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 recaptcha below custom submit button
137 $hasCustomSubmit = false;
138 foreach ($form->fields['fields'] as $index => $field) {
139 if (in_array($field['element'], ['recaptcha', 'hcaptcha', 'turnstile'])) {
140 \FluentForm\Framework\Helpers\ArrayHelper::forget($form->fields['fields'], $index);
141 }
142 if ('custom_submit_button' == $field['element']) {
143 $hasCustomSubmit = true;
144 array_splice($form->fields['fields'], $index, 0, [$captcha]);
145 break;
146 }
147 }
148 if (!$hasCustomSubmit) {
149 $form->fields['fields'][] = $captcha;
150 }
151
152 return $form;
153 }, 10, 1);
154
155 $fluentformElements = [
156 'select',
157 'input_checkbox',
158 'input_radio',
159 'address',
160 'select_country',
161 'gdpr_agreement',
162 'terms_and_condition',
163 'dynamic_field',
164 'multi_payment_component'
165 ];
166
167 foreach ($fluentformElements as $fluentformElement) {
168 $fluentformEvent = 'fluentform/response_render_' . $fluentformElement;
169 $app->addFilter($fluentformEvent, function ($response, $field, $form_id, $isHtml = false) {
170 $element = $field['element'];
171 $isHtml = apply_filters("fluentform/format_{$element}_response_as_html", $isHtml, $response, $field);
172
173 if ('dynamic_field' == $element) {
174 $dynamicFetchValue = 'yes' == \FluentForm\Framework\Helpers\ArrayHelper::get($field, 'raw.settings.dynamic_fetch');
175 if ($dynamicFetchValue) {
176 $field = apply_filters('fluentform/dynamic_field_re_fetch_result_and_resolve_value', $field);
177 }
178 $attrType = \FluentForm\Framework\Helpers\ArrayHelper::get($field, 'raw.attributes.type');
179 if ('radio' == $attrType) {
180 $element = 'input_radio';
181 } elseif ('checkbox' == $attrType) {
182 $element = 'input_checkbox';
183 } elseif ('select' == $attrType) {
184 $element = 'select';
185 }
186 }
187
188 if ('address' == $element && !empty($response->country)) {
189 $countryList = getFluentFormCountryList();
190 if (isset($countryList[$response->country])) {
191 $response->country = $countryList[$response->country];
192 }
193 }
194
195 if ('address' == $element) {
196 unset($response->latitude, $response->longitude);
197 }
198
199 if ('select_country' == $element) {
200 $countryList = getFluentFormCountryList();
201 if (isset($countryList[$response])) {
202 $response = $countryList[$response];
203 }
204 }
205
206 if (in_array($field['element'], ['gdpr_agreement', 'terms_and_condition'])) {
207 if (!empty($response) && 'on' == $response) {
208 $response = __('Accepted', 'fluentform');
209 } else {
210 $response = __('Declined', 'fluentform');
211 }
212 }
213
214 if ($response && ($isHtml || defined('FLUENTFORM_RENDERING_ENTRIES')) && in_array($element, ['select', 'input_radio']) && !is_array($response)) {
215 if (!isset($field['options'])) {
216 $field['options'] = [];
217 foreach (\FluentForm\Framework\Helpers\ArrayHelper::get($field, 'raw.settings.advanced_options', []) as $option) {
218 $field['options'][$option['value']] = $option['label'];
219 }
220 }
221 if (isset($field['options'][$response])) {
222 return $field['options'][$response];
223 }
224 }
225
226 if (in_array($element, ['select', 'input_checkbox', 'multi_payment_component']) && is_array($response)) {
227 return \FluentForm\App\Modules\Form\FormDataParser::formatCheckBoxValues($response, $field, $isHtml);
228 }
229
230 return \FluentForm\App\Modules\Form\FormDataParser::formatValue($response);
231 }, 10, 4);
232 }
233
234 /*
235 * Validation rule wise resolve global validation message.
236 *
237 */
238 $fluentformRules = [
239 "required",
240 "email",
241 "numeric",
242 "min",
243 "max",
244 "digits",
245 "url",
246 "allowed_image_types",
247 "allowed_file_types",
248 "max_file_size",
249 "max_file_count",
250 "valid_phone_number",
251 ];
252 foreach ($fluentformRules as $fluentformRuleName) {
253 $app->addFilter('fluentform/get_global_message_' . $fluentformRuleName,
254 function ($message) use ($fluentformRuleName) {
255 return \FluentForm\App\Helpers\Helper::getGlobalDefaultMessage($fluentformRuleName);
256 }
257 );
258 }
259
260
261 $app->addFilter('fluentform/response_render_textarea', function ($value, $field, $formId, $isHtml) {
262 if (!$value || !is_string($value)) {
263 return $value;
264 }
265
266 return nl2br($value);
267 }, 10, 4);
268
269 $app->addFilter('fluentform/response_render_input_file', function ($response, $field, $form_id, $isHtml = false) {
270 return \FluentForm\App\Modules\Form\FormDataParser::formatFileValues($response, $isHtml, $form_id);
271 }, 10, 4);
272
273 $app->addFilter('fluentform/response_render_input_image', function ($response, $field, $form_id, $isHtml = false) {
274 return \FluentForm\App\Modules\Form\FormDataParser::formatImageValues($response, $isHtml, $form_id);
275 }, 10, 4);
276
277 $app->addFilter('fluentform/response_render_input_repeat', function ($response, $field, $form_id) {
278 return \FluentForm\App\Modules\Form\FormDataParser::formatRepeatFieldValue($response, $field, $form_id);
279 }, 10, 3);
280
281 $app->addFilter('fluentform/response_render_tabular_grid', function ($response, $field, $form_id, $isHtml = false) {
282 return \FluentForm\App\Modules\Form\FormDataParser::formatTabularGridFieldValue($response, $field, $form_id, $isHtml);
283 }, 10, 4);
284
285 $app->addFilter('fluentform/response_render_input_name', function ($response) {
286 return \FluentForm\App\Modules\Form\FormDataParser::formatName($response);
287 }, 10, 1);
288
289 $app->addFilter('fluentform/response_render_input_password', function ($value, $field, $formId) {
290 if (\FluentForm\App\Helpers\Helper::shouldHidePassword($formId)) {
291 $value = str_repeat('*', 6) . ' ' . __('(truncated)', 'fluentform');
292 }
293
294 return $value;
295 }, 10, 3);
296
297 $app->addFilter('fluentform/filter_insert_data', function ($data) {
298 $settings = get_option('_fluentform_global_form_settings', false);
299 if (is_array($settings) && isset($settings['misc'])) {
300 if (isset($settings['misc']['isIpLogingDisabled'])) {
301 if ($settings['misc']['isIpLogingDisabled']) {
302 unset($data['ip']);
303 }
304 }
305 }
306
307 return $data;
308 });
309
310 $app->addFilter('fluentform/disabled_analytics', function ($status) {
311 $settings = get_option('_fluentform_global_form_settings');
312 if (isset($settings['misc']['isAnalyticsDisabled']) && !$settings['misc']['isAnalyticsDisabled']) {
313 return false;
314 }
315
316 return $status;
317 });
318
319 // permission based filters
320 $app->addFilter('fluentform/permission_callback', function ($status, $permission) {
321 return \FluentForm\App\Modules\Acl\Acl::getCurrentUserCapability();
322 }, 10, 2);
323
324 // Get current user allowed form ids, if current user has specific form permission
325 $app->addFilter('fluentform/current_user_allowed_forms', function ($form){
326 return \FluentForm\App\Services\Manager\FormManagerService::getUserAllowedFormsScope();
327 });
328
329 $app->addFilter('fluentform/validate_input_item_input_email', ['\FluentForm\App\Helpers\Helper', 'isUniqueValidation'], 10, 5);
330
331 $app->addFilter('fluentform/validate_input_item_input_text', ['\FluentForm\App\Helpers\Helper', 'isUniqueValidation'], 10, 5);
332
333 $app->addFilter('fluentform/will_return_html', function ($result, $integration, $key) {
334 $dictionary = [
335 'notifications' => ['message'],
336 'pdfFeed' => apply_filters('fluentform/pdf_html_format', [])
337 ];
338
339 if (!isset($dictionary[$integration])) {
340 return $result;
341 }
342
343 if (in_array($key, $dictionary[$integration])) {
344 return true;
345 }
346
347 return $result;
348 }, 10, 3);
349
350 $app->addFilter('fluentform/response_render_input_number', function ($response, $field, $form_id, $isHtml = false) {
351 if (!$response || !$isHtml) {
352 return $response;
353 }
354 $fieldSettings = \FluentForm\Framework\Helpers\ArrayHelper::get($field, 'raw.settings');
355 $formatter = \FluentForm\Framework\Helpers\ArrayHelper::get($fieldSettings, 'numeric_formatter');
356 if (!$formatter) {
357 return $response;
358 }
359
360 return \FluentForm\App\Helpers\Helper::getNumericFormatted($response, $formatter);
361 }, 10, 4);
362
363 $app->addFilter(
364 'fluentform/create_default_settings',
365 function($defaultSettings) {
366 if (!isset($defaultSettings['restrictions']['restrictForm'])) {
367 $defaultSettings['restrictions']['restrictForm'] = [
368 'enabled' => false,
369 'fields' => [
370 'ip' => [
371 'status' => false,
372 'values' => '',
373 'message' => __('Sorry! You can\'t submit a form from your IP address.', 'fluentform'),
374 'validation_type' => 'fail_on_condition_met'
375 ],
376 'country' => [
377 'status' => false,
378 'values' => [],
379 'message' => __('Sorry! You can\'t submit a form the country you are residing.', 'fluentform'),
380 'validation_type' => 'fail_on_condition_met'
381 ],
382 'keywords' => [
383 'status' => false,
384 'values' => '',
385 'message' => __('Sorry! Your submission contains some restricted keywords.', 'fluentform')
386 ],
387 ]
388 ];
389 }
390
391 if (!isset($defaultSettings['conv_form_per_step_save'])) {
392 $defaultSettings['conv_form_per_step_save'] = false;
393 }
394
395 if (!isset($defaultSettings['conv_form_resume_from_last_step'])) {
396 $defaultSettings['conv_form_resume_from_last_step'] = false;
397 }
398
399 return $defaultSettings;
400 }
401 );
402
403 // render badge toggle in form editor in case of recaptcha v3
404 $app->addFilter('fluentform/editor_element_settings_placement', function($placements, $form) {
405 $recaptchaDetails = get_option('_fluentform_reCaptcha_details');
406 if (!$recaptchaDetails) {
407 return $placements;
408 }
409
410 $isRecaptchaV3 = \FluentForm\Framework\Helpers\ArrayHelper::get($recaptchaDetails, 'api_version') === 'v3_invisible';
411 if (!$isRecaptchaV3) {
412 return $placements;
413 }
414
415 $placements['recaptcha']['general'][] = 'render_recaptcha_v3_badge';
416 return $placements;
417 }, 10, 2);
418
419
420 /*
421 * Remove this after WP Fusion Update their plugin
422 */
423 add_filter('fluentform/is_integration_enabled_wpfusion', '__return_true');
424