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
← All changes | app/Services/FormBuilder/Components/Text.php +162 -46 3.6.226.2.14 View file →
@@ -1,40 +1,84 @@
1 1 <?php
2 2
3 3 namespace FluentForm\App\Services\FormBuilder\Components;
4 4
5 +defined('ABSPATH') or die;
6 +
7 +use FluentForm\App\Helpers\Helper;
5 8 use FluentForm\Framework\Helpers\ArrayHelper;
6 9
7 10 class Text extends BaseComponent
8 11 {
9 - /**
10 - * Compile and echo the html element
11 - * @param array $data [element data]
12 - * @param stdClass $form [Form Object]
13 - * @return viod
14 - */
15 - public function compile($data, $form)
16 - {
12 + /**
13 + * Compile and echo the html element
14 + *
15 + * @param array $data [element data]
16 + * @param \stdClass $form [Form Object]
17 + *
18 + * @return void
19 + */
20 + public function compile($data, $form)
21 + {
17 22 $elementName = $data['element'];
18 - $data = apply_filters('fluenform_rendering_field_data_'.$elementName, $data, $form);
23 + $data = apply_filters_deprecated(
24 + 'fluentform_rendering_field_data_' . $elementName,
25 + [
26 + $data,
27 + $form
28 + ],
29 + FLUENTFORM_FRAMEWORK_UPGRADE,
30 + 'fluentform/rendering_field_data_' . $elementName,
31 + 'Use fluentform/rendering_field_data_' . $elementName . ' instead of fluentform_rendering_field_data_' . $elementName
32 + );
33 + $data = apply_filters('fluentform/rendering_field_data_' . $elementName, $data, $form);
19 34
20 35 // </mask input>
21 - if ( isset($data['settings']['temp_mask']) && $data['settings']['temp_mask'] != 'custom' ) {
22 - $data['attributes']['data-mask'] = $data['settings']['temp_mask'];
23 - }
36 + if (isset($data['settings']['temp_mask']) && 'custom' != $data['settings']['temp_mask']) {
37 + $data['attributes']['data-mask'] = $data['settings']['temp_mask'];
38 + }
24 39
25 - if(isset($data['attributes']['data-mask'])) {
40 + if ('custom' == ArrayHelper::get($data, 'settings.temp_mask')) {
41 + if ('yes' == ArrayHelper::get($data, 'settings.data-mask-reverse')) {
42 + $data['attributes']['data-mask-reverse'] = 'true';
43 + }
44 +
45 + if ('yes' == ArrayHelper::get($data, 'settings.data-clear-if-not-match')) {
46 + $data['attributes']['data-clear-if-not-match'] = 'true';
47 + }
48 + }
49 +
50 + if (isset($data['attributes']['data-mask'])) {
26 51 wp_enqueue_script(
27 52 'jquery-mask',
28 - $this->app->publicUrl('libs/jquery.mask.min.js'),
29 - array('jquery'),
30 - false,
53 + fluentformMix('libs/jquery.mask.min.js'),
54 + ['jquery'],
55 + '1.14.15',
31 56 true
32 57 );
58 +
59 + // Apply mobile keyboard type to mask fields
60 + $isDisable = apply_filters('fluentform/disable_input_mode', false);
61 +
62 + if (!$isDisable) {
63 + $mobileKeyboardType = ArrayHelper::get($data, 'settings.mobile_keyboard_type');
64 +
65 + $inputMode = null;
66 + if (!empty($mobileKeyboardType)) {
67 + $inputMode = $mobileKeyboardType;
68 + }
69 + // Empty = no inputmode (current behavior for masks)
70 +
71 + $inputMode = apply_filters('fluentform/mask_input_mode', $inputMode, $data, $form);
72 +
73 + if ($inputMode) {
74 + $data['attributes']['inputmode'] = $inputMode;
75 + }
76 + }
33 77 }
34 78
35 - if($data['element'] == 'input_number' || $data['element'] = 'custom_payment_component') {
36 - if(
79 + if ('input_number' == $data['element'] || 'custom_payment_component' == $data['element']) {
80 + if (
37 81 ArrayHelper::get($data, 'settings.calculation_settings.status') &&
38 82 $formula = ArrayHelper::get($data, 'settings.calculation_settings.formula')
39 83 ) {
40 84 $data['attributes']['data-calculation_formula'] = $formula;
@@ -41,65 +85,138 @@
41 85 $data['attributes']['class'] .= ' ff_has_formula';
42 86 $data['attributes']['readonly'] = true;
43 87 $data['attributes']['type'] = 'text';
44 88
45 - add_filter('fluentform_form_class', function ($css_class , $targetForm) use ($form) {
46 - if($targetForm->id == $form->id) {
89 + add_filter('fluentform/form_class', function ($css_class, $targetForm) use ($form) {
90 + if ($targetForm->id == $form->id) {
47 91 $css_class .= ' ff_calc_form';
48 92 }
49 93 return $css_class;
50 94 }, 10, 2);
95 + do_action_deprecated(
96 + 'ff_rendering_calculation_form',
97 + [
98 + $form,
99 + $data
100 + ],
101 + FLUENTFORM_FRAMEWORK_UPGRADE,
102 + 'fluentform/rendering_calculation_form',
103 + 'Use fluentform/rendering_calculation_form instead of ff_rendering_calculation_form'
104 + );
105 + do_action('fluentform/rendering_calculation_form', $form, $data);
106 + } else {
107 + // Apply mobile keyboard type setting
108 + $isDisable = apply_filters_deprecated(
109 + 'fluentform_disable_inputmode',
110 + [
111 + false
112 + ],
113 + FLUENTFORM_FRAMEWORK_UPGRADE,
114 + 'fluentform/disable_input_mode',
115 + 'Use fluentform/disable_input_mode instead of fluentform_disable_inputmode'
116 + );
51 117
52 - do_action('ff_rendering_calculation_form', $form, $data);
118 + if (!apply_filters('fluentform/disable_input_mode', $isDisable)) {
119 + $mobileKeyboardType = ArrayHelper::get($data, 'settings.mobile_keyboard_type_number');
120 +
121 + // Default to 'numeric' for backward compatibility
122 + // If user explicitly sets 'decimal', use that instead
123 + $inputMode = !empty($mobileKeyboardType) ? $mobileKeyboardType : 'numeric';
124 +
125 + // Allow filter override
126 + $inputMode = apply_filters('fluentform/number_input_mode', $inputMode, $data, $form);
127 +
128 + if ($inputMode) {
129 + $data['attributes']['inputmode'] = $inputMode;
130 + }
131 + }
53 132 }
54 133
55 - if($step = ArrayHelper::get($data, 'settings.number_step')) {
56 - $data['attributes']['step'] = $step;
134 + if ($step = ArrayHelper::get($data, 'settings.number_step')) {
135 + $data['attributes']['step'] = $step;
136 + } elseif ('number' == ArrayHelper::get($data, 'attributes.type')) {
137 + $data['attributes']['step'] = 'any';
57 138 }
58 -
59 - if($min = ArrayHelper::get($data, 'settings.validation_rules.min.value')) {
60 - $data['attributes']['min'] = $min;
139 +
140 + $min = ArrayHelper::get($data, 'settings.validation_rules.min.value');
141 + if ($min || 0 == $min) {
142 + $data['attributes']['min'] = $min;
143 + $data['attributes']['aria-valuemin'] = $min;
61 144 }
62 145
63 - if($max = ArrayHelper::get($data, 'settings.validation_rules.max.value')) {
64 - $data['attributes']['max'] = $max;
146 + if ($max = ArrayHelper::get($data, 'settings.validation_rules.max.value')) {
147 + $data['attributes']['max'] = $max;
148 + $data['attributes']['aria-valuemax'] = $max;
65 149 }
150 +
151 + if ($formatter = ArrayHelper::get($data, 'settings.numeric_formatter')) {
152 + $formatters = Helper::getNumericFormatters();
153 + if (! empty($formatters[$formatter]['settings'])) {
154 + $data['attributes']['class'] .= ' ff_numeric';
155 + $data['attributes']['data-formatter'] = json_encode($formatters[$formatter]['settings']);
156 + wp_enqueue_script(
157 + 'currency',
158 + fluentformMix('libs/currency.min.js'),
159 + [],
160 + '2.0.3',
161 + true
162 + );
163 + $data['attributes']['type'] = 'text';
164 + }
165 + }
66 166 }
67 167
68 -
69 168 // For hidden input
70 - if ($data['attributes']['type'] == 'hidden') {
71 - echo "<input ".$this->buildAttributes($data['attributes'], $form).">";
72 - return;
73 - }
169 + if ('hidden' == ArrayHelper::get($data, 'attributes.type')) {
170 + $attributes = $this->buildAttributes($data['attributes'], $form);
171 + echo '<input ' . $attributes . '>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- $attributes is escaped before being passed in.
172 + return;
173 + }
74 174
75 - if($tabIndex = \FluentForm\App\Helpers\Helper::getNextTabIndex()) {
175 + if ($tabIndex = Helper::getNextTabIndex()) {
76 176 $data['attributes']['tabindex'] = $tabIndex;
77 177 }
78 178
179 + $data['attributes']['class'] = @trim('ff-el-form-control ' . ArrayHelper::get($data, 'attributes.class', ''));
180 + $data['attributes']['id'] = $this->makeElementId($data, $form);
79 181
80 - $data['attributes']['class'] = @trim('ff-el-form-control '. $data['attributes']['class']);
81 - $data['attributes']['id'] = $this->makeElementId($data, $form);
182 + $elMarkup = $this->buildInputGroup($data, $form);
82 183
83 - $elMarkup = $this->buildInputGroup($data, $form);
184 + $html = $this->buildElementMarkup($elMarkup, $data, $form);
84 185
85 - $html = $this->buildElementMarkup($elMarkup, $data, $form);
86 - echo apply_filters('fluenform_rendering_field_html_'.$elementName, $html, $data, $form);
186 + $html = apply_filters_deprecated(
187 + 'fluentform_rendering_field_html_' . $elementName,
188 + [
189 + $html,
190 + $data,
191 + $form
192 + ],
193 + FLUENTFORM_FRAMEWORK_UPGRADE,
194 + 'fluentform/rendering_field_html_' . $elementName,
195 + 'Use fluentform/rendering_field_html_' . $elementName . ' instead of fluentform_rendering_field_html_' . $elementName
196 + );
197 +
198 + $this->printContent('fluentform/rendering_field_html_' . $elementName, $html, $data, $form);
87 199 }
88 200
89 201 private function buildInputGroup($data, $form)
90 202 {
91 - $input = "<input ".$this->buildAttributes($data['attributes'], $form).">";
203 + $ariaRequired = 'false';
204 + if (ArrayHelper::get($data, 'settings.validation_rules.required.value')) {
205 + $ariaRequired = 'true';
206 + }
207 +
208 + $input = '<input ' . $this->buildAttributes($data['attributes'], $form) . ' aria-invalid="false" aria-required='.$ariaRequired.'>';
92 209 $prefix = ArrayHelper::get($data, 'settings.prefix_label');
93 210 $suffix = ArrayHelper::get($data, 'settings.suffix_label');
94 - if($prefix || $suffix) {
211 + if ($prefix || $suffix) {
95 212 $wrapper = '<div class="ff_input-group">';
96 - if($prefix) {
97 - $wrapper .= '<div class="ff_input-group-prepend"><span class="ff_input-group-text">'.$prefix.'</span></div>';
213 + if ($prefix) {
214 + $wrapper .= '<div class="ff_input-group-prepend"><span class="ff_input-group-text">' . fluentform_sanitize_html($prefix) . '</span></div>';
98 215 }
99 216 $wrapper .= $input;
100 - if($suffix) {
101 - $wrapper .= '<div class="ff_input-group-append"><span class="ff_input-group-text">'.$suffix.'</span></div>';
217 + if ($suffix) {
218 + $wrapper .= '<div class="ff_input-group-append"><span class="ff_input-group-text">' . fluentform_sanitize_html($suffix) . '</span></div>';
102 219 }
103 220 $wrapper .= '</div>';
104 221 return $wrapper;
105 222 }
@@ -104,6 +221,5 @@
104 221 return $wrapper;
105 222 }
106 223 return $input;
107 224 }
108 -
109 225 }