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