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 +114 -33 3.6.646.2.14 View file →
@@ -1,8 +1,10 @@
1 1 <?php
2 2
3 3 namespace FluentForm\App\Services\FormBuilder\Components;
4 4
5 +defined('ABSPATH') or die;
6 +
5 7 use FluentForm\App\Helpers\Helper;
6 8 use FluentForm\Framework\Helpers\ArrayHelper;
7 9
8 10 class Text extends BaseComponent
@@ -8,28 +10,40 @@
8 10 class Text extends BaseComponent
9 11 {
10 12 /**
11 13 * Compile and echo the html element
12 - * @param array $data [element data]
13 - * @param stdClass $form [Form Object]
14 - * @return viod
14 + *
15 + * @param array $data [element data]
16 + * @param \stdClass $form [Form Object]
17 + *
18 + * @return void
15 19 */
16 20 public function compile($data, $form)
17 21 {
18 22 $elementName = $data['element'];
19 - $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);
20 34
21 35 // </mask input>
22 - if (isset($data['settings']['temp_mask']) && $data['settings']['temp_mask'] != 'custom') {
36 + if (isset($data['settings']['temp_mask']) && 'custom' != $data['settings']['temp_mask']) {
23 37 $data['attributes']['data-mask'] = $data['settings']['temp_mask'];
24 38 }
25 39
26 - if (ArrayHelper::get($data, 'settings.temp_mask') == 'custom') {
27 - 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')) {
28 42 $data['attributes']['data-mask-reverse'] = 'true';
29 43 }
30 44
31 - if (ArrayHelper::get($data, 'settings.data-clear-if-not-match') == 'yes') {
45 + if ('yes' == ArrayHelper::get($data, 'settings.data-clear-if-not-match')) {
32 46 $data['attributes']['data-clear-if-not-match'] = 'true';
33 47 }
34 48 }
35 49
@@ -35,16 +49,35 @@
35 49
36 50 if (isset($data['attributes']['data-mask'])) {
37 51 wp_enqueue_script(
38 52 'jquery-mask',
39 - $this->app->publicUrl('libs/jquery.mask.min.js'),
40 - array('jquery'),
41 - false,
53 + fluentformMix('libs/jquery.mask.min.js'),
54 + ['jquery'],
55 + '1.14.15',
42 56 true
43 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 + }
44 77 }
45 78
46 - if ($data['element'] == 'input_number' || $data['element'] == 'custom_payment_component') {
79 + if ('input_number' == $data['element'] || 'custom_payment_component' == $data['element']) {
47 80 if (
48 81 ArrayHelper::get($data, 'settings.calculation_settings.status') &&
49 82 $formula = ArrayHelper::get($data, 'settings.calculation_settings.formula')
50 83 ) {
@@ -52,44 +85,78 @@
52 85 $data['attributes']['class'] .= ' ff_has_formula';
53 86 $data['attributes']['readonly'] = true;
54 87 $data['attributes']['type'] = 'text';
55 88
56 - add_filter('fluentform_form_class', function ($css_class, $targetForm) use ($form) {
89 + add_filter('fluentform/form_class', function ($css_class, $targetForm) use ($form) {
57 90 if ($targetForm->id == $form->id) {
58 91 $css_class .= ' ff_calc_form';
59 92 }
60 93 return $css_class;
61 94 }, 10, 2);
62 - 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);
63 106 } else {
64 - if (!apply_filters('fluentform_disable_inputmode', false)) {
65 - $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 + }
66 131 }
67 132 }
68 133
69 134 if ($step = ArrayHelper::get($data, 'settings.number_step')) {
70 135 $data['attributes']['step'] = $step;
71 - } else if (ArrayHelper::get($data, 'attributes.type') == 'number') {
136 + } elseif ('number' == ArrayHelper::get($data, 'attributes.type')) {
72 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) {
141 + if ($min || 0 == $min) {
77 142 $data['attributes']['min'] = $min;
143 + $data['attributes']['aria-valuemin'] = $min;
78 144 }
79 145
80 146 if ($max = ArrayHelper::get($data, 'settings.validation_rules.max.value')) {
81 147 $data['attributes']['max'] = $max;
148 + $data['attributes']['aria-valuemax'] = $max;
82 149 }
83 150
84 151 if ($formatter = ArrayHelper::get($data, 'settings.numeric_formatter')) {
85 152 $formatters = Helper::getNumericFormatters();
86 - if (!empty($formatters[$formatter]['settings'])) {
153 + if (! empty($formatters[$formatter]['settings'])) {
87 154 $data['attributes']['class'] .= ' ff_numeric';
88 155 $data['attributes']['data-formatter'] = json_encode($formatters[$formatter]['settings']);
89 156 wp_enqueue_script(
90 157 'currency',
91 - $this->app->publicUrl('libs/currency.min.js'),
158 + fluentformMix('libs/currency.min.js'),
92 159 [],
93 160 '2.0.3',
94 161 true
95 162 );
@@ -94,47 +161,62 @@
94 161 true
95 162 );
96 163 $data['attributes']['type'] = 'text';
97 164 }
98 -
99 165 }
100 -
101 166 }
102 167
103 -
104 168 // For hidden input
105 - if ($data['attributes']['type'] == 'hidden') {
106 - echo "<input " . $this->buildAttributes($data['attributes'], $form) . ">";
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.
107 172 return;
108 173 }
109 174
110 - if ($tabIndex = \FluentForm\App\Helpers\Helper::getNextTabIndex()) {
175 + if ($tabIndex = Helper::getNextTabIndex()) {
111 176 $data['attributes']['tabindex'] = $tabIndex;
112 177 }
113 178
114 -
115 - $data['attributes']['class'] = @trim('ff-el-form-control ' . $data['attributes']['class']);
179 + $data['attributes']['class'] = @trim('ff-el-form-control ' . ArrayHelper::get($data, 'attributes.class', ''));
116 180 $data['attributes']['id'] = $this->makeElementId($data, $form);
117 181
118 182 $elMarkup = $this->buildInputGroup($data, $form);
119 183
120 184 $html = $this->buildElementMarkup($elMarkup, $data, $form);
121 - echo apply_filters('fluenform_rendering_field_html_' . $elementName, $html, $data, $form);
185 +
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);
122 199 }
123 200
124 201 private function buildInputGroup($data, $form)
125 202 {
126 - $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.'>';
127 209 $prefix = ArrayHelper::get($data, 'settings.prefix_label');
128 210 $suffix = ArrayHelper::get($data, 'settings.suffix_label');
129 211 if ($prefix || $suffix) {
130 212 $wrapper = '<div class="ff_input-group">';
131 213 if ($prefix) {
132 - $wrapper .= '<div class="ff_input-group-prepend"><span class="ff_input-group-text">' . $prefix . '</span></div>';
214 + $wrapper .= '<div class="ff_input-group-prepend"><span class="ff_input-group-text">' . fluentform_sanitize_html($prefix) . '</span></div>';
133 215 }
134 216 $wrapper .= $input;
135 217 if ($suffix) {
136 - $wrapper .= '<div class="ff_input-group-append"><span class="ff_input-group-text">' . $suffix . '</span></div>';
218 + $wrapper .= '<div class="ff_input-group-append"><span class="ff_input-group-text">' . fluentform_sanitize_html($suffix) . '</span></div>';
137 219 }
138 220 $wrapper .= '</div>';
139 221 return $wrapper;
140 222 }
@@ -139,6 +221,5 @@
139 221 return $wrapper;
140 222 }
141 223 return $input;
142 224 }
143 -
144 225 }