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