PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.08.06
E2Pdf – Export Pdf Tool for WordPress v1.08.06
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.08.06, at classes/extension/e2pdf-formidable.php

3,204 lines 140.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 *
6 * @copyright Copyright 2017 https://e2pdf.com
7 * @license GPL v2
8 * @version 1
9 * @link https://e2pdf.com
10 * @since 0.00.01
11 */
12 if (!defined('ABSPATH')) {
13 die('Access denied.');
14 }
15
16 class Extension_E2pdf_Formidable extends Model_E2pdf_Model {
17
18 private $options;
19 private $info = array(
20 'key' => 'formidable',
21 'title' => 'Formidable Forms'
22 );
23
24 function __construct() {
25 parent::__construct();
26 }
27
28 /**
29 * Get info about extension
30 *
31 * @param string $key - Key to get assigned extension info value
32 *
33 * @return array|string - Extension Key and Title or Assigned extension info value
34 */
35 public function info($key = false) {
36 if ($key && isset($this->info[$key])) {
37 return $this->info[$key];
38 } else {
39 return array(
40 $this->info['key'] => $this->info['title']
41 );
42 }
43 }
44
45 /**
46 * Check if needed plugin active
47 *
48 * @return bool - Activated/Not Activated plugin
49 */
50 public function active() {
51
52 if (!function_exists('is_plugin_active')) {
53 include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
54 }
55
56 if (is_plugin_active('formidable/formidable.php')) {
57 return true;
58 }
59 return false;
60 }
61
62 /**
63 * Set option
64 *
65 * @param string $key - Key of option
66 * @param string $value - Value of option
67 *
68 * @return bool - Status of setting option
69 */
70 public function set($key, $value) {
71
72 if (!isset($this->options)) {
73 $this->options = new stdClass();
74 }
75
76 $this->options->$key = $value;
77 return true;
78 }
79
80 /**
81 * Get option by key
82 *
83 * @param string $key - Key to get assigned option value
84 *
85 * @return mixed
86 */
87 public function get($key) {
88 if (isset($this->options->$key)) {
89 $value = $this->options->$key;
90 return $value;
91 } elseif ($key == 'args') {
92 return array();
93 } else {
94 return false;
95 }
96 }
97
98 /**
99 * Get items to work with
100 *
101 * @return array() - List of available items
102 */
103 public function items() {
104
105 $content = array();
106
107 if (class_exists('FrmForm')) {
108 $where = array(
109 'is_template' => 0,
110 'status' => 'published'
111 );
112
113 $forms = FrmForm::getAll($where, 'name');
114 if ($forms) {
115 foreach ($forms as $key => $value) {
116 $content[] = $this->item($value->id);
117 }
118 }
119 }
120
121 return $content;
122 }
123
124 /**
125 * Get entries for export
126 *
127 * @param int $item - Form ID
128 * @param string $name - Entries names
129 *
130 * @return array() - Entries list
131 */
132 public function datasets($item = false, $name = false) {
133
134 $item = (int) $item;
135 $datasets = array();
136
137 if (class_exists('FrmEntry') && $item) {
138 $where = array(
139 'it.form_id' => $item
140 );
141
142 $datasets_tmp = FrmEntry::getAll($where, ' ORDER BY id DESC');
143
144 if ($datasets_tmp) {
145 foreach ($datasets_tmp as $key => $dataset) {
146 $this->set('item', $item);
147 $this->set('dataset', $dataset->id);
148
149 $dataset_title = $this->render($name);
150 if (!$dataset_title) {
151 $dataset_title = $dataset->item_key;
152 }
153 $datasets[] = array(
154 'key' => $dataset->id,
155 'value' => $dataset_title
156 );
157 }
158 }
159 }
160
161 return $datasets;
162 }
163
164 /**
165 * Get dataset
166 *
167 * @param int $dataset - Dataset ID
168 *
169 * @return object - Dataset
170 */
171 public function dataset($dataset = false) {
172
173 $dataset = (int) $dataset;
174
175 if (!$dataset) {
176 return false;
177 }
178
179 $data = new stdClass();
180 $data->url = $this->helper->get_url(array('page' => 'formidable-entries', 'frm_action' => 'show', 'id' => $dataset));
181
182 return $data;
183 }
184
185 /**
186 * Get item
187 *
188 * @param int $item - Item ID
189 *
190 * @return object - Item
191 */
192 public function item($item = false) {
193
194 $item = (int) $item;
195 if (!$item && $this->get('item')) {
196 $item = $this->get('item');
197 }
198
199 $form = new stdClass();
200
201 $formidable_form = false;
202 if (class_exists('FrmForm')) {
203 $formidable_form = FrmForm::getOne($item);
204 }
205
206 if ($formidable_form) {
207 $form->id = (string) $item;
208 $form->url = $this->helper->get_url(array('page' => 'formidable', 'frm_action' => 'edit', 'id' => $item));
209 $form->name = $formidable_form->name;
210 } else {
211 $form->id = '';
212 $form->url = 'javascript:void(0);';
213 $form->name = '';
214 }
215 return $form;
216 }
217
218 /**
219 * Render value according to content
220 *
221 * @param string $value - Content
222 * @param string $type - Type of rendering value
223 * @param array $field - Field details
224 *
225 * @return string - Fully rendered value
226 */
227 public function render($value, $type = false, $field = array()) {
228
229 $value = $this->render_shortcodes($value, $type, $field);
230 $value = $this->strip_shortcodes($value);
231
232 if ($type === 'value' && isset($field['type']) && $field['type'] === 'e2pdf-checkbox' && isset($field['properties']['option'])) {
233 $option = $this->render($field['properties']['option']);
234 $options = explode(', ', $value);
235 $option_options = explode(', ', $option);
236 if (is_array($options) && is_array($option_options) && !array_diff($option_options, $options)) {
237 return $option;
238 } else {
239 return "";
240 }
241 }
242
243 if ($type === 'value') {
244 $value = $this->convert_shortcodes($value, true);
245 }
246
247 return $value;
248 }
249
250 /**
251 * Load actions for this extension
252 */
253 public function load_actions() {
254 add_action('frm_notification', array($this, 'action_frm_notification'), 30, 3);
255 add_action('e2pdf_model_template_fill_pre', array($this, 'action_e2pdf_model_template_fill_pre'), 10, 2);
256 add_action('e2pdf_model_template_fill_after', array($this, 'action_e2pdf_model_template_fill_after'), 10, 2);
257 }
258
259 /**
260 * Load filters for this extension
261 */
262 public function load_filters() {
263
264 if (!get_option('e2pdf_formidable_disable_filter')) {
265 add_filter('frm_display_entry_content', array(new Model_E2pdf_Filter(), 'pre_filter'), 9, 1);
266 add_filter('frm_display_entry_content', array(new Model_E2pdf_Filter(), 'filter'), 25, 1);
267 add_filter('frm_display_entry_content', array($this, 'filter_frm_display_entry_content'), 30, 1);
268 add_filter('frm_content', array(new Model_E2pdf_Filter(), 'pre_filter'), 10, 1);
269 add_filter('frm_content', array(new Model_E2pdf_Filter(), 'filter'), 25, 1);
270 }
271
272 add_filter('frm_content', array($this, 'filter_frm_content'), 30, 3);
273 add_filter('frm_notification_attachment', array($this, 'filter_frm_notification_attachment'), 30, 3);
274 add_filter('e2pdf_model_options_get_options_options', array($this, 'filter_e2pdf_model_options_get_options_options'), 10, 1);
275 add_filter('e2pdf_controller_templates_backup_options', array($this, 'filter_e2pdf_controller_templates_backup_options'), 10, 3);
276 add_filter('e2pdf_controller_templates_import_options', array($this, 'filter_e2pdf_controller_templates_import_options'), 10, 3);
277 add_filter('e2pdf_controller_templates_backup_pages', array($this, 'filter_e2pdf_controller_templates_backup_pages'), 10, 4);
278 add_filter('e2pdf_controller_templates_backup_dataset_title', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
279 add_filter('e2pdf_controller_templates_backup_button_title', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
280 add_filter('e2pdf_controller_templates_backup_name', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
281 add_filter('e2pdf_controller_templates_backup_password', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
282 add_filter('e2pdf_controller_templates_backup_meta_title', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
283 add_filter('e2pdf_controller_templates_backup_meta_subject', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
284 add_filter('e2pdf_controller_templates_backup_meta_author', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
285 add_filter('e2pdf_controller_templates_backup_meta_keywords', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
286
287 add_filter('e2pdf_controller_templates_import_pages', array($this, 'filter_e2pdf_controller_templates_import_pages'), 10, 5);
288 add_filter('e2pdf_controller_templates_import_dataset_title', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
289 add_filter('e2pdf_controller_templates_import_button_title', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
290 add_filter('e2pdf_controller_templates_import_name', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
291 add_filter('e2pdf_controller_templates_import_password', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
292 add_filter('e2pdf_controller_templates_import_meta_title', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
293 add_filter('e2pdf_controller_templates_import_meta_subject', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
294 add_filter('e2pdf_controller_templates_import_meta_author', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
295 add_filter('e2pdf_controller_templates_import_meta_keywords', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
296 }
297
298 /**
299 * Render shortcodes which available in this extension
300 *
301 * @param string $value - Content
302 * @param string $type - Type of rendering value
303 * @param array $field - Field details
304 *
305 * @return string - Value with rendered shortcodes
306 */
307 public function render_shortcodes($value, $type = false, $field = array()) {
308
309 $dataset = $this->get('dataset');
310 $item = $this->get('item');
311 $user_id = $this->get('user_id');
312 $args = $this->get('args');
313 $template_id = $this->get('template_id') ? $this->get('template_id') : '0';
314 $element_id = isset($field['element_id']) ? $field['element_id'] : '0';
315
316 $form = false;
317 $entry = false;
318 $maybe_checkbox_separated = false;
319
320 if ($this->verify()) {
321
322 $args = apply_filters('e2pdf_extension_render_shortcodes_args', $args, $element_id, $template_id, $item, $dataset);
323
324 $form = FrmForm::getOne($item);
325 $entry = FrmEntry::getOne($dataset);
326
327 if (false !== strpos($value, '[')) {
328
329 // Start render Separatable fields shortcode
330 if (class_exists('FrmProEntry')) {
331 $shortcode_tags = array();
332 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
333 $tagnames = array_intersect($shortcode_tags, $matches[1]);
334
335 foreach ($matches[1] as $key => $shortcode) {
336 if (strpos($shortcode, ':') !== false) {
337 $shortcode_tags[] = $shortcode;
338 }
339 }
340
341 $tagnames = array_intersect($shortcode_tags, $matches[1]);
342 if (!empty($tagnames)) {
343
344 $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
345
346 preg_match_all("/$pattern/", $value, $shortcodes);
347 foreach ($shortcodes[0] as $key => $shortcode_value) {
348 $shortcode = array();
349 $shortcode[1] = $shortcodes[1][$key];
350 $shortcode[2] = $shortcodes[2][$key];
351 $shortcode[3] = $shortcodes[3][$key];
352 $shortcode[4] = $shortcodes[4][$key];
353 $shortcode[5] = $shortcodes[5][$key];
354 $shortcode[6] = $shortcodes[6][$key];
355
356 $shortcode_details = explode(":", $shortcode[2]);
357
358 $field_id = $shortcode_details['0'];
359 $child_id = $shortcode_details['1'];
360 $child_entry = 0;
361
362 $child_field = false;
363 $child_form = false;
364
365 if (class_exists("FrmField")) {
366 $child_field = FrmField::getOne($field_id);
367 if ($child_field) {
368 $child_form = $child_field->form_id;
369 }
370 }
371
372 $childs = FrmProEntry::get_sub_entries($dataset, true);
373 $child_entries = array();
374
375 if ($childs && $child_form) {
376 foreach ($childs as $child) {
377 if ($child->form_id == $child_form) {
378 $child_entries[] = $child->id;
379 }
380 }
381 }
382
383 $new_shortcode = "";
384
385 if (!empty($child_entries) && count($child_entries) >= $child_id) {
386 $start = 1;
387 foreach ($child_entries as $key => $sub_entry) {
388 if ($start == $child_id) {
389 $child_entry = $sub_entry;
390 break;
391 }
392 $start++;
393 }
394
395 $shortcode[2] = "frm-field-value field_id={$field_id} entry={$child_entry}";
396 $new_shortcode = "[" . $shortcode[2] . $shortcode[3] . "]";
397 }
398
399 $maybe_checkbox_separated = true;
400 $value = str_replace($shortcode_value, $new_shortcode, $value);
401 }
402 }
403 }
404 // End render Separatable fields shortcode
405
406 $shortcode_tags = array(
407 'e2pdf-user',
408 'e2pdf-arg'
409 );
410 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
411 $tagnames = array_intersect($shortcode_tags, $matches[1]);
412
413 if (!empty($tagnames)) {
414
415 $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
416
417 preg_match_all("/$pattern/", $value, $shortcodes);
418
419 foreach ($shortcodes[0] as $key => $shortcode_value) {
420 $shortcode = array();
421 $shortcode[1] = $shortcodes[1][$key];
422 $shortcode[2] = $shortcodes[2][$key];
423 $shortcode[3] = $shortcodes[3][$key];
424 $shortcode[4] = $shortcodes[4][$key];
425 $shortcode[5] = $shortcodes[5][$key];
426 $shortcode[6] = $shortcodes[6][$key];
427
428 $atts = shortcode_parse_atts($shortcode[3]);
429
430 if ($shortcode['2'] == 'e2pdf-user') {
431 if (!isset($atts['id']) && $user_id) {
432 $shortcode[3] .= " id=\"" . $user_id . "\"";
433 $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]", $value);
434 }
435 } elseif ($shortcode['2'] == 'e2pdf-arg') {
436 if (isset($atts['key']) && isset($args[$atts['key']])) {
437 $sub_value = $this->strip_shortcodes($args[$atts['key']]);
438 $value = str_replace($shortcode_value, $sub_value, $value);
439 } else {
440 $value = str_replace($shortcode_value, '', $value);
441 }
442 }
443 }
444 }
445
446 $shortcode_tags = array(
447 'e2pdf-format-number',
448 'e2pdf-format-date',
449 'e2pdf-format-output',
450 );
451 $shortcode_tags = apply_filters('e2pdf_extension_render_shortcodes_tags', $shortcode_tags);
452 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
453 $tagnames = array_intersect($shortcode_tags, $matches[1]);
454
455 if (!empty($tagnames)) {
456
457 $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
458
459 preg_match_all("/$pattern/", $value, $shortcodes);
460 foreach ($shortcodes[0] as $key => $shortcode_value) {
461 $shortcode = array();
462 $shortcode[1] = $shortcodes[1][$key];
463 $shortcode[2] = $shortcodes[2][$key];
464 $shortcode[3] = $shortcodes[3][$key];
465 $shortcode[4] = $shortcodes[4][$key];
466 $shortcode[5] = $shortcodes[5][$key];
467 $shortcode[6] = $shortcodes[6][$key];
468
469 if (!$shortcode['5']) {
470 $sub_value = '';
471 } elseif (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
472 $sub_value = $this->render($shortcode['5'], $type);
473 } else {
474 $sub_value = $this->render($shortcode['5'], $type, $field);
475 }
476 $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]" . $sub_value . "[/" . $shortcode['2'] . "]", $value);
477 }
478 }
479 }
480
481 /*
482 * Checkboxes separatable fix filter add
483 * @since 0.01.43
484 */
485 if ($maybe_checkbox_separated) {
486 add_filter('frm_display_value_custom', array($this, 'filter_frm_display_value_custom'), 0, 3);
487 }
488
489 $value = do_shortcode($value);
490
491 /*
492 * Checkboxes separatable fix filter remove
493 * @since 0.01.43
494 */
495 if ($maybe_checkbox_separated) {
496 remove_filter('frm_display_value_custom', array($this, 'filter_frm_display_value_custom'), 0);
497 }
498
499 //Bug fix for Formidable Forms Signature (2.0.1)
500 $upd_signature = false;
501 if (class_exists('FrmFieldFactory')) {
502 $sig_obj = FrmFieldFactory::get_field_type('signature');
503 if ($sig_obj->get_display_value('signature') == '') {
504 $upd_signature = true;
505 }
506 }
507
508 if ($upd_signature) {
509 remove_filter('frm_get_signature_display_value', 'FrmSigAppController::display_signature', 10);
510 remove_filter('frmpro_fields_replace_shortcodes', 'FrmSigAppController::custom_display_signature', 10);
511 add_filter('frm_keep_signature_value_array', array($this, 'filter_frm_keep_signature_value_array'), 10, 2);
512 }
513
514 $value = apply_filters('frm_content', $value, $form, $entry);
515
516 if ($upd_signature) {
517 remove_filter('frm_keep_signature_value_array', array($this, 'filter_frm_keep_signature_value_array'), 10);
518 add_filter('frm_get_signature_display_value', 'FrmSigAppController::display_signature', 10, 3);
519 add_filter('frmpro_fields_replace_shortcodes', 'FrmSigAppController::custom_display_signature', 10, 4);
520 }
521
522 if (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
523 $esig = isset($field['properties']['esig']) && $field['properties']['esig'] ? true : false;
524 if ($esig) {
525 //process e-signature
526 $value = "";
527 } else {
528
529 if (isset($field['properties']['preg_pattern']) && $field['properties']['preg_pattern'] && isset($field['properties']['preg_replacement']) && $value) {
530 $value = $this->helper->load('convert')->preg_replace($field['properties']['preg_pattern'], $field['properties']['preg_replacement'], $value);
531 }
532
533 preg_match('/src="([^"]*)"/', $value, $matches);
534
535 if (isset($matches[1])) {
536 $value = $matches[1];
537 }
538
539 if (!$this->helper->load('image')->get_image($value)) {
540 $value = $this->strip_shortcodes($value);
541 if (
542 $value &&
543 trim($value) != "" &&
544 extension_loaded('gd') &&
545 function_exists('imagettftext')
546 ) {
547 if (isset($field['properties']['text_color']) && $field['properties']['text_color']) {
548 $penColour = $this->helper->load('convert')->to_hex_color($field['properties']['text_color']);
549 } else {
550 $penColour = array(0x14, 0x53, 0x94);
551 }
552
553 $default_options = array(
554 'imageSize' => array(isset($field['width']) ? $field['width'] : '400', isset($field['height']) ? $field['height'] : '150'),
555 'bgColour' => 'transparent',
556 'penColour' => $penColour
557 );
558
559 $options = array();
560 $options = apply_filters('e2pdf_frm_sig_output_options', $options, $element_id);
561 $options = apply_filters('e2pdf_image_sig_output_options', $options, $element_id, $template_id);
562 $options = array_merge($default_options, $options);
563
564 $model_e2pdf_font = new Model_E2pdf_Font();
565
566 $font = false;
567 if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
568 $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
569 } elseif (class_exists('FrmSigAppHelper')) {
570 if (file_exists(FrmSigAppHelper::plugin_path() . '/assets/journal.ttf')) {
571 $font = FrmSigAppHelper::plugin_path() . '/assets/journal.ttf';
572 }
573 }
574
575 if (!$font) {
576 $font = $model_e2pdf_font->get_font_path('Noto Sans');
577 }
578
579 $size = 150;
580 if (isset($field['properties']['text_font_size']) && $field['properties']['text_font_size']) {
581 $size = $field['properties']['text_font_size'];
582 }
583
584 $model_e2pdf_signature = new Model_E2pdf_Signature();
585 $value = $model_e2pdf_signature->ttf_signature($value, $size, $font, $options);
586 } else {
587 $value = "";
588 }
589 }
590 }
591 } else {
592 if ((false !== strpos($value, '[referer]') || false !== strpos($value, '[browser]')) && isset($entry->description)) {
593 $description = maybe_unserialize($entry->description);
594 $referer = "";
595 if (isset($description['referrer'])) {
596 if (@preg_match('/Referer +\d+\:[ \t]+([^\n\t]+)/', $description['referrer'], $m)) {
597 $referer = $m[1];
598 } else {
599 $referer = $description['referrer'];
600 }
601 }
602
603 $browser = "";
604 if (isset($description['browser'])) {
605 $browser = $description['browser'];
606 }
607
608 $replace = array(
609 'from' => array(
610 '[referer]',
611 '[browser]'
612 ),
613 'to' => array(
614 $referer,
615 $browser
616 )
617 );
618 $value = str_replace($replace['from'], $replace['to'], $value);
619 }
620
621 if (false !== strpos($value, '[entry_num]')) {
622 $entry_num = '';
623 if (class_exists("FrmDb")) {
624 $entry_num = FrmDb::get_count('frm_items', array("form_id = '{$form->id}' AND id <= '{$entry->id}' AND 1" => "1"));
625 }
626
627 $replace = array(
628 'from' => array(
629 '[entry_num]'
630 ),
631 'to' => array(
632 $entry_num
633 )
634 );
635 $value = str_replace($replace['from'], $replace['to'], $value);
636 }
637
638 if (false !== strpos($value, '[pdf_num]')) {
639 $pdf_num = '0';
640 $uid = $this->get('uid');
641 if ($uid) {
642 $entry = new Model_E2pdf_Entry();
643 if ($entry->load_by_uid($uid)) {
644 $pdf_num = $entry->get('pdf_num') + 1;
645 }
646 }
647
648 $replace = array(
649 'from' => array(
650 '[pdf_num]'
651 ),
652 'to' => array(
653 $pdf_num
654 )
655 );
656
657 $value = str_replace($replace['from'], $replace['to'], $value);
658 }
659
660 if (isset($field['properties']['preg_pattern']) && $field['properties']['preg_pattern'] && isset($field['properties']['preg_replacement']) && $value) {
661 $value = $this->helper->load('convert')->preg_replace($field['properties']['preg_pattern'], $field['properties']['preg_replacement'], $value);
662 }
663 }
664 }
665
666 $value = apply_filters('e2pdf_extension_render_shortcodes_value', $value, $element_id, $template_id, $item, $dataset);
667
668 return $value;
669 }
670
671 /**
672 * Strip unused shortcodes
673 *
674 * @param string $value - Content
675 *
676 * @return string - Value with removed unused shortcodes
677 */
678 public function strip_shortcodes($value) {
679 $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', "", $value);
680 return $value;
681 }
682
683 /**
684 * Convert "shortcodes" inside value string
685 *
686 * @param string $value - Value string
687 * @param bool $to - Convert From/To
688 *
689 * @return string - Converted value
690 */
691 public function convert_shortcodes($value, $to = false) {
692 if ($value) {
693 if ($to) {
694 $value = str_replace('&#91;', '[', $value);
695 $value = str_replace('&#93;', ']', $value);
696 } else {
697 $value = str_replace('[', '&#91;', $value);
698 $value = str_replace(']', '&#93;', $value);
699 $value = str_replace('&#091;', '&#91;', $value);
700 $value = str_replace('&#093;', '&#93;', $value);
701 }
702 }
703 return $value;
704 }
705
706 function filter_frm_keep_signature_value_array($keep_array, $atts) {
707 return true;
708 }
709
710 /**
711 * Search and update shortcodes for this extension inside content
712 * Auto set of dataset id
713 *
714 * @param string $content - Content
715 * @param int $form - ID of form
716 * @param int $dataset - ID of dataset
717 *
718 * @return string - Content with updates shortcodes
719 */
720 public function filter_frm_content($content, $form, $dataset) {
721
722 if (false === strpos($content, '[')) {
723 return $content;
724 }
725
726 $shortcode_tags = array(
727 'e2pdf-download',
728 'e2pdf-save',
729 'e2pdf-view',
730 'e2pdf-adobesign'
731 );
732
733 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
734 $tagnames = array_intersect($shortcode_tags, $matches[1]);
735
736 if (!empty($tagnames)) {
737
738 $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
739
740 preg_match_all("/$pattern/", $content, $shortcodes);
741 foreach ($shortcodes[0] as $key => $shortcode_value) {
742
743 $shortcode = array();
744 $shortcode[1] = $shortcodes[1][$key];
745 $shortcode[2] = $shortcodes[2][$key];
746 $shortcode[3] = $shortcodes[3][$key];
747 $shortcode[4] = $shortcodes[4][$key];
748 $shortcode[5] = $shortcodes[5][$key];
749 $shortcode[6] = $shortcodes[6][$key];
750
751 $atts = shortcode_parse_atts($shortcode[3]);
752
753 if (($shortcode[2] === 'e2pdf-save' && isset($atts['attachment']) && $atts['attachment'] == 'true') || $shortcode[2] === 'e2pdf-attachment') {
754
755 } else {
756 if (!isset($atts['dataset']) && isset($atts['id'])) {
757 $template = new Model_E2pdf_Template();
758 $template->load($atts['id']);
759 if ($template->get('extension') === 'formidable') {
760 $entry_id = is_object($dataset) ? $dataset->id : $dataset;
761 if ($entry_id) {
762 $atts['dataset'] = $entry_id;
763 $shortcode[3] .= " dataset=\"{$entry_id}\"";
764 }
765 }
766 }
767
768 if (!isset($atts['apply'])) {
769 $shortcode[3] .= " apply=\"true\"";
770 }
771
772 if (!isset($atts['filter'])) {
773 $shortcode[3] .= " filter=\"true\"";
774 }
775
776 $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
777 }
778 }
779 }
780
781 return $content;
782 }
783
784 public function filter_frm_display_entry_content($content) {
785
786 if (false === strpos($content, '[')) {
787 return $content;
788 }
789
790 $shortcode_tags = array(
791 'e2pdf-download',
792 'e2pdf-save',
793 'e2pdf-view',
794 'e2pdf-adobesign'
795 );
796
797 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
798 $tagnames = array_intersect($shortcode_tags, $matches[1]);
799
800 if (!empty($tagnames)) {
801
802 $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
803
804 preg_match_all("/$pattern/", $content, $shortcodes);
805 foreach ($shortcodes[0] as $key => $shortcode_value) {
806
807 $shortcode = array();
808 $shortcode[1] = $shortcodes[1][$key];
809 $shortcode[2] = $shortcodes[2][$key];
810 $shortcode[3] = $shortcodes[3][$key];
811 $shortcode[4] = $shortcodes[4][$key];
812 $shortcode[5] = $shortcodes[5][$key];
813 $shortcode[6] = $shortcodes[6][$key];
814
815 $atts = shortcode_parse_atts($shortcode[3]);
816
817 if (($shortcode[2] === 'e2pdf-save' && isset($atts['attachment']) && $atts['attachment'] == 'true') || $shortcode[2] === 'e2pdf-attachment') {
818
819 } else {
820
821 if (!isset($atts['apply'])) {
822 $shortcode[3] .= " apply=\"true\"";
823 }
824
825 if (!isset($atts['filter'])) {
826 $shortcode[3] .= " filter=\"true\"";
827 }
828
829 $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
830 }
831 }
832 }
833
834 return $content;
835 }
836
837 /**
838 * Filter for checkbox repeatable Label/Value fix
839 *
840 * @param array $value - Value
841 * @param obj $field - Field
842 * @param array $atts - Shortcode Attributes
843 *
844 * @return mixed - Updated value
845 */
846 public function filter_frm_display_value_custom($value, $field, $atts = array()) {
847 if (class_exists("FrmProEntriesController")) {
848 $defaults = array('html' => 0, 'type' => $field->type, 'keepjs' => 0);
849 $atts = array_merge($defaults, $atts);
850
851 if ($atts['type'] === 'checkbox') {
852 $value = FrmProEntriesController::get_option_label_for_saved_value($value, $field, $atts);
853 }
854 }
855 return $value;
856 }
857
858 /**
859 * Generate attachments according shortcodes in Email template
860 *
861 * @param array $attachments - List of attachments
862 * @param int $form - ID of form
863 * @param array $args - Arguments
864 *
865 * @return array - Updated list of attachments
866 */
867 public function filter_frm_notification_attachment($attachments = array(), $form, $args) {
868
869 if (!isset($args['email_key'])) {
870 return $attachments;
871 }
872
873 $form_actions = FrmFormAction::get_action_for_form($form->id);
874
875 $dataset = $args['entry']->id;
876 $email_key = $args['email_key'];
877
878 $shortcode_tags = array(
879 'e2pdf-attachment',
880 'e2pdf-save'
881 );
882
883 foreach ($form_actions as $key => $action) {
884 if ($action->ID === $email_key) {
885
886 $content = $action->post_content['email_message'];
887
888 if (false === strpos($content, '[')) {
889 return $attachments;
890 }
891
892 remove_filter('frm_content', array($this, 'filter_frm_content'), 30);
893 $content = apply_filters('frm_content', $content, $form, $args['entry']);
894 add_filter('frm_content', array($this, 'filter_frm_content'), 30, 3);
895
896 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
897 $tagnames = array_intersect($shortcode_tags, $matches[1]);
898
899 if (!empty($tagnames)) {
900
901 $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
902
903 preg_match_all("/$pattern/", $content, $shortcodes);
904
905 foreach ($shortcodes[0] as $key => $shortcode_value) {
906
907 $shortcode = array();
908 $shortcode[1] = $shortcodes[1][$key];
909 $shortcode[2] = $shortcodes[2][$key];
910 $shortcode[3] = $shortcodes[3][$key];
911 $shortcode[4] = $shortcodes[4][$key];
912 $shortcode[5] = $shortcodes[5][$key];
913 $shortcode[6] = $shortcodes[6][$key];
914
915 $atts = shortcode_parse_atts($shortcode[3]);
916
917 $file = false;
918
919 if (($shortcode[2] === 'e2pdf-save' && isset($atts['attachment']) && $atts['attachment'] == 'true') || $shortcode[2] === 'e2pdf-attachment') {
920
921 if (!isset($atts['dataset']) && isset($atts['id'])) {
922 $template = new Model_E2pdf_Template();
923 $template->load($atts['id']);
924 if ($template->get('extension') === 'formidable') {
925 $entry_id = is_object($dataset) ? $dataset->id : $dataset;
926 if ($entry_id) {
927 $atts['dataset'] = $entry_id;
928 $shortcode[3] .= " dataset=\"{$entry_id}\"";
929 }
930 }
931 }
932
933 if (!isset($atts['apply'])) {
934 $shortcode[3] .= " apply=\"true\"";
935 }
936
937 if (!isset($atts['filter'])) {
938 $shortcode[3] .= " filter=\"true\"";
939 }
940
941 $file = do_shortcode_tag($shortcode);
942
943 if ($file) {
944 if ($shortcode[2] != 'e2pdf-save' && !isset($atts['pdf'])) {
945 $this->helper->add('formidable_attachments', $file);
946 }
947 $attachments[] = $file;
948 }
949 }
950 }
951 }
952 }
953 }
954 return $attachments;
955 }
956
957 /**
958 * Remove Page Breaks for Visual Mapper
959 *
960 * @param array $fields - List of fields
961 *
962 * @return array - Updated fields
963 */
964 function filter_remove_pagebreaks($fields) {
965 foreach ((array) $fields as $field_key => $field) {
966 if ($field->type == 'break') {
967 unset($fields[$field_key]);
968 }
969 }
970 return $fields;
971 }
972
973 function filter_frm_match_xml_form($edit_query, $form) {
974 if (isset($edit_query['created_at'])) {
975 $edit_query['created_at'] = date('Y-m-d H:i:s', strtotime("now"));
976 }
977 return $edit_query;
978 }
979
980 function filter_frm_show_new_entry_page() {
981 return 'new';
982 }
983
984 /**
985 * Add options for Formidable extension
986 *
987 * @param array $options - List of options
988 *
989 * @return array - Updated options list
990 */
991 public function filter_e2pdf_model_options_get_options_options($options = array()) {
992 $options['formidable_group'] = array(
993 'name' => __('Formidable Forms', 'e2pdf'),
994 'action' => 'extension',
995 'group' => 'formidable_group',
996 'options' => array(
997 array(
998 'name' => __('Auto PDF and Visual Mapper', 'e2pdf'),
999 'key' => 'e2pdf_formidable_use_keys',
1000 'value' => get_option('e2pdf_formidable_use_keys') === false ? '0' : get_option('e2pdf_formidable_use_keys'),
1001 'default_value' => '0',
1002 'type' => 'checkbox',
1003 'checkbox_value' => '1',
1004 'placeholder' => __('Use Field Keys instead Field IDs', 'e2pdf'),
1005 ),
1006 array(
1007 'name' => __('Filter', 'e2pdf'),
1008 'key' => 'e2pdf_formidable_disable_filter',
1009 'value' => get_option('e2pdf_formidable_disable_filter') === false ? '0' : get_option('e2pdf_formidable_disable_filter'),
1010 'default_value' => '0',
1011 'type' => 'checkbox',
1012 'checkbox_value' => '1',
1013 'placeholder' => __('Disable Filter', 'e2pdf'),
1014 ),
1015 )
1016 );
1017 return $options;
1018 }
1019
1020 public function filter_e2pdf_controller_templates_import_options($options) {
1021
1022 if (isset($options['item'])) {
1023 $options['item']['options'][] = array(
1024 'name' => __('Formidable Forms', 'e2pdf'),
1025 'key' => 'options[formidable_item_new_form]',
1026 'value' => 0,
1027 'default_value' => 0,
1028 'type' => 'radio',
1029 'li' => array(
1030 'class' => 'e2pdf-import-extension-option e2pdf-hide',
1031 ),
1032 'options' => array(
1033 'Overwrite Web Form', 'Recreate Web Form'
1034 )
1035 );
1036 }
1037
1038 return $options;
1039 }
1040
1041 public function filter_e2pdf_controller_templates_backup_options($options, $template, $extension) {
1042
1043 if ($extension->loaded('formidable')) {
1044 $options['formidable'] = array(
1045 'name' => __('Formidable', 'e2pdf'),
1046 'options' => array(
1047 array(
1048 'name' => __('Force shortcodes to use', 'e2pdf'),
1049 'key' => 'options[formidable_force_shortcodes]',
1050 'value' => 0,
1051 'default_value' => 0,
1052 'type' => 'select',
1053 'options' => array(
1054 '0' => __('None', 'e2pdf'),
1055 '1' => __('Fields IDs', 'e2pdf'),
1056 '2' => __('Field Keys', 'e2pdf'),
1057 )
1058 ),
1059 )
1060 );
1061 }
1062
1063 return $options;
1064 }
1065
1066 public function filter_e2pdf_controller_templates_backup_pages($pages, $options, $template, $extension) {
1067
1068 if ($extension->loaded('formidable') && (isset($options['formidable_force_shortcodes']) && $options['formidable_force_shortcodes'])) {
1069
1070 $where = array('fi.form_id' => (int) $template->get('item'));
1071 $fields = FrmField::getAll($where, 'id ASC');
1072
1073 $search = array();
1074 $replace = array();
1075
1076 if ($options['formidable_force_shortcodes'] == '1') {
1077 foreach ($fields as $field_key => $field) {
1078 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1079 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1080 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1081
1082 foreach ($sub_fields as $sub_field_key => $sub_field) {
1083 $search[] = $sub_field->field_key;
1084 $replace[] = $sub_field->id;
1085 }
1086 } else {
1087 $search[] = $field->field_key;
1088 $replace[] = $field->id;
1089 }
1090 }
1091 } elseif ($options['formidable_force_shortcodes'] == '2') {
1092 foreach ($fields as $field_key => $field) {
1093
1094 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1095 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1096 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1097
1098 foreach ($sub_fields as $sub_field_key => $sub_field) {
1099 $search[] = $sub_field->id;
1100 $replace[] = $sub_field->field_key;
1101 }
1102 } else {
1103 $search[] = $field->id;
1104 $replace[] = $field->field_key;
1105 }
1106 }
1107 }
1108
1109 $search = array_reverse($search);
1110 $replace = array_reverse($replace);
1111
1112 $list = array_combine($search, $replace);
1113
1114 $pages = $this->pages_replace_shortcodes($pages, $list);
1115 }
1116
1117 return $pages;
1118 }
1119
1120 public function filter_e2pdf_controller_templates_backup_replace_shortcodes($value, $options, $template, $extension) {
1121
1122 if ($extension->loaded('formidable') && (isset($options['formidable_force_shortcodes']) && $options['formidable_force_shortcodes'])) {
1123 $where = array('fi.form_id' => (int) $template->get('item'));
1124 $fields = FrmField::getAll($where, 'id ASC');
1125
1126 $search = array();
1127 $replace = array();
1128
1129 if ($options['formidable_force_shortcodes'] == '1') {
1130 foreach ($fields as $field_key => $field) {
1131 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1132 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1133 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1134
1135 foreach ($sub_fields as $sub_field_key => $sub_field) {
1136 $search[] = $sub_field->field_key;
1137 $replace[] = $sub_field->id;
1138 }
1139 } else {
1140 $search[] = $field->field_key;
1141 $replace[] = $field->id;
1142 }
1143 }
1144 } elseif ($options['formidable_force_shortcodes'] == '2') {
1145 foreach ($fields as $field_key => $field) {
1146
1147 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1148 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1149 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1150
1151 foreach ($sub_fields as $sub_field_key => $sub_field) {
1152 $search[] = $sub_field->id;
1153 $replace[] = $sub_field->field_key;
1154 }
1155 } else {
1156 $search[] = $field->id;
1157 $replace[] = $field->field_key;
1158 }
1159 }
1160 }
1161
1162 $search = array_reverse($search);
1163 $replace = array_reverse($replace);
1164
1165 $list = array_combine($search, $replace);
1166 $value = $this->replace_shortcodes($value, $list);
1167 }
1168
1169 return $value;
1170 }
1171
1172 public function filter_e2pdf_controller_templates_import_pages($pages, $options, $xml, $template, $extension) {
1173
1174 if ($extension->loaded('formidable') &&
1175 $template->get('item') &&
1176 $template->get('item') != (String) $xml->template->item &&
1177 $xml->item->formidable &&
1178 $options['item'] &&
1179 class_exists('FrmXMLHelper') &&
1180 class_exists('FrmField')
1181 ) {
1182
1183 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
1184 file_put_contents($tmp, base64_decode((String) $xml->item->formidable));
1185
1186 $dom = new DOMDocument;
1187 $success = $dom->loadXML(file_get_contents($tmp));
1188
1189 $old_ids = array();
1190 $old_keys = array();
1191
1192 if ($success && function_exists('simplexml_import_dom')) {
1193 $item_xml = simplexml_import_dom($dom);
1194
1195 foreach ($item_xml->form as $form_key => $form) {
1196 if ((String) $form->id == (String) $xml->template->item) {
1197 foreach ($form->field as $field_key => $field) {
1198 $field_options = @json_decode((String) $field->field_options, true);
1199 if (isset($field_options['form_select']) && $field_options['form_select']) {
1200 foreach ($item_xml->form as $sub_form_key => $sub_form) {
1201 if ((String) $sub_form->id == $field_options['form_select']) {
1202 foreach ($sub_form->field as $sub_field_key => $sub_field) {
1203 $old_ids[] = (String) $sub_field->id;
1204 $old_keys[] = (String) $sub_field->field_key;
1205 }
1206 }
1207 }
1208 } else {
1209 $old_ids[] = (String) $field->id;
1210 $old_keys[] = (String) $field->field_key;
1211 }
1212 }
1213 }
1214 }
1215 }
1216
1217 $where = array('fi.form_id' => (int) $template->get('item'));
1218 $fields = FrmField::getAll($where, 'id ASC');
1219
1220 $new_ids = array();
1221 $new_keys = array();
1222
1223 foreach ($fields as $field_key => $field) {
1224
1225 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1226 $sub_where = array('fi.form_id' => (int) $field->field_options['form_select']);
1227 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1228
1229 foreach ($sub_fields as $sub_field_key => $sub_field) {
1230 $new_ids[] = $sub_field->id;
1231 $new_keys[] = $sub_field->field_key;
1232 }
1233 } else {
1234 $new_ids[] = $field->id;
1235 $new_keys[] = $field->field_key;
1236 }
1237 }
1238
1239 if (count($old_ids) === count($new_ids)) {
1240 $old_ids = array_reverse($old_ids);
1241 $new_ids = array_reverse($new_ids);
1242
1243 $old_keys = array_reverse($old_keys);
1244 $new_keys = array_reverse($new_keys);
1245
1246 $list_ids = array_combine($old_ids, $new_ids);
1247 $pages = $this->pages_replace_shortcodes($pages, $list_ids);
1248
1249 $list_keys = array_combine($old_keys, $new_keys);
1250 $pages = $this->pages_replace_shortcodes($pages, $list_keys);
1251 }
1252
1253 unset($dom);
1254 unlink($tmp);
1255 }
1256
1257 return $pages;
1258 }
1259
1260 public function filter_e2pdf_controller_templates_import_replace_shortcodes($value, $options, $xml, $template, $extension) {
1261
1262 if ($extension->loaded('formidable') &&
1263 $template->get('item') &&
1264 $template->get('item') != (String) $xml->template->item &&
1265 $xml->item->formidable &&
1266 $options['item'] &&
1267 class_exists('FrmXMLHelper') &&
1268 class_exists('FrmField')
1269 ) {
1270
1271 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
1272 file_put_contents($tmp, base64_decode((String) $xml->item->formidable));
1273
1274 $dom = new DOMDocument;
1275 $success = $dom->loadXML(file_get_contents($tmp));
1276
1277 $old_ids = array();
1278 $old_keys = array();
1279
1280 if ($success && function_exists('simplexml_import_dom')) {
1281 $item_xml = simplexml_import_dom($dom);
1282
1283 foreach ($item_xml->form as $form_key => $form) {
1284 if ((String) $form->id == (String) $xml->template->item) {
1285 foreach ($form->field as $field_key => $field) {
1286 $field_options = @json_decode((String) $field->field_options, true);
1287 if (isset($field_options['form_select']) && $field_options['form_select']) {
1288 foreach ($item_xml->form as $sub_form_key => $sub_form) {
1289 if ((String) $sub_form->id == $field_options['form_select']) {
1290 foreach ($sub_form->field as $sub_field_key => $sub_field) {
1291 $old_ids[] = (String) $sub_field->id;
1292 $old_keys[] = (String) $sub_field->field_key;
1293 }
1294 }
1295 }
1296 } else {
1297 $old_ids[] = (String) $field->id;
1298 $old_keys[] = (String) $field->field_key;
1299 }
1300 }
1301 }
1302 }
1303 }
1304
1305 $where = array('fi.form_id' => (int) $template->get('item'));
1306 $fields = FrmField::getAll($where, 'id ASC');
1307
1308 $new_ids = array();
1309 $new_keys = array();
1310
1311 foreach ($fields as $field_key => $field) {
1312
1313 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1314 $sub_where = array('fi.form_id' => (int) $field->field_options['form_select']);
1315 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1316
1317 foreach ($sub_fields as $sub_field_key => $sub_field) {
1318 $new_ids[] = $sub_field->id;
1319 $new_keys[] = $sub_field->field_key;
1320 }
1321 } else {
1322 $new_ids[] = $field->id;
1323 $new_keys[] = $field->field_key;
1324 }
1325 }
1326
1327 if (count($old_ids) === count($new_ids)) {
1328
1329 $old_ids = array_reverse($old_ids);
1330 $new_ids = array_reverse($new_ids);
1331
1332 $old_keys = array_reverse($old_keys);
1333 $new_keys = array_reverse($new_keys);
1334
1335 $list_ids = array_combine($old_ids, $new_ids);
1336 $value = $this->replace_shortcodes($value, $list_ids);
1337
1338 $list_keys = array_combine($old_keys, $new_keys);
1339 $value = $this->replace_shortcodes($value, $list_keys);
1340 }
1341
1342 unset($dom);
1343 unlink($tmp);
1344 }
1345
1346 return $value;
1347 }
1348
1349 /**
1350 * Delete attachments that were sent by email
1351 */
1352 public function action_frm_notification() {
1353
1354 $files = $this->helper->get('formidable_attachments');
1355 if (is_array($files) && !empty($files)) {
1356 foreach ($files as $key => $file) {
1357 $this->helper->delete_dir(dirname($file) . '/');
1358 }
1359 $this->helper->deset('formidable_attachments');
1360 }
1361 }
1362
1363 /**
1364 * Fix for user_id shortcode
1365 *
1366 * @param object $template - Current Template
1367 * @param object $extension - Loaded extension
1368 *
1369 */
1370 public function action_e2pdf_model_template_fill_pre($template, $extension) {
1371 if ($extension->loaded("formidable")) {
1372 if ($extension->get('dataset') && class_exists("FrmEntry") && is_admin()) {
1373 $extension->set('user_id', get_current_user_id());
1374 $entry = FrmEntry::getOne($extension->get('dataset'));
1375 if ($entry) {
1376 set_current_user($entry->user_id);
1377 }
1378 }
1379 }
1380 }
1381
1382 /**
1383 * Revert Fix for user_id shortcode
1384 *
1385 * @param object $template - Current Template
1386 * @param object $extension - Loaded extension
1387 *
1388 */
1389 public function action_e2pdf_model_template_fill_after($template, $extension) {
1390 if ($extension->loaded("formidable")) {
1391 if ($extension->get('dataset') && class_exists("FrmEntry") && is_admin()) {
1392 set_current_user($extension->get('user_id'));
1393 }
1394 }
1395 }
1396
1397 /**
1398 * Auto Generate of Template for this extension
1399 *
1400 * @return array - List of elements
1401 */
1402 public function auto() {
1403
1404 $response = array();
1405 $elements = array();
1406
1407 $form_id = $this->get('item');
1408
1409 $fields = array();
1410
1411 if (class_exists('FrmField')) {
1412 $fields = FrmField::get_all_for_form($form_id);
1413 }
1414
1415 if ($fields) {
1416 foreach ($fields as $key => $field) {
1417
1418 $field_id = get_option('e2pdf_formidable_use_keys') ? $field->field_key : $field->id;
1419
1420 if ($field->type === 'lookup' || $field->type === 'data') {
1421
1422 $dynamic_field_id = false;
1423 $dynamic_form_id = false;
1424
1425 if ($field->type === 'lookup' && isset($field->field_options['get_values_field']) && isset($field->field_options['get_values_form'])) {
1426
1427 $dynamic_form_id = $field->field_options['get_values_form'];
1428 $dynamic_field_id = $field->field_options['get_values_field'];
1429
1430 if (get_option('e2pdf_formidable_use_keys')) {
1431 $dynamic_field_data = FrmField::getOne($dynamic_field_id);
1432
1433 if ($dynamic_field_data) {
1434 $dynamic_field_id = $dynamic_field_data->field_key;
1435 }
1436 }
1437 } elseif ($field->type === 'data' && isset($field->field_options['form_select']) && $field->field_options['form_select'] !== 'taxonomy' && class_exists('FrmField')) {
1438
1439 $dynamic_field_id = $field->field_options['form_select'];
1440 $dynamic_field_data = FrmField::getOne($dynamic_field_id);
1441
1442 if ($dynamic_field_data) {
1443 $dynamic_form_id = $dynamic_field_data->form_id;
1444
1445 if (get_option('e2pdf_formidable_use_keys')) {
1446 $dynamic_field_id = $dynamic_field_data->field_key;
1447 }
1448 }
1449 }
1450
1451 $field->type = $field->field_options['data_type'];
1452 if ($dynamic_field_id && $dynamic_form_id) {
1453 if ($field->field_options['data_type'] == 'select') {
1454
1455 $field->options = array(
1456 '[e2pdf-frm-entry-values id="' . $dynamic_form_id . '" field_id="' . $dynamic_field_id . '"]'
1457 );
1458 } elseif ($field->field_options['data_type'] == 'radio' || $field->field_options['data_type'] == 'checkbox') {
1459
1460 $options = array();
1461
1462 if (class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
1463 $where = array(
1464 'it.form_id' => $dynamic_form_id
1465 );
1466
1467 $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
1468 foreach ($entries_tmp as $key => $entry) {
1469 $options[] = FrmEntryMeta::get_meta_value($entry, $dynamic_field_id);
1470 }
1471 }
1472 $field->options = $options;
1473 }
1474 }
1475 }
1476
1477 /*
1478 * Repeatable fields Field ID modification
1479 * @since 0.01.42
1480 */
1481 if ($field->type !== 'lookup' && $field->type !== 'data' && isset($field->form_id) && $field->form_id != $form_id) {
1482 $field_id = $field_id . ":1";
1483 }
1484
1485 switch ($field->type) {
1486 case 'html':
1487 if ($field->description) {
1488 $elements[] = $this->auto_field($field, array(
1489 'type' => 'e2pdf-html',
1490 'block' => true,
1491 'properties' => array(
1492 'top' => '20',
1493 'left' => '20',
1494 'right' => '20',
1495 'width' => '100%',
1496 'height' => 'auto',
1497 'value' => $field->description,
1498 )
1499 ));
1500 }
1501 break;
1502 case 'signature':
1503 $elements[] = $this->auto_field($field, array(
1504 'type' => 'e2pdf-html',
1505 'block' => true,
1506 'properties' => array(
1507 'top' => '20',
1508 'left' => '20',
1509 'right' => '20',
1510 'width' => '100%',
1511 'height' => 'auto',
1512 'value' => $field->name,
1513 )
1514 ));
1515
1516 $elements[] = $this->auto_field($field, array(
1517 'type' => 'e2pdf-signature',
1518 'properties' => array(
1519 'top' => '5',
1520 'width' => '100%',
1521 'height' => '150',
1522 'scale' => '1',
1523 'dimension' => '1',
1524 'value' => "[$field_id]"
1525 )
1526 ));
1527 break;
1528 case 'scale':
1529 $elements[] = $this->auto_field($field, array(
1530 'type' => 'e2pdf-html',
1531 'block' => true,
1532 'properties' => array(
1533 'top' => '20',
1534 'left' => '20',
1535 'right' => '20',
1536 'width' => '100%',
1537 'height' => 'auto',
1538 'value' => $field->name,
1539 )
1540 ));
1541
1542 if (isset($field->options) && is_array($field->options)) {
1543 $start = true;
1544 foreach ($field->options as $opt_key => $option) {
1545 if (is_array($option)) {
1546 $elements[] = $this->auto_field($field, array(
1547 'type' => 'e2pdf-radio',
1548 'float' => $start ? false : true,
1549 'properties' => array(
1550 'top' => $start ? '5' : '0',
1551 'left' => $start ? '0' : '5',
1552 'width' => 'auto',
1553 'height' => 'auto',
1554 'value' => "[$field_id]",
1555 'option' => $option['value'],
1556 'group' => "group_" . $field_id
1557 )
1558 ));
1559 } else {
1560 $elements[] = $this->auto_field($field, array(
1561 'type' => 'e2pdf-radio',
1562 'float' => $start ? false : true,
1563 'properties' => array(
1564 'top' => $start ? '5' : '0',
1565 'left' => $start ? '0' : '5',
1566 'width' => 'auto',
1567 'height' => 'auto',
1568 'value' => "[$field_id]",
1569 'option' => $option,
1570 'group' => "group_" . $field_id
1571 )
1572 ));
1573 }
1574
1575 $start = false;
1576 }
1577
1578 $start = true;
1579 foreach ($field->options as $opt_key => $option) {
1580 if (is_array($option)) {
1581
1582 $elements[] = $this->auto_field($field, array(
1583 'type' => 'e2pdf-html',
1584 'float' => $start ? false : true,
1585 'properties' => array(
1586 'top' => $start ? '5' : '0',
1587 'left' => $start ? '0' : '5',
1588 'width' => 'auto',
1589 'height' => 'auto',
1590 'value' => $option['label'],
1591 'text_align' => 'center',
1592 )
1593 ));
1594 } else {
1595 $elements[] = $this->auto_field($field, array(
1596 'type' => 'e2pdf-html',
1597 'float' => $start ? false : true,
1598 'properties' => array(
1599 'top' => $start ? '5' : '0',
1600 'left' => $start ? '0' : '5',
1601 'width' => 'auto',
1602 'height' => 'auto',
1603 'value' => $option,
1604 'text_align' => 'center',
1605 )
1606 ));
1607 }
1608 $start = false;
1609 }
1610 }
1611 break;
1612 case 'rte':
1613 $elements[] = $this->auto_field($field, array(
1614 'type' => 'e2pdf-html',
1615 'block' => true,
1616 'properties' => array(
1617 'top' => '20',
1618 'left' => '20',
1619 'right' => '20',
1620 'width' => '100%',
1621 'height' => 'auto',
1622 'value' => $field->name,
1623 )
1624 ));
1625
1626 $elements[] = $this->auto_field($field, array(
1627 'type' => 'e2pdf-html',
1628 'properties' => array(
1629 'top' => '5',
1630 'width' => '100%',
1631 'height' => '150',
1632 'value' => "[$field_id wpautop=0]"
1633 )
1634 ));
1635 break;
1636 case 'file':
1637 case 'text':
1638 case 'email':
1639 case 'url':
1640 case 'number':
1641 case 'phone':
1642 case 'date':
1643 case 'image':
1644 case 'tag':
1645 case 'password':
1646 case 'quiz_score':
1647 $elements[] = $this->auto_field($field, array(
1648 'type' => 'e2pdf-html',
1649 'block' => true,
1650 'properties' => array(
1651 'top' => '20',
1652 'left' => '20',
1653 'right' => '20',
1654 'width' => '100%',
1655 'height' => 'auto',
1656 'value' => $field->name,
1657 )
1658 ));
1659
1660 if ($field->type == 'file') {
1661 if (strpos($field_id, ':') !== false) {
1662 $field_id .= ' size="full" show_image="0" add_link="0"';
1663 } else {
1664 $field_id .= ' size="full"';
1665 }
1666 }
1667
1668 $elements[] = $this->auto_field($field, array(
1669 'type' => 'e2pdf-input',
1670 'properties' => array(
1671 'top' => '5',
1672 'width' => '100%',
1673 'height' => 'auto',
1674 'value' => "[$field_id]",
1675 'pass' => $field->type === 'password' ? '1' : '0',
1676 )
1677 ));
1678 break;
1679
1680 case 'time':
1681 $elements[] = $this->auto_field($field, array(
1682 'type' => 'e2pdf-html',
1683 'block' => true,
1684 'properties' => array(
1685 'top' => '20',
1686 'left' => '20',
1687 'right' => '20',
1688 'width' => '100%',
1689 'height' => 'auto',
1690 'value' => $field->name,
1691 )
1692 ));
1693
1694
1695 $options_tmp = array();
1696 if (class_exists("FrmProFieldTime")) {
1697 $frm_pro_field_time = new FrmProFieldTime($field);
1698 $options_tmp = $frm_pro_field_time->get_options($field->field_options);
1699 }
1700
1701 if (isset($field->field_options['single_time']) && $field->field_options['single_time']) {
1702 $elements[] = $this->auto_field($field, array(
1703 'type' => 'e2pdf-select',
1704 'properties' => array(
1705 'top' => '5',
1706 'width' => '100%',
1707 'height' => 'auto',
1708 'options' => implode("\n", $options_tmp),
1709 'value' => "[$field_id]",
1710 )
1711 ));
1712 } else {
1713
1714 $options_h = isset($options_tmp['H']) && is_array($options_tmp['H']) ? $options_tmp['H'] : array();
1715 $options_m = isset($options_tmp['m']) && is_array($options_tmp['m']) ? $options_tmp['m'] : array();
1716 $options_a = isset($options_tmp['A']) && is_array($options_tmp['A']) ? $options_tmp['A'] : array();
1717
1718 $elements[] = $this->auto_field($field, array(
1719 'type' => 'e2pdf-select',
1720 'float' => true,
1721 'properties' => array(
1722 'top' => '5',
1723 'width' => isset($field->field_options['clock']) && $field->field_options['clock'] == '12' ? '33.3%' : '50%',
1724 'height' => 'auto',
1725 'options' => implode("\n", $options_h),
1726 'value' => isset($field->field_options['clock']) && $field->field_options['clock'] == '12' ? "[$field_id format=\"g\"]" : "[$field_id format=\"H\"]",
1727 )
1728 ));
1729
1730 $elements[] = $this->auto_field($field, array(
1731 'type' => 'e2pdf-select',
1732 'float' => true,
1733 'properties' => array(
1734 'top' => '5',
1735 'left' => '20',
1736 'width' => isset($field->field_options['clock']) && $field->field_options['clock'] == '12' ? '33.3%' : '50%',
1737 'height' => 'auto',
1738 'options' => implode("\n", $options_m),
1739 'value' => "[$field_id format=\"i\"]",
1740 )
1741 ));
1742
1743 if (isset($field->field_options['clock']) && $field->field_options['clock'] == '12') {
1744 $elements[] = $this->auto_field($field, array(
1745 'type' => 'e2pdf-select',
1746 'float' => true,
1747 'properties' => array(
1748 'top' => '5',
1749 'left' => '20',
1750 'width' => '33.3%',
1751 'height' => 'auto',
1752 'options' => implode("\n", $options_a),
1753 'value' => "[$field_id format=\"A\"]",
1754 )
1755 ));
1756 }
1757 }
1758 break;
1759 case 'select':
1760 $elements[] = $this->auto_field($field, array(
1761 'type' => 'e2pdf-html',
1762 'block' => true,
1763 'properties' => array(
1764 'top' => '20',
1765 'left' => '20',
1766 'right' => '20',
1767 'width' => '100%',
1768 'height' => 'auto',
1769 'value' => $field->name,
1770 )
1771 ));
1772
1773 $options_tmp = array();
1774 if (isset($field->options) && is_array($field->options)) {
1775 foreach ($field->options as $opt_key => $option) {
1776 if (is_array($option)) {
1777 $options_tmp[] = isset($option['label']) ? $option['label'] : $option['value'];
1778 } else {
1779 $options_tmp[] = $option;
1780 }
1781 }
1782 }
1783
1784 $elements[] = $this->auto_field($field, array(
1785 'type' => 'e2pdf-select',
1786 'properties' => array(
1787 'top' => '5',
1788 'width' => '100%',
1789 'height' => 'auto',
1790 'options' => implode("\n", $options_tmp),
1791 'value' => "[$field_id]",
1792 'height' => isset($field->field_options['multiple']) && $field->field_options['multiple'] ? '80' : 'auto',
1793 'multiline' => isset($field->field_options['multiple']) && $field->field_options['multiple'] ? '1' : '0',
1794 )
1795 ));
1796 break;
1797 case 'credit_card':
1798
1799 //parent block
1800 $elements[] = $this->auto_field($field, array(
1801 'type' => 'e2pdf-html',
1802 'block' => true,
1803 'properties' => array(
1804 'top' => '20',
1805 'left' => '20',
1806 'right' => '20',
1807 'width' => '100%',
1808 'height' => 'auto',
1809 'value' => $field->name,
1810 )
1811 ));
1812
1813
1814 $elements[] = $this->auto_field($field, array(
1815 'type' => 'e2pdf-input',
1816 'properties' => array(
1817 'top' => '5',
1818 'width' => '100%',
1819 'height' => 'auto',
1820 'value' => '[' . $field_id . ' show="cc"]',
1821 )
1822 ));
1823
1824 //month
1825 $elements[] = $this->auto_field($field, array(
1826 'type' => 'e2pdf-select',
1827 'properties' => array(
1828 'top' => '5',
1829 'width' => '33.3%',
1830 'left' => '0',
1831 'height' => 'auto',
1832 'options' => implode("\n", range(1, 12)),
1833 'value' => '[' . $field_id . ' show="month"]',
1834 )
1835 ));
1836
1837 //year
1838 $elements[] = $this->auto_field($field, array(
1839 'type' => 'e2pdf-select',
1840 'float' => true,
1841 'properties' => array(
1842 'top' => '5',
1843 'left' => '20',
1844 'width' => '33.3%',
1845 'height' => 'auto',
1846 'options' => implode("\n", range(date('Y'), date('Y') + 10)),
1847 'value' => '[' . $field_id . ' show="year"]',
1848 )
1849 ));
1850
1851 //cvc
1852 $elements[] = $this->auto_field($field, array(
1853 'type' => 'e2pdf-input',
1854 'float' => true,
1855 'properties' => array(
1856 'top' => '5',
1857 'left' => '20',
1858 'width' => '33.3%',
1859 'height' => 'auto',
1860 'value' => '[' . $field_id . ' show="cvc"]',
1861 )
1862 ));
1863 break;
1864 case 'address':
1865 //parent block
1866 $elements[] = $this->auto_field($field, array(
1867 'type' => 'e2pdf-html',
1868 'block' => true,
1869 'properties' => array(
1870 'top' => '20',
1871 'left' => '20',
1872 'right' => '20',
1873 'width' => '100%',
1874 'height' => 'auto',
1875 'value' => $field->name,
1876 )
1877 ));
1878
1879 //line1
1880 if (isset($field->field_options['line1_desc']) && $field->field_options['line1_desc']) {
1881 $elements[] = $this->auto_field($field, array(
1882 'type' => 'e2pdf-html',
1883 'properties' => array(
1884 'top' => '5',
1885 'width' => '100%',
1886 'height' => 'auto',
1887 'value' => $field->field_options['line1_desc'],
1888 )
1889 ));
1890 }
1891
1892 $elements[] = $this->auto_field($field, array(
1893 'type' => 'e2pdf-input',
1894 'properties' => array(
1895 'top' => '5',
1896 'width' => '100%',
1897 'height' => 'auto',
1898 'value' => '[' . $field_id . ' show="line1"]',
1899 )
1900 ));
1901
1902 //line 2
1903 if (isset($field->field_options['line2_desc']) && $field->field_options['line2_desc']) {
1904 $elements[] = $this->auto_field($field, array(
1905 'type' => 'e2pdf-html',
1906 'properties' => array(
1907 'top' => '5',
1908 'width' => '100%',
1909 'height' => 'auto',
1910 'value' => $field->field_options['line2_desc'],
1911 )
1912 ));
1913 }
1914
1915 $elements[] = $this->auto_field($field, array(
1916 'type' => 'e2pdf-input',
1917 'properties' => array(
1918 'top' => '5',
1919 'width' => '100%',
1920 'height' => 'auto',
1921 'value' => '[' . $field_id . ' show="line2"]',
1922 )
1923 ));
1924
1925 //labels
1926 if (
1927 (isset($field->field_options['city_desc']) && $field->field_options['city_desc']) ||
1928 (isset($field->field_options['state_desc']) && $field->field_options['state_desc'] && isset($field->field_options['address_type']) && $field->field_options['address_type'] != 'europe') ||
1929 (isset($field->field_options['zip_desc']) && $field->field_options['zip_desc'])
1930 ) {
1931
1932 $float = false;
1933 //city label
1934 if (isset($field->field_options['address_type']) && $field->field_options['address_type'] != 'europe') {
1935 $elements[] = $this->auto_field($field, array(
1936 'type' => 'e2pdf-html',
1937 'float' => $float,
1938 'properties' => array(
1939 'top' => '5',
1940 'left' => $float ? '20' : '0',
1941 'width' => '33.3%',
1942 'height' => 'auto',
1943 'value' => isset($field->field_options['city_desc']) && $field->field_options['city_desc'] ? $field->field_options['city_desc'] : '',
1944 )
1945 ));
1946 $float = true;
1947 }
1948
1949 //state label
1950 if (isset($field->field_options['address_type']) && (
1951 $field->field_options['address_type'] == 'international' ||
1952 $field->field_options['address_type'] == 'us' ||
1953 $field->field_options['address_type'] == 'generic'
1954 )
1955 ) {
1956
1957 $elements[] = $this->auto_field($field, array(
1958 'type' => 'e2pdf-html',
1959 'float' => $float,
1960 'properties' => array(
1961 'top' => '5',
1962 'left' => $float ? '20' : '0',
1963 'width' => '33.3%',
1964 'height' => 'auto',
1965 'value' => isset($field->field_options['state_desc']) && $field->field_options['state_desc'] ? $field->field_options['state_desc'] : '',
1966 )
1967 ));
1968 $float = true;
1969 }
1970
1971 //zip label
1972 $elements[] = $this->auto_field($field, array(
1973 'type' => 'e2pdf-html',
1974 'float' => $float,
1975 'properties' => array(
1976 'top' => '5',
1977 'left' => $float ? '20' : '0',
1978 'width' => '33.3%',
1979 'height' => 'auto',
1980 'value' => isset($field->field_options['zip_desc']) && $field->field_options['zip_desc'] ? $field->field_options['zip_desc'] : '',
1981 )
1982 ));
1983 $float = true;
1984
1985 //city label for Europe
1986 if (isset($field->field_options['address_type']) && $field->field_options['address_type'] == 'europe') {
1987
1988 $elements[] = $this->auto_field($field, array(
1989 'type' => 'e2pdf-html',
1990 'float' => $float,
1991 'properties' => array(
1992 'top' => '5',
1993 'left' => $float ? '20' : '0',
1994 'width' => '33.3%',
1995 'height' => 'auto',
1996 'value' => isset($field->field_options['city_desc']) && $field->field_options['city_desc'] ? $field->field_options['city_desc'] : '',
1997 )
1998 ));
1999 }
2000 }
2001
2002
2003 //fields
2004 $float = false;
2005 //city field
2006 if (isset($field->field_options['address_type']) && $field->field_options['address_type'] != 'europe') {
2007 $elements[] = $this->auto_field($field, array(
2008 'type' => 'e2pdf-input',
2009 'float' => $float,
2010 'properties' => array(
2011 'top' => '5',
2012 'left' => $float ? '20' : '0',
2013 'width' => '33.3%',
2014 'height' => 'auto',
2015 'value' => '[' . $field_id . ' show="city"]',
2016 )
2017 ));
2018 $float = true;
2019 }
2020
2021 //state field
2022 if (isset($field->field_options['address_type']) && (
2023 $field->field_options['address_type'] == 'international' ||
2024 $field->field_options['address_type'] == 'us' ||
2025 $field->field_options['address_type'] == 'generic'
2026 )
2027 ) {
2028 if ($field->field_options['address_type'] == 'us') {
2029 $options_tmp = array();
2030 if (class_exists('FrmFieldsHelper')) {
2031 $options_tmp = array_values(FrmFieldsHelper::get_us_states());
2032 }
2033
2034 $elements[] = $this->auto_field($field, array(
2035 'type' => 'e2pdf-select',
2036 'float' => $float,
2037 'properties' => array(
2038 'top' => '5',
2039 'left' => $float ? '20' : '0',
2040 'width' => '33.3%',
2041 'height' => 'auto',
2042 'options' => implode("\n", $options_tmp),
2043 'value' => '[' . $field_id . ' show="state"]',
2044 )
2045 ));
2046 } else {
2047 $elements[] = $this->auto_field($field, array(
2048 'type' => 'e2pdf-input',
2049 'float' => $float,
2050 'properties' => array(
2051 'top' => '5',
2052 'left' => $float ? '20' : '0',
2053 'width' => '33.3%',
2054 'height' => 'auto',
2055 'value' => '[' . $field_id . ' show="state"]',
2056 )
2057 ));
2058 }
2059 $float = true;
2060 }
2061
2062 //zip field
2063 $elements[] = $this->auto_field($field, array(
2064 'type' => 'e2pdf-input',
2065 'float' => $float,
2066 'properties' => array(
2067 'top' => '5',
2068 'left' => $float ? '20' : '0',
2069 'width' => '33.3%',
2070 'height' => 'auto',
2071 'value' => '[' . $field_id . ' show="zip"]',
2072 )
2073 ));
2074 $float = true;
2075
2076 //city field for Europe
2077 if (isset($field->field_options['address_type']) && $field->field_options['address_type'] == 'europe') {
2078 $elements[] = $this->auto_field($field, array(
2079 'type' => 'e2pdf-input',
2080 'float' => $float,
2081 'properties' => array(
2082 'top' => '5',
2083 'left' => $float ? '20' : '0',
2084 'width' => '33.3%',
2085 'height' => 'auto',
2086 'value' => '[' . $field_id . ' show="city"]',
2087 )
2088 ));
2089 }
2090
2091 //country
2092 if (isset($field->field_options['address_type']) && ($field->field_options['address_type'] == 'international' || $field->field_options['address_type'] == 'europe')) {
2093 if (isset($field->field_options['country_desc']) && $field->field_options['country_desc']) {
2094 $elements[] = $this->auto_field($field, array(
2095 'type' => 'e2pdf-html',
2096 'properties' => array(
2097 'top' => '5',
2098 'width' => '100%',
2099 'height' => 'auto',
2100 'value' => $field->field_options['country_desc'],
2101 )
2102 ));
2103 }
2104
2105 $options_tmp = array();
2106 if (class_exists('FrmFieldsHelper')) {
2107 $options_tmp = array_values(FrmFieldsHelper::get_countries());
2108 }
2109
2110 $elements[] = $this->auto_field($field, array(
2111 'type' => 'e2pdf-select',
2112 'properties' => array(
2113 'top' => '5',
2114 'width' => '100%',
2115 'height' => 'auto',
2116 'options' => implode("\n", $options_tmp),
2117 'value' => '[' . $field_id . ' show="country"]',
2118 )
2119 ));
2120 }
2121 break;
2122 case 'textarea':
2123 $elements[] = $this->auto_field($field, array(
2124 'type' => 'e2pdf-html',
2125 'block' => true,
2126 'properties' => array(
2127 'top' => '20',
2128 'left' => '20',
2129 'right' => '20',
2130 'width' => '100%',
2131 'height' => 'auto',
2132 'value' => $field->name,
2133 )
2134 ));
2135
2136 $elements[] = $this->auto_field($field, array(
2137 'type' => 'e2pdf-textarea',
2138 'properties' => array(
2139 'top' => '5',
2140 'width' => '100%',
2141 'height' => '150',
2142 'value' => "[$field_id wpautop=0]",
2143 )
2144 ));
2145 break;
2146 case 'radio':
2147 $elements[] = $this->auto_field($field, 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 if (isset($field->options) && is_array($field->options)) {
2161
2162 foreach ($field->options as $opt_key => $option) {
2163 if (is_array($option)) {
2164 $elements[] = $this->auto_field($field, array(
2165 'type' => 'e2pdf-radio',
2166 'properties' => array(
2167 'top' => '5',
2168 'width' => 'auto',
2169 'height' => 'auto',
2170 'value' => "[$field_id]",
2171 'option' => $option['label'],
2172 'group' => "[$field_id]",
2173 )
2174 ));
2175 $elements[] = $this->auto_field($field, array(
2176 'type' => 'e2pdf-html',
2177 'float' => true,
2178 'properties' => array(
2179 'left' => '5',
2180 'width' => '100%',
2181 'height' => 'auto',
2182 'value' => $option['label']
2183 )
2184 ));
2185 } else {
2186
2187 $elements[] = $this->auto_field($field, array(
2188 'type' => 'e2pdf-radio',
2189 'properties' => array(
2190 'top' => '5',
2191 'width' => 'auto',
2192 'height' => 'auto',
2193 'value' => "[$field_id]",
2194 'option' => $option,
2195 'group' => "[$field_id]",
2196 )
2197 ));
2198 $elements[] = $this->auto_field($field, array(
2199 'type' => 'e2pdf-html',
2200 'float' => true,
2201 'properties' => array(
2202 'left' => '5',
2203 'width' => '100%',
2204 'height' => 'auto',
2205 'value' => $option
2206 )
2207 ));
2208 }
2209 }
2210 }
2211 break;
2212 case 'checkbox':
2213 $elements[] = $this->auto_field($field, array(
2214 'type' => 'e2pdf-html',
2215 'block' => true,
2216 'properties' => array(
2217 'top' => '20',
2218 'left' => '20',
2219 'right' => '20',
2220 'width' => '100%',
2221 'height' => 'auto',
2222 'value' => $field->name,
2223 )
2224 ));
2225
2226 if (isset($field->options) && is_array($field->options)) {
2227 foreach ($field->options as $opt_key => $option) {
2228 if (is_array($option)) {
2229 $elements[] = $this->auto_field($field, array(
2230 'type' => 'e2pdf-checkbox',
2231 'properties' => array(
2232 'top' => '5',
2233 'width' => 'auto',
2234 'height' => 'auto',
2235 'value' => "[$field_id]",
2236 'option' => $option['label']
2237 )
2238 ));
2239 $elements[] = $this->auto_field($field, array(
2240 'type' => 'e2pdf-html',
2241 'float' => true,
2242 'properties' => array(
2243 'left' => '5',
2244 'width' => '100%',
2245 'height' => 'auto',
2246 'value' => $option['label']
2247 )
2248 ));
2249 } else {
2250 $elements[] = $this->auto_field($field, array(
2251 'type' => 'e2pdf-checkbox',
2252 'properties' => array(
2253 'top' => '5',
2254 'width' => 'auto',
2255 'height' => 'auto',
2256 'value' => "[$field_id]",
2257 'option' => $option
2258 )
2259 ));
2260 $elements[] = $this->auto_field($field, array(
2261 'type' => 'e2pdf-html',
2262 'float' => true,
2263 'properties' => array(
2264 'left' => '5',
2265 'width' => '100%',
2266 'height' => 'auto',
2267 'value' => $option
2268 )
2269 ));
2270 }
2271 }
2272 }
2273 break;
2274 default:
2275 break;
2276 }
2277 }
2278 }
2279
2280 $response['page'] = array(
2281 'bottom' => '20',
2282 'top' => '20',
2283 'right' => '20',
2284 'left' => '20'
2285 );
2286
2287 $response['elements'] = $elements;
2288 return $response;
2289 }
2290
2291 /**
2292 * Generate field for Auto PDF
2293 *
2294 * @param object $field - Formidable field object
2295 * @param string $type - Field type
2296 * @param array $options - Field additional options
2297 *
2298 * @return array - Prepared auto field
2299 */
2300 public function auto_field($field = false, $element = array()) {
2301
2302 if (!$field) {
2303 return false;
2304 }
2305
2306 if (!isset($element['block'])) {
2307 $element['block'] = false;
2308 }
2309
2310 if (!isset($element['float'])) {
2311 $element['float'] = false;
2312 }
2313
2314 $classes = array();
2315 if (isset($field->field_options['classes'])) {
2316 $classes = explode(" ", $field->field_options['classes']);
2317 }
2318
2319 $float_classes = array(
2320 'frm_half',
2321 'frm_third',
2322 'frm_two_thirds',
2323 'frm_fourth',
2324 'frm_three_fourths',
2325 'frm_fifth',
2326 'frm_two_fifths',
2327 'frm_sixth',
2328 'frm_seventh',
2329 'frm_eighth'
2330 );
2331
2332 $array_intersect = array_intersect($classes, $float_classes);
2333
2334 if (!empty($array_intersect) && !in_array('frm_first', $classes) && isset($element['block']) && $element['block']) {
2335 $element['float'] = true;
2336 };
2337
2338 $primary_class = false;
2339 if (!empty($array_intersect)) {
2340 $primary_class = end($array_intersect);
2341 }
2342
2343 if (isset($element['block']) && $element['block']) {
2344 switch ($primary_class) {
2345 case 'frm_half':
2346 $element['properties']['width'] = '50%';
2347 break;
2348 case 'frm_third':
2349 $element['properties']['width'] = '33.3%';
2350 break;
2351 case 'frm_two_thirds':
2352 $element['properties']['width'] = '66.67%';
2353 break;
2354 case 'frm_fourth':
2355 $element['properties']['width'] = '25%';
2356 break;
2357 case 'frm_three_fourths':
2358 $element['properties']['width'] = '75%';
2359 break;
2360 case 'frm_fifth':
2361 $element['properties']['width'] = '20%';
2362 break;
2363 case 'frm_two_fifths':
2364 $element['properties']['width'] = '80%';
2365 break;
2366 case 'frm_sixth':
2367 $element['properties']['width'] = '16.67%';
2368 break;
2369 case 'frm_seventh':
2370 $element['properties']['width'] = '14.29%';
2371 break;
2372 case 'frm_eighth':
2373 $element['properties']['width'] = '12.5%';
2374 break;
2375 default:
2376 break;
2377 }
2378 }
2379
2380 return $element;
2381 }
2382
2383 /**
2384 * Backup form action
2385 *
2386 * @param object xml - XML object where to add params for saved item
2387 */
2388 public function backup($xml = false) {
2389 if (class_exists('FrmXMLController')) {
2390
2391 $ids = array();
2392 $ids[] = $this->get('item');
2393
2394 $type = array();
2395 $type[] = 'forms';
2396
2397 ob_start();
2398 FrmXMLController::generate_xml($type, compact('ids'));
2399 $backup = ob_get_clean();
2400 $xml->addChildCData('formidable', base64_encode($backup));
2401 }
2402 }
2403
2404 /**
2405 * Import form action
2406 *
2407 * @param object xml - XML object to parse data to import form
2408 */
2409 public function import($xml, $item, $options = array()) {
2410
2411 $updated_item = '';
2412 $new_form = isset($options['formidable_item_new_form']) && $options['formidable_item_new_form'] ? true : false;
2413
2414 if (class_exists('FrmXMLHelper') && class_exists('FrmField')) {
2415
2416 if ($xml->formidable) {
2417
2418 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
2419 file_put_contents($tmp, base64_decode((String) $xml->formidable));
2420
2421 if ($new_form) {
2422 add_filter('frm_match_xml_form', array($this, 'filter_frm_match_xml_form'), 10, 2);
2423 }
2424
2425 $result = FrmXMLHelper::import_xml($tmp);
2426
2427 if ($new_form) {
2428 remove_filter('frm_match_xml_form', array($this, 'filter_frm_match_xml_form'), 10);
2429 }
2430
2431 unlink($tmp);
2432
2433 FrmXMLHelper::parse_message($result, $message, $errors);
2434
2435 if ($errors) {
2436 return array(
2437 'errors' => $errors
2438 );
2439 } else {
2440 if (isset($result['forms'][$item])) {
2441 $updated_item = $result['forms'][$item];
2442 }
2443 }
2444 }
2445 }
2446 return $updated_item;
2447 }
2448
2449 public function after_import($old_template_id, $new_template_id) {
2450 $item = $this->get('item');
2451 if ($item && $old_template_id && $new_template_id) {
2452 if (class_exists('FrmForm')) {
2453 $form = FrmForm::getOne($item);
2454 if ($form) {
2455 if (isset($form->options['success_msg'])) {
2456 $success_msg = $this->replace_template_id($form->options['success_msg'], $old_template_id, $new_template_id);
2457 if ($success_msg != $form->options['success_msg']) {
2458 $update = array(
2459 'options' => array(
2460 'success_msg' => $success_msg
2461 )
2462 );
2463 FrmForm::update($item, $update);
2464 }
2465 }
2466
2467 if (class_exists('FrmFormAction')) {
2468 $actions = FrmFormAction::get_action_for_form($item, 'email');
2469 foreach ($actions as $action) {
2470 if (isset($action->post_content['email_message'])) {
2471 $email_message = $this->replace_template_id($action->post_content['email_message'], $old_template_id, $new_template_id);
2472 if ($email_message != $action->post_content['email_message']) {
2473 $action->post_content['email_message'] = $email_message;
2474 FrmFormAction::save_settings($action);
2475 }
2476 }
2477 }
2478 }
2479 }
2480 }
2481 }
2482 return false;
2483 }
2484
2485 public function replace_template_id($message = '', $old_template_id, $new_template_id) {
2486 $old_template_id = (int) $old_template_id;
2487 $new_template_id = (int) $new_template_id;
2488
2489 $message = preg_replace('/\[(e2pdf-download|e2pdf-view|e2pdf-save|e2pdf-attachment|e2pdf-adobesign)(.*) id=(?:|\'|")' . $old_template_id . '(?:|\'|")(.*)\]/i', '[${1}${2} id=${3}' . $new_template_id . '${4}${5}]', $message);
2490 return $message;
2491 }
2492
2493 /**
2494 * Replace Old Formidable shortcodes to new values on pages
2495 *
2496 * @param array $pages - List of pages to replace shortcodes
2497 * @param array $shortcodes_list - List of new/old shortcodes to replace
2498 *
2499 * @return array - List of updated pages
2500 */
2501 public function pages_replace_shortcodes($pages = array(), $shortcodes_list = array()) {
2502
2503 foreach ($pages as $page_key => $page) {
2504 //replace page actions and conditions shortcodes
2505 if (isset($page['actions']) && !empty($page['actions'])) {
2506 foreach ($page['actions'] as $action_key => $action_value) {
2507 if (isset($action_value['change'])) {
2508 $pages[$page_key]['actions'][$action_key]['change'] = $this->replace_shortcodes($action_value['change'], $shortcodes_list);
2509 }
2510
2511 if (isset($action_value['conditions']) && !empty($action_value['conditions'])) {
2512 foreach ($action_value['conditions'] as $condition_key => $condition_value) {
2513 if (isset($condition_value['if'])) {
2514 $pages[$page_key]['actions'][$action_key]['conditions'][$condition_key]['if'] = $this->replace_shortcodes($condition_value['if'], $shortcodes_list);
2515 }
2516
2517 if (isset($condition_value['value'])) {
2518 $pages[$page_key]['actions'][$action_key]['conditions'][$condition_key]['value'] = $this->replace_shortcodes($condition_value['value'], $shortcodes_list);
2519 }
2520 }
2521 }
2522 }
2523 }
2524
2525 foreach ($page['elements'] as $element_key => $element_value) {
2526 $pages[$page_key]['elements'][$element_key]['value'] = $this->replace_shortcodes($element_value['value'], $shortcodes_list);
2527
2528 //replace element actions and conditions shortcodes
2529 if (isset($element_value['actions']) && !empty($element_value['actions'])) {
2530 foreach ($element_value['actions'] as $action_key => $action_value) {
2531 if (isset($action_value['change'])) {
2532 $pages[$page_key]['elements'][$element_key]['actions'][$action_key]['change'] = $this->replace_shortcodes($action_value['change'], $shortcodes_list);
2533 }
2534
2535 if (isset($action_value['conditions']) && !empty($action_value['conditions'])) {
2536 foreach ($action_value['conditions'] as $condition_key => $condition_value) {
2537 if (isset($condition_value['if'])) {
2538 $pages[$page_key]['elements'][$element_key]['actions'][$action_key]['conditions'][$condition_key]['if'] = $this->replace_shortcodes($condition_value['if'], $shortcodes_list);
2539 }
2540
2541 if (isset($condition_value['value'])) {
2542 $pages[$page_key]['elements'][$element_key]['actions'][$action_key]['conditions'][$condition_key]['value'] = $this->replace_shortcodes($condition_value['value'], $shortcodes_list);
2543 }
2544 }
2545 }
2546 }
2547 }
2548 }
2549 }
2550
2551 return $pages;
2552 }
2553
2554 /**
2555 * Replace Old Formidable shortcodes to new values
2556 *
2557 * @param string $content - Value that can contains old shortcodes
2558 * @param array $shortcodes_list - List of new/old shortcodes to replace
2559 *
2560 * @return string - Updated value
2561 */
2562 public function replace_shortcodes($content = "", $shortcodes_list = array()) {
2563
2564 if (false === strpos($content, '[')) {
2565 return $content;
2566 }
2567
2568 foreach ($shortcodes_list as $list_key => $list_value) {
2569 $content = preg_replace("/(\[|\[(?:[^\]]*?)\s|\[(?:[^\]]*?)field_id=(?:\'|\"|)){$list_key}(\:(?:.*?)\]|\s(?:.*?)\]|(?:\'|\")(?:.*?)\]|\])/", '${1}' . $list_value . '${2}', $content);
2570 }
2571
2572 return $content;
2573 }
2574
2575 /**
2576 * Verify if item and dataset exists
2577 *
2578 * @return bool - item and dataset exists
2579 */
2580 public function verify() {
2581 $item = $this->get('item');
2582 $dataset = $this->get('dataset');
2583
2584 if ($item && $dataset && class_exists('FrmEntry') && class_exists('FrmForm')) {
2585 $entry = FrmEntry::getOne($dataset);
2586 if (is_object($entry) && $entry->form_id == $item) {
2587 return true;
2588 }
2589 }
2590 return false;
2591 }
2592
2593 /**
2594 * Create Form based on uploaded PDF
2595 *
2596 * @param object $template - Template Object to work with
2597 * @param array $data - Settings to create labels/shortcodes
2598 *
2599 * @return object - Mapped Template Object
2600 */
2601 public function auto_form($template, $data = array()) {
2602
2603 if ($template->get('ID')) {
2604
2605 $auto_form_label = isset($data['auto_form_label']) && $data['auto_form_label'] ? $data['auto_form_label'] : false;
2606 $auto_form_shortcode = isset($data['auto_form_shortcode']) ? true : false;
2607
2608 $form = array(
2609 'form_key' => '',
2610 'name' => $template->get('title'),
2611 'description' => '',
2612 'status' => 'published',
2613 'options' => array(
2614 'success_msg' => sprintf(__('Success. [e2pdf-download id="%s"]', 'e2pdf'), $template->get('ID'))
2615 )
2616 );
2617
2618 if ($item = FrmForm::create($form)) {
2619 $template->set('item', $item);
2620
2621 $checkboxes = array();
2622 $radios = array();
2623
2624 $pages = $template->get('pages');
2625
2626 foreach ($pages as $page_key => $page) {
2627 if (isset($page['elements']) && !empty($page['elements'])) {
2628 foreach ($page['elements'] as $element_key => $element) {
2629 $field_values = array();
2630 if ($element['type'] == 'e2pdf-input' || ($element['type'] == 'e2pdf-signature' && !class_exists('FrmSigAppHelper'))) {
2631 $field_values = FrmFieldsHelper::setup_new_vars('text', $item);
2632 } elseif ($element['type'] == 'e2pdf-signature' && class_exists('FrmSigAppHelper')) {
2633 $field_values = FrmFieldsHelper::setup_new_vars('signature', $item);
2634 } elseif ($element['type'] == 'e2pdf-textarea') {
2635 $field_values = FrmFieldsHelper::setup_new_vars('textarea', $item);
2636 } elseif ($element['type'] == 'e2pdf-select') {
2637 $field_values = FrmFieldsHelper::setup_new_vars('select', $item);
2638 $field_values['options'] = array();
2639 if (isset($element['properties']['options'])) {
2640 $field_options = explode("\n", $element['properties']['options']);
2641 foreach ($field_options as $option) {
2642 $field_values['options'][] = $option;
2643 }
2644 }
2645 } elseif ($element['type'] == 'e2pdf-checkbox') {
2646 $field_key = array_search($element['name'], array_column($checkboxes, 'name'));
2647 if ($field_key !== false) {
2648 $checkboxes[$field_key]['options'][] = $element['properties']['option'];
2649 $pages[$page_key]['elements'][$element_key]['value'] = '[' . $checkboxes[$field_key]['element_id'] . ']';
2650 } else {
2651 $field_values = FrmFieldsHelper::setup_new_vars('checkbox', $item);
2652 $field_values['options'] = array();
2653 }
2654 } elseif ($element['type'] == 'e2pdf-radio') {
2655 if (isset($element['properties']['group']) && $element['properties']['group']) {
2656 $element['name'] = $element['properties']['group'];
2657 } else {
2658 $element['name'] = $element['element_id'];
2659 }
2660
2661 $field_key = array_search($element['name'], array_column($radios, 'name'));
2662 if ($field_key !== false) {
2663 $radios[$field_key]['options'][] = $element['properties']['option'];
2664 $pages[$page_key]['elements'][$element_key]['value'] = '[' . $radios[$field_key]['element_id'] . ']';
2665 } else {
2666 $field_values = FrmFieldsHelper::setup_new_vars('radio', $item);
2667 $field_values['options'] = array();
2668 }
2669 }
2670
2671 if (!empty($field_values) && $field_id = FrmField::create($field_values)) {
2672 $field = FrmField::getOne($field_id);
2673 $labels = array();
2674
2675 if ($auto_form_shortcode) {
2676 $labels[] = get_option('e2pdf_formidable_use_keys') ? '[' . $field->field_key . ']' : '[' . $field->id . ']';
2677 }
2678
2679 if ($auto_form_label && $auto_form_label == 'value' && isset($element['value']) && $element['value']) {
2680 $labels[] = $element['value'];
2681 } elseif ($auto_form_label && $auto_form_label == 'name' && isset($element['name']) && $element['name']) {
2682 $labels[] = $element['name'];
2683 }
2684
2685 if (!empty($labels)) {
2686 $update = array(
2687 'name' => implode(' ', $labels)
2688 );
2689 FrmField::update($field_id, $update);
2690 }
2691
2692 if ($element['type'] == 'e2pdf-textarea') {
2693 $pages[$page_key]['elements'][$element_key]['value'] = get_option('e2pdf_formidable_use_keys') ? '[' . $field->field_key . ' wpautop=0]' : '[' . $field->id . ' wpautop=0]';
2694 } else {
2695 $pages[$page_key]['elements'][$element_key]['value'] = get_option('e2pdf_formidable_use_keys') ? '[' . $field->field_key . ']' : '[' . $field->id . ']';
2696 }
2697
2698 if (isset($element['properties']['esig'])) {
2699 unset($pages[$page_key]['elements'][$element_key]['properties']['esig']);
2700 }
2701
2702 if ($element['type'] == 'e2pdf-checkbox') {
2703 $checkboxes[] = array(
2704 'name' => $element['name'],
2705 'element_id' => $field_id,
2706 'field_id' => $field->id,
2707 'options' => array(
2708 $element['properties']['option'],
2709 )
2710 );
2711 } elseif ($element['type'] == 'e2pdf-radio') {
2712 $radios[] = array(
2713 'name' => $element['name'],
2714 'element_id' => $field_id,
2715 'field_id' => $field->id,
2716 'options' => array(
2717 $element['properties']['option'],
2718 )
2719 );
2720 }
2721 }
2722 }
2723 }
2724 }
2725
2726 foreach ($checkboxes as $element) {
2727 $update = array(
2728 'options' => $element['options']
2729 );
2730 FrmField::update($element['field_id'], $update);
2731 }
2732
2733 foreach ($radios as $element) {
2734 $update = array(
2735 'options' => $element['options']
2736 );
2737 FrmField::update($element['field_id'], $update);
2738 }
2739
2740 $template->set('pages', $pages);
2741 }
2742 }
2743
2744 return $template;
2745 }
2746
2747 /**
2748 * Init Visual Mapper data
2749 *
2750 * @return bool|string - HTML data source for Visual Mapper
2751 */
2752 public function visual_mapper() {
2753
2754 $item = $this->get('item');
2755 $html = '';
2756 $source = '';
2757
2758 if ($item && class_exists('FrmformsController')) {
2759
2760 if (class_exists('FrmProFieldsHelper')) {
2761 add_filter('frm_get_paged_fields', array($this, 'filter_remove_pagebreaks'), 9, 1);
2762 }
2763 add_filter('frm_show_new_entry_page', array($this, 'filter_frm_show_new_entry_page'), 99);
2764 $source = FrmformsController::show_form($item, '', true, true);
2765 if (class_exists("FrmProFieldsHelper")) {
2766 remove_filter('frm_get_paged_fields', array($this, 'filter_remove_pagebreaks'), 9);
2767 }
2768 remove_filter('frm_show_new_entry_page', array($this, 'filter_frm_show_new_entry_page'), 99);
2769
2770 if ($source) {
2771 libxml_use_internal_errors(true);
2772 $dom = new DOMDocument();
2773 if (function_exists('mb_convert_encoding')) {
2774 $html = $dom->loadHTML(mb_convert_encoding($source, 'HTML-ENTITIES', 'UTF-8'));
2775 } else {
2776 $html = $dom->loadHTML('<?xml encoding="UTF-8">' . $source);
2777 }
2778 libxml_clear_errors();
2779 }
2780
2781 if (!$source) {
2782 return __('Form source is empty', 'e2pdf');
2783 } elseif (!$html) {
2784 return __('Form could not be parsed due incorrect HTML', 'e2pdf');
2785 } else {
2786
2787 $xml = $this->helper->load('xml');
2788 $xml->set('dom', $dom);
2789 $xpath = new DomXPath($dom);
2790
2791 $remove_by_class = array(
2792 'frm_ajax_loading',
2793 'wp-editor-tools',
2794 'quicktags-toolbar',
2795 'frm_button_submit',
2796 'frm_range_value',
2797 'star-rating',
2798 'frm_repeat_buttons',
2799 'frm_save_draft',
2800 'frm_final_submit'
2801 );
2802 foreach ($remove_by_class as $key => $class) {
2803 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
2804 foreach ($elements as $element) {
2805 $element->parentNode->removeChild($element);
2806 }
2807 }
2808
2809 $remove_by_tag = array(
2810 'link',
2811 'style',
2812 'script'
2813 );
2814 foreach ($remove_by_tag as $key => $tag) {
2815 $elements = $xpath->query("//{$tag}");
2816 foreach ($elements as $element) {
2817 $element->parentNode->removeChild($element);
2818 }
2819 }
2820
2821 $remove_classes = array(
2822 'wp-editor-container',
2823 'frm_logic_form'
2824 );
2825
2826 foreach ($remove_classes as $key => $class) {
2827 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
2828 foreach ($elements as $element) {
2829 $element = $xml->set_node_value($element, 'class', str_replace($class, '', $xml->get_node_value($element, 'class')));
2830 }
2831 }
2832
2833 $remove_styles = array(
2834 'frm_toggle_container'
2835 );
2836
2837 foreach ($remove_styles as $key => $class) {
2838 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
2839 foreach ($elements as $element) {
2840 $element = $xml->set_node_value($element, 'style', '');
2841 }
2842 }
2843
2844 /*
2845 * Metas patterns to replace field names
2846 * @since 0.01.42
2847 */
2848 $metas_pattern = array(
2849 '/item_meta\[(?:.*?)\]\[0\]\[(.*?)\](?:\[\])?/i' => '$1:1',
2850 '/item_meta\[(.*?)\](\[\])?/i' => '$1',
2851 );
2852
2853 // Replace names
2854 $metas = $xpath->query("//*[contains(@name, 'item_meta')]");
2855 foreach ($metas as $element) {
2856 $field_id = preg_replace(array_keys($metas_pattern), $metas_pattern, $xml->get_node_value($element, 'name'));
2857 if (get_option('e2pdf_formidable_use_keys') && class_exists('FrmField')) {
2858 if (strpos($field_id, ':') !== false) {
2859 $repeat_data = explode(":", $field_id);
2860 if (isset($repeat_data['0'])) {
2861 $field_data = FrmField::getOne($repeat_data['0']);
2862 if ($field_data) {
2863 $field_id = $field_data->field_key . ":1";
2864 }
2865 }
2866 } else {
2867 $field_data = FrmField::getOne($field_id);
2868 if ($field_data) {
2869 $field_id = $field_data->field_key;
2870 }
2871 }
2872 }
2873 $element = $xml->set_node_value($element, 'name', $field_id);
2874 }
2875
2876 $frm_combo_inputs_container = $xpath->query("//*[contains(@class, 'frm_combo_inputs_container')]");
2877 foreach ($frm_combo_inputs_container as $element) {
2878 $inputs = $xpath->query(".//input", $element);
2879 $selects = $xpath->query(".//select", $element);
2880
2881 foreach ($selects as $key => $sub_element) {
2882 $field_data = array();
2883 preg_match('/(.*?)\[(.*?)\]/i', $xml->get_node_value($sub_element, 'name'), $field_data);
2884 if (!empty($field_data) && isset($field_data[1]) && isset($field_data[2])) {
2885 $field_id = $field_data[1] . ' show="' . $field_data[2] . '"';
2886 $sub_element = $xml->set_node_value($sub_element, 'name', $field_id);
2887 }
2888 }
2889
2890 foreach ($inputs as $key => $sub_element) {
2891 $field_data = array();
2892 preg_match('/(.*?)\[(.*?)\]/i', $xml->get_node_value($sub_element, 'name'), $field_data);
2893 if (!empty($field_data) && isset($field_data[1]) && isset($field_data[2])) {
2894 $field_id = $field_data[1] . ' show="' . $field_data[2] . '"';
2895 $sub_element = $xml->set_node_value($sub_element, 'name', $field_id);
2896 }
2897 }
2898 }
2899
2900 $frm_dropzone = $xpath->query("//*[contains(@class, 'frm_dropzone')]/parent::*");
2901 foreach ($frm_dropzone as $element) {
2902 $dropzone = $xpath->query(".//*[contains(@class, 'frm_dropzone')]", $element)->item(0);
2903 $input = $xpath->query(".//input", $element)->item(0);
2904 if ($input && $dropzone) {
2905 $input_cloned = $input->cloneNode(true);
2906
2907 $input_cloned = $xml->set_node_value($input_cloned, 'type', 'text');
2908 $input_cloned = $xml->set_node_value($input_cloned, 'value', __('File Upload', 'e2pdf'));
2909 $input_cloned = $xml->set_node_value($input_cloned, 'style', 'width: 100%; height: 200px; text-align: center;');
2910
2911 if (strpos($xml->get_node_value($input_cloned, 'name'), ':') !== false) {
2912 $input_cloned = $xml->set_node_value($input_cloned, 'name', $xml->get_node_value($input_cloned, 'name') . ' size="full" show_image="0" add_link="0"');
2913 } else {
2914 $input_cloned = $xml->set_node_value($input_cloned, 'name', $xml->get_node_value($input_cloned, 'name') . ' size="full"');
2915 }
2916
2917 $input->parentNode->replaceChild($input_cloned, $input);
2918 $dropzone->parentNode->removeChild($dropzone);
2919 }
2920 }
2921
2922 // Replace signature
2923 $sigpad = $xpath->query("//*[contains(@class, 'sigPad')]");
2924 foreach ($sigpad as $element) {
2925 $input = $xpath->query(".//input", $element)->item(0);
2926 if ($input) {
2927 $input_cloned = $input->cloneNode(true);
2928
2929 $field_id = preg_replace('/\[(.*?)\]/i', '', $xml->get_node_value($input_cloned, 'name'));
2930 if (get_option('e2pdf_formidable_use_keys') && class_exists("FrmField")) {
2931 $field_data = FrmField::getOne($field_id);
2932 if ($field_data) {
2933 $field_id = $field_data->field_key;
2934 }
2935 }
2936
2937 $input_cloned = $xml->set_node_value($input_cloned, 'style', 'width: 300px; height: 100px;');
2938 $input_cloned = $xml->set_node_value($input_cloned, 'name', $field_id);
2939 $element->parentNode->replaceChild($input_cloned, $element);
2940 }
2941 }
2942
2943 // Replace names
2944 $fields = $xpath->query("//input");
2945 foreach ($fields as $element) {
2946
2947 if (class_exists('FrmField') && ($xml->get_node_value($element, 'type') == 'checkbox' || $xml->get_node_value($element, 'type') == 'radio')) {
2948
2949 $field_id = $xml->get_node_value($element, 'name');
2950 if (false !== strpos($xml->get_node_value($element, 'name'), ':')) {
2951 $field_id = substr($xml->get_node_value($element, 'name'), 0, strpos($xml->get_node_value($element, 'name'), ":"));
2952 }
2953
2954 $field_data = FrmField::getOne($field_id);
2955
2956 if (isset($field_data->type) && $field_data->type === 'data' && isset($field_data->field_options['form_select'])) {
2957 $dynamic_form_id = false;
2958 $dynamic_field_id = false;
2959
2960 $dynamic_field_id = $field_data->field_options['form_select'];
2961 $dynamic_field_data = FrmField::getOne($dynamic_field_id);
2962 if ($dynamic_field_data) {
2963 $dynamic_form_id = $dynamic_field_data->form_id;
2964 }
2965
2966 $options = array();
2967 if (class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
2968 $where = array(
2969 'it.form_id' => $dynamic_form_id
2970 );
2971 $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
2972 foreach ($entries_tmp as $key => $entry) {
2973 $options[] = array(
2974 'label' => FrmEntryMeta::get_meta_value($entry, $dynamic_field_id),
2975 'value' => $key,
2976 );
2977 }
2978 }
2979 $field_data->options = $options;
2980 }
2981
2982 if (isset($field_data->options) && is_array($field_data->options)) {
2983 $field_options = $field_data->options;
2984 $field_value = $xml->get_node_value($element, 'value');
2985 $field_key = array_search($field_value, array_column($field_options, 'value'));
2986 if ($field_key !== false) {
2987 $field_label = isset($field_options[$field_key]['label']) ? $field_options[$field_key]['label'] : $field_value;
2988 $element = $xml->set_node_value($element, 'value', $field_label);
2989 }
2990 }
2991 }
2992
2993 $element = $xml->set_node_value($element, 'name', '[' . $xml->get_node_value($element, 'name') . ']');
2994 }
2995
2996 // Replace names
2997 $textareas = $xpath->query("//textarea");
2998 foreach ($textareas as $element) {
2999 $element = $xml->set_node_value($element, 'name', '[' . $xml->get_node_value($element, 'name') . ' wpautop=0]');
3000 }
3001
3002 // Replace names
3003 $selects = $xpath->query("//select");
3004 foreach ($selects as $element) {
3005
3006 if (class_exists('FrmField')) {
3007
3008 $options = $xpath->query(".//option", $element);
3009 $field_id = $xml->get_node_value($element, 'name');
3010
3011 //Time Field names
3012 if (false !== strpos($xml->get_node_value($element, 'name'), ':')) {
3013 $field_id = substr($xml->get_node_value($element, 'name'), 0, strpos($xml->get_node_value($element, 'name'), ":"));
3014 }
3015 $field_id = str_replace(array('[H]', '[m]', '[A]'), "", $field_id);
3016
3017
3018 $field_data = FrmField::getOne($field_id);
3019 if (isset($field_data->type) && ($field_data->type === 'lookup' || $field_data->type === 'data')) {
3020 $dynamic_form_id = false;
3021 $dynamic_field_id = false;
3022
3023 if ($field_data->type === 'lookup' && isset($field_data->field_options['get_values_field']) && isset($field_data->field_options['get_values_form'])) {
3024 $dynamic_form_id = $field_data->field_options['get_values_form'];
3025 $dynamic_field_id = $field_data->field_options['get_values_field'];
3026
3027 if (get_option('e2pdf_formidable_use_keys')) {
3028 $dynamic_field_data = FrmField::getOne($dynamic_field_id);
3029
3030 if ($dynamic_field_data) {
3031 $dynamic_field_id = $dynamic_field_data->field_key;
3032 }
3033 }
3034 } elseif ($field_data->type === 'data' && isset($field_data->field_options['form_select'])) {
3035 $dynamic_field_id = $field_data->field_options['form_select'];
3036 $dynamic_field_data = FrmField::getOne($dynamic_field_id);
3037
3038 if ($dynamic_field_data) {
3039 $dynamic_form_id = $dynamic_field_data->form_id;
3040
3041 if (get_option('e2pdf_formidable_use_keys')) {
3042 $dynamic_field_id = $dynamic_field_data->field_key;
3043 }
3044 }
3045 }
3046
3047 if ($dynamic_form_id && $dynamic_field_id) {
3048
3049 foreach ($options as $option) {
3050 $option->parentNode->removeChild($option);
3051 }
3052
3053 $wrapper = $dom->createElement('option');
3054 $wrapper_atts = array(
3055 'value' => '[e2pdf-frm-entry-values id="' . $dynamic_form_id . '" field_id="' . $dynamic_field_id . '"]',
3056 );
3057 foreach ($wrapper_atts as $key => $value) {
3058 $attr = $dom->createAttribute($key);
3059 $attr->value = $value;
3060 $wrapper->appendChild($attr);
3061 }
3062 $element->appendChild($wrapper);
3063 }
3064 } else if (isset($field_data->type) && $field_data->type === 'time') {
3065 $replace = array(
3066 '[m]' => ' format="i"',
3067 '[A]' => ' format="A"',
3068 );
3069 if (isset($field_data->field_options['clock']) && $field_data->field_options['clock'] == '12') {
3070 $replace['[H]'] = ' format="g"';
3071 } else {
3072 $replace['[H]'] = ' format="H"';
3073 }
3074 $element = $xml->set_node_value($element, 'name', str_replace(array_keys($replace), $replace, $xml->get_node_value($element, 'name')));
3075 }
3076
3077 if (isset($field_data->options) && is_array($field_data->options)) {
3078 $field_options = $field_data->options;
3079 foreach ($options as $option) {
3080 $field_value = $xml->get_node_value($option, 'value');
3081 foreach ($field_options as $field_option) {
3082 if (isset($field_option['value']) && $field_option['value'] === $field_value) {
3083 $field_label = isset($field_option['label']) ? $field_option['label'] : $field_value;
3084 $option = $xml->set_node_value($option, 'value', $field_label);
3085 }
3086 }
3087 }
3088 }
3089 }
3090
3091 $element = $xml->set_node_value($element, 'name', '[' . $xml->get_node_value($element, 'name') . ']');
3092 }
3093
3094 return $dom->saveHTML();
3095 }
3096 }
3097 return false;
3098 }
3099
3100 /**
3101 * Convert Field name to Value
3102 * @since 0.01.34
3103 *
3104 * @param string $name - Field name
3105 *
3106 * @return bool|string - Converted value or false
3107 */
3108 public function auto_map($name = false) {
3109
3110 $item = $this->get('item');
3111
3112 if ($item && class_exists("FrmField")) {
3113 $where = array('fi.form_id' => (int) $item,
3114 "(fi.field_key = '{$name}' OR fi.name = '{$name}') AND 1" => "1"
3115 );
3116 $field = FrmField::getAll($where, 'id ASC', '1');
3117
3118 if ($field && is_object($field)) {
3119 if ($field->type == 'textarea' || $field->type == 'rte') {
3120 return "[" . $field->id . " wpautop=0]";
3121 } else {
3122 return "[" . $field->id . "]";
3123 }
3124 }
3125 }
3126
3127 return false;
3128 }
3129
3130 /**
3131 * Load additional shortcodes for this extension
3132 */
3133 public function load_shortcodes() {
3134 add_shortcode('e2pdf-frm-entry-values', array($this, 'shortcode_e2pdf_frm_entry_values'));
3135 add_shortcode('e2pdf-frm-repeatable', array($this, 'shortcode_e2pdf_frm_repeatable'));
3136 }
3137
3138 /**
3139 * [e2pdf-frm-repeatable id='{entry_id}' field_id='{field_id}'] shortcode
3140 *
3141 * @param array $atts - Atributes for shortcode
3142 *
3143 * @return string - Output of shortcodes
3144 */
3145 public function shortcode_e2pdf_frm_repeatable($atts = array()) {
3146 $id = (int) $atts['id'];
3147 $field_id = $atts['field_id'];
3148
3149 $response = "[frm-field-value field_id='{$field_id}' entry='{$id}']";
3150 return $response;
3151 }
3152
3153 /**
3154 * [e2pdf-frm-entry-values id='{form_id}' field_id='{field_id}' separator=''] shortcode
3155 *
3156 * @param array $atts - Atributes for shortcode
3157 *
3158 * @return string - Output of shortcodes
3159 */
3160 public function shortcode_e2pdf_frm_entry_values($atts = array()) {
3161 $form_id = (int) $atts['id'];
3162 $field_id = $atts['field_id'];
3163 $separator = isset($atts['separator']) ? $atts['separator'] : "\r\n";
3164
3165 $response = '';
3166 $values = array();
3167 if ($form_id && $field_id && class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
3168 $where = array(
3169 'it.form_id' => $form_id
3170 );
3171 $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
3172 foreach ($entries_tmp as $key => $entry) {
3173 $values[] = FrmEntryMeta::get_meta_value($entry, $field_id);
3174 }
3175 }
3176 $response = implode($separator, $values);
3177 return $response;
3178 }
3179
3180 /**
3181 * Get styles for generating Map Field function
3182 *
3183 * @return array - List of css files to load
3184 */
3185 public function styles() {
3186
3187 $styles = array();
3188 if (class_exists('FrmStylesHelper')) {
3189 $uploads = FrmStylesHelper::get_upload_base();
3190 $saved_css_path = '/formidable/css/formidablepro.css';
3191 if (is_readable($uploads['basedir'] . $saved_css_path)) {
3192 $url = $uploads['baseurl'] . $saved_css_path;
3193 } else {
3194 $url = admin_url('admin-ajax.php?action=frmpro_css');
3195 }
3196 $styles[] = $url;
3197 $styles[] = plugins_url('css/extension/formidable.css?v=' . time(), $this->helper->get('plugin_file_path'));
3198 }
3199
3200 return $styles;
3201 }
3202
3203 }
3204