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 -52 3.6.516.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,71 +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);
61 - do_action('ff_rendering_calculation_form', $form, $data);
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);
62 106 } else {
63 - if(!apply_filters('fluentform_disable_inputmode', false)) {
64 - $data['attributes']['inputmode'] = 'numeric';
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 + );
117 +
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 + }
65 131 }
66 132 }
67 133
68 - if($step = ArrayHelper::get($data, 'settings.number_step')) {
69 - $data['attributes']['step'] = $step;
70 - } else if(ArrayHelper::get($data, 'attributes.type') == 'number') {
71 - $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';
72 138 }
73 139
74 140 $min = ArrayHelper::get($data, 'settings.validation_rules.min.value');
75 - if($min || $min == 0) {
76 - $data['attributes']['min'] = $min;
141 + if ($min || 0 == $min) {
142 + $data['attributes']['min'] = $min;
143 + $data['attributes']['aria-valuemin'] = $min;
77 144 }
78 145
79 - if($max = ArrayHelper::get($data, 'settings.validation_rules.max.value')) {
80 - $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;
81 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 + }
82 166 }
83 167
84 -
85 168 // For hidden input
86 - if ($data['attributes']['type'] == 'hidden') {
87 - echo "<input ".$this->buildAttributes($data['attributes'], $form).">";
88 - return;
89 - }
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 + }
90 174
91 - if($tabIndex = \FluentForm\App\Helpers\Helper::getNextTabIndex()) {
175 + if ($tabIndex = Helper::getNextTabIndex()) {
92 176 $data['attributes']['tabindex'] = $tabIndex;
93 177 }
94 178
179 + $data['attributes']['class'] = @trim('ff-el-form-control ' . ArrayHelper::get($data, 'attributes.class', ''));
180 + $data['attributes']['id'] = $this->makeElementId($data, $form);
95 181
96 - $data['attributes']['class'] = @trim('ff-el-form-control '. $data['attributes']['class']);
97 - $data['attributes']['id'] = $this->makeElementId($data, $form);
182 + $elMarkup = $this->buildInputGroup($data, $form);
98 183
99 - $elMarkup = $this->buildInputGroup($data, $form);
184 + $html = $this->buildElementMarkup($elMarkup, $data, $form);
100 185
101 - $html = $this->buildElementMarkup($elMarkup, $data, $form);
102 - 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);
103 199 }
104 200
105 201 private function buildInputGroup($data, $form)
106 202 {
107 - $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.'>';
108 209 $prefix = ArrayHelper::get($data, 'settings.prefix_label');
109 210 $suffix = ArrayHelper::get($data, 'settings.suffix_label');
110 - if($prefix || $suffix) {
211 + if ($prefix || $suffix) {
111 212 $wrapper = '<div class="ff_input-group">';
112 - if($prefix) {
113 - $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>';
114 215 }
115 216 $wrapper .= $input;
116 - if($suffix) {
117 - $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>';
118 219 }
119 220 $wrapper .= '</div>';
120 221 return $wrapper;
121 222 }
@@ -120,6 +221,5 @@
120 221 return $wrapper;
121 222 }
122 223 return $input;
123 224 }
124 -
125 225 }