PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 6.2.12
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v6.2.12
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
fluentform / app / Services / FormBuilder / Components / Text.php

Text.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 6.2.12, at app/Services/FormBuilder/Components/Text.php

226 lines 9.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentForm\App\Services\FormBuilder\Components;
4
5 defined('ABSPATH') or die;
6
7 use FluentForm\App\Helpers\Helper;
8 use FluentForm\Framework\Helpers\ArrayHelper;
9
10 class Text extends BaseComponent
11 {
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 {
22 $elementName = $data['element'];
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);
34
35 // </mask input>
36 if (isset($data['settings']['temp_mask']) && 'custom' != $data['settings']['temp_mask']) {
37 $data['attributes']['data-mask'] = $data['settings']['temp_mask'];
38 }
39
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'])) {
51 wp_enqueue_script(
52 'jquery-mask',
53 fluentformMix('libs/jquery.mask.min.js'),
54 ['jquery'],
55 '1.14.15',
56 true
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 }
77 }
78
79 if ('input_number' == $data['element'] || 'custom_payment_component' == $data['element']) {
80 if (
81 ArrayHelper::get($data, 'settings.calculation_settings.status') &&
82 $formula = ArrayHelper::get($data, 'settings.calculation_settings.formula')
83 ) {
84 $data['attributes']['data-calculation_formula'] = $formula;
85 $data['attributes']['class'] .= ' ff_has_formula';
86 $data['attributes']['readonly'] = true;
87 $data['attributes']['type'] = 'text';
88
89 add_filter('fluentform/form_class', function ($css_class, $targetForm) use ($form) {
90 if ($targetForm->id == $form->id) {
91 $css_class .= ' ff_calc_form';
92 }
93 return $css_class;
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 );
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 }
131 }
132 }
133
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';
138 }
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;
144 }
145
146 if ($max = ArrayHelper::get($data, 'settings.validation_rules.max.value')) {
147 $data['attributes']['max'] = $max;
148 $data['attributes']['aria-valuemax'] = $max;
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 }
166 }
167
168 // For hidden input
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 }
174
175 if ($tabIndex = Helper::getNextTabIndex()) {
176 $data['attributes']['tabindex'] = $tabIndex;
177 }
178
179 $data['attributes']['class'] = @trim('ff-el-form-control ' . ArrayHelper::get($data, 'attributes.class', ''));
180 $data['attributes']['id'] = $this->makeElementId($data, $form);
181
182 $elMarkup = $this->buildInputGroup($data, $form);
183
184 $html = $this->buildElementMarkup($elMarkup, $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);
199 }
200
201 private function buildInputGroup($data, $form)
202 {
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.'>';
209 $prefix = ArrayHelper::get($data, 'settings.prefix_label');
210 $suffix = ArrayHelper::get($data, 'settings.suffix_label');
211 if ($prefix || $suffix) {
212 $wrapper = '<div class="ff_input-group">';
213 if ($prefix) {
214 $wrapper .= '<div class="ff_input-group-prepend"><span class="ff_input-group-text">' . fluentform_sanitize_html($prefix) . '</span></div>';
215 }
216 $wrapper .= $input;
217 if ($suffix) {
218 $wrapper .= '<div class="ff_input-group-append"><span class="ff_input-group-text">' . fluentform_sanitize_html($suffix) . '</span></div>';
219 }
220 $wrapper .= '</div>';
221 return $wrapper;
222 }
223 return $input;
224 }
225 }
226