Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/fluentformpro/src/Components/RangeSliderField.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + <?php
2 +
3 + namespace FluentFormPro\Components;
4 +
5 + if (!defined('ABSPATH')) {
6 + exit; // Exit if accessed directly.
7 + }
8 +
9 + use FluentForm\App\Helpers\Helper;
10 + use FluentForm\App\Services\FormBuilder\BaseFieldManager;
11 + use FluentForm\Framework\Helpers\ArrayHelper;
12 +
13 + class RangeSliderField extends BaseFieldManager
14 + {
15 + public function __construct()
16 + {
17 + parent::__construct(
18 + 'rangeslider',
19 + 'Range Slider',
20 + ['range', 'number', 'slider'],
21 + 'advanced'
22 + );
23 +
24 + add_filter('fluentform/editor_init_element_rangeslider', function ($item) {
25 + if (!isset($item['settings']['number_step'])) {
26 + $item['settings']['number_step'] = '';
27 + }
28 + // @todo : Fix order of the following
29 + if (!isset($item['settings']['enable_target_product'])) {
30 + $item['settings']['enable_target_product'] = 'no';
31 + }
32 + if (!isset($item['settings']['target_product'])) {
33 + $item['settings']['target_product'] = '';
34 + }
35 + return $item;
36 + });
37 + /* Todo : add to validation rules */
38 + add_filter('fluentform/validate_input_item_rangeslider', function ($error, $field, $formData) {
39 + $min = ArrayHelper::get($field, 'raw.attributes.min');
40 + $max = ArrayHelper::get($field, 'raw.attributes.max');
41 + $name = ArrayHelper::get($field, 'raw.attributes.name');
42 + if ($userValue = ArrayHelper::get($formData, $name)) {
43 + if (!$min) {
44 + $min = 0;
45 + }
46 + if (($max !== "" && $max < $userValue) || $min > $userValue) {
47 + $error = __('Value is not within range', 'fluentformpro');
48 + }
49 + }
50 + return $error;
51 + }, 10, 3);
52 +
53 + }
54 +
55 + function getComponent()
56 + {
57 + return [
58 + 'index' => 15,
59 + 'element' => $this->key,
60 + 'attributes' => [
61 + 'name' => $this->key,
62 + 'class' => '',
63 + 'value' => '',
64 + 'min' => 0,
65 + 'max' => 10,
66 + 'type' => 'range'
67 + ],
68 + 'settings' => [
69 + 'number_step' => '',
70 + 'container_class' => '',
71 + 'placeholder' => '',
72 + 'label' => $this->title,
73 + 'label_placement' => '',
74 + 'help_message' => '',
75 + 'admin_field_label' => '',
76 + 'enable_target_product' => 'no',
77 + 'target_product' => '',
78 + 'validation_rules' => [
79 + 'required' => [
80 + 'value' => false,
81 + 'global' => true,
82 + 'message' => Helper::getGlobalDefaultMessage('required'),
83 + 'global_message' => Helper::getGlobalDefaultMessage('required'),
84 + ],
85 + ],
86 + 'conditional_logics' => [],
87 + ],
88 + 'editor_options' => [
89 + 'title' => $this->title,
90 + 'icon_class' => 'dashicons dashicons-leftright',
91 + 'template' => 'inputSlider'
92 + ],
93 + ];
94 + }
95 +
96 + public function getGeneralEditorElements()
97 + {
98 + return [
99 + 'label',
100 + 'label_placement',
101 + 'admin_field_label',
102 + 'value',
103 + 'min',
104 + 'max',
105 + 'number_step',
106 + 'validation_rules',
107 + 'enable_target_product',
108 + 'target_product',
109 + ];
110 + }
111 + public function generalEditorElement()
112 + {
113 + return [
114 + 'enable_target_product' => [
115 + 'template' => 'radio',
116 + 'options' => [
117 + [
118 + 'value' => 'yes',
119 + 'label' => __('Yes', 'fluentformpro'),
120 + ],
121 + [
122 + 'value' => 'no',
123 + 'label' => __('No', 'fluentformpro'),
124 + ],
125 + ],
126 + 'label' => __('Enable Quantity Mapping', 'fluentformpro'),
127 + ],
128 + 'target_product' => [
129 + 'template' => 'targetProduct',
130 + 'label' => __('Target Product Field', 'fluentformpro'),
131 + 'dependency' => [
132 + 'depends_on' => 'settings/enable_target_product',
133 + 'value' => 'yes',
134 + 'operator' => '==',
135 + ],
136 + ],
137 + ];
138 + }
139 +
140 + public function render($data, $form)
141 + {
142 + $elementName = $data['element'];
143 + $data = apply_filters_deprecated(
144 + 'fluentform_rendering_field_data_' . $elementName,
145 + [
146 + $data,
147 + $form
148 + ],
149 + FLUENTFORM_FRAMEWORK_UPGRADE,
150 + 'fluentform/rendering_field_data_' . $elementName,
151 + 'Use fluentform/rendering_field_data_' . $elementName . ' instead of fluentform_rendering_field_data_' . $elementName
152 + );
153 + $data = apply_filters('fluentform/rendering_field_data_' . $elementName, $data, $form);
154 +
155 + if ($tabIndex = \FluentForm\App\Helpers\Helper::getNextTabIndex()) {
156 + $data['attributes']['tabindex'] = $tabIndex;
157 + }
158 +
159 + $data['attributes']['class'] = @trim('ff-el-form-control ' . $data['attributes']['class']);
160 + $data['attributes']['id'] = $this->makeElementId($data, $form);
161 +
162 + $this->registerScripts($form, $data['attributes']['id']);
163 +
164 +
165 + $data['attributes']['data-default_value'] = $data['attributes']['value'];
166 + if ($data['attributes']['value'] == '') {
167 + $data['attributes']['value'] = 0;
168 + }
169 +
170 + if ($step = ArrayHelper::get($data, 'settings.number_step')) {
171 + $data['attributes']['step'] = $step;
172 + }
173 +
174 + $data['attributes']['type'] = 'range';
175 + $data['attributes']['data-calc_value'] = $data['attributes']['value'];
176 + if (is_rtl()) {
177 + $data['attributes']['data-direction'] = 'rtl';
178 + }
179 + if(ArrayHelper::get($data,'settings.enable_target_product') == 'yes' && ArrayHelper::get($data,'settings.target_product') != '' ){
180 + $data['attributes']['class'] .= ' ff_quantity_item ff_quantity_item_slider';
181 + $data['attributes']['data-target_product'] = ArrayHelper::get($data, 'settings.target_product');
182 + }
183 + $ariaRequired = 'false';
184 + if (ArrayHelper::get($data, 'settings.validation_rules.required.value')) {
185 + $ariaRequired = 'true';
186 + }
187 +
188 + $elMarkup = "<div class='ff_slider_wrapper'><input " . $this->buildAttributes($data['attributes'], $form) . " aria-invalid='false' aria-required={$ariaRequired}><div class='ff_range_value'>" . $data['attributes']['value'] . "</div></div>";
189 +
190 + $html = $this->buildElementMarkup($elMarkup, $data, $form);
191 +
192 + $html = apply_filters_deprecated(
193 + 'fluentform_rendering_field_html_' . $elementName,
194 + [
195 + $html,
196 + $data,
197 + $form
198 + ],
199 + FLUENTFORM_FRAMEWORK_UPGRADE,
200 + 'fluentform/rendering_field_html_' . $elementName,
201 + 'Use fluentform/rendering_field_html_' . $elementName . ' instead of fluentform_rendering_field_html_' . $elementName
202 + );
203 +
204 + echo apply_filters('fluentform/rendering_field_html_' . $elementName, $html, $data, $form);
205 + }
206 +
207 + private function registerScripts($form, $elementId)
208 + {
209 + wp_enqueue_script(
210 + 'rangeslider',
211 + FLUENTFORMPRO_DIR_URL . 'public/libs/rangeslider/rangeslider.js',
212 + array('jquery'),
213 + '2.3.0',
214 + true
215 + );
216 +
217 + wp_enqueue_style(
218 + 'rangeslider',
219 + FLUENTFORMPRO_DIR_URL . 'public/libs/rangeslider/rangeslider.css',
220 + array(),
221 + '2.3.0',
222 + 'all'
223 + );
224 +
225 + if (did_action('wp_footer')) {
226 + $this->printJS($form, $elementId);
227 + } else {
228 + add_action('wp_footer', function () use ($form, $elementId) {
229 + $this->printJS($form, $elementId);
230 + }, 99);
231 + }
232 + }
233 +
234 + private function printJS($form, $elementId)
235 + {
236 + ?>
237 + <script type="text/javascript">
238 + jQuery(document).ready(function ($) {
239 + function initRangeSlider() {
240 + var $element = $('.<?php echo $form->instance_css_class; ?>').find("#<?php echo $elementId ?>");
241 +
242 + if (!$element.length) {
243 + return;
244 + }
245 +
246 + // Destroy any existing rangeslider instance first
247 + if ($element.rangeslider !== undefined) {
248 + $element.rangeslider('destroy');
249 + $element.parent().find('.rangeslider').remove();
250 + }
251 +
252 + if ($element.data('plugin_rangeslider')) {
253 + $element.rangeslider('destroy');
254 + }
255 +
256 + var hasCondition = $element.closest('.ff-el-group').hasClass('has-conditions');
257 + var $valueWrapper = $element.parent().find('.ff_range_value');
258 + var prevValue = 0;
259 + var isRequired = !!$element.parents('.ff-el-group').children('.ff-el-is-required').length;
260 +
261 + $element.rangeslider({
262 + polyfill: false,
263 + onSlide: function (position, value) {
264 + if (prevValue != value) {
265 + //attr added to check range slider is required or not
266 + $element.attr('is-changed', true);
267 + prevValue = value;
268 + $element.trigger('keyup');
269 + $valueWrapper.text(value);
270 + $element.rangeslider('update', true);
271 + }
272 + },
273 + onInit: function () {
274 + if (isRequired) {
275 + $element.attr('is-changed', false);
276 + if ($element.data('default_value') !== undefined) {
277 + $element.attr('is-changed', true);
278 + }
279 + $element.val() ? $valueWrapper.text($element.val()) : $valueWrapper.text('');
280 + } else {
281 + $valueWrapper.text($element.val());
282 + }
283 + }
284 + });
285 +
286 + $element.on('change', function () {
287 + $valueWrapper.text($element.val());
288 + if (hasCondition) {
289 + $element.rangeslider('update', true);
290 + }
291 + });
292 + }
293 +
294 + initRangeSlider();
295 +
296 + $(document).on('reInitExtras reInitRangeSliders', '.<?php echo $form->instance_css_class; ?>', function () {
297 + initRangeSlider();
298 + });
299 + });
300 + </script>
301 + <?php
302 + }
303 + }
304 +