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
fluentform / app / Services / Migrator / Classes / BaseMigrator.php

BaseMigrator.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 6.2.14, at app/Services/Migrator/Classes/BaseMigrator.php

1,830 lines 81.5 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\Migrator\Classes;
4
5 use FluentForm\App\Modules\Form\FormFieldsParser;
6 use FluentForm\App\Services\Submission\SubmissionService;
7 use FluentForm\Framework\Helpers\ArrayHelper;
8
9 abstract class BaseMigrator
10 {
11 /** Constants used for default entry migrations max limit */
12 const DEFAULT_ENTRY_MIGRATION_MAX_LIMIT = 1000;
13 public $key;
14 public $title;
15 public $shortcode;
16 public $submitBtn;
17 public $unSupportFields = [];
18
19
20 public function import_forms($selectedForms = [])
21 {
22 if (!$this->exist()) {
23 wp_send_json_error([
24 'message' => sprintf(
25 /* translators: %s Target Plugin Name */
26 __('%s is not installed.', 'fluentform'),
27 $this->title),
28 ]);
29 }
30
31 $failed = [];
32
33 $forms = $this->getForms();
34
35 if (!$forms) {
36 wp_send_json_error([
37 'message' => __('No forms found!', 'fluentform'),
38 ]);
39 }
40 $insertedForms = [];
41 $refs = get_option('__ff_imorted_forms_map');
42 $refs = is_array($refs) ? $refs : [];
43 if ($forms && is_array($forms)) {
44
45 foreach ($forms as $formItem) {
46 $formId = $this->getFormId($formItem);
47 if (!empty($selectedForms) && !in_array($formId, $selectedForms)) {
48 continue;
49 }
50
51 $formFields = $this->getFields($formItem);
52 if ($formFields) {
53 $formFields = json_encode($formFields);
54 } else {
55 $failed[] = $this->getFormName($formItem);
56 continue;
57 }
58 $form = [
59 'title' => $this->getFormName($formItem),
60 'form_fields' => $formFields,
61 'status' => 'published',
62 'has_payment' => 0,
63 'type' => 'form',
64 'created_by' => get_current_user_id(),
65 'conditions' => '',
66 'appearance_settings' => ''
67 ];
68
69 if ($formId = $this->isAlreadyImported($formItem)) {
70 $insertedForms = $this->updateForm($formId, $formFields, $insertedForms);
71 } else {
72 list($insertedForms, $formId) = $this->insertForm($form, $insertedForms, $formItem);
73 }
74 //get metas
75 $metas = $this->getFormMetas($formItem);
76 $this->updateMetas($metas, $formId);
77
78
79 $refs[$formId] = [
80 'imported_form_id' => $this->getFormId($formItem),
81 'form_type' => $this->key,
82 ];
83
84 }
85 $msg = '';
86 if (count($failed) > 0) {
87 $msg = "These forms was not imported for invalid data : " . implode(', ', $failed);
88 }
89 if (count($insertedForms) > 0) {
90 update_option('__ff_imorted_forms_map', $refs, 'no');
91 wp_send_json([
92 'status' => true,
93 'message' => "Your forms has been successfully imported. " . $msg,
94 'inserted_forms' => array_values($insertedForms),
95 'unsupported_fields' => array_values(array_unique(array_filter($this->unSupportFields)))
96 ], 200);
97 return;
98 }
99 wp_send_json([
100 'message' => "No form is selected " . $msg,
101 ], 200);
102
103 }
104
105 wp_send_json([
106 'message' => __('Export error, please try again.', 'fluentform')
107 ], 422);
108 }
109
110 abstract protected function getForms();
111
112 abstract protected function getFields($form);
113
114 abstract protected function getFormName($form);
115
116 abstract protected function getFormMetas($form);
117
118 abstract protected function getFormsFormatted();
119
120 abstract protected function exist();
121
122 public function getFluentClassicField($field, $args = [])
123 {
124 if (!$field) {
125 return;
126 }
127 $defaults = [
128 'index' => '',
129 'uniqElKey' => '',
130 'required' => false,
131 'label' => '',
132 'label_placement' => '',
133 'admin_field_label' => '',
134 'name' => '',
135 'help_message' => '',
136 'placeholder' => '',
137 'fields' => [],
138 'value' => '',
139 'default' => '',
140 'maxlength' => '',
141 'options' => [],
142 'class' => '',
143 'format' => '',
144 'validation_rules' => [],
145 'conditional_logics' => [],
146 'enable_image_input' => false,
147 'calc_value_status' => false,
148 'dynamic_default_value' => '',
149 'container_class' => '',
150 'id' => '',
151 'number_step' => '',
152 'step' => '1',
153 'min' => '0',
154 'max' => '10',
155 'mask' => '',
156 'temp_mask' => '',
157 'enable_select_2' => 'no',
158 'is_button_type' => '',
159 'max_file_count' => '',
160 'max_file_size' => '',
161 'upload_btn_text' => '',
162 'allowed_file_types' => '',
163 'max_size_unit' => '',
164 'html_codes' => '',
165 'section_break_desc' => '',
166 'tnc_html' => '',
167 'prefix' => '',
168 'suffix' => '',
169 'layout_class' => '',
170 'input_name_args' => '',
171 'is_time_enabled' => '',
172 'address_args' => '',
173 'rows' => '',
174 'cols' => '',
175 'enable_calculation' => false,
176 'calculation_formula' => ''
177 ];
178
179 $args = wp_parse_args($args, $defaults);
180 return ArrayHelper::get(self::defaultFieldConfig($args), $field);
181 }
182
183 public static function defaultFieldConfig($args)
184 {
185 $defaultElements = [
186 'input_name' => [
187 'index' => $args['index'],
188 'element' => 'input_name',
189 'attributes' => [
190 'name' => $args['name'],
191 'data-type' => 'name-element'
192 ],
193 'settings' => [
194 'container_class' => '',
195 'admin_field_label' => 'Name',
196 'conditional_logics' => [],
197 'label_placement' => 'top'
198 ],
199 'fields' => [
200 'first_name' => [
201 'element' => 'input_text',
202 'attributes' => [
203 'type' => 'text',
204 'name' => ArrayHelper::get($args, 'input_name_args.first_name.name'),
205 'value' => ArrayHelper::get($args, 'input_name_args.first_name.default', ''),
206 'id' => '',
207 'class' => '',
208 'placeholder' => ArrayHelper::get($args, 'input_name_args.first_name.placeholder' ,__('First Name', 'fluentform')),
209 'maxlength' => '',
210 ],
211 'settings' => [
212 'container_class' => '',
213 'label' => ArrayHelper::get($args, 'input_name_args.first_name.label'),
214 'help_message' => '',
215 'visible' => ArrayHelper::isTrue($args, 'input_name_args.first_name.visible'),
216 'validation_rules' => [
217 'required' => [
218 'value' => ArrayHelper::isTrue($args, 'input_name_args.first_name.required'),
219 'message' => __('This field is required', 'fluentform'),
220 ],
221 ],
222 'conditional_logics' => [],
223 ],
224 'editor_options' => [
225 'template' => 'inputText'
226 ],
227 ],
228 'middle_name' => [
229 'element' => 'input_text',
230 'attributes' => [
231 'type' => 'text',
232 'name' => ArrayHelper::get($args, 'input_name_args.middle_name.name'),
233 'value' => ArrayHelper::get($args, 'input_name_args.middle_name.default', ''),
234 'id' => '',
235 'class' => '',
236 'placeholder' => ArrayHelper::get($args, 'input_name_args.middle_name.placeholder' , __('Middle Name', 'fluentform')),
237 'required' => false,
238 'maxlength' => '',
239 ],
240 'settings' => [
241 'container_class' => '',
242 'label' => ArrayHelper::get($args, 'input_name_args.middle_name.label'),
243 'help_message' => '',
244 'error_message' => '',
245 'visible' => ArrayHelper::isTrue($args, 'input_name_args.middle_name.visible'),
246 'validation_rules' => [
247 'required' => [
248 'value' => ArrayHelper::isTrue($args, 'input_name_args.middle_name.required'),
249 'message' => __('This field is required', 'fluentform'),
250 ],
251 ],
252 'conditional_logics' => [],
253 ],
254 'editor_options' => [
255 'template' => 'inputText'
256 ],
257 ],
258 'last_name' => [
259 'element' => 'input_text',
260 'attributes' => [
261 'type' => 'text',
262 'name' => ArrayHelper::get($args, 'input_name_args.last_name.name'),
263 'value' => ArrayHelper::get($args, 'input_name_args.last_name.default', ''),
264 'id' => '',
265 'class' => '',
266 'placeholder' => ArrayHelper::get($args, 'input_name_args.last_name.placeholder', __('Last Name', 'fluentform')),
267 'required' => false,
268 'maxlength' => '',
269 ],
270 'settings' => [
271 'container_class' => '',
272 'label' => ArrayHelper::get($args, 'input_name_args.last_name.label'),
273 'help_message' => '',
274 'error_message' => '',
275 'visible' => ArrayHelper::isTrue($args, 'input_name_args.last_name.visible'),
276 'validation_rules' => [
277 'required' => [
278 'value' => ArrayHelper::isTrue($args, 'input_name_args.last_name.required'),
279 'message' => __('This field is required', 'fluentform'),
280 ],
281 ],
282 'conditional_logics' => [],
283 ],
284 'editor_options' => [
285 'template' => 'inputText'
286 ],
287 ],
288 ],
289 'editor_options' => [
290 'title' => 'Name Fields',
291 'element' => 'name-fields',
292 'icon_class' => 'ff-edit-name',
293 'template' => 'nameFields'
294 ],
295 ],
296 'input_text' => [
297 'index' => $args['index'],
298 'element' => 'input_text',
299 'attributes' => [
300 'type' => 'text',
301 'name' => $args['name'],
302 'value' => $args['value'],
303 'class' => $args['class'],
304 'id' => $args['id'],
305 'placeholder' => $args['placeholder'],
306 'maxlength' => $args['maxlength'],
307 ],
308 'settings' => [
309 'container_class' => $args['container_class'],
310 'label' => $args['label'],
311 'label_placement' => $args['label_placement'],
312 'admin_field_label' => $args['admin_field_label'],
313 'help_message' => $args['help_message'],
314 'conditional_logics' => [],
315 'validation_rules' => [
316 'required' => [
317 'value' => $args['required'],
318 'message' => 'This field is required'
319 ]
320 ],
321 'is_unique' => 'no',
322 'unique_validation_message' => 'This value need to be unique.'
323
324 ],
325 'editor_options' => [
326 'title' => 'Simple Text',
327 'icon_class' => 'ff-edit-text',
328 'template' => 'inputText',
329 ],
330 'uniqElKey' => $args['uniqElKey'],
331 ],
332 'input_hidden' => [
333 'index' => $args['index'],
334 'element' => 'input_hidden',
335 'attributes' => [
336 'type' => 'hidden',
337 'name' => $args['name'],
338 'value' => $args['value'],
339 ],
340 'settings' => [
341 'admin_field_label' => $args['admin_field_label'],
342 ],
343 'editor_options' => [
344 'title' => __('Hidden Field', 'fluentform'),
345 'icon_class' => 'ff-edit-hidden-field',
346 'template' => 'inputHidden',
347 ],
348 'uniqElKey' => $args['uniqElKey'],
349 ],
350 'color_picker' => [
351 'index' => 15,
352 'element' => 'color_picker',
353 'attributes' => [
354 'type' => 'text',
355 'name' => $args['name'],
356 'value' => $args['value'],
357 'class' => $args['class'],
358 'id' => $args['id'],
359 'placeholder' => $args['placeholder'],
360 ],
361 'settings' => [
362 'container_class' => $args['container_class'],
363 'label' => $args['label'],
364 'label_placement' => $args['label_placement'],
365 'admin_field_label' => $args['admin_field_label'],
366 'help_message' => $args['help_message'],
367 'conditional_logics' => [],
368 'validation_rules' => [
369 'required' => [
370 'value' => $args['required'],
371 'message' => 'This field is required'
372 ]
373 ],
374 ],
375 'editor_options' => [
376 'title' => 'Color Picker',
377 'icon_class' => 'ff-edit-tint',
378 'template' => 'inputText'
379 ],
380 'uniqElKey' => $args['uniqElKey'],
381 ],
382 'input_url' => [
383 'index' => $args['index'],
384 'element' => 'input_url',
385 'attributes' => [
386 'type' => 'url',
387 'name' => $args['name'],
388 'value' => $args['value'],
389 'class' => $args['class'],
390 'id' => $args['id'],
391 'placeholder' => $args['placeholder'],
392 ],
393 'settings' => [
394 'container_class' => '',
395 'label' => $args['label'],
396 'label_placement' => $args['label_placement'],
397 'admin_field_label' => $args['admin_field_label'],
398 'help_message' => $args['help_message'],
399 'validation_rules' => [
400 'required' => [
401 'value' => $args['required'],
402 'message' => 'This field is required'
403 ],
404 'url' => [
405 'value' => true,
406 'message' => __('This field must contain a valid url', 'fluentform'),
407 ],
408 ],
409 'conditional_logics' => [],
410
411 ],
412 'editor_options' => [
413 'title' => __('Website URL', 'fluentform'),
414 'icon_class' => 'ff-edit-website-url',
415 'template' => 'inputText'
416 ],
417 'uniqElKey' => $args['uniqElKey'],
418 ],
419 'email' => [
420 'index' => $args['index'],
421 'element' => 'input_email',
422 'attributes' => [
423 'type' => 'email',
424 'name' => $args['name'],
425 'value' => $args['value'],
426 'class' => $args['class'],
427 'id' => '',
428 'placeholder' => $args['placeholder'],
429 ],
430 'settings' => [
431 'container_class' => '',
432 'label' => $args['label'],
433 'label_placement' => $args['label_placement'],
434 'admin_field_label' => $args['admin_field_label'],
435 'help_message' => $args['help_message'],
436 'conditional_logics' => [],
437 'validation_rules' => [
438 'required' => [
439 'value' => $args['required'],
440 'message' => 'This field is required',
441 ],
442 'email' => [
443 'value' => 1,
444 'message' => 'This field must contain a valid email'
445 ]
446 ],
447 'is_unique' => 'no',
448 'unique_validation_message' => 'This value need to be unique.'
449
450 ],
451 'editor_options' => [
452 'title' => 'Email Address',
453 'icon_class' => 'ff-edit-email',
454 'template' => 'inputText',
455 ],
456 'uniqElKey' => $args['uniqElKey'],
457 ],
458 'input_textarea' => [
459 'index' => $args['index'],
460 'element' => 'textarea',
461 'attributes' => [
462 'name' => $args['name'],
463 'class' => $args['class'],
464 'id' => '',
465 'value' => $args['value'],
466 'placeholder' => $args['placeholder'],
467 'rows' => $args['rows'],
468 'cols' => 2,
469 'maxlength' => $args['maxlength'],
470 ],
471 'settings' => [
472 'container_class' => '',
473 'label' => $args['label'],
474 'label_placement' => $args['label_placement'],
475 'admin_field_label' => $args['admin_field_label'],
476 'help_message' => $args['help_message'],
477 'conditional_logics' => [],
478 'validation_rules' => [
479 'required' => [
480 'value' => $args['required'],
481 'message' => 'This field is required'
482 ],
483 ],
484 ],
485 'editor_options' => [
486 'title' => 'Text Area',
487 'icon_class' => 'ff-edit-textarea',
488 'template' => 'inputTextarea',
489 ],
490 'uniqElKey' => $args['uniqElKey'],
491 ],
492 'select' => [
493 'index' => $args['index'],
494 'element' => 'select',
495 'attributes' => [
496 'name' => $args['name'],
497 'value' => $args['value'],
498 'class' => $args['class'],
499 'id' => '',
500 ],
501 'settings' => [
502 'container_class' => '',
503 'label_placement' => $args['label_placement'],
504 'admin_field_label' => $args['admin_field_label'],
505 'label' => $args['label'],
506 'help_message' => $args['help_message'],
507 'placeholder' => $args['placeholder'],
508 'advanced_options' => $args['options'],
509 'calc_value_status' => $args['calc_value_status'],
510 'enable_select_2' => $args['enable_select_2'],
511 'enable_image_input' => false,
512 'validation_rules' => [
513 'required' => [
514 'value' => $args['required'],
515 'message' => 'This field is required'
516 ]
517 ],
518 'randomize_options' => 'no',
519 'conditional_logics' => [],
520 ],
521 'editor_options' => [
522 'title' => 'Dropdown',
523 'icon_class' => 'ff-edit-dropdown',
524 'element' => 'select',
525 'template' => 'select',
526 ],
527 'uniqElKey' => $args['uniqElKey'],
528 ],
529 'multi_select' => [
530 'index' => $args['index'],
531 'element' => 'select',
532 'attributes' => [
533 'name' => $args['name'],
534 'value' => $args['value'],
535 'id' => $args['id'],
536 'class' => $args['class'],
537 'placeholder' => $args['placeholder'],
538 'multiple' => true,
539 ],
540 'settings' => [
541 'dynamic_default_value' => $args['dynamic_default_value'],
542 'help_message' => $args['help_message'],
543 'container_class' => $args['container_class'],
544 'label' => $args['label'],
545 'admin_field_label' => $args['admin_field_label'],
546 'label_placement' => $args['label_placement'],
547 'placeholder' => $args['placeholder'],
548 'max_selection' => '',
549 'advanced_options' => $args['options'],
550 'calc_value_status' => $args['calc_value_status'],
551 'enable_image_input' => false,
552 'validation_rules' => [
553 'required' => [
554 'value' => $args['required'],
555 'message' => __('This field is required', 'fluentform'),
556 ],
557 ],
558 'conditional_logics' => [],
559 ],
560 'editor_options' => [
561 'title' => __('Multiple Choice', 'fluentform'),
562 'icon_class' => 'ff-edit-multiple-choice',
563 'element' => 'select',
564 'template' => 'select'
565 ]
566 ],
567 'input_checkbox' => [
568 'index' => $args['index'],
569 'element' => 'input_checkbox',
570 'attributes' => [
571 'name' => $args['name'],
572 'value' => $args['value'],
573 'class' => $args['class'],
574 'id' => '',
575 'type' => 'checkbox'
576 ],
577 'settings' => [
578 'container_class' => '',
579 'label_placement' => $args['label_placement'],
580 'label' => $args['label'],
581 'help_message' => $args['help_message'],
582 'advanced_options' => $args['options'],
583 'calc_value_status' => $args['calc_value_status'],
584 'enable_image_input' => $args['enable_image_input'],
585 'randomize_options' => 'no',
586 'validation_rules' => [
587 'required' => [
588 'value' => $args['required'],
589 'message' => __('This field is required', 'fluentform'),
590 ],
591 ],
592 'conditional_logics' => [],
593 'layout_class' => $args['layout_class']
594 ],
595 'editor_options' => [
596 'title' => __('Checkbox', 'fluentform'),
597 'icon_class' => 'ff-edit-checkbox-1',
598 'template' => 'inputCheckable'
599 ],
600 'uniqElKey' => $args['uniqElKey'],
601 ],
602 'input_radio' => [
603 'index' => $args['index'],
604 'element' => 'input_radio',
605 'attributes' => [
606 'name' => $args['name'],
607 'value' => $args['value'],
608 'class' => $args['class'],
609 'type' => 'radio',
610 ],
611 'settings' => [
612 'dynamic_default_value' => $args['dynamic_default_value'],
613 'container_class' => '',
614 'admin_field_label' => $args['admin_field_label'],
615 'label_placement' => $args['label_placement'],
616 'display_type' => '',
617 'randomize_options' => 'no',
618 'label' => $args['label'],
619 'help_message' => $args['help_message'],
620 'advanced_options' => $args['options'],
621 'layout_class' => $args['layout_class'],
622 'calc_value_status' => $args['calc_value_status'],
623 'enable_image_input' => $args['enable_image_input'],
624 'validation_rules' => [
625 'required' => [
626 'value' => $args['required'],
627 'message' => __('This field is required', 'fluentform'),
628 ],
629 ],
630 'conditional_logics' => [],
631 ],
632 'editor_options' => [
633 'title' => __('Radio Field', 'fluentform'),
634 'icon_class' => 'ff-edit-radio',
635 'element' => 'input-radio',
636 'template' => 'inputCheckable'
637 ],
638 'uniqElKey' => $args['uniqElKey'],
639 ],
640 'input_date' => [
641 'element' => 'input_date',
642 'index' => $args['index'],
643 'attributes' => [
644 'name' => $args['name'],
645 'value' => '',
646 'type' => 'text',
647 'class' => $args['class'],
648 'placeholder' => $args['placeholder'],
649 'id' => '',
650 ],
651 'settings' => [
652 'container_class' => '',
653 'label_placement' => $args['label_placement'],
654 'admin_field_label' => $args['admin_field_label'],
655 'label' => $args['label'],
656 'help_message' => $args['help_message'],
657 'date_format' => $args['format'],
658 'is_time_enabled' => $args['is_time_enabled'],
659 'validation_rules' => [
660 'required' => [
661 'value' => $args['required'],
662 'message' => 'This field is required'
663 ]
664 ],
665 ],
666 'editor_options' => [
667 'title' => 'Time & Date',
668 'icon_class' => 'ff-edit-date',
669 'template' => 'inputText',
670 ],
671 'uniqElKey' => $args['uniqElKey'],
672 ],
673 'input_mask' => [
674 'index' => $args['index'],
675 'element' => 'input_text',
676 'attributes' => [
677 'type' => 'text',
678 'name' => $args['name'],
679 'value' => $args['value'],
680 'class' => $args['class'],
681 'id' => $args['id'],
682 'placeholder' => $args['placeholder'],
683 'data-mask' => $args['mask'],
684 ],
685 'settings' => [
686 'container_class' => '',
687 'label' => $args['label'],
688 'label_placement' => $args['label_placement'],
689 'admin_field_label' => $args['admin_field_label'],
690 'help_message' => $args['help_message'],
691 'prefix_label' => '',
692 'suffix_label' => '',
693 'temp_mask' => $args['temp_mask'],
694 'data-mask-reverse' => 'no',
695 'data-clear-if-not-match' => 'no',
696 'validation_rules' => [
697 'required' => [
698 'value' => $args['required'],
699 'message' => __('This field is required', 'fluentform'),
700 ]
701 ],
702 'conditional_logics' => [],
703 ],
704 'editor_options' => [
705 'title' => __('Mask Input', 'fluentform'),
706 'icon_class' => 'ff-edit-mask',
707 'template' => 'inputText'
708 ],
709 'uniqElKey' => $args['uniqElKey'],
710 ],
711 'input_password' => [
712 'index' => $args['index'],
713 'element' => 'input_password',
714 'attributes' => [
715 'type' => 'password',
716 'name' => $args['name'],
717 'value' => $args['value'],
718 'class' => $args['class'],
719 'id' => $args['id'],
720 'placeholder' => $args['placeholder'],
721 ],
722 'settings' => [
723 'container_class' => $args['container_class'],
724 'label' => $args['label'],
725 'label_placement' => $args['label_placement'],
726 'admin_field_label' => $args['admin_field_label'],
727 'help_message' => $args['help_message'],
728 'conditional_logics' => [],
729 'validation_rules' => [
730 'required' => [
731 'value' => $args['required'],
732 'message' => 'This field is required'
733 ]
734 ],
735 ],
736 'editor_options' => [
737 'title' => __('Password Field', 'fluentform'),
738 'icon_class' => 'ff-edit-password',
739 'template' => 'inputText',
740 ],
741 'uniqElKey' => $args['uniqElKey'],
742 ],
743 'input_number' => [
744 'index' => $args['index'],
745 'element' => 'input_number',
746 'attributes' => [
747 'type' => 'number',
748 'name' => $args['name'],
749 'value' => $args['value'],
750 'id' => '',
751 'class' => $args['class'],
752 'placeholder' => $args['placeholder']
753 ],
754 'settings' => [
755 'container_class' => '',
756 'label' => $args['label'],
757 'admin_field_label' => $args['admin_field_label'],
758 'label_placement' => $args['label_placement'],
759 'help_message' => $args['help_message'],
760 'number_step' => $args['step'],
761 'prefix_label' => $args['prefix'],
762 'suffix_label' => $args['suffix'],
763 'numeric_formatter' => '',
764 'validation_rules' => [
765 'required' => [
766 'value' => $args['required'],
767 'message' => __('This field is required', 'fluentform'),
768 ],
769 'numeric' => [
770 'value' => true,
771 'message' => __('This field must contain numeric value', 'fluentform'),
772 ],
773 'min' => [
774 'value' => $args['min'],
775 'message' => 'Minimum value is ' . $args['min'],
776 ],
777 'max' => [
778 'value' => $args['max'],
779 'message' => 'Maximum value is ' . $args['max'],
780 ],
781 ],
782 'conditional_logics' => [],
783 'calculation_settings' => [
784 'status' => $args['enable_calculation'],
785 'formula' => $args['calculation_formula']
786 ],
787 ],
788 'editor_options' => [
789 'title' => __('Numeric Field', 'fluentform'),
790 'icon_class' => 'ff-edit-numeric',
791 'template' => 'inputText'
792 ],
793 'uniqElKey' => $args['uniqElKey'],
794 ],
795 'phone' => [
796 'index' => $args['index'],
797 'element' => 'phone',
798 'attributes' => [
799 'name' => $args['name'],
800 'value' => $args['value'],
801 'id' => $args['id'],
802 'class' => $args['class'],
803 'placeholder' => $args['placeholder'],
804 'type' => 'tel'
805 ],
806 'settings' => [
807 'container_class' => '',
808 'placeholder' => '',
809 // 'int_tel_number' => 'no',
810 'auto_select_country' => 'no',
811 'label' => $args['label'],
812 'label_placement' => $args['label_placement'],
813 'help_message' => $args['help_message'],
814 'admin_field_label' => $args['admin_field_label'],
815 'phone_country_list' => array(
816 'active_list' => 'all',
817 'visible_list' => array(),
818 'hidden_list' => array(),
819 ),
820 'default_country' => '',
821 'validation_rules' => [
822 'required' => [
823 'value' => $args['required'],
824 'message' => __('This field is required', 'fluentform'),
825 ],
826 'valid_phone_number' => [
827 'value' => ArrayHelper::isTrue($args, 'valid_phone_number'),
828 'message' => __('Phone number is not valid', 'fluentform')
829 ]
830 ],
831 'conditional_logics' => []
832 ],
833 'editor_options' => [
834 'title' => 'Phone Field',
835 'icon_class' => 'el-icon-phone-outline',
836 'template' => 'inputText'
837 ],
838 'uniqElKey' => $args['uniqElKey'],
839
840 ],
841 'input_file' => [
842 'index' => $args['index'],
843 'element' => 'input_file',
844 'attributes' => [
845 'type' => 'file',
846 'name' => $args['name'],
847 'value' => '',
848 'id' => $args['id'],
849 'class' => $args['class'],
850 ],
851 'settings' => [
852 'container_class' => '',
853 'label' => $args['label'],
854 'admin_field_label' => $args['admin_field_label'],
855 'label_placement' => $args['label_placement'],
856 'btn_text' => $args['upload_btn_text'],
857 'help_message' => $args['help_message'],
858 'validation_rules' => [
859 'required' => [
860 'value' => $args['required'],
861 'message' => __('This field is required', 'fluentform'),
862 ],
863 'max_file_size' => [
864 'value' => $args['max_file_size'],
865 '_valueFrom' => $args['max_size_unit'],
866 'message' => __('Maximum file size limit reached', 'fluentform')
867 ],
868 'max_file_count' => [
869 'value' => $args['max_file_count'],
870 'message' => __('Maximum upload limit reached', 'fluentform')
871 ],
872 'allowed_file_types' => [
873 'value' => $args['allowed_file_types'],
874 'message' => __('Invalid file type', 'fluentform')
875 ]
876 ],
877 'conditional_logics' => [],
878 ],
879 'editor_options' => [
880 'title' => __('File Upload', 'fluentform'),
881 'icon_class' => 'ff-edit-files',
882 'template' => 'inputFile'
883 ],
884 'uniqElKey' => $args['uniqElKey'],
885 ],
886 'custom_html' => [
887 'index' => $args['index'],
888 'element' => 'custom_html',
889 'attributes' => [],
890 'settings' => [
891 'html_codes' => $args['html_codes'],
892 'conditional_logics' => [],
893 'container_class' => ArrayHelper::get($args, 'container_class', '')
894 ],
895 'editor_options' => [
896 'title' => __('Custom HTML', 'fluentform'),
897 'icon_class' => 'ff-edit-html',
898 'template' => 'customHTML',
899 ],
900 'uniqElKey' => $args['uniqElKey'],
901 ],
902 'section_break' => [
903 'index' => $args['index'],
904 'element' => 'section_break',
905 'attributes' => [
906 'id' => $args['id'],
907 'class' => $args['class'],
908 ],
909 'settings' => [
910 'label' => $args['label'],
911 'description' => $args['section_break_desc'],
912 'align' => 'left',
913 'conditional_logics' => [],
914 ],
915 'editor_options' => [
916 'title' => __('Section Break', 'fluentform'),
917 'icon_class' => 'ff-edit-section-break',
918 'template' => 'sectionBreak',
919 ],
920 'uniqElKey' => $args['uniqElKey'],
921 ],
922 'rangeslider' => [
923 'index' => $args['index'],
924 'element' => 'rangeslider',
925 'attributes' => [
926 'type' => 'range',
927 'name' => $args['name'],
928 'value' => $args['value'],
929 'id' => $args['id'],
930 'class' => $args['class'],
931 'min' => $args['min'],
932 'max' => $args['max'],
933 ],
934 'settings' => [
935 'number_step' => $args['step'],
936 'label' => $args['label'],
937 'help_message' => $args['help_message'],
938 'label_placement' => $args['label_placement'],
939 'admin_field_label' => $args['admin_field_label'],
940 'container_class' => '',
941 'conditional_logics' => [],
942 'validation_rules' => [
943 'required' => [
944 'value' => $args['required'],
945 'message' => 'This field is required'
946 ]
947 ],
948 ],
949 'editor_options' => [
950 'title' => 'Range Slider',
951 'icon_class' => 'dashicons dashicons-leftright',
952 'template' => 'inputSlider'
953 ],
954 'uniqElKey' => $args['uniqElKey'],
955 ],
956 'ratings' => [
957 'index' => $args['index'],
958 'element' => 'ratings',
959 'attributes' => [
960 'class' => $args['class'],
961 'value' => 0,
962 'name' => $args['name'],
963 ],
964 'settings' => [
965 'label' => $args['label'],
966 'show_text' => 'no',
967 'help_message' => $args['help_message'],
968 'label_placement' => $args['label_placement'],
969 'admin_field_label' => $args['admin_field_label'],
970 'container_class' => '',
971 'conditional_logics' => [],
972 'validation_rules' => [
973 'required' => [
974 'value' => $args['required'],
975 'message' => __('This field is required', 'fluentform'),
976 ],
977 ],
978 ],
979 'options' => $args['options'],
980 'editor_options' => [
981 'title' => __('Ratings', 'fluentform'),
982 'icon_class' => 'ff-edit-rating',
983 'template' => 'ratings',
984 ],
985 'uniqElKey' => $args['uniqElKey'],
986 ],
987 'gdpr_agreement' => [
988 'index' => $args['index'],
989 'element' => 'gdpr_agreement',
990 'attributes' => [
991 'type' => 'checkbox',
992 'name' => $args['name'],
993 'value' => false,
994 'class' => $args['class'] . ' ff_gdpr_field',
995 ],
996 'settings' => [
997 'label' => $args['label'],
998 'tnc_html' => $args['tnc_html'],
999 'admin_field_label' => __('GDPR Agreement', 'fluentform'),
1000 'has_checkbox' => true,
1001 'container_class' => '',
1002 'validation_rules' => [
1003 'required' => [
1004 'value' => true,
1005 'message' => __('This field is required', 'fluentform'),
1006 ],
1007 ],
1008 'required_field_message' => '',
1009 'conditional_logics' => [],
1010 ],
1011 'editor_options' => [
1012 'title' => __('GDPR Agreement', 'fluentform'),
1013 'icon_class' => 'ff-edit-gdpr',
1014 'template' => 'termsCheckbox'
1015 ],
1016 'uniqElKey' => $args['uniqElKey'],
1017 ],
1018 'form_step' => [
1019 'index' => $args['index'],
1020 'element' => 'form_step',
1021 'attributes' => [
1022 'id' => '',
1023 'class' => $args['class'],
1024 ],
1025 'settings' => [
1026 'prev_btn' => [
1027 'type' => ArrayHelper::get($args, 'prev_btn.type', 'default'),
1028 'text' => ArrayHelper::get($args, 'prev_btn.text', 'Previous'),
1029 'img_url' => ArrayHelper::get($args, 'prev_btn.img_url', '')
1030 ],
1031 'next_btn' => [
1032 'type' => ArrayHelper::get($args, 'next_btn.type', 'default'),
1033 'text' => ArrayHelper::get($args, 'next_btn.text', 'Next'),
1034 'img_url' => ArrayHelper::get($args, 'next_btn.img_url', '')
1035 ]
1036 ],
1037 'editor_options' => [
1038 'title' => 'Form Step',
1039 'icon_class' => 'ff-edit-step',
1040 'template' => 'formStep'
1041 ],
1042 'uniqElKey' => $args['uniqElKey'],
1043 ],
1044 'select_country' => [
1045 'index' => $args['index'],
1046 'element' => 'select_country',
1047 'attributes' => [
1048 'name' => $args['name'],
1049 'value' => $args['value'],
1050 'id' => $args['id'],
1051 'class' => $args['class'],
1052 'placeholder' => $args['placeholder'],
1053 ],
1054 'settings' => [
1055 'container_class' => $args['container_class'],
1056 'label' => $args['label'],
1057 'admin_field_label' => '',
1058 'label_placement' => $args['label_placement'],
1059 'help_message' => $args['help_message'],
1060 'enable_select_2' => 'no',
1061 'validation_rules' => [
1062 'required' => [
1063 'value' => $args['required'],
1064 'message' => __('This field is required', 'fluentform'),
1065 ],
1066 ],
1067 'country_list' => [
1068 'active_list' => 'all',
1069 'visible_list' => [],
1070 'hidden_list' => [],
1071 ],
1072 'conditional_logics' => [],
1073 ],
1074 'options' => [
1075 'US' => 'United States of America',
1076 ],
1077 'editor_options' => [
1078 'title' => __('Country List', 'fluentform'),
1079 'element' => 'country-list',
1080 'icon_class' => 'ff-edit-country',
1081 'template' => 'selectCountry'
1082 ],
1083 'uniqElKey' => $args['uniqElKey'],
1084 ],
1085 'repeater_field' => [
1086 'index' => $args['index'],
1087 'element' => 'repeater_field',
1088 'attributes' => array(
1089 'name' => $args['name'],
1090 'data-type' => 'repeater_field'
1091 ),
1092 'fields' => $args['fields'],
1093 'settings' => array(
1094 'label' => $args['label'],
1095 'admin_field_label' => '',
1096 'container_class' => '',
1097 'label_placement' => '',
1098 'validation_rules' => array(),
1099 'conditional_logics' => array(),
1100 'max_repeat_field' => ''
1101 ),
1102 'editor_options' => array(
1103 'title' => 'Repeat Field',
1104 'icon_class' => 'ff-edit-repeat',
1105 'template' => 'fieldsRepeatSettings'
1106 ),
1107 'uniqElKey' => $args['uniqElKey'],
1108 ],
1109 'reCaptcha' => [
1110 'index' => $args['index'],
1111 'element' => 'recaptcha',
1112 'attributes' => ['name' => 'recaptcha'],
1113 'settings' => [
1114 'label' => $args['label'],
1115 'label_placement' => $args['label_placement'],
1116 'validation_rules' => [],
1117 ],
1118 'editor_options' => [
1119 'title' => __('reCaptcha', 'fluentform'),
1120 'icon_class' => 'ff-edit-recaptha',
1121 'why_disabled_modal' => 'recaptcha',
1122 'template' => 'recaptcha',
1123 ],
1124 'uniqElKey' => $args['uniqElKey'],
1125 ],
1126 'terms_and_condition' => [
1127 'index' => $args['index'],
1128 'element' => 'terms_and_condition',
1129 'attributes' => [
1130 'type' => 'checkbox',
1131 'name' => $args['name'],
1132 'value' => false,
1133 'class' => $args['class'],
1134 ],
1135 'settings' => [
1136 'tnc_html' => $args['tnc_html'],
1137 'has_checkbox' => true,
1138 'admin_field_label' => __('Terms and Conditions', 'fluentform'),
1139 'container_class' => '',
1140 'validation_rules' => [
1141 'required' => [
1142 'value' => $args['required'],
1143 'message' => __('This field is required', 'fluentform'),
1144 ],
1145 ],
1146 'conditional_logics' => [],
1147 ],
1148 'editor_options' => [
1149 'title' => __('Terms & Conditions', 'fluentform'),
1150 'icon_class' => 'ff-edit-terms-condition',
1151 'template' => 'termsCheckbox'
1152 ],
1153 ],
1154 'address' => [
1155 'index' => $args['index'],
1156 'element' => 'address',
1157 'attributes' => [
1158 'id' => '',
1159 'class' => $args['class'],
1160 'name' => $args['name'],
1161 'data-type' => 'address-element'
1162 ],
1163 'settings' => [
1164 'label' => $args['label'],
1165 'admin_field_label' => 'Address',
1166 'conditional_logics' => [],
1167 ],
1168 'fields' => [
1169 'address_line_1' => [
1170 'element' => 'input_text',
1171 'attributes' => [
1172 'type' => 'text',
1173 'name' => ArrayHelper::get($args, 'address_args.address_line_1.name'),
1174 'value' => ArrayHelper::get($args, 'address_args.address_line_1.default', ''),
1175 'id' => '',
1176 'class' => '',
1177 'placeholder' => ArrayHelper::get($args, 'address_args.address_line_1.placeholder', __('Address Line 1', 'fluentform')),
1178 ],
1179 'settings' => [
1180 'container_class' => '',
1181 'label' => ArrayHelper::get($args, 'address_args.address_line_1.label'),
1182 'admin_field_label' => '',
1183 'help_message' => '',
1184 'visible' => ArrayHelper::get($args, 'address_args.address_line_1.visible'),
1185 'validation_rules' => [
1186 'required' => [
1187 'value' => ArrayHelper::isTrue($args, 'address_args.address_line_1.required'),
1188 'message' => __('This field is required', 'fluentform'),
1189 ],
1190 ],
1191 'conditional_logics' => [],
1192 ],
1193 'editor_options' => [
1194 'template' => 'inputText'
1195 ],
1196 ],
1197 'address_line_2' => [
1198 'element' => 'input_text',
1199 'attributes' => [
1200 'type' => 'text',
1201 'name' => ArrayHelper::get($args, 'address_args.address_line_2.name'),
1202 'value' => ArrayHelper::get($args, 'address_args.address_line_2.default', ''),
1203 'id' => '',
1204 'class' => '',
1205 'placeholder' => ArrayHelper::get($args, 'address_args.address_line_2.placeholder', __('Address Line 2', 'fluentform')),
1206 ],
1207 'settings' => [
1208 'container_class' => '',
1209 'label' => ArrayHelper::get($args, 'address_args.address_line_2.label'),
1210 'admin_field_label' => '',
1211 'help_message' => '',
1212 'visible' => ArrayHelper::get($args, 'address_args.address_line_2.visible'),
1213 'validation_rules' => [
1214 'required' => [
1215 'value' => ArrayHelper::isTrue($args, 'address_args.address_line_2.required'),
1216 'message' => __('This field is required', 'fluentform'),
1217 ],
1218 ],
1219 'conditional_logics' => [],
1220 ],
1221 'editor_options' => [
1222 'template' => 'inputText'
1223 ],
1224 ],
1225 'city' => [
1226 'element' => 'input_text',
1227 'attributes' => [
1228 'type' => 'text',
1229 'name' => ArrayHelper::get($args, 'address_args.city.name'),
1230 'value' => ArrayHelper::get($args, 'address_args.city.default', ''),
1231 'id' => '',
1232 'class' => '',
1233 'placeholder' => ArrayHelper::get($args, 'address_args.city.placeholder', __('City', 'fluentform')),
1234 ],
1235 'settings' => [
1236 'container_class' => '',
1237 'label' => ArrayHelper::get($args, 'address_args.city.label'),
1238 'admin_field_label' => '',
1239 'help_message' => '',
1240 'error_message' => '',
1241 'visible' => ArrayHelper::get($args, 'address_args.city.visible'),
1242 'validation_rules' => [
1243 'required' => [
1244 'value' => ArrayHelper::isTrue($args, 'address_args.city.required'),
1245 'message' => __('This field is required', 'fluentform'),
1246 ],
1247 ],
1248 'conditional_logics' => [],
1249 ],
1250 'editor_options' => [
1251 'template' => 'inputText'
1252 ],
1253 ],
1254 'state' => [
1255 'element' => 'input_text',
1256 'attributes' => [
1257 'type' => 'text',
1258 'name' => ArrayHelper::get($args, 'address_args.state.name'),
1259 'value' => ArrayHelper::get($args, 'address_args.state.default', ''),
1260 'id' => '',
1261 'class' => '',
1262 'placeholder' => ArrayHelper::get($args, 'address_args.state.placeholder', __('State', 'fluentform')),
1263 ],
1264 'settings' => [
1265 'container_class' => '',
1266 'label' => ArrayHelper::get($args, 'address_args.state.label'),
1267 'admin_field_label' => '',
1268 'help_message' => '',
1269 'error_message' => '',
1270 'visible' => ArrayHelper::get($args, 'address_args.state.visible'),
1271 'validation_rules' => [
1272 'required' => [
1273 'value' => ArrayHelper::isTrue($args, 'address_args.state.required'),
1274 'message' => __('This field is required', 'fluentform'),
1275 ],
1276 ],
1277 'conditional_logics' => [],
1278 ],
1279 'editor_options' => [
1280 'template' => 'inputText'
1281 ],
1282 ],
1283 'zip' => [
1284 'element' => 'input_text',
1285 'attributes' => [
1286 'type' => 'text',
1287 'name' => ArrayHelper::get($args, 'address_args.zip.name'),
1288 'value' => ArrayHelper::get($args, 'address_args.zip.default', ''),
1289 'id' => '',
1290 'class' => '',
1291 'placeholder' => ArrayHelper::get($args, 'address_args.zip.placeholder', __('Zip', 'fluentform')),
1292 'required' => false,
1293 ],
1294 'settings' => [
1295 'container_class' => '',
1296 'label' => ArrayHelper::get($args, 'address_args.zip.label'),
1297 'admin_field_label' => '',
1298 'help_message' => '',
1299 'error_message' => '',
1300 'visible' => ArrayHelper::get($args, 'address_args.zip.visible'),
1301 'validation_rules' => [
1302 'required' => [
1303 'value' => ArrayHelper::isTrue($args, 'address_args.zip.required'),
1304 'message' => __('This field is required', 'fluentform'),
1305 ],
1306 ],
1307 'conditional_logics' => [],
1308 ],
1309 'editor_options' => [
1310 'template' => 'inputText'
1311 ],
1312 ],
1313 'country' => [
1314 'element' => 'select_country',
1315 'attributes' => [
1316 'name' => ArrayHelper::get($args, 'address_args.country.name'),
1317 'value' => ArrayHelper::get($args, 'address_args.country.default', ''),
1318 'id' => '',
1319 'class' => '',
1320 'placeholder' => ArrayHelper::get($args, 'address_args.country.placeholder', __('Country', 'fluentform')),
1321 'required' => false,
1322 ],
1323 'settings' => [
1324 'container_class' => '',
1325 'label' => ArrayHelper::get($args, 'address_args.country.label'),
1326 'admin_field_label' => '',
1327 'help_message' => '',
1328 'error_message' => '',
1329 'visible' => ArrayHelper::get($args, 'address_args.country.visible'),
1330 'validation_rules' => [
1331 'required' => [
1332 'value' => ArrayHelper::isTrue($args, 'address_args.country.required'),
1333 'message' => __('This field is required', 'fluentform'),
1334 ],
1335 ],
1336 'country_list' => [
1337 'active_list' => 'all',
1338 'visible_list' => [],
1339 'hidden_list' => [],
1340 ],
1341 'conditional_logics' => [],
1342 ],
1343 'options' => [
1344 'US' => 'US of America',
1345 'UK' => 'United Kingdom'
1346 ],
1347 'editor_options' => [
1348 'title' => 'Country List',
1349 'element' => 'country-list',
1350 'icon_class' => 'icon-text-width',
1351 'template' => 'selectCountry'
1352 ],
1353 ],
1354 ],
1355 'editor_options' => [
1356 'title' => __('Address Fields', 'fluentform'),
1357 'element' => 'address-fields',
1358 'icon_class' => 'ff-edit-address',
1359 'template' => 'addressFields'
1360 ],
1361 ],
1362 'rich_text_input' => [
1363 'index' => $args['index'],
1364 'element' => 'rich_text_input',
1365 'attributes' => [
1366 'name' => $args['name'],
1367 'value' => $args['value'],
1368 'id' => '',
1369 'class' => $args['class'],
1370 'placeholder' => $args['placeholder'],
1371 'rows' => ArrayHelper::get($args, 'rows', 3),
1372 'cols' => ArrayHelper::get($args, 'cols', 2),
1373 'maxlength' => ArrayHelper::get($args, 'maxlength', ''),
1374 ],
1375 'settings' => [
1376 'container_class' => $args['container_class'],
1377 'placeholder' => $args['placeholder'],
1378 'label_placement' => $args['label_placement'],
1379 'admin_field_label' => $args['admin_field_label'],
1380 'label' => $args['label'],
1381 'help_message' => $args['help_message'],
1382 'validation_rules' => [
1383 'required' => [
1384 'value' => ArrayHelper::isTrue($args,'required'),
1385 'message' => __('This field is required', 'fluentform'),
1386 ]
1387 ],
1388 'conditional_logics' => []
1389 ],
1390 'editor_options' => [
1391 'title' => __('Rich Text Input', 'fluentform'),
1392 'icon_class' => 'ff-edit-textarea',
1393 'template' => 'inputTextarea'
1394 ],
1395 ],
1396 ];
1397 if (!defined('FLUENTFORMPRO')) {
1398 $proElements = ['repeater_field', 'rangeslider', 'color_picker', 'form_step', 'phone', 'input_file', 'rich_text_input'];
1399 foreach ($proElements as $el) {
1400 unset($defaultElements[$el]);
1401 }
1402 }
1403 return $defaultElements;
1404 }
1405
1406 public function getSubmitBttn($args)
1407 {
1408 return [
1409 'uniqElKey' => $args['uniqElKey'],
1410 'element' => 'button',
1411 'attributes' => [
1412 'type' => 'submit',
1413 'class' => $args['class']
1414 ],
1415 'settings' => [
1416 'container_class' => '',
1417 'align' => 'left',
1418 'button_style' => 'default',
1419 'button_size' => 'md',
1420 'color' => '#ffffff',
1421 'background_color' => '#1a7efb',
1422 'button_ui' => [
1423 'type' => ArrayHelper::get($args, 'type', 'default'),
1424 'text' => $args['label'],
1425 'img_url' => ArrayHelper::get($args, 'img_url', '')
1426 ],
1427 'normal_styles' => [],
1428 'hover_styles' => [],
1429 'current_state' => "normal_styles"
1430 ],
1431 'editor_options' => [
1432 'title' => 'Submit Button',
1433 ],
1434
1435 ];
1436
1437 }
1438
1439 abstract protected function getFormId($form);
1440
1441 /**
1442 * @param $metas
1443 * @param $formId
1444 */
1445 protected function updateMetas($metas, $formId)
1446 {
1447 if ($metas) {
1448 //when multiple notifications
1449 if ($notifications = ArrayHelper::get($metas, 'notifications')) {
1450 (new \FluentForm\App\Modules\Form\Form(wpFluentForm()))->deleteMeta($formId, 'notifications');
1451 foreach ($notifications as $notify) {
1452 $settings = [
1453 'form_id' => $formId,
1454 'meta_key' => 'notifications',
1455 'value' => json_encode($notify)
1456 ];
1457
1458 wpFluent()->table('fluentform_form_meta')->insert($settings);
1459 }
1460 unset($metas['notifications']);
1461 }
1462 //when multiple confirmations
1463 if ($confirmations = ArrayHelper::get($metas, 'confirmations')) {
1464 (new \FluentForm\App\Modules\Form\Form(wpFluentForm()))->deleteMeta($formId, 'confirmations');
1465 foreach ($confirmations as $confirmation) {
1466 $settings = [
1467 'form_id' => $formId,
1468 'meta_key' => 'confirmations',
1469 'value' => json_encode($confirmation)
1470 ];
1471
1472 wpFluent()->table('fluentform_form_meta')->insert($settings);
1473 }
1474 unset($metas['confirmations']);
1475 }
1476
1477 //when have webhooks
1478 if ($webhooks = ArrayHelper::get($metas, 'webhooks')) {
1479 \FluentForm\App\Models\FormMeta::remove($formId, 'fluentform_webhook_feed');
1480 foreach ($webhooks as $webhook) {
1481 \FluentForm\App\Models\FormMeta::create([
1482 'form_id' => $formId,
1483 'meta_key' => 'fluentform_webhook_feed',
1484 'value' => json_encode($webhook)
1485 ]);
1486 }
1487 unset($metas['webhooks']);
1488 }
1489 foreach ($metas as $metaKey => $metaData) {
1490 (new \FluentForm\App\Modules\Form\Form(wpFluentForm()))->updateMeta($formId, $metaKey, $metaData);
1491 }
1492 }
1493 }
1494
1495 /**
1496 * @param array $form
1497 * @param array $insertedForms
1498 * @param $formItem
1499 * @param array $refs
1500 * @return array
1501 */
1502 public function insertForm($form, $insertedForms, $formItem)
1503 {
1504 $formId = wpFluent()->table('fluentform_forms')->insertGetId($form);
1505 $insertedForms[$formId] = [
1506 'title' => $form['title'],
1507 'edit_url' => admin_url('admin.php?page=fluent_forms&route=editor&form_id=' . $formId)
1508 ];
1509
1510 do_action_deprecated(
1511 'fluentform_form_imported',
1512 [
1513 $formId
1514 ],
1515 FLUENTFORM_FRAMEWORK_UPGRADE,
1516 'fluentform/form_imported',
1517 'Use fluentform/form_imported instead of fluentform_form_imported.'
1518 );
1519 do_action('fluentform/form_imported', $formId);
1520
1521 return array($insertedForms, $formId);
1522 }
1523
1524 protected function getFileTypes($field, $arg)
1525 {
1526 // All Supported File Types in Fluent Forms
1527 $allFileTypes = [
1528 "jpg|jpeg|gif|png|bmp",
1529 "mp3|wav|ogg|oga|wma|mka|m4a|ra|mid|midi|mpga",
1530 "avi|divx|flv|mov|ogv|mkv|mp4|m4v|divx|mpg|mpeg|mpe|video/quicktime|qt",
1531 "pdf",
1532 "doc|ppt|pps|xls|mdb|docx|xlsx|pptx|odt|odp|ods|odg|odc|odb|odf|rtf|txt",
1533 "zip|gz|gzip|rar|7z",
1534 "exe",
1535 "csv"
1536 ];
1537
1538 $formattedTypes = explode(', ', ArrayHelper::get($field, $arg, ''));
1539 $fileTypeOptions = [];
1540 foreach ($formattedTypes as $format) {
1541 // $allFileTypes is lowercase; the source plugin's list is user-entered.
1542 $format = strtolower($format);
1543 foreach ($allFileTypes as $fileTypes) {
1544 if (!empty($format) && (strpos($fileTypes, $format) !== false)) {
1545 array_push($fileTypeOptions, $fileTypes);
1546 }
1547
1548 }
1549 }
1550
1551 return array_unique($fileTypeOptions);
1552 }
1553
1554 public function isAlreadyImported($formItem)
1555 {
1556 $importedFormMap = get_option('__ff_imorted_forms_map');
1557 $deletedForms = [];
1558 if (is_array($importedFormMap)) {
1559 foreach ($importedFormMap as $fluentFormId => $value) {
1560 if ($this->getFormId($formItem) == ArrayHelper::get($value,
1561 'imported_form_id') && $this->key == ArrayHelper::get($value, 'form_type')) {
1562
1563 if (wpFluent()->table('fluentform_forms')->find($fluentFormId)) {
1564 return $fluentFormId;
1565 }
1566 unset($importedFormMap[$fluentFormId]);
1567
1568 }
1569 }
1570 update_option('__ff_imorted_forms_map', $importedFormMap);
1571 return false;
1572 }
1573
1574 return false;
1575
1576 }
1577
1578 public function updateForm($formId, $formFields, $insertedForms)
1579 {
1580 $data = [
1581 'updated_at' => current_time('mysql'),
1582 'form_fields' => $formFields,
1583 ];
1584 wpFluent()->table('fluentform_forms')->where('id', $formId)->update($data);
1585
1586 $form = wpFluent()->table('fluentform_forms')->find($formId);
1587
1588 $emailInputs = FormFieldsParser::getElement($form, ['input_email'], ['element', 'attributes']);
1589 if ($emailInputs) {
1590 $emailInput = array_shift($emailInputs);
1591 $emailInputName = ArrayHelper::get($emailInput, 'attributes.name');
1592 (new \FluentForm\App\Modules\Form\Form(wpFluentForm()))->updateMeta($formId, '_primary_email_field',
1593 $emailInputName);
1594 } else {
1595 (new \FluentForm\App\Modules\Form\Form(wpFluentForm()))->updateMeta($formId, '_primary_email_field', '');
1596 }
1597 $insertedForms[$formId] = [
1598 'title' => $form->title,
1599 'edit_url' => admin_url('admin.php?page=fluent_forms&route=editor&form_id=' . $formId)
1600 ];
1601
1602
1603 return $insertedForms;
1604
1605 }
1606
1607 public function insertEntries($fluentFormId, $importFormId)
1608 {
1609 if (!wpFluent()->table('fluentform_forms')->find($fluentFormId)) {
1610 wp_send_json_error([
1611 'message' => __("Could not find form ,please import again", 'fluentform')
1612 ], 422);
1613 }
1614 $entries = $this->getEntries($importFormId);
1615 if (!is_array($entries) || empty($entries)) {
1616 wp_send_json([
1617 'message' => "No Entries Found",
1618 ], 200);
1619 return;
1620 }
1621 //delete prev entries
1622 $this->resetEntries($fluentFormId);
1623
1624 foreach ($entries as $key => $entry) {
1625 if (empty($entry)) {
1626 continue;
1627 }
1628 $previousItem = wpFluent()->table('fluentform_submissions')
1629 ->where('form_id', $fluentFormId)
1630 ->orderBy('id', 'DESC')
1631 ->first();
1632
1633 $serialNumber = 1;
1634
1635 if ($previousItem) {
1636 $serialNumber = $previousItem->serial_number + 1;
1637 }
1638 $created_at = ArrayHelper::get($entry, 'created_at');
1639 if ($created_at) {
1640 ArrayHelper::forget($entry, 'created_at');
1641 }
1642 $updated_at = ArrayHelper::get($entry, 'updated_at');
1643 if ($updated_at) {
1644 ArrayHelper::forget($entry, 'updated_at');
1645 }
1646 $insertData = [
1647 'form_id' => $fluentFormId,
1648 'serial_number' => $serialNumber,
1649 'response' => json_encode($entry),
1650 'source_url' => '',
1651 'user_id' => get_current_user_id(),
1652 'browser' => '',
1653 'device' => '',
1654 'ip' => '',
1655 'created_at' => $created_at ?: current_time('mysql'),
1656 'updated_at' => $updated_at ?: current_time('mysql')
1657 ];
1658
1659 if ($is_favourite = ArrayHelper::get($entry, 'is_favourite')) {
1660 $insertData['is_favourite'] = $is_favourite;
1661 ArrayHelper::forget($entry, 'is_favourite');
1662 }
1663 if ($status = ArrayHelper::get($entry, 'status')) {
1664 $insertData['status'] = $status;
1665 ArrayHelper::forget($entry, 'status');
1666 }
1667
1668 $insertId = wpFluent()->table('fluentform_submissions')->insertGetId($insertData);
1669
1670 $uidHash = md5(wp_generate_uuid4() . $insertId);
1671
1672 \FluentForm\App\Helpers\Helper::setSubmissionMeta($insertId, '_entry_uid_hash', $uidHash, $fluentFormId);
1673 $submissionService = new SubmissionService();
1674 $submissionService->recordEntryDetails($insertId, $fluentFormId, $entry);
1675 }
1676 wp_send_json([
1677 'message' => __("Entries Imported Successfully", 'fluentform'),
1678 'entries_page_url' => admin_url('admin.php?page=fluent_forms&route=entries&form_id=' . $fluentFormId),
1679 'status' => true
1680 ], 200);
1681
1682 }
1683
1684 private function resetEntries($formId)
1685 {
1686 wpFluent()->table('fluentform_submissions')
1687 ->where('form_id', $formId)
1688 ->delete();
1689
1690 wpFluent()->table('fluentform_submission_meta')
1691 ->where('form_id', $formId)
1692 ->delete();
1693
1694 wpFluent()->table('fluentform_entry_details')
1695 ->where('form_id', $formId)
1696 ->delete();
1697 wpFluent()->table('fluentform_form_analytics')
1698 ->where('form_id', $formId)
1699 ->delete();
1700
1701 wpFluent()->table('fluentform_logs')
1702 ->where('parent_source_id', $formId)
1703 ->whereIn('source_type', ['submission_item', 'form_item', 'draft_submission_meta'])
1704 ->delete();
1705 }
1706
1707 /**
1708 * @param array $urls
1709 *
1710 * @return array
1711 */
1712 public function migrateFilesAndGetUrls($urls)
1713 {
1714 if (is_string($urls)) {
1715 $urls = [$urls];
1716 }
1717 $values = [];
1718 foreach ($urls as $url) {
1719 $source = $this->resolveMigrationSource($url);
1720 if (!$source) {
1721 continue;
1722 }
1723
1724 $basDir = wp_upload_dir()['basedir'] . '/fluentform/';
1725 $baseurl = wp_upload_dir()['baseurl'] . '/fluentform/';
1726
1727 if (!file_exists($basDir) || (file_exists($basDir) && !is_dir($basDir))) {
1728 wp_mkdir_p($basDir);
1729 }
1730
1731 // Unique name so two sources that sanitise alike do not overwrite.
1732 $file_name = wp_unique_filename($basDir, $source['name']);
1733 $destination = $basDir . $file_name;
1734 require_once(ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php');
1735 require_once(ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php');
1736 $fileSystemDirect = new \WP_Filesystem_Direct(false);
1737 if ($fileSystemDirect->copy($source['path'], $destination, true)) {
1738 $values[] = $baseurl . $file_name;
1739 }
1740 @unlink($source['path']);
1741 }
1742 return $values;
1743 }
1744
1745 // Entry values come from the source plugin's export. PHP copy() would also read local
1746 // server paths, so only an upload-allowed type fetched over http(s) reaches the
1747 // web-reachable destination; download_url() refuses internal addresses on its own.
1748 protected function resolveMigrationSource($url)
1749 {
1750 $name = $this->safeMigrationFileName($url);
1751 if (!$name) {
1752 return null;
1753 }
1754
1755 if (!function_exists('download_url')) {
1756 require_once ABSPATH . 'wp-admin/includes/file.php';
1757 }
1758 $tmp = download_url((string) $url);
1759 if (is_wp_error($tmp)) {
1760 return null;
1761 }
1762
1763 return ['path' => $tmp, 'name' => $name];
1764 }
1765
1766 /**
1767 * Build the destination name from the URL PATH, not the raw URL: the raw basename
1768 * keeps the query string (scan.pdf?/shell.php -> shell.php). Inner dots are collapsed
1769 * so exactly one gate-approved extension survives.
1770 *
1771 * @param string $url
1772 * @return string|null ff-<name>.<ext>, or null when the type/scheme is not allowed
1773 */
1774 protected function safeMigrationFileName($url)
1775 {
1776 $url = (string) $url;
1777 if (!preg_match('#^https?://#i', $url)) {
1778 return null;
1779 }
1780
1781 $base = wp_basename((string) wp_parse_url($url, PHP_URL_PATH));
1782 // The upload list grows with unfiltered_html and upload_mimes; HTML, script and SVG would run on the site's origin.
1783 $mimes = array_filter(get_allowed_mime_types(), function ($mime) {
1784 return !preg_match('#html|javascript|xml$#i', $mime);
1785 });
1786 $ext = wp_check_filetype($base, $mimes)['ext'];
1787 if (!$ext) {
1788 return null;
1789 }
1790
1791 $stem = str_replace('.', '_', sanitize_file_name(pathinfo($base, PATHINFO_FILENAME)));
1792 if ('' === $stem) {
1793 $stem = 'file';
1794 }
1795
1796 return 'ff-' . $stem . '.' . strtolower($ext);
1797 }
1798
1799 protected function getResolveOperator($key)
1800 {
1801 return ArrayHelper::get([
1802 'equal' => '=',
1803 'is' => '=',
1804 '==' => '=',
1805 'e' => '=',
1806 'not_equal' => '!=',
1807 'isnot' => '!=',
1808 '!=' => '!=',
1809 '!e' => '!=',
1810 'greater_than' => '>',
1811 '>' => '>',
1812 'greater_or_equal' => '>=',
1813 '>=' => '>=',
1814 'less_than' => '<',
1815 '<' => '<',
1816 'less_or_equal' => '<=',
1817 '<=' => '<=',
1818 'starts_with' => 'startsWith',
1819 '^' => 'startsWith',
1820 'ends_with' => 'endsWith',
1821 '~' => 'endsWith',
1822 'contains' => 'contains',
1823 'c' => 'contains',
1824 '!c' => 'doNotContains',
1825 'not_contains' => 'doNotContains'
1826 ], $key);
1827 }
1828
1829 }
1830