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