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