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