PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.23
E2Pdf – Export Pdf Tool for WordPress v1.32.23
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-caldera.php

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

1,580 lines 75.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * E2Pdf Caldera Extension
5 * @copyright Copyright 2017 https://e2pdf.com
6 * @license GPLv3
7 * @version 1
8 * @link https://e2pdf.com
9 * @since 0.01.47
10 */
11 if (!defined('ABSPATH')) {
12 die('Access denied.');
13 }
14
15 class Extension_E2pdf_Caldera extends Model_E2pdf_Model {
16
17 private $options;
18 private $info = array(
19 'key' => 'caldera',
20 'title' => 'Caldera Forms',
21 );
22
23 /**
24 * Get info about extension
25 * @param string $key - Key to get assigned extension info value
26 * @return array|string - Extension Key and Title or Assigned extension info value
27 */
28 public function info($key = false) {
29 if ($key && isset($this->info[$key])) {
30 return $this->info[$key];
31 } else {
32 return array(
33 $this->info['key'] => $this->info['title'],
34 );
35 }
36 }
37
38 /**
39 * Check if needed plugin active
40 * @return bool - Activated/Not Activated plugin
41 */
42 public function active() {
43 if (defined('E2PDF_CALDERA_EXTENSION') || $this->helper->load('extension')->is_plugin_active('caldera-forms/caldera-core.php')) {
44 return true;
45 }
46 return false;
47 }
48
49 /**
50 * Set option
51 * @param string $key - Key of option
52 * @param string $value - Value of option
53 * @return bool - Status of setting option
54 */
55 public function set($key, $value) {
56 if (!isset($this->options)) {
57 $this->options = new stdClass();
58 }
59 $this->options->$key = $value;
60 switch ($key) {
61 case 'item':
62 global $form;
63 $this->set('cached_form', false);
64 $this->set('cached_tmp_form', false);
65 if (class_exists('Caldera_Forms_Forms') && $this->get('item')) {
66 if ($form && isset($form['ID'])) {
67 $this->set('cached_tmp_form', $form);
68 if ($form['ID'] != $this->get('item')) {
69 $form = Caldera_Forms_Forms::get_form($this->get('item'));
70 }
71 }
72 if ($form == null) {
73 $form = Caldera_Forms_Forms::get_form($this->get('item'));
74 }
75 if (isset($form['_last_updated'])) {
76 $this->set('cached_form', $form);
77 }
78 }
79 break;
80 case 'dataset':
81 $this->set('cached_entry', false);
82 if (class_exists('Caldera_Forms_Entry') && class_exists('Caldera_Forms') && $this->get('cached_form') && $this->get('dataset')) {
83 $entry = new Caldera_Forms_Entry($this->get('cached_form'), $this->get('dataset'));
84 if ($entry->found()) {
85 $this->set('cached_entry', $entry);
86 }
87 if (!empty($this->get('cached_form')['is_connected_form'])) {
88 $form = $this->get('cached_form');
89 $form['processors']['_connected_form'] = array(
90 'type' => 'form-connector',
91 'runtimes' => array(
92 'insert' => true,
93 ),
94 'config' => array(),
95 );
96 $form_fields = array();
97 $meta = Caldera_Forms::get_entry_meta((int) $this->get('dataset'), $form);
98 if (!empty($meta['form-connector']['data']['_connected_form']['entry']['form']['meta_value'])) {
99 foreach ((array) $meta['form-connector']['data']['_connected_form']['entry']['form']['meta_value'] as $form_meta) {
100 $form_fields = array_merge($form_fields, $form_meta);
101 }
102 }
103 if (!empty($form['condition_points']['forms'])) {
104 $form['fields'] = array();
105 foreach ($form['condition_points']['forms'] as $connected_id => $connected_form) {
106 if (!empty($form_fields[$connected_id]) && !empty($connected_form['fields'])) {
107 $form['fields'] = array_merge($form['fields'], $connected_form['fields']);
108 }
109 }
110
111 if (function_exists('cf_form_connector_setup_processors_meta')) {
112 add_filter('caldera_forms_get_entry_detail', 'cf_form_connector_setup_processors_meta', 10, 3);
113 }
114 }
115 if (isset($form['node']) && function_exists('cf_from_connector_merge_fields')) {
116 $form['fields'] = cf_from_connector_merge_fields($form);
117 }
118 $this->set('cached_form', $form);
119 }
120 }
121 break;
122 default:
123 break;
124 }
125 return true;
126 }
127
128 /**
129 * Get option by key
130 * @param string $key - Key to get assigned option value
131 * @return mixed
132 */
133 public function get($key) {
134 if (isset($this->options->$key)) {
135 $value = $this->options->$key;
136 } else {
137 switch ($key) {
138 case 'args':
139 $value = array();
140 break;
141 default:
142 $value = false;
143 break;
144 }
145 }
146 return $value;
147 }
148
149 /**
150 * Get items to work with
151 * @return array() - List of available items
152 */
153 public function items() {
154 $content = array();
155 if (class_exists('Caldera_Forms_Forms')) {
156 $forms = Caldera_Forms_Forms::get_forms(true);
157 if ($forms) {
158 foreach ($forms as $key => $value) {
159 $content[] = $this->item($value['ID']);
160 }
161 }
162 }
163 return $content;
164 }
165
166 /**
167 * Get entries for export
168 * @param int $item_id - Item ID
169 * @param string $name - Entries names
170 * @return array() - Entries list
171 */
172 public function datasets($item_id = false, $name = false) {
173 $datasets = array();
174 if (class_exists('Caldera_Forms_Admin') && $item_id) {
175 $form = Caldera_Forms_Admin::get_entries($item_id, 1, 9999999999);
176 if ($form && isset($form['entries']) && is_array($form['entries'])) {
177 $this->set('item', $item_id);
178 foreach ($form['entries'] as $key => $entry) {
179 $this->set('dataset', $entry['_entry_id']);
180 $entry_title = $this->render($name);
181 if (!$entry_title) {
182 $entry_title = $entry['_date'];
183 }
184 $datasets[] = array(
185 'key' => $entry['_entry_id'],
186 'value' => $entry_title,
187 );
188 }
189 }
190 }
191 return $datasets;
192 }
193
194 /**
195 * Get Dataset Actions
196 * @param int $dataset_id - Dataset ID
197 * @return object
198 */
199 public function get_dataset_actions($dataset_id = false) {
200 $dataset_id = (int) $dataset_id;
201 if (!$dataset_id) {
202 return false;
203 }
204 $actions = new stdClass();
205 $actions->view = false;
206 $actions->delete = false;
207 return $actions;
208 }
209
210 /**
211 * Get Template Actions
212 * @param int $template - Template ID
213 * @return object
214 */
215 public function get_template_actions($template = false) {
216 $template = (int) $template;
217 if (!$template) {
218 return;
219 }
220 $actions = new stdClass();
221 $actions->delete = false;
222 return $actions;
223 }
224
225 /**
226 * Get item
227 * @param string $item_id - Item ID
228 * @return object - Item
229 */
230 public function item($item_id = false) {
231 if (!$item_id && $this->get('item')) {
232 $item_id = $this->get('item');
233 }
234 $form = false;
235 if (class_exists('Caldera_Forms_Forms')) {
236 $form = Caldera_Forms_Forms::get_form($item_id);
237 }
238 $item = new stdClass();
239 if ($form) {
240 $item->id = (string) $form['ID'];
241 $item->url = $this->helper->get_url(
242 array(
243 'page' => 'caldera-forms',
244 'edit' => $form['ID'],
245 )
246 );
247 $item->name = isset($form['name']) ? $form['name'] : '';
248 } else {
249 $item->id = '';
250 $item->url = '';
251 $item->name = '';
252 }
253 return $item;
254 }
255
256 /**
257 * Render value according to content
258 * @param string $value - Content
259 * @param string $type - Type of rendering value
260 * @param array $field - Field details
261 * @return string - Fully rendered value
262 */
263 public function render($value, $field = array(), $convert_shortcodes = true, $raw = false) {
264 $value = $this->render_shortcodes($value, $field);
265 if (!$raw) {
266 $value = $this->strip_shortcodes($value);
267 $value = $this->convert_shortcodes($value, $convert_shortcodes, isset($field['type']) && $field['type'] == 'e2pdf-html' ? true : false);
268 $value = $this->helper->load('field')->render_checkbox($value, $this, $field);
269 }
270 return $value;
271 }
272
273 /**
274 * Render shortcodes which available in this extension
275 * @param string $value - Content
276 * @param string $type - Type of rendering value
277 * @param array $field - Field details
278 * @return string - Value with rendered shortcodes
279 */
280 public function render_shortcodes($value, $field = array()) {
281 $element_id = isset($field['element_id']) ? $field['element_id'] : false;
282 if ($this->verify()) {
283 if (false !== strpos($value, '[')) {
284 $value = $this->helper->load('field')->pre_shortcodes($value, $this, $field);
285 $value = $this->helper->load('field')->inner_shortcodes($value, $this, $field);
286 $value = $this->helper->load('field')->wrapper_shortcodes($value, $this, $field);
287 }
288 $value = $this->helper->load('field')->do_shortcodes($value, $this, $field);
289
290 add_filter('caldera_forms_magic_form', array($this, 'filter_caldera_forms_magic_form'), 30, 2);
291 add_filter('caldera_forms_render_get_field', array($this, 'filter_caldera_forms_render_get_field'), 30, 2);
292 add_filter('caldera_forms_pre_do_field_magic', array($this, 'filter_caldera_forms_pre_do_field_magic'), 30, 5);
293 add_filter('caldera_forms_get_field_entry', array($this, 'filter_caldera_forms_get_field_entry'), 30, 4);
294 add_filter('caldera_forms_pre_check_condition', array($this, 'filter_caldera_forms_pre_check_condition'), 30);
295
296 global $form;
297 if ($this->get('cached_form')) {
298 $form = $this->get('cached_form');
299 }
300 $value = Caldera_Forms::do_magic_tags($value, $this->get('dataset'));
301 if ($this->get('cached_tmp_form')) {
302 $form = $this->get('cached_tmp_form');
303 }
304 $value = $this->helper->load('field')->render(
305 apply_filters('e2pdf_extension_render_shortcodes_pre_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false),
306 $this,
307 $field
308 );
309
310 remove_filter('caldera_forms_magic_form', array($this, 'filter_caldera_forms_magic_form'), 30);
311 remove_filter('caldera_forms_render_get_field', array($this, 'filter_caldera_forms_render_get_field'), 30);
312 remove_filter('caldera_forms_pre_do_field_magic', array($this, 'filter_caldera_forms_pre_do_field_magic'), 30);
313 remove_filter('caldera_forms_get_field_entry', array($this, 'filter_caldera_forms_get_field_entry'), 30);
314 remove_filter('caldera_forms_pre_check_condition', array($this, 'filter_caldera_forms_pre_check_condition'), 30);
315 }
316 return apply_filters(
317 'e2pdf_extension_render_shortcodes_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false
318 );
319 }
320
321 /**
322 * Strip unused shortcodes
323 * @param string $value - Content
324 * @return string - Value with removed unused shortcodes
325 */
326 public function strip_shortcodes($value) {
327 $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
328 $value = preg_replace('~%[a-z0-9_]*%~', '', $value);
329 return $value;
330 }
331
332 // strip math
333 public function strip_math($value, &$replacements) {
334 if ($value) {
335 preg_match_all('/%[a-z0-9_]*%/', $value, $matches);
336 foreach ($matches[0] as $match) {
337 $index = count($replacements) + 1;
338 $replacements[] = $match;
339 $value = str_replace($match, '%' . $index . '$s', $value);
340 }
341 }
342 return $value;
343 }
344
345 /**
346 * Convert shortcodes inside value string
347 * @param string $value - Value string
348 * @param bool $to - Convert From/To
349 * @return string - Converted value
350 */
351 public function convert_shortcodes($value, $to = false, $html = false) {
352 if ($value) {
353 if ($to) {
354 $value = stripslashes_deep($value);
355 $value = str_replace('&#91;', '[', $value);
356 if (!$html) {
357 $value = wp_specialchars_decode($value, ENT_QUOTES);
358 }
359 } else {
360 $value = str_replace('[', '&#91;', $value);
361 }
362 }
363 return $value;
364 }
365
366 /**
367 * Verify if item and dataset exists
368 * @return bool - item and dataset exists
369 */
370 public function verify() {
371 if ($this->get('cached_entry')) {
372 return true;
373 }
374 return false;
375 }
376
377 /**
378 * Create Form based on uploaded PDF
379 * @param object $template - Template Object to work with
380 * @param array $data - Settings to create labels/shortcodes
381 * @return object - Mapped Template Object
382 */
383 public function auto_form($template, $data = array()) {
384 if ($template->get('ID')) {
385 $auto_form_label = isset($data['auto_form_label']) && $data['auto_form_label'] ? $data['auto_form_label'] : false;
386 $auto_form_shortcode = isset($data['auto_form_shortcode']) ? true : false;
387 $form = array(
388 '_last_updated' => date('r'),
389 'success' => sprintf(__('Success. [e2pdf-download id="%s"]', 'e2pdf'), $template->get('ID')),
390 'name' => $template->get('title'),
391 'db_support' => '1',
392 'hide_form' => '1',
393 'form_ajax' => '1',
394 'custom_callback' => '',
395 'fields' => array(),
396 'layout_grid' => array(
397 'fields' => array(),
398 'strucutre' => '',
399 ),
400 'settings' => array(
401 'responsive' => array(
402 'break_point' => 'sm',
403 ),
404 ),
405 );
406 $pages = $template->get('pages');
407 $checkboxes = array();
408 $radios = array();
409 foreach ($pages as $page_key => $page) {
410 if (isset($page['elements']) && !empty($page['elements'])) {
411 foreach ($page['elements'] as $element_key => $element) {
412 $type = false;
413 $label = '';
414 if ($element['type'] == 'e2pdf-input' || $element['type'] == 'e2pdf-signature') {
415 $type = 'text';
416 $label = 'Text';
417 } elseif ($element['type'] == 'e2pdf-textarea') {
418 $type = 'paragraph';
419 $label = 'Textarea';
420 } elseif ($element['type'] == 'e2pdf-select') {
421 $type = 'dropdown';
422 $label = 'Select';
423 $options = array();
424 $field_options = array();
425 if (isset($element['properties']['options'])) {
426 $field_options = explode("\n", $element['properties']['options']);
427 foreach ($field_options as $option) {
428 $option_id = 'opt' . $this->random();
429 $options[$option_id] = array(
430 'calc_value' => '',
431 'label' => $option,
432 'value' => $option,
433 );
434 }
435 }
436 } elseif ($element['type'] == 'e2pdf-checkbox') {
437 $field_key = array_search($element['name'], array_column($checkboxes, 'name'), false);
438 if ($field_key !== false) {
439 $option_id = 'opt' . $this->random();
440 $checkboxes[$field_key]['options'][$option_id] = array(
441 'calc_value' => $element['properties']['option'],
442 'label' => $element['properties']['option'],
443 'value' => $element['properties']['option'],
444 );
445 $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $checkboxes[$field_key]['element_id'] . '%';
446 } else {
447 $type = 'checkbox';
448 $label = 'Checkbox';
449 }
450 } elseif ($element['type'] == 'e2pdf-radio') {
451 if (isset($element['properties']['group']) && $element['properties']['group']) {
452 $element['name'] = $element['properties']['group'];
453 } else {
454 $element['name'] = $element['element_id'];
455 }
456 $field_key = array_search($element['name'], array_column($radios, 'name'), false);
457 if ($field_key !== false) {
458 $option_id = 'opt' . $this->random();
459 $radios[$field_key]['options'][$option_id] = array(
460 'calc_value' => $element['properties']['option'],
461 'label' => $element['properties']['option'],
462 'value' => $element['properties']['option'],
463 );
464 $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $radios[$field_key]['element_id'] . '%';
465 } else {
466 $type = 'radio';
467 $label = 'Radio';
468 }
469 }
470 if ($type) {
471 $labels = array();
472 if ($auto_form_shortcode) {
473 $labels[] = '%element_' . $element['element_id'] . '%';
474 }
475 if ($auto_form_label && $auto_form_label == 'value' && isset($element['value']) && $element['value']) {
476 $labels[] = $element['value'];
477 } elseif ($auto_form_label && $auto_form_label == 'name' && isset($element['name']) && $element['name']) {
478 $labels[] = $element['name'];
479 }
480 if ($type == 'checkbox' || $type == 'radio') {
481 $field_id = 'opt' . $this->random();
482 $field_data = array(
483 'name' => $element['name'],
484 'element_id' => $element['element_id'],
485 'label' => !empty($labels) ? implode(' ', $labels) : $label,
486 'options' => array(
487 $field_id => array(
488 'calc_value' => $element['properties']['option'],
489 'label' => $element['properties']['option'],
490 'value' => $element['properties']['option'],
491 ),
492 ),
493 );
494 if ($type == 'checkbox') {
495 $checkboxes[] = $field_data;
496 } else {
497 $radios[] = $field_data;
498 }
499 } else {
500 $field_id = 'fld_' . $this->random();
501 $form['fields'][$field_id] = array(
502 'ID' => $field_id,
503 'slug' => 'element_' . $element['element_id'],
504 'type' => $type,
505 'label' => !empty($labels) ? implode(' ', $labels) : $label,
506 );
507
508 if ($type == 'select') {
509 $form['fields'][$field_id]['config'] = array(
510 'option' => $options,
511 );
512 }
513 }
514 $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $element['element_id'] . '%';
515 if (isset($element['properties']['esig'])) {
516 unset($pages[$page_key]['elements'][$element_key]['properties']['esig']);
517 }
518 }
519 }
520 }
521 }
522 foreach ($checkboxes as $element) {
523 $field_id = 'fld_' . $this->random();
524 $form['fields'][$field_id] = array(
525 'ID' => $field_id,
526 'slug' => 'element_' . $element['element_id'],
527 'type' => 'checkbox',
528 'label' => $element['label'],
529 'config' => array(
530 'option' => $element['options'],
531 ),
532 );
533 }
534 foreach ($radios as $element) {
535 $field_id = 'fld_' . $this->random();
536 $form['fields'][$field_id] = array(
537 'ID' => $field_id,
538 'slug' => 'element_' . $element['element_id'],
539 'type' => 'radio',
540 'label' => $element['label'],
541 'config' => array(
542 'option' => $element['options'],
543 ),
544 );
545 }
546 $field_id = 'fld_' . $this->random();
547 $form['fields'][$field_id] = array(
548 'ID' => $field_id,
549 'slug' => 'submit',
550 'type' => 'button',
551 'label' => 'Submit',
552 'class' => 'btn btn-default',
553 );
554
555 $fields = array_keys($form['fields']);
556 $x = 1;
557 foreach ($fields as $field) {
558 $form['layout_grid']['fields'][$field] = $x . ':1';
559 if ($x == 1) {
560 $form['layout_grid']['structure'] .= '12';
561 } else {
562 $form['layout_grid']['structure'] .= '|12';
563 }
564 $x++;
565 }
566 $item = Caldera_Forms_Forms::create_form($form);
567 if ($item) {
568 $template->set('item', $item['ID']);
569 $template->set('pages', $pages);
570 }
571 }
572 return $template;
573 }
574
575 /**
576 * Generate Random number for Field ID
577 * @return int - Generated number
578 */
579 private function random() {
580 return round((float) rand() / (float) getrandmax() * 10000000);
581 }
582
583 /**
584 * Init Visual Mapper data
585 * @return bool|string - HTML data source for Visual Mapper
586 */
587 public function visual_mapper() {
588 $forms = array();
589 $source = '';
590 $html = '';
591 if ($this->get('item') && class_exists('Caldera_Forms') && class_exists('Caldera_Forms_Forms') && class_exists('Caldera_Forms_Field_Util')) {
592 add_filter('caldera_forms_render_get_form', array($this, 'filter_caldera_forms_render_get_form'));
593 $form = Caldera_Forms_Forms::get_form($this->get('item'));
594 if (!empty($form['is_connected_form']) && isset($form['node']) && !empty($form['node'])) {
595 foreach ($form['node'] as $node) {
596 if (isset($node['form']) && $node['form']) {
597 $source .= Caldera_Forms::render_form($node['form']);
598 $forms[] = Caldera_Forms_Forms::get_form($node['form']);
599 }
600 }
601 } else {
602 $source = Caldera_Forms::render_form($this->get('item'));
603 }
604 remove_filter('caldera_forms_render_get_form', array($this, 'filter_caldera_forms_render_get_form'));
605 if ($source) {
606 $dom = new DOMDocument();
607 $html = $this->helper->load('convert')->load_html($source, $dom, true);
608 }
609 if (!$source) {
610 return '<div class="e2pdf-vm-error">' . __("The form source is empty or doesn't exist", 'e2pdf') . '</div>';
611 } elseif (!$html) {
612 return '<div class="e2pdf-vm-error">' . __('The form could not be parsed due the incorrect HTML', 'e2pdf') . '</div>';
613 } else {
614 $xml = $this->helper->load('xml');
615 $xpath = new DomXPath($dom);
616
617 $conditional_fields = $xpath->query("//*[contains(@class, 'caldera-forms-conditional-field')]");
618 foreach ($conditional_fields as $element) {
619 $conditional_field_id = $xml->get_node_value($element, 'data-field-id');
620 if ($conditional_field_id) {
621 preg_match('/<script type="text\/html" id="conditional-' . $conditional_field_id . '-tmpl">(.*?)<\/script>/s', $source, $matches);
622 if (isset($matches[1])) {
623 $conditional_dom = new DOMDocument();
624 $conditional_dom_html = $this->helper->load('convert')->load_html($matches[1], $dom);
625 if ($conditional_dom_html) {
626 $element->appendChild($dom->importNode($conditional_dom->documentElement, true));
627 }
628 }
629 }
630 }
631
632 // remove by name
633 $remove_by_name = array(
634 '_cf_verify',
635 '_wp_http_referer',
636 '_cf_frm_id',
637 '_cf_frm_ct',
638 'cfajax',
639 );
640 foreach ($remove_by_name as $key => $name) {
641 $elements = $xpath->query('//*[@name="' . $name . '"]');
642 foreach ($elements as $element) {
643 $element->parentNode->removeChild($element);
644 }
645 }
646
647 // remove by class
648 $remove_by_class = array(
649 'live-gravatar',
650 );
651 foreach ($remove_by_class as $key => $class) {
652 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
653 foreach ($elements as $element) {
654 $element->parentNode->removeChild($element);
655 }
656 }
657
658 // remove by tag
659 $remove_by_tag = array(
660 'script',
661 );
662 foreach ($remove_by_tag as $key => $tag) {
663 $elements = $xpath->query('//' . $tag);
664 foreach ($elements as $element) {
665 $element->parentNode->removeChild($element);
666 }
667 }
668
669 $fields = $xpath->query("//*[contains(@name, 'fld_')]");
670 foreach ($fields as $element) {
671 $field_id = false;
672 if ($xml->get_node_value($element, 'type') == 'checkbox') {
673 preg_match('/(.*?)\[(.*?)\]/i', $xml->get_node_value($element, 'name'), $matches);
674 if (isset($matches[1])) {
675 $field_id = $matches[1];
676 }
677 } else {
678 $field_id = $xml->get_node_value($element, 'name');
679 }
680
681 // modify rating field
682 if ($xml->get_node_value($element, 'data-type') == 'star') {
683 $xml->set_node_value($element, 'style', '');
684 }
685
686 // modify range field
687 if ($xml->get_node_value($element, 'type') == 'range') {
688 $xml->set_node_value($element, 'style', '', true);
689 $xml->set_node_value($element, 'class', 'col-xs-12', true);
690 $next_element = $xpath->query('.//following-sibling::div[1]', $element->parentNode)->item(0);
691 if ($next_element) {
692 $next_element->parentNode->removeChild($next_element);
693 }
694 }
695
696 if ($field_id) {
697 if (!empty($form['is_connected_form'])) {
698 foreach ($forms as $sub_form) {
699 $field = Caldera_Forms_Field_Util::get_field($field_id, $sub_form);
700 if ($field && isset($field['slug'])) {
701 $xml->set_node_value($element, 'name', '%' . $field['slug'] . '%');
702 break;
703 }
704 }
705 } else {
706 $field = Caldera_Forms_Field_Util::get_field($field_id, $form);
707 if ($field && isset($field['slug'])) {
708 $xml->set_node_value($element, 'name', '%' . $field['slug'] . '%');
709 }
710 }
711 }
712 }
713
714 // calculation
715 $calculation_fields = $xpath->query("//input[@data-type='calculation']");
716 foreach ($calculation_fields as $element) {
717 $xml->set_node_value($element, 'type', 'text');
718 $xml->set_node_value($element, 'class', $xml->get_node_value($element, 'class') . ' form-control');
719 $calculation_text = $xpath->query('.//h3', $element->parentNode)->item(0);
720 if ($calculation_text) {
721 $element->parentNode->removeChild($calculation_text);
722 }
723 }
724
725 // file upload
726 $file_uploads = $xpath->query("//input[@type='file']");
727 foreach ($file_uploads as $element) {
728 $xml->set_node_value($element, 'class', $xml->get_node_value($element, 'type') . ' form-control');
729 }
730
731 // toggle
732 $toggle_gorups = $xpath->query("//*[contains(@class, 'cf-toggle-switch')]");
733 foreach ($toggle_gorups as $element) {
734 $toggle_elements = $xpath->query(".//*[contains(@class, 'cf-toggle-group-buttons')]//a", $element);
735 foreach ($toggle_elements as $sub_element) {
736 if ($sub_element->attributes->getNamedItem('id')) {
737 $toggle_id = $xml->get_node_value($sub_element, 'id');
738 $radio = $xpath->query(".//input[@id='{$toggle_id}']", $element)->item(0);
739 if ($radio) {
740 $radio_cloned = $radio->cloneNode(true);
741 $xml->set_node_value($radio_cloned, 'style', 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;');
742 $sub_element->appendChild($radio_cloned);
743 }
744 }
745 }
746 }
747
748 // ajax uploader
749 $advanced_uploaders = $xpath->query("//*[contains(@class, 'cf-uploader-trigger')]");
750 foreach ($advanced_uploaders as $element) {
751 $input = $xpath->query(".//input[@type='hidden']", $element->parentNode)->item(0);
752 $attr = $dom->createAttribute('style');
753 $attr->value = 'position: relative;';
754 $element->appendChild($attr);
755 if ($input) {
756 $input_cloned = $input->cloneNode(true);
757 $xml->set_node_value($input_cloned, 'style', 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;');
758 $xml->set_node_value($input_cloned, 'type', 'text');
759 $element->appendChild($input_cloned);
760 }
761 }
762
763 $textareas = $xpath->query('//textarea');
764 foreach ($textareas as $element) {
765 $xml->set_node_value($element, 'rows', '4');
766 }
767
768 $submit_buttons = $xpath->query("//input[@type='submit']");
769 foreach ($submit_buttons as $element) {
770 $element->parentNode->removeChild($element);
771 }
772 if (defined('LIBXML_HTML_NOIMPLIED') && defined('LIBXML_HTML_NODEFDTD')) {
773 return str_replace(array('<html>', '</html>'), '', $dom->saveHTML());
774 } else {
775 return $dom->saveHTML();
776 }
777 }
778 }
779 return false;
780 }
781
782 /**
783 * Auto Generate of Template for this extension
784 * @return array - List of elements
785 */
786 public function auto() {
787 $response = array();
788 $elements = array();
789 $fields = array();
790 $forms = array();
791 if (class_exists('Caldera_Forms_Forms')) {
792 $form = Caldera_Forms_Forms::get_form($this->get('item'));
793 if (!empty($form['is_connected_form']) && isset($form['node']) && !empty($form['node'])) {
794 foreach ($form['node'] as $node) {
795 if (isset($node['form']) && $node['form']) {
796 $sub_form = Caldera_Forms_Forms::get_form($node['form']);
797 $forms[] = $sub_form;
798 if ($sub_form && isset($sub_form['fields']) && is_array($sub_form['fields'])) {
799 $fields = array_merge($fields, $sub_form['fields']);
800 }
801 }
802 }
803 } else {
804 $forms[] = $form;
805 $fields = $form['fields'];
806 }
807 foreach ($forms as $sub_form) {
808 if (isset($sub_form['layout_grid']['structure']) && $sub_form['layout_grid']['structure']) {
809 $sub_form['layout_grid']['structure'] = str_replace('#', '|', $sub_form['layout_grid']['structure']);
810 }
811 if ($sub_form && isset($sub_form['layout_grid']['structure']) && isset($sub_form['layout_grid']['fields'])) {
812 $struct = explode('|', $sub_form['layout_grid']['structure']);
813 foreach ($struct as $row_num => $row) {
814 $float = false;
815 $columns = explode(':', $row);
816 foreach ($columns as $column_num => $column) {
817 $column_fields = array_keys($sub_form['layout_grid']['fields'], ($row_num + 1) . ':' . ($column_num + 1));
818 $width = 100 / (12 / $column) . '%';
819 foreach ($column_fields as $column_field_key) {
820 if (isset($fields[$column_field_key])) {
821 $field = $fields[$column_field_key];
822 switch ($field['type']) {
823 case 'text':
824 case 'email':
825 case 'phone_better':
826 case 'phone_better':
827 case 'number':
828 case 'phone':
829 case 'url':
830 case 'date_picker':
831 case 'color_picker':
832 case 'credit_card_number':
833 case 'credit_card_exp':
834 case 'credit_card_cvc':
835 case 'calculation':
836 case 'range_slider':
837 case 'star_rating':
838 case 'utm':
839 $elements[] = $this->auto_field(
840 $field,
841 array(
842 'type' => 'e2pdf-html',
843 'block' => true,
844 'float' => $float,
845 'properties' => array(
846 'top' => '20',
847 'left' => '20',
848 'right' => '20',
849 'width' => $width,
850 'height' => 'auto',
851 'value' => $field['label'],
852 ),
853 )
854 );
855
856 $elements[] = $this->auto_field(
857 $field,
858 array(
859 'type' => 'e2pdf-input',
860 'properties' => array(
861 'top' => '5',
862 'width' => '100%',
863 'height' => 'auto',
864 'value' => '%' . $field['slug'] . '%',
865 ),
866 )
867 );
868 break;
869 case 'file':
870 case 'advanced_file':
871 case 'cf2_file':
872 case 'paragraph':
873 $elements[] = $this->auto_field(
874 $field,
875 array(
876 'type' => 'e2pdf-html',
877 'block' => true,
878 'float' => $float,
879 'properties' => array(
880 'top' => '20',
881 'left' => '20',
882 'right' => '20',
883 'width' => $width,
884 'height' => 'auto',
885 'value' => $field['label'],
886 ),
887 )
888 );
889
890 $elements[] = $this->auto_field(
891 $field,
892 array(
893 'type' => 'e2pdf-textarea',
894 'properties' => array(
895 'top' => '5',
896 'width' => '100%',
897 'height' => '150',
898 'value' => '%' . $field['slug'] . '%',
899 ),
900 )
901 );
902 break;
903 case 'wysiwyg':
904 case 'html':
905 case 'summary':
906 $elements[] = $this->auto_field(
907 $field,
908 array(
909 'type' => 'e2pdf-html',
910 'block' => true,
911 'float' => $float,
912 'properties' => array(
913 'top' => '20',
914 'left' => '20',
915 'right' => '20',
916 'width' => $width,
917 'height' => 'auto',
918 'value' => $field['label'],
919 ),
920 )
921 );
922
923 $elements[] = $this->auto_field(
924 $field,
925 array(
926 'type' => 'e2pdf-html',
927 'properties' => array(
928 'top' => '5',
929 'width' => '100%',
930 'height' => '150',
931 'value' => '%' . $field['slug'] . '%',
932 ),
933 )
934 );
935 break;
936 case 'dropdown':
937 case 'filtered_select2':
938 case 'states':
939 $elements[] = $this->auto_field(
940 $field,
941 array(
942 'type' => 'e2pdf-html',
943 'block' => true,
944 'float' => $float,
945 'properties' => array(
946 'top' => '20',
947 'left' => '20',
948 'right' => '20',
949 'width' => $width,
950 'height' => 'auto',
951 'value' => $field['label'],
952 ),
953 )
954 );
955
956 $options_tmp = array();
957
958 if (isset($field['config']['option']) && is_array($field['config']['option'])) {
959 foreach ($field['config']['option'] as $opt_key => $option) {
960 if (is_array($option)) {
961 $options_tmp[] = $option['value'];
962 }
963 }
964 }
965
966 if ($field['type'] == 'states' && defined('CFCORE_PATH')) {
967 if (file_exists(CFCORE_PATH . 'fields/states/field.php')) {
968 $contents = file_get_contents(CFCORE_PATH . 'fields/states/field.php');
969 preg_match_all('/<option value="(.*?)">(.*?)<\/option>/', $contents, $matches);
970 if (isset($matches[1])) {
971 foreach ($matches[1] as $state) {
972 $options_tmp[] = $state;
973 }
974 }
975 }
976 }
977
978 $elements[] = $this->auto_field(
979 $field,
980 array(
981 'type' => 'e2pdf-select',
982 'properties' => array(
983 'top' => '5',
984 'width' => '100%',
985 'height' => 'auto',
986 'options' => implode("\n", $options_tmp),
987 'value' => '%' . $field['slug'] . '%',
988 ),
989 )
990 );
991 break;
992 case 'checkbox':
993 $elements[] = $this->auto_field(
994 $field,
995 array(
996 'type' => 'e2pdf-html',
997 'block' => true,
998 'float' => $float,
999 'properties' => array(
1000 'top' => '20',
1001 'left' => '20',
1002 'right' => '20',
1003 'width' => $width,
1004 'height' => 'auto',
1005 'value' => $field['label'],
1006 ),
1007 )
1008 );
1009
1010 if (isset($field['config']['option']) && is_array($field['config']['option'])) {
1011 foreach ($field['config']['option'] as $opt_key => $option) {
1012 if (is_array($option)) {
1013 $elements[] = $this->auto_field(
1014 $field,
1015 array(
1016 'type' => 'e2pdf-checkbox',
1017 'properties' => array(
1018 'top' => '5',
1019 'width' => 'auto',
1020 'height' => 'auto',
1021 'value' => '%' . $field['slug'] . '%',
1022 'option' => $option['value'],
1023 ),
1024 )
1025 );
1026 $elements[] = $this->auto_field(
1027 $field,
1028 array(
1029 'type' => 'e2pdf-html',
1030 'float' => true,
1031 'properties' => array(
1032 'left' => '5',
1033 'width' => '100%',
1034 'height' => 'auto',
1035 'value' => $option['label'],
1036 ),
1037 )
1038 );
1039 }
1040 }
1041 }
1042 break;
1043 case 'radio':
1044 case 'toggle_switch':
1045 $elements[] = $this->auto_field(
1046 $field,
1047 array(
1048 'type' => 'e2pdf-html',
1049 'block' => true,
1050 'float' => $float,
1051 'properties' => array(
1052 'top' => '20',
1053 'left' => '20',
1054 'right' => '20',
1055 'width' => $width,
1056 'height' => 'auto',
1057 'value' => $field['label'],
1058 ),
1059 )
1060 );
1061
1062 if (isset($field['config']['option']) && is_array($field['config']['option'])) {
1063 foreach ($field['config']['option'] as $opt_key => $option) {
1064 if (is_array($option)) {
1065 $elements[] = $this->auto_field(
1066 $field,
1067 array(
1068 'type' => 'e2pdf-radio',
1069 'properties' => array(
1070 'top' => '5',
1071 'width' => 'auto',
1072 'height' => 'auto',
1073 'value' => '%' . $field['slug'] . '%',
1074 'option' => $option['value'],
1075 'group' => '%' . $field['slug'] . '%',
1076 ),
1077 )
1078 );
1079 $elements[] = $this->auto_field(
1080 $field,
1081 array(
1082 'type' => 'e2pdf-html',
1083 'float' => true,
1084 'properties' => array(
1085 'left' => '5',
1086 'width' => '100%',
1087 'height' => 'auto',
1088 'value' => $option['label'],
1089 ),
1090 )
1091 );
1092 }
1093 }
1094 }
1095 break;
1096 default:
1097 /* Unsupported fields: section_break, live_gravatar, button */
1098 break;
1099 }
1100 }
1101 }
1102
1103 $float = true;
1104 }
1105 }
1106 }
1107 }
1108 }
1109 $response['page'] = array(
1110 'bottom' => '20',
1111 'top' => '20',
1112 );
1113 $response['elements'] = $elements;
1114 return $response;
1115 }
1116
1117 /**
1118 * Element generation for Auto PDF
1119 * @param array $field - Field options
1120 * @param array $element - Element options
1121 * @return array - Element with modified options
1122 */
1123 public function auto_field($field = false, $element = array()) {
1124 if (!$field) {
1125 return false;
1126 }
1127 if (!isset($element['block'])) {
1128 $element['block'] = false;
1129 }
1130 if (!isset($element['float'])) {
1131 $element['float'] = false;
1132 }
1133 return $element;
1134 }
1135
1136 /**
1137 * Load actions for this extension
1138 */
1139 public function load_actions() {
1140 add_action('caldera_forms_mailer_complete', array($this, 'action_caldera_forms_mailer_complete'), 99, 0);
1141 add_action('caldera_forms_mailer_failed', array($this, 'action_caldera_forms_mailer_complete'), 99, 0);
1142 add_action('caldera_forms_submit_complete', array($this, 'action_caldera_forms_mailer_complete'), 99, 0);
1143 }
1144
1145 /**
1146 * Delete attachments that were sent by email
1147 */
1148 public function action_caldera_forms_mailer_complete() {
1149 $files = $this->helper->get('caldera_attachments');
1150 if (is_array($files) && !empty($files)) {
1151 foreach ($files as $key => $file) {
1152 $this->helper->delete_dir(dirname($file) . '/');
1153 }
1154 $this->helper->deset('caldera_attachments');
1155 }
1156 }
1157
1158 /**
1159 * Remove Page Breaks
1160 * @param array $form - Form
1161 * @return array - Form
1162 */
1163 public function filter_caldera_forms_render_get_form($form) {
1164 if (isset($form['layout_grid']['structure']) && $form['layout_grid']['structure']) {
1165 $form['layout_grid']['structure'] = str_replace('#', '|', $form['layout_grid']['structure']);
1166 }
1167 return $form;
1168 }
1169
1170 /**
1171 * Incorrectly rendered Checkbox Value
1172 * @param array $entry - Field
1173 * @param array $field_id - Field ID
1174 * @param array $form - Current Form
1175 * @param array $entry_id - Entry ID
1176 * @return mixed - Fixed entry
1177 */
1178 public function filter_caldera_forms_get_field_entry($entry, $field_id, $form, $entry_id) {
1179 if (class_exists('Caldera_Forms_Field_Util') && $field_id) {
1180 if (Caldera_Forms_Field_Util::get_type($field_id, $form) == 'checkbox' && $entry && is_array($entry)) {
1181 $last = array_pop($entry);
1182 if ($last && is_array($last) && isset($last['value'])) {
1183 $json = @json_decode($last['value'], ARRAY_A); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
1184 if (!empty($json)) {
1185 $entry = array(
1186 '0' => array(
1187 'value' => $json,
1188 ),
1189 );
1190 } else {
1191 if (is_serialized($last['value'])) {
1192 $serialized = $this->helper->load('convert')->unserialize($last['value']);
1193 if (!empty($serialized)) {
1194 $entry = array(
1195 '0' => array(
1196 'value' => $serialized,
1197 ),
1198 );
1199 }
1200 }
1201 }
1202 }
1203 }
1204 }
1205 return $entry;
1206 }
1207
1208 /**
1209 * Disable conditions to render inside PDF
1210 * @return boolean
1211 */
1212 public function filter_caldera_forms_pre_check_condition($result) {
1213 return true;
1214 }
1215
1216 /**
1217 * Convert file and advanced_file field type to not rendered
1218 * @param array $field - Field
1219 * @param array $form - Current form
1220 * @return array - Updated field
1221 */
1222 public function filter_caldera_forms_render_get_field($field, $form) {
1223 if (isset($field['type']) && ($field['type'] == 'file' || $field['type'] == 'advanced_file')) {
1224 $field['config']['media_lib'] = false;
1225 }
1226 return $field;
1227 }
1228
1229 /**
1230 * Fix for {entry_id}
1231 * @param array $form - Current form
1232 * @param int $entry_id - Current entry_id
1233 * @return array - Updated form
1234 */
1235 public function filter_caldera_forms_magic_form($form, $entry_id) {
1236 if (class_exists('Caldera_Forms') && $entry_id) {
1237 Caldera_Forms::set_field_data('_entry_id', $entry_id, $form);
1238 }
1239 return $form;
1240 }
1241
1242 /**
1243 * Render file and advanced_file field types to url instead image and link
1244 * @param string $_value - NULL value to overide
1245 * @param string $value - Value to replace shortcodes
1246 * @param array $matches - List of matches of magic tags
1247 * @param int $entry_id - Current entry
1248 * @param array $form - Current form
1249 * @return string - Updated value
1250 */
1251 public function filter_caldera_forms_pre_do_field_magic($_value, $value, $matches, $entry_id, $form) {
1252 if (class_exists('Caldera_Forms') && $value) {
1253 if (!empty($matches[1])) {
1254 foreach ($matches[1] as $key => $tag) {
1255 $part_tags = explode(':', $tag);
1256 if (!empty($part_tags[1])) {
1257 $tag = $part_tags[0];
1258 }
1259 $entry = Caldera_Forms::get_slug_data($tag, $form, $entry_id);
1260 $field = false;
1261 if ($entry !== null) {
1262 $field = Caldera_Forms_Field_Util::get_field_by_slug($tag, $form);
1263 }
1264 if ('html' === $this->get_field_type_by_slug($tag, $form)) {
1265 $field = Caldera_Forms_Field_Util::get_field_by_slug($tag, $form);
1266 $entry = Caldera_Forms::do_magic_tags(Caldera_Forms_Field_Util::get_default($field, $form));
1267 }
1268 if (!empty($field) && Caldera_Forms_Field_Util::is_file_field($field, $form)) {
1269 if (is_string($entry) && Caldera_Forms_Field_Util::is_file_field($field, $form)) {
1270 if (!filter_var($entry, FILTER_VALIDATE_URL)) {
1271 $entry = '';
1272 }
1273 }
1274 }
1275 if (is_string($entry)) {
1276 if (!empty($field) && !empty($part_tags[1]) && $part_tags[1] == 'label') {
1277 $_entry = @json_decode($entry); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
1278 if (is_object($_entry)) {
1279 $entry = $_entry;
1280 }
1281 } else {
1282 $entry = $this->maybe_implode_opts($entry);
1283 }
1284 }
1285 if (!empty($field) && !empty($part_tags[1]) && $part_tags[1] == 'label') {
1286 if (!is_array($entry)) {
1287 $entry = (array) $entry;
1288 }
1289 foreach ((array) $entry as $entry_key => $entry_line) {
1290 if (!empty($field['config']['option'])) {
1291 foreach ($field['config']['option'] as $option) {
1292 if ($option['value'] == $entry_line) {
1293 $entry[$entry_key] = $option['label'];
1294 }
1295 }
1296 }
1297 }
1298 }
1299 if (is_array($entry)) {
1300 if (count($entry) === 1) {
1301 $entry = array_shift($entry);
1302 } elseif (count($entry) === 2) {
1303 $entry = implode(', ', $entry);
1304 } elseif (count($entry) > 2) {
1305 $last = array_pop($entry);
1306 $entry = implode(', ', $entry) . ', ' . $last;
1307 } else {
1308 $entry = null;
1309 }
1310 }
1311 $value = str_replace($matches[0][$key], $entry, $value);
1312 }
1313 return apply_filters('caldera_forms_do_field_magic_value', $value, $matches, $entry_id, $form);
1314 }
1315 }
1316 return $_value;
1317 }
1318
1319 /**
1320 * Implode "opts" -- IE checkboxes stored as "opts" as needed
1321 * @param string $value Value to check and possibly convert
1322 * @return string
1323 */
1324 public function maybe_implode_opts($value) {
1325 if (is_string($value) && '{"opt' == substr($value, 0, 5)) {
1326 $_value = @json_decode($value); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
1327 if (is_object($_value)) {
1328 $value = implode(', ', (array) $_value);
1329 }
1330 } elseif (is_array($value)) {
1331 $value = implode(', ', $value);
1332 }
1333 return $value;
1334 }
1335
1336 /**
1337 * Get field type by slug for HTML field render
1338 * @param string $slug Slug to check
1339 * @param array $form Form to check
1340 * @return boolean|mixed
1341 */
1342 public function get_field_type_by_slug($slug, $form) {
1343 if (is_array($form) && isset($form['fields'])) {
1344 foreach ($form['fields'] as $field_id => $field) {
1345 if ($field['slug'] == $slug) {
1346 if (isset($field['type'])) {
1347 return $field['type'];
1348 } else {
1349 return false;
1350 }
1351 }
1352 }
1353 }
1354 return false;
1355 }
1356
1357 /**
1358 * [e2pdf-view] shortcode fix
1359 * @param string $out - HTML Output
1360 * @param array $form - Current form
1361 * @return string - Updated HTML Output
1362 */
1363 public function filter_caldera_forms_render_form($out, $form) {
1364 if (false === strpos($out, '[')) {
1365 return $out;
1366 }
1367 $shortcode_tags = array(
1368 'e2pdf-view',
1369 'e2pdf-download',
1370 );
1371 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $out, $matches);
1372 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1373 if (!empty($tagnames)) {
1374 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $out, $shortcodes);
1375 foreach ($shortcodes[0] as $key => $shortcode_value) {
1376 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1377 $out = str_replace($shortcode_value, do_shortcode_tag($shortcode), $out);
1378 }
1379 }
1380 return $out;
1381 }
1382
1383 /**
1384 * [e2pdf-view] shortcode fix
1385 * @param array $out - Array with response
1386 * @param array $form - Current form
1387 * @return array - Updated response
1388 */
1389 public function filter_caldera_forms_ajax_return($out, $form) {
1390 if (isset($out['html'])) {
1391 if (false === strpos($out['html'], '[')) {
1392 return $out;
1393 }
1394 $shortcode_tags = array(
1395 'e2pdf-view',
1396 'e2pdf-download',
1397 );
1398 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $out['html'], $matches);
1399 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1400 if (!empty($tagnames)) {
1401 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $out['html'], $shortcodes);
1402 foreach ($shortcodes[0] as $key => $shortcode_value) {
1403 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1404 $out['html'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $out['html']);
1405 }
1406 }
1407 }
1408
1409 return $out;
1410 }
1411
1412 public function filter_success_message($message = '', $form = array(), $dataset_id = false) {
1413 if (false !== strpos($message, '[')) {
1414 $shortcode_tags = array(
1415 'e2pdf-download',
1416 'e2pdf-save',
1417 'e2pdf-view',
1418 'e2pdf-adobesign',
1419 'e2pdf-zapier',
1420 );
1421 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $message, $matches);
1422 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1423 if (!empty($tagnames)) {
1424 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $message, $shortcodes);
1425 foreach ($shortcodes[0] as $key => $shortcode_value) {
1426 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1427 $atts = shortcode_parse_atts($shortcode[3]);
1428 if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
1429 } else {
1430 if (!isset($atts['dataset']) && isset($atts['id'])) {
1431 $template = new Model_E2pdf_Template();
1432 $template->load($atts['id']);
1433 if ($template->get('extension') === 'caldera') {
1434 if ($dataset_id) {
1435 $atts['dataset'] = $dataset_id;
1436 $shortcode[3] .= ' dataset="' . $dataset_id . '"';
1437 }
1438 }
1439 }
1440 if (!isset($atts['apply'])) {
1441 $shortcode[3] .= ' apply="true"';
1442 }
1443 if (!isset($atts['iframe_download'])) {
1444 $shortcode[3] .= ' iframe_download="true"';
1445 }
1446 if ($shortcode[2] === 'e2pdf-view' || $shortcode[2] === 'e2pdf-download') {
1447 $new_shortcode = $shortcode[2] . $shortcode[3];
1448 $message = str_replace($shortcode_value, '[' . $new_shortcode . ']', $message);
1449 } else {
1450 $message = str_replace($shortcode_value, do_shortcode_tag($shortcode), $message);
1451 }
1452 }
1453 }
1454 }
1455 }
1456
1457 return $message;
1458 }
1459
1460 /**
1461 * Load filters for this extension
1462 */
1463 public function load_filters() {
1464 /* 1.15.06 SendGripd Priority Fix (30 to 25) */
1465 add_filter('caldera_forms_mailer', array($this, 'filter_caldera_forms_mailer'), 25, 4);
1466 add_filter('caldera_forms_autoresponse_mail', array($this, 'filter_caldera_forms_mailer'), 30, 4);
1467 add_filter('caldera_forms_render_notices', array($this, 'filter_caldera_forms_render_notices'), 99, 2);
1468 add_filter('caldera_forms_ajax_return', array($this, 'filter_caldera_forms_ajax_return'), 30, 2);
1469 add_filter('caldera_forms_render_form', array($this, 'filter_caldera_forms_render_form'), 30, 2);
1470 }
1471
1472 public function filter_caldera_forms_render_notices($notices, $form) {
1473 if (class_exists('Caldera_Forms')) {
1474 if (!empty($notices['success']['note'])) {
1475 $dataset_id = false;
1476 if (!empty($form['form_ajax'])) {
1477 if (!empty($form['stage_form'])) {
1478 if (function_exists('cf_form_connector_get_current_position')) {
1479 $process_record = cf_form_connector_get_current_position();
1480 if (!empty($process_record[$form['stage_form']]['entry_id'])) {
1481 $dataset_id = $process_record[$form['stage_form']]['entry_id'];
1482 }
1483 }
1484 } else {
1485 $dataset_id = (int) Caldera_Forms::do_magic_tags('{entry_id}');
1486 }
1487 } else {
1488 if (isset($_GET['cf_id']) && isset($_GET['cf_su'])) {
1489 $dataset_id = absint($_GET['cf_id']);
1490 }
1491 }
1492 $notices['success']['note'] = $this->filter_success_message($notices['success']['note'], $form, $dataset_id);
1493 }
1494 }
1495 return $notices;
1496 }
1497
1498 /**
1499 * Filter to replace mail message E2Pdf shortcodes
1500 */
1501 public function filter_caldera_forms_mailer($mail, $data, $form, $entryid) {
1502 if ($mail && isset($mail['message'])) {
1503 if (false !== strpos($mail['message'], '[')) {
1504 $shortcode_tags = array(
1505 'e2pdf-download',
1506 'e2pdf-save',
1507 'e2pdf-attachment',
1508 'e2pdf-adobesign',
1509 'e2pdf-zapier',
1510 );
1511 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $mail['message'], $matches);
1512 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1513 if (!empty($tagnames)) {
1514 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $mail['message'], $shortcodes);
1515 foreach ($shortcodes[0] as $key => $shortcode_value) {
1516 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1517 $atts = shortcode_parse_atts($shortcode[3]);
1518 if (!isset($atts['dataset']) && isset($atts['id'])) {
1519 $template = new Model_E2pdf_Template();
1520 $template->load($atts['id']);
1521 if ($template->get('extension') === 'caldera') {
1522 $dataset_id = $entryid;
1523 if (!$dataset_id) {
1524 $dataset_id = isset($data['_entry_id']) ? $data['_entry_id'] : false;
1525 }
1526 if ($dataset_id) {
1527 $atts['dataset'] = $dataset_id;
1528 $shortcode[3] .= ' dataset="' . $dataset_id . '"';
1529 }
1530 }
1531 }
1532 if (!isset($atts['apply'])) {
1533 $shortcode[3] .= ' apply="true"';
1534 }
1535 if (!isset($atts['filter'])) {
1536 $shortcode[3] .= ' filter="true"';
1537 }
1538 $file = false;
1539 if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) {
1540 $file = do_shortcode_tag($shortcode);
1541 if ($file) {
1542 $tmp = false;
1543 if (substr($file, 0, 4) === 'tmp:') {
1544 $file = substr($file, 4);
1545 $tmp = true;
1546 }
1547 if ($shortcode[2] === 'e2pdf-save' || isset($atts['pdf'])) {
1548 if ($tmp) {
1549 $this->helper->add('caldera_attachments', $file);
1550 }
1551 } else {
1552 $this->helper->add('caldera_attachments', $file);
1553 }
1554 $mail['attachments'][] = $file;
1555 }
1556 $mail['message'] = str_replace($shortcode_value, '', $mail['message']);
1557 } else {
1558 $mail['message'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $mail['message']);
1559 }
1560 }
1561 }
1562 }
1563 }
1564 return $mail;
1565 }
1566
1567 /**
1568 * Get styles for generating Map Field function
1569 * @return array - List of css files to load
1570 */
1571 public function styles($item_id = false) {
1572 $styles = array();
1573 if (class_exists('Caldera_Forms_Render_Assets')) {
1574 $url = Caldera_Forms_Render_Assets::make_url('caldera-forms-front', false);
1575 $styles[] = $url;
1576 }
1577 return $styles;
1578 }
1579 }
1580