Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/fluentformpro/src/Components/RangeSliderField.php
Keine Baseline-Datei – Diff nur gegen leer.
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
+