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-formidable.php

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

4,287 lines 208.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * E2Pdf Formidable Extension
5 * @copyright Copyright 2017 https://e2pdf.com
6 * @license GPLv3
7 * @version 1
8 * @link https://e2pdf.com
9 * @since 0.00.01
10 */
11 if (!defined('ABSPATH')) {
12 die('Access denied.');
13 }
14
15 class Extension_E2pdf_Formidable extends Model_E2pdf_Model {
16
17 private $options;
18 private $info = array(
19 'key' => 'formidable',
20 'title' => 'Formidable 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_FORMIDABLE_EXTENSION') || $this->helper->load('extension')->is_plugin_active('formidable/formidable.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 $this->set('cached_form', false);
63 if ($this->get('item') && $this->get('item') != '-2' && class_exists('FrmForm')) {
64 $form = FrmForm::getOne($this->get('item'));
65 if (isset($form->id)) {
66 $this->set('cached_form', $form);
67 }
68 }
69 break;
70 case 'item1':
71 $this->set('cached_form', false);
72 if ($this->get('item1') && class_exists('FrmForm')) {
73 $form = FrmForm::getOne($this->get('item1'));
74 if (isset($form->id)) {
75 $this->set('cached_form', $form);
76 }
77 }
78 break;
79 case 'item2':
80 $this->set('cached_form2', false);
81 if ($this->get('item2') && class_exists('FrmForm')) {
82 $form = FrmForm::getOne($this->get('item2'));
83 if (isset($form->id)) {
84 $this->set('cached_form2', $form);
85 }
86 }
87 break;
88 case 'dataset':
89 $this->set('cached_entry', false);
90 if ($this->get('cached_form') && $this->get('dataset') && class_exists('FrmEntry')) {
91 if (substr($this->get('dataset'), 0, 4) === 'tmp_') {
92 $this->set('cached_entry', get_transient('e2pdf_' . $this->get('dataset')));
93 } else {
94 $entry = FrmEntry::getOne($this->get('dataset'));
95 if ($entry && isset($entry->form_id) && $entry->form_id == $this->get('cached_form')->id) {
96 if (!empty($entry->parent_item_id)) {
97 $parent_entry = FrmEntry::getOne($entry->parent_item_id);
98 if ($parent_entry && isset($parent_entry->form_id)) {
99 $entry->parent_entry = $parent_entry;
100 }
101 }
102 $this->set('cached_entry', $entry);
103 }
104 }
105 }
106 break;
107 case 'dataset2':
108 if ($this->get('cached_form2') && $this->get('dataset2') && class_exists('FrmEntry')) {
109 $entry = FrmEntry::getOne($this->get('dataset2'));
110 if ($entry && isset($entry->form_id) && $entry->form_id == $this->get('cached_form2')->id) {
111 if (!empty($entry->parent_item_id)) {
112 $parent_entry = FrmEntry::getOne($entry->parent_item_id);
113 if ($parent_entry && isset($parent_entry->form_id)) {
114 $entry->parent_entry = $parent_entry;
115 }
116 }
117 $this->set('cached_entry2', $entry);
118 }
119 }
120 break;
121 default:
122 break;
123 }
124 return true;
125 }
126
127 /**
128 * Get option by key
129 * @param string $key - Key to get assigned option value
130 * @return mixed
131 */
132 public function get($key) {
133 if (isset($this->options->$key)) {
134 $value = $this->options->$key;
135 } else {
136 switch ($key) {
137 case 'args':
138 $value = array();
139 break;
140 default:
141 $value = false;
142 break;
143 }
144 }
145 return $value;
146 }
147
148 /**
149 * Get items to work with
150 * @return array() - List of available items
151 */
152 public function items() {
153 $items = array();
154 if (class_exists('FrmForm')) {
155 $where = array(
156 'is_template' => 0,
157 'status' => 'published',
158 );
159 $forms = FrmForm::getAll($where, 'name');
160 if ($forms) {
161 foreach ($forms as $key => $form) {
162 $items[] = $this->item($form->id);
163 }
164 }
165 }
166 return $items;
167 }
168
169 /**
170 * Get entries for export
171 * @param int $item - Form ID
172 * @param string $name - Entries names
173 * @return array() - Entries list
174 */
175 public function datasets($item_id = false, $name = false) {
176 $item_id = (int) $item_id;
177 $datasets = array();
178 if (class_exists('FrmEntry') && $item_id) {
179 $where = array(
180 'it.form_id' => $item_id,
181 );
182 $entries = FrmEntry::getAll($where, ' ORDER BY id DESC');
183 if ($entries) {
184 $this->set('item', $item_id);
185 if (class_exists('FrmFieldsHelper') && class_exists('FrmFormsController') && method_exists('FrmFormsController', 'replace_form_name_shortcodes')) {
186 $this->set('cached_shortcodes', FrmFieldsHelper::get_shortcodes($name, $item_id));
187 }
188 foreach ($entries as $key => $entry) {
189 $this->set('dataset', $entry->id);
190 $entry_title = $this->render($name);
191 if (!$entry_title) {
192 $entry_title = $entry->item_key;
193 }
194 $datasets[] = array(
195 'key' => $entry->id,
196 'value' => $entry_title,
197 );
198 }
199 $this->set('cached_shortcodes', false);
200 }
201 }
202 return $datasets;
203 }
204
205 /**
206 * Get Dataset Actions
207 * @param int $dataset_id - Dataset ID
208 * @return object
209 */
210 public function get_dataset_actions($dataset_id = false) {
211 $dataset_id = (int) $dataset_id;
212 if (!$dataset_id) {
213 return false;
214 }
215 $actions = new stdClass();
216 $actions->view = $this->helper->get_url(
217 array(
218 'page' => 'formidable-entries',
219 'frm_action' => 'show',
220 'id' => $dataset_id,
221 )
222 );
223 $actions->delete = false;
224 return $actions;
225 }
226
227 /**
228 * Get Template Actions
229 * @param int $template - Template ID
230 * @return object
231 */
232 public function get_template_actions($template = false) {
233 $template = (int) $template;
234 if (!$template) {
235 return;
236 }
237 $actions = new stdClass();
238 $actions->delete = false;
239 return $actions;
240 }
241
242 /**
243 * Get item
244 * @param int $item_id - Item ID
245 * @return object - Item
246 */
247 public function item($item_id = false) {
248 $item_id = (int) $item_id;
249 if (!$item_id && $this->get('item')) {
250 $item_id = $this->get('item');
251 }
252 $form = false;
253 if (class_exists('FrmForm')) {
254 $form = FrmForm::getOne($item_id);
255 }
256 $item = new stdClass();
257 if ($form) {
258 $item->id = (string) $item_id;
259 $item->url = $this->helper->get_url(
260 array(
261 'page' => 'formidable',
262 'frm_action' => 'edit',
263 'id' => $item_id,
264 )
265 );
266 $item->name = esc_html('' === $form->name ? __('(no title)', 'formidable') : $form->name . ($form->parent_form_id ? __(' (child)', 'formidable') : ''));
267 } else {
268 $item->id = '';
269 $item->url = '';
270 $item->name = '';
271 }
272 return $item;
273 }
274
275 /**
276 * Render value according to content
277 * @param string $value - Content
278 * @param string $type - Type of rendering value
279 * @param array $field - Field details
280 * @return string - Fully rendered value
281 */
282 public function render($value, $field = array(), $convert_shortcodes = true, $raw = false) {
283 $value = $this->render_shortcodes($value, $field);
284 if (!$raw) {
285 $value = $this->strip_shortcodes($value);
286 $value = $this->convert_shortcodes($value, $convert_shortcodes, isset($field['type']) && $field['type'] == 'e2pdf-html' ? true : false);
287 $value = $this->helper->load('field')->render_checkbox($value, $this, $field);
288 }
289 return $value;
290 }
291
292 /**
293 * Load actions for this extension
294 */
295 public function load_actions() {
296 add_action('frm_notification', array($this, 'action_frm_notification'), 30, 3);
297 add_action('check_ajax_referer', array($this, 'action_check_ajax_referer'), 10, 2);
298 add_action('frm_after_create_entry', array($this, 'action_frm_default_value'), 0, 2);
299 add_action('frm_after_update_entry', array($this, 'action_frm_default_value'), 0, 2);
300 add_action('frm_success_action', array($this, 'action_frm_success_action'));
301
302 /* Hooks */
303 add_action('frm_show_entry_sidebar', array($this, 'hook_formidable_entry_view'));
304 add_action('frm_edit_entry_sidebar', array($this, 'hook_formidable_entry_edit'));
305 }
306
307 /**
308 * Load filters for this extension
309 */
310 public function load_filters() {
311
312 if (!get_option('e2pdf_formidable_disable_filter', '0')) {
313 add_filter('frm_display_entry_content', array(new Model_E2pdf_Filter(), 'pre_filter'), 9);
314 add_filter('frm_display_entry_content', array(new Model_E2pdf_Filter(), 'filter'), 25);
315 add_filter('frm_display_entry_content', array($this, 'filter_frm_display_entry_content'), 30);
316 add_filter('frm_content', array(new Model_E2pdf_Filter(), 'pre_filter'));
317 add_filter('frm_content', array(new Model_E2pdf_Filter(), 'filter'), 25);
318 }
319
320 add_filter('frm_content', array($this, 'filter_frm_content'), 30, 3);
321 add_filter('frm_image_html_array', array($this, 'filter_frm_image_html_array'), 10, 2);
322 add_filter('frm_notification_attachment', array($this, 'filter_frm_notification_attachment'), 30, 3);
323 add_filter('e2pdf_model_options_get_options_options', array($this, 'filter_e2pdf_model_options_get_options_options'));
324 add_filter('frm_main_feedback', array($this, 'filter_frm_main_feedback'));
325
326 // replace shortcodes on backup
327 add_filter('e2pdf_controller_templates_backup_options', array($this, 'filter_e2pdf_controller_templates_backup_options'), 10, 3);
328 add_filter('e2pdf_controller_templates_backup_pages', array($this, 'filter_e2pdf_controller_templates_backup_pages'), 10, 4);
329 add_filter('e2pdf_controller_templates_backup_actions', array($this, 'filter_e2pdf_controller_templates_backup_actions'), 10, 4);
330 add_filter('e2pdf_controller_templates_backup_replace_shortcodes', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
331
332 // replace shortcodes on import
333 add_filter('e2pdf_controller_templates_import_options', array($this, 'filter_e2pdf_controller_templates_import_options'), 10, 3);
334 add_filter('e2pdf_controller_templates_import_pages', array($this, 'filter_e2pdf_controller_templates_import_pages'), 10, 5);
335 add_filter('e2pdf_controller_templates_import_actions', array($this, 'filter_e2pdf_controller_templates_import_actions'), 10, 5);
336 add_filter('e2pdf_controller_templates_import_replace_shortcodes', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
337
338 // hooks
339 add_filter('frm_row_actions', array($this, 'hook_formidable_row_actions'), 10, 2);
340
341 // frm-graph
342 add_filter('frm_graph_shortcode_custom_html', array($this, 'filter_frm_graph_shortcode_custom_html'), 99, 2);
343 }
344
345 public function action_frm_success_action() {
346 $this->set('iframe_download', true);
347 }
348
349 public function filter_frm_main_feedback($message) {
350 $this->set('iframe_download', false);
351 return $message;
352 }
353
354 /**
355 * Render shortcodes which available in this extension
356 * @param string $value - Content
357 * @param string $type - Type of rendering value
358 * @param array $field - Field details
359 * @return string - Value with rendered shortcodes
360 */
361 public function render_shortcodes($value, $field = array()) {
362 $element_id = isset($field['element_id']) ? $field['element_id'] : false;
363 $checkbox_separated = false;
364 $foreach_wrapper_shortcodes = false;
365 $foreach_inner_shortcodes = false;
366 $signature = false;
367 if ($this->verify()) {
368 if (false !== strpos($value, '[')) {
369 $value = $this->helper->load('field')->pre_shortcodes($value, $this, $field);
370 if (class_exists('FrmProEntry')) {
371 $shortcode_tags = array();
372 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
373 $tagnames = array_intersect($shortcode_tags, $matches[1]);
374 foreach ($matches[1] as $key => $shortcode) {
375 if (false !== strpos($shortcode, ':')) {
376 $shortcode_tags[] = $shortcode;
377 }
378 }
379 $tagnames = array_intersect($shortcode_tags, $matches[1]);
380 if (!empty($tagnames)) {
381 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
382 foreach ($shortcodes[0] as $key => $shortcode_value) {
383 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
384 $shortcode_details = explode(':', $shortcode[2]);
385 $field_id = $shortcode_details['0'];
386 $child_id = $shortcode_details['1'];
387 $child_entry = 0;
388 $child_field = false;
389 $child_form = false;
390 if (class_exists('FrmField')) {
391 $child_field = FrmField::getOne($field_id);
392 if ($child_field) {
393 $child_form = $child_field->form_id;
394 }
395 }
396 $child_entries = array();
397 if ($this->get('cached_entry')) {
398 $childs = FrmEntry::getAll(array('parent_item_id' => $this->get('cached_entry')->id), ' ORDER BY it.id ASC', '', true, false);
399 if ($childs && $child_form) {
400 foreach ($childs as $child) {
401 if ($child->form_id == $child_form) {
402 $child_entries[] = $child->id;
403 }
404 }
405 }
406 }
407 if ($this->get('item') == '-2') {
408 if ($this->get('cached_entry2')) {
409 $childs = FrmEntry::getAll(array('parent_item_id' => $this->get('cached_entry2')->id), ' ORDER BY it.id ASC', '', true, false);
410 if ($childs && $child_form) {
411 foreach ($childs as $child) {
412 if ($child->form_id == $child_form) {
413 $child_entries[] = $child->id;
414 }
415 }
416 }
417 }
418 }
419 $new_shortcode = '';
420 if (!empty($child_entries) && count($child_entries) >= $child_id) {
421 $start = 1;
422 foreach ($child_entries as $key => $sub_entry) {
423 if ($start == $child_id) {
424 $child_entry = $sub_entry;
425 break;
426 }
427 $start++;
428 }
429
430 $shortcode[2] = 'frm-field-value field_id=' . $field_id . ' entry=' . $child_entry;
431 $new_shortcode = '[' . $shortcode[2] . $shortcode[3] . ']';
432 }
433 $checkbox_separated = true;
434 $value = str_replace($shortcode_value, $new_shortcode, $value);
435 }
436 }
437 }
438
439 // Foreach Inner Shortcodes
440 preg_match_all('/\[foreach[^\]]*?\]((?:(?!\[\/foreach).)+)(e2pdf-if|e2pdf-for)((?:(?!\[\/foreach).)+)\[\/foreach[^\]]*?\]/s', $value, $matches);
441 if (!empty($matches[0])) {
442 foreach ($matches[0] as $match) {
443 $new_match = preg_replace('/(\[)(\/?(e2pdf-if|e2pdf-for)[^\]]*?)(\])/', '{{$2}}', $match);
444 $if_shortcodes = $this->helper->load('if')->get_shortcodes();
445 $if_shortcodes_new = array_map(
446 function ($str) {
447 return str_replace(array('[', ']'), array('{{', '}}'), $str);
448 },
449 $if_shortcodes
450 );
451 $value = str_replace($match, str_replace($if_shortcodes, $if_shortcodes_new, $new_match), $value);
452 }
453 $foreach_inner_shortcodes = true;
454 }
455
456 $value = $this->helper->load('field')->inner_shortcodes($value, $this, $field);
457
458 /* Default shortcodes support */
459 $shortcode_tags = array(
460 'e2pdf-frm-lookup-values',
461 'e2pdf-frm-data-values',
462 'default-message',
463 'default_message',
464 'default-message2',
465 'default_message2',
466 );
467 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
468 $tagnames = array_intersect($shortcode_tags, $matches[1]);
469 if (!empty($tagnames)) {
470 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
471 foreach ($shortcodes[0] as $key => $shortcode_value) {
472 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
473 $atts = shortcode_parse_atts($shortcode[3]);
474 if ($shortcode[2] === 'e2pdf-frm-lookup-values' || $shortcode[2] === 'e2pdf-frm-data-values') {
475 if (!isset($atts['user_id']) && $this->get('user_id')) {
476 $shortcode[3] .= ' user_id="' . $this->get('user_id') . '"';
477 $value = str_replace($shortcode_value, '[' . $shortcode[2] . $shortcode[3] . ']', $value);
478 }
479 } elseif (($shortcode[2] === 'default-message' || $shortcode[2] === 'default_message') && $this->get('cached_entry') && class_exists('FrmEntriesHelper')) {
480 $default_message = FrmEntriesHelper::replace_default_message(
481 $shortcode_value,
482 array(
483 'id' => $this->get('cached_entry')->id,
484 'entry' => clone $this->get('cached_entry'),
485 'plain_text' => isset($atts['is_plain_text']) && $atts['is_plain_text'] == 'true' ? true : false,
486 'user_info' => isset($atts['user_info']) && $atts['user_info'] == 'true' ? true : false,
487 )
488 );
489 $value = str_replace($shortcode_value, $default_message, $value);
490 } elseif (($shortcode[2] === 'default-message2' || $shortcode[2] == 'default_message2') && $this->get('cached_entry2') && class_exists('FrmEntriesHelper')) {
491 $default_message = FrmEntriesHelper::replace_default_message(
492 str_replace(array('default-message2', 'default_message2'), array('default-message', 'default_message'), $shortcode_value),
493 array(
494 'id' => $this->get('cached_entry2')->id,
495 'entry' => clone $this->get('cached_entry2'),
496 'plain_text' => isset($atts['is_plain_text']) && $atts['is_plain_text'] == 'true' ? true : false,
497 'user_info' => isset($atts['user_info']) && $atts['user_info'] == 'true' ? true : false,
498 )
499 );
500 $value = str_replace($shortcode_value, $default_message, $value);
501 }
502 }
503 }
504
505 // Foreach Wrapper Shortcodes
506 preg_match_all('/\[foreach[^\]]*?\]((?:(?!\[\/foreach).)+)(e2pdf-format-number|e2pdf-format-date|e2pdf-format-output|e2pdf-math)((?:(?!\[\/foreach).)+)\[\/foreach[^\]]*?\]/s', $value, $matches);
507 if (!empty($matches[0])) {
508 foreach ($matches[0] as $match) {
509 $new_match = preg_replace('/(\[)(\/?(e2pdf-format-number|e2pdf-format-date|e2pdf-format-output|e2pdf-math)[^\]]*?)(\])/', '{{$2}}', $match);
510 $value = str_replace($match, $new_match, $value);
511 $foreach_wrapper_shortcodes = true;
512 }
513 }
514 $value = $this->helper->load('field')->wrapper_shortcodes($value, $this, $field);
515
516 if (false !== strpos($value, '[')) {
517 if (strpos($value, '[foreach') !== false) {
518 if ($this->get('cached_entry')) {
519 $value = preg_replace('/\[foreach[^\]]*?\](.*?)\[\/foreach(*SKIP)(*FAIL)|\[id\]/is', $this->get('cached_entry')->id, $value);
520 $value = preg_replace('/\[foreach[^\]]*?\](.*?)\[\/foreach(*SKIP)(*FAIL)|\[key\]/is', $this->get('cached_entry')->item_key, $value);
521 } else {
522 $value = preg_replace('/\[foreach[^\]]*?\](.*?)\[\/foreach(*SKIP)(*FAIL)|\[id\]/is', '', $value);
523 $value = preg_replace('/\[foreach[^\]]*?\](.*?)\[\/foreach(*SKIP)(*FAIL)|\[key\]/is', '', $value);
524 }
525
526 if ($this->get('cached_entry2')) {
527 $value = preg_replace('/\[foreach[^\]]*?\](.*?)\[\/foreach(*SKIP)(*FAIL)|\[id2\]/is', $this->get('cached_entry2')->id, $value);
528 $value = preg_replace('/\[foreach[^\]]*?\](.*?)\[\/foreach(*SKIP)(*FAIL)|\[key2\]/is', $this->get('cached_entry2')->item_key, $value);
529 } else {
530 $value = preg_replace('/\[foreach[^\]]*?\](.*?)\[\/foreach(*SKIP)(*FAIL)|\[id2\]/is', '', $value);
531 $value = preg_replace('/\[foreach[^\]]*?\](.*?)\[\/foreach(*SKIP)(*FAIL)|\[key2\]/is', '', $value);
532 }
533 } else {
534 $replace = array(
535 '[id]' => $this->get('cached_entry') ? $this->get('cached_entry')->id : '',
536 '[key]' => $this->get('cached_entry') ? $this->get('cached_entry')->item_key : '',
537 '[id2]' => $this->get('cached_entry2') ? $this->get('cached_entry2')->id : '',
538 '[key2]' => $this->get('cached_entry2') ? $this->get('cached_entry2')->item_key : '',
539 );
540 $value = str_replace(array_keys($replace), $replace, $value);
541 }
542 }
543 }
544
545 /*
546 * Checkboxes separatable fix filter add
547 * @since 0.01.43
548 */
549 if ($checkbox_separated) {
550 add_filter('frm_display_value_custom', array($this, 'filter_frm_display_value_custom'), 0, 3);
551 }
552
553 /* [display-frm-data] shortcode support */
554 if (false !== strpos($value, '[')) {
555 preg_match_all('/(?=\[display-frm-data\b)(\[(?:[^\[\]]+|(?1))+\])/', $value, $matches);
556 if (!empty($matches[1])) {
557 add_filter('frmpro_fields_replace_shortcodes', array($this, 'filter_frmpro_fields_replace_shortcodes'), 20, 4);
558 foreach ($matches[1] as $match) {
559 if ($this->get('item') == '-2') {
560 if ($this->get('cached_entry') && $this->get('cached_entry2')) {
561 $new_match = apply_filters('frm_content', $match, $this->get('cached_form'), $this->get('cached_entry'));
562 $new_match = apply_filters('frm_content', $new_match, $this->get('cached_form2'), $this->get('cached_entry2'));
563 } elseif ($this->get('cached_entry')) {
564 $new_match = apply_filters('frm_content', $match, $this->get('cached_form'), $this->get('cached_entry'));
565 if ($this->get('cached_form2')) {
566 $new_match = apply_filters('frm_content', $new_match, $this->get('cached_form2'), $this->get('cached_entry'));
567 }
568 } elseif ($this->get('cached_entry2')) {
569 $new_match = apply_filters('frm_content', $match, $this->get('cached_form2'), $this->get('cached_entry2'));
570 if ($this->get('cached_form')) {
571 $new_match = apply_filters('frm_content', $new_match, $this->get('cached_form'), $this->get('cached_entry2'));
572 }
573 }
574 } else {
575 $new_match = apply_filters('frm_content', $match, $this->get('cached_form'), $this->get('cached_entry'));
576 }
577 $value = str_replace($match, $new_match, $value);
578 }
579 remove_filter('frmpro_fields_replace_shortcodes', array($this, 'filter_frmpro_fields_replace_shortcodes'), 20);
580 }
581 }
582
583 add_filter('frm_filter_view', array($this, 'filter_frm_filter_view'));
584 $value = $this->helper->load('field')->do_shortcodes($value, $this, $field);
585 remove_filter('frm_filter_view', array($this, 'filter_frm_filter_view'));
586
587 /*
588 * Checkboxes separatable fix filter remove
589 * @since 0.01.43
590 */
591 if ($checkbox_separated) {
592 remove_filter('frm_display_value_custom', array($this, 'filter_frm_display_value_custom'), 0);
593 }
594
595 /* Bug fix for Formidable Forms Signature (2.0.1) */
596 if (class_exists('FrmFieldFactory')) {
597 $signature_field = FrmFieldFactory::get_field_type('signature');
598 if ($signature_field->get_display_value('signature') == '') {
599 $signature = true;
600 }
601 }
602 if ($signature) {
603 remove_filter('frm_get_signature_display_value', 'FrmSigAppController::display_signature');
604 remove_filter('frmpro_fields_replace_shortcodes', 'FrmSigAppController::custom_display_signature');
605 add_filter('frm_keep_signature_value_array', array($this, 'filter_frm_keep_signature_value_array'), 10, 2);
606 }
607 add_filter('frmpro_fields_replace_shortcodes', array($this, 'filter_frmpro_fields_replace_shortcodes'), 20, 4);
608
609 $text_signature = !empty($field['type']) && ($field['type'] == 'e2pdf-image' || $field['type'] == 'e2pdf-signature') ? true : false;
610 if ($text_signature) {
611 add_filter('frm_get_signature_display_value', array($this, 'filter_frm_get_signature_display_value'), 20, 3);
612 }
613 if ($this->get('item') == '-2') {
614 if ($this->get('cached_entry') && $this->get('cached_entry2')) {
615 $value = apply_filters('frm_content', $value, $this->get('cached_form'), $this->get('cached_entry'));
616 $value = apply_filters('frm_content', $value, $this->get('cached_form2'), $this->get('cached_entry2'));
617 } elseif ($this->get('cached_entry')) {
618 $value = apply_filters('frm_content', $value, $this->get('cached_form'), $this->get('cached_entry'));
619 if ($this->get('cached_form2')) {
620 $value = apply_filters('frm_content', $value, $this->get('cached_form2'), $this->get('cached_entry'));
621 }
622 } elseif ($this->get('cached_entry2')) {
623 $value = apply_filters('frm_content', $value, $this->get('cached_form2'), $this->get('cached_entry2'));
624 if ($this->get('cached_form')) {
625 $value = apply_filters('frm_content', $value, $this->get('cached_form'), $this->get('cached_entry2'));
626 }
627 }
628 } else {
629 if ($this->get('cached_shortcodes')) {
630 remove_filter('frm_content', 'FrmFormsController::filter_content', 10, 3);
631 add_filter('frm_content', array($this, 'filter_filter_content'), 10, 3);
632 }
633 $value = apply_filters('frm_content', $value, $this->get('cached_form'), $this->get('cached_entry'));
634 if ($this->get('cached_shortcodes')) {
635 remove_filter('frm_content', array($this, 'filter_filter_content'), 10, 3);
636 add_filter('frm_content', 'FrmFormsController::filter_content', 10, 3);
637 }
638 }
639
640 // Foreach Wrapper Shortcodes Reverse
641 if ($foreach_wrapper_shortcodes) {
642 $value = preg_replace('/(\{\{)(\/?(e2pdf-format-number|e2pdf-format-date|e2pdf-format-output|e2pdf-math)[^\}]*?)(\}\})/', '[$2]', $value);
643 $value = $this->helper->load('field')->wrapper_shortcodes($value, $this, $field, true);
644 }
645
646 // Foreach Inner Shortcodes Reverse
647 if ($foreach_inner_shortcodes) {
648 preg_match_all('/\{\{(e2pdf-if|e2pdf-for)\}\}(.*?)+\{\{\/(e2pdf-if|e2pdf-for)\}\}/s', $value, $matches);
649 if (!empty($matches[0])) {
650 foreach ($matches[0] as $match) {
651 $new_match = preg_replace('/(\{\{)(\/?(e2pdf-if|e2pdf-for)[^\}]*?)(\}\})/', '[$2]', $match);
652 $value = str_replace($match, str_replace($if_shortcodes_new, $if_shortcodes, $new_match), $value);
653 }
654 }
655 $value = $this->helper->load('field')->inner_shortcodes($value, $this, $field);
656 }
657
658 // Text Signature
659 if ($text_signature) {
660 remove_filter('frm_get_signature_display_value', array($this, 'filter_frm_get_signature_display_value'), 20);
661 if ($value && false !== strpos($value, ':e2pdf-text-filter:')) {
662 $value = str_replace(':e2pdf-text-filter:', '', $value);
663 $field['properties']['text'] = '1';
664 }
665 }
666 remove_filter('frmpro_fields_replace_shortcodes', array($this, 'filter_frmpro_fields_replace_shortcodes'), 20);
667 if ($signature) {
668 remove_filter('frm_keep_signature_value_array', array($this, 'filter_frm_keep_signature_value_array'));
669 add_filter('frm_get_signature_display_value', 'FrmSigAppController::display_signature', 10, 3);
670 add_filter('frmpro_fields_replace_shortcodes', 'FrmSigAppController::custom_display_signature', 10, 4);
671 }
672 $value = $this->replace_meta_shortcodes($value);
673 $value = $this->helper->load('field')->render(
674 apply_filters('e2pdf_extension_render_shortcodes_pre_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), $this->get('item2'), $this->get('dataset2')),
675 $this,
676 $field
677 );
678 }
679 return apply_filters(
680 'e2pdf_extension_render_shortcodes_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), $this->get('item2'), $this->get('dataset2')
681 );
682 }
683
684 /**
685 * Strip unused shortcodes
686 * @param string $value - Content
687 * @return string - Value with removed unused shortcodes
688 */
689 public function strip_shortcodes($value) {
690 $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
691 return $value;
692 }
693
694 /**
695 * Convert "shortcodes" inside value string
696 * @param string $value - Value string
697 * @param bool $to - Convert From/To
698 * @return string - Converted value
699 */
700 public function convert_shortcodes($value, $to = false, $html = false) {
701 if ($value) {
702 if ($to) {
703 $search = array('&#91;', '&#93;', '&#091;', '&#093;');
704 $replace = array('[', ']', '[', ']');
705 $value = str_replace($search, $replace, $value);
706 if (!$html) {
707 $value = wp_specialchars_decode($value, ENT_QUOTES);
708 }
709 } else {
710 $search = array('[', ']', '&#091;', '&#093;');
711 $replace = array('&#91;', '&#93;', '&#91;', '&#93;');
712 $value = str_replace($search, $replace, $value);
713 }
714 }
715 return $value;
716 }
717
718 public function filter_frm_filter_view($view) {
719 if (isset($view->frm_before_content) && $view->frm_before_content) {
720 $view->frm_before_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->frm_before_content);
721 }
722 if (isset($view->post_content) && $view->post_content) {
723 $view->post_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->post_content);
724 }
725 if (isset($view->frm_after_content) && $view->frm_after_content) {
726 $view->frm_after_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->frm_after_content);
727 }
728 return $view;
729 }
730
731 public function filter_frm_lookup_is_current_user_filter_needed($is_filter_needed, $field_id, $field_options) {
732 if (FrmField::is_option_true_in_array($field_options, 'lookup_filter_current_user')) {
733 return true;
734 }
735 return $is_filter_needed;
736 }
737
738 public function filter_frm_keep_signature_value_array($keep_array, $atts) {
739 return true;
740 }
741
742 /**
743 * Search and update shortcodes for this extension inside content
744 * Auto set of dataset id
745 * @param string $content - Content
746 * @param int $form - ID of form
747 * @param int $dataset_id - ID of dataset
748 * @return string - Content with updates shortcodes
749 */
750 public function filter_frm_content($content, $form, $dataset_id) {
751
752 if (false === strpos($content, '[')) {
753 return $content;
754 }
755 $shortcode_tags = array(
756 'e2pdf-download',
757 'e2pdf-save',
758 'e2pdf-view',
759 'e2pdf-adobesign',
760 'e2pdf-zapier',
761 );
762 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
763 $tagnames = array_intersect($shortcode_tags, $matches[1]);
764 if (!empty($tagnames)) {
765 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
766 foreach ($shortcodes[0] as $key => $shortcode_value) {
767 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
768 $atts = shortcode_parse_atts($shortcode[3]);
769 if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
770 } else {
771 if (!isset($atts['dataset']) && isset($atts['id'])) {
772 $template = new Model_E2pdf_Template();
773 $template->load($atts['id']);
774 if ($template->get('extension') === 'formidable') {
775 $entry_id = is_object($dataset_id) ? $dataset_id->id : $dataset_id;
776 if ($entry_id) {
777 if ($template->get('item') == '-2') {
778 if ($template->get('item1') == $form->id) {
779 $atts['dataset'] = $entry_id;
780 $shortcode[3] .= ' dataset="' . $entry_id . '"';
781 } elseif (!isset($atts['dataset2']) && $template->get('item2') == $form->id) {
782 $atts['dataset2'] = $entry_id;
783 $shortcode[3] .= ' dataset2="' . $entry_id . '"';
784 }
785 } else {
786 $atts['dataset'] = $entry_id;
787 $shortcode[3] .= ' dataset="' . $entry_id . '"';
788 }
789 }
790 }
791 }
792 if (!isset($atts['apply'])) {
793 $shortcode[3] .= ' apply="true"';
794 }
795 if (!isset($atts['filter'])) {
796 $shortcode[3] .= ' filter="true"';
797 }
798 if (!isset($atts['iframe_download']) && $this->get('iframe_download')) {
799 $shortcode[3] .= ' iframe_download="true"';
800 }
801 $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
802 }
803 }
804 }
805
806 return $content;
807 }
808
809 public function filter_frm_display_entry_content($content) {
810
811 if (false === strpos($content, '[')) {
812 return $content;
813 }
814 $shortcode_tags = array(
815 'e2pdf-download',
816 'e2pdf-save',
817 'e2pdf-view',
818 'e2pdf-adobesign',
819 'e2pdf-zapier',
820 );
821 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
822 $tagnames = array_intersect($shortcode_tags, $matches[1]);
823 if (!empty($tagnames)) {
824 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
825 foreach ($shortcodes[0] as $key => $shortcode_value) {
826 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
827 $atts = shortcode_parse_atts($shortcode[3]);
828 if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
829 } else {
830 if (!isset($atts['apply'])) {
831 $shortcode[3] .= ' apply="true"';
832 }
833 if (!isset($atts['filter'])) {
834 $shortcode[3] .= ' filter="true"';
835 }
836 if (!isset($atts['iframe_download'])) {
837 $shortcode[3] .= ' iframe_download="true"';
838 }
839 $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
840 }
841 }
842 }
843
844 return $content;
845 }
846
847 /**
848 * Filter for checkbox repeatable Label/Value fix
849 * @param array $value - Value
850 * @param obj $field - Field
851 * @param array $atts - Shortcode Attributes
852 * @return mixed - Updated value
853 */
854 public function filter_frm_display_value_custom($value, $field, $atts = array()) {
855 if (class_exists('FrmProEntriesController')) {
856 $defaults = array(
857 'html' => 0,
858 'type' => $field->type,
859 'keepjs' => 0,
860 );
861 $atts = array_merge($defaults, $atts);
862 if ($atts['type'] === 'checkbox') {
863 $value = FrmProEntriesController::get_option_label_for_saved_value($value, $field, $atts);
864 }
865 }
866 return $value;
867 }
868
869 /**
870 * Filter for Signature
871 * @param array $value - Value
872 * @param obj $field - Field
873 * @param array $atts - Shortcode Attributes
874 * @return mixed - Updated value
875 */
876 public function filter_frm_get_signature_display_value($value, $field, $atts = array()) {
877 if ($value && !empty($value['format']) && $value['format'] == 'typed' && !empty($value['content'])) {
878 $value['content'] = ':e2pdf-text-filter:' . $value['content'];
879 }
880 return $value;
881 }
882
883 public function filter_frmpro_fields_replace_shortcodes($replace_with, $tag, $atts, $field) {
884
885 /* Backward compatibility with Formidable Forms PRO < 5.0 */
886 if (class_exists('FrmProDb') && property_exists('FrmProDb', 'plug_version') && version_compare(FrmProDb::$plug_version, '5.0', '<')) {
887 if ($this->get('item') == '-2' && $this->get('cached_entry2') && $field->form_id == $this->get('cached_entry2')->form_id) {
888 $atts['entry_id'] = $this->get('cached_entry2')->id;
889 $replace_with = FrmProEntryMetaHelper::get_post_or_meta_value($this->get('cached_entry2'), $field, $atts);
890 }
891 }
892
893 if ($field->type === 'checkbox' && is_array($replace_with)) {
894 if (isset($atts['key']) && $atts['key']) {
895 if (isset($replace_with[$atts['key']])) {
896 $replace_with = $replace_with[$atts['key']];
897 } else {
898 $replace_with = '';
899 }
900 }
901 }
902
903 if ($field->type === 'radio') {
904 if (isset($atts['key']) && $atts['key'] === 'other') {
905 if (isset($field->options) && is_array($field->options)) {
906 $field_key = array_search($replace_with, array_column($field->options, 'value'));
907 if ($field_key !== false) {
908 $replace_with = '';
909 }
910 }
911 }
912 }
913
914 return $replace_with;
915 }
916
917 /**
918 * Generate attachments according shortcodes in Email template
919 * @param array $attachments - List of attachments
920 * @param int $form - ID of form
921 * @param array $args - Arguments
922 * @return array - Updated list of attachments
923 */
924 public function filter_frm_notification_attachment($attachments, $form, $args) {
925 if (!isset($args['email_key'])) {
926 return $attachments;
927 }
928 $form_actions = FrmFormAction::get_action_for_form($form->id);
929 $dataset_id = $args['entry']->id;
930 $email_key = $args['email_key'];
931
932 $shortcode_tags = array(
933 'e2pdf-attachment',
934 'e2pdf-save',
935 );
936
937 foreach ($form_actions as $key => $action) {
938 if ($action->ID === $email_key) {
939 $content = $action->post_content['email_message'];
940 if (false === strpos($content, '[')) {
941 return $attachments;
942 }
943
944 remove_filter('frm_content', array($this, 'filter_frm_content'), 30);
945 $content = apply_filters('frm_content', $content, $form, $args['entry']);
946 add_filter('frm_content', array($this, 'filter_frm_content'), 30, 3);
947
948 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
949 $tagnames = array_intersect($shortcode_tags, $matches[1]);
950 if (!empty($tagnames)) {
951 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
952 foreach ($shortcodes[0] as $key => $shortcode_value) {
953 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
954 $atts = shortcode_parse_atts($shortcode[3]);
955 $file = false;
956 if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) {
957 if (!isset($atts['dataset']) && isset($atts['id'])) {
958 $template = new Model_E2pdf_Template();
959 $template->load($atts['id']);
960 if ($template->get('extension') === 'formidable') {
961 $entry_id = is_object($dataset_id) ? $dataset_id->id : $dataset_id;
962 if ($entry_id) {
963 if ($template->get('item') == '-2') {
964 if ($template->get('item1') == $form->id) {
965 $atts['dataset'] = $entry_id;
966 $shortcode[3] .= ' dataset="' . $entry_id . '"';
967 } elseif (!isset($atts['dataset2']) && $template->get('item2') == $form->id) {
968 $atts['dataset2'] = $entry_id;
969 $shortcode[3] .= ' dataset2="' . $entry_id . '"';
970 }
971 } else {
972 $atts['dataset'] = $entry_id;
973 $shortcode[3] .= ' dataset="' . $entry_id . '"';
974 }
975 }
976 }
977 }
978 if (!isset($atts['apply'])) {
979 $shortcode[3] .= ' apply="true"';
980 }
981 if (!isset($atts['filter'])) {
982 $shortcode[3] .= ' filter="true"';
983 }
984 $transient = false;
985 if (isset($atts['use_args_entry']) && $atts['use_args_entry'] == 'true' && $atts['dataset'] == $dataset_id) {
986 $dataset = 'tmp_' . $this->helper->load('encryption')->random_md5();
987 $transient = 'e2pdf_' . $dataset;
988 set_transient($transient, $args['entry'], 1800);
989 $atts['dataset'] = $dataset;
990 $shortcode[3] .= ' dataset="' . $dataset . '"';
991 }
992 $file = do_shortcode_tag($shortcode);
993 if ($file) {
994 $tmp = false;
995 if (substr($file, 0, 4) === 'tmp:') {
996 $file = substr($file, 4);
997 $tmp = true;
998 }
999 if ($shortcode[2] === 'e2pdf-save' || isset($atts['pdf'])) {
1000 if ($tmp) {
1001 $this->helper->add('formidable_attachments', $file);
1002 }
1003 } else {
1004 $this->helper->add('formidable_attachments', $file);
1005 }
1006 $attachments[] = $file;
1007 }
1008 if ($transient) {
1009 delete_transient($transient);
1010 }
1011 }
1012 }
1013 }
1014 }
1015 }
1016 return $attachments;
1017 }
1018
1019 /**
1020 * Decrypt protected uploaded file in a File Upload field
1021 * @param string $html
1022 * @param array $atts
1023 * @return string $html
1024 */
1025 public function filter_frm_image_html_array($html, $atts) {
1026
1027 if (isset($atts['decrypt']) &&
1028 $atts['decrypt'] &&
1029 class_exists('FrmProFileField') &&
1030 class_exists('FrmProFilePayloadBuilder') &&
1031 class_exists('FrmAppHelper')
1032 ) {
1033
1034 $id = $atts['media_id'];
1035 $permission = isset($atts['permission']) && $atts['permission'] ? true : false;
1036
1037 remove_filter('wp_get_attachment_url', 'FrmProFileField::filter_attachment_url');
1038 remove_filter('wp_get_attachment_image_src', 'FrmProFileField::filter_attachment_image_src');
1039
1040 $is_image = wp_attachment_is_image($id);
1041 $url = $this->get_file_url($id, $is_image ? $atts['size'] : false);
1042
1043 if (!FrmProFileField::user_has_permission($id) && !$permission) {
1044 $frm_settings = FrmAppHelper::get_settings();
1045 $html = $frm_settings->admin_permission;
1046 } else {
1047 $html = $atts['show_image'] ? wp_get_attachment_image($id, $atts['size'], !$is_image) : '';
1048
1049 /* If show_filename=1 is included */
1050 if ($atts['show_filename']) {
1051 $label = $this->get_single_file_name($id);
1052 if ($atts['show_image']) {
1053 $html .= ' <span id="frm_media_' . absint($id) . '" class="frm_upload_label">' . $label . '</span>';
1054 } else {
1055 $html .= $label;
1056 }
1057 }
1058
1059 /* If neither show_image or show_filename are included, get file URL */
1060 if (!$html) {
1061 $html = $url;
1062 }
1063
1064 /* If add_link=1 is included */
1065 if ($atts['add_link'] || (!$is_image && $atts['add_link_for_non_image'])) {
1066 $href = $is_image ? $this->get_file_url($id) : $url;
1067 $target = !empty($atts['new_tab']) ? ' target="_blank"' : '';
1068 $html = '<a href="' . esc_url($href) . '" class="frm_file_link"' . $target . '>' . $html . '</a>';
1069 }
1070
1071 if (!empty($atts['class'])) {
1072 $html = str_replace(' class="', ' class="' . esc_attr($atts['class'] . ' '), $html);
1073 }
1074
1075 add_filter('wp_get_attachment_url', 'FrmProFileField::filter_attachment_url', 10, 2);
1076 add_filter('wp_get_attachment_image_src', 'FrmProFileField::filter_attachment_image_src', 10, 4);
1077 }
1078 }
1079
1080 return $html;
1081 }
1082
1083 /**
1084 * @param int $id
1085 * @param string|int[]|bool $size
1086 * @param array $args supported keys include "url" and "leave_size_out_of_payload"
1087 * @return string unprotected url to use for our specified file id and size.
1088 */
1089 public function get_file_url($id, $size = false, $args = array()) {
1090 $url = isset($args['url']) ? $args['url'] : false;
1091 $builder = new FrmProFilePayloadBuilder($id, $size, $url);
1092 return $builder->get_url();
1093 }
1094
1095 /**
1096 * Remove Page Breaks for Visual Mapper
1097 * @param array $fields - List of fields
1098 * @return array - Updated fields
1099 */
1100 public function filter_remove_pagebreaks($fields) {
1101 foreach ((array) $fields as $field_key => $field) {
1102 if ($field->type == 'break') {
1103 unset($fields[$field_key]);
1104 }
1105 }
1106 return $fields;
1107 }
1108
1109 public function filter_frm_match_xml_form($edit_query, $form) {
1110 if (isset($edit_query['created_at'])) {
1111 $edit_query['created_at'] = date('Y-m-d H:i:s', strtotime('now'));
1112 }
1113 return $edit_query;
1114 }
1115
1116 public function filter_frm_show_new_entry_page() {
1117 return 'new';
1118 }
1119
1120 public function filter_frm_pre_display_form($form) {
1121 if (!empty($form->options['single_entry'])) {
1122 $form->options['single_entry'] = 0;
1123 }
1124 return $form;
1125 }
1126
1127 /**
1128 * Add options for Formidable extension
1129 * @param array $options - List of options
1130 * @return array - Updated options list
1131 */
1132 public function filter_e2pdf_model_options_get_options_options($options = array()) {
1133 $options['formidable_group'] = array(
1134 'name' => 'Formidable Forms',
1135 'action' => 'extension',
1136 'group' => 'formidable_group',
1137 'options' => array(
1138 array(
1139 'name' => __('Auto PDF and Visual Mapper', 'e2pdf'),
1140 'key' => 'e2pdf_formidable_use_keys',
1141 'value' => get_option('e2pdf_formidable_use_keys', '0'),
1142 'default_value' => '0',
1143 'type' => 'checkbox',
1144 'checkbox_value' => '1',
1145 'placeholder' => __('Use Field Keys instead Field IDs', 'e2pdf'),
1146 ),
1147 array(
1148 'name' => __('Filter', 'e2pdf'),
1149 'key' => 'e2pdf_formidable_disable_filter',
1150 'value' => get_option('e2pdf_formidable_disable_filter', '0'),
1151 'default_value' => '0',
1152 'type' => 'checkbox',
1153 'checkbox_value' => '1',
1154 'placeholder' => __('Disable Filter', 'e2pdf'),
1155 ),
1156 ),
1157 );
1158 return $options;
1159 }
1160
1161 public function filter_e2pdf_controller_templates_import_options($options) {
1162
1163 if (isset($options['item'])) {
1164 $options['item']['options'][] = array(
1165 'name' => 'Formidable Forms',
1166 'key' => 'options[formidable_item_new_form]',
1167 'value' => 1,
1168 'default_value' => 0,
1169 'type' => 'radio',
1170 'li' => array(
1171 'class' => 'e2pdf-import-extension-option e2pdf-hide',
1172 ),
1173 'options' => array(
1174 '1' => 'Recreate Web Form',
1175 '0' => 'Overwrite Web Form',
1176 ),
1177 );
1178 }
1179
1180 return $options;
1181 }
1182
1183 public function filter_e2pdf_controller_templates_backup_options($options, $template, $extension) {
1184
1185 if ($extension->loaded('formidable')) {
1186 $options['formidable'] = array(
1187 'name' => 'Formidable Forms',
1188 'options' => array(
1189 array(
1190 'name' => __('Force shortcodes to use', 'e2pdf'),
1191 'key' => 'options[formidable_force_shortcodes]',
1192 'value' => 0,
1193 'default_value' => 0,
1194 'type' => 'select',
1195 'options' => array(
1196 '0' => __('None', 'e2pdf'),
1197 '1' => __('Fields IDs', 'e2pdf'),
1198 '2' => __('Field Keys', 'e2pdf'),
1199 ),
1200 ),
1201 ),
1202 );
1203 }
1204
1205 return $options;
1206 }
1207
1208 public function filter_e2pdf_controller_templates_backup_pages($pages, $options, $template, $extension) {
1209
1210 if ($extension->loaded('formidable') && (isset($options['formidable_force_shortcodes']) && $options['formidable_force_shortcodes'])) {
1211 $fields = array();
1212 if ($template->get('item') == '-2') {
1213 if ($template->get('item1')) {
1214 $where = array('fi.form_id' => (int) $template->get('item1'));
1215 $item_fields = FrmField::getAll($where, 'id ASC');
1216 if ($item_fields) {
1217 $fields = array_merge($fields, $item_fields);
1218 }
1219 }
1220 if ($template->get('item2')) {
1221 $where = array('fi.form_id' => (int) $template->get('item2'));
1222 $item_fields = FrmField::getAll($where, 'id ASC');
1223 if ($item_fields) {
1224 $fields = array_merge($fields, $item_fields);
1225 }
1226 }
1227 } else {
1228 $where = array('fi.form_id' => (int) $template->get('item'));
1229 $fields = FrmField::getAll($where, 'id ASC');
1230 }
1231
1232 $search = array();
1233 $replace = array();
1234
1235 if ($options['formidable_force_shortcodes'] == '1') {
1236 foreach ($fields as $field_key => $field) {
1237 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1238 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1239 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1240 foreach ($sub_fields as $sub_field_key => $sub_field) {
1241 $search[] = $sub_field->field_key;
1242 $replace[] = $sub_field->id;
1243 }
1244 $search[] = $field->field_key;
1245 $replace[] = $field->id;
1246 } else {
1247 $search[] = $field->field_key;
1248 $replace[] = $field->id;
1249 }
1250 }
1251 } elseif ($options['formidable_force_shortcodes'] == '2') {
1252 foreach ($fields as $field_key => $field) {
1253
1254 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1255 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1256 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1257 foreach ($sub_fields as $sub_field_key => $sub_field) {
1258 $search[] = $sub_field->id;
1259 $replace[] = $sub_field->field_key;
1260 }
1261 $search[] = $field->id;
1262 $replace[] = $field->field_key;
1263 } else {
1264 $search[] = $field->id;
1265 $replace[] = $field->field_key;
1266 }
1267 }
1268 }
1269
1270 $search = array_reverse($search);
1271 $replace = array_reverse($replace);
1272 $list = array_combine($search, $replace);
1273 $pages = $this->pages_replace_shortcodes($pages, $list);
1274 }
1275
1276 return $pages;
1277 }
1278
1279 public function filter_e2pdf_controller_templates_backup_actions($actions, $options, $template, $extension) {
1280
1281 if ($extension->loaded('formidable') && (isset($options['formidable_force_shortcodes']) && $options['formidable_force_shortcodes'])) {
1282 $fields = array();
1283 if ($template->get('item') == '-2') {
1284 if ($template->get('item1')) {
1285 $where = array('fi.form_id' => (int) $template->get('item1'));
1286 $item_fields = FrmField::getAll($where, 'id ASC');
1287 if ($item_fields) {
1288 $fields = array_merge($fields, $item_fields);
1289 }
1290 }
1291 if ($template->get('item2')) {
1292 $where = array('fi.form_id' => (int) $template->get('item2'));
1293 $item_fields = FrmField::getAll($where, 'id ASC');
1294 if ($item_fields) {
1295 $fields = array_merge($fields, $item_fields);
1296 }
1297 }
1298 } else {
1299 $where = array('fi.form_id' => (int) $template->get('item'));
1300 $fields = FrmField::getAll($where, 'id ASC');
1301 }
1302
1303 $search = array();
1304 $replace = array();
1305
1306 if ($options['formidable_force_shortcodes'] == '1') {
1307 foreach ($fields as $field_key => $field) {
1308 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1309 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1310 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1311 foreach ($sub_fields as $sub_field_key => $sub_field) {
1312 $search[] = $sub_field->field_key;
1313 $replace[] = $sub_field->id;
1314 }
1315 $search[] = $field->field_key;
1316 $replace[] = $field->id;
1317 } else {
1318 $search[] = $field->field_key;
1319 $replace[] = $field->id;
1320 }
1321 }
1322 } elseif ($options['formidable_force_shortcodes'] == '2') {
1323 foreach ($fields as $field_key => $field) {
1324
1325 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1326 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1327 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1328 foreach ($sub_fields as $sub_field_key => $sub_field) {
1329 $search[] = $sub_field->id;
1330 $replace[] = $sub_field->field_key;
1331 }
1332 $search[] = $field->id;
1333 $replace[] = $field->field_key;
1334 } else {
1335 $search[] = $field->id;
1336 $replace[] = $field->field_key;
1337 }
1338 }
1339 }
1340
1341 $search = array_reverse($search);
1342 $replace = array_reverse($replace);
1343 $list = array_combine($search, $replace);
1344 $actions = $this->actions_replace_shortcodes($actions, $list);
1345 }
1346
1347 return $actions;
1348 }
1349
1350 public function filter_e2pdf_controller_templates_backup_replace_shortcodes($value, $options, $template, $extension) {
1351
1352 if ($extension->loaded('formidable') && (isset($options['formidable_force_shortcodes']) && $options['formidable_force_shortcodes'])) {
1353 $fields = array();
1354 if ($template->get('item') == '-2') {
1355 if ($template->get('item1')) {
1356 $where = array('fi.form_id' => (int) $template->get('item1'));
1357 $item_fields = FrmField::getAll($where, 'id ASC');
1358 if ($item_fields) {
1359 $fields = array_merge($fields, $item_fields);
1360 }
1361 }
1362 if ($template->get('item2')) {
1363 $where = array('fi.form_id' => (int) $template->get('item2'));
1364 $item_fields = FrmField::getAll($where, 'id ASC');
1365 if ($item_fields) {
1366 $fields = array_merge($fields, $item_fields);
1367 }
1368 }
1369 } else {
1370 $where = array('fi.form_id' => (int) $template->get('item'));
1371 $fields = FrmField::getAll($where, 'id ASC');
1372 }
1373
1374 $search = array();
1375 $replace = array();
1376
1377 if ($options['formidable_force_shortcodes'] == '1') {
1378 foreach ($fields as $field_key => $field) {
1379 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1380 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1381 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1382 foreach ($sub_fields as $sub_field_key => $sub_field) {
1383 $search[] = $sub_field->field_key;
1384 $replace[] = $sub_field->id;
1385 }
1386 $search[] = $field->field_key;
1387 $replace[] = $field->id;
1388 } else {
1389 $search[] = $field->field_key;
1390 $replace[] = $field->id;
1391 }
1392 }
1393 } elseif ($options['formidable_force_shortcodes'] == '2') {
1394 foreach ($fields as $field_key => $field) {
1395
1396 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1397 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1398 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1399 foreach ($sub_fields as $sub_field_key => $sub_field) {
1400 $search[] = $sub_field->id;
1401 $replace[] = $sub_field->field_key;
1402 }
1403 $search[] = $field->id;
1404 $replace[] = $field->field_key;
1405 } else {
1406 $search[] = $field->id;
1407 $replace[] = $field->field_key;
1408 }
1409 }
1410 }
1411
1412 $search = array_reverse($search);
1413 $replace = array_reverse($replace);
1414 $list = array_combine($search, $replace);
1415 $value = $this->replace_shortcodes($value, $list);
1416 }
1417
1418 return $value;
1419 }
1420
1421 public function filter_e2pdf_controller_templates_import_pages($pages, $options, $xml, $template, $extension) {
1422
1423 if ($extension->loaded('formidable') &&
1424 $template->get('item') &&
1425 (($template->get('item') != '-2' && $template->get('item') != (string) $xml->template->item) || ($template->get('item') == '-2' && ($template->get('item1') != (string) $xml->template->item1 || $template->get('item2') != (string) $xml->template->item2))) &&
1426 $xml->item->formidable &&
1427 $options['item'] &&
1428 class_exists('FrmXMLHelper') &&
1429 class_exists('FrmField')
1430 ) {
1431
1432 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
1433 file_put_contents($tmp, base64_decode((string) $xml->item->formidable), LOCK_EX);
1434 $dom = new DOMDocument();
1435 $success = $dom->loadXML(file_get_contents($tmp));
1436 $old_ids = array();
1437 $old_keys = array();
1438 if ($success && function_exists('simplexml_import_dom')) {
1439 $item_xml = simplexml_import_dom($dom);
1440 foreach ($item_xml->form as $form_key => $form) {
1441 if (($template->get('item') != '-2' && (string) $form->id == (string) $xml->template->item) || ($template->get('item') == '-2' && ((string) $form->id == (string) $xml->template->item1 || (string) $form->id == (string) $xml->template->item2))) {
1442 foreach ($form->field as $field_key => $field) {
1443 $field_options = @json_decode((string) $field->field_options, true); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
1444 if (isset($field_options['form_select']) && $field_options['form_select']) {
1445 foreach ($item_xml->form as $sub_form_key => $sub_form) {
1446 if ((string) $sub_form->id == $field_options['form_select']) {
1447 foreach ($sub_form->field as $sub_field_key => $sub_field) {
1448 $old_ids[] = (string) $sub_field->id;
1449 $old_keys[] = (string) $sub_field->field_key;
1450 }
1451 }
1452 }
1453 $old_ids[] = (string) $field->id;
1454 $old_keys[] = (string) $field->field_key;
1455 } else {
1456 $old_ids[] = (string) $field->id;
1457 $old_keys[] = (string) $field->field_key;
1458 }
1459 }
1460 }
1461 }
1462 }
1463
1464 $fields = array();
1465 if ($template->get('item') == '-2') {
1466 if ($template->get('item1')) {
1467 $where = array('fi.form_id' => (int) $template->get('item1'));
1468 $item_fields = FrmField::getAll($where, 'id ASC');
1469 if ($item_fields) {
1470 $fields = array_merge($fields, $item_fields);
1471 }
1472 }
1473
1474 if ($template->get('item2')) {
1475 $where = array('fi.form_id' => (int) $template->get('item2'));
1476 $item_fields = FrmField::getAll($where, 'id ASC');
1477 if ($item_fields) {
1478 $fields = array_merge($fields, $item_fields);
1479 }
1480 }
1481 } else {
1482 $where = array('fi.form_id' => (int) $template->get('item'));
1483 $fields = FrmField::getAll($where, 'id ASC');
1484 }
1485
1486 $new_ids = array();
1487 $new_keys = array();
1488
1489 foreach ($fields as $field_key => $field) {
1490
1491 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1492 $sub_where = array('fi.form_id' => (int) $field->field_options['form_select']);
1493 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1494 foreach ($sub_fields as $sub_field_key => $sub_field) {
1495 $new_ids[] = $sub_field->id;
1496 $new_keys[] = $sub_field->field_key;
1497 }
1498 $new_ids[] = $field->id;
1499 $new_keys[] = $field->field_key;
1500 } else {
1501 $new_ids[] = $field->id;
1502 $new_keys[] = $field->field_key;
1503 }
1504 }
1505
1506 if (count($old_ids) === count($new_ids)) {
1507 $old_ids = array_reverse($old_ids);
1508 $new_ids = array_reverse($new_ids);
1509
1510 $old_keys = array_reverse($old_keys);
1511 $new_keys = array_reverse($new_keys);
1512
1513 $list_ids = array_combine($old_ids, $new_ids);
1514 $pages = $this->pages_replace_shortcodes($pages, $list_ids);
1515
1516 $list_keys = array_combine($old_keys, $new_keys);
1517 $pages = $this->pages_replace_shortcodes($pages, $list_keys);
1518 }
1519
1520 unset($dom);
1521 unlink($tmp);
1522 }
1523
1524 return $pages;
1525 }
1526
1527 public function filter_e2pdf_controller_templates_import_actions($actions, $options, $xml, $template, $extension) {
1528
1529 if ($extension->loaded('formidable') &&
1530 $template->get('item') &&
1531 (($template->get('item') != '-2' && $template->get('item') != (string) $xml->template->item) || ($template->get('item') == '-2' && ($template->get('item1') != (string) $xml->template->item1 || $template->get('item2') != (string) $xml->template->item2))) &&
1532 $xml->item->formidable &&
1533 $options['item'] &&
1534 class_exists('FrmXMLHelper') &&
1535 class_exists('FrmField')
1536 ) {
1537
1538 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
1539 file_put_contents($tmp, base64_decode((string) $xml->item->formidable), LOCK_EX);
1540
1541 $dom = new DOMDocument();
1542 $success = $dom->loadXML(file_get_contents($tmp));
1543
1544 $old_ids = array();
1545 $old_keys = array();
1546
1547 if ($success && function_exists('simplexml_import_dom')) {
1548 $item_xml = simplexml_import_dom($dom);
1549
1550 foreach ($item_xml->form as $form_key => $form) {
1551 if (($template->get('item') != '-2' && (string) $form->id == (string) $xml->template->item) || ($template->get('item') == '-2' && ((string) $form->id == (string) $xml->template->item1 || (string) $form->id == (string) $xml->template->item2))) {
1552 foreach ($form->field as $field_key => $field) {
1553 $field_options = @json_decode((string) $field->field_options, true); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
1554 if (isset($field_options['form_select']) && $field_options['form_select']) {
1555 foreach ($item_xml->form as $sub_form_key => $sub_form) {
1556 if ((string) $sub_form->id == $field_options['form_select']) {
1557 foreach ($sub_form->field as $sub_field_key => $sub_field) {
1558 $old_ids[] = (string) $sub_field->id;
1559 $old_keys[] = (string) $sub_field->field_key;
1560 }
1561 }
1562 }
1563 $old_ids[] = (string) $field->id;
1564 $old_keys[] = (string) $field->field_key;
1565 } else {
1566 $old_ids[] = (string) $field->id;
1567 $old_keys[] = (string) $field->field_key;
1568 }
1569 }
1570 }
1571 }
1572 }
1573
1574 $fields = array();
1575 if ($template->get('item') == '-2') {
1576 if ($template->get('item1')) {
1577 $where = array('fi.form_id' => (int) $template->get('item1'));
1578 $item_fields = FrmField::getAll($where, 'id ASC');
1579 if ($item_fields) {
1580 $fields = array_merge($fields, $item_fields);
1581 }
1582 }
1583
1584 if ($template->get('item2')) {
1585 $where = array('fi.form_id' => (int) $template->get('item2'));
1586 $item_fields = FrmField::getAll($where, 'id ASC');
1587
1588 if ($item_fields) {
1589 $fields = array_merge($fields, $item_fields);
1590 }
1591 }
1592 } else {
1593 $where = array('fi.form_id' => (int) $template->get('item'));
1594 $fields = FrmField::getAll($where, 'id ASC');
1595 }
1596
1597 $new_ids = array();
1598 $new_keys = array();
1599
1600 foreach ($fields as $field_key => $field) {
1601
1602 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1603 $sub_where = array('fi.form_id' => (int) $field->field_options['form_select']);
1604 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1605 foreach ($sub_fields as $sub_field_key => $sub_field) {
1606 $new_ids[] = $sub_field->id;
1607 $new_keys[] = $sub_field->field_key;
1608 }
1609 $new_ids[] = $field->id;
1610 $new_keys[] = $field->field_key;
1611 } else {
1612 $new_ids[] = $field->id;
1613 $new_keys[] = $field->field_key;
1614 }
1615 }
1616
1617 if (count($old_ids) === count($new_ids)) {
1618 $old_ids = array_reverse($old_ids);
1619 $new_ids = array_reverse($new_ids);
1620
1621 $old_keys = array_reverse($old_keys);
1622 $new_keys = array_reverse($new_keys);
1623
1624 $list_ids = array_combine($old_ids, $new_ids);
1625 $actions = $this->actions_replace_shortcodes($actions, $list_ids);
1626
1627 $list_keys = array_combine($old_keys, $new_keys);
1628 $actions = $this->pages_replace_shortcodes($actions, $list_keys);
1629 }
1630 unset($dom);
1631 unlink($tmp);
1632 }
1633
1634 return $actions;
1635 }
1636
1637 public function filter_frm_graph_shortcode_custom_html($html, $data) {
1638 if (apply_filters('e2pdf_pdf_render', false)) {
1639 return serialize($data['graph_data']);
1640 }
1641 return $html;
1642 }
1643
1644 public function filter_e2pdf_controller_templates_import_replace_shortcodes($value, $options, $xml, $template, $extension) {
1645
1646 if ($extension->loaded('formidable') &&
1647 $template->get('item') &&
1648 (($template->get('item') != '-2' && $template->get('item') != (string) $xml->template->item) || ($template->get('item') == '-2' && ($template->get('item1') != (string) $xml->template->item1 || $template->get('item2') != (string) $xml->template->item2))) &&
1649 $xml->item->formidable &&
1650 $options['item'] &&
1651 class_exists('FrmXMLHelper') &&
1652 class_exists('FrmField')
1653 ) {
1654
1655 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
1656 file_put_contents($tmp, base64_decode((string) $xml->item->formidable), LOCK_EX);
1657
1658 $dom = new DOMDocument();
1659 $success = $dom->loadXML(file_get_contents($tmp));
1660
1661 $old_ids = array();
1662 $old_keys = array();
1663
1664 if ($success && function_exists('simplexml_import_dom')) {
1665 $item_xml = simplexml_import_dom($dom);
1666 foreach ($item_xml->form as $form_key => $form) {
1667 if (($template->get('item') != '-2' && (string) $form->id == (string) $xml->template->item) || ($template->get('item') == '-2' && ((string) $form->id == (string) $xml->template->item1 || (string) $form->id == (string) $xml->template->item2))) {
1668 foreach ($form->field as $field_key => $field) {
1669 $field_options = @json_decode((string) $field->field_options, true); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
1670 if (isset($field_options['form_select']) && $field_options['form_select']) {
1671 foreach ($item_xml->form as $sub_form_key => $sub_form) {
1672 if ((string) $sub_form->id == $field_options['form_select']) {
1673 foreach ($sub_form->field as $sub_field_key => $sub_field) {
1674 $old_ids[] = (string) $sub_field->id;
1675 $old_keys[] = (string) $sub_field->field_key;
1676 }
1677 }
1678 }
1679 $old_ids[] = (string) $field->id;
1680 $old_keys[] = (string) $field->field_key;
1681 } else {
1682 $old_ids[] = (string) $field->id;
1683 $old_keys[] = (string) $field->field_key;
1684 }
1685 }
1686 }
1687 }
1688 }
1689
1690 $fields = array();
1691 if ($template->get('item') == '-2') {
1692 if ($template->get('item1')) {
1693 $where = array('fi.form_id' => (int) $template->get('item1'));
1694 $item_fields = FrmField::getAll($where, 'id ASC');
1695 if ($item_fields) {
1696 $fields = array_merge($fields, $item_fields);
1697 }
1698 }
1699
1700 if ($template->get('item2')) {
1701 $where = array('fi.form_id' => (int) $template->get('item2'));
1702 $item_fields = FrmField::getAll($where, 'id ASC');
1703
1704 if ($item_fields) {
1705 $fields = array_merge($fields, $item_fields);
1706 }
1707 }
1708 } else {
1709 $where = array('fi.form_id' => (int) $template->get('item'));
1710 $fields = FrmField::getAll($where, 'id ASC');
1711 }
1712
1713 $new_ids = array();
1714 $new_keys = array();
1715
1716 foreach ($fields as $field_key => $field) {
1717 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1718 $sub_where = array('fi.form_id' => (int) $field->field_options['form_select']);
1719 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1720 foreach ($sub_fields as $sub_field_key => $sub_field) {
1721 $new_ids[] = $sub_field->id;
1722 $new_keys[] = $sub_field->field_key;
1723 }
1724 $new_ids[] = $field->id;
1725 $new_keys[] = $field->field_key;
1726 } else {
1727 $new_ids[] = $field->id;
1728 $new_keys[] = $field->field_key;
1729 }
1730 }
1731
1732 if (count($old_ids) === count($new_ids)) {
1733
1734 $old_ids = array_reverse($old_ids);
1735 $new_ids = array_reverse($new_ids);
1736
1737 $old_keys = array_reverse($old_keys);
1738 $new_keys = array_reverse($new_keys);
1739
1740 $list_ids = array_combine($old_ids, $new_ids);
1741 $value = $this->replace_shortcodes($value, $list_ids);
1742
1743 $list_keys = array_combine($old_keys, $new_keys);
1744 $value = $this->replace_shortcodes($value, $list_keys);
1745 }
1746
1747 unset($dom);
1748 unlink($tmp);
1749 }
1750 return $value;
1751 }
1752
1753 /**
1754 * Delete attachments that were sent by email
1755 */
1756 public function action_frm_notification() {
1757
1758 $files = $this->helper->get('formidable_attachments');
1759 if (is_array($files) && !empty($files)) {
1760 foreach ($files as $key => $file) {
1761 $this->helper->delete_dir(dirname($file) . '/');
1762 }
1763 $this->helper->deset('formidable_attachments');
1764 }
1765 }
1766
1767 /**
1768 * Fix to render E2Pdf shortcodes with beforeContent and afterContent inside Formidable Form View Preview
1769 */
1770 public function action_check_ajax_referer($action, $result) {
1771 if ($action == 'frm_ajax' && false !== $result && isset($_POST['action']) && $_POST['action'] == 'frm_views_process_box_preview') {
1772 if (isset($_POST['beforeContent']) && $_POST['beforeContent']) {
1773 $_POST['beforeContent'] = $this->filter_view_preview_before_after_content($_POST['beforeContent']);
1774 }
1775 if (isset($_POST['afterContent']) && $_POST['afterContent']) {
1776 $_POST['afterContent'] = $this->filter_view_preview_before_after_content($_POST['afterContent']);
1777 }
1778 }
1779 }
1780
1781 public function action_frm_default_value($entry_id, $form_id) {
1782 global $wpdb;
1783 if ($form_id) {
1784 $fields = $wpdb->get_results($wpdb->prepare('SELECT * FROM `' . $wpdb->prefix . 'frm_fields` WHERE form_id = %d AND (default_value LIKE %s OR default_value LIKE %s)', $form_id, '%[e2pdf-download%', '%[e2pdf-save%'));
1785 if (!empty($fields)) {
1786 foreach ($fields as $key => $field) {
1787 $meta = FrmEntryMeta::get_entry_meta_by_field($entry_id, $field->id);
1788 if ($meta === null) {
1789 $new_value = $this->filter_frm_content($field->default_value, FrmForm::getOne($form_id), $entry_id);
1790 $added = FrmEntryMeta::add_entry_meta($entry_id, $field->id, null, $new_value);
1791 if (!$added) {
1792 FrmEntryMeta::update_entry_meta($entry_id, $field->id, null, $new_value);
1793 }
1794 }
1795 }
1796 }
1797 }
1798 }
1799
1800 /**
1801 * Filter "get" shortcodes with beforeContent and afterContent inside Formidable Form View Preview
1802 * @param type $content
1803 * @return type
1804 */
1805 public function filter_view_preview_before_after_content($content) {
1806
1807 if (false !== strpos($content, '[get ') && (
1808 false !== strpos($content, 'e2pdf-download') ||
1809 false !== strpos($content, 'e2pdf-save') ||
1810 false !== strpos($content, 'e2pdf-view') ||
1811 false !== strpos($content, 'e2pdf-adobesign') ||
1812 false !== strpos($content, 'e2pdf-zapier') ||
1813 false !== strpos($content, 'e2pdf-attachment')
1814 )) {
1815 $shortcode_tags = array(
1816 'get',
1817 );
1818 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
1819 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1820 if (!empty($tagnames)) {
1821 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
1822 foreach ($shortcodes[0] as $key => $shortcode_value) {
1823 $content = str_replace($shortcode_value, $this->convert_shortcodes($shortcode_value), $content);
1824 }
1825 }
1826 }
1827 return $content;
1828 }
1829
1830 public function filter_filter_content($content, $form, $entry = false) {
1831 $content = FrmFormsController::replace_form_name_shortcodes($content, $form);
1832 if (!$entry) {
1833 return $content;
1834 }
1835 if (is_object($form)) {
1836 $form = $form->id;
1837 }
1838 if (!empty($entry->parent_entry)) {
1839 $form = $entry->parent_entry->form_id;
1840 }
1841 $shortcodes = $this->get('cached_shortcodes');
1842 $content = apply_filters('frm_replace_content_shortcodes', $content, $entry, $shortcodes);
1843 return $content;
1844 }
1845
1846 /**
1847 * Auto Generate of Template for this extension
1848 * @return array - List of elements
1849 */
1850 public function auto() {
1851
1852 $response = array();
1853 $elements = array();
1854
1855 $form_id = $this->get('item');
1856
1857 $fields = array();
1858 if (class_exists('FrmField')) {
1859 $fields = FrmField::get_all_for_form($form_id, '', 'include', 'include');
1860 }
1861
1862 if ($fields) {
1863 foreach ($fields as $key => $field) {
1864 $field_id = get_option('e2pdf_formidable_use_keys', '0') ? $field->field_key : $field->id;
1865
1866 if ($field->type === 'lookup' && isset($field->field_options['data_type'])) {
1867 if ($field->field_options['data_type'] == 'select') {
1868 $field->options = array(
1869 '[e2pdf-frm-lookup-values id="' . $field_id . '"]',
1870 );
1871 } elseif ($field->field_options['data_type'] == 'radio' || $field->field_options['data_type'] == 'checkbox') {
1872 $options = array();
1873 $frm_filter = false;
1874 if (class_exists('FrmProFieldsHelper') && method_exists('FrmProFieldsHelper', 'add_default_field_settings')) {
1875 if (!has_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings')) {
1876 add_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings', 10, 2);
1877 $frm_filter = true;
1878 }
1879 }
1880
1881 $args = array();
1882 $field_array = FrmAppHelper::start_field_array($field);
1883 FrmFieldsHelper::prepare_new_front_field($field_array, $field, $args);
1884 $field_array = array_merge($field->field_options, $field_array);
1885 if (isset($field_array['options']) && is_array($field_array['options'])) {
1886 $options = $field_array['options'];
1887 }
1888 if ($frm_filter) {
1889 remove_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings');
1890 }
1891 $field->options = $options;
1892 }
1893 $field->type = $field->field_options['data_type'];
1894 } elseif ($field->type === 'data' && isset($field->field_options['data_type'])) {
1895 if ($field->field_options['data_type'] == 'select') {
1896 $field->options = array(
1897 '[e2pdf-frm-data-values id="' . $field_id . '"]',
1898 );
1899 } elseif ($field->field_options['data_type'] == 'radio' || $field->field_options['data_type'] == 'checkbox') {
1900 $options = array();
1901 $frm_filter = false;
1902 if (class_exists('FrmProFieldsHelper') && method_exists('FrmProFieldsHelper', 'add_default_field_settings')) {
1903 if (!has_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings')) {
1904 add_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings', 10, 2);
1905 $frm_filter = true;
1906 }
1907 }
1908
1909 $args = array();
1910 $field->field_options['restrict'] = '0';
1911 $field_array = FrmAppHelper::start_field_array($field);
1912 FrmFieldsHelper::prepare_new_front_field($field_array, $field, $args);
1913
1914 $field_array = array_merge($field->field_options, $field_array);
1915 if (isset($field_array['options']) && is_array($field_array['options'])) {
1916 $options = $field_array['options'];
1917 }
1918
1919 if ($frm_filter) {
1920 remove_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings');
1921 }
1922 $field->options = $options;
1923 }
1924 $field->type = $field->field_options['data_type'];
1925 }
1926
1927 /*
1928 * Repeatable fields Field ID modification
1929 * @since 0.01.42
1930 */
1931 if ($field->type !== 'lookup' && $field->type !== 'data' && isset($field->form_id) && $field->form_id != $form_id) {
1932 $field_id = $field_id . ':1';
1933 }
1934
1935 switch ($field->type) {
1936 case 'divider':
1937 if ($field->name) {
1938 $elements[] = $this->auto_field(
1939 $field,
1940 array(
1941 'type' => 'e2pdf-html',
1942 'block' => true,
1943 'properties' => array(
1944 'top' => '20',
1945 'left' => '20',
1946 'right' => '20',
1947 'width' => '100%',
1948 'height' => 'auto',
1949 'value' => '<h2>' . $field->name . '</h2>',
1950 ),
1951 )
1952 );
1953 }
1954 break;
1955 case 'html':
1956 if ($field->description) {
1957 $elements[] = $this->auto_field(
1958 $field,
1959 array(
1960 'type' => 'e2pdf-html',
1961 'block' => true,
1962 'properties' => array(
1963 'top' => '20',
1964 'left' => '20',
1965 'right' => '20',
1966 'width' => '100%',
1967 'height' => 'auto',
1968 'value' => $field->description,
1969 ),
1970 )
1971 );
1972 }
1973 break;
1974 case 'signature':
1975 $elements[] = $this->auto_field(
1976 $field,
1977 array(
1978 'type' => 'e2pdf-html',
1979 'block' => true,
1980 'properties' => array(
1981 'top' => '20',
1982 'left' => '20',
1983 'right' => '20',
1984 'width' => '100%',
1985 'height' => 'auto',
1986 'value' => $field->name,
1987 ),
1988 )
1989 );
1990
1991 $elements[] = $this->auto_field(
1992 $field,
1993 array(
1994 'type' => 'e2pdf-signature',
1995 'properties' => array(
1996 'top' => '5',
1997 'width' => '100%',
1998 'height' => '150',
1999 'dimension' => '1',
2000 'block_dimension' => '1',
2001 'value' => '[' . $field_id . ']',
2002 ),
2003 )
2004 );
2005 break;
2006 case 'scale':
2007 $elements[] = $this->auto_field(
2008 $field,
2009 array(
2010 'type' => 'e2pdf-html',
2011 'block' => true,
2012 'properties' => array(
2013 'top' => '20',
2014 'left' => '20',
2015 'right' => '20',
2016 'width' => '100%',
2017 'height' => 'auto',
2018 'value' => $field->name,
2019 ),
2020 )
2021 );
2022
2023 if (isset($field->options) && is_array($field->options)) {
2024 $start = true;
2025 foreach ($field->options as $opt_key => $option) {
2026 if (is_array($option)) {
2027 $elements[] = $this->auto_field(
2028 $field,
2029 array(
2030 'type' => 'e2pdf-radio',
2031 'float' => $start ? false : true,
2032 'properties' => array(
2033 'top' => $start ? '5' : '0',
2034 'left' => $start ? '0' : '5',
2035 'width' => 'auto',
2036 'height' => 'auto',
2037 'value' => '[' . $field_id . ']',
2038 'option' => $option['value'],
2039 'group' => 'group_' . $field_id,
2040 ),
2041 )
2042 );
2043 } else {
2044 $elements[] = $this->auto_field(
2045 $field,
2046 array(
2047 'type' => 'e2pdf-radio',
2048 'float' => $start ? false : true,
2049 'properties' => array(
2050 'top' => $start ? '5' : '0',
2051 'left' => $start ? '0' : '5',
2052 'width' => 'auto',
2053 'height' => 'auto',
2054 'value' => '[' . $field_id . ']',
2055 'option' => $option,
2056 'group' => 'group_' . $field_id,
2057 ),
2058 )
2059 );
2060 }
2061
2062 $start = false;
2063 }
2064
2065 $start = true;
2066 foreach ($field->options as $opt_key => $option) {
2067 if (is_array($option)) {
2068
2069 $elements[] = $this->auto_field(
2070 $field,
2071 array(
2072 'type' => 'e2pdf-html',
2073 'float' => $start ? false : true,
2074 'properties' => array(
2075 'top' => $start ? '5' : '0',
2076 'left' => $start ? '0' : '5',
2077 'width' => 'auto',
2078 'height' => 'auto',
2079 'value' => $option['label'],
2080 'text_align' => 'center',
2081 ),
2082 )
2083 );
2084 } else {
2085 $elements[] = $this->auto_field(
2086 $field,
2087 array(
2088 'type' => 'e2pdf-html',
2089 'float' => $start ? false : true,
2090 'properties' => array(
2091 'top' => $start ? '5' : '0',
2092 'left' => $start ? '0' : '5',
2093 'width' => 'auto',
2094 'height' => 'auto',
2095 'value' => $option,
2096 'text_align' => 'center',
2097 ),
2098 )
2099 );
2100 }
2101 $start = false;
2102 }
2103 }
2104 break;
2105 case 'rte':
2106 $elements[] = $this->auto_field(
2107 $field,
2108 array(
2109 'type' => 'e2pdf-html',
2110 'block' => true,
2111 'properties' => array(
2112 'top' => '20',
2113 'left' => '20',
2114 'right' => '20',
2115 'width' => '100%',
2116 'height' => 'auto',
2117 'value' => $field->name,
2118 ),
2119 )
2120 );
2121
2122 $elements[] = $this->auto_field(
2123 $field,
2124 array(
2125 'type' => 'e2pdf-html',
2126 'properties' => array(
2127 'top' => '5',
2128 'width' => '100%',
2129 'height' => '150',
2130 'value' => '[' . $field_id . ' wpautop=0]',
2131 ),
2132 )
2133 );
2134 break;
2135 case 'text':
2136 case 'email':
2137 case 'url':
2138 case 'number':
2139 case 'phone':
2140 case 'date':
2141 case 'image':
2142 case 'tag':
2143 case 'password':
2144 case 'quiz_score':
2145 $elements[] = $this->auto_field(
2146 $field,
2147 array(
2148 'type' => 'e2pdf-html',
2149 'block' => true,
2150 'properties' => array(
2151 'top' => '20',
2152 'left' => '20',
2153 'right' => '20',
2154 'width' => '100%',
2155 'height' => 'auto',
2156 'value' => $field->name,
2157 ),
2158 )
2159 );
2160
2161 $elements[] = $this->auto_field(
2162 $field,
2163 array(
2164 'type' => 'e2pdf-input',
2165 'properties' => array(
2166 'top' => '5',
2167 'width' => '100%',
2168 'height' => 'auto',
2169 'value' => '[' . $field_id . ']',
2170 'pass' => $field->type === 'password' ? '1' : '0',
2171 ),
2172 )
2173 );
2174 break;
2175 case 'time':
2176 $elements[] = $this->auto_field(
2177 $field,
2178 array(
2179 'type' => 'e2pdf-html',
2180 'block' => true,
2181 'properties' => array(
2182 'top' => '20',
2183 'left' => '20',
2184 'right' => '20',
2185 'width' => '100%',
2186 'height' => 'auto',
2187 'value' => $field->name,
2188 ),
2189 )
2190 );
2191
2192 $options_tmp = array();
2193 if (class_exists('FrmProFieldTime')) {
2194 $frm_pro_field_time = new FrmProFieldTime($field);
2195 $options_tmp = $frm_pro_field_time->get_options($field->field_options);
2196 }
2197
2198 if (isset($field->field_options['single_time']) && $field->field_options['single_time']) {
2199 $elements[] = $this->auto_field(
2200 $field,
2201 array(
2202 'type' => 'e2pdf-select',
2203 'properties' => array(
2204 'top' => '5',
2205 'width' => '100%',
2206 'height' => 'auto',
2207 'options' => implode("\n", $options_tmp),
2208 'value' => '[' . $field_id . ']',
2209 ),
2210 )
2211 );
2212 } else {
2213
2214 $options_h = isset($options_tmp['H']) && is_array($options_tmp['H']) ? $options_tmp['H'] : array();
2215 $options_m = isset($options_tmp['m']) && is_array($options_tmp['m']) ? $options_tmp['m'] : array();
2216 $options_a = isset($options_tmp['A']) && is_array($options_tmp['A']) ? $options_tmp['A'] : array();
2217
2218 $elements[] = $this->auto_field(
2219 $field,
2220 array(
2221 'type' => 'e2pdf-select',
2222 'float' => true,
2223 'properties' => array(
2224 'top' => '5',
2225 'width' => isset($field->field_options['clock']) && $field->field_options['clock'] == '12' ? '33.3%' : '50%',
2226 'height' => 'auto',
2227 'options' => implode("\n", $options_h),
2228 'value' => isset($field->field_options['clock']) && $field->field_options['clock'] == '12' ? '[' . $field_id . ' format="g"]' : '[' . $field_id . ' format="H"]',
2229 ),
2230 )
2231 );
2232
2233 $elements[] = $this->auto_field(
2234 $field,
2235 array(
2236 'type' => 'e2pdf-select',
2237 'float' => true,
2238 'properties' => array(
2239 'top' => '5',
2240 'left' => '20',
2241 'width' => isset($field->field_options['clock']) && $field->field_options['clock'] == '12' ? '33.3%' : '50%',
2242 'height' => 'auto',
2243 'options' => implode("\n", $options_m),
2244 'value' => '[' . $field_id . ' format="i"]',
2245 ),
2246 )
2247 );
2248
2249 if (isset($field->field_options['clock']) && $field->field_options['clock'] == '12') {
2250 $elements[] = $this->auto_field(
2251 $field,
2252 array(
2253 'type' => 'e2pdf-select',
2254 'float' => true,
2255 'properties' => array(
2256 'top' => '5',
2257 'left' => '20',
2258 'width' => '33.3%',
2259 'height' => 'auto',
2260 'options' => implode("\n", $options_a),
2261 'value' => '[' . $field_id . ' format="A"]',
2262 ),
2263 )
2264 );
2265 }
2266 }
2267 break;
2268 case 'select':
2269 $elements[] = $this->auto_field(
2270 $field,
2271 array(
2272 'type' => 'e2pdf-html',
2273 'block' => true,
2274 'properties' => array(
2275 'top' => '20',
2276 'left' => '20',
2277 'right' => '20',
2278 'width' => '100%',
2279 'height' => 'auto',
2280 'value' => $field->name,
2281 ),
2282 )
2283 );
2284
2285 $options_tmp = array();
2286 if (isset($field->options) && is_array($field->options)) {
2287 foreach ($field->options as $opt_key => $option) {
2288 if (is_array($option)) {
2289 $options_tmp[] = isset($option['label']) ? $option['label'] : $option['value'];
2290 } else {
2291 $options_tmp[] = $option;
2292 }
2293 }
2294 }
2295
2296 $elements[] = $this->auto_field(
2297 $field,
2298 array(
2299 'type' => 'e2pdf-select',
2300 'properties' => array(
2301 'top' => '5',
2302 'width' => '100%',
2303 'height' => 'auto',
2304 'options' => implode("\n", $options_tmp),
2305 'value' => '[' . $field_id . ']',
2306 'height' => isset($field->field_options['multiple']) && $field->field_options['multiple'] ? '80' : 'auto',
2307 'multiline' => isset($field->field_options['multiple']) && $field->field_options['multiple'] ? '1' : '0',
2308 ),
2309 )
2310 );
2311 break;
2312 case 'credit_card':
2313 $elements[] = $this->auto_field(
2314 $field,
2315 array(
2316 'type' => 'e2pdf-html',
2317 'block' => true,
2318 'properties' => array(
2319 'top' => '20',
2320 'left' => '20',
2321 'right' => '20',
2322 'width' => '100%',
2323 'height' => 'auto',
2324 'value' => $field->name,
2325 ),
2326 )
2327 );
2328
2329 $elements[] = $this->auto_field(
2330 $field,
2331 array(
2332 'type' => 'e2pdf-input',
2333 'properties' => array(
2334 'top' => '5',
2335 'width' => '100%',
2336 'height' => 'auto',
2337 'value' => '[' . $field_id . ' show="cc"]',
2338 ),
2339 )
2340 );
2341
2342 $elements[] = $this->auto_field(
2343 $field,
2344 array(
2345 'type' => 'e2pdf-select',
2346 'properties' => array(
2347 'top' => '5',
2348 'width' => '33.3%',
2349 'left' => '0',
2350 'height' => 'auto',
2351 'options' => implode("\n", range(1, 12)),
2352 'value' => '[' . $field_id . ' show="month"]',
2353 ),
2354 )
2355 );
2356
2357 $elements[] = $this->auto_field(
2358 $field,
2359 array(
2360 'type' => 'e2pdf-select',
2361 'float' => true,
2362 'properties' => array(
2363 'top' => '5',
2364 'left' => '20',
2365 'width' => '33.3%',
2366 'height' => 'auto',
2367 'options' => implode("\n", range(date('Y'), date('Y') + 10)),
2368 'value' => '[' . $field_id . ' show="year"]',
2369 ),
2370 )
2371 );
2372
2373 $elements[] = $this->auto_field(
2374 $field,
2375 array(
2376 'type' => 'e2pdf-input',
2377 'float' => true,
2378 'properties' => array(
2379 'top' => '5',
2380 'left' => '20',
2381 'width' => '33.3%',
2382 'height' => 'auto',
2383 'value' => '[' . $field_id . ' show="cvc"]',
2384 ),
2385 )
2386 );
2387 break;
2388 case 'address':
2389 $elements[] = $this->auto_field(
2390 $field,
2391 array(
2392 'type' => 'e2pdf-html',
2393 'block' => true,
2394 'properties' => array(
2395 'top' => '20',
2396 'left' => '20',
2397 'right' => '20',
2398 'width' => '100%',
2399 'height' => 'auto',
2400 'value' => $field->name,
2401 ),
2402 )
2403 );
2404
2405 if (isset($field->field_options['line1_desc']) && $field->field_options['line1_desc']) {
2406 $elements[] = $this->auto_field(
2407 $field,
2408 array(
2409 'type' => 'e2pdf-html',
2410 'properties' => array(
2411 'top' => '5',
2412 'width' => '100%',
2413 'height' => 'auto',
2414 'value' => $field->field_options['line1_desc'],
2415 ),
2416 )
2417 );
2418 }
2419
2420 $elements[] = $this->auto_field(
2421 $field,
2422 array(
2423 'type' => 'e2pdf-input',
2424 'properties' => array(
2425 'top' => '5',
2426 'width' => '100%',
2427 'height' => 'auto',
2428 'value' => '[' . $field_id . ' show="line1"]',
2429 ),
2430 )
2431 );
2432
2433 if (isset($field->field_options['line2_desc']) && $field->field_options['line2_desc']) {
2434 $elements[] = $this->auto_field(
2435 $field,
2436 array(
2437 'type' => 'e2pdf-html',
2438 'properties' => array(
2439 'top' => '5',
2440 'width' => '100%',
2441 'height' => 'auto',
2442 'value' => $field->field_options['line2_desc'],
2443 ),
2444 )
2445 );
2446 }
2447
2448 $elements[] = $this->auto_field(
2449 $field,
2450 array(
2451 'type' => 'e2pdf-input',
2452 'properties' => array(
2453 'top' => '5',
2454 'width' => '100%',
2455 'height' => 'auto',
2456 'value' => '[' . $field_id . ' show="line2"]',
2457 ),
2458 )
2459 );
2460
2461 if (
2462 (isset($field->field_options['city_desc']) && $field->field_options['city_desc']) ||
2463 (isset($field->field_options['state_desc']) && $field->field_options['state_desc'] && isset($field->field_options['address_type']) && $field->field_options['address_type'] != 'europe') ||
2464 (isset($field->field_options['zip_desc']) && $field->field_options['zip_desc'])
2465 ) {
2466
2467 $float = false;
2468 if (isset($field->field_options['address_type']) && $field->field_options['address_type'] != 'europe') {
2469 $elements[] = $this->auto_field(
2470 $field,
2471 array(
2472 'type' => 'e2pdf-html',
2473 'float' => $float,
2474 'properties' => array(
2475 'top' => '5',
2476 'left' => $float ? '20' : '0',
2477 'width' => '33.3%',
2478 'height' => 'auto',
2479 'value' => isset($field->field_options['city_desc']) && $field->field_options['city_desc'] ? $field->field_options['city_desc'] : '',
2480 ),
2481 )
2482 );
2483 $float = true;
2484 }
2485
2486 if (isset($field->field_options['address_type']) && (
2487 $field->field_options['address_type'] == 'international' ||
2488 $field->field_options['address_type'] == 'us' ||
2489 $field->field_options['address_type'] == 'generic'
2490 )
2491 ) {
2492
2493 $elements[] = $this->auto_field(
2494 $field,
2495 array(
2496 'type' => 'e2pdf-html',
2497 'float' => $float,
2498 'properties' => array(
2499 'top' => '5',
2500 'left' => $float ? '20' : '0',
2501 'width' => '33.3%',
2502 'height' => 'auto',
2503 'value' => isset($field->field_options['state_desc']) && $field->field_options['state_desc'] ? $field->field_options['state_desc'] : '',
2504 ),
2505 )
2506 );
2507 $float = true;
2508 }
2509
2510 $elements[] = $this->auto_field(
2511 $field,
2512 array(
2513 'type' => 'e2pdf-html',
2514 'float' => $float,
2515 'properties' => array(
2516 'top' => '5',
2517 'left' => $float ? '20' : '0',
2518 'width' => '33.3%',
2519 'height' => 'auto',
2520 'value' => isset($field->field_options['zip_desc']) && $field->field_options['zip_desc'] ? $field->field_options['zip_desc'] : '',
2521 ),
2522 )
2523 );
2524 $float = true;
2525
2526 if (isset($field->field_options['address_type']) && $field->field_options['address_type'] == 'europe') {
2527
2528 $elements[] = $this->auto_field(
2529 $field,
2530 array(
2531 'type' => 'e2pdf-html',
2532 'float' => $float,
2533 'properties' => array(
2534 'top' => '5',
2535 'left' => $float ? '20' : '0',
2536 'width' => '33.3%',
2537 'height' => 'auto',
2538 'value' => isset($field->field_options['city_desc']) && $field->field_options['city_desc'] ? $field->field_options['city_desc'] : '',
2539 ),
2540 )
2541 );
2542 }
2543 }
2544
2545 $float = false;
2546 if (isset($field->field_options['address_type']) && $field->field_options['address_type'] != 'europe') {
2547 $elements[] = $this->auto_field(
2548 $field,
2549 array(
2550 'type' => 'e2pdf-input',
2551 'float' => $float,
2552 'properties' => array(
2553 'top' => '5',
2554 'left' => $float ? '20' : '0',
2555 'width' => '33.3%',
2556 'height' => 'auto',
2557 'value' => '[' . $field_id . ' show="city"]',
2558 ),
2559 )
2560 );
2561 $float = true;
2562 }
2563
2564 if (isset($field->field_options['address_type']) && (
2565 $field->field_options['address_type'] == 'international' ||
2566 $field->field_options['address_type'] == 'us' ||
2567 $field->field_options['address_type'] == 'generic'
2568 )
2569 ) {
2570 if ($field->field_options['address_type'] == 'us') {
2571 $options_tmp = array();
2572 if (class_exists('FrmFieldsHelper')) {
2573 $options_tmp = array_values(FrmFieldsHelper::get_us_states());
2574 }
2575
2576 $elements[] = $this->auto_field(
2577 $field,
2578 array(
2579 'type' => 'e2pdf-select',
2580 'float' => $float,
2581 'properties' => array(
2582 'top' => '5',
2583 'left' => $float ? '20' : '0',
2584 'width' => '33.3%',
2585 'height' => 'auto',
2586 'options' => implode("\n", $options_tmp),
2587 'value' => '[' . $field_id . ' show="state"]',
2588 ),
2589 )
2590 );
2591 } else {
2592 $elements[] = $this->auto_field(
2593 $field,
2594 array(
2595 'type' => 'e2pdf-input',
2596 'float' => $float,
2597 'properties' => array(
2598 'top' => '5',
2599 'left' => $float ? '20' : '0',
2600 'width' => '33.3%',
2601 'height' => 'auto',
2602 'value' => '[' . $field_id . ' show="state"]',
2603 ),
2604 )
2605 );
2606 }
2607 $float = true;
2608 }
2609
2610 $elements[] = $this->auto_field(
2611 $field,
2612 array(
2613 'type' => 'e2pdf-input',
2614 'float' => $float,
2615 'properties' => array(
2616 'top' => '5',
2617 'left' => $float ? '20' : '0',
2618 'width' => '33.3%',
2619 'height' => 'auto',
2620 'value' => '[' . $field_id . ' show="zip"]',
2621 ),
2622 )
2623 );
2624 $float = true;
2625
2626 if (isset($field->field_options['address_type']) && $field->field_options['address_type'] == 'europe') {
2627 $elements[] = $this->auto_field(
2628 $field,
2629 array(
2630 'type' => 'e2pdf-input',
2631 'float' => $float,
2632 'properties' => array(
2633 'top' => '5',
2634 'left' => $float ? '20' : '0',
2635 'width' => '33.3%',
2636 'height' => 'auto',
2637 'value' => '[' . $field_id . ' show="city"]',
2638 ),
2639 )
2640 );
2641 }
2642
2643 if (isset($field->field_options['address_type']) && ($field->field_options['address_type'] == 'international' || $field->field_options['address_type'] == 'europe')) {
2644 if (isset($field->field_options['country_desc']) && $field->field_options['country_desc']) {
2645 $elements[] = $this->auto_field(
2646 $field,
2647 array(
2648 'type' => 'e2pdf-html',
2649 'properties' => array(
2650 'top' => '5',
2651 'width' => '100%',
2652 'height' => 'auto',
2653 'value' => $field->field_options['country_desc'],
2654 ),
2655 )
2656 );
2657 }
2658
2659 $options_tmp = array();
2660 if (class_exists('FrmFieldsHelper')) {
2661 $options_tmp = array_values(FrmFieldsHelper::get_countries());
2662 }
2663
2664 $elements[] = $this->auto_field(
2665 $field,
2666 array(
2667 'type' => 'e2pdf-select',
2668 'properties' => array(
2669 'top' => '5',
2670 'width' => '100%',
2671 'height' => 'auto',
2672 'options' => implode("\n", $options_tmp),
2673 'value' => '[' . $field_id . ' show="country"]',
2674 ),
2675 )
2676 );
2677 }
2678 break;
2679 case 'textarea':
2680 $elements[] = $this->auto_field(
2681 $field,
2682 array(
2683 'type' => 'e2pdf-html',
2684 'block' => true,
2685 'properties' => array(
2686 'top' => '20',
2687 'left' => '20',
2688 'right' => '20',
2689 'width' => '100%',
2690 'height' => 'auto',
2691 'value' => $field->name,
2692 ),
2693 )
2694 );
2695 $elements[] = $this->auto_field(
2696 $field,
2697 array(
2698 'type' => 'e2pdf-textarea',
2699 'properties' => array(
2700 'top' => '5',
2701 'width' => '100%',
2702 'height' => '150',
2703 'value' => '[' . $field_id . ' wpautop=0]',
2704 ),
2705 )
2706 );
2707 break;
2708 case 'file':
2709 $elements[] = $this->auto_field(
2710 $field,
2711 array(
2712 'type' => 'e2pdf-html',
2713 'block' => true,
2714 'properties' => array(
2715 'top' => '20',
2716 'left' => '20',
2717 'right' => '20',
2718 'width' => '100%',
2719 'height' => 'auto',
2720 'value' => $field->name,
2721 ),
2722 )
2723 );
2724 if (strpos($field_id, ':') !== false) {
2725 $field_id .= ' size="full" show_image="0" add_link="0"';
2726 } else {
2727 $field_id .= ' size="full"';
2728 }
2729 $elements[] = $this->auto_field(
2730 $field,
2731 array(
2732 'type' => 'e2pdf-textarea',
2733 'properties' => array(
2734 'top' => '5',
2735 'width' => '100%',
2736 'height' => '150',
2737 'value' => '[' . $field_id . ']',
2738 ),
2739 )
2740 );
2741 break;
2742 case 'radio':
2743 $elements[] = $this->auto_field(
2744 $field,
2745 array(
2746 'type' => 'e2pdf-html',
2747 'block' => true,
2748 'properties' => array(
2749 'top' => '20',
2750 'left' => '20',
2751 'right' => '20',
2752 'width' => '100%',
2753 'height' => 'auto',
2754 'value' => $field->name,
2755 ),
2756 )
2757 );
2758
2759 $image_options = false;
2760 if (isset($field->field_options['image_options']) && $field->field_options['image_options']) {
2761 $image_options = true;
2762 }
2763
2764 $separate_value = false;
2765 if (isset($field->field_options['separate_value']) && $field->field_options['separate_value']) {
2766 $separate_value = true;
2767 }
2768
2769 if (isset($field->options) && is_array($field->options)) {
2770
2771 foreach ($field->options as $opt_key => $option) {
2772 if (is_array($option)) {
2773 $elements[] = $this->auto_field(
2774 $field,
2775 array(
2776 'type' => 'e2pdf-radio',
2777 'properties' => array(
2778 'top' => '5',
2779 'width' => 'auto',
2780 'height' => 'auto',
2781 'value' => $image_options ? '[' . $field_id . ' show="value"]' : '[' . $field_id . ']',
2782 'option' => $image_options && $separate_value && isset($option['value']) ? $option['value'] : $option['label'],
2783 'group' => '[' . $field_id . ']',
2784 ),
2785 )
2786 );
2787 $elements[] = $this->auto_field(
2788 $field,
2789 array(
2790 'type' => 'e2pdf-html',
2791 'float' => true,
2792 'properties' => array(
2793 'left' => '5',
2794 'width' => '100%',
2795 'height' => 'auto',
2796 'value' => $option['label'],
2797 ),
2798 )
2799 );
2800 } else {
2801
2802 $elements[] = $this->auto_field(
2803 $field,
2804 array(
2805 'type' => 'e2pdf-radio',
2806 'properties' => array(
2807 'top' => '5',
2808 'width' => 'auto',
2809 'height' => 'auto',
2810 'value' => '[' . $field_id . ']',
2811 'option' => substr($opt_key, 0, 6) === 'other_' ? '[' . $field_id . ' show="value" key="other"]' : $option,
2812 'group' => '[' . $field_id . ']',
2813 ),
2814 )
2815 );
2816 $elements[] = $this->auto_field(
2817 $field,
2818 array(
2819 'type' => 'e2pdf-html',
2820 'float' => true,
2821 'properties' => array(
2822 'left' => '5',
2823 'width' => '100%',
2824 'height' => 'auto',
2825 'value' => $option,
2826 ),
2827 )
2828 );
2829
2830 if (substr($opt_key, 0, 6) === 'other_') {
2831 $elements[] = $this->auto_field(
2832 $field,
2833 array(
2834 'type' => 'e2pdf-input',
2835 'properties' => array(
2836 'top' => '5',
2837 'width' => '100%',
2838 'height' => 'auto',
2839 'value' => '[' . $field_id . ' show="value" key="other"]',
2840 ),
2841 )
2842 );
2843 }
2844 }
2845 }
2846 }
2847 break;
2848 case 'checkbox':
2849 $elements[] = $this->auto_field(
2850 $field,
2851 array(
2852 'type' => 'e2pdf-html',
2853 'block' => true,
2854 'properties' => array(
2855 'top' => '20',
2856 'left' => '20',
2857 'right' => '20',
2858 'width' => '100%',
2859 'height' => 'auto',
2860 'value' => $field->name,
2861 ),
2862 )
2863 );
2864
2865 $image_options = false;
2866 if (isset($field->field_options['image_options']) && $field->field_options['image_options']) {
2867 $image_options = true;
2868 }
2869
2870 $separate_value = false;
2871 if (isset($field->field_options['separate_value']) && $field->field_options['separate_value']) {
2872 $separate_value = true;
2873 }
2874
2875 if (isset($field->options) && is_array($field->options)) {
2876 foreach ($field->options as $opt_key => $option) {
2877 if (is_array($option)) {
2878 $elements[] = $this->auto_field(
2879 $field,
2880 array(
2881 'type' => 'e2pdf-checkbox',
2882 'properties' => array(
2883 'top' => '5',
2884 'width' => 'auto',
2885 'height' => 'auto',
2886 'value' => $image_options ? '[' . $field_id . ' show="value"]' : '[' . $field_id . ']',
2887 'option' => $image_options && $separate_value && isset($option['value']) ? $option['value'] : $option['label'],
2888 ),
2889 )
2890 );
2891 $elements[] = $this->auto_field(
2892 $field,
2893 array(
2894 'type' => 'e2pdf-html',
2895 'float' => true,
2896 'properties' => array(
2897 'left' => '5',
2898 'width' => '100%',
2899 'height' => 'auto',
2900 'value' => $option['label'],
2901 ),
2902 )
2903 );
2904 } else {
2905
2906 $elements[] = $this->auto_field(
2907 $field,
2908 array(
2909 'type' => 'e2pdf-checkbox',
2910 'properties' => array(
2911 'top' => '5',
2912 'width' => 'auto',
2913 'height' => 'auto',
2914 'value' => '[' . $field_id . ']',
2915 'option' => substr($opt_key, 0, 6) === 'other_' ? '[' . $field_id . ' show="value" key="' . $opt_key . '"]' : $option,
2916 ),
2917 )
2918 );
2919
2920 $elements[] = $this->auto_field(
2921 $field,
2922 array(
2923 'type' => 'e2pdf-html',
2924 'float' => true,
2925 'properties' => array(
2926 'left' => '5',
2927 'width' => '100%',
2928 'height' => 'auto',
2929 'value' => $option,
2930 ),
2931 )
2932 );
2933
2934 if (substr($opt_key, 0, 6) === 'other_') {
2935 $elements[] = $this->auto_field(
2936 $field,
2937 array(
2938 'type' => 'e2pdf-input',
2939 'properties' => array(
2940 'top' => '5',
2941 'width' => '100%',
2942 'height' => 'auto',
2943 'value' => '[' . $field_id . ' show="value" key="' . $opt_key . '"]',
2944 ),
2945 )
2946 );
2947 }
2948 }
2949 }
2950 }
2951 break;
2952 default:
2953 break;
2954 }
2955 }
2956 }
2957
2958 $response['page'] = array(
2959 'bottom' => '20',
2960 'top' => '20',
2961 'right' => '20',
2962 'left' => '20',
2963 );
2964
2965 $response['elements'] = $elements;
2966 return $response;
2967 }
2968
2969 /**
2970 * Generate field for Auto PDF
2971 * @param object $field - Formidable field object
2972 * @param string $type - Field type
2973 * @param array $options - Field additional options
2974 * @return array - Prepared auto field
2975 */
2976 public function auto_field($field = false, $element = array()) {
2977
2978 if (!$field) {
2979 return false;
2980 }
2981
2982 if (!isset($element['block'])) {
2983 $element['block'] = false;
2984 }
2985
2986 if (!isset($element['float'])) {
2987 $element['float'] = false;
2988 }
2989
2990 $classes = array();
2991 if (isset($field->field_options['classes'])) {
2992 $classes = explode(' ', $field->field_options['classes']);
2993 }
2994
2995 $float_classes = array(
2996 'frm_half',
2997 'frm_third',
2998 'frm_two_thirds',
2999 'frm_fourth',
3000 'frm_three_fourths',
3001 'frm_fifth',
3002 'frm_two_fifths',
3003 'frm_sixth',
3004 'frm_seventh',
3005 'frm_eighth',
3006 );
3007
3008 $array_intersect = array_intersect($classes, $float_classes);
3009
3010 if (!empty($array_intersect) && !in_array('frm_first', $classes) && isset($element['block']) && $element['block']) {
3011 $element['float'] = true;
3012 }
3013
3014 $primary_class = false;
3015 if (!empty($array_intersect)) {
3016 $primary_class = end($array_intersect);
3017 }
3018
3019 if (isset($element['block']) && $element['block']) {
3020 switch ($primary_class) {
3021 case 'frm_half':
3022 $element['properties']['width'] = '50%';
3023 break;
3024 case 'frm_third':
3025 $element['properties']['width'] = '33.3%';
3026 break;
3027 case 'frm_two_thirds':
3028 $element['properties']['width'] = '66.67%';
3029 break;
3030 case 'frm_fourth':
3031 $element['properties']['width'] = '25%';
3032 break;
3033 case 'frm_three_fourths':
3034 $element['properties']['width'] = '75%';
3035 break;
3036 case 'frm_fifth':
3037 $element['properties']['width'] = '20%';
3038 break;
3039 case 'frm_two_fifths':
3040 $element['properties']['width'] = '80%';
3041 break;
3042 case 'frm_sixth':
3043 $element['properties']['width'] = '16.67%';
3044 break;
3045 case 'frm_seventh':
3046 $element['properties']['width'] = '14.29%';
3047 break;
3048 case 'frm_eighth':
3049 $element['properties']['width'] = '12.5%';
3050 break;
3051 default:
3052 break;
3053 }
3054 }
3055
3056 return $element;
3057 }
3058
3059 /**
3060 * Backup form action
3061 * @param object xml - XML object where to add params for saved item
3062 */
3063 public function backup($xml = false) {
3064 if (class_exists('FrmXMLController')) {
3065
3066 $ids = array();
3067 if ($this->get('item') == '-2') {
3068 $ids[] = $this->get('item1');
3069 $ids[] = $this->get('item2');
3070 } else {
3071 $ids[] = $this->get('item');
3072 }
3073
3074 $type = array();
3075 $type[] = 'forms';
3076
3077 ob_start();
3078 FrmXMLController::generate_xml($type, compact('ids'));
3079 $backup = ob_get_clean();
3080 $xml->addChildCData('formidable', base64_encode($backup));
3081 }
3082 }
3083
3084 /**
3085 * Import form action
3086 * @param object xml - XML object to parse data to import form
3087 */
3088 public function import($xml, $options = array()) {
3089
3090 $updated_items = array();
3091 $new_form = isset($options['formidable_item_new_form']) && $options['formidable_item_new_form'] ? true : false;
3092
3093 if (class_exists('FrmXMLHelper') && class_exists('FrmField') && $this->get('item')) {
3094
3095 if (isset($xml->formidable) && $xml->formidable) {
3096
3097 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
3098 file_put_contents($tmp, base64_decode((string) $xml->formidable), LOCK_EX);
3099
3100 if ($new_form) {
3101 add_filter('frm_match_xml_form', array($this, 'filter_frm_match_xml_form'), 10, 2);
3102 }
3103 $result = FrmXMLHelper::import_xml($tmp);
3104
3105 if ($new_form) {
3106 remove_filter('frm_match_xml_form', array($this, 'filter_frm_match_xml_form'));
3107 }
3108 unlink($tmp);
3109
3110 FrmXMLHelper::parse_message($result, $message, $errors);
3111
3112 if ($errors) {
3113 return array(
3114 'errors' => $errors,
3115 );
3116 } else {
3117 if ($this->get('item') == '-2') {
3118 if ($this->get('item1') && isset($result['forms'][$this->get('item1')])) {
3119 $updated_items[$this->get('item1')] = $result['forms'][$this->get('item1')];
3120 }
3121 if ($this->get('item2') && isset($result['forms'][$this->get('item2')])) {
3122 $updated_items[$this->get('item2')] = $result['forms'][$this->get('item2')];
3123 }
3124 } elseif (isset($result['forms'][$this->get('item')])) {
3125 $updated_items[$this->get('item')] = $result['forms'][$this->get('item')];
3126 }
3127 }
3128 }
3129 }
3130 return $updated_items;
3131 }
3132
3133 public function after_import($old_template_id, $new_template_id) {
3134
3135 if ($this->get('item') && $old_template_id && $new_template_id && $old_template_id != $new_template_id && class_exists('FrmForm')) {
3136 $forms = array();
3137 if ($this->get('item') == '-2') {
3138 if ($this->get('item1')) {
3139 $forms[] = $this->get('item1');
3140 }
3141 if ($this->get('item2')) {
3142 $forms[] = $this->get('item2');
3143 }
3144 } else {
3145 $forms[] = $this->get('item');
3146 }
3147
3148 foreach ($forms as $form_id) {
3149 $form = FrmForm::getOne($form_id);
3150 if ($form) {
3151 if (isset($form->options['success_msg'])) {
3152 $success_msg = $this->replace_template_id($form->options['success_msg'], $old_template_id, $new_template_id);
3153 if ($success_msg != $form->options['success_msg']) {
3154 $update = array(
3155 'options' => array(
3156 'success_msg' => $success_msg,
3157 ),
3158 );
3159 FrmForm::update($form_id, $update);
3160 }
3161 }
3162
3163 if (class_exists('FrmFormAction')) {
3164 $actions = FrmFormAction::get_action_for_form($form_id, 'email');
3165 foreach ($actions as $action) {
3166 if (isset($action->post_content['email_message'])) {
3167 $email_message = $this->replace_template_id($action->post_content['email_message'], $old_template_id, $new_template_id);
3168 if ($email_message != $action->post_content['email_message']) {
3169 $action->post_content['email_message'] = $email_message;
3170 FrmFormAction::clear_cache();
3171 FrmDb::save_settings($action, 'frm_actions');
3172 }
3173 }
3174 }
3175 }
3176 }
3177 }
3178 }
3179 return false;
3180 }
3181
3182 public function replace_template_id($message, $old_template_id, $new_template_id) {
3183 $old_template_id = (int) $old_template_id;
3184 $new_template_id = (int) $new_template_id;
3185 $message = preg_replace('/\[(e2pdf-download|e2pdf-view|e2pdf-save|e2pdf-attachment|e2pdf-adobesign|e2pdf-zapier)(.*) id=(|\'|")' . $old_template_id . '(|\'|")(.*)\]/i', '[${1}${2} id=${3}' . $new_template_id . '${4}${5}]', $message);
3186 return $message;
3187 }
3188
3189 public function replace_meta_shortcodes($value) {
3190 if (false !== strpos($value, '[')) {
3191 $replace = array(
3192 '[referer]' => '',
3193 '[browser]' => '',
3194 '[referer2]' => '',
3195 '[browser2]' => '',
3196 '[entry_num]' => '',
3197 '[entry_num2]' => '',
3198 );
3199 if ((false !== strpos($value, '[referer]') || false !== strpos($value, '[browser]')) && $this->get('cached_entry') && isset($this->get('cached_entry')->description)) {
3200 if (is_serialized($this->get('cached_entry')->description)) {
3201 $description = $this->helper->load('convert')->unserialize(trim($this->get('cached_entry')->description));
3202 } else {
3203 $description = $this->get('cached_entry')->description;
3204 }
3205 if (isset($description['referrer'])) {
3206 $replace['[referer]'] = @preg_match('/Referer +\d+\:[ \t]+([^\n\t]+)/', $description['referrer'], $m) ? $m[1] : $description['referrer']; // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
3207 }
3208 $replace['[browser]'] = isset($description['browser']) ? $description['browser'] : '';
3209 }
3210 if ((false !== strpos($value, '[referer2]') || false !== strpos($value, '[browser2]')) && $this->get('cached_entry2') && isset($this->get('cached_entry2')->description)) {
3211 if (is_serialized($this->get('cached_entry2')->description)) {
3212 $description = $this->helper->load('convert')->unserialize(trim($this->get('cached_entry2')->description));
3213 } else {
3214 $description = $this->get('cached_entry2')->description;
3215 }
3216 $replace['[referer2]'] = '';
3217 if (isset($description['referrer'])) {
3218 $replace['[referer2]'] = @preg_match('/Referer +\d+\:[ \t]+([^\n\t]+)/', $description['referrer'], $m) ? $m[1] : $description['referrer']; // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
3219 }
3220 $replace['[browser2]'] = isset($description['browser']) ? $description['browser'] : '';
3221 }
3222 if (false !== strpos($value, '[entry_num]')) {
3223 $replace['[entry_num]'] = class_exists('FrmDb') && $this->get('cached_entry') ? FrmDb::get_count('frm_items', array("form_id = '{$this->get('cached_form')->id}' AND id <= '{$this->get('cached_entry')->id}' AND 1" => '1')) : '';
3224 }
3225 if (false !== strpos($value, '[entry_num2]')) {
3226 $replace['[entry_num2]'] = class_exists('FrmDb') && $this->get('cached_entry2') ? FrmDb::get_count('frm_items', array("form_id = '{$this->get('cached_form2')->id}' AND id <= '{$this->get('cached_entry2')->id}' AND 1" => '1')) : '';
3227 }
3228 $value = str_replace(array_keys($replace), $replace, $value);
3229 }
3230 return $value;
3231 }
3232
3233 /**
3234 * Replace Old Formidable shortcodes to new values on pages
3235 * @param array $pages - List of pages to replace shortcodes
3236 * @param array $shortcodes_list - List of new/old shortcodes to replace
3237 * @return array - List of updated pages
3238 */
3239 public function pages_replace_shortcodes($pages = array(), $shortcodes_list = array()) {
3240
3241 foreach ($pages as $page_key => $page) {
3242 /* Replace page actions and conditions shortcodes */
3243 if (isset($page['actions']) && !empty($page['actions'])) {
3244 foreach ($page['actions'] as $action_key => $action_value) {
3245 if (isset($action_value['change'])) {
3246 $pages[$page_key]['actions'][$action_key]['change'] = $this->replace_shortcodes($action_value['change'], $shortcodes_list);
3247 }
3248
3249 if (isset($action_value['conditions']) && !empty($action_value['conditions'])) {
3250 foreach ($action_value['conditions'] as $condition_key => $condition_value) {
3251 if (isset($condition_value['if'])) {
3252 $pages[$page_key]['actions'][$action_key]['conditions'][$condition_key]['if'] = $this->replace_shortcodes($condition_value['if'], $shortcodes_list);
3253 }
3254
3255 if (isset($condition_value['value'])) {
3256 $pages[$page_key]['actions'][$action_key]['conditions'][$condition_key]['value'] = $this->replace_shortcodes($condition_value['value'], $shortcodes_list);
3257 }
3258 }
3259 }
3260 }
3261 }
3262
3263 foreach ($page['elements'] as $element_key => $element_value) {
3264 $pages[$page_key]['elements'][$element_key]['value'] = $this->replace_shortcodes($element_value['value'], $shortcodes_list);
3265
3266 if (isset($element_value['properties']['option'])) {
3267 $pages[$page_key]['elements'][$element_key]['properties']['option'] = $this->replace_shortcodes($element_value['properties']['option'], $shortcodes_list);
3268 }
3269
3270 if (isset($element_value['properties']['options'])) {
3271 $pages[$page_key]['elements'][$element_key]['properties']['options'] = $this->replace_shortcodes($element_value['properties']['options'], $shortcodes_list);
3272 }
3273
3274 if (isset($element_value['properties']['group'])) {
3275 $pages[$page_key]['elements'][$element_key]['properties']['group'] = $this->replace_shortcodes($element_value['properties']['group'], $shortcodes_list);
3276 }
3277
3278 /* Replace element actions and conditions shortcodes */
3279 if (isset($element_value['actions']) && !empty($element_value['actions'])) {
3280 foreach ($element_value['actions'] as $action_key => $action_value) {
3281 if (isset($action_value['change'])) {
3282 $pages[$page_key]['elements'][$element_key]['actions'][$action_key]['change'] = $this->replace_shortcodes($action_value['change'], $shortcodes_list);
3283 }
3284
3285 if (isset($action_value['conditions']) && !empty($action_value['conditions'])) {
3286 foreach ($action_value['conditions'] as $condition_key => $condition_value) {
3287 if (isset($condition_value['if'])) {
3288 $pages[$page_key]['elements'][$element_key]['actions'][$action_key]['conditions'][$condition_key]['if'] = $this->replace_shortcodes($condition_value['if'], $shortcodes_list);
3289 }
3290
3291 if (isset($condition_value['value'])) {
3292 $pages[$page_key]['elements'][$element_key]['actions'][$action_key]['conditions'][$condition_key]['value'] = $this->replace_shortcodes($condition_value['value'], $shortcodes_list);
3293 }
3294 }
3295 }
3296 }
3297 }
3298 }
3299 }
3300
3301 return $pages;
3302 }
3303
3304 public function actions_replace_shortcodes($actions = array(), $shortcodes_list = array()) {
3305
3306 foreach ($actions as $action_key => $action_value) {
3307 if (isset($action_value['change'])) {
3308 $actions[$action_key]['change'] = $this->replace_shortcodes($action_value['change'], $shortcodes_list);
3309 }
3310
3311 if (isset($action_value['conditions']) && !empty($action_value['conditions'])) {
3312 foreach ($action_value['conditions'] as $condition_key => $condition_value) {
3313 if (isset($condition_value['if'])) {
3314 $actions[$action_key]['conditions'][$condition_key]['if'] = $this->replace_shortcodes($condition_value['if'], $shortcodes_list);
3315 }
3316
3317 if (isset($condition_value['value'])) {
3318 $actions[$action_key]['conditions'][$condition_key]['value'] = $this->replace_shortcodes($condition_value['value'], $shortcodes_list);
3319 }
3320 }
3321 }
3322 }
3323
3324 return $actions;
3325 }
3326
3327 /**
3328 * Replace Old Formidable shortcodes to new values
3329 * @param string $content - Value that can contains old shortcodes
3330 * @param array $shortcodes_list - List of new/old shortcodes to replace
3331 * @return string - Updated value
3332 */
3333 public function replace_shortcodes($content = '', $shortcodes_list = array()) {
3334 if (false === strpos($content, '[')) {
3335 return $content;
3336 }
3337 foreach ($shortcodes_list as $list_key => $list_value) {
3338 $content = preg_replace("/(\[|\[(?:[^\]]*?)\s|\[(?:[^\]]*?)(?:field_id|e2pdf-frm-data-values id|e2pdf-frm-lookup-values id)=(?:\'|\"|)){$list_key}(\:(?:.*?)\]|\s(?:.*?)\]|(?:\'|\")(?:.*?)\]|\])/", '${1}' . $list_value . '${2}', $content);
3339 }
3340 return $content;
3341 }
3342
3343 /**
3344 * Verify if item and dataset exists
3345 * @return bool - item and dataset exists
3346 */
3347 public function verify() {
3348 $verify = false;
3349 if ($this->get('item') == '-2') {
3350 if ($this->get('cached_entry')) {
3351 $verify = true;
3352 } else {
3353 $this->set('dataset', false);
3354 }
3355 if ($this->get('cached_entry2')) {
3356 $verify = true;
3357 } else {
3358 $this->set('dataset2', false);
3359 }
3360 } elseif ($this->get('cached_entry')) {
3361 $verify = true;
3362 }
3363 return $verify;
3364 }
3365
3366 /**
3367 * Create Form based on uploaded PDF
3368 * @param object $template - Template Object to work with
3369 * @param array $data - Settings to create labels/shortcodes
3370 * @return object - Mapped Template Object
3371 */
3372 public function auto_form($template, $data = array()) {
3373
3374 if ($template->get('ID')) {
3375
3376 $auto_form_label = isset($data['auto_form_label']) && $data['auto_form_label'] ? $data['auto_form_label'] : false;
3377 $auto_form_shortcode = isset($data['auto_form_shortcode']) ? true : false;
3378
3379 $form = array(
3380 'form_key' => '',
3381 'name' => $template->get('title'),
3382 'description' => '',
3383 'status' => 'published',
3384 'options' => array(
3385 'success_msg' => sprintf(__('Success. [e2pdf-download id="%s"]', 'e2pdf'), $template->get('ID')),
3386 ),
3387 );
3388
3389 $item = FrmForm::create($form);
3390 if ($item) {
3391 $template->set('item', $item);
3392
3393 $checkboxes = array();
3394 $radios = array();
3395
3396 $pages = $template->get('pages');
3397
3398 foreach ($pages as $page_key => $page) {
3399 if (isset($page['elements']) && !empty($page['elements'])) {
3400 foreach ($page['elements'] as $element_key => $element) {
3401 $field_values = array();
3402 if ($element['type'] == 'e2pdf-input' || ($element['type'] == 'e2pdf-signature' && !class_exists('FrmSigAppHelper'))) {
3403 $field_values = FrmFieldsHelper::setup_new_vars('text', $item);
3404 } elseif ($element['type'] == 'e2pdf-signature' && class_exists('FrmSigAppHelper')) {
3405 $field_values = FrmFieldsHelper::setup_new_vars('signature', $item);
3406 } elseif ($element['type'] == 'e2pdf-textarea') {
3407 $field_values = FrmFieldsHelper::setup_new_vars('textarea', $item);
3408 } elseif ($element['type'] == 'e2pdf-select') {
3409 $field_values = FrmFieldsHelper::setup_new_vars('select', $item);
3410 $field_values['options'] = array();
3411 if (isset($element['properties']['options'])) {
3412 $field_options = explode("\n", $element['properties']['options']);
3413 foreach ($field_options as $option) {
3414 $field_values['options'][] = $option;
3415 }
3416 }
3417 } elseif ($element['type'] == 'e2pdf-checkbox') {
3418 $field_key = array_search($element['name'], array_column($checkboxes, 'name'));
3419 if ($field_key !== false) {
3420 $checkboxes[$field_key]['options'][] = $element['properties']['option'];
3421 $pages[$page_key]['elements'][$element_key]['value'] = '[' . $checkboxes[$field_key]['element_id'] . ']';
3422 } else {
3423 $field_values = FrmFieldsHelper::setup_new_vars('checkbox', $item);
3424 $field_values['options'] = array();
3425 }
3426 } elseif ($element['type'] == 'e2pdf-radio') {
3427 if (isset($element['properties']['group']) && $element['properties']['group']) {
3428 $element['name'] = $element['properties']['group'];
3429 } else {
3430 $element['name'] = $element['element_id'];
3431 }
3432
3433 $field_key = array_search($element['name'], array_column($radios, 'name'));
3434 if ($field_key !== false) {
3435 $radios[$field_key]['options'][] = $element['properties']['option'];
3436 $pages[$page_key]['elements'][$element_key]['value'] = '[' . $radios[$field_key]['element_id'] . ']';
3437 } else {
3438 $field_values = FrmFieldsHelper::setup_new_vars('radio', $item);
3439 $field_values['options'] = array();
3440 }
3441 }
3442
3443 $field_id = !empty($field_values) ? FrmField::create($field_values) : false;
3444 if ($field_id) {
3445 $field = FrmField::getOne($field_id);
3446 $labels = array();
3447
3448 if ($auto_form_shortcode) {
3449 $labels[] = get_option('e2pdf_formidable_use_keys', '0') ? '[' . $field->field_key . ']' : '[' . $field->id . ']';
3450 }
3451
3452 if ($auto_form_label && $auto_form_label == 'value' && isset($element['value']) && $element['value']) {
3453 $labels[] = $element['value'];
3454 } elseif ($auto_form_label && $auto_form_label == 'name' && isset($element['name']) && $element['name']) {
3455 $labels[] = $element['name'];
3456 }
3457
3458 if (!empty($labels)) {
3459 $update = array(
3460 'name' => implode(' ', $labels),
3461 );
3462 FrmField::update($field_id, $update);
3463 }
3464
3465 if ($element['type'] == 'e2pdf-textarea') {
3466 $pages[$page_key]['elements'][$element_key]['value'] = get_option('e2pdf_formidable_use_keys', '0') ? '[' . $field->field_key . ' wpautop=0]' : '[' . $field->id . ' wpautop=0]';
3467 } else {
3468 $pages[$page_key]['elements'][$element_key]['value'] = get_option('e2pdf_formidable_use_keys', '0') ? '[' . $field->field_key . ']' : '[' . $field->id . ']';
3469 }
3470
3471 if (isset($element['properties']['esig'])) {
3472 unset($pages[$page_key]['elements'][$element_key]['properties']['esig']);
3473 }
3474
3475 if ($element['type'] == 'e2pdf-checkbox') {
3476 $checkboxes[] = array(
3477 'name' => $element['name'],
3478 'element_id' => $field_id,
3479 'field_id' => $field->id,
3480 'options' => array(
3481 $element['properties']['option'],
3482 ),
3483 );
3484 } elseif ($element['type'] == 'e2pdf-radio') {
3485 $radios[] = array(
3486 'name' => $element['name'],
3487 'element_id' => $field_id,
3488 'field_id' => $field->id,
3489 'options' => array(
3490 $element['properties']['option'],
3491 ),
3492 );
3493 }
3494 }
3495 }
3496 }
3497 }
3498
3499 foreach ($checkboxes as $element) {
3500 $update = array(
3501 'options' => $element['options'],
3502 );
3503 FrmField::update($element['field_id'], $update);
3504 }
3505
3506 foreach ($radios as $element) {
3507 $update = array(
3508 'options' => $element['options'],
3509 );
3510 FrmField::update($element['field_id'], $update);
3511 }
3512
3513 $template->set('pages', $pages);
3514 }
3515 }
3516
3517 return $template;
3518 }
3519
3520 /**
3521 * Init Visual Mapper data
3522 * @return bool|string - HTML data source for Visual Mapper
3523 */
3524 public function visual_mapper() {
3525
3526 $html = '';
3527 $source = '';
3528
3529 if ($this->get('item') && class_exists('FrmformsController')) {
3530 $child = false;
3531 if ($this->get('cached_form') && !empty($this->get('cached_form')->parent_form_id)) {
3532 $child = true;
3533 $this->set('item', $this->get('cached_form')->parent_form_id);
3534 }
3535 if (class_exists('FrmProFieldsHelper')) {
3536 add_filter('frm_get_paged_fields', array($this, 'filter_remove_pagebreaks'), 9);
3537 }
3538 add_filter('frm_show_new_entry_page', array($this, 'filter_frm_show_new_entry_page'), 99);
3539 add_filter('frm_pre_display_form', array($this, 'filter_frm_pre_display_form'));
3540 $source = FrmformsController::show_form($this->get('item'), '', true, true);
3541 if (class_exists('FrmProFieldsHelper')) {
3542 remove_filter('frm_get_paged_fields', array($this, 'filter_remove_pagebreaks'), 9);
3543 }
3544 remove_filter('frm_show_new_entry_page', array($this, 'filter_frm_show_new_entry_page'), 99);
3545 remove_filter('frm_pre_display_form', array($this, 'filter_frm_pre_display_form'));
3546 if ($source) {
3547 $dom = new DOMDocument();
3548 $html = $this->helper->load('convert')->load_html($source, $dom, true);
3549 }
3550 if (!$source) {
3551 return '<div class="e2pdf-vm-error">' . __("The form source is empty or doesn't exist", 'e2pdf') . '</div>';
3552 } elseif (!$html) {
3553 return '<div class="e2pdf-vm-error">' . __('The form could not be parsed due the incorrect HTML', 'e2pdf') . '</div>';
3554 } else {
3555
3556 $xml = $this->helper->load('xml');
3557 $xpath = new DomXPath($dom);
3558
3559 // remove by name
3560 $remove_by_name = array(
3561 'frm_action',
3562 'form_id',
3563 'frm_hide_fields_' . $this->get('item'),
3564 'form_key',
3565 '0',
3566 'frm_submit_entry_' . $this->get('item'),
3567 '_wp_http_referer',
3568 'item_key',
3569 'frm_state',
3570 );
3571 foreach ($remove_by_name as $key => $name) {
3572 $elements = $xpath->query('//*[@name="' . $name . '"]');
3573 foreach ($elements as $element) {
3574 $element->parentNode->removeChild($element);
3575 }
3576 }
3577
3578 // remove by class
3579 $remove_by_class = array(
3580 'frm_ajax_loading',
3581 'wp-editor-tools',
3582 'quicktags-toolbar',
3583 'frm_button_submit',
3584 'frm_range_value',
3585 'star-rating',
3586 'frm_repeat_buttons',
3587 'frm_save_draft',
3588 'frm_final_submit',
3589 'frm_verify',
3590 );
3591 foreach ($remove_by_class as $key => $class) {
3592 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
3593 foreach ($elements as $element) {
3594 $element->parentNode->removeChild($element);
3595 }
3596 }
3597
3598 // remove by tag
3599 $remove_by_tag = array(
3600 'link',
3601 'style',
3602 'script',
3603 );
3604 foreach ($remove_by_tag as $key => $tag) {
3605 $elements = $xpath->query('//' . $tag);
3606 foreach ($elements as $element) {
3607 $element->parentNode->removeChild($element);
3608 }
3609 }
3610
3611 // remove classes
3612 $remove_classes = array(
3613 'wp-editor-container',
3614 'frm_logic_form',
3615 'frm_pos_none',
3616 );
3617 foreach ($remove_classes as $key => $class) {
3618 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
3619 foreach ($elements as $element) {
3620 $xml->set_node_value($element, 'class', str_replace($class, '', $xml->get_node_value($element, 'class')));
3621 }
3622 }
3623
3624 // remove styles
3625 $remove_styles = array(
3626 'frm_toggle_container',
3627 );
3628 foreach ($remove_styles as $key => $class) {
3629 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
3630 foreach ($elements as $element) {
3631 $xml->set_node_value($element, 'style', '');
3632 }
3633 }
3634
3635 /*
3636 * Metas patterns to replace field names
3637 * @since 0.01.42
3638 */
3639 $metas_pattern = [
3640 '/item_meta\[(?:.*?)\]\[0\]\[(.*?)\](?:\[\])?/i' => $child ? '$1' : '$1:1',
3641 '/item_meta\[(.*?)\](\[\])?/i' => '$1',
3642 ];
3643
3644 // replace names
3645 $metas = $xpath->query("//*[contains(@name, 'item_meta')]");
3646 foreach ($metas as $element) {
3647 $field_id = preg_replace(array_keys($metas_pattern), $metas_pattern, $xml->get_node_value($element, 'name'));
3648 if (get_option('e2pdf_formidable_use_keys', '0') && class_exists('FrmField')) {
3649 if (strpos($field_id, ':') !== false) {
3650 $repeat_data = explode(':', $field_id);
3651 if (isset($repeat_data['0'])) {
3652 $field_data = FrmField::getOne($repeat_data['0']);
3653 if ($field_data) {
3654 $field_id = $field_data->field_key . ':1';
3655 }
3656 }
3657 } else {
3658 $field_data = FrmField::getOne($field_id);
3659 if ($field_data) {
3660 $field_id = $field_data->field_key;
3661 }
3662 }
3663 }
3664 $xml->set_node_value($element, 'name', $field_id);
3665 }
3666
3667 $frm_combo_inputs_container = $xpath->query("//*[contains(@class, 'frm_combo_inputs_container')]");
3668 foreach ($frm_combo_inputs_container as $element) {
3669 $inputs = $xpath->query('.//input', $element);
3670 $selects = $xpath->query('.//select', $element);
3671
3672 foreach ($selects as $key => $sub_element) {
3673 $field_data = array();
3674 preg_match('/(.*?)\[(.*?)\]/i', $xml->get_node_value($sub_element, 'name'), $field_data);
3675 if (!empty($field_data) && isset($field_data[1]) && isset($field_data[2])) {
3676 $field_id = $field_data[1] . ' show="' . $field_data[2] . '"';
3677 $xml->set_node_value($sub_element, 'name', $field_id);
3678 }
3679 }
3680
3681 foreach ($inputs as $key => $sub_element) {
3682 $field_data = array();
3683 preg_match('/(.*?)\[(.*?)\]/i', $xml->get_node_value($sub_element, 'name'), $field_data);
3684 if (!empty($field_data) && isset($field_data[1]) && isset($field_data[2])) {
3685 $field_id = $field_data[1] . ' show="' . $field_data[2] . '"';
3686 $xml->set_node_value($sub_element, 'name', $field_id);
3687 }
3688 }
3689 }
3690
3691 $frm_dropzone = $xpath->query("//*[contains(@class, 'frm_dropzone')]/parent::*");
3692 foreach ($frm_dropzone as $element) {
3693 $dropzone = $xpath->query(".//*[contains(@class, 'frm_dropzone')]", $element)->item(0);
3694 $input = $xpath->query('.//input', $element)->item(0);
3695 if ($input && $dropzone) {
3696 $input_cloned = $input->cloneNode(true);
3697
3698 $xml->set_node_value($input_cloned, 'type', 'text');
3699 $xml->set_node_value($input_cloned, 'value', __('File Upload', 'formidable'));
3700 $xml->set_node_value($input_cloned, 'style', 'width: 100%; height: 200px; text-align: center;');
3701
3702 if (strpos($xml->get_node_value($input_cloned, 'name'), ':') !== false) {
3703 $xml->set_node_value($input_cloned, 'name', $xml->get_node_value($input_cloned, 'name') . ' size="full" show_image="0" add_link="0"');
3704 } else {
3705 $xml->set_node_value($input_cloned, 'name', $xml->get_node_value($input_cloned, 'name') . ' size="full"');
3706 }
3707
3708 $input->parentNode->replaceChild($input_cloned, $input);
3709 $dropzone->parentNode->removeChild($dropzone);
3710 }
3711 }
3712
3713 // replace signature
3714 $sigpad = $xpath->query("//*[contains(@class, 'sigPad')]");
3715 foreach ($sigpad as $element) {
3716 $input = $xpath->query('.//input', $element)->item(0);
3717 if ($input) {
3718 $input_cloned = $input->cloneNode(true);
3719
3720 $field_id = preg_replace('/\[(.*?)\]/i', '', $xml->get_node_value($input_cloned, 'name'));
3721 if (get_option('e2pdf_formidable_use_keys', '0') && class_exists('FrmField')) {
3722 $field_data = FrmField::getOne($field_id);
3723 if ($field_data) {
3724 $field_id = $field_data->field_key;
3725 }
3726 }
3727
3728 $xml->set_node_value($input_cloned, 'style', 'width: 300px; height: 100px;');
3729 $xml->set_node_value($input_cloned, 'name', $field_id);
3730 $element->parentNode->replaceChild($input_cloned, $element);
3731 }
3732 }
3733
3734 // replace names
3735 $fields = $xpath->query('//input');
3736 foreach ($fields as $element) {
3737
3738 $image_options = false;
3739 $separate_value = false;
3740
3741 if (class_exists('FrmField') && ($xml->get_node_value($element, 'type') == 'checkbox' || $xml->get_node_value($element, 'type') == 'radio')) {
3742
3743 $field_id = $xml->get_node_value($element, 'name');
3744 if (false !== strpos($xml->get_node_value($element, 'name'), ':')) {
3745 $field_id = substr($xml->get_node_value($element, 'name'), 0, strpos($xml->get_node_value($element, 'name'), ':'));
3746 }
3747 if (preg_match('/\[(other(.*?[^\]]))\]/', $field_id)) {
3748 $field_id = preg_replace('/\[(other(.*?[^\]]))\]/', '', $field_id);
3749 }
3750
3751 $field_data = FrmField::getOne($field_id);
3752
3753 if (isset($field_data->field_options['image_options']) && $field_data->field_options['image_options']) {
3754 $image_options = true;
3755 }
3756
3757 if (isset($field_data->field_options['separate_value']) && $field_data->field_options['separate_value']) {
3758 $separate_value = true;
3759 }
3760
3761 if (isset($field_data->type) && $field_data->type === 'data' && isset($field_data->field_options['form_select'])) {
3762 $dynamic_form_id = false;
3763 $dynamic_field_id = false;
3764
3765 $dynamic_field_id = $field_data->field_options['form_select'];
3766 $dynamic_field_data = FrmField::getOne($dynamic_field_id);
3767 if ($dynamic_field_data) {
3768 $dynamic_form_id = $dynamic_field_data->form_id;
3769 }
3770
3771 $options = array();
3772 if (class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
3773 $where = array(
3774 'it.form_id' => $dynamic_form_id,
3775 );
3776 $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
3777 foreach ($entries_tmp as $key => $entry) {
3778 $options[] = array(
3779 'label' => FrmEntryMeta::get_meta_value($entry, $dynamic_field_id),
3780 'value' => $key,
3781 );
3782 }
3783 }
3784 $field_data->options = $options;
3785 }
3786
3787 if (isset($field_data->options) && is_array($field_data->options)) {
3788
3789 $field_options = $field_data->options;
3790 $field_value = $xml->get_node_value($element, 'value');
3791
3792 $field_key = false;
3793 foreach ($field_options as $fv_key => $fv) {
3794 if (isset($fv['value']) && $fv['value'] == $field_value) {
3795 $field_key = $fv_key;
3796 break;
3797 }
3798 }
3799
3800 if ($field_key !== false) {
3801 if ($image_options && $separate_value) {
3802 $field_label = isset($field_options[$field_key]['value']) ? $field_options[$field_key]['value'] : $field_value;
3803 } else {
3804 $field_label = isset($field_options[$field_key]['label']) ? $field_options[$field_key]['label'] : $field_value;
3805 }
3806 $xml->set_node_value($element, 'value', $field_label);
3807 } elseif ($xml->get_node_value($element, 'type') == 'radio') {
3808 $xml->set_node_value($element, 'value', '[' . $field_id . ' show="value" key="other"]');
3809 } else {
3810 $field_key = array_search($field_value, $field_options);
3811 if ($field_key !== false) {
3812 $xml->set_node_value($element, 'value', '[' . $field_id . ' show="value" key="' . $field_key . '"]');
3813 }
3814 }
3815 }
3816 }
3817
3818 $name = false;
3819 if ($xml->get_node_value($element, 'type') == 'text') {
3820 if (preg_match('/other\[(.*?[^\]])\]\[(other(.*?[^\]]))\]/', $xml->get_node_value($element, 'name'))) {
3821 $name = preg_replace('/other\[(.*?[^\]])\]\[(other(.*?[^\]]))\]/', '$1 show="value" key="$2"', $xml->get_node_value($element, 'name'));
3822 } elseif (preg_match('/other\[(.*?[^\]])\]/', $xml->get_node_value($element, 'name'))) {
3823 $name = preg_replace('/other\[(.*?[^\]])\]/', '$1 show="value" key="other"', $xml->get_node_value($element, 'name'));
3824 }
3825 } elseif ($xml->get_node_value($element, 'type') == 'checkbox') {
3826 if (preg_match('/\[(other(.*?[^\]]))\]/', $xml->get_node_value($element, 'name'))) {
3827 $name = preg_replace('/\[(other(.*?[^\]]))\]/', '', $xml->get_node_value($element, 'name'));
3828 } else {
3829 if ($image_options) {
3830 $name = $xml->get_node_value($element, 'name') . ' show="value"';
3831 }
3832 }
3833 } elseif ($xml->get_node_value($element, 'type') == 'radio') {
3834 if ($image_options) {
3835 $name = $xml->get_node_value($element, 'name') . ' show="value"';
3836 }
3837 }
3838
3839 if (!$name) {
3840 $name = $xml->get_node_value($element, 'name');
3841 }
3842
3843 $xml->set_node_value($element, 'name', '[' . $name . ']');
3844 }
3845
3846 // replace names
3847 $textareas = $xpath->query('//textarea');
3848 foreach ($textareas as $element) {
3849 $xml->set_node_value($element, 'name', '[' . $xml->get_node_value($element, 'name') . ' wpautop=0]');
3850 }
3851
3852 // replace names
3853 $selects = $xpath->query('//select');
3854 foreach ($selects as $element) {
3855
3856 if (class_exists('FrmField')) {
3857
3858 $options = $xpath->query('.//option', $element);
3859 $field_id = $xml->get_node_value($element, 'name');
3860
3861 /* Time Field names */
3862 if (false !== strpos($xml->get_node_value($element, 'name'), ':')) {
3863 $field_id = substr($xml->get_node_value($element, 'name'), 0, strpos($xml->get_node_value($element, 'name'), ':'));
3864 }
3865 $field_id = str_replace(array('[H]', '[m]', '[A]'), '', $field_id);
3866
3867 $field_data = FrmField::getOne($field_id);
3868 if (isset($field_data->type) && $field_data->type === 'lookup') {
3869 foreach ($options as $option) {
3870 $option->parentNode->removeChild($option);
3871 }
3872 $wrapper = $dom->createElement('option');
3873 $wrapper_atts = array(
3874 'value' => '[e2pdf-frm-lookup-values id="' . $field_id . '"]',
3875 );
3876 foreach ($wrapper_atts as $key => $value) {
3877 $attr = $dom->createAttribute($key);
3878 $attr->value = $value;
3879 $wrapper->appendChild($attr);
3880 }
3881 $element->appendChild($wrapper);
3882 } elseif (isset($field_data->type) && $field_data->type === 'data') {
3883 foreach ($options as $option) {
3884 $option->parentNode->removeChild($option);
3885 }
3886 $wrapper = $dom->createElement('option');
3887 $wrapper_atts = array(
3888 'value' => '[e2pdf-frm-data-values id="' . $field_id . '"]',
3889 );
3890 foreach ($wrapper_atts as $key => $value) {
3891 $attr = $dom->createAttribute($key);
3892 $attr->value = $value;
3893 $wrapper->appendChild($attr);
3894 }
3895 $element->appendChild($wrapper);
3896 } elseif (isset($field_data->type) && $field_data->type === 'time') {
3897 $replace = array(
3898 '[m]' => ' format="i"',
3899 '[A]' => ' format="A"',
3900 );
3901 if (isset($field_data->field_options['clock']) && $field_data->field_options['clock'] == '12') {
3902 $replace['[H]'] = ' format="g"';
3903 } else {
3904 $replace['[H]'] = ' format="H"';
3905 }
3906 $xml->set_node_value($element, 'name', str_replace(array_keys($replace), $replace, $xml->get_node_value($element, 'name')));
3907 }
3908
3909 if (isset($field_data->options) && is_array($field_data->options)) {
3910 $field_options = $field_data->options;
3911 foreach ($options as $option) {
3912 $field_value = $xml->get_node_value($option, 'value');
3913 foreach ($field_options as $field_option) {
3914 if (isset($field_option['value']) && $field_option['value'] === $field_value) {
3915 $field_label = isset($field_option['label']) ? $field_option['label'] : $field_value;
3916 $xml->set_node_value($option, 'value', $field_label);
3917 }
3918 }
3919 }
3920 }
3921 }
3922 $xml->set_node_value($element, 'name', '[' . $xml->get_node_value($element, 'name') . ']');
3923 }
3924
3925 // show total formatted fields
3926 $total_formatted = $xpath->query("//*[contains(@class, 'frm_total_formatted')]/parent::*");
3927 foreach ($total_formatted as $element) {
3928 $elements = $xpath->query("//*[contains(@class, 'frm_hidden')]");
3929 foreach ($elements as $element) {
3930 $xml->set_node_value($element, 'class', str_replace('frm_hidden', '', $xml->get_node_value($element, 'class')));
3931 }
3932 }
3933
3934 if (defined('LIBXML_HTML_NOIMPLIED') && defined('LIBXML_HTML_NODEFDTD')) {
3935 return str_replace(array('<html>', '</html>'), '', $dom->saveHTML());
3936 } else {
3937 return $dom->saveHTML();
3938 }
3939 }
3940 }
3941 return false;
3942 }
3943
3944 /**
3945 * Convert Field name to Value
3946 * @since 0.01.34
3947 * @param string $name - Field name
3948 * @return bool|string - Converted value or false
3949 */
3950 public function auto_map($name = false) {
3951
3952 $item = $this->get('item');
3953
3954 if ($item && class_exists('FrmField')) {
3955 $where = array(
3956 'fi.form_id' => (int) $item,
3957 array(
3958 'or' => 1,
3959 'fi.field_key' => $name,
3960 'fi.name' => $name,
3961 ),
3962 );
3963 $field = FrmField::getAll($where, 'id ASC', '1');
3964
3965 if ($field && is_object($field)) {
3966 $field_id = get_option('e2pdf_formidable_use_keys', '0') ? $field->field_key : $field->id;
3967 if ($field->type == 'textarea' || $field->type == 'rte') {
3968 return '[' . $field_id . ' wpautop=0]';
3969 } else {
3970 return '[' . $field_id . ']';
3971 }
3972 }
3973 }
3974
3975 return false;
3976 }
3977
3978 /**
3979 * Load additional shortcodes for this extension
3980 */
3981 public function load_shortcodes() {
3982 add_shortcode('e2pdf-frm-entry-values', array($this, 'shortcode_e2pdf_frm_entry_values'));
3983 add_shortcode('e2pdf-frm-lookup-values', array($this, 'shortcode_e2pdf_frm_lookup_values'));
3984 add_shortcode('e2pdf-frm-data-values', array($this, 'shortcode_e2pdf_frm_data_values'));
3985 add_shortcode('e2pdf-frm-repeatable', array($this, 'shortcode_e2pdf_frm_repeatable'));
3986 }
3987
3988 /**
3989 * [e2pdf-frm-repeatable id="entry_id' field_id="field_id"] shortcode
3990 * @param array $atts - Atributes for shortcode
3991 * @return string - Output of shortcode
3992 */
3993 public function shortcode_e2pdf_frm_repeatable($atts = array()) {
3994 $id = (int) $atts['id'];
3995 $field_id = $atts['field_id'];
3996
3997 $response = '[frm-field-value field_id="' . $field_id . '" entry="' . $id . '"]';
3998 return $response;
3999 }
4000
4001 /**
4002 * [e2pdf-frm-entry-values id='{form_id}' field_id='{field_id}' separator=''] shortcode
4003 * @param array $atts - Atributes for shortcode
4004 * @return string - Output of shortcodes
4005 */
4006 public function shortcode_e2pdf_frm_entry_values($atts = array()) {
4007 $form_id = (int) $atts['id'];
4008 $field_id = $atts['field_id'];
4009 $separator = isset($atts['separator']) ? $atts['separator'] : "\r\n";
4010
4011 $response = '';
4012 $values = array();
4013 if ($form_id && $field_id && class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
4014
4015 $where = array(
4016 'it.form_id' => $form_id,
4017 );
4018 $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
4019 foreach ($entries_tmp as $key => $entry) {
4020 $values[] = FrmEntryMeta::get_meta_value($entry, $field_id);
4021 }
4022 }
4023 $response = implode($separator, $values);
4024 return $response;
4025 }
4026
4027 /**
4028 * [e2pdf-frm-lookup-values id='{field_id}'] shortcode
4029 * @param array $atts - Atributes for shortcode
4030 * @return string - Output of shortcode
4031 */
4032 public function shortcode_e2pdf_frm_lookup_values($atts = array()) {
4033
4034 $id = isset($atts['id']) ? $atts['id'] : false;
4035 $user_id = isset($atts['user_id']) ? $atts['user_id'] : '0';
4036 $separator = isset($atts['separator']) ? $atts['separator'] : "\r\n";
4037
4038 $response = '';
4039 $values = array();
4040
4041 if ($id && class_exists('FrmField') && class_exists('FrmAppHelper') && class_exists('FrmFieldsHelper')) {
4042 $field = FrmField::getOne($id);
4043 if ($field && $field->type === 'lookup') {
4044
4045 $frm_filter = false;
4046 if (class_exists('FrmProFieldsHelper') && method_exists('FrmProFieldsHelper', 'add_default_field_settings')) {
4047 if (!has_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings')) {
4048 add_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings', 10, 2);
4049 $frm_filter = true;
4050 }
4051 }
4052
4053 $args = array();
4054 if (is_admin()) {
4055 $original_user_id = get_current_user_id();
4056 wp_set_current_user($user_id);
4057 if (!current_user_can('administrator')) {
4058 add_filter('frm_lookup_is_current_user_filter_needed', array($this, 'filter_frm_lookup_is_current_user_filter_needed'), 10, 3);
4059 }
4060 }
4061
4062 $field_array = FrmAppHelper::start_field_array($field);
4063 FrmFieldsHelper::prepare_new_front_field($field_array, $field, $args);
4064 $field_array = array_merge($field->field_options, $field_array);
4065 if (isset($field_array['options']) && is_array($field_array['options'])) {
4066 $values = $field_array['options'];
4067 }
4068
4069 if (is_admin()) {
4070 if (!current_user_can('administrator')) {
4071 remove_filter('frm_lookup_is_current_user_filter_needed', array($this, 'filter_frm_lookup_is_current_user_filter_needed'));
4072 }
4073 wp_set_current_user($original_user_id);
4074 }
4075 if ($frm_filter) {
4076 remove_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings');
4077 }
4078 }
4079 }
4080
4081 $response = implode($separator, $values);
4082 return $response;
4083 }
4084
4085 /**
4086 * [e2pdf-frm-data-values id='{field_id}'] shortcode
4087 * @param array $atts - Atributes for shortcode
4088 * @return string - Output of shortcode
4089 */
4090 public function shortcode_e2pdf_frm_data_values($atts = array()) {
4091
4092 $id = isset($atts['id']) ? $atts['id'] : false;
4093 $user_id = isset($atts['user_id']) ? $atts['user_id'] : '0';
4094 $separator = isset($atts['separator']) ? $atts['separator'] : "\r\n";
4095
4096 $response = '';
4097 $values = array();
4098
4099 if ($id && class_exists('FrmField') && class_exists('FrmAppHelper') && class_exists('FrmFieldsHelper')) {
4100 $field = FrmField::getOne($id);
4101 if ($field && $field->type === 'data') {
4102 $frm_filter = false;
4103 if (class_exists('FrmProFieldsHelper') && method_exists('FrmProFieldsHelper', 'add_default_field_settings')) {
4104 if (!has_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings')) {
4105 add_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings', 10, 2);
4106 $frm_filter = true;
4107 }
4108 }
4109
4110 $args = array();
4111 if (is_admin()) {
4112 $original_user_id = get_current_user_id();
4113 wp_set_current_user($user_id);
4114 if (current_user_can('administrator')) {
4115 $field->field_options['restrict'] = '0';
4116 }
4117 }
4118
4119 $field_array = FrmAppHelper::start_field_array($field);
4120 FrmFieldsHelper::prepare_new_front_field($field_array, $field, $args);
4121
4122 $field_array = array_merge($field->field_options, $field_array);
4123 if (isset($field_array['options']) && is_array($field_array['options'])) {
4124 $values = $field_array['options'];
4125 }
4126
4127 if (is_admin()) {
4128 wp_set_current_user($original_user_id);
4129 }
4130 if ($frm_filter) {
4131 remove_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings');
4132 }
4133 }
4134 }
4135
4136 $response = implode($separator, $values);
4137 return $response;
4138 }
4139
4140 /**
4141 * Get styles for generating Map Field function
4142 * @return array - List of css files to load
4143 */
4144 public function styles($item_id = false) {
4145
4146 $styles = array();
4147 if (class_exists('FrmStylesHelper')) {
4148 $uploads = FrmStylesHelper::get_upload_base();
4149 $saved_css_path = '/formidable/css/formidablepro.css';
4150 if (is_readable($uploads['basedir'] . $saved_css_path)) {
4151 $url = $uploads['baseurl'] . $saved_css_path;
4152 } else {
4153 $url = admin_url('admin-ajax.php?action=frmpro_css');
4154 }
4155 $styles[] = $url;
4156 $styles[] = plugins_url('css/extension/formidable.css?v=' . time(), $this->helper->get('plugin_file_path'));
4157 }
4158 return $styles;
4159 }
4160
4161 public function merged_items() {
4162 return true;
4163 }
4164
4165 public function hook_formidable_entry_view($entry) {
4166 if (!empty($entry->form_id)) {
4167 $hooks = $this->helper->load('hooks')->get('formidable', 'hook_formidable_entry_view', $entry->form_id);
4168 if (!empty($hooks)) {
4169 echo '<h3>' . apply_filters('e2pdf_hook_section_title', __('E2Pdf Actions', 'e2pdf'), 'hook_formidable_entry_view') . '</h3>';
4170 echo '<div class="inside">';
4171 foreach ($hooks as $hook) {
4172 if ($this->helper->load('hooks')->process_hook(
4173 $hook,
4174 [
4175 'dataset' => $entry->id,
4176 ],
4177 'hook_formidable_entry_view'
4178 )
4179 ) {
4180 $action = apply_filters(
4181 'e2pdf_hook_action_button',
4182 array(
4183 'html' => '<div class="misc-pub-section"><a class="e2pdf-download-hook" target="_blank" title="%2$s" href="%1$s"><span class="dashicons dashicons-pdf"></span> %2$s</a></div>',
4184 'url' => $this->helper->get_url(
4185 array(
4186 'page' => 'e2pdf',
4187 'action' => 'export',
4188 'id' => $hook,
4189 'dataset' => $entry->id,
4190 ), 'admin.php?'
4191 ),
4192 'title' => 'PDF #' . $hook,
4193 ), 'hook_formidable_entry_view', $hook, $entry->id
4194 );
4195 if (!empty($action)) {
4196 echo sprintf(
4197 $action['html'], $action['url'], $action['title']
4198 );
4199 }
4200 }
4201 }
4202 echo '</div>';
4203 }
4204 }
4205 }
4206
4207 public function hook_formidable_entry_edit($entry) {
4208 if (!empty($entry->form_id)) {
4209 $hooks = $this->helper->load('hooks')->get('formidable', 'hook_formidable_entry_edit', $entry->form_id);
4210 if (!empty($hooks)) {
4211 echo '<h3>' . apply_filters('e2pdf_hook_section_title', __('E2Pdf Actions', 'e2pdf'), 'hook_formidable_entry_view') . '</h3>';
4212 echo '<div class="inside">';
4213 foreach ($hooks as $hook) {
4214 if ($this->helper->load('hooks')->process_hook(
4215 $hook,
4216 [
4217 'dataset' => $entry->id,
4218 ],
4219 'hook_formidable_entry_edit'
4220 )
4221 ) {
4222 $action = apply_filters(
4223 'e2pdf_hook_action_button',
4224 array(
4225 'html' => '<div class="misc-pub-section"><a class="e2pdf-download-hook" target="_blank" title="%2$s" href="%1$s"><span class="dashicons dashicons-pdf"></span> %2$s</a></div>',
4226 'url' => $this->helper->get_url(
4227 array(
4228 'page' => 'e2pdf',
4229 'action' => 'export',
4230 'id' => $hook,
4231 'dataset' => $entry->id,
4232 ), 'admin.php?'
4233 ),
4234 'title' => 'PDF #' . $hook,
4235 ), 'hook_formidable_entry_edit', $hook, $entry->id
4236 );
4237 if (!empty($action)) {
4238 echo sprintf(
4239 $action['html'], $action['url'], $action['title']
4240 );
4241 }
4242 }
4243 }
4244 echo '</div>';
4245 }
4246 }
4247 }
4248
4249 public function hook_formidable_row_actions($actions, $entry) {
4250 if (!empty($entry->form_id) && !empty($entry->id)) {
4251 $hooks = $this->helper->load('hooks')->get('formidable', 'hook_formidable_row_actions', $entry->form_id);
4252 foreach ($hooks as $hook) {
4253 if ($this->helper->load('hooks')->process_hook(
4254 $hook,
4255 [
4256 'dataset' => $entry->id,
4257 ],
4258 'hook_formidable_row_actions'
4259 )
4260 ) {
4261 $action = apply_filters(
4262 'e2pdf_hook_action_button',
4263 array(
4264 'html' => '<a class="e2pdf-download-hook" target="_blank" href="%s">%s</a>',
4265 'url' => $this->helper->get_url(
4266 array(
4267 'page' => 'e2pdf',
4268 'action' => 'export',
4269 'id' => $hook,
4270 'dataset' => $entry->id,
4271 ), 'admin.php?'
4272 ),
4273 'title' => 'PDF #' . $hook,
4274 ), 'hook_formidable_row_actions', $hook, $entry->id
4275 );
4276 if (!empty($action)) {
4277 $actions['e2pdf_' . $hook] = sprintf(
4278 $action['html'], $action['url'], $action['title']
4279 );
4280 }
4281 }
4282 }
4283 }
4284 return $actions;
4285 }
4286 }
4287