PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.53
E2Pdf – Export Pdf Tool for WordPress v1.32.53
1.32.53 1.32.51 1.32.49 1.32.48 1.32.43 1.32.40 1.32.34 1.32.32 1.32.31 1.32.26 1.32.22 1.32.23 1.32.18 1.32.17 1.32.15 trunk 1.00.00 1.00.13 1.01.01 1.02.02 1.03.07 1.04.07 1.05.03 1.06.02 1.07.11 All 74 releases
← All changes | classes/extension/e2pdf-formidable.php +2685 -1342 1.07.11 → 1.32.53 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,191 +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 133 if (isset($this->options->$key)) {
89 134 $value = $this->options->$key;
90 - return $value;
91 - } elseif ($key == 'args') {
92 - return array();
93 135 } else {
94 - return false;
136 + switch ($key) {
137 + case 'args':
138 + $value = array();
139 + break;
140 + default:
141 + $value = false;
142 + break;
143 + }
95 144 }
145 + return $value;
96 146 }
97 147
98 148 /**
99 149 * Get items to work with
100 - *
101 150 * @return array() - List of available items
102 151 */
103 152 public function items() {
104 -
105 - $content = array();
106 -
153 + $items = array();
107 154 if (class_exists('FrmForm')) {
108 155 $where = array(
109 156 'is_template' => 0,
110 - 'status' => 'published'
157 + 'status' => 'published',
111 158 );
112 -
113 159 $forms = FrmForm::getAll($where, 'name');
114 160 if ($forms) {
115 - foreach ($forms as $key => $value) {
116 - $content[] = $this->item($value->id);
161 + foreach ($forms as $key => $form) {
162 + $items[] = $this->item($form->id);
117 163 }
118 164 }
119 165 }
120 -
121 - return $content;
166 + return $items;
122 167 }
123 168
124 169 /**
125 170 * Get entries for export
126 - *
127 171 * @param int $item - Form ID
128 172 * @param string $name - Entries names
129 - *
130 173 * @return array() - Entries list
131 174 */
132 - public function datasets($item = false, $name = false) {
133 -
134 - $item = (int) $item;
175 + public function datasets($item_id = false, $name = false) {
176 + $item_id = (int) $item_id;
135 177 $datasets = array();
136 -
137 - if (class_exists('FrmEntry') && $item) {
178 + if (class_exists('FrmEntry') && $item_id) {
138 179 $where = array(
139 - 'it.form_id' => $item
180 + 'it.form_id' => $item_id,
140 181 );
141 -
142 - $datasets_tmp = FrmEntry::getAll($where, ' ORDER BY id DESC');
143 -
144 - if ($datasets_tmp) {
145 - foreach ($datasets_tmp as $key => $dataset) {
146 - $this->set('item', $item);
147 - $this->set('dataset', $dataset->id);
148 -
149 - $dataset_title = $this->render($name);
150 - if (!$dataset_title) {
151 - $dataset_title = $dataset->item_key;
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;
152 193 }
153 194 $datasets[] = array(
154 - 'key' => $dataset->id,
155 - 'value' => $dataset_title
195 + 'key' => $entry->id,
196 + 'value' => $entry_title,
156 197 );
157 198 }
199 + $this->set('cached_shortcodes', false);
158 200 }
159 201 }
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 - $formidable_form = false;
252 + $form = false;
202 253 if (class_exists('FrmForm')) {
203 - $formidable_form = FrmForm::getOne($item);
254 + $form = FrmForm::getOne($item_id);
204 255 }
205 -
206 - if ($formidable_form) {
207 - $form->id = (string) $item;
208 - $form->url = $this->helper->get_url(array('page' => 'formidable', 'frm_action' => 'edit', 'id' => $item));
209 - $form->name = $formidable_form->name;
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') : ''));
210 267 } else {
211 - $form->id = '';
212 - $form->url = 'javascript:void(0);';
213 - $form->name = '';
268 + $item->id = '';
269 + $item->url = '';
270 + $item->name = '';
214 271 }
215 - return $form;
272 + return $item;
216 273 }
217 274
218 275 /**
219 276 * Render value according to content
220 - *
221 277 * @param string $value - Content
222 278 * @param string $type - Type of rendering value
223 279 * @param array $field - Field details
224 - *
225 280 * @return string - Fully rendered value
226 281 */
227 - public function render($value, $type = false, $field = array()) {
228 -
229 - $value = $this->render_shortcodes($value, $type, $field);
230 - $value = $this->strip_shortcodes($value);
231 -
232 - if ($type === 'value' && isset($field['type']) && $field['type'] === 'e2pdf-checkbox' && isset($field['properties']['option'])) {
233 - $option = $this->render($field['properties']['option']);
234 - $options = explode(', ', $value);
235 - $option_options = explode(', ', $option);
236 - if (is_array($options) && is_array($option_options) && !array_diff($option_options, $options)) {
237 - return $option;
238 - } else {
239 - return "";
240 - }
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);
241 288 }
242 -
243 - if ($type === 'value') {
244 - $value = $this->convert_shortcodes($value, true);
245 - }
246 -
247 289 return $value;
248 290 }
249 291
250 292 /**
@@ -251,10 +293,16 @@
251 293 * Load actions for this extension
252 294 */
253 295 public function load_actions() {
254 296 add_action('frm_notification', array($this, 'action_frm_notification'), 30, 3);
255 - add_action('e2pdf_model_template_fill_pre', array($this, 'action_e2pdf_model_template_fill_pre'), 10, 2);
256 - add_action('e2pdf_model_template_fill_after', array($this, 'action_e2pdf_model_template_fill_after'), 10, 2);
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'));
257 305 }
258 306
259 307 /**
260 308 * Load filters for this extension
@@ -260,129 +308,116 @@
260 308 * Load filters for this extension
261 309 */
262 310 public function load_filters() {
263 311
264 - if (!get_option('e2pdf_formidable_disable_filter')) {
265 - add_filter('frm_display_entry_content', array(new Model_E2pdf_Filter(), 'pre_filter'), 9, 1);
266 - add_filter('frm_display_entry_content', array(new Model_E2pdf_Filter(), 'filter'), 25, 1);
267 - add_filter('frm_display_entry_content', array($this, 'filter_frm_display_entry_content'), 30, 1);
268 - add_filter('frm_content', array(new Model_E2pdf_Filter(), 'pre_filter'), 10, 1);
269 - add_filter('frm_content', array(new Model_E2pdf_Filter(), 'filter'), 25, 1);
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);
270 318 }
271 319
272 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);
273 322 add_filter('frm_notification_attachment', array($this, 'filter_frm_notification_attachment'), 30, 3);
274 - add_filter('e2pdf_model_options_get_options_options', array($this, 'filter_e2pdf_model_options_get_options_options'), 10, 1);
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
275 327 add_filter('e2pdf_controller_templates_backup_options', array($this, 'filter_e2pdf_controller_templates_backup_options'), 10, 3);
276 - add_filter('e2pdf_controller_templates_import_options', array($this, 'filter_e2pdf_controller_templates_import_options'), 10, 3);
277 328 add_filter('e2pdf_controller_templates_backup_pages', array($this, 'filter_e2pdf_controller_templates_backup_pages'), 10, 4);
278 - add_filter('e2pdf_controller_templates_backup_dataset_title', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
279 - add_filter('e2pdf_controller_templates_backup_button_title', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
280 - add_filter('e2pdf_controller_templates_backup_name', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
281 - add_filter('e2pdf_controller_templates_backup_password', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
282 - add_filter('e2pdf_controller_templates_backup_meta_title', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
283 - add_filter('e2pdf_controller_templates_backup_meta_subject', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
284 - add_filter('e2pdf_controller_templates_backup_meta_author', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
285 - add_filter('e2pdf_controller_templates_backup_meta_keywords', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
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);
286 331
332 + // replace shortcodes on import
333 + add_filter('e2pdf_controller_templates_import_options', array($this, 'filter_e2pdf_controller_templates_import_options'), 10, 3);
287 334 add_filter('e2pdf_controller_templates_import_pages', array($this, 'filter_e2pdf_controller_templates_import_pages'), 10, 5);
288 - add_filter('e2pdf_controller_templates_import_dataset_title', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
289 - add_filter('e2pdf_controller_templates_import_button_title', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
290 - add_filter('e2pdf_controller_templates_import_name', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
291 - add_filter('e2pdf_controller_templates_import_password', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
292 - add_filter('e2pdf_controller_templates_import_meta_title', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
293 - add_filter('e2pdf_controller_templates_import_meta_subject', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
294 - add_filter('e2pdf_controller_templates_import_meta_author', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
295 - add_filter('e2pdf_controller_templates_import_meta_keywords', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
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);
296 343 }
297 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 +
298 354 /**
299 355 * Render shortcodes which available in this extension
300 - *
301 356 * @param string $value - Content
302 357 * @param string $type - Type of rendering value
303 358 * @param array $field - Field details
304 - *
305 359 * @return string - Value with rendered shortcodes
306 360 */
307 - public function render_shortcodes($value, $type = false, $field = array()) {
308 -
309 - $dataset = $this->get('dataset');
310 - $item = $this->get('item');
311 - $user_id = $this->get('user_id');
312 - $args = $this->get('args');
313 - $template_id = $this->get('template_id') ? $this->get('template_id') : '0';
314 - $element_id = isset($field['element_id']) ? $field['element_id'] : '0';
315 -
316 - $form = false;
317 - $entry = false;
318 - $maybe_checkbox_separated = false;
319 -
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;
320 367 if ($this->verify()) {
321 -
322 - $args = apply_filters('e2pdf_extension_render_shortcodes_args', $args, $element_id, $template_id, $item, $dataset);
323 -
324 - $form = FrmForm::getOne($item);
325 - $entry = FrmEntry::getOne($dataset);
326 -
327 368 if (false !== strpos($value, '[')) {
328 -
329 - // Start render Separatable fields shortcode
369 + $value = $this->helper->load('field')->pre_shortcodes($value, $this, $field);
330 370 if (class_exists('FrmProEntry')) {
331 371 $shortcode_tags = array();
332 372 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
333 373 $tagnames = array_intersect($shortcode_tags, $matches[1]);
334 -
335 374 foreach ($matches[1] as $key => $shortcode) {
336 - if (strpos($shortcode, ':') !== false) {
375 + if (false !== strpos($shortcode, ':')) {
337 376 $shortcode_tags[] = $shortcode;
338 377 }
339 378 }
340 -
341 379 $tagnames = array_intersect($shortcode_tags, $matches[1]);
342 380 if (!empty($tagnames)) {
343 -
344 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
345 -
346 - preg_match_all("/$pattern/", $value, $shortcodes);
381 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
347 382 foreach ($shortcodes[0] as $key => $shortcode_value) {
348 - $shortcode = array();
349 - $shortcode[1] = $shortcodes[1][$key];
350 - $shortcode[2] = $shortcodes[2][$key];
351 - $shortcode[3] = $shortcodes[3][$key];
352 - $shortcode[4] = $shortcodes[4][$key];
353 - $shortcode[5] = $shortcodes[5][$key];
354 - $shortcode[6] = $shortcodes[6][$key];
355 -
356 - $shortcode_details = explode(":", $shortcode[2]);
357 -
383 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
384 + $shortcode_details = explode(':', $shortcode[2]);
358 385 $field_id = $shortcode_details['0'];
359 386 $child_id = $shortcode_details['1'];
360 387 $child_entry = 0;
361 -
362 388 $child_field = false;
363 389 $child_form = false;
364 -
365 - if (class_exists("FrmField")) {
390 + if (class_exists('FrmField')) {
366 391 $child_field = FrmField::getOne($field_id);
367 392 if ($child_field) {
368 393 $child_form = $child_field->form_id;
369 394 }
370 395 }
371 -
372 - $childs = FrmProEntry::get_sub_entries($dataset, true);
373 396 $child_entries = array();
374 -
375 - if ($childs && $child_form) {
376 - foreach ($childs as $child) {
377 - if ($child->form_id == $child_form) {
378 - $child_entries[] = $child->id;
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 + }
379 404 }
380 405 }
381 406 }
382 -
383 - $new_shortcode = "";
384 -
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 = '';
385 420 if (!empty($child_entries) && count($child_entries) >= $child_id) {
386 421 $start = 1;
387 422 foreach ($child_entries as $key => $sub_entry) {
388 423 if ($start == $child_id) {
@@ -391,90 +426,119 @@
391 426 }
392 427 $start++;
393 428 }
394 429
395 - $shortcode[2] = "frm-field-value field_id={$field_id} entry={$child_entry}";
396 - $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] . ']';
397 432 }
398 -
399 - $maybe_checkbox_separated = true;
433 + $checkbox_separated = true;
400 434 $value = str_replace($shortcode_value, $new_shortcode, $value);
401 435 }
402 436 }
403 437 }
404 - // End render Separatable fields shortcode
405 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 */
406 459 $shortcode_tags = array(
407 - 'e2pdf-user',
408 - 'e2pdf-arg'
460 + 'e2pdf-frm-lookup-values',
461 + 'e2pdf-frm-data-values',
462 + 'default-message',
463 + 'default_message',
464 + 'default-message2',
465 + 'default_message2',
409 466 );
410 467 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
411 468 $tagnames = array_intersect($shortcode_tags, $matches[1]);
412 -
413 469 if (!empty($tagnames)) {
414 -
415 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
416 -
417 - preg_match_all("/$pattern/", $value, $shortcodes);
418 -
470 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
419 471 foreach ($shortcodes[0] as $key => $shortcode_value) {
420 - $shortcode = array();
421 - $shortcode[1] = $shortcodes[1][$key];
422 - $shortcode[2] = $shortcodes[2][$key];
423 - $shortcode[3] = $shortcodes[3][$key];
424 - $shortcode[4] = $shortcodes[4][$key];
425 - $shortcode[5] = $shortcodes[5][$key];
426 - $shortcode[6] = $shortcodes[6][$key];
427 -
472 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
428 473 $atts = shortcode_parse_atts($shortcode[3]);
429 -
430 - if ($shortcode['2'] == 'e2pdf-user') {
431 - if (!isset($atts['id']) && $user_id) {
432 - $shortcode[3] .= " id=\"" . $user_id . "\"";
433 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]", $value);
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);
434 478 }
435 - } elseif ($shortcode['2'] == 'e2pdf-arg') {
436 - if (isset($atts['key']) && isset($args[$atts['key']])) {
437 - $sub_value = $this->strip_shortcodes($args[$atts['key']]);
438 - $value = str_replace($shortcode_value, $sub_value, $value);
439 - } else {
440 - $value = str_replace($shortcode_value, '', $value);
441 - }
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);
442 501 }
443 502 }
444 503 }
445 504
446 - $shortcode_tags = array(
447 - 'e2pdf-format-number',
448 - 'e2pdf-format-date',
449 - 'e2pdf-format-output',
450 - );
451 - $shortcode_tags = apply_filters('e2pdf_extension_render_shortcodes_tags', $shortcode_tags);
452 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
453 - $tagnames = array_intersect($shortcode_tags, $matches[1]);
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);
454 515
455 - if (!empty($tagnames)) {
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 + }
456 525
457 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
458 -
459 - preg_match_all("/$pattern/", $value, $shortcodes);
460 - foreach ($shortcodes[0] as $key => $shortcode_value) {
461 - $shortcode = array();
462 - $shortcode[1] = $shortcodes[1][$key];
463 - $shortcode[2] = $shortcodes[2][$key];
464 - $shortcode[3] = $shortcodes[3][$key];
465 - $shortcode[4] = $shortcodes[4][$key];
466 - $shortcode[5] = $shortcodes[5][$key];
467 - $shortcode[6] = $shortcodes[6][$key];
468 -
469 - if (!$shortcode['5']) {
470 - $sub_value = '';
471 - } elseif (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
472 - $sub_value = $this->render($shortcode['5'], $type);
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);
473 529 } else {
474 - $sub_value = $this->render($shortcode['5'], $type, $field);
530 + $value = preg_replace('/\[foreach[^\]]*?\](.*?)\[\/foreach(*SKIP)(*FAIL)|\[id2\]/is', '', $value);
531 + $value = preg_replace('/\[foreach[^\]]*?\](.*?)\[\/foreach(*SKIP)(*FAIL)|\[key2\]/is', '', $value);
475 532 }
476 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]" . $sub_value . "[/" . $shortcode['2'] . "]", $value);
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);
477 541 }
478 542 }
479 543 }
480 544
@@ -481,221 +545,198 @@
481 545 /*
482 546 * Checkboxes separatable fix filter add
483 547 * @since 0.01.43
484 548 */
485 - if ($maybe_checkbox_separated) {
549 + if ($checkbox_separated) {
486 550 add_filter('frm_display_value_custom', array($this, 'filter_frm_display_value_custom'), 0, 3);
487 551 }
488 552
489 - $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 + }
490 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 +
491 587 /*
492 588 * Checkboxes separatable fix filter remove
493 589 * @since 0.01.43
494 590 */
495 - if ($maybe_checkbox_separated) {
591 + if ($checkbox_separated) {
496 592 remove_filter('frm_display_value_custom', array($this, 'filter_frm_display_value_custom'), 0);
497 593 }
498 594
499 - //Bug fix for Formidable Forms Signature (2.0.1)
500 - $upd_signature = false;
595 + /* Bug fix for Formidable Forms Signature (2.0.1) */
501 596 if (class_exists('FrmFieldFactory')) {
502 - $sig_obj = FrmFieldFactory::get_field_type('signature');
503 - if ($sig_obj->get_display_value('signature') == '') {
504 - $upd_signature = true;
597 + $signature_field = FrmFieldFactory::get_field_type('signature');
598 + if ($signature_field->get_display_value('signature') == '') {
599 + $signature = true;
505 600 }
506 601 }
507 -
508 - if ($upd_signature) {
509 - remove_filter('frm_get_signature_display_value', 'FrmSigAppController::display_signature', 10);
510 - remove_filter('frmpro_fields_replace_shortcodes', 'FrmSigAppController::custom_display_signature', 10);
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');
511 605 add_filter('frm_keep_signature_value_array', array($this, 'filter_frm_keep_signature_value_array'), 10, 2);
512 606 }
607 + add_filter('frmpro_fields_replace_shortcodes', array($this, 'filter_frmpro_fields_replace_shortcodes'), 20, 4);
513 608
514 - $value = apply_filters('frm_content', $value, $form, $entry);
515 -
516 - if ($upd_signature) {
517 - remove_filter('frm_keep_signature_value_array', array($this, 'filter_frm_keep_signature_value_array'), 10);
518 - add_filter('frm_get_signature_display_value', 'FrmSigAppController::display_signature', 10, 3);
519 - add_filter('frmpro_fields_replace_shortcodes', 'FrmSigAppController::custom_display_signature', 10, 4);
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);
520 612 }
521 -
522 - if (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
523 - $esig = isset($field['properties']['esig']) && $field['properties']['esig'] ? true : false;
524 - if ($esig) {
525 - //process e-signature
526 - $value = "";
527 - } else {
528 - preg_match('/src="([^"]*)"/', $value, $matches);
529 -
530 - if (isset($matches[1])) {
531 - $value = $matches[1];
613 + if ($this->get('item') == '-2') {
614 + if ($this->get('cached_entry') && $this->get('cached_entry2')) {
615 + $value = apply_filters('frm_content', $value, $this->get('cached_form'), $this->get('cached_entry'));
616 + $value = apply_filters('frm_content', $value, $this->get('cached_form2'), $this->get('cached_entry2'));
617 + } elseif ($this->get('cached_entry')) {
618 + $value = apply_filters('frm_content', $value, $this->get('cached_form'), $this->get('cached_entry'));
619 + if ($this->get('cached_form2')) {
620 + $value = apply_filters('frm_content', $value, $this->get('cached_form2'), $this->get('cached_entry'));
532 621 }
533 -
534 - if (!$this->helper->load('image')->get_image($value)) {
535 - $value = $this->strip_shortcodes($value);
536 - if (
537 - $value &&
538 - trim($value) != "" &&
539 - extension_loaded('gd') &&
540 - function_exists('imagettftext')
541 - ) {
542 - if (isset($field['properties']['text_color']) && $field['properties']['text_color']) {
543 - $penColour = $this->helper->load('convert')->to_hex_color($field['properties']['text_color']);
544 - } else {
545 - $penColour = array(0x14, 0x53, 0x94);
546 - }
547 -
548 - $default_options = array(
549 - 'imageSize' => array(isset($field['width']) ? $field['width'] : '400', isset($field['height']) ? $field['height'] : '150'),
550 - 'bgColour' => 'transparent',
551 - 'penColour' => $penColour
552 - );
553 -
554 - $options = array();
555 - $options = apply_filters('e2pdf_frm_sig_output_options', $options, $element_id);
556 - $options = apply_filters('e2pdf_image_sig_output_options', $options, $element_id, $template_id);
557 - $options = array_merge($default_options, $options);
558 -
559 - $model_e2pdf_font = new Model_E2pdf_Font();
560 -
561 - $font = false;
562 - if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
563 - $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
564 - } elseif (class_exists('FrmSigAppHelper')) {
565 - if (file_exists(FrmSigAppHelper::plugin_path() . '/assets/journal.ttf')) {
566 - $font = FrmSigAppHelper::plugin_path() . '/assets/journal.ttf';
567 - }
568 - }
569 -
570 - if (!$font) {
571 - $font = $model_e2pdf_font->get_font_path('Noto Sans');
572 - }
573 -
574 - $size = 150;
575 - if (isset($field['properties']['text_font_size']) && $field['properties']['text_font_size']) {
576 - $size = $field['properties']['text_font_size'];
577 - }
578 -
579 - $model_e2pdf_signature = new Model_E2pdf_Signature();
580 - $value = $model_e2pdf_signature->ttf_signature($value, $size, $font, $options);
581 - } else {
582 - $value = "";
583 - }
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'));
584 626 }
585 627 }
586 - }
587 -
588 - if ((false !== strpos($value, '[referer]') || false !== strpos($value, '[browser]')) && isset($entry->description)) {
589 - $description = maybe_unserialize($entry->description);
590 - $referer = "";
591 - if (isset($description['referrer'])) {
592 - if (@preg_match('/Referer +\d+\:[ \t]+([^\n\t]+)/', $description['referrer'], $m)) {
593 - $referer = $m[1];
594 - } else {
595 - $referer = $description['referrer'];
596 - }
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);
597 632 }
598 -
599 - $browser = "";
600 - if (isset($description['browser'])) {
601 - $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);
602 637 }
638 + }
603 639
604 - $replace = array(
605 - 'from' => array(
606 - '[referer]',
607 - '[browser]'
608 - ),
609 - 'to' => array(
610 - $referer,
611 - $browser
612 - )
613 - );
614 - $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);
615 644 }
616 645
617 - if (false !== strpos($value, '[entry_num]')) {
618 - $entry_num = '';
619 - if (class_exists("FrmDb")) {
620 - $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 + }
621 654 }
622 -
623 - $replace = array(
624 - 'from' => array(
625 - '[entry_num]'
626 - ),
627 - 'to' => array(
628 - $entry_num
629 - )
630 - );
631 - $value = str_replace($replace['from'], $replace['to'], $value);
655 + $value = $this->helper->load('field')->inner_shortcodes($value, $this, $field);
632 656 }
633 657
634 - if (false !== strpos($value, '[pdf_num]')) {
635 - $pdf_num = '0';
636 - $uid = $this->get('uid');
637 - if ($uid) {
638 - $entry = new Model_E2pdf_Entry();
639 - if ($entry->load_by_uid($uid)) {
640 - $pdf_num = $entry->get('pdf_num') + 1;
641 - }
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';
642 664 }
643 -
644 - $replace = array(
645 - 'from' => array(
646 - '[pdf_num]'
647 - ),
648 - 'to' => array(
649 - $pdf_num
650 - )
651 - );
652 -
653 - $value = str_replace($replace['from'], $replace['to'], $value);
654 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 + );
655 678 }
656 -
657 - $value = apply_filters('e2pdf_extension_render_shortcodes_value', $value, $element_id, $template_id, $item, $dataset);
658 -
659 - 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 + );
660 682 }
661 683
662 684 /**
663 685 * Strip unused shortcodes
664 - *
665 686 * @param string $value - Content
666 - *
667 687 * @return string - Value with removed unused shortcodes
668 688 */
669 689 public function strip_shortcodes($value) {
670 - $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', "", $value);
690 + $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
671 691 return $value;
672 692 }
673 693
674 694 /**
675 695 * Convert "shortcodes" inside value string
676 - *
677 696 * @param string $value - Value string
678 697 * @param bool $to - Convert From/To
679 - *
680 698 * @return string - Converted value
681 699 */
682 - public function convert_shortcodes($value, $to = false) {
700 + public function convert_shortcodes($value, $to = false, $html = false) {
683 701 if ($value) {
684 702 if ($to) {
685 - $value = str_replace('&#91;', '[', $value);
686 - $value = str_replace('&#93;', ']', $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 + }
687 709 } else {
688 - $value = str_replace('[', '&#91;', $value);
689 - $value = str_replace(']', '&#93;', $value);
690 - $value = str_replace('&#091;', '&#91;', $value);
691 - $value = str_replace('&#093;', '&#93;', $value);
710 + $search = array('[', ']', '&#091;', '&#093;');
711 + $replace = array('&#91;', '&#93;', '&#91;', '&#93;');
712 + $value = str_replace($search, $replace, $value);
692 713 }
693 714 }
694 715 return $value;
695 716 }
696 717
697 - function filter_frm_keep_signature_value_array($keep_array, $atts) {
718 + public function filter_frm_filter_view($view) {
719 + if (isset($view->frm_before_content) && $view->frm_before_content) {
720 + $view->frm_before_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->frm_before_content);
721 + }
722 + if (isset($view->post_content) && $view->post_content) {
723 + $view->post_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->post_content);
724 + }
725 + if (isset($view->frm_after_content) && $view->frm_after_content) {
726 + $view->frm_after_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->frm_after_content);
727 + }
728 + return $view;
729 + }
730 +
731 + public function filter_frm_lookup_is_current_user_filter_needed($is_filter_needed, $field_id, $field_options) {
732 + if (FrmField::is_option_true_in_array($field_options, 'lookup_filter_current_user')) {
733 + return true;
734 + }
735 + return $is_filter_needed;
736 + }
737 +
738 + public function filter_frm_keep_signature_value_array($keep_array, $atts) {
698 739 return true;
699 740 }
700 741
701 742 /**
@@ -700,71 +741,64 @@
700 741
701 742 /**
702 743 * Search and update shortcodes for this extension inside content
703 744 * Auto set of dataset id
704 - *
705 745 * @param string $content - Content
706 746 * @param int $form - ID of form
707 - * @param int $dataset - ID of dataset
708 - *
747 + * @param int $dataset_id - ID of dataset
709 748 * @return string - Content with updates shortcodes
710 749 */
711 - public function filter_frm_content($content, $form, $dataset) {
750 + public function filter_frm_content($content, $form, $dataset_id) {
712 751
713 752 if (false === strpos($content, '[')) {
714 753 return $content;
715 754 }
716 -
717 755 $shortcode_tags = array(
718 756 'e2pdf-download',
719 757 'e2pdf-save',
720 758 'e2pdf-view',
721 - 'e2pdf-adobesign'
759 + 'e2pdf-adobesign',
760 + 'e2pdf-zapier',
722 761 );
723 -
724 762 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
725 763 $tagnames = array_intersect($shortcode_tags, $matches[1]);
726 -
727 764 if (!empty($tagnames)) {
728 -
729 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
730 -
731 - preg_match_all("/$pattern/", $content, $shortcodes);
765 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
732 766 foreach ($shortcodes[0] as $key => $shortcode_value) {
733 -
734 - $shortcode = array();
735 - $shortcode[1] = $shortcodes[1][$key];
736 - $shortcode[2] = $shortcodes[2][$key];
737 - $shortcode[3] = $shortcodes[3][$key];
738 - $shortcode[4] = $shortcodes[4][$key];
739 - $shortcode[5] = $shortcodes[5][$key];
740 - $shortcode[6] = $shortcodes[6][$key];
741 -
767 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
742 768 $atts = shortcode_parse_atts($shortcode[3]);
743 -
744 - if (($shortcode[2] === 'e2pdf-save' && isset($atts['attachment']) && $atts['attachment'] == 'true') || $shortcode[2] === 'e2pdf-attachment') {
745 -
769 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
746 770 } else {
747 771 if (!isset($atts['dataset']) && isset($atts['id'])) {
748 772 $template = new Model_E2pdf_Template();
749 773 $template->load($atts['id']);
750 774 if ($template->get('extension') === 'formidable') {
751 - $entry_id = is_object($dataset) ? $dataset->id : $dataset;
775 + $entry_id = is_object($dataset_id) ? $dataset_id->id : $dataset_id;
752 776 if ($entry_id) {
753 - $atts['dataset'] = $entry_id;
754 - $shortcode[3] .= " dataset=\"{$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 + }
755 789 }
756 790 }
757 791 }
758 -
759 792 if (!isset($atts['apply'])) {
760 - $shortcode[3] .= " apply=\"true\"";
793 + $shortcode[3] .= ' apply="true"';
761 794 }
762 -
763 795 if (!isset($atts['filter'])) {
764 - $shortcode[3] .= " filter=\"true\"";
796 + $shortcode[3] .= ' filter="true"';
765 797 }
766 -
798 + if (!isset($atts['iframe_download']) && $this->get('iframe_download')) {
799 + $shortcode[3] .= ' iframe_download="true"';
800 + }
767 801 $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
768 802 }
769 803 }
770 804 }
@@ -776,48 +810,33 @@
776 810
777 811 if (false === strpos($content, '[')) {
778 812 return $content;
779 813 }
780 -
781 814 $shortcode_tags = array(
782 815 'e2pdf-download',
783 816 'e2pdf-save',
784 817 'e2pdf-view',
785 - 'e2pdf-adobesign'
818 + 'e2pdf-adobesign',
819 + 'e2pdf-zapier',
786 820 );
787 -
788 821 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
789 822 $tagnames = array_intersect($shortcode_tags, $matches[1]);
790 -
791 823 if (!empty($tagnames)) {
792 -
793 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
794 -
795 - preg_match_all("/$pattern/", $content, $shortcodes);
824 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
796 825 foreach ($shortcodes[0] as $key => $shortcode_value) {
797 -
798 - $shortcode = array();
799 - $shortcode[1] = $shortcodes[1][$key];
800 - $shortcode[2] = $shortcodes[2][$key];
801 - $shortcode[3] = $shortcodes[3][$key];
802 - $shortcode[4] = $shortcodes[4][$key];
803 - $shortcode[5] = $shortcodes[5][$key];
804 - $shortcode[6] = $shortcodes[6][$key];
805 -
826 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
806 827 $atts = shortcode_parse_atts($shortcode[3]);
807 -
808 - if (($shortcode[2] === 'e2pdf-save' && isset($atts['attachment']) && $atts['attachment'] == 'true') || $shortcode[2] === 'e2pdf-attachment') {
809 -
828 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
810 829 } else {
811 -
812 830 if (!isset($atts['apply'])) {
813 - $shortcode[3] .= " apply=\"true\"";
831 + $shortcode[3] .= ' apply="true"';
814 832 }
815 -
816 833 if (!isset($atts['filter'])) {
817 - $shortcode[3] .= " filter=\"true\"";
834 + $shortcode[3] .= ' filter="true"';
818 835 }
819 -
836 + if (!isset($atts['iframe_download'])) {
837 + $shortcode[3] .= ' iframe_download="true"';
838 + }
820 839 $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
821 840 }
822 841 }
823 842 }
@@ -826,20 +845,21 @@
826 845 }
827 846
828 847 /**
829 848 * Filter for checkbox repeatable Label/Value fix
830 - *
831 849 * @param array $value - Value
832 850 * @param obj $field - Field
833 851 * @param array $atts - Shortcode Attributes
834 - *
835 852 * @return mixed - Updated value
836 853 */
837 854 public function filter_frm_display_value_custom($value, $field, $atts = array()) {
838 - if (class_exists("FrmProEntriesController")) {
839 - $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 + );
840 861 $atts = array_merge($defaults, $atts);
841 -
842 862 if ($atts['type'] === 'checkbox') {
843 863 $value = FrmProEntriesController::get_option_label_for_saved_value($value, $field, $atts);
844 864 }
845 865 }
@@ -846,37 +866,78 @@
846 866 return $value;
847 867 }
848 868
849 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 + /**
850 918 * Generate attachments according shortcodes in Email template
851 - *
852 919 * @param array $attachments - List of attachments
853 920 * @param int $form - ID of form
854 921 * @param array $args - Arguments
855 - *
856 922 * @return array - Updated list of attachments
857 923 */
858 - public function filter_frm_notification_attachment($attachments = array(), $form, $args) {
859 -
924 + public function filter_frm_notification_attachment($attachments, $form, $args) {
860 925 if (!isset($args['email_key'])) {
861 926 return $attachments;
862 927 }
863 -
864 928 $form_actions = FrmFormAction::get_action_for_form($form->id);
865 -
866 - $dataset = $args['entry']->id;
929 + $dataset_id = $args['entry']->id;
867 930 $email_key = $args['email_key'];
868 931
869 932 $shortcode_tags = array(
870 933 'e2pdf-attachment',
871 - 'e2pdf-save'
934 + 'e2pdf-save',
872 935 );
873 936
874 937 foreach ($form_actions as $key => $action) {
875 938 if ($action->ID === $email_key) {
876 -
877 939 $content = $action->post_content['email_message'];
878 -
879 940 if (false === strpos($content, '[')) {
880 941 return $attachments;
881 942 }
882 943
@@ -885,59 +946,69 @@
885 946 add_filter('frm_content', array($this, 'filter_frm_content'), 30, 3);
886 947
887 948 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
888 949 $tagnames = array_intersect($shortcode_tags, $matches[1]);
889 -
890 950 if (!empty($tagnames)) {
891 -
892 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
893 -
894 - preg_match_all("/$pattern/", $content, $shortcodes);
895 -
951 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
896 952 foreach ($shortcodes[0] as $key => $shortcode_value) {
897 -
898 - $shortcode = array();
899 - $shortcode[1] = $shortcodes[1][$key];
900 - $shortcode[2] = $shortcodes[2][$key];
901 - $shortcode[3] = $shortcodes[3][$key];
902 - $shortcode[4] = $shortcodes[4][$key];
903 - $shortcode[5] = $shortcodes[5][$key];
904 - $shortcode[6] = $shortcodes[6][$key];
905 -
953 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
906 954 $atts = shortcode_parse_atts($shortcode[3]);
907 -
908 955 $file = false;
909 -
910 - if (($shortcode[2] === 'e2pdf-save' && isset($atts['attachment']) && $atts['attachment'] == 'true') || $shortcode[2] === 'e2pdf-attachment') {
911 -
956 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) {
912 957 if (!isset($atts['dataset']) && isset($atts['id'])) {
913 958 $template = new Model_E2pdf_Template();
914 959 $template->load($atts['id']);
915 960 if ($template->get('extension') === 'formidable') {
916 - $entry_id = is_object($dataset) ? $dataset->id : $dataset;
961 + $entry_id = is_object($dataset_id) ? $dataset_id->id : $dataset_id;
917 962 if ($entry_id) {
918 - $atts['dataset'] = $entry_id;
919 - $shortcode[3] .= " dataset=\"{$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 + }
920 975 }
921 976 }
922 977 }
923 -
924 978 if (!isset($atts['apply'])) {
925 - $shortcode[3] .= " apply=\"true\"";
979 + $shortcode[3] .= ' apply="true"';
926 980 }
927 -
928 981 if (!isset($atts['filter'])) {
929 - $shortcode[3] .= " filter=\"true\"";
982 + $shortcode[3] .= ' filter="true"';
930 983 }
931 -
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 + }
932 992 $file = do_shortcode_tag($shortcode);
933 -
934 993 if ($file) {
935 - if ($shortcode[2] != 'e2pdf-save' && !isset($atts['pdf'])) {
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 {
936 1004 $this->helper->add('formidable_attachments', $file);
937 1005 }
938 1006 $attachments[] = $file;
939 1007 }
1008 + if ($transient) {
1009 + delete_transient($transient);
1010 + }
940 1011 }
941 1012 }
942 1013 }
943 1014 }
@@ -945,15 +1016,89 @@
945 1016 return $attachments;
946 1017 }
947 1018
948 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) {
1026 +
1027 + if (isset($atts['decrypt']) &&
1028 + $atts['decrypt'] &&
1029 + class_exists('FrmProFileField') &&
1030 + class_exists('FrmProFilePayloadBuilder') &&
1031 + class_exists('FrmAppHelper')
1032 + ) {
1033 +
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;
1056 + }
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);
1077 + }
1078 + }
1079 +
1080 + return $html;
1081 + }
1082 +
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 + /**
949 1096 * Remove Page Breaks for Visual Mapper
950 - *
951 - * @param array $fields - List of fields
952 - *
1097 + * @param array $fields - List of fields
953 1098 * @return array - Updated fields
954 1099 */
955 - function filter_remove_pagebreaks($fields) {
1100 + public function filter_remove_pagebreaks($fields) {
956 1101 foreach ((array) $fields as $field_key => $field) {
957 1102 if ($field->type == 'break') {
958 1103 unset($fields[$field_key]);
959 1104 }
@@ -960,29 +1105,34 @@
960 1105 }
961 1106 return $fields;
962 1107 }
963 1108
964 - function filter_frm_match_xml_form($edit_query, $form) {
1109 + public function filter_frm_match_xml_form($edit_query, $form) {
965 1110 if (isset($edit_query['created_at'])) {
966 - $edit_query['created_at'] = date('Y-m-d H:i:s', strtotime("now"));
1111 + $edit_query['created_at'] = date('Y-m-d H:i:s', strtotime('now'));
967 1112 }
968 1113 return $edit_query;
969 1114 }
970 1115
971 - function filter_frm_show_new_entry_page() {
1116 + public function filter_frm_show_new_entry_page() {
972 1117 return 'new';
973 1118 }
974 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 +
975 1127 /**
976 1128 * Add options for Formidable extension
977 - *
978 - * @param array $options - List of options
979 - *
1129 + * @param array $options - List of options
980 1130 * @return array - Updated options list
981 1131 */
982 1132 public function filter_e2pdf_model_options_get_options_options($options = array()) {
983 1133 $options['formidable_group'] = array(
984 - 'name' => __('Formidable Forms', 'e2pdf'),
1134 + 'name' => 'Formidable Forms',
985 1135 'action' => 'extension',
986 1136 'group' => 'formidable_group',
987 1137 'options' => array(
988 1138 array(
@@ -987,9 +1137,9 @@
987 1137 'options' => array(
988 1138 array(
989 1139 'name' => __('Auto PDF and Visual Mapper', 'e2pdf'),
990 1140 'key' => 'e2pdf_formidable_use_keys',
991 - 'value' => get_option('e2pdf_formidable_use_keys') === false ? '0' : get_option('e2pdf_formidable_use_keys'),
1141 + 'value' => get_option('e2pdf_formidable_use_keys', '0'),
992 1142 'default_value' => '0',
993 1143 'type' => 'checkbox',
994 1144 'checkbox_value' => '1',
995 1145 'placeholder' => __('Use Field Keys instead Field IDs', 'e2pdf'),
@@ -996,15 +1146,15 @@
996 1146 ),
997 1147 array(
998 1148 'name' => __('Filter', 'e2pdf'),
999 1149 'key' => 'e2pdf_formidable_disable_filter',
1000 - 'value' => get_option('e2pdf_formidable_disable_filter') === false ? '0' : get_option('e2pdf_formidable_disable_filter'),
1150 + 'value' => get_option('e2pdf_formidable_disable_filter', '0'),
1001 1151 'default_value' => '0',
1002 1152 'type' => 'checkbox',
1003 1153 'checkbox_value' => '1',
1004 1154 'placeholder' => __('Disable Filter', 'e2pdf'),
1005 1155 ),
1006 - )
1156 + ),
1007 1157 );
1008 1158 return $options;
1009 1159 }
1010 1160
@@ -1011,11 +1161,11 @@
1011 1161 public function filter_e2pdf_controller_templates_import_options($options) {
1012 1162
1013 1163 if (isset($options['item'])) {
1014 1164 $options['item']['options'][] = array(
1015 - 'name' => __('Formidable Forms', 'e2pdf'),
1165 + 'name' => 'Formidable Forms',
1016 1166 'key' => 'options[formidable_item_new_form]',
1017 - 'value' => 0,
1167 + 'value' => 1,
1018 1168 'default_value' => 0,
1019 1169 'type' => 'radio',
1020 1170 'li' => array(
1021 1171 'class' => 'e2pdf-import-extension-option e2pdf-hide',
@@ -1020,10 +1170,11 @@
1020 1170 'li' => array(
1021 1171 'class' => 'e2pdf-import-extension-option e2pdf-hide',
1022 1172 ),
1023 1173 'options' => array(
1024 - 'Overwrite Web Form', 'Recreate Web Form'
1025 - )
1174 + '1' => 'Recreate Web Form',
1175 + '0' => 'Overwrite Web Form',
1176 + ),
1026 1177 );
1027 1178 }
1028 1179
1029 1180 return $options;
@@ -1032,9 +1183,9 @@
1032 1183 public function filter_e2pdf_controller_templates_backup_options($options, $template, $extension) {
1033 1184
1034 1185 if ($extension->loaded('formidable')) {
1035 1186 $options['formidable'] = array(
1036 - 'name' => __('Formidable', 'e2pdf'),
1187 + 'name' => 'Formidable Forms',
1037 1188 'options' => array(
1038 1189 array(
1039 1190 'name' => __('Force shortcodes to use', 'e2pdf'),
1040 1191 'key' => 'options[formidable_force_shortcodes]',
@@ -1044,11 +1195,11 @@
1044 1195 'options' => array(
1045 1196 '0' => __('None', 'e2pdf'),
1046 1197 '1' => __('Fields IDs', 'e2pdf'),
1047 1198 '2' => __('Field Keys', 'e2pdf'),
1048 - )
1199 + ),
1049 1200 ),
1050 - )
1201 + ),
1051 1202 );
1052 1203 }
1053 1204
1054 1205 return $options;
@@ -1056,12 +1207,29 @@
1056 1207
1057 1208 public function filter_e2pdf_controller_templates_backup_pages($pages, $options, $template, $extension) {
1058 1209
1059 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 + }
1060 1231
1061 - $where = array('fi.form_id' => (int) $template->get('item'));
1062 - $fields = FrmField::getAll($where, 'id ASC');
1063 -
1064 1232 $search = array();
1065 1233 $replace = array();
1066 1234
1067 1235 if ($options['formidable_force_shortcodes'] == '1') {
@@ -1068,13 +1236,14 @@
1068 1236 foreach ($fields as $field_key => $field) {
1069 1237 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1070 1238 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1071 1239 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1072 -
1073 1240 foreach ($sub_fields as $sub_field_key => $sub_field) {
1074 1241 $search[] = $sub_field->field_key;
1075 1242 $replace[] = $sub_field->id;
1076 1243 }
1244 + $search[] = $field->field_key;
1245 + $replace[] = $field->id;
1077 1246 } else {
1078 1247 $search[] = $field->field_key;
1079 1248 $replace[] = $field->id;
1080 1249 }
@@ -1084,13 +1253,14 @@
1084 1253
1085 1254 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1086 1255 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1087 1256 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1088 -
1089 1257 foreach ($sub_fields as $sub_field_key => $sub_field) {
1090 1258 $search[] = $sub_field->id;
1091 1259 $replace[] = $sub_field->field_key;
1092 1260 }
1261 + $search[] = $field->id;
1262 + $replace[] = $field->field_key;
1093 1263 } else {
1094 1264 $search[] = $field->id;
1095 1265 $replace[] = $field->field_key;
1096 1266 }
@@ -1098,11 +1268,9 @@
1098 1268 }
1099 1269
1100 1270 $search = array_reverse($search);
1101 1271 $replace = array_reverse($replace);
1102 -
1103 1272 $list = array_combine($search, $replace);
1104 -
1105 1273 $pages = $this->pages_replace_shortcodes($pages, $list);
1106 1274 }
1107 1275
1108 1276 return $pages;
@@ -1107,13 +1275,102 @@
1107 1275
1108 1276 return $pages;
1109 1277 }
1110 1278
1279 + public function filter_e2pdf_controller_templates_backup_actions($actions, $options, $template, $extension) {
1280 +
1281 + if ($extension->loaded('formidable') && (isset($options['formidable_force_shortcodes']) && $options['formidable_force_shortcodes'])) {
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 + }
1302 +
1303 + $search = array();
1304 + $replace = array();
1305 +
1306 + if ($options['formidable_force_shortcodes'] == '1') {
1307 + foreach ($fields as $field_key => $field) {
1308 + if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1309 + $sub_where = array('fi.form_id' => $field->field_options['form_select']);
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) {
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');
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 +
1111 1350 public function filter_e2pdf_controller_templates_backup_replace_shortcodes($value, $options, $template, $extension) {
1112 1351
1113 1352 if ($extension->loaded('formidable') && (isset($options['formidable_force_shortcodes']) && $options['formidable_force_shortcodes'])) {
1114 - $where = array('fi.form_id' => (int) $template->get('item'));
1115 - $fields = FrmField::getAll($where, 'id ASC');
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 + }
1116 1373
1117 1374 $search = array();
1118 1375 $replace = array();
1119 1376
@@ -1121,13 +1378,14 @@
1121 1378 foreach ($fields as $field_key => $field) {
1122 1379 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1123 1380 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1124 1381 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1125 -
1126 1382 foreach ($sub_fields as $sub_field_key => $sub_field) {
1127 1383 $search[] = $sub_field->field_key;
1128 1384 $replace[] = $sub_field->id;
1129 1385 }
1386 + $search[] = $field->field_key;
1387 + $replace[] = $field->id;
1130 1388 } else {
1131 1389 $search[] = $field->field_key;
1132 1390 $replace[] = $field->id;
1133 1391 }
@@ -1137,13 +1395,14 @@
1137 1395
1138 1396 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1139 1397 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
1140 1398 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1141 -
1142 1399 foreach ($sub_fields as $sub_field_key => $sub_field) {
1143 1400 $search[] = $sub_field->id;
1144 1401 $replace[] = $sub_field->field_key;
1145 1402 }
1403 + $search[] = $field->id;
1404 + $replace[] = $field->field_key;
1146 1405 } else {
1147 1406 $search[] = $field->id;
1148 1407 $replace[] = $field->field_key;
1149 1408 }
@@ -1151,9 +1410,8 @@
1151 1410 }
1152 1411
1153 1412 $search = array_reverse($search);
1154 1413 $replace = array_reverse($replace);
1155 -
1156 1414 $list = array_combine($search, $replace);
1157 1415 $value = $this->replace_shortcodes($value, $list);
1158 1416 }
1159 1417
@@ -1163,9 +1421,9 @@
1163 1421 public function filter_e2pdf_controller_templates_import_pages($pages, $options, $xml, $template, $extension) {
1164 1422
1165 1423 if ($extension->loaded('formidable') &&
1166 1424 $template->get('item') &&
1167 - $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))) &&
1168 1426 $xml->item->formidable &&
1169 1427 $options['item'] &&
1170 1428 class_exists('FrmXMLHelper') &&
1171 1429 class_exists('FrmField')
@@ -1171,35 +1429,33 @@
1171 1429 class_exists('FrmField')
1172 1430 ) {
1173 1431
1174 1432 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
1175 - file_put_contents($tmp, base64_decode((String) $xml->item->formidable));
1176 -
1177 - $dom = new DOMDocument;
1433 + file_put_contents($tmp, base64_decode((string) $xml->item->formidable), LOCK_EX);
1434 + $dom = new DOMDocument();
1178 1435 $success = $dom->loadXML(file_get_contents($tmp));
1179 -
1180 1436 $old_ids = array();
1181 1437 $old_keys = array();
1182 -
1183 1438 if ($success && function_exists('simplexml_import_dom')) {
1184 1439 $item_xml = simplexml_import_dom($dom);
1185 -
1186 1440 foreach ($item_xml->form as $form_key => $form) {
1187 - 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))) {
1188 1442 foreach ($form->field as $field_key => $field) {
1189 - $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
1190 1444 if (isset($field_options['form_select']) && $field_options['form_select']) {
1191 1445 foreach ($item_xml->form as $sub_form_key => $sub_form) {
1192 - if ((String) $sub_form->id == $field_options['form_select']) {
1446 + if ((string) $sub_form->id == $field_options['form_select']) {
1193 1447 foreach ($sub_form->field as $sub_field_key => $sub_field) {
1194 - $old_ids[] = (String) $sub_field->id;
1195 - $old_keys[] = (String) $sub_field->field_key;
1448 + $old_ids[] = (string) $sub_field->id;
1449 + $old_keys[] = (string) $sub_field->field_key;
1196 1450 }
1197 1451 }
1198 1452 }
1453 + $old_ids[] = (string) $field->id;
1454 + $old_keys[] = (string) $field->field_key;
1199 1455 } else {
1200 - $old_ids[] = (String) $field->id;
1201 - $old_keys[] = (String) $field->field_key;
1456 + $old_ids[] = (string) $field->id;
1457 + $old_keys[] = (string) $field->field_key;
1202 1458 }
1203 1459 }
1204 1460 }
1205 1461 }
@@ -1204,11 +1460,30 @@
1204 1460 }
1205 1461 }
1206 1462 }
1207 1463
1208 - $where = array('fi.form_id' => (int) $template->get('item'));
1209 - $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 + }
1210 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 +
1211 1486 $new_ids = array();
1212 1487 $new_keys = array();
1213 1488
1214 1489 foreach ($fields as $field_key => $field) {
@@ -1215,13 +1490,14 @@
1215 1490
1216 1491 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1217 1492 $sub_where = array('fi.form_id' => (int) $field->field_options['form_select']);
1218 1493 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1219 -
1220 1494 foreach ($sub_fields as $sub_field_key => $sub_field) {
1221 1495 $new_ids[] = $sub_field->id;
1222 1496 $new_keys[] = $sub_field->field_key;
1223 1497 }
1498 + $new_ids[] = $field->id;
1499 + $new_keys[] = $field->field_key;
1224 1500 } else {
1225 1501 $new_ids[] = $field->id;
1226 1502 $new_keys[] = $field->field_key;
1227 1503 }
@@ -1247,13 +1523,13 @@
1247 1523
1248 1524 return $pages;
1249 1525 }
1250 1526
1251 - public function filter_e2pdf_controller_templates_import_replace_shortcodes($value, $options, $xml, $template, $extension) {
1527 + public function filter_e2pdf_controller_templates_import_actions($actions, $options, $xml, $template, $extension) {
1252 1528
1253 1529 if ($extension->loaded('formidable') &&
1254 1530 $template->get('item') &&
1255 - $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))) &&
1256 1532 $xml->item->formidable &&
1257 1533 $options['item'] &&
1258 1534 class_exists('FrmXMLHelper') &&
1259 1535 class_exists('FrmField')
@@ -1259,11 +1535,11 @@
1259 1535 class_exists('FrmField')
1260 1536 ) {
1261 1537
1262 1538 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
1263 - file_put_contents($tmp, base64_decode((String) $xml->item->formidable));
1539 + file_put_contents($tmp, base64_decode((string) $xml->item->formidable), LOCK_EX);
1264 1540
1265 - $dom = new DOMDocument;
1541 + $dom = new DOMDocument();
1266 1542 $success = $dom->loadXML(file_get_contents($tmp));
1267 1543
1268 1544 $old_ids = array();
1269 1545 $old_keys = array();
@@ -1271,23 +1547,25 @@
1271 1547 if ($success && function_exists('simplexml_import_dom')) {
1272 1548 $item_xml = simplexml_import_dom($dom);
1273 1549
1274 1550 foreach ($item_xml->form as $form_key => $form) {
1275 - 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))) {
1276 1552 foreach ($form->field as $field_key => $field) {
1277 - $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
1278 1554 if (isset($field_options['form_select']) && $field_options['form_select']) {
1279 1555 foreach ($item_xml->form as $sub_form_key => $sub_form) {
1280 - if ((String) $sub_form->id == $field_options['form_select']) {
1556 + if ((string) $sub_form->id == $field_options['form_select']) {
1281 1557 foreach ($sub_form->field as $sub_field_key => $sub_field) {
1282 - $old_ids[] = (String) $sub_field->id;
1283 - $old_keys[] = (String) $sub_field->field_key;
1558 + $old_ids[] = (string) $sub_field->id;
1559 + $old_keys[] = (string) $sub_field->field_key;
1284 1560 }
1285 1561 }
1286 1562 }
1563 + $old_ids[] = (string) $field->id;
1564 + $old_keys[] = (string) $field->field_key;
1287 1565 } else {
1288 - $old_ids[] = (String) $field->id;
1289 - $old_keys[] = (String) $field->field_key;
1566 + $old_ids[] = (string) $field->id;
1567 + $old_keys[] = (string) $field->field_key;
1290 1568 }
1291 1569 }
1292 1570 }
1293 1571 }
@@ -1292,11 +1570,31 @@
1292 1570 }
1293 1571 }
1294 1572 }
1295 1573
1296 - $where = array('fi.form_id' => (int) $template->get('item'));
1297 - $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 + }
1298 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 +
1299 1597 $new_ids = array();
1300 1598 $new_keys = array();
1301 1599
1302 1600 foreach ($fields as $field_key => $field) {
@@ -1303,13 +1601,129 @@
1303 1601
1304 1602 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1305 1603 $sub_where = array('fi.form_id' => (int) $field->field_options['form_select']);
1306 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 + }
1307 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');
1308 1720 foreach ($sub_fields as $sub_field_key => $sub_field) {
1309 1721 $new_ids[] = $sub_field->id;
1310 1722 $new_keys[] = $sub_field->field_key;
1311 1723 }
1724 + $new_ids[] = $field->id;
1725 + $new_keys[] = $field->field_key;
1312 1726 } else {
1313 1727 $new_ids[] = $field->id;
1314 1728 $new_keys[] = $field->field_key;
1315 1729 }
@@ -1332,9 +1746,8 @@
1332 1746
1333 1747 unset($dom);
1334 1748 unlink($tmp);
1335 1749 }
1336 -
1337 1750 return $value;
1338 1751 }
1339 1752
1340 1753 /**
@@ -1351,21 +1764,35 @@
1351 1764 }
1352 1765 }
1353 1766
1354 1767 /**
1355 - * Fix for user_id shortcode
1356 - *
1357 - * @param object $template - Current Template
1358 - * @param object $extension - Loaded extension
1359 - *
1768 + * Fix to render E2Pdf shortcodes with beforeContent and afterContent inside Formidable Form View Preview
1360 1769 */
1361 - public function action_e2pdf_model_template_fill_pre($template, $extension) {
1362 - if ($extension->loaded("formidable")) {
1363 - if ($extension->get('dataset') && class_exists("FrmEntry") && is_admin()) {
1364 - $extension->set('user_id', get_current_user_id());
1365 - $entry = FrmEntry::getOne($extension->get('dataset'));
1366 - if ($entry) {
1367 - 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 + }
1368 1795 }
1369 1796 }
1370 1797 }
1371 1798 }
@@ -1370,25 +1797,55 @@
1370 1797 }
1371 1798 }
1372 1799
1373 1800 /**
1374 - * Revert Fix for user_id shortcode
1375 - *
1376 - * @param object $template - Current Template
1377 - * @param object $extension - Loaded extension
1378 - *
1801 + * Filter "get" shortcodes with beforeContent and afterContent inside Formidable Form View Preview
1802 + * @param type $content
1803 + * @return type
1379 1804 */
1380 - public function action_e2pdf_model_template_fill_after($template, $extension) {
1381 - if ($extension->loaded("formidable")) {
1382 - if ($extension->get('dataset') && class_exists("FrmEntry") && is_admin()) {
1383 - 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 + }
1384 1825 }
1385 1826 }
1827 + return $content;
1386 1828 }
1387 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 +
1388 1846 /**
1389 1847 * Auto Generate of Template for this extension
1390 - *
1391 1848 * @return array - List of elements
1392 1849 */
1393 1850 public function auto() {
1394 1851
@@ -1397,73 +1854,75 @@
1397 1854
1398 1855 $form_id = $this->get('item');
1399 1856
1400 1857 $fields = array();
1401 -
1402 1858 if (class_exists('FrmField')) {
1403 - $fields = FrmField::get_all_for_form($form_id);
1859 + $fields = FrmField::get_all_for_form($form_id, '', 'include', 'include');
1404 1860 }
1405 1861
1406 1862 if ($fields) {
1407 1863 foreach ($fields as $key => $field) {
1864 + $field_id = get_option('e2pdf_formidable_use_keys', '0') ? $field->field_key : $field->id;
1408 1865
1409 - $field_id = get_option('e2pdf_formidable_use_keys') ? $field->field_key : $field->id;
1410 -
1411 - if ($field->type === 'lookup' || $field->type === 'data') {
1412 -
1413 - $dynamic_field_id = false;
1414 - $dynamic_form_id = false;
1415 -
1416 - if ($field->type === 'lookup' && isset($field->field_options['get_values_field']) && isset($field->field_options['get_values_form'])) {
1417 -
1418 - $dynamic_form_id = $field->field_options['get_values_form'];
1419 - $dynamic_field_id = $field->field_options['get_values_field'];
1420 -
1421 - if (get_option('e2pdf_formidable_use_keys')) {
1422 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
1423 -
1424 - if ($dynamic_field_data) {
1425 - $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;
1426 1878 }
1427 1879 }
1428 - } elseif ($field->type === 'data' && isset($field->field_options['form_select']) && $field->field_options['form_select'] !== 'taxonomy' && class_exists('FrmField')) {
1429 1880
1430 - $dynamic_field_id = $field->field_options['form_select'];
1431 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
1432 -
1433 - if ($dynamic_field_data) {
1434 - $dynamic_form_id = $dynamic_field_data->form_id;
1435 -
1436 - if (get_option('e2pdf_formidable_use_keys')) {
1437 - $dynamic_field_id = $dynamic_field_data->field_key;
1438 - }
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'];
1439 1887 }
1888 + if ($frm_filter) {
1889 + remove_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings');
1890 + }
1891 + $field->options = $options;
1440 1892 }
1441 -
1442 1893 $field->type = $field->field_options['data_type'];
1443 - if ($dynamic_field_id && $dynamic_form_id) {
1444 - 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 + }
1445 1908
1446 - $field->options = array(
1447 - "[e2pdf-frm-entry-values id='$dynamic_form_id' field_id='$dynamic_field_id']"
1448 - );
1449 - } 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);
1450 1913
1451 - $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 + }
1452 1918
1453 - if (class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
1454 - $where = array(
1455 - 'it.form_id' => $dynamic_form_id
1456 - );
1457 -
1458 - $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
1459 - foreach ($entries_tmp as $key => $entry) {
1460 - $options[] = FrmEntryMeta::get_meta_value($entry, $dynamic_field_id);
1461 - }
1462 - }
1463 - $field->options = $options;
1919 + if ($frm_filter) {
1920 + remove_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings');
1464 1921 }
1922 + $field->options = $options;
1465 1923 }
1924 + $field->type = $field->field_options['data_type'];
1466 1925 }
1467 1926
1468 1927 /*
1469 1928 * Repeatable fields Field ID modification
@@ -1469,99 +1928,136 @@
1469 1928 * Repeatable fields Field ID modification
1470 1929 * @since 0.01.42
1471 1930 */
1472 1931 if ($field->type !== 'lookup' && $field->type !== 'data' && isset($field->form_id) && $field->form_id != $form_id) {
1473 - $field_id = $field_id . ":1";
1932 + $field_id = $field_id . ':1';
1474 1933 }
1475 1934
1476 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;
1477 1955 case 'html':
1478 1956 if ($field->description) {
1479 - $elements[] = $this->auto_field($field, array(
1480 - 'type' => 'e2pdf-html',
1481 - 'block' => true,
1482 - 'properties' => array(
1483 - 'top' => '20',
1484 - 'left' => '20',
1485 - 'right' => '20',
1486 - 'width' => '100%',
1487 - 'height' => 'auto',
1488 - 'value' => $field->description,
1489 - )
1490 - ));
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 + );
1491 1972 }
1492 1973 break;
1493 1974 case 'signature':
1494 - $elements[] = $this->auto_field($field, array(
1495 - 'type' => 'e2pdf-html',
1496 - 'block' => true,
1497 - 'properties' => array(
1498 - 'top' => '20',
1499 - 'left' => '20',
1500 - 'right' => '20',
1501 - 'width' => '100%',
1502 - 'height' => 'auto',
1503 - 'value' => $field->name,
1504 - )
1505 - ));
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 + );
1506 1990
1507 - $elements[] = $this->auto_field($field, array(
1508 - 'type' => 'e2pdf-signature',
1509 - 'properties' => array(
1510 - 'top' => '5',
1511 - 'width' => '100%',
1512 - 'height' => '150',
1513 - 'scale' => '1',
1514 - 'dimension' => '1',
1515 - 'value' => "[$field_id]"
1516 - )
1517 - ));
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 + );
1518 2005 break;
1519 2006 case 'scale':
1520 - $elements[] = $this->auto_field($field, array(
1521 - 'type' => 'e2pdf-html',
1522 - 'block' => true,
1523 - 'properties' => array(
1524 - 'top' => '20',
1525 - 'left' => '20',
1526 - 'right' => '20',
1527 - 'width' => '100%',
1528 - 'height' => 'auto',
1529 - 'value' => $field->name,
1530 - )
1531 - ));
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 + );
1532 2022
1533 2023 if (isset($field->options) && is_array($field->options)) {
1534 2024 $start = true;
1535 2025 foreach ($field->options as $opt_key => $option) {
1536 2026 if (is_array($option)) {
1537 - $elements[] = $this->auto_field($field, array(
1538 - 'type' => 'e2pdf-radio',
1539 - 'float' => $start ? false : true,
1540 - 'properties' => array(
1541 - 'top' => $start ? '5' : '0',
1542 - 'left' => $start ? '0' : '5',
1543 - 'width' => 'auto',
1544 - 'height' => 'auto',
1545 - 'value' => "[$field_id]",
1546 - 'option' => $option['value'],
1547 - 'group' => "group_" . $field_id
1548 - )
1549 - ));
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 + );
1550 2043 } else {
1551 - $elements[] = $this->auto_field($field, array(
1552 - 'type' => 'e2pdf-radio',
1553 - 'float' => $start ? false : true,
1554 - 'properties' => array(
1555 - 'top' => $start ? '5' : '0',
1556 - 'left' => $start ? '0' : '5',
1557 - 'width' => 'auto',
1558 - 'height' => 'auto',
1559 - 'value' => "[$field_id]",
1560 - 'option' => $option,
1561 - 'group' => "group_" . $field_id
1562 - )
1563 - ));
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 + );
1564 2060 }
1565 2061
1566 2062 $start = false;
1567 2063 }
@@ -1569,33 +2065,39 @@
1569 2065 $start = true;
1570 2066 foreach ($field->options as $opt_key => $option) {
1571 2067 if (is_array($option)) {
1572 2068
1573 - $elements[] = $this->auto_field($field, array(
1574 - 'type' => 'e2pdf-html',
1575 - 'float' => $start ? false : true,
1576 - 'properties' => array(
1577 - 'top' => $start ? '5' : '0',
1578 - 'left' => $start ? '0' : '5',
1579 - 'width' => 'auto',
1580 - 'height' => 'auto',
1581 - 'value' => $option['label'],
1582 - 'text_align' => 'center',
1583 - )
1584 - ));
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 + );
1585 2084 } else {
1586 - $elements[] = $this->auto_field($field, array(
1587 - 'type' => 'e2pdf-html',
1588 - 'float' => $start ? false : true,
1589 - 'properties' => array(
1590 - 'top' => $start ? '5' : '0',
1591 - 'left' => $start ? '0' : '5',
1592 - 'width' => 'auto',
1593 - 'height' => 'auto',
1594 - 'value' => $option,
1595 - 'text_align' => 'center',
1596 - )
1597 - ));
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 + );
1598 2100 }
1599 2101 $start = false;
1600 2102 }
1601 2103 }
@@ -1600,32 +2102,37 @@
1600 2102 }
1601 2103 }
1602 2104 break;
1603 2105 case 'rte':
1604 - $elements[] = $this->auto_field($field, array(
1605 - 'type' => 'e2pdf-html',
1606 - 'block' => true,
1607 - 'properties' => array(
1608 - 'top' => '20',
1609 - 'left' => '20',
1610 - 'right' => '20',
1611 - 'width' => '100%',
1612 - 'height' => 'auto',
1613 - 'value' => $field->name,
1614 - )
1615 - ));
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 + );
1616 2121
1617 - $elements[] = $this->auto_field($field, array(
1618 - 'type' => 'e2pdf-html',
1619 - 'properties' => array(
1620 - 'top' => '5',
1621 - 'width' => '100%',
1622 - 'height' => '150',
1623 - 'value' => "[$field_id wpautop=0]"
1624 - )
1625 - ));
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 + );
1626 2134 break;
1627 - case 'file':
1628 2135 case 'text':
1629 2136 case 'email':
1630 2137 case 'url':
1631 2138 case 'number':
@@ -1630,57 +2137,151 @@
1630 2137 case 'url':
1631 2138 case 'number':
1632 2139 case 'phone':
1633 2140 case 'date':
1634 - case 'time':
1635 2141 case 'image':
1636 2142 case 'tag':
1637 2143 case 'password':
1638 - $elements[] = $this->auto_field($field, array(
1639 - 'type' => 'e2pdf-html',
1640 - 'block' => true,
1641 - 'properties' => array(
1642 - 'top' => '20',
1643 - 'left' => '20',
1644 - 'right' => '20',
1645 - 'width' => '100%',
1646 - 'height' => 'auto',
1647 - 'value' => $field->name,
1648 - )
1649 - ));
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 + );
1650 2160
1651 - if ($field->type == 'file') {
1652 - if (strpos($field_id, ':') !== false) {
1653 - $field_id .= " size='full' show_image='0' add_link='0'";
1654 - } else {
1655 - $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 + );
1656 2265 }
1657 2266 }
1658 -
1659 - $elements[] = $this->auto_field($field, array(
1660 - 'type' => 'e2pdf-input',
1661 - 'properties' => array(
1662 - 'top' => '5',
1663 - 'width' => '100%',
1664 - 'height' => 'auto',
1665 - 'value' => "[$field_id]",
1666 - 'pass' => $field->type === 'password' ? '1' : '0',
1667 - )
1668 - ));
1669 2267 break;
1670 2268 case 'select':
1671 - $elements[] = $this->auto_field($field, array(
1672 - 'type' => 'e2pdf-html',
1673 - 'block' => true,
1674 - 'properties' => array(
1675 - 'top' => '20',
1676 - 'left' => '20',
1677 - 'right' => '20',
1678 - 'width' => '100%',
1679 - 'height' => 'auto',
1680 - 'value' => $field->name,
1681 - )
1682 - ));
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 + );
1683 2284
1684 2285 $options_tmp = array();
1685 2286 if (isset($field->options) && is_array($field->options)) {
1686 2287 foreach ($field->options as $opt_key => $option) {
@@ -1691,198 +2292,664 @@
1691 2292 }
1692 2293 }
1693 2294 }
1694 2295
1695 - $elements[] = $this->auto_field($field, array(
1696 - 'type' => 'e2pdf-select',
1697 - 'properties' => array(
1698 - 'top' => '5',
1699 - 'width' => '100%',
1700 - 'height' => 'auto',
1701 - 'options' => implode("\n", $options_tmp),
1702 - 'value' => "[$field_id]",
1703 - 'height' => isset($field->field_options['multiple']) && $field->field_options['multiple'] ? '80' : 'auto',
1704 - 'multiline' => isset($field->field_options['multiple']) && $field->field_options['multiple'] ? '1' : '0',
1705 - )
1706 - ));
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 + );
1707 2311 break;
1708 2312 case 'credit_card':
1709 - case 'address':
1710 - $elements[] = $this->auto_field($field, array(
1711 - 'type' => 'e2pdf-html',
1712 - 'block' => true,
1713 - 'properties' => array(
1714 - 'top' => '20',
1715 - 'left' => '20',
1716 - 'right' => '20',
1717 - 'width' => '100%',
1718 - 'height' => 'auto',
1719 - 'value' => $field->name,
1720 - )
1721 - ));
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 + );
1722 2328
1723 - $elements[] = $this->auto_field($field, array(
1724 - 'type' => 'e2pdf-textarea',
1725 - 'properties' => array(
1726 - 'top' => '5',
1727 - 'width' => '100%',
1728 - 'height' => '150',
1729 - 'value' => "[$field_id]",
1730 - )
1731 - ));
1732 - break;
1733 - case 'textarea':
1734 - $elements[] = $this->auto_field($field, array(
1735 - 'type' => 'e2pdf-html',
1736 - 'block' => true,
1737 - 'properties' => array(
1738 - 'top' => '20',
1739 - 'left' => '20',
1740 - 'right' => '20',
1741 - 'width' => '100%',
1742 - 'height' => 'auto',
1743 - 'value' => $field->name,
1744 - )
1745 - ));
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 + );
1746 2341
1747 - $elements[] = $this->auto_field($field, array(
1748 - 'type' => 'e2pdf-textarea',
1749 - 'properties' => array(
1750 - 'top' => '5',
1751 - 'width' => '100%',
1752 - 'height' => '150',
1753 - 'value' => "[$field_id wpautop=0]",
1754 - )
1755 - ));
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 + );
2356 +
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 + );
2372 +
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 + );
1756 2387 break;
1757 - case 'radio':
1758 - $elements[] = $this->auto_field($field, array(
1759 - 'type' => 'e2pdf-html',
1760 - 'block' => true,
1761 - 'properties' => array(
1762 - 'top' => '20',
1763 - 'left' => '20',
1764 - 'right' => '20',
1765 - 'width' => '100%',
1766 - 'height' => 'auto',
1767 - 'value' => $field->name,
1768 - )
1769 - ));
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 + );
1770 2404
1771 - if (isset($field->options) && is_array($field->options)) {
1772 -
1773 - foreach ($field->options as $opt_key => $option) {
1774 - if (is_array($option)) {
1775 - $elements[] = $this->auto_field($field, array(
1776 - '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',
1777 2410 'properties' => array(
1778 2411 'top' => '5',
1779 - 'width' => 'auto',
2412 + 'width' => '100%',
1780 2413 'height' => 'auto',
1781 - 'value' => "[$field_id]",
1782 - 'option' => $option['label'],
1783 - 'group' => "[$field_id]",
1784 - )
1785 - ));
1786 - $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(
1787 2437 'type' => 'e2pdf-html',
1788 - 'float' => true,
1789 2438 'properties' => array(
1790 - 'left' => '5',
2439 + 'top' => '5',
1791 2440 'width' => '100%',
1792 2441 'height' => 'auto',
1793 - '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 + ),
1794 2481 )
1795 - ));
1796 - } else {
2482 + );
2483 + $float = true;
2484 + }
1797 2485
1798 - $elements[] = $this->auto_field($field, array(
1799 - 'type' => 'e2pdf-radio',
1800 - 'properties' => array(
1801 - 'top' => '5',
1802 - 'width' => 'auto',
1803 - 'height' => 'auto',
1804 - 'value' => "[$field_id]",
1805 - 'option' => $option,
1806 - '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 + ),
1807 2505 )
1808 - ));
1809 - $elements[] = $this->auto_field($field, array(
2506 + );
2507 + $float = true;
2508 + }
2509 +
2510 + $elements[] = $this->auto_field(
2511 + $field,
2512 + array(
1810 2513 'type' => 'e2pdf-html',
1811 - 'float' => true,
2514 + 'float' => $float,
1812 2515 'properties' => array(
1813 - 'left' => '5',
1814 - 'width' => '100%',
2516 + 'top' => '5',
2517 + 'left' => $float ? '20' : '0',
2518 + 'width' => '33.3%',
1815 2519 'height' => 'auto',
1816 - '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 + ),
1817 2540 )
1818 - ));
1819 - }
2541 + );
1820 2542 }
1821 2543 }
1822 - break;
1823 - case 'checkbox':
1824 - $elements[] = $this->auto_field($field, array(
1825 - 'type' => 'e2pdf-html',
1826 - 'block' => true,
1827 - 'properties' => array(
1828 - 'top' => '20',
1829 - 'left' => '20',
1830 - 'right' => '20',
1831 - 'width' => '100%',
1832 - 'height' => 'auto',
1833 - 'value' => $field->name,
1834 - )
1835 - ));
1836 2544
1837 - if (isset($field->options) && is_array($field->options)) {
1838 - foreach ($field->options as $opt_key => $option) {
1839 - if (is_array($option)) {
1840 - $elements[] = $this->auto_field($field, array(
1841 - '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,
1842 2552 'properties' => array(
1843 2553 'top' => '5',
1844 - 'width' => 'auto',
2554 + 'left' => $float ? '20' : '0',
2555 + 'width' => '33.3%',
1845 2556 'height' => 'auto',
1846 - 'value' => "[$field_id]",
1847 - '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 + ),
1848 2589 )
1849 - ));
1850 - $elements[] = $this->auto_field($field, array(
1851 - 'type' => 'e2pdf-html',
1852 - 'float' => true,
1853 - 'properties' => array(
1854 - 'left' => '5',
1855 - 'width' => '100%',
1856 - 'height' => 'auto',
1857 - '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 + ),
1858 2604 )
1859 - ));
1860 - } else {
1861 - $elements[] = $this->auto_field($field, array(
1862 - '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,
1863 2632 'properties' => array(
1864 2633 'top' => '5',
1865 - 'width' => 'auto',
2634 + 'left' => $float ? '20' : '0',
2635 + 'width' => '33.3%',
1866 2636 'height' => 'auto',
1867 - 'value' => "[$field_id]",
1868 - '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 + ),
1869 2655 )
1870 - ));
1871 - $elements[] = $this->auto_field($field, array(
1872 - 'type' => 'e2pdf-html',
1873 - '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',
1874 2668 'properties' => array(
1875 - 'left' => '5',
2669 + 'top' => '5',
1876 2670 'width' => '100%',
1877 2671 'height' => 'auto',
1878 - 'value' => $option
1879 - )
1880 - ));
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 + }
1881 2844 }
1882 2845 }
1883 2846 }
1884 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 + );
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;
1885 2952 default:
1886 2953 break;
1887 2954 }
1888 2955 }
@@ -1891,9 +2958,9 @@
1891 2958 $response['page'] = array(
1892 2959 'bottom' => '20',
1893 2960 'top' => '20',
1894 2961 'right' => '20',
1895 - 'left' => '20'
2962 + 'left' => '20',
1896 2963 );
1897 2964
1898 2965 $response['elements'] = $elements;
1899 2966 return $response;
@@ -1900,13 +2967,11 @@
1900 2967 }
1901 2968
1902 2969 /**
1903 2970 * Generate field for Auto PDF
1904 - *
1905 2971 * @param object $field - Formidable field object
1906 2972 * @param string $type - Field type
1907 2973 * @param array $options - Field additional options
1908 - *
1909 2974 * @return array - Prepared auto field
1910 2975 */
1911 2976 public function auto_field($field = false, $element = array()) {
1912 2977
@@ -1923,9 +2988,9 @@
1923 2988 }
1924 2989
1925 2990 $classes = array();
1926 2991 if (isset($field->field_options['classes'])) {
1927 - $classes = explode(" ", $field->field_options['classes']);
2992 + $classes = explode(' ', $field->field_options['classes']);
1928 2993 }
1929 2994
1930 2995 $float_classes = array(
1931 2996 'frm_half',
@@ -1936,9 +3001,9 @@
1936 3001 'frm_fifth',
1937 3002 'frm_two_fifths',
1938 3003 'frm_sixth',
1939 3004 'frm_seventh',
1940 - 'frm_eighth'
3005 + 'frm_eighth',
1941 3006 );
1942 3007
1943 3008 $array_intersect = array_intersect($classes, $float_classes);
1944 3009
@@ -1943,9 +3008,9 @@
1943 3008 $array_intersect = array_intersect($classes, $float_classes);
1944 3009
1945 3010 if (!empty($array_intersect) && !in_array('frm_first', $classes) && isset($element['block']) && $element['block']) {
1946 3011 $element['float'] = true;
1947 - };
3012 + }
1948 3013
1949 3014 $primary_class = false;
1950 3015 if (!empty($array_intersect)) {
1951 3016 $primary_class = end($array_intersect);
@@ -1992,9 +3057,8 @@
1992 3057 }
1993 3058
1994 3059 /**
1995 3060 * Backup form action
1996 - *
1997 3061 * @param object xml - XML object where to add params for saved item
1998 3062 */
1999 3063 public function backup($xml = false) {
2000 3064 if (class_exists('FrmXMLController')) {
@@ -1999,9 +3063,14 @@
1999 3063 public function backup($xml = false) {
2000 3064 if (class_exists('FrmXMLController')) {
2001 3065
2002 3066 $ids = array();
2003 - $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 + }
2004 3073
2005 3074 $type = array();
2006 3075 $type[] = 'forms';
2007 3076
@@ -2013,33 +3082,30 @@
2013 3082 }
2014 3083
2015 3084 /**
2016 3085 * Import form action
2017 - *
2018 3086 * @param object xml - XML object to parse data to import form
2019 3087 */
2020 - public function import($xml, $item, $options = array()) {
3088 + public function import($xml, $options = array()) {
2021 3089
2022 - $updated_item = '';
3090 + $updated_items = array();
2023 3091 $new_form = isset($options['formidable_item_new_form']) && $options['formidable_item_new_form'] ? true : false;
2024 3092
2025 - if (class_exists('FrmXMLHelper') && class_exists('FrmField')) {
3093 + if (class_exists('FrmXMLHelper') && class_exists('FrmField') && $this->get('item')) {
2026 3094
2027 - if ($xml->formidable) {
3095 + if (isset($xml->formidable) && $xml->formidable) {
2028 3096
2029 3097 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
2030 - file_put_contents($tmp, base64_decode((String) $xml->formidable));
3098 + file_put_contents($tmp, base64_decode((string) $xml->formidable), LOCK_EX);
2031 3099
2032 3100 if ($new_form) {
2033 3101 add_filter('frm_match_xml_form', array($this, 'filter_frm_match_xml_form'), 10, 2);
2034 3102 }
2035 -
2036 3103 $result = FrmXMLHelper::import_xml($tmp);
2037 3104
2038 3105 if ($new_form) {
2039 - remove_filter('frm_match_xml_form', array($this, 'filter_frm_match_xml_form'), 10);
3106 + remove_filter('frm_match_xml_form', array($this, 'filter_frm_match_xml_form'));
2040 3107 }
2041 -
2042 3108 unlink($tmp);
2043 3109
2044 3110 FrmXMLHelper::parse_message($result, $message, $errors);
2045 3111
@@ -2044,25 +3110,44 @@
2044 3110 FrmXMLHelper::parse_message($result, $message, $errors);
2045 3111
2046 3112 if ($errors) {
2047 3113 return array(
2048 - 'errors' => $errors
3114 + 'errors' => $errors,
2049 3115 );
2050 3116 } else {
2051 - if (isset($result['forms'][$item])) {
2052 - $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')];
2053 3126 }
2054 3127 }
2055 3128 }
2056 3129 }
2057 - return $updated_item;
3130 + return $updated_items;
2058 3131 }
2059 3132
2060 3133 public function after_import($old_template_id, $new_template_id) {
2061 - $item = $this->get('item');
2062 - if ($item && $old_template_id && $new_template_id) {
2063 - if (class_exists('FrmForm')) {
2064 - $form = FrmForm::getOne($item);
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);
2065 3150 if ($form) {
2066 3151 if (isset($form->options['success_msg'])) {
2067 3152 $success_msg = $this->replace_template_id($form->options['success_msg'], $old_template_id, $new_template_id);
2068 3153 if ($success_msg != $form->options['success_msg']) {
@@ -2067,23 +3152,24 @@
2067 3152 $success_msg = $this->replace_template_id($form->options['success_msg'], $old_template_id, $new_template_id);
2068 3153 if ($success_msg != $form->options['success_msg']) {
2069 3154 $update = array(
2070 3155 'options' => array(
2071 - 'success_msg' => $success_msg
2072 - )
3156 + 'success_msg' => $success_msg,
3157 + ),
2073 3158 );
2074 - FrmForm::update($item, $update);
3159 + FrmForm::update($form_id, $update);
2075 3160 }
2076 3161 }
2077 3162
2078 3163 if (class_exists('FrmFormAction')) {
2079 - $actions = FrmFormAction::get_action_for_form($item, 'email');
3164 + $actions = FrmFormAction::get_action_for_form($form_id, 'email');
2080 3165 foreach ($actions as $action) {
2081 3166 if (isset($action->post_content['email_message'])) {
2082 3167 $email_message = $this->replace_template_id($action->post_content['email_message'], $old_template_id, $new_template_id);
2083 3168 if ($email_message != $action->post_content['email_message']) {
2084 3169 $action->post_content['email_message'] = $email_message;
2085 - FrmFormAction::save_settings($action);
3170 + FrmFormAction::clear_cache();
3171 + FrmDb::save_settings($action, 'frm_actions');
2086 3172 }
2087 3173 }
2088 3174 }
2089 3175 }
@@ -2092,28 +3178,69 @@
2092 3178 }
2093 3179 return false;
2094 3180 }
2095 3181
2096 - public function replace_template_id($message = '', $old_template_id, $new_template_id) {
3182 + public function replace_template_id($message, $old_template_id, $new_template_id) {
2097 3183 $old_template_id = (int) $old_template_id;
2098 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 + }
2099 3188
2100 - $message = preg_replace('/\[(e2pdf-download|e2pdf-view|e2pdf-save|e2pdf-attachment|e2pdf-adobesign)(.*) id=(?:|\'|")' . $old_template_id . '(?:|\'|")(.*)\]/i', '[${1}${2} id=${3}' . $new_template_id . '${4}${5}]', $message);
2101 - return $message;
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;
2102 3231 }
2103 3232
2104 3233 /**
2105 3234 * Replace Old Formidable shortcodes to new values on pages
2106 - *
2107 3235 * @param array $pages - List of pages to replace shortcodes
2108 3236 * @param array $shortcodes_list - List of new/old shortcodes to replace
2109 - *
2110 3237 * @return array - List of updated pages
2111 3238 */
2112 3239 public function pages_replace_shortcodes($pages = array(), $shortcodes_list = array()) {
2113 3240
2114 3241 foreach ($pages as $page_key => $page) {
2115 - //replace page actions and conditions shortcodes
3242 + /* Replace page actions and conditions shortcodes */
2116 3243 if (isset($page['actions']) && !empty($page['actions'])) {
2117 3244 foreach ($page['actions'] as $action_key => $action_value) {
2118 3245 if (isset($action_value['change'])) {
2119 3246 $pages[$page_key]['actions'][$action_key]['change'] = $this->replace_shortcodes($action_value['change'], $shortcodes_list);
@@ -2135,9 +3262,21 @@
2135 3262
2136 3263 foreach ($page['elements'] as $element_key => $element_value) {
2137 3264 $pages[$page_key]['elements'][$element_key]['value'] = $this->replace_shortcodes($element_value['value'], $shortcodes_list);
2138 3265
2139 - //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 */
2140 3279 if (isset($element_value['actions']) && !empty($element_value['actions'])) {
2141 3280 foreach ($element_value['actions'] as $action_key => $action_value) {
2142 3281 if (isset($action_value['change'])) {
2143 3282 $pages[$page_key]['elements'][$element_key]['actions'][$action_key]['change'] = $this->replace_shortcodes($action_value['change'], $shortcodes_list);
@@ -2161,53 +3300,74 @@
2161 3300
2162 3301 return $pages;
2163 3302 }
2164 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 +
2165 3327 /**
2166 3328 * Replace Old Formidable shortcodes to new values
2167 - *
2168 3329 * @param string $content - Value that can contains old shortcodes
2169 3330 * @param array $shortcodes_list - List of new/old shortcodes to replace
2170 - *
2171 3331 * @return string - Updated value
2172 3332 */
2173 - public function replace_shortcodes($content = "", $shortcodes_list = array()) {
2174 -
3333 + public function replace_shortcodes($content = '', $shortcodes_list = array()) {
2175 3334 if (false === strpos($content, '[')) {
2176 3335 return $content;
2177 3336 }
2178 -
2179 3337 foreach ($shortcodes_list as $list_key => $list_value) {
2180 - $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);
2181 3339 }
2182 -
2183 3340 return $content;
2184 3341 }
2185 3342
2186 3343 /**
2187 3344 * Verify if item and dataset exists
2188 - *
2189 3345 * @return bool - item and dataset exists
2190 3346 */
2191 3347 public function verify() {
2192 - $item = $this->get('item');
2193 - $dataset = $this->get('dataset');
2194 -
2195 - if ($item && $dataset && class_exists('FrmEntry') && class_exists('FrmForm')) {
2196 - $entry = FrmEntry::getOne($dataset);
2197 - if (is_object($entry) && $entry->form_id == $item) {
2198 - return true;
3348 + $verify = false;
3349 + if ($this->get('item') == '-2') {
3350 + if ($this->get('cached_entry')) {
3351 + $verify = true;
3352 + } else {
3353 + $this->set('dataset', false);
2199 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;
2200 3362 }
2201 - return false;
3363 + return $verify;
2202 3364 }
2203 3365
2204 3366 /**
2205 3367 * Create Form based on uploaded PDF
2206 - *
2207 3368 * @param object $template - Template Object to work with
2208 - * @param array $data - Settings to create labels/shortcodes
2209 - *
3369 + * @param array $data - Settings to create labels/shortcodes
2210 3370 * @return object - Mapped Template Object
2211 3371 */
2212 3372 public function auto_form($template, $data = array()) {
2213 3373
@@ -2221,13 +3381,14 @@
2221 3381 'name' => $template->get('title'),
2222 3382 'description' => '',
2223 3383 'status' => 'published',
2224 3384 'options' => array(
2225 - 'success_msg' => sprintf(__('Success. [e2pdf-download id="%s"]', 'e2pdf'), $template->get('ID'))
2226 - )
3385 + 'success_msg' => sprintf(__('Success. [e2pdf-download id="%s"]', 'e2pdf'), $template->get('ID')),
3386 + ),
2227 3387 );
2228 3388
2229 - if ($item = FrmForm::create($form)) {
3389 + $item = FrmForm::create($form);
3390 + if ($item) {
2230 3391 $template->set('item', $item);
2231 3392
2232 3393 $checkboxes = array();
2233 3394 $radios = array();
@@ -2278,14 +3439,15 @@
2278 3439 $field_values['options'] = array();
2279 3440 }
2280 3441 }
2281 3442
2282 - if (!empty($field_values) && $field_id = FrmField::create($field_values)) {
3443 + $field_id = !empty($field_values) ? FrmField::create($field_values) : false;
3444 + if ($field_id) {
2283 3445 $field = FrmField::getOne($field_id);
2284 3446 $labels = array();
2285 3447
2286 3448 if ($auto_form_shortcode) {
2287 - $labels[] = get_option('e2pdf_formidable_use_keys') ? '[' . $field->field_key . ']' : '[' . $field->id . ']';
3449 + $labels[] = get_option('e2pdf_formidable_use_keys', '0') ? '[' . $field->field_key . ']' : '[' . $field->id . ']';
2288 3450 }
2289 3451
2290 3452 if ($auto_form_label && $auto_form_label == 'value' && isset($element['value']) && $element['value']) {
2291 3453 $labels[] = $element['value'];
@@ -2294,17 +3456,17 @@
2294 3456 }
2295 3457
2296 3458 if (!empty($labels)) {
2297 3459 $update = array(
2298 - 'name' => implode(' ', $labels)
3460 + 'name' => implode(' ', $labels),
2299 3461 );
2300 3462 FrmField::update($field_id, $update);
2301 3463 }
2302 3464
2303 3465 if ($element['type'] == 'e2pdf-textarea') {
2304 - $pages[$page_key]['elements'][$element_key]['value'] = get_option('e2pdf_formidable_use_keys') ? '[' . $field->field_key . ' wpautop=0]' : '[' . $field->id . ' wpautop=0]';
3466 + $pages[$page_key]['elements'][$element_key]['value'] = get_option('e2pdf_formidable_use_keys', '0') ? '[' . $field->field_key . ' wpautop=0]' : '[' . $field->id . ' wpautop=0]';
2305 3467 } else {
2306 - $pages[$page_key]['elements'][$element_key]['value'] = get_option('e2pdf_formidable_use_keys') ? '[' . $field->field_key . ']' : '[' . $field->id . ']';
3468 + $pages[$page_key]['elements'][$element_key]['value'] = get_option('e2pdf_formidable_use_keys', '0') ? '[' . $field->field_key . ']' : '[' . $field->id . ']';
2307 3469 }
2308 3470
2309 3471 if (isset($element['properties']['esig'])) {
2310 3472 unset($pages[$page_key]['elements'][$element_key]['properties']['esig']);
@@ -2316,9 +3478,9 @@
2316 3478 'element_id' => $field_id,
2317 3479 'field_id' => $field->id,
2318 3480 'options' => array(
2319 3481 $element['properties']['option'],
2320 - )
3482 + ),
2321 3483 );
2322 3484 } elseif ($element['type'] == 'e2pdf-radio') {
2323 3485 $radios[] = array(
2324 3486 'name' => $element['name'],
@@ -2325,9 +3487,9 @@
2325 3487 'element_id' => $field_id,
2326 3488 'field_id' => $field->id,
2327 3489 'options' => array(
2328 3490 $element['properties']['option'],
2329 - )
3491 + ),
2330 3492 );
2331 3493 }
2332 3494 }
2333 3495 }
@@ -2335,9 +3497,9 @@
2335 3497 }
2336 3498
2337 3499 foreach ($checkboxes as $element) {
2338 3500 $update = array(
2339 - 'options' => $element['options']
3501 + 'options' => $element['options'],
2340 3502 );
2341 3503 FrmField::update($element['field_id'], $update);
2342 3504 }
2343 3505
@@ -2342,9 +3504,9 @@
2342 3504 }
2343 3505
2344 3506 foreach ($radios as $element) {
2345 3507 $update = array(
2346 - 'options' => $element['options']
3508 + 'options' => $element['options'],
2347 3509 );
2348 3510 FrmField::update($element['field_id'], $update);
2349 3511 }
2350 3512
@@ -2356,48 +3518,65 @@
2356 3518 }
2357 3519
2358 3520 /**
2359 3521 * Init Visual Mapper data
2360 - *
2361 3522 * @return bool|string - HTML data source for Visual Mapper
2362 3523 */
2363 3524 public function visual_mapper() {
2364 3525
2365 - $item = $this->get('item');
2366 3526 $html = '';
2367 3527 $source = '';
2368 3528
2369 - if ($item && class_exists('FrmformsController')) {
2370 -
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 + }
2371 3535 if (class_exists('FrmProFieldsHelper')) {
2372 - 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);
2373 3537 }
2374 3538 add_filter('frm_show_new_entry_page', array($this, 'filter_frm_show_new_entry_page'), 99);
2375 - $source = FrmformsController::show_form($item, '', true, true);
2376 - 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')) {
2377 3542 remove_filter('frm_get_paged_fields', array($this, 'filter_remove_pagebreaks'), 9);
2378 3543 }
2379 3544 remove_filter('frm_show_new_entry_page', array($this, 'filter_frm_show_new_entry_page'), 99);
2380 -
3545 + remove_filter('frm_pre_display_form', array($this, 'filter_frm_pre_display_form'));
2381 3546 if ($source) {
2382 - libxml_use_internal_errors(true);
2383 3547 $dom = new DOMDocument();
2384 - if (function_exists('mb_convert_encoding')) {
2385 - $html = $dom->loadHTML(mb_convert_encoding($source, 'HTML-ENTITIES', 'UTF-8'));
2386 - } else {
2387 - $html = $dom->loadHTML('<?xml encoding="UTF-8">' . $source);
2388 - }
2389 - libxml_clear_errors();
3548 + $html = $this->helper->load('convert')->load_html($source, $dom, true);
2390 3549 }
2391 -
2392 3550 if (!$source) {
2393 - return __('Form source is empty', 'e2pdf');
3551 + return '<div class="e2pdf-vm-error">' . __("The form source is empty or doesn't exist", 'e2pdf') . '</div>';
2394 3552 } elseif (!$html) {
2395 - return __('Form could not be parsed due incorrect HTML', 'e2pdf');
3553 + return '<div class="e2pdf-vm-error">' . __('The form could not be parsed due the incorrect HTML', 'e2pdf') . '</div>';
2396 3554 } else {
2397 3555
3556 + $xml = $this->helper->load('xml');
2398 3557 $xpath = new DomXPath($dom);
2399 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
2400 3579 $remove_by_class = array(
2401 3580 'frm_ajax_loading',
2402 3581 'wp-editor-tools',
2403 3582 'quicktags-toolbar',
@@ -2405,9 +3584,10 @@
2405 3584 'frm_range_value',
2406 3585 'star-rating',
2407 3586 'frm_repeat_buttons',
2408 3587 'frm_save_draft',
2409 - 'frm_final_submit'
3588 + 'frm_final_submit',
3589 + 'frm_verify',
2410 3590 );
2411 3591 foreach ($remove_by_class as $key => $class) {
2412 3592 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
2413 3593 foreach ($elements as $element) {
@@ -2414,44 +3594,42 @@
2414 3594 $element->parentNode->removeChild($element);
2415 3595 }
2416 3596 }
2417 3597
3598 + // remove by tag
2418 3599 $remove_by_tag = array(
2419 3600 'link',
2420 3601 'style',
2421 - 'script'
3602 + 'script',
2422 3603 );
2423 3604 foreach ($remove_by_tag as $key => $tag) {
2424 - $elements = $xpath->query("//{$tag}");
3605 + $elements = $xpath->query('//' . $tag);
2425 3606 foreach ($elements as $element) {
2426 3607 $element->parentNode->removeChild($element);
2427 3608 }
2428 3609 }
2429 3610
3611 + // remove classes
2430 3612 $remove_classes = array(
2431 3613 'wp-editor-container',
2432 - 'frm_logic_form'
3614 + 'frm_logic_form',
3615 + 'frm_pos_none',
2433 3616 );
2434 -
2435 3617 foreach ($remove_classes as $key => $class) {
2436 3618 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
2437 3619 foreach ($elements as $element) {
2438 - if ($element->attributes->getNamedItem("class")) {
2439 - $element->attributes->getNamedItem("class")->nodeValue = str_replace($class, '', $element->attributes->getNamedItem("class")->nodeValue);
2440 - }
3620 + $xml->set_node_value($element, 'class', str_replace($class, '', $xml->get_node_value($element, 'class')));
2441 3621 }
2442 3622 }
2443 3623
3624 + // remove styles
2444 3625 $remove_styles = array(
2445 - 'frm_toggle_container'
3626 + 'frm_toggle_container',
2446 3627 );
2447 -
2448 3628 foreach ($remove_styles as $key => $class) {
2449 3629 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
2450 3630 foreach ($elements as $element) {
2451 - if ($element->attributes->getNamedItem("style")) {
2452 - $element->attributes->getNamedItem("style")->nodeValue = '';
2453 - }
3631 + $xml->set_node_value($element, 'style', '');
2454 3632 }
2455 3633 }
2456 3634
2457 3635 /*
@@ -2457,24 +3635,24 @@
2457 3635 /*
2458 3636 * Metas patterns to replace field names
2459 3637 * @since 0.01.42
2460 3638 */
2461 - $metas_pattern = array(
2462 - '/item_meta\[(?:.*?)\]\[0\]\[(.*?)\](?:\[\])?/i' => '$1:1',
3639 + $metas_pattern = [
3640 + '/item_meta\[(?:.*?)\]\[0\]\[(.*?)\](?:\[\])?/i' => $child ? '$1' : '$1:1',
2463 3641 '/item_meta\[(.*?)\](\[\])?/i' => '$1',
2464 - );
3642 + ];
2465 3643
2466 - // Replace names
3644 + // replace names
2467 3645 $metas = $xpath->query("//*[contains(@name, 'item_meta')]");
2468 3646 foreach ($metas as $element) {
2469 - $field_id = preg_replace(array_keys($metas_pattern), $metas_pattern, $element->attributes->getNamedItem("name")->nodeValue);
2470 - 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')) {
2471 3649 if (strpos($field_id, ':') !== false) {
2472 - $repeat_data = explode(":", $field_id);
3650 + $repeat_data = explode(':', $field_id);
2473 3651 if (isset($repeat_data['0'])) {
2474 3652 $field_data = FrmField::getOne($repeat_data['0']);
2475 3653 if ($field_data) {
2476 - $field_id = $field_data->field_key . ":1";
3654 + $field_id = $field_data->field_key . ':1';
2477 3655 }
2478 3656 }
2479 3657 } else {
2480 3658 $field_data = FrmField::getOne($field_id);
@@ -2482,186 +3660,66 @@
2482 3660 $field_id = $field_data->field_key;
2483 3661 }
2484 3662 }
2485 3663 }
2486 -
2487 - if ($element->attributes->getNamedItem("name")) {
2488 - $element->attributes->getNamedItem("name")->nodeValue = $field_id;
2489 - }
3664 + $xml->set_node_value($element, 'name', $field_id);
2490 3665 }
2491 3666
2492 - // Time field replace
2493 - $time_fields = $xpath->query("//div/select[contains(@class, 'frm_time_select')]/parent::*");
2494 - foreach ($time_fields as $key => $element) {
2495 - $span = $xpath->query("./span", $element)->item(0);
2496 - $select = $xpath->query("./select", $element)->item(0);
2497 -
2498 - if ($span && $select) {
2499 -
2500 - $span_cloned = $span->cloneNode(true);
2501 - $select_cloned = $select->cloneNode(true);
2502 -
2503 - foreach ($xpath->query("./select", $span_cloned) as $key => $sub_select) {
2504 - if ($sub_select->attributes->getNamedItem("class")) {
2505 - $sub_select->attributes->getNamedItem("class")->nodeValue = $sub_select->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
2506 - }
2507 - }
2508 -
2509 - if ($select_cloned->attributes->getNamedItem("class")) {
2510 - $select_cloned->attributes->getNamedItem("class")->nodeValue = $select_cloned->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
2511 - }
2512 -
2513 - $span->parentNode->removeChild($span);
2514 - $select->parentNode->removeChild($select);
2515 -
2516 - $wrapper = $dom->createElement('div');
2517 - $wrapper_atts = array(
2518 - 'class' => 'e2pdf-vm-field-wrapper',
2519 - );
2520 -
2521 - foreach ($wrapper_atts as $key => $value) {
2522 - $attr = $dom->createAttribute($key);
2523 - $attr->value = $value;
2524 - $wrapper->appendChild($attr);
2525 - }
2526 -
2527 - $field = $dom->createElement('input');
2528 -
2529 - $field_id = preg_replace('/\[(.*?)\]/i', '', $select_cloned->attributes->getNamedItem("name")->nodeValue);
2530 - if (get_option('e2pdf_formidable_use_keys') && class_exists("FrmField")) {
2531 - $field_data = FrmField::getOne($field_id);
2532 - if ($field_data) {
2533 - $field_id = $field_data->field_key;
2534 - }
2535 - }
2536 -
2537 - $field_atts = array(
2538 - 'type' => 'text',
2539 - 'class' => 'e2pdf-vm-field',
2540 - 'name' => $field_id
2541 - );
2542 -
2543 - foreach ($field_atts as $key => $value) {
2544 - $attr = $dom->createAttribute($key);
2545 - $attr->value = $value;
2546 - $field->appendChild($attr);
2547 - }
2548 -
2549 - $wrapper->appendChild($field);
2550 - $wrapper->appendChild($span_cloned);
2551 - $wrapper->appendChild($select_cloned);
2552 -
2553 - $element->appendChild($wrapper);
2554 - }
2555 - }
2556 -
2557 - // Combo fields
2558 3667 $frm_combo_inputs_container = $xpath->query("//*[contains(@class, 'frm_combo_inputs_container')]");
2559 3668 foreach ($frm_combo_inputs_container as $element) {
3669 + $inputs = $xpath->query('.//input', $element);
3670 + $selects = $xpath->query('.//select', $element);
2560 3671
2561 - $inputs = $xpath->query(".//input", $element);
2562 - $selects = $xpath->query(".//select", $element);
2563 -
2564 3672 foreach ($selects as $key => $sub_element) {
2565 - if ($sub_element->attributes->getNamedItem("class")) {
2566 - $sub_element->attributes->getNamedItem("class")->nodeValue = $sub_element->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
2567 - } else {
2568 - $class = $dom->createAttribute('class');
2569 - $class->value = 'e2pdf-no-vm';
2570 - $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);
2571 3678 }
2572 3679 }
2573 3680
2574 3681 foreach ($inputs as $key => $sub_element) {
2575 - if ($sub_element->attributes->getNamedItem("class")) {
2576 - $sub_element->attributes->getNamedItem("class")->nodeValue = $sub_element->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
2577 - } else {
2578 - $class = $dom->createAttribute('class');
2579 - $class->value = 'e2pdf-no-vm';
2580 - $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);
2581 3687 }
2582 3688 }
2583 -
2584 - $name = "";
2585 - if ($inputs->item(0)) {
2586 - $name = $inputs->item(0)->attributes->getNamedItem("name")->nodeValue;
2587 - } else {
2588 - $name = $selects->item(0)->attributes->getNamedItem("name")->nodeValue;
2589 - }
2590 -
2591 - $field_id = preg_replace('/\[(.*?)\]/i', '', $name);
2592 - if (get_option('e2pdf_formidable_use_keys') && class_exists("FrmField")) {
2593 - $field_data = FrmField::getOne($field_id);
2594 - if ($field_data) {
2595 - $field_id = $field_data->field_key;
2596 - }
2597 - }
2598 -
2599 - $field = $dom->createElement('input');
2600 - $field_atts = array(
2601 - 'type' => 'text',
2602 - 'class' => 'e2pdf-vm-field',
2603 - 'name' => $field_id
2604 - );
2605 -
2606 - foreach ($field_atts as $key => $value) {
2607 - $attr = $dom->createAttribute($key);
2608 - $attr->value = $value;
2609 - $field->appendChild($attr);
2610 - }
2611 - $element->appendChild($field);
2612 -
2613 - if ($element->attributes->getNamedItem("class")) {
2614 - $element->attributes->getNamedItem("class")->nodeValue = $element->attributes->getNamedItem("class")->nodeValue . " e2pdf-vm-field-wrapper";
2615 - }
2616 3689 }
2617 3690
2618 3691 $frm_dropzone = $xpath->query("//*[contains(@class, 'frm_dropzone')]/parent::*");
2619 3692 foreach ($frm_dropzone as $element) {
2620 3693 $dropzone = $xpath->query(".//*[contains(@class, 'frm_dropzone')]", $element)->item(0);
2621 - $input = $xpath->query(".//input", $element)->item(0);
3694 + $input = $xpath->query('.//input', $element)->item(0);
2622 3695 if ($input && $dropzone) {
2623 3696 $input_cloned = $input->cloneNode(true);
2624 3697
2625 - if ($input_cloned->attributes->getNamedItem("type")) {
2626 - $input_cloned->attributes->getNamedItem("type")->nodeValue = 'text';
2627 - }
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;');
2628 3701
2629 - if ($input_cloned->attributes->getNamedItem("value")) {
2630 - $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"');
2631 3706 }
2632 3707
2633 - if ($input_cloned->attributes->getNamedItem("name")) {
2634 - if (strpos($input_cloned->attributes->getNamedItem("name")->nodeValue, ':') !== false) {
2635 - $input_cloned->attributes->getNamedItem("name")->nodeValue = $input_cloned->attributes->getNamedItem("name")->nodeValue . " size='full' show_image='0' add_link='0'";
2636 - } else {
2637 - $input_cloned->attributes->getNamedItem("name")->nodeValue = $input_cloned->attributes->getNamedItem("name")->nodeValue . " size='full'";
2638 - }
2639 - }
2640 -
2641 - $style = $dom->createAttribute('style');
2642 - $style->value = 'width: 100%; height: 200px; text-align: center;';
2643 - $input_cloned->appendChild($style);
2644 -
2645 3708 $input->parentNode->replaceChild($input_cloned, $input);
2646 3709 $dropzone->parentNode->removeChild($dropzone);
2647 3710 }
2648 3711 }
2649 3712
2650 - // Replace signature
3713 + // replace signature
2651 3714 $sigpad = $xpath->query("//*[contains(@class, 'sigPad')]");
2652 3715 foreach ($sigpad as $element) {
2653 - $input = $xpath->query(".//input", $element)->item(0);
3716 + $input = $xpath->query('.//input', $element)->item(0);
2654 3717 if ($input) {
2655 3718 $input_cloned = $input->cloneNode(true);
2656 3719
2657 - $style = $dom->createAttribute('style');
2658 - $style->value = 'width: 300px; height: 100px;';
2659 - $input_cloned->appendChild($style);
2660 -
2661 - $field_id = preg_replace('/\[(.*?)\]/i', '', $input_cloned->attributes->getNamedItem("name")->nodeValue);
2662 -
2663 - 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')) {
2664 3722 $field_data = FrmField::getOne($field_id);
2665 3723 if ($field_data) {
2666 3724 $field_id = $field_data->field_key;
2667 3725 }
@@ -2666,173 +3724,219 @@
2666 3724 $field_id = $field_data->field_key;
2667 3725 }
2668 3726 }
2669 3727
2670 - if ($input_cloned->attributes->getNamedItem("name")) {
2671 - $input_cloned->attributes->getNamedItem("name")->nodeValue = $field_id;
2672 - }
2673 -
3728 + $xml->set_node_value($input_cloned, 'style', 'width: 300px; height: 100px;');
3729 + $xml->set_node_value($input_cloned, 'name', $field_id);
2674 3730 $element->parentNode->replaceChild($input_cloned, $element);
2675 3731 }
2676 3732 }
2677 3733
2678 - // Replace names
2679 - $fields = $xpath->query("//input");
3734 + // replace names
3735 + $fields = $xpath->query('//input');
2680 3736 foreach ($fields as $element) {
2681 3737
2682 - if (class_exists('FrmField')) {
3738 + $image_options = false;
3739 + $separate_value = false;
2683 3740
2684 - 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')) {
2685 3742
2686 - $field_id = $element->attributes->getNamedItem("name")->nodeValue;
2687 - if (false !== strpos($element->attributes->getNamedItem("name")->nodeValue, ':')) {
2688 - $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;
2689 3769 }
2690 3770
2691 - $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 + }
2692 3786
2693 - if (isset($field_data->type) && $field_data->type === 'data' && isset($field_data->field_options['form_select'])) {
2694 - $dynamic_form_id = false;
2695 - $dynamic_field_id = false;
3787 + if (isset($field_data->options) && is_array($field_data->options)) {
2696 3788
2697 - $dynamic_field_id = $field_data->field_options['form_select'];
2698 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
2699 - if ($dynamic_field_data) {
2700 - $dynamic_form_id = $dynamic_field_data->form_id;
2701 - }
3789 + $field_options = $field_data->options;
3790 + $field_value = $xml->get_node_value($element, 'value');
2702 3791
2703 - $options = array();
2704 - if (class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
2705 - $where = array(
2706 - 'it.form_id' => $dynamic_form_id
2707 - );
2708 - $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
2709 - foreach ($entries_tmp as $key => $entry) {
2710 - $options[] = array(
2711 - 'label' => FrmEntryMeta::get_meta_value($entry, $dynamic_field_id),
2712 - 'value' => $key,
2713 - );
2714 - }
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;
2715 3797 }
2716 - $field_data->options = $options;
2717 3798 }
2718 3799
2719 - if (isset($field_data->options) && is_array($field_data->options)) {
2720 - $field_options = $field_data->options;
2721 - $field_value = $element->attributes->getNamedItem("value")->nodeValue;
2722 - $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);
2723 3811 if ($field_key !== false) {
2724 - $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 + }
2725 3817
2726 - if ($element->attributes->getNamedItem("value")) {
2727 - $element->attributes->getNamedItem("value")->nodeValue = $field_label;
2728 - }
2729 - }
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"';
2730 3831 }
2731 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 + }
2732 3837 }
2733 3838
2734 - if ($element->attributes->getNamedItem("name")) {
2735 - $element->attributes->getNamedItem("name")->nodeValue = "[" . $element->attributes->getNamedItem("name")->nodeValue . "]";
3839 + if (!$name) {
3840 + $name = $xml->get_node_value($element, 'name');
2736 3841 }
3842 +
3843 + $xml->set_node_value($element, 'name', '[' . $name . ']');
2737 3844 }
2738 3845
2739 - // Replace names
2740 - $textareas = $xpath->query("//textarea");
3846 + // replace names
3847 + $textareas = $xpath->query('//textarea');
2741 3848 foreach ($textareas as $element) {
2742 - if ($element->attributes->getNamedItem("name")) {
2743 - $element->attributes->getNamedItem("name")->nodeValue = "[" . $element->attributes->getNamedItem("name")->nodeValue . " wpautop=0]";
2744 - }
3849 + $xml->set_node_value($element, 'name', '[' . $xml->get_node_value($element, 'name') . ' wpautop=0]');
2745 3850 }
2746 3851
2747 - // Replace names
2748 - $selects = $xpath->query("//select");
3852 + // replace names
3853 + $selects = $xpath->query('//select');
2749 3854 foreach ($selects as $element) {
2750 3855
2751 3856 if (class_exists('FrmField')) {
2752 3857
2753 - $options = $xpath->query(".//option", $element);
3858 + $options = $xpath->query('.//option', $element);
3859 + $field_id = $xml->get_node_value($element, 'name');
2754 3860
2755 - $field_id = $element->attributes->getNamedItem("name")->nodeValue;
2756 - if (false !== strpos($element->attributes->getNamedItem("name")->nodeValue, ':')) {
2757 - $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'), ':'));
2758 3864 }
3865 + $field_id = str_replace(array('[H]', '[m]', '[A]'), '', $field_id);
2759 3866
2760 3867 $field_data = FrmField::getOne($field_id);
2761 -
2762 - if (isset($field_data->type) && ($field_data->type === 'lookup' || $field_data->type === 'data')) {
2763 - $dynamic_form_id = false;
2764 - $dynamic_field_id = false;
2765 -
2766 - if ($field_data->type === 'lookup' && isset($field_data->field_options['get_values_field']) && isset($field_data->field_options['get_values_form'])) {
2767 - $dynamic_form_id = $field_data->field_options['get_values_form'];
2768 - $dynamic_field_id = $field_data->field_options['get_values_field'];
2769 -
2770 - if (get_option('e2pdf_formidable_use_keys')) {
2771 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
2772 -
2773 - if ($dynamic_field_data) {
2774 - $dynamic_field_id = $dynamic_field_data->field_key;
2775 - }
2776 - }
2777 - } elseif ($field_data->type === 'data' && isset($field_data->field_options['form_select'])) {
2778 - $dynamic_field_id = $field_data->field_options['form_select'];
2779 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
2780 -
2781 - if ($dynamic_field_data) {
2782 - $dynamic_form_id = $dynamic_field_data->form_id;
2783 -
2784 - if (get_option('e2pdf_formidable_use_keys')) {
2785 - $dynamic_field_id = $dynamic_field_data->field_key;
2786 - }
2787 - }
3868 + if (isset($field_data->type) && $field_data->type === 'lookup') {
3869 + foreach ($options as $option) {
3870 + $option->parentNode->removeChild($option);
2788 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 + }
2789 3908
2790 - if ($dynamic_form_id && $dynamic_field_id) {
2791 -
2792 - foreach ($options as $option) {
2793 - $option->parentNode->removeChild($option);
2794 - }
2795 -
2796 - $wrapper = $dom->createElement('option');
2797 - $wrapper_atts = array(
2798 - 'value' => "[e2pdf-frm-entry-values id='{$dynamic_form_id}' field_id='{$dynamic_field_id}']",
2799 - );
2800 - foreach ($wrapper_atts as $key => $value) {
2801 - $attr = $dom->createAttribute($key);
2802 - $attr->value = $value;
2803 - $wrapper->appendChild($attr);
2804 - }
2805 - $element->appendChild($wrapper);
2806 - }
2807 - } else if (isset($field_data->options) && is_array($field_data->options)) {
3909 + if (isset($field_data->options) && is_array($field_data->options)) {
2808 3910 $field_options = $field_data->options;
2809 3911 foreach ($options as $option) {
2810 - $field_value = $option->attributes->getNamedItem("value")->nodeValue;
3912 + $field_value = $xml->get_node_value($option, 'value');
2811 3913 foreach ($field_options as $field_option) {
2812 3914 if (isset($field_option['value']) && $field_option['value'] === $field_value) {
2813 3915 $field_label = isset($field_option['label']) ? $field_option['label'] : $field_value;
2814 - if ($option->attributes->getNamedItem("value")) {
2815 - $option->attributes->getNamedItem("value")->nodeValue = $field_label;
2816 - }
3916 + $xml->set_node_value($option, 'value', $field_label);
2817 3917 }
2818 3918 }
2819 3919 }
2820 3920 }
2821 3921 }
3922 + $xml->set_node_value($element, 'name', '[' . $xml->get_node_value($element, 'name') . ']');
3923 + }
2822 3924
2823 - if ($element->attributes->getNamedItem("name")) {
2824 - $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')));
2825 3931 }
2826 3932 }
2827 3933
2828 - if ($xpath->query("//form")->item(0) && class_exists('FrmStylesHelper')) {
2829 - $autocomplete = $dom->createAttribute('autocomplete');
2830 - $autocomplete->value = 'off';
2831 - $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();
2832 3938 }
2833 -
2834 - return $dom->saveHTML();
2835 3939 }
2836 3940 }
2837 3941 return false;
2838 3942 }
@@ -2839,11 +3943,9 @@
2839 3943
2840 3944 /**
2841 3945 * Convert Field name to Value
2842 3946 * @since 0.01.34
2843 - *
2844 3947 * @param string $name - Field name
2845 - *
2846 3948 * @return bool|string - Converted value or false
2847 3949 */
2848 3950 public function auto_map($name = false) {
2849 3951
@@ -2848,19 +3950,25 @@
2848 3950 public function auto_map($name = false) {
2849 3951
2850 3952 $item = $this->get('item');
2851 3953
2852 - if ($item && class_exists("FrmField")) {
2853 - $where = array('fi.form_id' => (int) $item,
2854 - "(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 + ),
2855 3962 );
2856 3963 $field = FrmField::getAll($where, 'id ASC', '1');
2857 3964
2858 3965 if ($field && is_object($field)) {
3966 + $field_id = get_option('e2pdf_formidable_use_keys', '0') ? $field->field_key : $field->id;
2859 3967 if ($field->type == 'textarea' || $field->type == 'rte') {
2860 - return "[" . $field->id . " wpautop=0]";
3968 + return '[' . $field_id . ' wpautop=0]';
2861 3969 } else {
2862 - return "[" . $field->id . "]";
3970 + return '[' . $field_id . ']';
2863 3971 }
2864 3972 }
2865 3973 }
2866 3974
@@ -2871,31 +3979,29 @@
2871 3979 * Load additional shortcodes for this extension
2872 3980 */
2873 3981 public function load_shortcodes() {
2874 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'));
2875 3985 add_shortcode('e2pdf-frm-repeatable', array($this, 'shortcode_e2pdf_frm_repeatable'));
2876 3986 }
2877 3987
2878 3988 /**
2879 - * [e2pdf-frm-repeatable id='{entry_id}' field_id='{field_id}'] shortcode
2880 - *
3989 + * [e2pdf-frm-repeatable id="entry_id' field_id="field_id"] shortcode
2881 3990 * @param array $atts - Atributes for shortcode
2882 - *
2883 - * @return string - Output of shortcodes
3991 + * @return string - Output of shortcode
2884 3992 */
2885 3993 public function shortcode_e2pdf_frm_repeatable($atts = array()) {
2886 3994 $id = (int) $atts['id'];
2887 3995 $field_id = $atts['field_id'];
2888 3996
2889 - $response = "[frm-field-value field_id='{$field_id}' entry='{$id}']";
3997 + $response = '[frm-field-value field_id="' . $field_id . '" entry="' . $id . '"]';
2890 3998 return $response;
2891 3999 }
2892 4000
2893 4001 /**
2894 4002 * [e2pdf-frm-entry-values id='{form_id}' field_id='{field_id}' separator=''] shortcode
2895 - *
2896 4003 * @param array $atts - Atributes for shortcode
2897 - *
2898 4004 * @return string - Output of shortcodes
2899 4005 */
2900 4006 public function shortcode_e2pdf_frm_entry_values($atts = array()) {
2901 4007 $form_id = (int) $atts['id'];
@@ -2904,10 +4010,11 @@
2904 4010
2905 4011 $response = '';
2906 4012 $values = array();
2907 4013 if ($form_id && $field_id && class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
4014 +
2908 4015 $where = array(
2909 - 'it.form_id' => $form_id
4016 + 'it.form_id' => $form_id,
2910 4017 );
2911 4018 $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
2912 4019 foreach ($entries_tmp as $key => $entry) {
2913 4020 $values[] = FrmEntryMeta::get_meta_value($entry, $field_id);
@@ -2917,13 +4024,125 @@
2917 4024 return $response;
2918 4025 }
2919 4026
2920 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 + /**
2921 4141 * Get styles for generating Map Field function
2922 - *
2923 4142 * @return array - List of css files to load
2924 4143 */
2925 - public function styles() {
4144 + public function styles($item_id = false) {
2926 4145
2927 4146 $styles = array();
2928 4147 if (class_exists('FrmStylesHelper')) {
2929 4148 $uploads = FrmStylesHelper::get_upload_base();
@@ -2932,12 +4151,136 @@
2932 4151 $url = $uploads['baseurl'] . $saved_css_path;
2933 4152 } else {
2934 4153 $url = admin_url('admin-ajax.php?action=frmpro_css');
2935 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 + }
2936 4160
2937 - $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 + }
2938 4204 }
4205 + }
2939 4206
2940 - 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 + }
2941 4247 }
2942 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 + }
2943 4286 }