PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.49
E2Pdf – Export Pdf Tool for WordPress v1.32.49
1.32.49 1.32.48 1.32.43 1.32.40 1.32.34 1.32.32 1.32.31 1.32.26 1.32.22 1.32.23 1.32.18 1.32.17 1.32.15 trunk 1.00.00 1.00.13 1.01.01 1.02.02 1.03.07 1.04.07 1.05.03 1.06.02 1.07.11 1.08.00 1.08.06 All 72 releases
e2pdf / classes / extension / e2pdf-forminator.php

e2pdf-forminator.php in E2Pdf – Export Pdf Tool for WordPress 1.32.49, at classes/extension/e2pdf-forminator.php

3,529 lines 186.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * File: /extension/e2pdf-forminator.php
5 *
6 * @package E2Pdf
7 * @license GPLv3
8 * @link https://e2pdf.com
9 */
10 if (!defined('ABSPATH')) {
11 die('Access denied.');
12 }
13
14 class Extension_E2pdf_Forminator extends Model_E2pdf_Model {
15
16 private $options;
17 private $info = array(
18 'key' => 'forminator',
19 'title' => 'Forminator Forms',
20 );
21
22 // info
23 public function info($key = false) {
24 if ($key && isset($this->info[$key])) {
25 return $this->info[$key];
26 } else {
27 return array(
28 $this->info['key'] => $this->info['title'],
29 );
30 }
31 }
32
33 // active
34 public function active() {
35 if (defined('E2PDF_FORMINATOR_EXTENSION') || $this->helper->load('extension')->is_plugin_active('forminator/forminator.php') || $this->helper->load('extension')->is_plugin_active('forminator-pro/forminator.php')) {
36 return true;
37 }
38 return false;
39 }
40
41 // set
42 public function set($key, $value) {
43 if (!isset($this->options)) {
44 $this->options = new stdClass();
45 }
46 $this->options->$key = $value;
47 switch ($key) {
48 case 'item':
49 $this->set('cached_form', false);
50 if ($this->get('item') && class_exists('Forminator_API')) {
51 $form = Forminator_API::get_form($this->get('item'));
52 if (!is_wp_error($form)) {
53 $this->set('cached_form', $form);
54 }
55 }
56 break;
57 case 'field_data_array':
58 case 'dataset':
59 $this->set('cached_entry', false);
60 $this->set('cached_meta', array());
61 $this->set('cached_data', array());
62 if ($this->get('dataset') && class_exists('Forminator_Form_Entry_Model') && $this->get('cached_form')) {
63 if ($this->get('dataset') == 'is_prevent_store') {
64 $entry = new Forminator_Form_Entry_Model();
65 $entry->set_fields($this->replace_values_to_labels($this->get('field_data_array'), $this->get('cached_form'), $entry));
66 if (isset($entry->meta_data) && is_array($entry->meta_data)) {
67 $entry->meta_data = $this->update_meta_data($entry->meta_data, $this->get('cached_form'));
68 }
69 $this->set('cached_entry', $entry);
70 $this->set('cached_meta', $this->get('cached_entry')->meta_data);
71 } else {
72 $entry = Forminator_API::get_entry($this->get('item'), $this->get('dataset'));
73 if (isset($entry->meta_data) && is_array($entry->meta_data)) {
74 $entry->meta_data = $this->update_meta_data($entry->meta_data, $this->get('cached_form'));
75 }
76 $this->set('cached_entry', $entry);
77 $this->set('cached_meta', $this->get('cached_entry')->meta_data);
78 }
79 $data = array();
80 foreach ($this->get('cached_meta') as $key => $meta) {
81 if (is_array($meta['value'])) {
82 if (array_unique(array_map('is_int', array_keys($meta['value']))) === array(true)) {
83 $data[$key] = $meta['value'];
84 } else {
85 if (isset($meta['value']['file']['file_url'])) {
86 $data[$key] = $meta['value']['file']['file_url'];
87 } else {
88 foreach ($meta['value'] as $sub_key => $sub_meta) {
89 $data[$key . '-' . $sub_key] = $sub_meta;
90 }
91 }
92 }
93 } else {
94 $data[$key] = $meta['value'];
95 }
96 }
97 $this->set('cached_data', $data);
98 }
99 break;
100 default:
101 break;
102 }
103 return true;
104 }
105
106 // get
107 public function get($key) {
108 if (isset($this->options->$key)) {
109 $value = $this->options->$key;
110 } else {
111 switch ($key) {
112 case 'args':
113 case 'cached_meta':
114 case 'cached_data':
115 case 'field_data_array':
116 $value = array();
117 break;
118 default:
119 $value = false;
120 break;
121 }
122 }
123 return $value;
124 }
125
126 // items
127 public function items() {
128 $items = array();
129 if (class_exists('Forminator_API')) {
130 $forms = Forminator_API::get_forms(null, 1, 99999);
131 foreach ($forms as $key => $form) {
132 $items[] = $this->item($form->id);
133 }
134 }
135 return $items;
136 }
137
138 // datasets
139 public function datasets($item_id = false, $name = false) {
140 $datasets = array();
141 if (class_exists('Forminator_API') && $item_id) {
142 $entries = Forminator_API::get_entries($item_id);
143 $this->set('item', $item_id);
144 foreach ($entries as $key => $entry) {
145 $this->set('dataset', $entry->entry_id);
146 $entry_title = $this->render($name);
147 if (!$entry_title) {
148 $entry_title = $entry->entry_id;
149 }
150 $datasets[] = array(
151 'key' => $entry->entry_id,
152 'value' => $entry_title,
153 );
154 }
155 }
156 return $datasets;
157 }
158
159 // get dataset actions
160 public function get_dataset_actions($dataset_id = false) {
161 $dataset_id = (int) $dataset_id;
162 if (!$dataset_id) {
163 return false;
164 }
165 $actions = new stdClass();
166 $actions->view = false;
167 $actions->delete = false;
168 return $actions;
169 }
170
171 // get template actions
172 public function get_template_actions($template = false) {
173 $template = (int) $template;
174 if (!$template) {
175 return;
176 }
177 $actions = new stdClass();
178 $actions->delete = false;
179 return $actions;
180 }
181
182 // item
183 public function item($item_id = false) {
184 if (!$item_id && $this->get('item')) {
185 $item_id = $this->get('item');
186 }
187 $form = false;
188 if (class_exists('Forminator_API')) {
189 $form = Forminator_API::get_form($item_id);
190 }
191 $item = new stdClass();
192 if ($form && !is_wp_error($form)) {
193 $item->id = (string) $item_id;
194 $item->url = $this->helper->get_url(
195 array(
196 'page' => 'forminator-cform-wizard',
197 'id' => $form->id,
198 )
199 );
200 $item->name = function_exists('forminator_get_form_name') ? forminator_get_form_name($item_id, 'custom_form') : $form->name;
201 } else {
202 $item->id = '';
203 $item->url = '';
204 $item->name = '';
205 }
206 return $item;
207 }
208
209 // render
210 public function render($value, $field = array(), $convert_shortcodes = true, $raw = false) {
211 $value = $this->render_shortcodes($value, $field);
212 if (!$raw) {
213 $value = $this->strip_shortcodes($value);
214 $value = $this->convert_shortcodes($value, $convert_shortcodes, isset($field['type']) && $field['type'] == 'e2pdf-html' ? true : false);
215 $value = $this->helper->load('field')->render_checkbox($value, $this, $field);
216 }
217 return $value;
218 }
219
220 // render shortcodes
221 public function render_shortcodes($value, $field = array()) {
222 $element_id = isset($field['element_id']) ? $field['element_id'] : false;
223 if ($this->verify() && function_exists('forminator_replace_form_data')) {
224 if ($this->get('cached_entry')) {
225 $cached_data = apply_filters('e2pdf_extension_render_forminator_data', $this->get('cached_data'), $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'));
226 $value = $this->replace_foreach($value, $this->get('cached_form'), $this->get('cached_entry'), $cached_data);
227 }
228 if (false !== strpos($value, '[')) {
229 $value = $this->helper->load('field')->pre_shortcodes($value, $this, $field);
230 $value = $this->helper->load('field')->inner_shortcodes($value, $this, $field);
231 $value = $this->helper->load('field')->wrapper_shortcodes($value, $this, $field);
232 }
233 $value = $this->helper->load('field')->do_shortcodes($value, $this, $field);
234 if ($this->get('cached_entry')) {
235 if (defined('FORMINATOR_VERSION') && version_compare(FORMINATOR_VERSION, '1.16.0', '>=')) {
236 $prepared_data = Forminator_CForm_Front_Action::$prepared_data;
237 Forminator_CForm_Front_Action::$prepared_data = $cached_data;
238 $value = $this->forminator_replace_form_data($value, $this->get('cached_form'), $this->get('cached_entry'));
239 $value = forminator_replace_form_data($value, $this->get('cached_form'), $this->get('cached_entry'));
240 if (version_compare(FORMINATOR_VERSION, '1.17.2', '>=')) {
241 $value = forminator_replace_variables($value, $this->get('item'), $this->get('cached_entry'));
242 } else {
243 $value = forminator_replace_variables($value, $this->get('item'));
244 }
245 if (function_exists('forminator_replace_custom_form_data')) {
246 $value = forminator_replace_custom_form_data($value, $this->get('cached_form'), $this->get('cached_entry'));
247 }
248 Forminator_CForm_Front_Action::$prepared_data = $prepared_data;
249 } else {
250 $value = forminator_replace_form_data($value, $cached_data, $this->get('cached_form'), $this->get('cached_entry'));
251 $value = forminator_replace_variables($value, $this->get('item'));
252 if (function_exists('forminator_replace_custom_form_data')) {
253 $value = forminator_replace_custom_form_data($value, $this->get('cached_form'), $cached_data, $this->get('cached_entry'), array());
254 }
255 }
256 }
257 $value = $this->helper->load('field')->render(
258 apply_filters('e2pdf_extension_render_shortcodes_pre_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false),
259 $this,
260 $field
261 );
262 }
263 return apply_filters(
264 'e2pdf_extension_render_shortcodes_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false
265 );
266 }
267
268 // replace foreach
269 public function replace_foreach($content, $custom_form = null, $entry = null, $data = array()) {
270
271 if (strpos($content, '{foreach:') !== false && preg_match_all('/\{foreach:(group-\d+)\}(.*?)\{\/foreach:(group-\d+)\}/s', $content, $matches)) {
272
273 $suffix_time = array('hours', 'minutes', 'ampm');
274 $suffix_address = array('street_address', 'address_line', 'city', 'state', 'zip', 'country');
275 $suffix_name = array('prefix', 'first-name', 'middle-name', 'last-name');
276
277 if (isset($matches[0]) && is_array($matches[0])) {
278 foreach ($matches[0] as $key => $match) {
279
280 $group_id = isset($matches[1][$key]) ? $matches[1][$key] : '';
281 $inner = isset($matches[2][$key]) ? $matches[2][$key] : '';
282 $outer = '';
283
284 if ($group_id) {
285 $group_fields = $custom_form->get_grouped_fields($group_id);
286 $original_keys = wp_list_pluck($group_fields, 'slug');
287 $repeater_keys = forminator_get_cloned_field_keys($entry, $original_keys);
288
289 $num_entries = 0;
290 if (count($repeater_keys) > 0) {
291 $num_entries = count($repeater_keys) + 1;
292 } else {
293 foreach ($original_keys as $original_key) {
294 if (stripos($original_key, 'address') !== false) {
295 foreach ($suffix_address as $sub_suffix) {
296 if (isset($data[$original_key . '-' . $sub_suffix]) && $data[$original_key . '-' . $sub_suffix]) {
297 $num_entries = 1;
298 break;
299 }
300 }
301 } elseif (stripos($original_key, 'time') !== false) {
302 foreach ($suffix_time as $sub_suffix) {
303 if (isset($data[$original_key . '-' . $sub_suffix]) && $data[$original_key . '-' . $sub_suffix]) {
304 $num_entries = 1;
305 break;
306 }
307 }
308 } elseif (stripos($original_key, 'name') !== false) {
309 foreach ($suffix_name as $sub_suffix) {
310 if (isset($data[$original_key . '-' . $sub_suffix]) && $data[$original_key . '-' . $sub_suffix]) {
311 $num_entries = 1;
312 break;
313 }
314 }
315 }
316
317 if (isset($data[$original_key])) {
318 $num_entries = 1;
319 }
320 if ($num_entries > 0) {
321 break;
322 }
323 }
324 }
325
326 $i = 1;
327 while ($i <= $num_entries) {
328 $replace = array();
329 foreach ($original_keys as $original_key) {
330 if (stripos($original_key, 'address') !== false) {
331 foreach ($suffix_address as $sub_suffix) {
332 $replace['{' . $original_key . '-' . $sub_suffix . '}'] = '{' . $original_key . '-' . $sub_suffix . ':' . $i . '}';
333 }
334 } elseif (stripos($original_key, 'time') !== false) {
335 foreach ($suffix_time as $sub_suffix) {
336 $replace['{' . $original_key . '-' . $sub_suffix . '}'] = '{' . $original_key . '-' . $sub_suffix . ':' . $i . '}';
337 }
338 } elseif (stripos($original_key, 'name') !== false) {
339 foreach ($suffix_name as $sub_suffix) {
340 $replace['{' . $original_key . '-' . $sub_suffix . '}'] = '{' . $original_key . '-' . $sub_suffix . ':' . $i . '}';
341 }
342 }
343 $replace['{' . $original_key . '}'] = '{' . $original_key . ':' . $i . '}';
344 $replace['{foreach-index}'] = $i;
345 }
346
347 $outer .= str_replace(array_keys($replace), $replace, $inner);
348 $i++;
349 }
350 $content = str_replace($match, $outer, $content);
351 }
352 }
353 }
354 }
355 return $content;
356 }
357
358 // replace form data
359 public function forminator_replace_form_data($content, $custom_form = null, $entry = null) {
360 $matches = array();
361 $data = Forminator_CForm_Front_Action::$prepared_data;
362 $field_types = Forminator_Core::get_field_types();
363 $suffix_time = array('hours', 'minutes', 'ampm');
364 $suffix_address = array('street_address', 'address_line', 'city', 'state', 'zip', 'country');
365 $randomed_field_pattern = 'field-\d+-\d+';
366 $increment_field_pattern = sprintf('(%s)-\d+', implode('|', $field_types));
367 if (preg_match_all('/\{((' . $randomed_field_pattern . ')|(' . $increment_field_pattern . '))(\-[A-Za-z-_]+)?(:\d+)?(:html)?\}/', $content, $matches)) {
368 if (!isset($matches[0]) || !is_array($matches[0])) {
369 return $content;
370 }
371 foreach ($matches[0] as $key => $match) {
372 $element_id = forminator_clear_field_id($match);
373
374 $suffix = isset($matches[5][$key]) ? $matches[5][$key] : null;
375 $index = isset($matches[6][$key]) ? str_replace(':', '', $matches[6][$key]) : null;
376 $filter = isset($matches[7][$key]) ? str_replace(':', '', $matches[7][$key]) : null;
377
378 if ($index) {
379 $field_id = isset($matches[1][$key]) ? $matches[1][$key] : null;
380 if (stripos($field_id, 'html') !== false) {
381 $content = str_replace($match, '{' . $field_id . '}', $content);
382 continue;
383 } else {
384 $field = $custom_form->get_field($field_id);
385 if ($field && isset($field['parent_group'])) {
386 $group_fields = $custom_form->get_grouped_fields($field['parent_group']);
387 $original_keys = wp_list_pluck($group_fields, 'slug');
388 $repeater_keys = array_values(forminator_get_cloned_field_keys($entry, $original_keys));
389
390 if ($index && $index >= '2') {
391 if (isset($repeater_keys[$index - 2])) {
392 $element_id = $field_id . $repeater_keys[$index - 2] . $suffix;
393 } else {
394 continue;
395 }
396 } else {
397 $element_id = $field_id . $suffix;
398 }
399 }
400 }
401 } elseif ($filter && $filter == 'html') {
402 $field_id = isset($matches[1][$key]) ? $matches[1][$key] : null;
403 $content = str_replace($match, forminator_replace_form_data('{' . $field_id . '}', $custom_form, $entry), $content);
404 continue;
405 }
406
407 if (isset($data[$element_id])) {
408 if (stripos($element_id, 'currency') !== false || stripos($element_id, 'number') !== false) {
409 $field = $custom_form->get_field($element_id, true);
410 $value = Forminator_Field::forminator_number_formatting($field, $data[$element_id]);
411 } elseif (
412 false !== stripos($element_id, 'time') &&
413 (false !== stripos($element_id, '-hours') || false !== stripos($element_id, '-minutes'))
414 ) {
415 $value = str_pad($data[$element_id], 2, '0', STR_PAD_LEFT);
416 } elseif (!empty($entry->draft_id) &&
417 function_exists('forminator_replace_field_data') &&
418 (strpos($element_id, 'radio') === 0 || strpos($element_id, 'select') === 0 || strpos($element_id, 'checkbox') === 0)
419 ) {
420 $value = explode(', ', forminator_replace_field_data($custom_form, $element_id, $data));
421 } else {
422 $value = $data[$element_id];
423 }
424 if (is_array($value)) {
425 $value = implode(', ', $value);
426 }
427 $content = str_replace($match, $value, $content);
428 } elseif (stripos($element_id, 'calculation') !== false && $custom_form && $entry) {
429 if ($index) {
430 // incorrect value for repeater with default function
431 $value = render_entry($entry, $element_id);
432 } else {
433 $value = forminator_get_field_from_form_entry($element_id, $custom_form, $entry);
434 }
435
436 if (is_array($value)) {
437 $value = implode(', ', $value);
438 }
439 $content = str_replace($match, $value, $content);
440 } elseif (stripos($element_id, 'address') !== false && !$suffix) {
441
442 $address = array();
443 foreach ($suffix_address as $sub_suffix) {
444 if (isset($data[$element_id . '-' . $sub_suffix]) && $data[$element_id . '-' . $sub_suffix]) {
445 $address[$sub_suffix] = $data[$element_id . '-' . $sub_suffix];
446 }
447 }
448
449 $value = apply_filters('e2pdf_extension_forminator_replace_form_data_address', implode(', ', $address), $element_id, $address, $custom_form, $entry);
450 $content = str_replace($match, $value, $content);
451 } elseif (stripos($element_id, 'time') !== false && !$suffix) {
452 $time = array();
453 foreach ($suffix_time as $sub_suffix) {
454 if (isset($data[$element_id . '-' . $sub_suffix])) {
455 if ($sub_suffix == 'hours' || $sub_suffix == 'minutes') {
456 $time[$sub_suffix] = str_pad($data[$element_id . '-' . $sub_suffix], 2, '0', STR_PAD_LEFT);
457 } else {
458 $time[$sub_suffix] = $data[$element_id . '-' . $sub_suffix];
459 }
460 }
461 }
462 $value = apply_filters('e2pdf_extension_forminator_replace_form_data_time', implode(':', $time), $element_id, $time, $custom_form, $entry);
463 $content = str_replace($match, $value, $content);
464 } elseif (false !== stripos($element_id, 'postdata') && $suffix) {
465 $field_id = isset($matches[1][$key]) ? $matches[1][$key] : null;
466 $meta_value = isset($data[$field_id . '-value']) ? $data[$field_id . '-value'] : array();
467
468 switch ($suffix) {
469 case '-post-title':
470 $value = isset($meta_value['post-title']) ? $meta_value['post-title'] : '';
471 $content = str_replace($match, $value, $content);
472 break;
473 case '-post-content':
474 $value = isset($meta_value['post-content']) ? $meta_value['post-content'] : '';
475 $content = str_replace($match, $value, $content);
476 break;
477 case '-post-excerpt':
478 $value = isset($meta_value['post-excerpt']) ? $meta_value['post-excerpt'] : '';
479 $content = str_replace($match, $value, $content);
480 break;
481 case '-category':
482 $post_category = isset($meta_value['category']) ? $meta_value['category'] : '';
483 $categories = array();
484 if (is_array($post_category)) {
485 foreach ($post_category as $category) {
486 $categories[] = get_the_category_by_ID($category);
487 }
488 } elseif ($post_category) {
489 $categories[] = get_the_category_by_ID($post_category);
490 }
491 $value = implode(', ', $categories);
492 $content = str_replace($match, $value, $content);
493 break;
494 case '-post_tag':
495 $post_tags = isset($meta_value['post_tag']) ? $meta_value['post_tag'] : '';
496 $tags = array();
497 if (is_array($post_tags)) {
498 foreach ($post_tags as $post_tag) {
499 $term = get_term_by('id', $post_tag, 'post_tag');
500 if ($term) {
501 $tags[] = $term->name;
502 }
503 }
504 } elseif ($post_tags) {
505 $term = get_term_by('id', $post_tag, 'post_tag');
506 if ($term) {
507 $tags[] = $term->name;
508 }
509 }
510 $value = implode(', ', $tags);
511 $content = str_replace($match, $value, $content);
512 break;
513 case '-post-custom':
514 $post_custom = isset($meta_value['post-custom']) && is_array($meta_value['post-custom']) ? $meta_value['post-custom'] : array();
515 $customs = array();
516 foreach ($post_custom as $custom) {
517 $customs[] = $custom['key'] . ': ' . $custom['value'];
518 }
519 $value = implode(', ', $customs);
520 $content = str_replace($match, $value, $content);
521 break;
522 case '-post-image':
523 $value = !empty($meta_value['post-image']) && !empty($meta_value['post-image']['uploaded_file']) ? $meta_value['post-image']['uploaded_file'][0] : '';
524 $content = str_replace($match, $value, $content);
525 break;
526 }
527 }
528 }
529 }
530 return $content;
531 }
532
533 // fields compatibility
534 public function update_meta_data($meta_data, $form) {
535 foreach ($meta_data as $meta_key => $meta) {
536 // 1.48.x
537 if ((false !== strpos($meta_key, 'checkbox') || false !== strpos($meta_key, 'select')) && !empty($meta['value']) && is_string($meta['value'])) {
538 $meta_data[$meta_key]['value'] = implode(', ', explode('<br/>', $meta['value']));
539 }
540 // 1.53.x
541 if (false !== strpos($meta_key, 'calculation') && isset($meta['value']) && !is_array($meta['value'])) {
542 $field = $form->get_field($meta_key, true);
543 $value = ('' === (string) $meta['value']) ? '0.0' : $meta['value'];
544 $meta_data[$meta_key]['value'] = [
545 'result' => $value,
546 'formatting_result' => is_array($field) && !empty($field) ? Forminator_Field::forminator_number_formatting($field, $value) : $value,
547 ];
548 }
549 }
550 return $meta_data;
551 }
552
553 // replace values to labels
554 public function replace_values_to_labels($data, $form, $entry) {
555 if (function_exists('forminator_replace_form_data')) {
556 foreach ($data as $key => $value) {
557 if (empty($value['name'])) {
558 continue;
559 }
560 $slug = $value['name'];
561 if (strpos($slug, 'radio') !== false || strpos($slug, 'select') !== false || strpos($slug, 'checkbox') !== false
562 ) {
563 $data[$key]['value'] = forminator_replace_form_data('{' . $slug . '}', $form, $entry, true);
564 }
565 }
566 }
567 return $data;
568 }
569
570 // strip shortcodes
571 public function strip_shortcodes($value) {
572 $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
573 $value = preg_replace('~a\:\d+\:{[^}]*}(*SKIP)(*FAIL)|{[^}]*}~', '', $value);
574 return $value;
575 }
576
577 // strip math
578 public function strip_math($value, &$replacements) {
579 if ($value) {
580 preg_match_all('/\{[^}]+\}/', $value, $matches);
581 foreach ($matches[0] as $match) {
582 $index = count($replacements) + 1;
583 $replacements[] = $match;
584 $value = str_replace($match, '%' . $index . '$s', $value);
585 }
586 }
587 return $value;
588 }
589
590 // convert shortcodes
591 public function convert_shortcodes($value, $to = false, $html = false) {
592 if ($value) {
593 if ($to) {
594 $value = str_replace('&#91;', '[', $value);
595 if (!$html) {
596 $value = wp_specialchars_decode($value, ENT_QUOTES);
597 }
598 } else {
599 $value = str_replace('[', '&#91;', $value);
600 }
601 }
602 return $value;
603 }
604
605 // verify
606 public function verify() {
607 if ($this->get('cached_form')) {
608 if (
609 ($this->get('cached_form')->is_prevent_store() && $this->get('dataset') == 'is_prevent_store') ||
610 ($this->get('cached_entry') && $this->get('cached_entry')->form_id == $this->get('item'))
611 ) {
612 return true;
613 }
614 }
615 return false;
616 }
617
618 // auto form
619 public function auto_form($template, $data = array()) {
620
621 if ($template->get('ID')) {
622
623 $auto_form_label = isset($data['auto_form_label']) && $data['auto_form_label'] ? $data['auto_form_label'] : false;
624 $auto_form_shortcode = isset($data['auto_form_shortcode']) ? true : false;
625 $wrappers = array();
626 $pages = $template->get('pages');
627 $checkboxes = array();
628 $radios = array();
629
630 foreach ($pages as $page_key => $page) {
631 if (isset($page['elements']) && !empty($page['elements'])) {
632 foreach ($page['elements'] as $element_key => $element) {
633 $type = false;
634 $label = '';
635 if ($element['type'] == 'e2pdf-input' || $element['type'] == 'e2pdf-signature') {
636 $type = 'text';
637 $label = 'Text';
638 } elseif ($element['type'] == 'e2pdf-textarea') {
639 $type = 'textarea';
640 $label = 'Textarea';
641 } elseif ($element['type'] == 'e2pdf-select') {
642 $type = 'select';
643 $label = 'Select';
644 $options = array();
645 $field_options = array();
646 if (isset($element['properties']['options'])) {
647 $field_options = explode("\n", $element['properties']['options']);
648 foreach ($field_options as $option) {
649 $options[] = array(
650 'label' => $option,
651 'value' => '',
652 );
653 }
654 }
655 } elseif ($element['type'] == 'e2pdf-checkbox') {
656 $field_key = array_search($element['name'], array_column($checkboxes, 'name'), false);
657 if ($field_key !== false) {
658 $checkboxes[$field_key]['options'][] = array(
659 'label' => $element['properties']['option'],
660 'value' => $element['properties']['option'],
661 );
662 $pages[$page_key]['elements'][$element_key]['value'] = '{checkbox-' . $checkboxes[$field_key]['element_id'] . '}';
663 } else {
664 $type = 'checkbox';
665 $label = 'Checkbox';
666 $options = array(
667 'label' => $element['properties']['option'],
668 'value' => $element['properties']['option'],
669 );
670 }
671 } elseif ($element['type'] == 'e2pdf-radio') {
672 if (isset($element['properties']['group']) && $element['properties']['group']) {
673 $element['name'] = $element['properties']['group'];
674 } else {
675 $element['name'] = $element['element_id'];
676 }
677 $field_key = array_search($element['name'], array_column($radios, 'name'), false);
678 if ($field_key !== false) {
679 $radios[$field_key]['options'][] = array(
680 'label' => $element['properties']['option'],
681 'value' => '',
682 );
683 $pages[$page_key]['elements'][$element_key]['value'] = '{radio-' . $radios[$field_key]['element_id'] . '}';
684 } else {
685 $type = 'radio';
686 $label = 'Radio';
687 $options = array(
688 'label' => $element['properties']['option'],
689 'value' => '',
690 );
691 }
692 }
693
694 if ($type) {
695 $labels = array();
696 if ($auto_form_shortcode) {
697 $labels[] = '{' . $type . '-' . $element['element_id'] . '}';
698 }
699
700 if ($auto_form_label && $auto_form_label == 'value' && isset($element['value']) && $element['value']) {
701 $labels[] = $element['value'];
702 } elseif ($auto_form_label && $auto_form_label == 'name' && isset($element['name']) && $element['name']) {
703 $labels[] = $element['name'];
704 }
705
706 if ($type == 'checkbox' || $type == 'radio') {
707
708 $field_data = array(
709 'name' => $element['name'],
710 'element_id' => $element['element_id'],
711 'field_label' => !empty($labels) ? implode(' ', $labels) : $label,
712 'options' => array(
713 $options,
714 ),
715 );
716
717 if ($type == 'checkbox') {
718 $checkboxes[] = $field_data;
719 } else {
720 $radios[] = $field_data;
721 }
722 } else {
723 $field_data = array(
724 'element_id' => $type . '-' . $element['element_id'],
725 'type' => $type,
726 'cols' => '12',
727 'required' => false,
728 'field_label' => !empty($labels) ? implode(' ', $labels) : $label,
729 'placeholder' => '',
730 'validation' => false,
731 );
732
733 if ($type == 'select') {
734 $field_data['options'] = $options;
735 }
736
737 $wrappers[] = array(
738 'wrapper_id' => 'wrapper-' . wp_rand(1000000000000, 9999999999999) . '-' . wp_rand(1000, 9999),
739 'fields' => array(
740 $field_data,
741 ),
742 );
743 }
744
745 $pages[$page_key]['elements'][$element_key]['value'] = '{' . $type . '-' . $element['element_id'] . '}';
746 if (isset($element['properties']['esig'])) {
747 unset($pages[$page_key]['elements'][$element_key]['properties']['esig']);
748 }
749 }
750 }
751 }
752 }
753
754 foreach ($checkboxes as $element) {
755 $wrappers[] = array(
756 'wrapper_id' => 'wrapper-' . wp_rand(1000000000000, 9999999999999) . '-' . wp_rand(1000, 9999),
757 'fields' => array(
758 array(
759 'element_id' => 'checkbox-' . $element['element_id'],
760 'type' => 'checkbox',
761 'cols' => '12',
762 'required' => false,
763 'options' => $element['options'],
764 'field_label' => $element['field_label'],
765 'placeholder' => '',
766 'validation' => false,
767 ),
768 ),
769 );
770 }
771
772 foreach ($radios as $element) {
773 $wrappers[] = array(
774 'wrapper_id' => 'wrapper-' . wp_rand(1000000000000, 9999999999999) . '-' . wp_rand(1000, 9999),
775 'fields' => array(
776 array(
777 'element_id' => 'radio-' . $element['element_id'],
778 'type' => 'radio',
779 'cols' => '12',
780 'required' => false,
781 'options' => $element['options'],
782 'field_label' => $element['field_label'],
783 'placeholder' => '',
784 'validation' => false,
785 ),
786 ),
787 );
788 }
789
790 $template->set('pages', $pages);
791 $settings = array(
792 'formName' => $template->get('title'),
793 'thankyou' => 'true',
794 /* translators: %d: E2Pdf Template ID */
795 'thankyou-message' => sprintf(__('Success. [e2pdf-download id="%d"]', 'e2pdf'), $template->get('ID')),
796 'use-custom-submit' => 'true',
797 'custom-submit-text' => __('Send Message', 'forminator'),
798 'use-custom-invalid-form' => 'true',
799 'custom-invalid-form-message' => __('Error: Your form is not valid, please fix the errors!', 'forminator'),
800 'enable-ajax' => 'true',
801 'validation' => 'on_submit',
802 );
803
804 if (class_exists('Forminator_API')) {
805 $item = Forminator_API::add_form($template->get('title'), $wrappers, $settings);
806 if ($item) {
807 $template->set('item', $item);
808 }
809 }
810 }
811
812 return $template;
813 }
814
815 // visual mapper
816 public function visual_mapper() {
817
818 $item = $this->get('item');
819 $html = '';
820 $source = '';
821
822 if ($item && class_exists('Forminator_API') && class_exists('Forminator_CForm_Front')) {
823 $custom_form = Forminator_API::get_form($item);
824 if (is_wp_error($custom_form)) {
825 return __('Form could not be found', 'e2pdf');
826 }
827 $view = Forminator_CForm_Front::get_instance();
828 if (class_exists('Forminator_Custom_Form_Model')) {
829 $view->model = Forminator_Custom_Form_Model::model()->load($item);
830 } elseif (class_exists('Forminator_Form_Model')) {
831 $view->model = Forminator_Form_Model::model()->load($item);
832 } else {
833 return __('Something went wrong!', 'e2pdf');
834 }
835
836 $fields = $view->get_fields();
837 if (!empty($fields)) {
838 foreach ($fields as $field_key => $field) {
839 if ('page-break' === $field['type'] && isset($field['element_id'])) {
840 $view->model->remove_field($field_key);
841 }
842 }
843 }
844
845 $form = $view->get_html(true, true);
846 ob_start();
847 $view->print_styles();
848 $styles = ob_get_clean();
849 if ($form) {
850 $source = $styles . $form;
851 }
852 if ($source) {
853 $dom = new DOMDocument();
854 $html = $this->helper->load('convert')->load_html($source, $dom, true);
855 }
856 if (!$source) {
857 return '<div class="e2pdf-vm-error">' . __("The form source is empty or doesn't exist", 'e2pdf') . '</div>';
858 } elseif (!$html) {
859 return '<div class="e2pdf-vm-error">' . __('The form could not be parsed due the incorrect HTML', 'e2pdf') . '</div>';
860 } else {
861
862 $use_labels = true;
863 if ((defined('FORMINATOR_VERSION') && version_compare(FORMINATOR_VERSION, '1.14.10', '<')) || (!empty($custom_form->settings['print_value']) && filter_var($custom_form->settings['print_value'], FILTER_VALIDATE_BOOLEAN))) {
864 $use_labels = false;
865 }
866
867 $xml = $this->helper->load('xml');
868 $xpath = new DomXPath($dom);
869
870 // remove by class
871 $remove_by_class = array(
872 'forminator-pagination-submit',
873 'forminator-response-message',
874 'forminator-save-draft-link',
875 'forminator-field-stripe',
876 'forminator-button-paypal',
877 );
878 foreach ($remove_by_class as $key => $class) {
879 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
880 foreach ($elements as $element) {
881 $element->parentNode->removeChild($element);
882 }
883 }
884
885 // remove by tag
886 $remove_by_tag = array(
887 'script',
888 );
889 foreach ($remove_by_tag as $key => $tag) {
890 $elements = $xpath->query('//' . $tag);
891 foreach ($elements as $element) {
892 $element->parentNode->removeChild($element);
893 }
894 }
895
896 $inputs = $xpath->query("//*[contains(@class, 'forminator-input') or contains(@class, 'forminator-calculation')]");
897 foreach ($inputs as $element) {
898 $xml->set_node_value($element, 'type', 'text');
899 }
900
901 // remove pagination
902 $pagination = $xpath->query("//*[contains(@class, 'forminator-pagination')]");
903 foreach ($pagination as $element) {
904 $xml->set_node_value($element, 'style', '');
905 }
906
907 // remove buttons
908 $remove_rows = $xpath->query("//*[contains(@class, 'forminator-row')][.//button[contains(concat(' ',@class,' '), ' forminator-button ') and not(contains(@class, 'forminator-upload-button')) and not(contains(@class, 'forminator-button-upload'))]]");
909 foreach ($remove_rows as $element) {
910 $element->parentNode->removeChild($element);
911 }
912
913 // sliders support
914 $sliders = $xpath->query("//*[contains(@class, 'forminator-slider-hidden-min') or contains(@class, 'forminator-slider-hidden-max')]");
915 foreach ($sliders as $element) {
916 $xml->set_node_value($element, 'type', 'text');
917 }
918
919 // replace name on fileuploads
920 $fileuploads = $xpath->query("//*[contains(@class, 'forminator-upload')]");
921 foreach ($fileuploads as $element) {
922 $file = $xpath->query(".//input[contains(@class, 'forminator-input-file')]", $element)->item(0);
923 $button = $xpath->query(".//button[contains(@class, 'forminator-upload-button') or contains(@class, 'forminator-button-upload')]", $element)->item(0);
924 if ($file && $button) {
925 $xml->set_node_value($button, 'type', 'upload');
926 $xml->set_node_value($button, 'name', $xml->get_node_value($file, 'name'));
927 }
928 }
929
930 // replace name on multi-fileuploads
931 $fileuploads_multi = $xpath->query("//*[contains(@class, 'forminator-multi-upload')]");
932 foreach ($fileuploads_multi as $element) {
933 $file = $xpath->query(".//input[contains(@class, 'forminator-input-file')]", $element)->item(0);
934 if ($file) {
935 $xml->set_node_value($file, 'name', str_replace('[]', '', $xml->get_node_value($file, 'name')));
936 }
937 }
938
939 // replace name on signatures
940 $signatures = $xpath->query("//*[contains(@class, 'forminator-field-signature')]");
941 foreach ($signatures as $element) {
942 $button = $xpath->query(".//input[contains(@type, 'hidden')]", $element)->item(0);
943 if ($button) {
944 $xml->set_node_value($button, 'type', 'text');
945 $xml->set_node_value($button, 'value', '');
946 $xml->set_node_value($button, 'name', str_replace('field-', '', $xml->get_node_value($button, 'name')));
947 }
948 }
949
950 // replace names on inputs
951 $inputs = $xpath->query('//input|//textarea|//select');
952 foreach ($inputs as $element) {
953 if ($xml->get_node_value($element, 'type') == 'checkbox') {
954 $xml->set_node_value($element, 'name', str_replace('[]', '', $xml->get_node_value($element, 'name')));
955 /* Forminator 1.14.10 Checkbox "Option" Fix */
956 if ($use_labels) {
957 $parent = $xpath->query('.//parent::*', $element);
958 if ($parent && $parent->item(0)) {
959 if (strpos($xml->get_node_value($parent->item(0), 'class'), 'forminator-option') !== false) {
960 $xml->set_node_value($element, 'value', $parent->item(0)->nodeValue);
961 } else {
962 $label = $xpath->query('.//parent::*/span[not(@aria-hidden)]', $element);
963 if ($label && $label->item(0)) {
964 $xml->set_node_value($element, 'value', $label->item(0)->nodeValue);
965 }
966 }
967 }
968 }
969 }
970
971 if ($use_labels) {
972 // forminator 1.14.10 radio option fix
973 if ($xml->get_node_value($element, 'type') == 'radio') {
974 $label = $xpath->query('.//parent::*/span[not(@aria-hidden)]', $element);
975 if ($label && $label->item(0)) {
976 $xml->set_node_value($element, 'value', $label->item(0)->nodeValue);
977 }
978 }
979
980 // forminator 1.14.10 select option fix
981 if ($element->tagName == 'select') {
982 $options = $xpath->query('.//option', $element);
983 if ($options) {
984 foreach ($options as $option) {
985 $xml->set_node_value($option, 'value', $option->nodeValue);
986 }
987 }
988 }
989 }
990
991 $parent_repeater = $xpath->query("./ancestor::div[contains(@class, 'forminator-repeater-field')]", $element);
992 if ($parent_repeater && $parent_repeater->item(0)) {
993 $xml->set_node_value($element, 'name', $xml->get_node_value($element, 'name') . ':1');
994 }
995
996 $xml->set_node_value($element, 'name', '{' . $xml->get_node_value($element, 'name') . '}');
997
998 if (strpos($xml->get_node_value($element, 'class'), 'forminator-checkbox--input') !== false) {
999 $xml->set_node_value($element, 'class', $xml->get_node_value($element, 'class') . ' forminator-checkbox--design');
1000 }
1001 if (strpos($xml->get_node_value($element, 'class'), 'forminator-radio--input') !== false) {
1002 $xml->set_node_value($element, 'class', $xml->get_node_value($element, 'class') . ' forminator-radio--design');
1003 }
1004 }
1005
1006 // multiselects
1007 $multiselect = $xpath->query("//ul[contains(@class, 'forminator-multiselect')]");
1008 foreach ($multiselect as $element) {
1009 $name = '';
1010 $options = array();
1011 $inputs = $xpath->query(".//*[contains(@class, 'forminator-multiselect--item')]", $element);
1012
1013 foreach ($inputs as $sub_element) {
1014 $input = $xpath->query('.//input', $sub_element)->item(0);
1015 $label = $xpath->query('.//label', $sub_element)->item(0);
1016
1017 if ($input && $label) {
1018 if ($label->childNodes->item(0)) {
1019 $options[] = array(
1020 'value' => $xml->get_node_value($input, 'value'),
1021 'label' => $label->childNodes->item(0)->nodeValue,
1022 );
1023 }
1024 $name = $xml->get_node_value($input, 'name');
1025 }
1026 $sub_element->parentNode->removeChild($sub_element);
1027 }
1028
1029 $li = $dom->createElement('li');
1030 $field_atts = array(
1031 'class' => 'forminator-multiselect--item',
1032 );
1033 foreach ($field_atts as $key => $value) {
1034 $attr = $dom->createAttribute($key);
1035 $attr->value = $value;
1036 $li->appendChild($attr);
1037 }
1038 $element->appendChild($li);
1039
1040 $field = $dom->createElement('select');
1041 $field_atts = array(
1042 'multiple' => 'multiple',
1043 'name' => $name,
1044 );
1045 foreach ($field_atts as $key => $value) {
1046 $attr = $dom->createAttribute($key);
1047 $attr->value = $value;
1048 $field->appendChild($attr);
1049 }
1050
1051 $li->appendChild($field);
1052
1053 foreach ($options as $option) {
1054 $option_field = $dom->createElement('option');
1055 $field_atts = array(
1056 'value' => $option['value'],
1057 );
1058 foreach ($field_atts as $key => $value) {
1059 $attr = $dom->createAttribute($key);
1060 $attr->value = $value;
1061 $option_field->appendChild($attr);
1062 }
1063
1064 $label = $dom->createTextNode($option['label']);
1065 $option_field->appendChild($label);
1066 $field->appendChild($option_field);
1067 }
1068 }
1069
1070 // replace hidden
1071 $elements = $xpath->query("//*[contains(@type, 'hidden')]");
1072 foreach ($elements as $element) {
1073 $parent = $xpath->query('.//parent::*', $element);
1074 if ($parent && $parent->item(0)) {
1075 if (false !== strpos($xml->get_node_value($parent->item(0), 'class'), 'forminator-row')) {
1076 if (false !== strpos($xml->get_node_value($parent->item(0), 'class'), 'forminator-hidden')) {
1077 $xml->set_node_value($element, 'value', $xml->get_node_value($element, 'name'));
1078 }
1079 $xml->set_node_value($parent->item(0), 'class', 'forminator-field');
1080 } else {
1081 $element->parentNode->removeChild($element);
1082 }
1083 }
1084 }
1085
1086 $elements = $xpath->query("//*[contains(@class, 'forminator-row') and not(.//text()[normalize-space()])]");
1087 foreach ($elements as $element) {
1088 $element->parentNode->removeChild($element);
1089 }
1090
1091 return $dom->saveHTML();
1092 }
1093 }
1094 return false;
1095 }
1096
1097 // auto
1098 public function auto() {
1099
1100 $item = $this->get('item');
1101
1102 $response = array();
1103 $elements = array();
1104 $form_fields = array();
1105 $custom_form = false;
1106
1107 if (class_exists('Forminator_API')) {
1108 $custom_form = Forminator_API::get_form($item);
1109 if (!is_wp_error($custom_form)) {
1110 $form_fields = $custom_form->fields;
1111 }
1112 }
1113
1114 if ($custom_form && !empty($form_fields)) {
1115 $fields = array();
1116 foreach ($form_fields as $field_obj) {
1117 $field = $field_obj->raw;
1118 if (isset($field['type']) && $field['type'] == 'group') {
1119 $fields[] = $field_obj;
1120 if (isset($field['element_id']) && $field['element_id']) {
1121 foreach ($form_fields as $sub_field_obj) {
1122 if (isset($sub_field_obj->parent_group) && $sub_field_obj->parent_group == $field['element_id']) {
1123 $fields[] = $sub_field_obj;
1124 }
1125 }
1126 }
1127 } elseif (isset($field_obj->parent_group) && $field_obj->parent_group) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedElseif
1128 } else {
1129 $fields[] = $field_obj;
1130 }
1131 }
1132
1133 $use_labels = true;
1134 if ((defined('FORMINATOR_VERSION') && version_compare(FORMINATOR_VERSION, '1.14.10', '<')) || (!empty($custom_form->settings['print_value']) && filter_var($custom_form->settings['print_value'], FILTER_VALIDATE_BOOLEAN))) {
1135 $use_labels = false;
1136 }
1137
1138 foreach ($fields as $field_obj) {
1139 $field = $field_obj->raw;
1140 $width = 100 / (12 / $field['cols']);
1141 $repeater = '';
1142 if (isset($field_obj->parent_group) && $field_obj->parent_group) {
1143 $parent_field = $custom_form->get_field($field_obj->parent_group);
1144 if ($parent_field) {
1145 if (isset($parent_field['is_repeater']) && $parent_field['is_repeater']) {
1146 $repeater = ':1';
1147 }
1148 }
1149 }
1150
1151 switch ($field['type']) {
1152 case 'group':
1153 if ($field['field_label']) {
1154 $elements[] = $this->auto_field(
1155 $field,
1156 array(
1157 'type' => 'e2pdf-html',
1158 'block' => true,
1159 'properties' => array(
1160 'top' => '20',
1161 'left' => '20',
1162 'right' => '20',
1163 'width' => $width . '%',
1164 'height' => 'auto',
1165 'value' => '<h2>' . $field['field_label'] . '</h2>',
1166 ),
1167 )
1168 );
1169 }
1170 break;
1171 case 'name':
1172 case 'email':
1173 case 'phone':
1174 case 'url':
1175 case 'number':
1176 case 'calculation':
1177 case 'date':
1178 case 'currency':
1179 // multiple name field
1180 if ($field['type'] == 'name' && isset($field['multiple_name']) && $field['multiple_name'] === 'true') {
1181
1182 if (!$field['prefix'] && !$field['fname']) {
1183 if ($field['mname']) {
1184 $elements[] = $this->auto_field(
1185 $field,
1186 array(
1187 'type' => 'e2pdf-html',
1188 'block' => true,
1189 'float' => true,
1190 'properties' => array(
1191 'top' => '20',
1192 'left' => '20',
1193 'right' => '20',
1194 'width' => $field['lname'] ? $width / 2 . '%' : $width . '%',
1195 'height' => 'auto',
1196 'value' => $field['mname_label'],
1197 ),
1198 )
1199 );
1200
1201 $elements[] = $this->auto_field(
1202 $field,
1203 array(
1204 'type' => 'e2pdf-input',
1205 'properties' => array(
1206 'top' => '5',
1207 'width' => '100%',
1208 'height' => 'auto',
1209 'value' => '{' . $field['element_id'] . '-middle-name' . $repeater . '}',
1210 ),
1211 )
1212 );
1213 }
1214
1215 if ($field['lname']) {
1216 $elements[] = $this->auto_field(
1217 $field,
1218 array(
1219 'type' => 'e2pdf-html',
1220 'block' => true,
1221 'float' => true,
1222 'properties' => array(
1223 'top' => '20',
1224 'left' => '20',
1225 'right' => '20',
1226 'width' => $field['mname'] ? $width / 2 . '%' : $width . '%',
1227 'height' => 'auto',
1228 'value' => $field['lname_label'],
1229 ),
1230 )
1231 );
1232
1233 $elements[] = $this->auto_field(
1234 $field,
1235 array(
1236 'type' => 'e2pdf-input',
1237 'properties' => array(
1238 'top' => '5',
1239 'width' => '100%',
1240 'height' => 'auto',
1241 'value' => '{' . $field['element_id'] . '-last-name' . $repeater . '}',
1242 ),
1243 )
1244 );
1245 }
1246 } else {
1247 if ($field['prefix']) {
1248 $elements[] = $this->auto_field(
1249 $field,
1250 array(
1251 'type' => 'e2pdf-html',
1252 'block' => true,
1253 'float' => true,
1254 'properties' => array(
1255 'top' => '20',
1256 'left' => '20',
1257 'right' => '20',
1258 'width' => $field['fname'] ? $width / 2 . '%' : $width . '%',
1259 'height' => 'auto',
1260 'value' => $field['prefix_label'],
1261 ),
1262 )
1263 );
1264
1265 $options_tmp = array();
1266 if (function_exists('forminator_get_name_prefixes')) {
1267 $options = forminator_get_name_prefixes();
1268 foreach ($options as $key => $option) {
1269 $options_tmp[] = $key;
1270 }
1271 }
1272
1273 $elements[] = $this->auto_field(
1274 $field,
1275 array(
1276 'type' => 'e2pdf-select',
1277 'properties' => array(
1278 'top' => '5',
1279 'width' => '100%',
1280 'height' => 'auto',
1281 'options' => implode("\n", $options_tmp),
1282 'value' => '{' . $field['element_id'] . '-prefix' . $repeater . '}',
1283 ),
1284 )
1285 );
1286
1287 if ($field['mname'] && $field['fname']) {
1288 $elements[] = $this->auto_field(
1289 $field,
1290 array(
1291 'type' => 'e2pdf-html',
1292 'properties' => array(
1293 'top' => '20',
1294 'width' => $field['lname'] ? '100%' : '200%',
1295 'right' => $field['lname'] ? '0' : '-40',
1296 'height' => 'auto',
1297 'value' => $field['mname_label'],
1298 ),
1299 )
1300 );
1301
1302 $elements[] = $this->auto_field(
1303 $field,
1304 array(
1305 'type' => 'e2pdf-input',
1306 'properties' => array(
1307 'top' => '5',
1308 'width' => $field['lname'] ? '100%' : '200%',
1309 'height' => 'auto',
1310 'right' => $field['lname'] ? '0' : '-40',
1311 'value' => '{' . $field['element_id'] . '-middle-name' . $repeater . '}',
1312 ),
1313 )
1314 );
1315 } elseif ($field['lname'] && !$field['mname'] && $field['fname']) {
1316
1317 $elements[] = $this->auto_field(
1318 $field,
1319 array(
1320 'type' => 'e2pdf-html',
1321 'properties' => array(
1322 'top' => '20',
1323 'width' => $field['mname'] ? '100%' : '200%',
1324 'height' => 'auto',
1325 'right' => $field['mname'] ? '0' : '-40',
1326 'value' => $field['lname_label'],
1327 ),
1328 )
1329 );
1330
1331 $elements[] = $this->auto_field(
1332 $field,
1333 array(
1334 'type' => 'e2pdf-input',
1335 'properties' => array(
1336 'top' => '5',
1337 'width' => $field['mname'] ? '100%' : '200%',
1338 'height' => 'auto',
1339 'right' => $field['mname'] ? '0' : '-40',
1340 'value' => '{' . $field['element_id'] . '-last-name' . $repeater . '}',
1341 ),
1342 )
1343 );
1344 }
1345 }
1346
1347 if ($field['fname']) {
1348 $elements[] = $this->auto_field(
1349 $field,
1350 array(
1351 'type' => 'e2pdf-html',
1352 'block' => true,
1353 'float' => true,
1354 'properties' => array(
1355 'top' => '20',
1356 'left' => '20',
1357 'right' => '20',
1358 'width' => $field['prefix'] ? ($width / 2) . '%' : $width . '%',
1359 'height' => 'auto',
1360 'value' => $field['fname_label'],
1361 ),
1362 )
1363 );
1364
1365 $elements[] = $this->auto_field(
1366 $field,
1367 array(
1368 'type' => 'e2pdf-input',
1369 'properties' => array(
1370 'top' => '5',
1371 'width' => '100%',
1372 'height' => 'auto',
1373 'value' => '{' . $field['element_id'] . '-first-name' . $repeater . '}',
1374 ),
1375 )
1376 );
1377
1378 if ($field['lname'] && $field['mname'] && $field['prefix']) {
1379 $elements[] = $this->auto_field(
1380 $field,
1381 array(
1382 'type' => 'e2pdf-html',
1383 'properties' => array(
1384 'top' => '20',
1385 'width' => $field['mname'] ? '100%' : '200%',
1386 'height' => 'auto',
1387 'right' => $field['mname'] ? '0' : '-40',
1388 'value' => $field['lname_label'],
1389 ),
1390 )
1391 );
1392
1393 $elements[] = $this->auto_field(
1394 $field,
1395 array(
1396 'type' => 'e2pdf-input',
1397 'properties' => array(
1398 'top' => '5',
1399 'width' => $field['mname'] ? '100%' : '200%',
1400 'height' => 'auto',
1401 'right' => $field['mname'] ? '0' : '-40',
1402 'value' => '{' . $field['element_id'] . '-last-name' . $repeater . '}',
1403 ),
1404 )
1405 );
1406 }
1407 }
1408
1409 if (!$field['prefix'] || !$field['fname']) {
1410 if ($field['mname']) {
1411 $elements[] = $this->auto_field(
1412 $field,
1413 array(
1414 'type' => 'e2pdf-html',
1415 'properties' => array(
1416 'top' => '20',
1417 'right' => $field['lname'] ? '20' : '0',
1418 'width' => $field['lname'] ? '50%' : '100%',
1419 'height' => 'auto',
1420 'value' => $field['mname_label'],
1421 ),
1422 )
1423 );
1424 }
1425
1426 if ($field['lname']) {
1427 $elements[] = $this->auto_field(
1428 $field,
1429 array(
1430 'type' => 'e2pdf-html',
1431 'float' => $field['mname'] ? true : false,
1432 'properties' => array(
1433 'top' => '20',
1434 'left' => $field['mname'] ? '20' : '0',
1435 'width' => $field['mname'] ? '50%' : '100%',
1436 'height' => 'auto',
1437 'value' => $field['lname_label'],
1438 ),
1439 )
1440 );
1441 }
1442
1443 if ($field['mname']) {
1444 $elements[] = $this->auto_field(
1445 $field,
1446 array(
1447 'type' => 'e2pdf-input',
1448 'properties' => array(
1449 'top' => '5',
1450 'right' => $field['lname'] ? '20' : '0',
1451 'width' => $field['lname'] ? '50%' : '100%',
1452 'height' => 'auto',
1453 'value' => '{' . $field['element_id'] . '-middle-name' . $repeater . '}',
1454 ),
1455 )
1456 );
1457 }
1458
1459 if ($field['lname']) {
1460 $elements[] = $this->auto_field(
1461 $field,
1462 array(
1463 'type' => 'e2pdf-input',
1464 'float' => $field['mname'] ? true : false,
1465 'properties' => array(
1466 'top' => '5',
1467 'left' => $field['mname'] ? '20' : '0',
1468 'width' => $field['mname'] ? '50%' : '100%',
1469 'height' => 'auto',
1470 'value' => '{' . $field['element_id'] . '-last-name' . $repeater . '}',
1471 ),
1472 )
1473 );
1474 }
1475 }
1476 }
1477 } elseif ($field['type'] == 'date' && $field['field_type'] == 'select') {
1478
1479 $elements[] = $this->auto_field(
1480 $field,
1481 array(
1482 'type' => 'e2pdf-html',
1483 'block' => true,
1484 'float' => true,
1485 'properties' => array(
1486 'top' => '20',
1487 'left' => '20',
1488 'right' => '20',
1489 'width' => $width . '%',
1490 'height' => 'auto',
1491 'value' => $field['field_label'],
1492 ),
1493 )
1494 );
1495
1496 $days = array();
1497 $months = array();
1498 $years = array();
1499 if (class_exists('Forminator_Date')) {
1500 $forminator_date = new Forminator_Date();
1501 $options = $forminator_date->get_day();
1502 foreach ($options as $option) {
1503 $days[] = $option['value'];
1504 }
1505
1506 $options = $forminator_date->get_months();
1507 foreach ($options as $option) {
1508 $months[] = $option['value'];
1509 }
1510
1511 $options = $forminator_date->get_years(isset($field['min_year']) ? $field['min_year'] : '', isset($field['max_year']) ? $field['max_year'] : '');
1512 foreach ($options as $option) {
1513 $years[] = $option['value'];
1514 }
1515 }
1516
1517 $elements[] = $this->auto_field(
1518 $field,
1519 array(
1520 'type' => 'e2pdf-select',
1521 'properties' => array(
1522 'top' => '5',
1523 'width' => '30%',
1524 'height' => 'auto',
1525 'options' => implode("\n", $days),
1526 'value' => '{' . $field['element_id'] . '-month' . $repeater . '}',
1527 ),
1528 )
1529 );
1530
1531 $elements[] = $this->auto_field(
1532 $field,
1533 array(
1534 'type' => 'e2pdf-select',
1535 'float' => true,
1536 'properties' => array(
1537 'top' => '5',
1538 'left' => '5%',
1539 'right' => '5%',
1540 'width' => '40%',
1541 'height' => 'auto',
1542 'options' => implode("\n", $months),
1543 'value' => '{' . $field['element_id'] . '-day' . $repeater . '}',
1544 ),
1545 )
1546 );
1547
1548 $elements[] = $this->auto_field(
1549 $field,
1550 array(
1551 'type' => 'e2pdf-select',
1552 'float' => true,
1553 'properties' => array(
1554 'top' => '5',
1555 'width' => '30%',
1556 'height' => 'auto',
1557 'options' => implode("\n", $years),
1558 'value' => '{' . $field['element_id'] . '-year' . $repeater . '}',
1559 ),
1560 )
1561 );
1562 } elseif ($field['type'] == 'date' && $field['field_type'] == 'input') {
1563
1564 $elements[] = $this->auto_field(
1565 $field,
1566 array(
1567 'type' => 'e2pdf-html',
1568 'block' => true,
1569 'float' => true,
1570 'properties' => array(
1571 'top' => '20',
1572 'left' => '20',
1573 'right' => '20',
1574 'width' => $width . '%',
1575 'height' => 'auto',
1576 'value' => $field['field_label'],
1577 ),
1578 )
1579 );
1580
1581 $elements[] = $this->auto_field(
1582 $field,
1583 array(
1584 'type' => 'e2pdf-input',
1585 'properties' => array(
1586 'top' => '5',
1587 'width' => '30%',
1588 'height' => 'auto',
1589 'value' => '{' . $field['element_id'] . '-month' . $repeater . '}',
1590 ),
1591 )
1592 );
1593
1594 $elements[] = $this->auto_field(
1595 $field,
1596 array(
1597 'type' => 'e2pdf-input',
1598 'float' => true,
1599 'properties' => array(
1600 'top' => '5',
1601 'left' => '5%',
1602 'right' => '5%',
1603 'width' => '40%',
1604 'height' => 'auto',
1605 'value' => '{' . $field['element_id'] . '-day' . $repeater . '}',
1606 ),
1607 )
1608 );
1609
1610 $elements[] = $this->auto_field(
1611 $field,
1612 array(
1613 'float' => true,
1614 'type' => 'e2pdf-input',
1615 'properties' => array(
1616 'top' => '5',
1617 'width' => '30%',
1618 'height' => 'auto',
1619 'value' => '{' . $field['element_id'] . '-year' . $repeater . '}',
1620 ),
1621 )
1622 );
1623 } else {
1624
1625 $elements[] = $this->auto_field(
1626 $field,
1627 array(
1628 'type' => 'e2pdf-html',
1629 'block' => true,
1630 'float' => true,
1631 'properties' => array(
1632 'top' => '20',
1633 'left' => '20',
1634 'right' => '20',
1635 'width' => $width . '%',
1636 'height' => 'auto',
1637 'value' => $field['field_label'],
1638 ),
1639 )
1640 );
1641
1642 $elements[] = $this->auto_field(
1643 $field,
1644 array(
1645 'type' => 'e2pdf-input',
1646 'properties' => array(
1647 'top' => '5',
1648 'width' => '100%',
1649 'height' => 'auto',
1650 'value' => '{' . $field['element_id'] . $repeater . '}',
1651 ),
1652 )
1653 );
1654
1655 if (isset($field['description']) && $field['description']) {
1656 $elements[] = $this->auto_field(
1657 $field,
1658 array(
1659 'type' => 'e2pdf-html',
1660 'float' => false,
1661 'properties' => array(
1662 'top' => '5',
1663 'width' => '100%',
1664 'height' => 'auto',
1665 'value' => $field['description'],
1666 ),
1667 )
1668 );
1669 }
1670 }
1671 break;
1672 case 'postdata':
1673 if (isset($field['post_title']) && $field['post_title']) {
1674 if (isset($field['post_title_label']) && $field['post_title_label']) {
1675 $elements[] = $this->auto_field(
1676 $field,
1677 array(
1678 'type' => 'e2pdf-html',
1679 'block' => true,
1680 'float' => true,
1681 'properties' => array(
1682 'top' => '20',
1683 'left' => '20',
1684 'right' => '20',
1685 'width' => '100%',
1686 'height' => 'auto',
1687 'value' => $field['post_title_label'],
1688 ),
1689 )
1690 );
1691 }
1692 $elements[] = $this->auto_field(
1693 $field,
1694 array(
1695 'type' => 'e2pdf-input',
1696 'properties' => array(
1697 'top' => '5',
1698 'width' => '100%',
1699 'height' => 'auto',
1700 'value' => '{' . $field['element_id'] . '-post-title}',
1701 ),
1702 )
1703 );
1704 }
1705
1706 if (isset($field['post_content']) && $field['post_content']) {
1707 if (isset($field['post_content_label']) && $field['post_content_label']) {
1708 $elements[] = $this->auto_field(
1709 $field,
1710 array(
1711 'type' => 'e2pdf-html',
1712 'block' => true,
1713 'float' => true,
1714 'properties' => array(
1715 'top' => '20',
1716 'left' => '20',
1717 'right' => '20',
1718 'width' => '100%',
1719 'height' => 'auto',
1720 'value' => $field['post_content_label'],
1721 ),
1722 )
1723 );
1724 }
1725
1726 $elements[] = $this->auto_field(
1727 $field,
1728 array(
1729 'type' => 'e2pdf-textarea',
1730 'properties' => array(
1731 'top' => '5',
1732 'width' => '100%',
1733 'height' => 'auto',
1734 'value' => '{' . $field['element_id'] . '-post-content}',
1735 ),
1736 )
1737 );
1738 }
1739
1740 if (isset($field['post_excerpt']) && $field['post_excerpt']) {
1741 if (isset($field['post_excerpt_label']) && $field['post_excerpt_label']) {
1742 $elements[] = $this->auto_field(
1743 $field,
1744 array(
1745 'type' => 'e2pdf-html',
1746 'block' => true,
1747 'float' => true,
1748 'properties' => array(
1749 'top' => '20',
1750 'left' => '20',
1751 'right' => '20',
1752 'width' => '100%',
1753 'height' => 'auto',
1754 'value' => $field['post_excerpt_label'],
1755 ),
1756 )
1757 );
1758 }
1759
1760 $elements[] = $this->auto_field(
1761 $field,
1762 array(
1763 'type' => 'e2pdf-textarea',
1764 'properties' => array(
1765 'top' => '5',
1766 'width' => '100%',
1767 'height' => 'auto',
1768 'value' => '{' . $field['element_id'] . '-post-excerpt}',
1769 ),
1770 )
1771 );
1772 }
1773
1774 if (isset($field['post_image']) && $field['post_image']) {
1775 if (isset($field['post_image_label']) && $field['post_image_label']) {
1776 $elements[] = $this->auto_field(
1777 $field,
1778 array(
1779 'type' => 'e2pdf-html',
1780 'block' => true,
1781 'float' => true,
1782 'properties' => array(
1783 'top' => '20',
1784 'left' => '20',
1785 'right' => '20',
1786 'width' => '100%',
1787 'height' => 'auto',
1788 'value' => $field['post_image_label'],
1789 ),
1790 )
1791 );
1792 }
1793 $elements[] = $this->auto_field(
1794 $field,
1795 array(
1796 'type' => 'e2pdf-input',
1797 'properties' => array(
1798 'top' => '5',
1799 'width' => '100%',
1800 'height' => 'auto',
1801 'value' => '{' . $field['element_id'] . '-post-image}',
1802 ),
1803 )
1804 );
1805 }
1806
1807 if (isset($field['category']) && $field['category']) {
1808 if (isset($field['category_label']) && $field['category_label']) {
1809 $elements[] = $this->auto_field(
1810 $field,
1811 array(
1812 'type' => 'e2pdf-html',
1813 'block' => true,
1814 'float' => true,
1815 'properties' => array(
1816 'top' => '20',
1817 'left' => '20',
1818 'right' => '20',
1819 'width' => '100%',
1820 'height' => 'auto',
1821 'value' => $field['category_label'],
1822 ),
1823 )
1824 );
1825 }
1826 $elements[] = $this->auto_field(
1827 $field,
1828 array(
1829 'type' => 'e2pdf-input',
1830 'properties' => array(
1831 'top' => '5',
1832 'width' => '100%',
1833 'height' => 'auto',
1834 'value' => '{' . $field['element_id'] . '-category}',
1835 ),
1836 )
1837 );
1838 }
1839
1840 if (isset($field['post_tag']) && $field['post_tag']) {
1841 if (isset($field['post_tag_label']) && $field['post_tag_label']) {
1842 $elements[] = $this->auto_field(
1843 $field,
1844 array(
1845 'type' => 'e2pdf-html',
1846 'block' => true,
1847 'float' => true,
1848 'properties' => array(
1849 'top' => '20',
1850 'left' => '20',
1851 'right' => '20',
1852 'width' => '100%',
1853 'height' => 'auto',
1854 'value' => $field['post_tag_label'],
1855 ),
1856 )
1857 );
1858 }
1859 $elements[] = $this->auto_field(
1860 $field,
1861 array(
1862 'type' => 'e2pdf-input',
1863 'properties' => array(
1864 'top' => '5',
1865 'width' => '100%',
1866 'height' => 'auto',
1867 'value' => '{' . $field['element_id'] . '-post_tag}',
1868 ),
1869 )
1870 );
1871 }
1872
1873 if (isset($field['post_custom_fields']) && $field['post_custom_fields']) {
1874 $elements[] = $this->auto_field(
1875 $field,
1876 array(
1877 'type' => 'e2pdf-html',
1878 'block' => true,
1879 'float' => true,
1880 'properties' => array(
1881 'top' => '20',
1882 'left' => '20',
1883 'right' => '20',
1884 'width' => '100%',
1885 'height' => 'auto',
1886 'value' => __('Custom Fields', 'forminator'),
1887 ),
1888 )
1889 );
1890
1891 $elements[] = $this->auto_field(
1892 $field,
1893 array(
1894 'type' => 'e2pdf-input',
1895 'properties' => array(
1896 'top' => '5',
1897 'width' => '100%',
1898 'height' => 'auto',
1899 'value' => '{' . $field['element_id'] . '-post-custom}',
1900 ),
1901 )
1902 );
1903 }
1904 break;
1905
1906 case 'address':
1907 if (!$field['street_address'] && !$field['address_line']) {
1908
1909 if (!$field['address_city'] && !$field['address_state']) {
1910 if ($field['address_zip']) {
1911 $elements[] = $this->auto_field(
1912 $field,
1913 array(
1914 'type' => 'e2pdf-html',
1915 'block' => true,
1916 'float' => true,
1917 'properties' => array(
1918 'top' => '20',
1919 'left' => '20',
1920 'right' => '20',
1921 'width' => $field['address_country'] ? $width / 2 . '%' : $width . '%',
1922 'height' => 'auto',
1923 'value' => $field['address_zip_label'],
1924 ),
1925 )
1926 );
1927
1928 $elements[] = $this->auto_field(
1929 $field,
1930 array(
1931 'type' => 'e2pdf-input',
1932 'properties' => array(
1933 'top' => '5',
1934 'width' => '100%',
1935 'height' => 'auto',
1936 'value' => '{' . $field['element_id'] . '-zip' . $repeater . '}',
1937 ),
1938 )
1939 );
1940 }
1941
1942 if ($field['address_country']) {
1943 $elements[] = $this->auto_field(
1944 $field,
1945 array(
1946 'type' => 'e2pdf-html',
1947 'block' => true,
1948 'float' => true,
1949 'properties' => array(
1950 'top' => '20',
1951 'left' => '20',
1952 'right' => '20',
1953 'width' => $field['address_zip'] ? $width / 2 . '%' : $width . '%',
1954 'height' => 'auto',
1955 'value' => $field['address_country_label'],
1956 ),
1957 )
1958 );
1959
1960 $options_tmp = array();
1961 if (function_exists('forminator_to_field_array') && function_exists('forminator_get_countries_list')) {
1962 $options = forminator_to_field_array(forminator_get_countries_list(), true);
1963 foreach ($options as $option) {
1964 $options_tmp[] = $option['value'];
1965 }
1966 }
1967
1968 $elements[] = $this->auto_field(
1969 $field,
1970 array(
1971 'type' => 'e2pdf-select',
1972 'properties' => array(
1973 'top' => '5',
1974 'width' => '100%',
1975 'height' => 'auto',
1976 'options' => implode("\n", $options_tmp),
1977 'value' => '{' . $field['element_id'] . '-country' . $repeater . '}',
1978 ),
1979 )
1980 );
1981 }
1982 } else {
1983
1984 if ($field['address_city']) {
1985 $elements[] = $this->auto_field(
1986 $field,
1987 array(
1988 'type' => 'e2pdf-html',
1989 'block' => true,
1990 'float' => true,
1991 'properties' => array(
1992 'top' => '20',
1993 'left' => '20',
1994 'right' => '20',
1995 'width' => $field['address_state'] ? $width / 2 . '%' : $width . '%',
1996 'height' => 'auto',
1997 'value' => $field['address_city_label'],
1998 ),
1999 )
2000 );
2001
2002 $elements[] = $this->auto_field(
2003 $field,
2004 array(
2005 'type' => 'e2pdf-input',
2006 'properties' => array(
2007 'top' => '5',
2008 'width' => '100%',
2009 'height' => 'auto',
2010 'value' => '{' . $field['element_id'] . '-city' . $repeater . '}',
2011 ),
2012 )
2013 );
2014
2015 if ($field['address_zip'] && $field['address_state']) {
2016 $elements[] = $this->auto_field(
2017 $field,
2018 array(
2019 'type' => 'e2pdf-html',
2020 'properties' => array(
2021 'top' => '20',
2022 'right' => $field['address_country'] ? '0' : '-40',
2023 'width' => $field['address_country'] ? '100%' : '200%',
2024 'height' => 'auto',
2025 'value' => $field['address_zip_label'],
2026 ),
2027 )
2028 );
2029
2030 $elements[] = $this->auto_field(
2031 $field,
2032 array(
2033 'type' => 'e2pdf-input',
2034 'properties' => array(
2035 'top' => '5',
2036 'right' => $field['address_country'] ? '0' : '-40',
2037 'width' => $field['address_country'] ? '100%' : '200%',
2038 'height' => 'auto',
2039 'value' => '{' . $field['element_id'] . '-zip' . $repeater . '}',
2040 ),
2041 )
2042 );
2043 } elseif ($field['address_country'] && !$field['address_zip'] && $field['address_state']) {
2044
2045 $elements[] = $this->auto_field(
2046 $field,
2047 array(
2048 'type' => 'e2pdf-html',
2049 'properties' => array(
2050 'top' => '20',
2051 'right' => $field['address_zip'] ? '0' : '-40',
2052 'width' => $field['address_zip'] ? '100%' : '200%',
2053 'height' => 'auto',
2054 'value' => $field['address_country_label'],
2055 ),
2056 )
2057 );
2058
2059 $options_tmp = array();
2060 if (function_exists('forminator_to_field_array') && function_exists('forminator_get_countries_list')) {
2061 $options = forminator_to_field_array(forminator_get_countries_list(), true);
2062 foreach ($options as $option) {
2063 $options_tmp[] = $option['value'];
2064 }
2065 }
2066
2067 $elements[] = $this->auto_field(
2068 $field,
2069 array(
2070 'type' => 'e2pdf-select',
2071 'properties' => array(
2072 'top' => '5',
2073 'right' => $field['address_zip'] ? '0' : '-40',
2074 'width' => $field['address_zip'] ? '100%' : '200%',
2075 'height' => 'auto',
2076 'options' => implode("\n", $options_tmp),
2077 'value' => '{' . $field['element_id'] . '-country' . $repeater . '}',
2078 ),
2079 )
2080 );
2081 }
2082 }
2083
2084 if ($field['address_state']) {
2085 $elements[] = $this->auto_field(
2086 $field,
2087 array(
2088 'type' => 'e2pdf-html',
2089 'block' => true,
2090 'float' => true,
2091 'properties' => array(
2092 'top' => '20',
2093 'left' => '20',
2094 'right' => '20',
2095 'width' => $field['address_city'] ? ($width / 2) . '%' : $width . '%',
2096 'height' => 'auto',
2097 'value' => $field['address_state_label'],
2098 ),
2099 )
2100 );
2101
2102 $elements[] = $this->auto_field(
2103 $field,
2104 array(
2105 'type' => 'e2pdf-input',
2106 'properties' => array(
2107 'top' => '5',
2108 'width' => '100%',
2109 'height' => 'auto',
2110 'value' => '{' . $field['element_id'] . '-state' . $repeater . '}',
2111 ),
2112 )
2113 );
2114
2115 if ($field['address_country'] && $field['address_zip'] && $field['address_city']) {
2116
2117 $elements[] = $this->auto_field(
2118 $field,
2119 array(
2120 'type' => 'e2pdf-html',
2121 'properties' => array(
2122 'top' => '20',
2123 'right' => $field['address_zip'] ? '0' : '-40',
2124 'width' => $field['address_zip'] ? '100%' : '200%',
2125 'height' => 'auto',
2126 'value' => $field['address_country_label'],
2127 ),
2128 )
2129 );
2130
2131 $options_tmp = array();
2132 if (function_exists('forminator_to_field_array') && function_exists('forminator_get_countries_list')) {
2133 $options = forminator_to_field_array(forminator_get_countries_list(), true);
2134 foreach ($options as $option) {
2135 $options_tmp[] = $option['value'];
2136 }
2137 }
2138
2139 $elements[] = $this->auto_field(
2140 $field,
2141 array(
2142 'type' => 'e2pdf-select',
2143 'properties' => array(
2144 'top' => '5',
2145 'right' => $field['address_zip'] ? '0' : '-40',
2146 'width' => $field['address_zip'] ? '100%' : '200%',
2147 'height' => 'auto',
2148 'options' => implode("\n", $options_tmp),
2149 'value' => '{' . $field['element_id'] . '-country' . $repeater . '}',
2150 ),
2151 )
2152 );
2153 }
2154 }
2155
2156 if (!$field['address_city'] || !$field['address_state']) {
2157 if ($field['address_zip']) {
2158 $elements[] = $this->auto_field(
2159 $field,
2160 array(
2161 'type' => 'e2pdf-html',
2162 'properties' => array(
2163 'top' => '20',
2164 'right' => $field['address_country'] ? '20' : '0',
2165 'width' => $field['address_country'] ? '50%' : '100%',
2166 'height' => 'auto',
2167 'value' => $field['address_zip_label'],
2168 ),
2169 )
2170 );
2171 }
2172
2173 if ($field['address_country']) {
2174
2175 $elements[] = $this->auto_field(
2176 $field,
2177 array(
2178 'type' => 'e2pdf-html',
2179 'float' => $field['address_zip'] ? true : false,
2180 'properties' => array(
2181 'top' => '20',
2182 'left' => $field['address_zip'] ? '20' : '0',
2183 'width' => $field['address_zip'] ? '50%' : '100%',
2184 'height' => 'auto',
2185 'value' => $field['address_country_label'],
2186 ),
2187 )
2188 );
2189 }
2190
2191 if ($field['address_zip']) {
2192 $elements[] = $this->auto_field(
2193 $field,
2194 array(
2195 'type' => 'e2pdf-input',
2196 'properties' => array(
2197 'top' => '5',
2198 'right' => $field['address_country'] ? '20' : '0',
2199 'width' => $field['address_country'] ? '50%' : '100%',
2200 'height' => 'auto',
2201 'value' => '{' . $field['element_id'] . '-zip' . $repeater . '}',
2202 ),
2203 )
2204 );
2205 }
2206
2207 if ($field['address_country']) {
2208 $options_tmp = array();
2209 if (function_exists('forminator_to_field_array') && function_exists('forminator_get_countries_list')) {
2210 $options = forminator_to_field_array(forminator_get_countries_list(), true);
2211 foreach ($options as $option) {
2212 $options_tmp[] = $option['value'];
2213 }
2214 }
2215
2216 $elements[] = $this->auto_field(
2217 $field,
2218 array(
2219 'type' => 'e2pdf-select',
2220 'float' => $field['address_zip'] ? true : false,
2221 'properties' => array(
2222 'top' => '5',
2223 'left' => $field['address_zip'] ? '20' : '0',
2224 'width' => $field['address_zip'] ? '50%' : '100%',
2225 'height' => 'auto',
2226 'options' => implode("\n", $options_tmp),
2227 'value' => '{' . $field['element_id'] . '-country' . $repeater . '}',
2228 ),
2229 )
2230 );
2231 }
2232 }
2233 }
2234 } else {
2235
2236 if ($field['street_address']) {
2237 $elements[] = $this->auto_field(
2238 $field,
2239 array(
2240 'type' => 'e2pdf-html',
2241 'block' => true,
2242 'float' => true,
2243 'properties' => array(
2244 'top' => '20',
2245 'left' => '20',
2246 'right' => '20',
2247 'width' => $width . '%',
2248 'height' => 'auto',
2249 'value' => $field['street_address_label'],
2250 ),
2251 )
2252 );
2253
2254 $elements[] = $this->auto_field(
2255 $field,
2256 array(
2257 'type' => 'e2pdf-input',
2258 'properties' => array(
2259 'top' => '5',
2260 'width' => '100%',
2261 'height' => 'auto',
2262 'value' => '{' . $field['element_id'] . '-street_address' . $repeater . '}',
2263 ),
2264 )
2265 );
2266 }
2267
2268 if ($field['address_line']) {
2269
2270 if ($field['address_line_label']) {
2271 $elements[] = $this->auto_field(
2272 $field,
2273 array(
2274 'type' => 'e2pdf-html',
2275 'block' => $field['street_address'] ? false : true,
2276 'float' => $field['street_address'] ? false : true,
2277 'properties' => array(
2278 'top' => '20',
2279 'left' => $field['street_address'] ? '0' : '20',
2280 'right' => $field['street_address'] ? '0' : '20',
2281 'width' => $field['street_address'] ? '100%' : $width . '%',
2282 'height' => 'auto',
2283 'value' => $field['address_line_label'],
2284 ),
2285 )
2286 );
2287 }
2288
2289 $elements[] = $this->auto_field(
2290 $field,
2291 array(
2292 'type' => 'e2pdf-input',
2293 'properties' => array(
2294 'top' => $field['address_line_label'] ? '0' : '20',
2295 'width' => '100%',
2296 'height' => 'auto',
2297 'value' => '{' . $field['element_id'] . '-address_line' . $repeater . '}',
2298 ),
2299 )
2300 );
2301 }
2302
2303 if ($field['address_city']) {
2304
2305 $elements[] = $this->auto_field(
2306 $field,
2307 array(
2308 'type' => 'e2pdf-html',
2309 'properties' => array(
2310 'top' => '20',
2311 'right' => $field['address_state'] ? '20' : '0',
2312 'width' => $field['address_state'] ? '50%' : '100%',
2313 'height' => 'auto',
2314 'value' => $field['address_city_label'],
2315 ),
2316 )
2317 );
2318 }
2319
2320 if ($field['address_state']) {
2321 $elements[] = $this->auto_field(
2322 $field,
2323 array(
2324 'type' => 'e2pdf-html',
2325 'float' => $field['address_city'] ? true : false,
2326 'properties' => array(
2327 'top' => $field['address_city'] ? '0' : '20',
2328 'left' => $field['address_city'] ? '20' : '0',
2329 'width' => $field['address_city'] ? '50%' : '100%',
2330 'height' => 'auto',
2331 'value' => $field['address_state_label'],
2332 ),
2333 )
2334 );
2335 }
2336
2337 if ($field['address_city']) {
2338 $elements[] = $this->auto_field(
2339 $field,
2340 array(
2341 'type' => 'e2pdf-input',
2342 'properties' => array(
2343 'top' => '5',
2344 'right' => $field['address_state'] ? '20' : '0',
2345 'width' => $field['address_state'] ? '50%' : '100%',
2346 'height' => 'auto',
2347 'value' => '{' . $field['element_id'] . '-city' . $repeater . '}',
2348 ),
2349 )
2350 );
2351 }
2352
2353 if ($field['address_state']) {
2354 $elements[] = $this->auto_field(
2355 $field,
2356 array(
2357 'type' => 'e2pdf-input',
2358 'float' => $field['address_city'] ? true : false,
2359 'properties' => array(
2360 'top' => '5',
2361 'left' => $field['address_city'] ? '20' : '0',
2362 'width' => $field['address_city'] ? '50%' : '100%',
2363 'height' => 'auto',
2364 'value' => '{' . $field['element_id'] . '-state' . $repeater . '}',
2365 ),
2366 )
2367 );
2368 }
2369
2370 if ($field['address_zip']) {
2371
2372 $elements[] = $this->auto_field(
2373 $field,
2374 array(
2375 'type' => 'e2pdf-html',
2376 'properties' => array(
2377 'top' => '20',
2378 'right' => $field['address_country'] ? '20' : '0',
2379 'width' => $field['address_country'] ? '50%' : '100%',
2380 'height' => 'auto',
2381 'value' => $field['address_zip_label'],
2382 ),
2383 )
2384 );
2385 }
2386
2387 if ($field['address_country']) {
2388 $elements[] = $this->auto_field(
2389 $field,
2390 array(
2391 'type' => 'e2pdf-html',
2392 'float' => $field['address_zip'] ? true : false,
2393 'properties' => array(
2394 'top' => '20',
2395 'left' => $field['address_zip'] ? '20' : '0',
2396 'width' => $field['address_zip'] ? '50%' : '100%',
2397 'height' => 'auto',
2398 'value' => $field['address_country_label'],
2399 ),
2400 )
2401 );
2402 }
2403
2404 if ($field['address_zip']) {
2405 $elements[] = $this->auto_field(
2406 $field,
2407 array(
2408 'type' => 'e2pdf-input',
2409 'properties' => array(
2410 'top' => '5',
2411 'right' => $field['address_country'] ? '20' : '0',
2412 'width' => $field['address_country'] ? '50%' : '100%',
2413 'height' => 'auto',
2414 'value' => '{' . $field['element_id'] . '-zip' . $repeater . '}',
2415 ),
2416 )
2417 );
2418 }
2419
2420 if ($field['address_country']) {
2421 $options_tmp = array();
2422 if (function_exists('forminator_to_field_array') && function_exists('forminator_get_countries_list')) {
2423 $options = forminator_to_field_array(forminator_get_countries_list(), true);
2424 foreach ($options as $option) {
2425 $options_tmp[] = $option['value'];
2426 }
2427 }
2428
2429 $elements[] = $this->auto_field(
2430 $field,
2431 array(
2432 'type' => 'e2pdf-select',
2433 'float' => $field['address_zip'] ? true : false,
2434 'properties' => array(
2435 'top' => '5',
2436 'left' => $field['address_zip'] ? '20' : '0',
2437 'width' => $field['address_zip'] ? '50%' : '100%',
2438 'height' => 'auto',
2439 'options' => implode("\n", $options_tmp),
2440 'value' => '{' . $field['element_id'] . '-country' . $repeater . '}',
2441 ),
2442 )
2443 );
2444 }
2445 }
2446 break;
2447 case 'time':
2448 $hours = array();
2449 $minutes = array();
2450
2451 if (class_exists('Forminator_Time')) {
2452 $forminator_time = new Forminator_Time();
2453 $options = $forminator_time->get_hours($field['time_type'], '', '', false);
2454 foreach ($options as $option) {
2455 $hours[] = $option['value'];
2456 }
2457
2458 $options = $forminator_time->get_minutes($field['time_type'], '', '', false);
2459 foreach ($options as $option) {
2460 $minutes[] = $option['value'];
2461 }
2462 }
2463
2464 $elements[] = $this->auto_field(
2465 $field,
2466 array(
2467 'type' => 'e2pdf-html',
2468 'block' => true,
2469 'float' => true,
2470 'properties' => array(
2471 'top' => '20',
2472 'left' => '20',
2473 'right' => '20',
2474 'width' => ($field['time_type'] == 'twelve' ? $width / 3 : $width / 2) . '%',
2475 'height' => 'auto',
2476 'value' => $field['hh_label'],
2477 ),
2478 )
2479 );
2480
2481 if ($field['field_type'] == 'select') {
2482 $elements[] = $this->auto_field(
2483 $field,
2484 array(
2485 'type' => 'e2pdf-select',
2486 'properties' => array(
2487 'top' => '5',
2488 'width' => '100%',
2489 'height' => 'auto',
2490 'options' => implode("\n", $hours),
2491 'value' => '{' . $field['element_id'] . '-hours' . $repeater . '}',
2492 ),
2493 )
2494 );
2495 } else {
2496 $elements[] = $this->auto_field(
2497 $field,
2498 array(
2499 'type' => 'e2pdf-input',
2500 'properties' => array(
2501 'top' => '5',
2502 'width' => '100%',
2503 'height' => 'auto',
2504 'value' => '{' . $field['element_id'] . '-hours' . $repeater . '}',
2505 ),
2506 )
2507 );
2508 }
2509
2510 $elements[] = $this->auto_field(
2511 $field,
2512 array(
2513 'type' => 'e2pdf-html',
2514 'block' => true,
2515 'float' => true,
2516 'properties' => array(
2517 'top' => '20',
2518 'left' => '20',
2519 'right' => '20',
2520 'width' => ($field['time_type'] == 'twelve' ? $width / 3 : $width / 2) . '%',
2521 'height' => 'auto',
2522 'value' => $field['mm_label'],
2523 ),
2524 )
2525 );
2526
2527 if ($field['field_type'] == 'select') {
2528 $elements[] = $this->auto_field(
2529 $field,
2530 array(
2531 'type' => 'e2pdf-select',
2532 'properties' => array(
2533 'top' => '5',
2534 'width' => '100%',
2535 'height' => 'auto',
2536 'options' => implode("\n", $minutes),
2537 'value' => '{' . $field['element_id'] . '-minutes' . $repeater . '}',
2538 ),
2539 )
2540 );
2541 } else {
2542 $elements[] = $this->auto_field(
2543 $field,
2544 array(
2545 'type' => 'e2pdf-input',
2546 'properties' => array(
2547 'top' => '5',
2548 'width' => '100%',
2549 'height' => 'auto',
2550 'value' => '{' . $field['element_id'] . '-minutes' . $repeater . '}',
2551 ),
2552 )
2553 );
2554 }
2555
2556 if ($field['time_type'] == 'twelve') {
2557 $elements[] = $this->auto_field(
2558 $field,
2559 array(
2560 'type' => 'e2pdf-html',
2561 'block' => true,
2562 'float' => true,
2563 'properties' => array(
2564 'top' => '20',
2565 'left' => '20',
2566 'right' => '20',
2567 'width' => ($width / 3) . '%',
2568 'height' => 'auto',
2569 'value' => '',
2570 ),
2571 )
2572 );
2573
2574 $ampm = array(
2575 'am', 'pm',
2576 );
2577
2578 $elements[] = $this->auto_field(
2579 $field,
2580 array(
2581 'type' => 'e2pdf-select',
2582 'properties' => array(
2583 'top' => '5',
2584 'width' => '100%',
2585 'height' => 'auto',
2586 'options' => implode("\n", $ampm),
2587 'value' => '{' . $field['element_id'] . '-ampm' . $repeater . '}',
2588 ),
2589 )
2590 );
2591 }
2592 break;
2593 case 'html':
2594 if ($field['field_label']) {
2595 $elements[] = $this->auto_field(
2596 $field,
2597 array(
2598 'type' => 'e2pdf-html',
2599 'block' => true,
2600 'properties' => array(
2601 'top' => '20',
2602 'left' => '20',
2603 'right' => '20',
2604 'width' => $width . '%',
2605 'height' => 'auto',
2606 'value' => $field['field_label'],
2607 ),
2608 )
2609 );
2610
2611 $elements[] = $this->auto_field(
2612 $field,
2613 array(
2614 'type' => 'e2pdf-html',
2615 'properties' => array(
2616 'top' => '5',
2617 'width' => '100%',
2618 'height' => 'auto',
2619 'value' => $field['variations'],
2620 ),
2621 )
2622 );
2623 } else {
2624 $elements[] = $this->auto_field(
2625 $field,
2626 array(
2627 'type' => 'e2pdf-html',
2628 'block' => true,
2629 'properties' => array(
2630 'top' => '20',
2631 'left' => '20',
2632 'right' => '20',
2633 'width' => $width . '%',
2634 'height' => 'auto',
2635 'value' => $field['variations'],
2636 ),
2637 )
2638 );
2639 }
2640 break;
2641 case 'section':
2642 $section = '';
2643 if ($field['section_title']) {
2644 $section .= '<h2>' . $field['section_title'] . '</h2>';
2645 }
2646 if (isset($field['section_subtitle']) && $field['section_subtitle']) {
2647 $section .= $field['section_subtitle'];
2648 }
2649 if ($section) {
2650 $elements[] = $this->auto_field(
2651 $field,
2652 array(
2653 'type' => 'e2pdf-html',
2654 'block' => true,
2655 'properties' => array(
2656 'top' => '20',
2657 'left' => '20',
2658 'right' => '20',
2659 'width' => $width . '%',
2660 'height' => 'auto',
2661 'value' => $section,
2662 ),
2663 )
2664 );
2665 }
2666 break;
2667 case 'text':
2668 $elements[] = $this->auto_field(
2669 $field,
2670 array(
2671 'type' => 'e2pdf-html',
2672 'block' => true,
2673 'float' => true,
2674 'properties' => array(
2675 'top' => '20',
2676 'left' => '20',
2677 'right' => '20',
2678 'width' => $width . '%',
2679 'height' => 'auto',
2680 'value' => $field['field_label'],
2681 ),
2682 )
2683 );
2684
2685 if (isset($field['input_type']) && $field['input_type'] == 'line') {
2686 $elements[] = $this->auto_field(
2687 $field,
2688 array(
2689 'type' => 'e2pdf-input',
2690 'properties' => array(
2691 'top' => '5',
2692 'width' => '100%',
2693 'height' => 'auto',
2694 'value' => '{' . $field['element_id'] . $repeater . '}',
2695 ),
2696 )
2697 );
2698 } else {
2699 $elements[] = $this->auto_field(
2700 $field,
2701 array(
2702 'type' => 'e2pdf-textarea',
2703 'properties' => array(
2704 'top' => '5',
2705 'width' => '100%',
2706 'height' => 'auto',
2707 'value' => '{' . $field['element_id'] . $repeater . '}',
2708 ),
2709 )
2710 );
2711 }
2712
2713 if (isset($field['description']) && $field['description']) {
2714 $elements[] = $this->auto_field(
2715 $field,
2716 array(
2717 'type' => 'e2pdf-html',
2718 'float' => false,
2719 'properties' => array(
2720 'top' => '5',
2721 'width' => '100%',
2722 'height' => 'auto',
2723 'value' => $field['description'],
2724 ),
2725 )
2726 );
2727 }
2728 break;
2729 case 'upload':
2730 case 'textarea':
2731 $elements[] = $this->auto_field(
2732 $field,
2733 array(
2734 'type' => 'e2pdf-html',
2735 'block' => true,
2736 'float' => true,
2737 'properties' => array(
2738 'top' => '20',
2739 'left' => '20',
2740 'right' => '20',
2741 'width' => $width . '%',
2742 'height' => 'auto',
2743 'value' => $field['field_label'],
2744 ),
2745 )
2746 );
2747 $elements[] = $this->auto_field(
2748 $field,
2749 array(
2750 'type' => 'e2pdf-textarea',
2751 'properties' => array(
2752 'top' => '5',
2753 'width' => '100%',
2754 'height' => 'auto',
2755 'value' => '{' . $field['element_id'] . $repeater . '}',
2756 'text_auto_font_size' => '1',
2757 ),
2758 )
2759 );
2760
2761 if (isset($field['description']) && $field['description']) {
2762 $elements[] = $this->auto_field(
2763 $field,
2764 array(
2765 'type' => 'e2pdf-html',
2766 'float' => false,
2767 'properties' => array(
2768 'top' => '5',
2769 'width' => '100%',
2770 'height' => 'auto',
2771 'value' => $field['description'],
2772 ),
2773 )
2774 );
2775 }
2776 break;
2777 case 'slider':
2778 $elements[] = $this->auto_field(
2779 $field,
2780 array(
2781 'type' => 'e2pdf-html',
2782 'block' => true,
2783 'float' => true,
2784 'properties' => array(
2785 'top' => '20',
2786 'left' => '20',
2787 'right' => '20',
2788 'width' => $width . '%',
2789 'height' => 'auto',
2790 'value' => $field['field_label'],
2791 ),
2792 )
2793 );
2794
2795 if (isset($field['slider_type']) && $field['slider_type'] == 'range') {
2796 $elements[] = $this->auto_field(
2797 $field,
2798 array(
2799 'float' => true,
2800 'type' => 'e2pdf-input',
2801 'properties' => array(
2802 'top' => '5',
2803 'right' => '20',
2804 'width' => '50%',
2805 'height' => 'auto',
2806 'value' => '{' . $field['element_id'] . '-min' . $repeater . '}',
2807 ),
2808 )
2809 );
2810 $elements[] = $this->auto_field(
2811 $field,
2812 array(
2813 'float' => true,
2814 'type' => 'e2pdf-input',
2815 'properties' => array(
2816 'top' => '5',
2817 'left' => '20',
2818 'width' => '50%',
2819 'height' => 'auto',
2820 'value' => '{' . $field['element_id'] . '-max' . $repeater . '}',
2821 ),
2822 )
2823 );
2824 } else {
2825 $elements[] = $this->auto_field(
2826 $field,
2827 array(
2828 'type' => 'e2pdf-input',
2829 'properties' => array(
2830 'top' => '5',
2831 'width' => '100%',
2832 'height' => 'auto',
2833 'value' => '{' . $field['element_id'] . $repeater . '}',
2834 ),
2835 )
2836 );
2837 }
2838 if (isset($field['description']) && $field['description']) {
2839 $elements[] = $this->auto_field(
2840 $field,
2841 array(
2842 'type' => 'e2pdf-html',
2843 'float' => false,
2844 'properties' => array(
2845 'top' => '5',
2846 'width' => '100%',
2847 'height' => 'auto',
2848 'value' => $field['description'],
2849 ),
2850 )
2851 );
2852 }
2853 break;
2854 case 'signature':
2855 $elements[] = $this->auto_field(
2856 $field,
2857 array(
2858 'type' => 'e2pdf-html',
2859 'block' => true,
2860 'float' => true,
2861 'properties' => array(
2862 'top' => '20',
2863 'left' => '20',
2864 'right' => '20',
2865 'width' => $width . '%',
2866 'height' => 'auto',
2867 'value' => $field['field_label'],
2868 ),
2869 )
2870 );
2871 $elements[] = $this->auto_field(
2872 $field,
2873 array(
2874 'type' => 'e2pdf-signature',
2875 'properties' => array(
2876 'top' => '5',
2877 'width' => '100%',
2878 'height' => '150',
2879 'dimension' => '1',
2880 'block_dimension' => '1',
2881 'value' => '{' . $field['element_id'] . $repeater . '}',
2882 ),
2883 )
2884 );
2885
2886 if (isset($field['description']) && $field['description']) {
2887 $elements[] = $this->auto_field(
2888 $field,
2889 array(
2890 'type' => 'e2pdf-html',
2891 'float' => false,
2892 'properties' => array(
2893 'top' => '5',
2894 'width' => '100%',
2895 'height' => 'auto',
2896 'value' => $field['description'],
2897 ),
2898 )
2899 );
2900 }
2901 break;
2902 case 'select':
2903 $elements[] = $this->auto_field(
2904 $field,
2905 array(
2906 'type' => 'e2pdf-html',
2907 'block' => true,
2908 'float' => true,
2909 'properties' => array(
2910 'top' => '20',
2911 'left' => '20',
2912 'right' => '20',
2913 'width' => $width . '%',
2914 'height' => 'auto',
2915 'value' => $field['field_label'],
2916 ),
2917 )
2918 );
2919
2920 if ($field['value_type'] == 'radio') {
2921 foreach ($field['options'] as $opt_key => $option) {
2922 if (is_array($option)) {
2923 $elements[] = $this->auto_field(
2924 $field,
2925 array(
2926 'type' => 'e2pdf-radio',
2927 'properties' => array(
2928 'top' => '5',
2929 'width' => 'auto',
2930 'height' => 'auto',
2931 'value' => '{' . $field['element_id'] . $repeater . '}',
2932 'option' => $option['value'] && !$use_labels ? $option['value'] : $option['label'],
2933 'group' => '{' . $field['element_id'] . $repeater . '}',
2934 ),
2935 )
2936 );
2937 $elements[] = $this->auto_field(
2938 $field,
2939 array(
2940 'type' => 'e2pdf-html',
2941 'float' => true,
2942 'properties' => array(
2943 'left' => '5',
2944 'width' => '100%',
2945 'height' => 'auto',
2946 'value' => $option['label'],
2947 ),
2948 )
2949 );
2950 }
2951 }
2952 } else {
2953 $options_tmp = array();
2954 foreach ($field['options'] as $option) {
2955 $options_tmp[] = $option['value'] && !$use_labels ? $option['value'] : $option['label'];
2956 }
2957 $elements[] = $this->auto_field(
2958 $field,
2959 array(
2960 'type' => 'e2pdf-select',
2961 'properties' => array(
2962 'top' => '5',
2963 'width' => '100%',
2964 'height' => 'auto',
2965 'options' => implode("\n", $options_tmp),
2966 'value' => '{' . $field['element_id'] . $repeater . '}',
2967 ),
2968 )
2969 );
2970 }
2971
2972 if (isset($field['description']) && $field['description']) {
2973 $elements[] = $this->auto_field(
2974 $field,
2975 array(
2976 'type' => 'e2pdf-html',
2977 'float' => false,
2978 'properties' => array(
2979 'top' => '5',
2980 'width' => '100%',
2981 'height' => 'auto',
2982 'value' => $field['description'],
2983 ),
2984 )
2985 );
2986 }
2987 break;
2988 case 'consent':
2989 $elements[] = $this->auto_field(
2990 $field,
2991 array(
2992 'type' => 'e2pdf-html',
2993 'block' => true,
2994 'float' => true,
2995 'properties' => array(
2996 'top' => '20',
2997 'left' => '20',
2998 'right' => '20',
2999 'width' => $width . '%',
3000 'height' => 'auto',
3001 'value' => $field['field_label'],
3002 ),
3003 )
3004 );
3005
3006 $elements[] = $this->auto_field(
3007 $field,
3008 array(
3009 'type' => 'e2pdf-checkbox',
3010 'properties' => array(
3011 'top' => '5',
3012 'width' => 'auto',
3013 'height' => 'auto',
3014 'value' => '{' . $field['element_id'] . $repeater . '}',
3015 'option' => 'checked',
3016 ),
3017 )
3018 );
3019
3020 $elements[] = $this->auto_field(
3021 $field,
3022 array(
3023 'type' => 'e2pdf-html',
3024 'float' => true,
3025 'properties' => array(
3026 'left' => '5',
3027 'width' => '100%',
3028 'height' => 'auto',
3029 'value' => $field['consent_description'],
3030 ),
3031 )
3032 );
3033 break;
3034 case 'checkbox':
3035 $elements[] = $this->auto_field(
3036 $field,
3037 array(
3038 'type' => 'e2pdf-html',
3039 'block' => true,
3040 'float' => true,
3041 'properties' => array(
3042 'top' => '20',
3043 'left' => '20',
3044 'right' => '20',
3045 'width' => $width . '%',
3046 'height' => 'auto',
3047 'value' => $field['field_label'],
3048 ),
3049 )
3050 );
3051
3052 if ($field['value_type'] == 'multiselect') {
3053 $options_tmp = array();
3054 foreach ($field['options'] as $opt_key => $option) {
3055 $options_tmp[] = $option['value'] && !$use_labels ? $option['value'] : $option['label'];
3056 }
3057 $elements[] = $this->auto_field(
3058 $field,
3059 array(
3060 'type' => 'e2pdf-select',
3061 'properties' => array(
3062 'top' => '5',
3063 'width' => '100%',
3064 'height' => '44',
3065 'multiline' => '1',
3066 'options' => implode("\n", $options_tmp),
3067 'value' => '{' . $field['element_id'] . $repeater . '}',
3068 ),
3069 )
3070 );
3071 } else {
3072 foreach ($field['options'] as $opt_key => $option) {
3073 if (is_array($option)) {
3074 $elements[] = $this->auto_field(
3075 $field,
3076 array(
3077 'type' => 'e2pdf-checkbox',
3078 'properties' => array(
3079 'top' => '5',
3080 'width' => 'auto',
3081 'height' => 'auto',
3082 'value' => '{' . $field['element_id'] . $repeater . '}',
3083 'option' => $option['value'] && !$use_labels ? $option['value'] : $option['label'],
3084 ),
3085 )
3086 );
3087 $elements[] = $this->auto_field(
3088 $field,
3089 array(
3090 'type' => 'e2pdf-html',
3091 'float' => true,
3092 'properties' => array(
3093 'left' => '5',
3094 'width' => '100%',
3095 'height' => 'auto',
3096 'value' => $option['label'],
3097 ),
3098 )
3099 );
3100 }
3101 }
3102 }
3103
3104 if (isset($field['description']) && $field['description']) {
3105 $elements[] = $this->auto_field(
3106 $field,
3107 array(
3108 'type' => 'e2pdf-html',
3109 'float' => false,
3110 'properties' => array(
3111 'top' => '5',
3112 'width' => '100%',
3113 'height' => 'auto',
3114 'value' => $field['description'],
3115 ),
3116 )
3117 );
3118 }
3119 break;
3120
3121 case 'radio':
3122 $elements[] = $this->auto_field(
3123 $field,
3124 array(
3125 'type' => 'e2pdf-html',
3126 'block' => true,
3127 'float' => true,
3128 'properties' => array(
3129 'top' => '20',
3130 'left' => '20',
3131 'right' => '20',
3132 'width' => $width . '%',
3133 'height' => 'auto',
3134 'value' => $field['field_label'],
3135 ),
3136 )
3137 );
3138
3139 foreach ($field['options'] as $opt_key => $option) {
3140 if (is_array($option)) {
3141 $elements[] = $this->auto_field(
3142 $field,
3143 array(
3144 'type' => 'e2pdf-radio',
3145 'properties' => array(
3146 'top' => '5',
3147 'width' => 'auto',
3148 'height' => 'auto',
3149 'value' => '{' . $field['element_id'] . $repeater . '}',
3150 'option' => $option['value'] && !$use_labels ? $option['value'] : $option['label'],
3151 'group' => '{' . $field['element_id'] . $repeater . '}',
3152 ),
3153 )
3154 );
3155 $elements[] = $this->auto_field(
3156 $field,
3157 array(
3158 'type' => 'e2pdf-html',
3159 'float' => true,
3160 'properties' => array(
3161 'left' => '5',
3162 'width' => '100%',
3163 'height' => 'auto',
3164 'value' => $option['label'],
3165 ),
3166 )
3167 );
3168 }
3169 }
3170
3171 if (isset($field['description']) && $field['description']) {
3172 $elements[] = $this->auto_field(
3173 $field,
3174 array(
3175 'type' => 'e2pdf-html',
3176 'float' => false,
3177 'properties' => array(
3178 'top' => '5',
3179 'width' => '100%',
3180 'height' => 'auto',
3181 'value' => $field['description'],
3182 ),
3183 )
3184 );
3185 }
3186 break;
3187
3188 case 'gdprcheckbox':
3189 $elements[] = $this->auto_field(
3190 $field,
3191 array(
3192 'type' => 'e2pdf-html',
3193 'block' => true,
3194 'float' => true,
3195 'properties' => array(
3196 'top' => '20',
3197 'left' => '20',
3198 'right' => '20',
3199 'width' => $width . '%',
3200 'height' => 'auto',
3201 'value' => '',
3202 ),
3203 )
3204 );
3205
3206 $elements[] = $this->auto_field(
3207 $field,
3208 array(
3209 'type' => 'e2pdf-checkbox',
3210 'properties' => array(
3211 'top' => '5',
3212 'width' => 'auto',
3213 'height' => 'auto',
3214 'value' => '{' . $field['element_id'] . $repeater . '}',
3215 'option' => 'true',
3216 ),
3217 )
3218 );
3219 $elements[] = $this->auto_field(
3220 $field,
3221 array(
3222 'type' => 'e2pdf-html',
3223 'float' => true,
3224 'properties' => array(
3225 'left' => '5',
3226 'width' => '100%',
3227 'height' => 'auto',
3228 'value' => $field['gdpr_description'],
3229 ),
3230 )
3231 );
3232 break;
3233 default:
3234 break;
3235 }
3236 }
3237 }
3238
3239 $response['page'] = array(
3240 'bottom' => '20',
3241 'top' => '20',
3242 'left' => '20',
3243 'right' => '20',
3244 );
3245
3246 $response['elements'] = $elements;
3247 return $response;
3248 }
3249
3250 // auto field
3251 public function auto_field($field = false, $element = array()) {
3252 if (!$field) {
3253 return false;
3254 }
3255 if (!isset($element['block'])) {
3256 $element['block'] = false;
3257 }
3258 if (!isset($element['float'])) {
3259 $element['float'] = false;
3260 }
3261 return $element;
3262 }
3263
3264 // load actions
3265 public function load_actions() {
3266 add_action('forminator_custom_form_submit_before_set_fields', array($this, 'action_forminator_custom_form_submit_before_set_fields'), 30, 3);
3267 add_action('forminator_custom_form_mail_admin_sent', array($this, 'action_forminator_custom_form_mail_admin_sent'), 30, 5);
3268 }
3269
3270 // load filters
3271 public function load_filters() {
3272 add_filter('forminator_custom_form_mail_admin_message', array($this, 'filter_forminator_mail_message'), 30, 5);
3273 add_filter('forminator_custom_form_submit_response', array($this, 'filter_forminator_custom_form_submit_response'), 30);
3274 add_filter('forminator_custom_form_ajax_submit_response', array($this, 'filter_forminator_custom_form_submit_response'), 30);
3275
3276 // forminator 1.14.11 compatibility fix
3277 add_filter('forminator_form_submit_response', array($this, 'filter_forminator_custom_form_submit_response'), 30);
3278 add_filter('forminator_form_ajax_submit_response', array($this, 'filter_forminator_custom_form_submit_response'), 30);
3279 }
3280
3281 // before set fields action
3282 public function action_forminator_custom_form_submit_before_set_fields($entry, $form_id, $field_data_array) {
3283 if (class_exists('Forminator_API')) {
3284 $form = Forminator_API::get_form($form_id);
3285 if (!is_wp_error($form)) {
3286 if ($form->is_prevent_store()) {
3287 $this->set('field_data_array', $field_data_array);
3288 $this->set('item', $form_id);
3289 $this->set('dataset', 'is_prevent_store');
3290 } elseif ($entry && isset($entry->entry_id)) {
3291 $this->set('dataset', $entry->entry_id);
3292 foreach ($field_data_array as $key => $field) {
3293 if (isset($field['field_array']['custom_value']) && is_string($field['field_array']['custom_value']) && false !== strpos($field['field_array']['custom_value'], '[e2pdf-download')) {
3294 Forminator_Front_Action::$info['field_data_array'][$key]['value'] = $this->filter_content($field['field_array']['custom_value']);
3295 }
3296 }
3297 }
3298 }
3299 }
3300 }
3301
3302 // mail admin sent action
3303 public function action_forminator_custom_form_mail_admin_sent($mail, $custom_form, $data, $entry, $recipients) {
3304 remove_filter('wp_mail', array($this, 'filter_wp_mail'), 30);
3305 $files = $this->helper->get('forminator_attachments');
3306 if (is_array($files) && !empty($files)) {
3307
3308 $saved = $this->helper->get('forminator_saved_attachments');
3309 if (!is_array($saved)) {
3310 $saved = array();
3311 }
3312 foreach ($files as $key => $file) {
3313 if (!in_array($file, $saved, false)) {
3314 $this->helper->delete_dir(dirname($file) . '/');
3315 }
3316 }
3317 $this->helper->deset('forminator_attachments');
3318 $this->helper->deset('forminator_saved_attachments');
3319 }
3320 }
3321
3322 // mail message filter
3323 public function filter_forminator_mail_message($message, $custom_form, $data, $entry, $mail) {
3324 if (isset($message) && false !== strpos($message, '[')) {
3325 $shortcode_tags = array(
3326 'e2pdf-download',
3327 'e2pdf-save',
3328 'e2pdf-attachment',
3329 'e2pdf-adobesign',
3330 'e2pdf-zapier',
3331 );
3332
3333 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $message, $matches);
3334 $tagnames = array_intersect($shortcode_tags, $matches[1]);
3335 if (!empty($tagnames)) {
3336 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $message, $shortcodes);
3337 foreach ($shortcodes[0] as $key => $shortcode_value) {
3338 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
3339 $atts = shortcode_parse_atts($shortcode[3]);
3340 $file = false;
3341 if (!isset($atts['dataset']) && isset($atts['id'])) {
3342 $template = new Model_E2pdf_Template();
3343 $template->load($atts['id']);
3344 if ($template->get('extension') === 'forminator') {
3345 if ($this->get('dataset')) {
3346 $entry_id = $this->get('dataset');
3347 } else {
3348 $entry_id = isset($entry->entry_id) ? $entry->entry_id : false;
3349 }
3350 if ($entry_id) {
3351 if (($shortcode[2] === 'e2pdf-download' || $shortcode[2] === 'e2pdf-view' || $shortcode[2] === 'e2pdf-zapier') && $entry_id == 'is_prevent_store') { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
3352 } else {
3353 if ($entry_id == 'is_prevent_store') {
3354 add_filter('e2pdf_model_shortcode_extension_options', array($this, 'filter_e2pdf_model_shortcode_extension_options'), 30);
3355 }
3356 $atts['dataset'] = $entry_id;
3357 $shortcode[3] .= ' dataset="' . $entry_id . '"';
3358 }
3359 }
3360 }
3361 }
3362 if (!isset($atts['apply'])) {
3363 $shortcode[3] .= ' apply="true"';
3364 }
3365 if (!isset($atts['filter'])) {
3366 $shortcode[3] .= ' filter="true"';
3367 }
3368 if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) {
3369 $file = do_shortcode_tag($shortcode);
3370 if ($file) {
3371 $tmp = false;
3372 if (substr($file, 0, 4) === 'tmp:') {
3373 $file = substr($file, 4);
3374 $tmp = true;
3375 }
3376 if ($shortcode[2] === 'e2pdf-save' || isset($atts['pdf'])) {
3377 if (!$tmp) {
3378 $this->helper->add('forminator_saved_attachments', $file);
3379 }
3380 }
3381 $this->helper->add('forminator_attachments', $file);
3382 }
3383 $message = str_replace($shortcode_value, '', $message);
3384 } else {
3385 $message = str_replace($shortcode_value, do_shortcode_tag($shortcode), $message);
3386 }
3387 remove_filter('e2pdf_model_shortcode_extension_options', array($this, 'filter_e2pdf_model_shortcode_extension_options'), 30);
3388 }
3389
3390 add_filter('wp_mail', array($this, 'filter_wp_mail'), 30);
3391 }
3392 }
3393 return $message;
3394 }
3395
3396 // extension options filter
3397 public function filter_e2pdf_model_shortcode_extension_options($options) {
3398 if ($this->get('dataset') && $this->get('dataset') == 'is_prevent_store') {
3399 $options['field_data_array'] = $this->get('field_data_array');
3400 }
3401 return $options;
3402 }
3403
3404 // submit response filter
3405 public function filter_forminator_custom_form_submit_response($response) {
3406 if (isset($response['message']) && false !== strpos($response['message'], '[') && isset($response['success']) && $response['success']) {
3407 $response['message'] = $this->filter_content($response['message'], 'message');
3408 }
3409 return $response;
3410 }
3411
3412 // content filter
3413 public function filter_content($content, $type = '') {
3414
3415 if (false !== strpos($content, '[')) {
3416 $shortcode_tags = array(
3417 'e2pdf-download',
3418 'e2pdf-save',
3419 'e2pdf-view',
3420 'e2pdf-adobesign',
3421 'e2pdf-zapier',
3422 );
3423 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
3424 $tagnames = array_intersect($shortcode_tags, $matches[1]);
3425 if (!empty($tagnames)) {
3426 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
3427 foreach ($shortcodes[0] as $key => $shortcode_value) {
3428 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
3429 $atts = shortcode_parse_atts($shortcode[3]);
3430 if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
3431 } else {
3432 if (!isset($atts['dataset']) && isset($atts['id'])) {
3433 $template = new Model_E2pdf_Template();
3434 $template->load($atts['id']);
3435 if ($template->get('extension') === 'forminator') {
3436 $entry_id = $this->get('dataset');
3437 if ($entry_id) {
3438 if (($shortcode[2] === 'e2pdf-download' || $shortcode[2] === 'e2pdf-view' || $shortcode[2] === 'e2pdf-zapier') && $entry_id == 'is_prevent_store') { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
3439 } else {
3440 if ($entry_id == 'is_prevent_store') {
3441 add_filter('e2pdf_model_shortcode_extension_options', array($this, 'filter_e2pdf_model_shortcode_extension_options'), 30);
3442 }
3443 $atts['dataset'] = $entry_id;
3444 $shortcode[3] .= ' dataset="' . $entry_id . '"';
3445 }
3446 }
3447 }
3448 }
3449
3450 if (!isset($atts['apply'])) {
3451 $shortcode[3] .= ' apply="true"';
3452 }
3453 if (!isset($atts['filter'])) {
3454 $shortcode[3] .= ' filter="true"';
3455 }
3456 if (!isset($atts['iframe_download']) && $type == 'message') {
3457 $shortcode[3] .= ' iframe_download="true"';
3458 }
3459 $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
3460 remove_filter('e2pdf_model_shortcode_extension_options', array($this, 'filter_e2pdf_model_shortcode_extension_options'), 30);
3461 }
3462 }
3463 }
3464 }
3465 return $content;
3466 }
3467
3468 // wp mail filter
3469 public function filter_wp_mail($args = array()) {
3470 $files = $this->helper->get('forminator_attachments');
3471 if (is_array($files) && !empty($files)) {
3472 foreach ($files as $file) {
3473 $args['attachments'][] = $file;
3474 }
3475 }
3476 $wp_mail = array(
3477 'to' => $args['to'],
3478 'subject' => $args['subject'],
3479 'message' => $args['message'],
3480 'headers' => $args['headers'],
3481 'attachments' => $args['attachments'],
3482 );
3483
3484 return $wp_mail;
3485 }
3486
3487 // styles
3488 public function styles($item_id = false) {
3489 $styles = array();
3490 if (function_exists('forminator_plugin_url') && class_exists('Forminator_API')) {
3491 if (defined('FORMINATOR_VERSION')) {
3492 $version = FORMINATOR_VERSION;
3493 } else {
3494 $version = '0';
3495 }
3496 $styles = array();
3497 if ($item_id) {
3498 $forminator_form = Forminator_API::get_form($item_id);
3499 if (!is_wp_error($forminator_form)) {
3500 $form_settings = isset($forminator_form->settings) ? $forminator_form->settings : array();
3501 if (isset($form_settings['form-style']) && $form_settings['form-style']) {
3502 $form_design = $form_settings['form-style'];
3503 } else {
3504 $form_design = 'default';
3505 }
3506
3507 $styles[] = forminator_plugin_url() . 'assets/forminator-ui/css/forminator-icons.min.css?v=' . $version;
3508 $styles[] = forminator_plugin_url() . 'assets/forminator-ui/css/src/forminator-utilities.min.css?v=' . $version;
3509
3510 if (isset($form_settings['fields-style']) && 'open' === $form_settings['fields-style']) {
3511 $styles[] = forminator_plugin_url() . 'assets/forminator-ui/css/src/grid/forminator-grid.open.min.css?v=' . $version;
3512 } elseif (isset($form_settings['fields-style']) && 'enclosed' === $form_settings['fields-style']) {
3513 $styles[] = forminator_plugin_url() . 'assets/forminator-ui/css/src/grid/forminator-grid.enclosed.min.css?v=' . $version;
3514 }
3515 if ('none' !== $form_design) {
3516 $styles[] = forminator_plugin_url() . 'assets/forminator-ui/css/src/form/forminator-form-' . $form_design . '.base.min.css?v=' . $version;
3517 $styles[] = forminator_plugin_url() . 'assets/forminator-ui/css/src/form/forminator-form-' . $form_design . '.full.min.css?v=' . $version;
3518 $styles[] = forminator_plugin_url() . 'assets/forminator-ui/css/src/form/forminator-form-' . $form_design . '.pagination.min.css?v=' . $version;
3519 $styles[] = forminator_plugin_url() . 'assets/forminator-ui/css/src/form/select2.min.css?v=' . $version;
3520 $styles[] = forminator_plugin_url() . 'assets/forminator-ui/css/src/form/forminator-authentication.min.css?v=' . $version;
3521 }
3522 $styles[] = plugins_url('css/extension/forminator.css?v=' . time(), $this->helper->get('plugin_file_path'));
3523 }
3524 }
3525 }
3526 return $styles;
3527 }
3528 }
3529