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