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