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