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 +152 -53 3.6.50 → 6.2.14 View file →
@@ -1,50 +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(ArrayHelper::get($data, 'settings.temp_mask') == 'custom') {
26 - if(ArrayHelper::get($data, 'settings.data-mask-reverse') == 'yes') {
40 + if ('custom' == ArrayHelper::get($data, 'settings.temp_mask')) {
41 + if ('yes' == ArrayHelper::get($data, 'settings.data-mask-reverse')) {
27 42 $data['attributes']['data-mask-reverse'] = 'true';
28 43 }
29 44
30 - if(ArrayHelper::get($data, 'settings.data-clear-if-not-match') == 'yes') {
45 + if ('yes' == ArrayHelper::get($data, 'settings.data-clear-if-not-match')) {
31 46 $data['attributes']['data-clear-if-not-match'] = 'true';
32 47 }
33 48 }
34 49
35 - if(isset($data['attributes']['data-mask'])) {
50 + if (isset($data['attributes']['data-mask'])) {
36 51 wp_enqueue_script(
37 52 'jquery-mask',
38 - $this->app->publicUrl('libs/jquery.mask.min.js'),
39 - array('jquery'),
40 - false,
53 + fluentformMix('libs/jquery.mask.min.js'),
54 + ['jquery'],
55 + '1.14.15',
41 56 true
42 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 + }
43 77 }
44 78
45 - if($data['element'] == 'input_number' || $data['element'] = 'custom_payment_component') {
46 - if(
79 + if ('input_number' == $data['element'] || 'custom_payment_component' == $data['element']) {
80 + if (
47 81 ArrayHelper::get($data, 'settings.calculation_settings.status') &&
48 82 $formula = ArrayHelper::get($data, 'settings.calculation_settings.formula')
49 83 ) {
50 84 $data['attributes']['data-calculation_formula'] = $formula;
@@ -51,72 +85,138 @@
51 85 $data['attributes']['class'] .= ' ff_has_formula';
52 86 $data['attributes']['readonly'] = true;
53 87 $data['attributes']['type'] = 'text';
54 88
55 - add_filter('fluentform_form_class', function ($css_class , $targetForm) use ($form) {
56 - if($targetForm->id == $form->id) {
89 + add_filter('fluentform/form_class', function ($css_class, $targetForm) use ($form) {
90 + if ($targetForm->id == $form->id) {
57 91 $css_class .= ' ff_calc_form';
58 92 }
59 93 return $css_class;
60 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 + );
61 117
62 - do_action('ff_rendering_calculation_form', $form, $data);
63 - } else {
64 - if(!apply_filters('fluentform_disable_inputmode', false)) {
65 - $data['attributes']['inputmode'] = 'numeric';
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 + }
66 131 }
67 132 }
68 133
69 - if($step = ArrayHelper::get($data, 'settings.number_step')) {
70 - $data['attributes']['step'] = $step;
71 - } else if(ArrayHelper::get($data, 'attributes.type') == 'number') {
72 - $data['attributes']['step'] = 'any';
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';
73 138 }
74 139
75 140 $min = ArrayHelper::get($data, 'settings.validation_rules.min.value');
76 - if($min || $min == 0) {
77 - $data['attributes']['min'] = $min;
141 + if ($min || 0 == $min) {
142 + $data['attributes']['min'] = $min;
143 + $data['attributes']['aria-valuemin'] = $min;
78 144 }
79 145
80 - if($max = ArrayHelper::get($data, 'settings.validation_rules.max.value')) {
81 - $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;
82 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 + }
83 166 }
84 167
85 -
86 168 // For hidden input
87 - if ($data['attributes']['type'] == 'hidden') {
88 - echo "<input ".$this->buildAttributes($data['attributes'], $form).">";
89 - return;
90 - }
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 + }
91 174
92 - if($tabIndex = \FluentForm\App\Helpers\Helper::getNextTabIndex()) {
175 + if ($tabIndex = Helper::getNextTabIndex()) {
93 176 $data['attributes']['tabindex'] = $tabIndex;
94 177 }
95 178
179 + $data['attributes']['class'] = @trim('ff-el-form-control ' . ArrayHelper::get($data, 'attributes.class', ''));
180 + $data['attributes']['id'] = $this->makeElementId($data, $form);
96 181
97 - $data['attributes']['class'] = @trim('ff-el-form-control '. $data['attributes']['class']);
98 - $data['attributes']['id'] = $this->makeElementId($data, $form);
182 + $elMarkup = $this->buildInputGroup($data, $form);
99 183
100 - $elMarkup = $this->buildInputGroup($data, $form);
184 + $html = $this->buildElementMarkup($elMarkup, $data, $form);
101 185
102 - $html = $this->buildElementMarkup($elMarkup, $data, $form);
103 - 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);
104 199 }
105 200
106 201 private function buildInputGroup($data, $form)
107 202 {
108 - $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.'>';
109 209 $prefix = ArrayHelper::get($data, 'settings.prefix_label');
110 210 $suffix = ArrayHelper::get($data, 'settings.suffix_label');
111 - if($prefix || $suffix) {
211 + if ($prefix || $suffix) {
112 212 $wrapper = '<div class="ff_input-group">';
113 - if($prefix) {
114 - $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>';
115 215 }
116 216 $wrapper .= $input;
117 - if($suffix) {
118 - $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>';
119 219 }
120 220 $wrapper .= '</div>';
121 221 return $wrapper;
122 222 }
@@ -121,6 +221,5 @@
121 221 return $wrapper;
122 222 }
123 223 return $input;
124 224 }
125 -
126 225 }