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 -1184 1.02.02 → 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,188 +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 - if ($type === 'value') {
240 - $value = str_replace("&#91;", "[", $value);
241 - }
242 -
243 289 return $value;
244 290 }
245 291
246 292 /**
@@ -247,10 +293,16 @@
247 293 * Load actions for this extension
248 294 */
249 295 public function load_actions() {
250 296 add_action('frm_notification', array($this, 'action_frm_notification'), 30, 3);
251 - add_action('e2pdf_model_template_fill_pre', array($this, 'action_e2pdf_model_template_fill_pre'), 10, 2);
252 - 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'));
253 305 }
254 306
255 307 /**
256 308 * Load filters for this extension
@@ -255,105 +307,127 @@
255 307 /**
256 308 * Load filters for this extension
257 309 */
258 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 +
259 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);
260 322 add_filter('frm_notification_attachment', array($this, 'filter_frm_notification_attachment'), 30, 3);
261 - 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
262 327 add_filter('e2pdf_controller_templates_backup_options', array($this, 'filter_e2pdf_controller_templates_backup_options'), 10, 3);
263 -
264 328 add_filter('e2pdf_controller_templates_backup_pages', array($this, 'filter_e2pdf_controller_templates_backup_pages'), 10, 4);
265 - add_filter('e2pdf_controller_templates_backup_dataset_title', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
266 - add_filter('e2pdf_controller_templates_backup_button_title', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
267 - add_filter('e2pdf_controller_templates_backup_name', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
268 - 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);
269 331
332 + // replace shortcodes on import
333 + add_filter('e2pdf_controller_templates_import_options', array($this, 'filter_e2pdf_controller_templates_import_options'), 10, 3);
270 334 add_filter('e2pdf_controller_templates_import_pages', array($this, 'filter_e2pdf_controller_templates_import_pages'), 10, 5);
271 - add_filter('e2pdf_controller_templates_import_dataset_title', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
272 - add_filter('e2pdf_controller_templates_import_button_title', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
273 - add_filter('e2pdf_controller_templates_import_name', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
274 - 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 + });
275 353 }
276 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 +
277 364 /**
278 365 * Render shortcodes which available in this extension
279 - *
280 366 * @param string $value - Content
281 367 * @param string $type - Type of rendering value
282 368 * @param array $field - Field details
283 - *
284 369 * @return string - Value with rendered shortcodes
285 370 */
286 - public function render_shortcodes($value, $type = false, $field = array()) {
287 -
288 - $dataset = $this->get('dataset');
289 - $item = $this->get('item');
290 -
291 - $form = false;
292 - $entry = false;
293 - $maybe_checkbox_separated = false;
294 -
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;
295 377 if ($this->verify()) {
296 -
297 - $form = FrmForm::getOne($item);
298 - $entry = FrmEntry::getOne($dataset);
299 -
300 378 if (false !== strpos($value, '[')) {
301 -
302 - // Start render Separatable fields shortcode
379 + $value = $this->helper->load('field')->pre_shortcodes($value, $this, $field);
303 380 if (class_exists('FrmProEntry')) {
304 381 $shortcode_tags = array();
305 382 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
306 383 $tagnames = array_intersect($shortcode_tags, $matches[1]);
307 -
308 384 foreach ($matches[1] as $key => $shortcode) {
309 - if (strpos($shortcode, ':') !== false) {
385 + if (false !== strpos($shortcode, ':')) {
310 386 $shortcode_tags[] = $shortcode;
311 387 }
312 388 }
313 -
314 389 $tagnames = array_intersect($shortcode_tags, $matches[1]);
315 390 if (!empty($tagnames)) {
316 - $pattern = get_shortcode_regex($tagnames);
317 - preg_match_all("/$pattern/", $value, $shortcodes);
391 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
318 392 foreach ($shortcodes[0] as $key => $shortcode_value) {
319 - $shortcode = array();
320 - $shortcode[1] = $shortcodes[1][$key];
321 - $shortcode[2] = $shortcodes[2][$key];
322 - $shortcode[3] = $shortcodes[3][$key];
323 - $shortcode[4] = $shortcodes[4][$key];
324 - $shortcode[5] = $shortcodes[5][$key];
325 - $shortcode[6] = $shortcodes[6][$key];
326 -
327 - $shortcode_details = explode(":", $shortcode[2]);
328 -
393 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
394 + $shortcode_details = explode(':', $shortcode[2]);
329 395 $field_id = $shortcode_details['0'];
330 396 $child_id = $shortcode_details['1'];
331 397 $child_entry = 0;
332 -
333 398 $child_field = false;
334 399 $child_form = false;
335 -
336 - if (class_exists("FrmField")) {
400 + if (class_exists('FrmField')) {
337 401 $child_field = FrmField::getOne($field_id);
338 402 if ($child_field) {
339 403 $child_form = $child_field->form_id;
340 404 }
341 405 }
342 -
343 - $childs = FrmProEntry::get_sub_entries($dataset, true);
344 406 $child_entries = array();
345 -
346 - if ($childs && $child_form) {
347 - foreach ($childs as $child) {
348 - if ($child->form_id == $child_form) {
349 - $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 + }
350 414 }
351 415 }
352 416 }
353 -
354 - $new_shortcode = "";
355 -
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 = '';
356 430 if (!empty($child_entries) && count($child_entries) >= $child_id) {
357 431 $start = 1;
358 432 foreach ($child_entries as $key => $sub_entry) {
359 433 if ($start == $child_id) {
@@ -362,277 +436,398 @@
362 436 }
363 437 $start++;
364 438 }
365 439
366 - $shortcode[2] = "frm-field-value field_id={$field_id} entry={$child_entry}";
367 - $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] . ']';
368 442 }
369 -
370 - $maybe_checkbox_separated = true;
443 + $checkbox_separated = true;
371 444 $value = str_replace($shortcode_value, $new_shortcode, $value);
372 445 }
373 446 }
374 447 }
375 - // End render Separatable fields shortcode
376 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 */
377 469 $shortcode_tags = array(
378 - 'e2pdf-format-number',
379 - 'e2pdf-format-date',
380 - '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',
381 476 );
382 -
383 477 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
384 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 + }
385 514
386 - 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);
387 525
388 - $pattern = get_shortcode_regex($tagnames);
389 - preg_match_all("/$pattern/", $value, $shortcodes);
390 - foreach ($shortcodes[0] as $key => $shortcode_value) {
391 - $shortcode = array();
392 - $shortcode[1] = $shortcodes[1][$key];
393 - $shortcode[2] = $shortcodes[2][$key];
394 - $shortcode[3] = $shortcodes[3][$key];
395 - $shortcode[4] = $shortcodes[4][$key];
396 - $shortcode[5] = $shortcodes[5][$key];
397 - $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 + }
398 535
399 - if (isset($shortcode['5'])) {
400 - $sub_value = $this->strip_shortcodes(apply_filters('frm_content', $shortcode['5'], $form, $entry));
401 - $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);
402 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);
403 551 }
404 552 }
405 553 }
406 554
407 -
408 555 /*
409 556 * Checkboxes separatable fix filter add
410 557 * @since 0.01.43
411 558 */
412 - if ($maybe_checkbox_separated) {
559 + if ($checkbox_separated) {
413 560 add_filter('frm_display_value_custom', array($this, 'filter_frm_display_value_custom'), 0, 3);
414 561 }
415 562
416 - $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 + }
417 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 +
418 597 /*
419 598 * Checkboxes separatable fix filter remove
420 599 * @since 0.01.43
421 600 */
422 - if ($maybe_checkbox_separated) {
601 + if ($checkbox_separated) {
423 602 remove_filter('frm_display_value_custom', array($this, 'filter_frm_display_value_custom'), 0);
424 603 }
425 604
426 - $value = apply_filters('frm_content', $value, $form, $entry);
605 + add_filter('frmpro_fields_replace_shortcodes', array($this, 'filter_frmpro_fields_replace_shortcodes'), 20, 4);
427 606
428 - if (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
429 - $esig = isset($field['properties']['esig']) && $field['properties']['esig'] ? true : false;
430 - if ($esig) {
431 - //process e-signature
432 - $value = "";
433 - } else {
434 - preg_match('/src="([^"]*)"/', $value, $matches);
435 -
436 - if (isset($matches[1])) {
437 - $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'));
438 619 }
439 -
440 - if (!$this->helper->load('image')->get_image($value)) {
441 - $value = $this->strip_shortcodes($value);
442 - if (
443 - $value &&
444 - trim($value) != "" &&
445 - extension_loaded('gd') &&
446 - function_exists('imagettftext')
447 - ) {
448 - if (isset($field['properties']['text_color']) && $field['properties']['text_color']) {
449 - $penColour = $this->helper->load('convert')->to_hex_color($field['properties']['text_color']);
450 - } else {
451 - $penColour = array(0x14, 0x53, 0x94);
452 - }
453 -
454 - $default_options = array(
455 - 'imageSize' => array(isset($field['width']) ? $field['width'] : '400', isset($field['height']) ? $field['height'] : '150'),
456 - 'bgColour' => 'transparent',
457 - 'penColour' => $penColour
458 - );
459 -
460 - $options = array();
461 - $options = apply_filters('e2pdf_frm_sig_output_options', $options, $field_id);
462 - $options = array_merge($default_options, $options);
463 -
464 - $model_e2pdf_font = new Model_E2pdf_Font();
465 -
466 - $font = false;
467 - if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
468 - $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
469 - } elseif (class_exists('FrmSigAppHelper')) {
470 - if (file_exists(FrmSigAppHelper::plugin_path() . '/assets/journal.ttf')) {
471 - $font = FrmSigAppHelper::plugin_path() . '/assets/journal.ttf';
472 - }
473 - }
474 -
475 - if (!$font) {
476 - $font = $model_e2pdf_font->get_font_path('Noto Sans');
477 - }
478 -
479 - $size = 150;
480 - if (isset($field['properties']['text_font_size']) && $field['properties']['text_font_size']) {
481 - $size = $field['properties']['text_font_size'];
482 - }
483 -
484 - $model_e2pdf_signature = new Model_E2pdf_Signature();
485 - $value = $model_e2pdf_signature->ttf_signature($value, $size, $font, $options);
486 - } else {
487 - $value = "";
488 - }
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'));
489 624 }
490 625 }
491 - }
492 -
493 - if ((false !== strpos($value, '[referer]') || false !== strpos($value, '[browser]')) && isset($entry->description)) {
494 - $description = maybe_unserialize($entry->description);
495 - $referer = "";
496 - if (isset($description['referrer'])) {
497 - if (@preg_match('/Referer +\d+\:[ \t]+([^\n\t]+)/', $description['referrer'], $m)) {
498 - $referer = $m[1];
499 - } else {
500 - $referer = $description['referrer'];
501 - }
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);
502 630 }
503 -
504 - $browser = "";
505 - if (isset($description['browser'])) {
506 - $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);
507 635 }
636 + }
508 637
509 - $replace = array(
510 - 'from' => array(
511 - '[referer]',
512 - '[browser]'
513 - ),
514 - 'to' => array(
515 - $referer,
516 - $browser
517 - )
518 - );
519 - $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);
520 642 }
521 643
522 - if (false !== strpos($value, '[entry_num]')) {
523 - $entry_num = '';
524 - if (class_exists("FrmDb")) {
525 - $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 + }
526 652 }
527 -
528 - $replace = array(
529 - 'from' => array(
530 - '[entry_num]'
531 - ),
532 - 'to' => array(
533 - $entry_num
534 - )
535 - );
536 - $value = str_replace($replace['from'], $replace['to'], $value);
653 + $value = $this->helper->load('field')->inner_shortcodes($value, $this, $field);
537 654 }
538 655
539 - if (false !== strpos($value, '[pdf_num]')) {
540 - $pdf_num = '0';
541 - $uid = $this->get('uid');
542 - if ($uid) {
543 - $entry = new Model_E2pdf_Entry();
544 - if ($entry->load_by_uid($uid)) {
545 - $pdf_num = $entry->get('pdf_num') + 1;
546 - }
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';
547 662 }
548 -
549 - $replace = array(
550 - 'from' => array(
551 - '[pdf_num]'
552 - ),
553 - 'to' => array(
554 - $pdf_num
555 - )
556 - );
557 -
558 - $value = str_replace($replace['from'], $replace['to'], $value);
559 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 + );
560 671 }
561 -
562 - 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 + );
563 675 }
564 676
565 677 /**
566 678 * Strip unused shortcodes
567 - *
568 679 * @param string $value - Content
569 - *
570 680 * @return string - Value with removed unused shortcodes
571 681 */
572 682 public function strip_shortcodes($value) {
573 - $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', "", $value);
683 + $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
574 684 return $value;
575 685 }
576 686
577 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 + /**
578 732 * Search and update shortcodes for this extension inside content
579 733 * Auto set of dataset id
580 - *
581 734 * @param string $content - Content
582 735 * @param int $form - ID of form
583 - * @param int $dataset - ID of dataset
584 - *
736 + * @param int $dataset_id - ID of dataset
585 737 * @return string - Content with updates shortcodes
586 738 */
587 - public function filter_frm_content($content, $form, $dataset) {
739 + public function filter_frm_content($content, $form, $dataset_id) {
588 740
589 741 if (false === strpos($content, '[')) {
590 742 return $content;
591 743 }
592 -
593 744 $shortcode_tags = array(
594 745 'e2pdf-download',
595 746 'e2pdf-save',
596 747 'e2pdf-view',
597 - 'e2pdf-adobesign'
748 + 'e2pdf-adobesign',
749 + 'e2pdf-zapier',
598 750 );
599 -
600 751 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
601 752 $tagnames = array_intersect($shortcode_tags, $matches[1]);
602 -
603 753 if (!empty($tagnames)) {
604 - $pattern = get_shortcode_regex($tagnames);
754 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
755 + foreach ($shortcodes[0] as $key => $shortcode_value) {
756 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
757 + $atts = shortcode_parse_atts($shortcode[3]);
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 + }
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);
791 + }
792 + }
793 + }
605 794
606 - preg_match_all("/$pattern/", $content, $shortcodes);
607 - foreach ($shortcodes[0] as $key => $shortcode_value) {
795 + return $content;
796 + }
608 797
609 - $shortcode = array();
610 - $shortcode[1] = $shortcodes[1][$key];
611 - $shortcode[2] = $shortcodes[2][$key];
612 - $shortcode[3] = $shortcodes[3][$key];
613 - $shortcode[4] = $shortcodes[4][$key];
614 - $shortcode[5] = $shortcodes[5][$key];
615 - $shortcode[6] = $shortcodes[6][$key];
798 + public function filter_frm_display_entry_content($content) {
616 799
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);
617 816 $atts = shortcode_parse_atts($shortcode[3]);
618 -
619 - if (!array_key_exists('dataset', $atts) && array_key_exists('id', $atts)) {
620 - $template = new Model_E2pdf_Template();
621 - $template->load($atts['id']);
622 - if ($template->get('extension') === 'formidable') {
623 - $entry_id = is_object($dataset) ? $dataset->id : $dataset;
624 - if ($entry_id) {
625 - $atts['dataset'] = $entry_id;
626 - $shortcode[3] .= " dataset=\"{$entry_id}\"";
627 - }
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"';
628 821 }
822 + if (!isset($atts['filter'])) {
823 + $shortcode[3] .= ' filter="true"';
824 + }
825 + if (!isset($atts['iframe_download'])) {
826 + $shortcode[3] .= ' iframe_download="true"';
827 + }
828 + $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
629 829 }
630 - if ($shortcode[2] === 'e2pdf-save' || $shortcode[2] === 'e2pdf-adobesign') {
631 - $shortcode[3] .= " apply=\"true\"";
632 - }
633 - $shortcode[3] .= " filter=\"true\"";
634 - $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
635 830 }
636 831 }
637 832
638 833 return $content;
@@ -639,20 +834,21 @@
639 834 }
640 835
641 836 /**
642 837 * Filter for checkbox repeatable Label/Value fix
643 - *
644 838 * @param array $value - Value
645 839 * @param obj $field - Field
646 840 * @param array $atts - Shortcode Attributes
647 - *
648 841 * @return mixed - Updated value
649 842 */
650 843 public function filter_frm_display_value_custom($value, $field, $atts = array()) {
651 - if (class_exists("FrmProEntriesController")) {
652 - $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 + );
653 850 $atts = array_merge($defaults, $atts);
654 -
655 851 if ($atts['type'] === 'checkbox') {
656 852 $value = FrmProEntriesController::get_option_label_for_saved_value($value, $field, $atts);
657 853 }
658 854 }
@@ -659,36 +855,98 @@
659 855 return $value;
660 856 }
661 857
662 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 + /**
663 927 * Generate attachments according shortcodes in Email template
664 - *
665 928 * @param array $attachments - List of attachments
666 929 * @param int $form - ID of form
667 930 * @param array $args - Arguments
668 - *
669 931 * @return array - Updated list of attachments
670 932 */
671 - public function filter_frm_notification_attachment($attachments = array(), $form, $args) {
672 -
933 + public function filter_frm_notification_attachment($attachments, $form, $args) {
673 934 if (!isset($args['email_key'])) {
674 935 return $attachments;
675 936 }
676 -
677 937 $form_actions = FrmFormAction::get_action_for_form($form->id);
678 -
679 - $dataset = $args['entry']->id;
938 + $dataset_id = $args['entry']->id;
680 939 $email_key = $args['email_key'];
681 940
682 941 $shortcode_tags = array(
683 942 'e2pdf-attachment',
943 + 'e2pdf-save',
684 944 );
685 945
686 946 foreach ($form_actions as $key => $action) {
687 947 if ($action->ID === $email_key) {
688 -
689 948 $content = $action->post_content['email_message'];
690 -
691 949 if (false === strpos($content, '[')) {
692 950 return $attachments;
693 951 }
694 952
@@ -697,61 +955,159 @@
697 955 add_filter('frm_content', array($this, 'filter_frm_content'), 30, 3);
698 956
699 957 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
700 958 $tagnames = array_intersect($shortcode_tags, $matches[1]);
701 -
702 959 if (!empty($tagnames)) {
703 - $pattern = get_shortcode_regex($tagnames);
704 -
705 - preg_match_all("/$pattern/", $content, $shortcodes);
706 -
960 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
707 961 foreach ($shortcodes[0] as $key => $shortcode_value) {
708 -
709 - $shortcode = array();
710 - $shortcode[1] = $shortcodes[1][$key];
711 - $shortcode[2] = $shortcodes[2][$key];
712 - $shortcode[3] = $shortcodes[3][$key];
713 - $shortcode[4] = $shortcodes[4][$key];
714 - $shortcode[5] = $shortcodes[5][$key];
715 - $shortcode[6] = $shortcodes[6][$key];
716 -
962 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
717 963 $atts = shortcode_parse_atts($shortcode[3]);
718 -
719 - if (!array_key_exists('dataset', $atts) && array_key_exists('id', $atts)) {
720 - $template = new Model_E2pdf_Template();
721 - $template->load($atts['id']);
722 - if ($template->get('extension') === 'formidable') {
723 - $entry_id = is_object($dataset) ? $dataset->id : $dataset;
724 - if ($entry_id) {
725 - $atts['dataset'] = $entry_id;
726 - $shortcode[3] .= " dataset=\"{$entry_id}\"";
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 + }
727 985 }
728 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 + }
729 1020 }
1021 + }
1022 + }
1023 + }
1024 + }
1025 + return $attachments;
1026 + }
730 1027
731 - $shortcode[3] .= " apply=\"true\" filter=\"true\"";
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) {
732 1035
733 - $file = do_shortcode_tag($shortcode);
1036 + if (isset($atts['decrypt']) &&
1037 + $atts['decrypt'] &&
1038 + class_exists('FrmProFileField') &&
1039 + class_exists('FrmProFilePayloadBuilder') &&
1040 + class_exists('FrmAppHelper')
1041 + ) {
734 1042
735 - if ($file) {
736 - $this->helper->add('formidable_attachments', $file);
737 - $attachments[] = $file;
738 - }
1043 + $id = $atts['media_id'];
1044 + $permission = isset($atts['permission']) && $atts['permission'] ? true : false;
1045 +
1046 + remove_filter('wp_get_attachment_url', 'FrmProFileField::filter_attachment_url');
1047 + remove_filter('wp_get_attachment_image_src', 'FrmProFileField::filter_attachment_image_src');
1048 +
1049 + $is_image = wp_attachment_is_image($id);
1050 + $url = $this->get_file_url($id, $is_image ? $atts['size'] : false);
1051 +
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) : '';
1057 +
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;
739 1065 }
740 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);
741 1086 }
742 1087 }
743 - return $attachments;
1088 +
1089 + return $html;
744 1090 }
745 1091
746 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 + /**
747 1105 * Remove Page Breaks for Visual Mapper
748 - *
749 - * @param array $fields - List of fields
750 - *
1106 + * @param array $fields - List of fields
751 1107 * @return array - Updated fields
752 1108 */
753 - function filter_remove_pagebreaks($fields) {
1109 + public function filter_remove_pagebreaks($fields) {
754 1110 foreach ((array) $fields as $field_key => $field) {
755 1111 if ($field->type == 'break') {
756 1112 unset($fields[$field_key]);
757 1113 }
@@ -758,18 +1114,34 @@
758 1114 }
759 1115 return $fields;
760 1116 }
761 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 +
762 1136 /**
763 1137 * Add options for Formidable extension
764 - *
765 - * @param array $options - List of options
766 - *
1138 + * @param array $options - List of options
767 1139 * @return array - Updated options list
768 1140 */
769 1141 public function filter_e2pdf_model_options_get_options_options($options = array()) {
770 1142 $options['formidable_group'] = array(
771 - 'name' => __('Formidable', 'e2pdf'),
1143 + 'name' => 'Formidable Forms',
772 1144 'action' => 'extension',
773 1145 'group' => 'formidable_group',
774 1146 'options' => array(
775 1147 array(
@@ -774,24 +1146,55 @@
774 1146 'options' => array(
775 1147 array(
776 1148 'name' => __('Auto PDF and Visual Mapper', 'e2pdf'),
777 1149 'key' => 'e2pdf_formidable_use_keys',
778 - 'value' => get_option('e2pdf_formidable_use_keys') === false ? 0 : get_option('e2pdf_formidable_use_keys'),
779 - 'default_value' => 0,
1150 + 'value' => get_option('e2pdf_formidable_use_keys', '0'),
1151 + 'default_value' => '0',
780 1152 'type' => 'checkbox',
1153 + 'checkbox_value' => '1',
781 1154 'placeholder' => __('Use Field Keys instead Field IDs', 'e2pdf'),
782 1155 ),
783 - )
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 + ),
784 1166 );
785 1167 return $options;
786 1168 }
787 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 +
788 1192 public function filter_e2pdf_controller_templates_backup_options($options, $template, $extension) {
789 1193
790 1194 if ($extension->loaded('formidable')) {
791 -
792 1195 $options['formidable'] = array(
793 - 'name' => __('Formidable', 'e2pdf'),
1196 + 'name' => 'Formidable Forms',
794 1197 'options' => array(
795 1198 array(
796 1199 'name' => __('Force shortcodes to use', 'e2pdf'),
797 1200 'key' => 'options[formidable_force_shortcodes]',
@@ -801,11 +1204,11 @@
801 1204 'options' => array(
802 1205 '0' => __('None', 'e2pdf'),
803 1206 '1' => __('Fields IDs', 'e2pdf'),
804 1207 '2' => __('Field Keys', 'e2pdf'),
805 - )
1208 + ),
806 1209 ),
807 - )
1210 + ),
808 1211 );
809 1212 }
810 1213
811 1214 return $options;
@@ -810,15 +1213,32 @@
810 1213
811 1214 return $options;
812 1215 }
813 1216
814 - 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) {
815 1218
816 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 + }
817 1240
818 - $where = array('fi.form_id' => (int) $template->get('item'));
819 - $fields = FrmField::getAll($where, 'id ASC');
820 -
821 1241 $search = array();
822 1242 $replace = array();
823 1243
824 1244 if ($options['formidable_force_shortcodes'] == '1') {
@@ -825,13 +1245,14 @@
825 1245 foreach ($fields as $field_key => $field) {
826 1246 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
827 1247 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
828 1248 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
829 -
830 1249 foreach ($sub_fields as $sub_field_key => $sub_field) {
831 1250 $search[] = $sub_field->field_key;
832 1251 $replace[] = $sub_field->id;
833 1252 }
1253 + $search[] = $field->field_key;
1254 + $replace[] = $field->id;
834 1255 } else {
835 1256 $search[] = $field->field_key;
836 1257 $replace[] = $field->id;
837 1258 }
@@ -841,13 +1262,14 @@
841 1262
842 1263 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
843 1264 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
844 1265 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
845 -
846 1266 foreach ($sub_fields as $sub_field_key => $sub_field) {
847 1267 $search[] = $sub_field->id;
848 1268 $replace[] = $sub_field->field_key;
849 1269 }
1270 + $search[] = $field->id;
1271 + $replace[] = $field->field_key;
850 1272 } else {
851 1273 $search[] = $field->id;
852 1274 $replace[] = $field->field_key;
853 1275 }
@@ -855,11 +1277,9 @@
855 1277 }
856 1278
857 1279 $search = array_reverse($search);
858 1280 $replace = array_reverse($replace);
859 -
860 1281 $list = array_combine($search, $replace);
861 -
862 1282 $pages = $this->pages_replace_shortcodes($pages, $list);
863 1283 }
864 1284
865 1285 return $pages;
@@ -864,13 +1284,31 @@
864 1284
865 1285 return $pages;
866 1286 }
867 1287
868 - 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) {
869 1289
870 1290 if ($extension->loaded('formidable') && (isset($options['formidable_force_shortcodes']) && $options['formidable_force_shortcodes'])) {
871 - $where = array('fi.form_id' => (int) $template->get('item'));
872 - $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 + }
873 1311
874 1312 $search = array();
875 1313 $replace = array();
876 1314
@@ -878,13 +1316,85 @@
878 1316 foreach ($fields as $field_key => $field) {
879 1317 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
880 1318 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
881 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) {
882 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');
883 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) {
884 1392 $search[] = $sub_field->field_key;
885 1393 $replace[] = $sub_field->id;
886 1394 }
1395 + $search[] = $field->field_key;
1396 + $replace[] = $field->id;
887 1397 } else {
888 1398 $search[] = $field->field_key;
889 1399 $replace[] = $field->id;
890 1400 }
@@ -894,13 +1404,14 @@
894 1404
895 1405 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
896 1406 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
897 1407 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
898 -
899 1408 foreach ($sub_fields as $sub_field_key => $sub_field) {
900 1409 $search[] = $sub_field->id;
901 1410 $replace[] = $sub_field->field_key;
902 1411 }
1412 + $search[] = $field->id;
1413 + $replace[] = $field->field_key;
903 1414 } else {
904 1415 $search[] = $field->id;
905 1416 $replace[] = $field->field_key;
906 1417 }
@@ -908,11 +1419,9 @@
908 1419 }
909 1420
910 1421 $search = array_reverse($search);
911 1422 $replace = array_reverse($replace);
912 -
913 1423 $list = array_combine($search, $replace);
914 -
915 1424 $value = $this->replace_shortcodes($value, $list);
916 1425 }
917 1426
918 1427 return $value;
@@ -917,13 +1426,13 @@
917 1426
918 1427 return $value;
919 1428 }
920 1429
921 - 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) {
922 1431
923 1432 if ($extension->loaded('formidable') &&
924 1433 $template->get('item') &&
925 - $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))) &&
926 1435 $xml->item->formidable &&
927 1436 $options['item'] &&
928 1437 class_exists('FrmXMLHelper') &&
929 1438 class_exists('FrmField')
@@ -929,35 +1438,33 @@
929 1438 class_exists('FrmField')
930 1439 ) {
931 1440
932 1441 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
933 - file_put_contents($tmp, base64_decode((String) $xml->item->formidable));
934 -
935 - $dom = new DOMDocument;
1442 + file_put_contents($tmp, base64_decode((string) $xml->item->formidable), LOCK_EX);
1443 + $dom = new DOMDocument();
936 1444 $success = $dom->loadXML(file_get_contents($tmp));
937 -
938 1445 $old_ids = array();
939 1446 $old_keys = array();
940 -
941 1447 if ($success && function_exists('simplexml_import_dom')) {
942 1448 $item_xml = simplexml_import_dom($dom);
943 -
944 1449 foreach ($item_xml->form as $form_key => $form) {
945 - 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))) {
946 1451 foreach ($form->field as $field_key => $field) {
947 - $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
948 1453 if (isset($field_options['form_select']) && $field_options['form_select']) {
949 1454 foreach ($item_xml->form as $sub_form_key => $sub_form) {
950 - if ((String) $sub_form->id == $field_options['form_select']) {
1455 + if ((string) $sub_form->id == $field_options['form_select']) {
951 1456 foreach ($sub_form->field as $sub_field_key => $sub_field) {
952 - $old_ids[] = (String) $sub_field->id;
953 - $old_keys[] = (String) $sub_field->field_key;
1457 + $old_ids[] = (string) $sub_field->id;
1458 + $old_keys[] = (string) $sub_field->field_key;
954 1459 }
955 1460 }
956 1461 }
1462 + $old_ids[] = (string) $field->id;
1463 + $old_keys[] = (string) $field->field_key;
957 1464 } else {
958 - $old_ids[] = (String) $field->id;
959 - $old_keys[] = (String) $field->field_key;
1465 + $old_ids[] = (string) $field->id;
1466 + $old_keys[] = (string) $field->field_key;
960 1467 }
961 1468 }
962 1469 }
963 1470 }
@@ -962,11 +1469,30 @@
962 1469 }
963 1470 }
964 1471 }
965 1472
966 - $where = array('fi.form_id' => (int) $template->get('item'));
967 - $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 + }
968 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 +
969 1495 $new_ids = array();
970 1496 $new_keys = array();
971 1497
972 1498 foreach ($fields as $field_key => $field) {
@@ -973,13 +1499,14 @@
973 1499
974 1500 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
975 1501 $sub_where = array('fi.form_id' => (int) $field->field_options['form_select']);
976 1502 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
977 -
978 1503 foreach ($sub_fields as $sub_field_key => $sub_field) {
979 1504 $new_ids[] = $sub_field->id;
980 1505 $new_keys[] = $sub_field->field_key;
981 1506 }
1507 + $new_ids[] = $field->id;
1508 + $new_keys[] = $field->field_key;
982 1509 } else {
983 1510 $new_ids[] = $field->id;
984 1511 $new_keys[] = $field->field_key;
985 1512 }
@@ -984,9 +1511,8 @@
984 1511 $new_keys[] = $field->field_key;
985 1512 }
986 1513 }
987 1514
988 -
989 1515 if (count($old_ids) === count($new_ids)) {
990 1516 $old_ids = array_reverse($old_ids);
991 1517 $new_ids = array_reverse($new_ids);
992 1518
@@ -1006,13 +1532,13 @@
1006 1532
1007 1533 return $pages;
1008 1534 }
1009 1535
1010 - 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) {
1011 1537
1012 1538 if ($extension->loaded('formidable') &&
1013 1539 $template->get('item') &&
1014 - $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))) &&
1015 1541 $xml->item->formidable &&
1016 1542 $options['item'] &&
1017 1543 class_exists('FrmXMLHelper') &&
1018 1544 class_exists('FrmField')
@@ -1018,11 +1544,11 @@
1018 1544 class_exists('FrmField')
1019 1545 ) {
1020 1546
1021 1547 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
1022 - file_put_contents($tmp, base64_decode((String) $xml->item->formidable));
1548 + file_put_contents($tmp, base64_decode((string) $xml->item->formidable), LOCK_EX);
1023 1549
1024 - $dom = new DOMDocument;
1550 + $dom = new DOMDocument();
1025 1551 $success = $dom->loadXML(file_get_contents($tmp));
1026 1552
1027 1553 $old_ids = array();
1028 1554 $old_keys = array();
@@ -1030,23 +1556,25 @@
1030 1556 if ($success && function_exists('simplexml_import_dom')) {
1031 1557 $item_xml = simplexml_import_dom($dom);
1032 1558
1033 1559 foreach ($item_xml->form as $form_key => $form) {
1034 - 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))) {
1035 1561 foreach ($form->field as $field_key => $field) {
1036 - $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
1037 1563 if (isset($field_options['form_select']) && $field_options['form_select']) {
1038 1564 foreach ($item_xml->form as $sub_form_key => $sub_form) {
1039 - if ((String) $sub_form->id == $field_options['form_select']) {
1565 + if ((string) $sub_form->id == $field_options['form_select']) {
1040 1566 foreach ($sub_form->field as $sub_field_key => $sub_field) {
1041 - $old_ids[] = (String) $sub_field->id;
1042 - $old_keys[] = (String) $sub_field->field_key;
1567 + $old_ids[] = (string) $sub_field->id;
1568 + $old_keys[] = (string) $sub_field->field_key;
1043 1569 }
1044 1570 }
1045 1571 }
1572 + $old_ids[] = (string) $field->id;
1573 + $old_keys[] = (string) $field->field_key;
1046 1574 } else {
1047 - $old_ids[] = (String) $field->id;
1048 - $old_keys[] = (String) $field->field_key;
1575 + $old_ids[] = (string) $field->id;
1576 + $old_keys[] = (string) $field->field_key;
1049 1577 }
1050 1578 }
1051 1579 }
1052 1580 }
@@ -1051,11 +1579,31 @@
1051 1579 }
1052 1580 }
1053 1581 }
1054 1582
1055 - $where = array('fi.form_id' => (int) $template->get('item'));
1056 - $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 + }
1057 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 +
1058 1606 $new_ids = array();
1059 1607 $new_keys = array();
1060 1608
1061 1609 foreach ($fields as $field_key => $field) {
@@ -1062,13 +1610,129 @@
1062 1610
1063 1611 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1064 1612 $sub_where = array('fi.form_id' => (int) $field->field_options['form_select']);
1065 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 + }
1066 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');
1067 1729 foreach ($sub_fields as $sub_field_key => $sub_field) {
1068 1730 $new_ids[] = $sub_field->id;
1069 1731 $new_keys[] = $sub_field->field_key;
1070 1732 }
1733 + $new_ids[] = $field->id;
1734 + $new_keys[] = $field->field_key;
1071 1735 } else {
1072 1736 $new_ids[] = $field->id;
1073 1737 $new_keys[] = $field->field_key;
1074 1738 }
@@ -1091,10 +1755,8 @@
1091 1755
1092 1756 unset($dom);
1093 1757 unlink($tmp);
1094 1758 }
1095 -
1096 -
1097 1759 return $value;
1098 1760 }
1099 1761
1100 1762 /**
@@ -1102,9 +1764,8 @@
1102 1764 */
1103 1765 public function action_frm_notification() {
1104 1766
1105 1767 $files = $this->helper->get('formidable_attachments');
1106 -
1107 1768 if (is_array($files) && !empty($files)) {
1108 1769 foreach ($files as $key => $file) {
1109 1770 $this->helper->delete_dir(dirname($file) . '/');
1110 1771 }
@@ -1112,21 +1773,35 @@
1112 1773 }
1113 1774 }
1114 1775
1115 1776 /**
1116 - * Fix for user_id shortcode
1117 - *
1118 - * @param object $template - Current Template
1119 - * @param object $extension - Loaded extension
1120 - *
1777 + * Fix to render E2Pdf shortcodes with beforeContent and afterContent inside Formidable Form View Preview
1121 1778 */
1122 - public function action_e2pdf_model_template_fill_pre($template, $extension) {
1123 - if ($extension->loaded("formidable")) {
1124 - if ($extension->get('dataset') && class_exists("FrmEntry") && is_admin()) {
1125 - $extension->set('user_id', get_current_user_id());
1126 - $entry = FrmEntry::getOne($extension->get('dataset'));
1127 - if ($entry) {
1128 - 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 + }
1129 1804 }
1130 1805 }
1131 1806 }
1132 1807 }
@@ -1131,25 +1806,55 @@
1131 1806 }
1132 1807 }
1133 1808
1134 1809 /**
1135 - * Revert Fix for user_id shortcode
1136 - *
1137 - * @param object $template - Current Template
1138 - * @param object $extension - Loaded extension
1139 - *
1810 + * Filter "get" shortcodes with beforeContent and afterContent inside Formidable Form View Preview
1811 + * @param type $content
1812 + * @return type
1140 1813 */
1141 - public function action_e2pdf_model_template_fill_after($template, $extension) {
1142 - if ($extension->loaded("formidable")) {
1143 - if ($extension->get('dataset') && class_exists("FrmEntry") && is_admin()) {
1144 - 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 + }
1145 1834 }
1146 1835 }
1836 + return $content;
1147 1837 }
1148 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 +
1149 1855 /**
1150 1856 * Auto Generate of Template for this extension
1151 - *
1152 1857 * @return array - List of elements
1153 1858 */
1154 1859 public function auto() {
1155 1860
@@ -1158,73 +1863,75 @@
1158 1863
1159 1864 $form_id = $this->get('item');
1160 1865
1161 1866 $fields = array();
1162 -
1163 1867 if (class_exists('FrmField')) {
1164 - $fields = FrmField::get_all_for_form($form_id);
1868 + $fields = FrmField::get_all_for_form($form_id, '', 'include', 'include');
1165 1869 }
1166 1870
1167 1871 if ($fields) {
1168 1872 foreach ($fields as $key => $field) {
1873 + $field_id = get_option('e2pdf_formidable_use_keys', '0') ? $field->field_key : $field->id;
1169 1874
1170 - $field_id = get_option('e2pdf_formidable_use_keys') ? $field->field_key : $field->id;
1171 -
1172 - if ($field->type === 'lookup' || $field->type === 'data') {
1173 -
1174 - $dynamic_field_id = false;
1175 - $dynamic_form_id = false;
1176 -
1177 - if ($field->type === 'lookup' && isset($field->field_options['get_values_field']) && isset($field->field_options['get_values_form'])) {
1178 -
1179 - $dynamic_form_id = $field->field_options['get_values_form'];
1180 - $dynamic_field_id = $field->field_options['get_values_field'];
1181 -
1182 - if (get_option('e2pdf_formidable_use_keys')) {
1183 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
1184 -
1185 - if ($dynamic_field_data) {
1186 - $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;
1187 1887 }
1188 1888 }
1189 - } elseif ($field->type === 'data' && isset($field->field_options['form_select']) && $field->field_options['form_select'] !== 'taxonomy' && class_exists('FrmField')) {
1190 1889
1191 - $dynamic_field_id = $field->field_options['form_select'];
1192 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
1193 -
1194 - if ($dynamic_field_data) {
1195 - $dynamic_form_id = $dynamic_field_data->form_id;
1196 -
1197 - if (get_option('e2pdf_formidable_use_keys')) {
1198 - $dynamic_field_id = $dynamic_field_data->field_key;
1199 - }
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'];
1200 1896 }
1897 + if ($frm_filter) {
1898 + remove_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings');
1899 + }
1900 + $field->options = $options;
1201 1901 }
1202 -
1203 1902 $field->type = $field->field_options['data_type'];
1204 - if ($dynamic_field_id && $dynamic_form_id) {
1205 - 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 + }
1206 1917
1207 - $field->options = array(
1208 - "[e2pdf-frm-entry-values id='$dynamic_form_id' field_id='$dynamic_field_id']"
1209 - );
1210 - } 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);
1211 1922
1212 - $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 + }
1213 1927
1214 - if (class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
1215 - $where = array(
1216 - 'it.form_id' => $dynamic_form_id
1217 - );
1218 -
1219 - $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
1220 - foreach ($entries_tmp as $key => $entry) {
1221 - $options[] = FrmEntryMeta::get_meta_value($entry, $dynamic_field_id);
1222 - }
1223 - }
1224 - $field->options = $options;
1928 + if ($frm_filter) {
1929 + remove_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings');
1225 1930 }
1931 + $field->options = $options;
1226 1932 }
1933 + $field->type = $field->field_options['data_type'];
1227 1934 }
1228 1935
1229 1936 /*
1230 1937 * Repeatable fields Field ID modification
@@ -1230,138 +1937,211 @@
1230 1937 * Repeatable fields Field ID modification
1231 1938 * @since 0.01.42
1232 1939 */
1233 1940 if ($field->type !== 'lookup' && $field->type !== 'data' && isset($field->form_id) && $field->form_id != $form_id) {
1234 - $field_id = $field_id . ":1";
1941 + $field_id = $field_id . ':1';
1235 1942 }
1236 1943
1237 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;
1238 1964 case 'html':
1239 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1240 - 'top' => '20',
1241 - 'left' => '20',
1242 - 'right' => '20',
1243 - 'block' => true,
1244 - 'properties' => array(
1245 - 'value' => $field->name,
1246 - )
1247 - ));
1248 -
1249 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1250 - 'properties' => array(
1251 - 'value' => $field->description,
1252 - )
1253 - ));
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 + }
1254 1982 break;
1255 -
1256 1983 case 'signature':
1257 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1258 - 'top' => '20',
1259 - 'left' => '20',
1260 - 'right' => '20',
1261 - 'block' => true,
1262 - 'properties' => array(
1263 - 'value' => $field->name,
1264 - )
1265 - ));
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 + );
1266 1999
1267 - $elements[] = $this->auto_field($field, 'e2pdf-signature', array(
1268 - 'properties' => array(
1269 - 'width' => '400',
1270 - 'height' => '150',
1271 - 'scale' => '1',
1272 - 'dimension' => '1',
1273 - 'value' => "[$field_id]"
1274 - )
1275 - ));
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 + );
1276 2014 break;
1277 -
1278 2015 case 'scale':
1279 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1280 - 'top' => '20',
1281 - 'left' => '20',
1282 - 'right' => '20',
1283 - 'block' => true,
1284 - 'properties' => array(
1285 - 'value' => $field->name,
1286 - )
1287 - ));
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 + );
1288 2031
1289 - $left = 0;
1290 -
1291 2032 if (isset($field->options) && is_array($field->options)) {
2033 + $start = true;
1292 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 + }
1293 2070
2071 + $start = false;
2072 + }
2073 +
2074 + $start = true;
2075 + foreach ($field->options as $opt_key => $option) {
1294 2076 if (is_array($option)) {
1295 - $elements[] = $this->auto_field($field, 'e2pdf-radio', array(
1296 - 'top' => 0,
1297 - 'left' => $left,
1298 - 'properties' => array(
1299 - 'width' => '15',
1300 - 'height' => '15',
1301 - 'value' => "[$field_id]",
1302 - 'option' => $option['value'],
1303 - 'group' => "group_" . $field_id
1304 - )
1305 - ));
1306 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1307 - 'top' => '20',
1308 - 'left' => $left - 5,
1309 - 'properties' => array(
1310 - 'value' => $option['label'],
1311 - 'width' => '25',
1312 - 'text_align' => 'center',
1313 - )
1314 - ));
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 + );
1315 2093 } else {
1316 -
1317 - $elements[] = $this->auto_field($field, 'e2pdf-radio', array(
1318 - 'top' => 0,
1319 - 'left' => $left,
1320 - 'properties' => array(
1321 - 'width' => '15',
1322 - 'height' => '15',
1323 - 'value' => "[$field_id]",
1324 - 'option' => $option,
1325 - 'group' => "group_" . $field_id
1326 - )
1327 - ));
1328 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1329 - 'top' => '20',
1330 - 'left' => $left - 5,
1331 - 'properties' => array(
1332 - 'value' => $option,
1333 - 'width' => '25',
1334 - 'text_align' => 'center',
1335 - )
1336 - ));
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 + );
1337 2109 }
1338 -
1339 - $left = $left + 25;
2110 + $start = false;
1340 2111 }
1341 2112 }
1342 2113 break;
1343 -
1344 2114 case 'rte':
1345 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1346 - 'top' => '20',
1347 - 'left' => '20',
1348 - 'right' => '20',
1349 - 'block' => true,
1350 - 'properties' => array(
1351 - 'value' => $field->name,
1352 - )
1353 - ));
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 + );
1354 2130
1355 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1356 - 'properties' => array(
1357 - 'height' => '150',
1358 - 'value' => "[$field_id wpautop=0]"
1359 - )
1360 - ));
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 + );
1361 2143 break;
1362 -
1363 - case 'file':
1364 2144 case 'text':
1365 2145 case 'email':
1366 2146 case 'url':
1367 2147 case 'number':
@@ -1366,48 +2146,151 @@
1366 2146 case 'url':
1367 2147 case 'number':
1368 2148 case 'phone':
1369 2149 case 'date':
1370 - case 'time':
1371 2150 case 'image':
1372 2151 case 'tag':
1373 2152 case 'password':
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 - ));
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 + );
1383 2169
1384 - if ($field->type == 'file') {
1385 - if (strpos($field_id, ':') !== false) {
1386 - $field_id .= " size='full' show_image='0' add_link='0'";
1387 - } else {
1388 - $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 + );
1389 2274 }
1390 2275 }
1391 -
1392 - $elements[] = $this->auto_field($field, 'e2pdf-input', array(
1393 - 'properties' => array(
1394 - 'value' => "[$field_id]",
1395 - 'pass' => $field->type === 'password' ? '1' : '0',
1396 - )
1397 - ));
1398 2276 break;
1399 -
1400 2277 case 'select':
1401 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1402 - 'top' => '20',
1403 - 'left' => '20',
1404 - 'right' => '20',
1405 - 'block' => true,
1406 - 'properties' => array(
1407 - 'value' => $field->name,
1408 - )
1409 - ));
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 + );
1410 2293
1411 2294 $options_tmp = array();
1412 2295 if (isset($field->options) && is_array($field->options)) {
1413 2296 foreach ($field->options as $opt_key => $option) {
@@ -1418,168 +2301,664 @@
1418 2301 }
1419 2302 }
1420 2303 }
1421 2304
1422 - $elements[] = $this->auto_field($field, 'e2pdf-select', array(
1423 - 'properties' => array(
1424 - 'options' => implode("\n", $options_tmp),
1425 - 'value' => "[$field_id]",
1426 - 'height' => isset($field->field_options['multiple']) && $field->field_options['multiple'] ? '80' : '',
1427 - 'multiline' => isset($field->field_options['multiple']) && $field->field_options['multiple'] ? '1' : '0',
1428 - )
1429 - ));
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 + );
1430 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 + );
1431 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 + );
1432 2350
1433 - 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;
1434 2397 case 'address':
1435 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1436 - 'top' => '20',
1437 - 'left' => '20',
1438 - 'right' => '20',
1439 - 'block' => true,
1440 - 'properties' => array(
1441 - 'value' => $field->name,
1442 - )
1443 - ));
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 + );
1444 2413
1445 - $elements[] = $this->auto_field($field, 'e2pdf-textarea', array(
1446 - 'properties' => array(
1447 - 'value' => "[$field_id]",
1448 - )
1449 - ));
1450 - 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 + }
1451 2428
1452 - case 'textarea':
1453 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1454 - 'top' => '20',
1455 - 'left' => '20',
1456 - 'right' => '20',
1457 - 'block' => true,
1458 - 'properties' => array(
1459 - 'value' => $field->name,
1460 - )
1461 - ));
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 + );
1462 2441
1463 - $elements[] = $this->auto_field($field, 'e2pdf-textarea', array(
1464 - 'properties' => array(
1465 - 'value' => "[$field_id wpautop=0]",
1466 - )
1467 - ));
1468 - 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 + }
1469 2456
1470 - case 'radio':
1471 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1472 - 'top' => '20',
1473 - 'left' => '20',
1474 - 'right' => '20',
1475 - 'block' => true,
1476 - 'properties' => array(
1477 - 'value' => $field->name,
1478 - )
1479 - ));
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 + );
1480 2469
1481 - $top = 0;
1482 - if (isset($field->options) && is_array($field->options)) {
1483 - foreach ($field->options as $opt_key => $option) {
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 + ) {
1484 2475
1485 - if (is_array($option)) {
1486 - $elements[] = $this->auto_field($field, 'e2pdf-radio', array(
1487 - 'top' => $top,
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 + }
2494 +
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,
1488 2524 'properties' => array(
1489 - 'width' => '15',
1490 - 'height' => '15',
1491 - 'value' => "[$field_id]",
1492 - 'option' => $option['label'],
1493 - '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 + ),
1494 2549 )
1495 - ));
1496 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1497 - 'top' => $top,
1498 - '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,
1499 2561 'properties' => array(
1500 - '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 + ),
1501 2598 )
1502 - ));
1503 - } 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 + }
1504 2618
1505 - $elements[] = $this->auto_field($field, 'e2pdf-radio', array(
1506 - '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,
1507 2641 'properties' => array(
1508 - 'width' => '15',
1509 - 'height' => '15',
1510 - 'value' => "[$field_id]",
1511 - 'option' => $option,
1512 - '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 + ),
1513 2664 )
1514 - ));
1515 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1516 - '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',
1517 2696 'left' => '20',
1518 - 'properties' => array(
1519 - 'value' => $option
1520 - )
1521 - ));
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 + }
1522 2853 }
1523 - $top = $top + 20;
1524 2854 }
1525 2855 }
1526 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 + );
1527 2873
1528 - case 'checkbox':
1529 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1530 - 'top' => '20',
1531 - 'left' => '20',
1532 - 'right' => '20',
1533 - 'block' => true,
1534 - 'properties' => array(
1535 - 'value' => $field->name,
1536 - )
1537 - ));
2874 + $image_options = false;
2875 + if (isset($field->field_options['image_options']) && $field->field_options['image_options']) {
2876 + $image_options = true;
2877 + }
1538 2878
1539 - $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 +
1540 2884 if (isset($field->options) && is_array($field->options)) {
1541 2885 foreach ($field->options as $opt_key => $option) {
1542 2886 if (is_array($option)) {
1543 - $elements[] = $this->auto_field($field, 'e2pdf-checkbox', array(
1544 - 'top' => $top,
1545 - 'properties' => array(
1546 - 'width' => '15',
1547 - 'height' => '15',
1548 - 'value' => "[$field_id]",
1549 - 'option' => $option['label']
1550 - )
1551 - ));
1552 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1553 - 'top' => $top,
1554 - 'left' => '20',
1555 - 'properties' => array(
1556 - 'value' => $option['label']
1557 - )
1558 - ));
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 + );
1559 2913 } else {
1560 - $elements[] = $this->auto_field($field, 'e2pdf-checkbox', array(
1561 - 'top' => $top,
1562 - 'properties' => array(
1563 - 'width' => '15',
1564 - 'height' => '15',
1565 - 'value' => "[$field_id]",
1566 - 'option' => $option
1567 - )
1568 - ));
1569 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1570 - 'top' => $top,
1571 - 'left' => '20',
1572 - 'properties' => array(
1573 - 'value' => $option
1574 - )
1575 - ));
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 + }
1576 2957 }
1577 - $top = $top + 20;
1578 2958 }
1579 2959 }
1580 2960 break;
1581 -
1582 2961 default:
1583 2962 break;
1584 2963 }
1585 2964 }
@@ -1587,8 +2966,10 @@
1587 2966
1588 2967 $response['page'] = array(
1589 2968 'bottom' => '20',
1590 2969 'top' => '20',
2970 + 'right' => '20',
2971 + 'left' => '20',
1591 2972 );
1592 2973
1593 2974 $response['elements'] = $elements;
1594 2975 return $response;
@@ -1595,36 +2976,32 @@
1595 2976 }
1596 2977
1597 2978 /**
1598 2979 * Generate field for Auto PDF
1599 - *
1600 2980 * @param object $field - Formidable field object
1601 2981 * @param string $type - Field type
1602 2982 * @param array $options - Field additional options
1603 - *
1604 2983 * @return array - Prepared auto field
1605 2984 */
1606 - public function auto_field($field = false, $type = false, $options = array()) {
2985 + public function auto_field($field = false, $element = array()) {
1607 2986
1608 - if (!$field || !$type) {
2987 + if (!$field) {
1609 2988 return false;
1610 2989 }
1611 2990
2991 + if (!isset($element['block'])) {
2992 + $element['block'] = false;
2993 + }
2994 +
2995 + if (!isset($element['float'])) {
2996 + $element['float'] = false;
2997 + }
2998 +
1612 2999 $classes = array();
1613 3000 if (isset($field->field_options['classes'])) {
1614 - $classes = explode(" ", $field->field_options['classes']);
3001 + $classes = explode(' ', $field->field_options['classes']);
1615 3002 }
1616 3003
1617 - $element = array(
1618 - 'type' => $type,
1619 - 'properties' => isset($options['properties']) ? $options['properties'] : array(),
1620 - );
1621 -
1622 - $element['top'] = isset($options['top']) ? $options['top'] : '0';
1623 - $element['left'] = isset($options['left']) ? $options['left'] : '0';
1624 - $element['right'] = isset($options['right']) ? $options['right'] : '0';
1625 - $element['block'] = isset($options['block']) ? $options['block'] : false;
1626 -
1627 3004 $float_classes = array(
1628 3005 'frm_half',
1629 3006 'frm_third',
1630 3007 'frm_two_thirds',
@@ -1633,16 +3010,16 @@
1633 3010 'frm_fifth',
1634 3011 'frm_two_fifths',
1635 3012 'frm_sixth',
1636 3013 'frm_seventh',
1637 - 'frm_eighth'
3014 + 'frm_eighth',
1638 3015 );
1639 3016
1640 3017 $array_intersect = array_intersect($classes, $float_classes);
1641 3018
1642 - if (!empty($array_intersect) && !in_array('frm_first', $classes)) {
3019 + if (!empty($array_intersect) && !in_array('frm_first', $classes) && isset($element['block']) && $element['block']) {
1643 3020 $element['float'] = true;
1644 - };
3021 + }
1645 3022
1646 3023 $primary_class = false;
1647 3024 if (!empty($array_intersect)) {
1648 3025 $primary_class = end($array_intersect);
@@ -1647,50 +3024,40 @@
1647 3024 if (!empty($array_intersect)) {
1648 3025 $primary_class = end($array_intersect);
1649 3026 }
1650 3027
1651 - if ($element['block']) {
3028 + if (isset($element['block']) && $element['block']) {
1652 3029 switch ($primary_class) {
1653 3030 case 'frm_half':
1654 - $element['width'] = '50%';
3031 + $element['properties']['width'] = '50%';
1655 3032 break;
1656 -
1657 3033 case 'frm_third':
1658 - $element['width'] = '33.3%';
3034 + $element['properties']['width'] = '33.3%';
1659 3035 break;
1660 -
1661 3036 case 'frm_two_thirds':
1662 - $element['width'] = '66.67%';
3037 + $element['properties']['width'] = '66.67%';
1663 3038 break;
1664 -
1665 3039 case 'frm_fourth':
1666 - $element['width'] = '25%';
3040 + $element['properties']['width'] = '25%';
1667 3041 break;
1668 -
1669 3042 case 'frm_three_fourths':
1670 - $element['width'] = '75%';
3043 + $element['properties']['width'] = '75%';
1671 3044 break;
1672 -
1673 3045 case 'frm_fifth':
1674 - $element['width'] = '20%';
3046 + $element['properties']['width'] = '20%';
1675 3047 break;
1676 -
1677 3048 case 'frm_two_fifths':
1678 - $element['width'] = '80%';
3049 + $element['properties']['width'] = '80%';
1679 3050 break;
1680 -
1681 3051 case 'frm_sixth':
1682 - $element['width'] = '16.67%';
3052 + $element['properties']['width'] = '16.67%';
1683 3053 break;
1684 -
1685 3054 case 'frm_seventh':
1686 - $element['width'] = '14.29%';
3055 + $element['properties']['width'] = '14.29%';
1687 3056 break;
1688 -
1689 3057 case 'frm_eighth':
1690 - $element['width'] = '12.5%';
3058 + $element['properties']['width'] = '12.5%';
1691 3059 break;
1692 -
1693 3060 default:
1694 3061 break;
1695 3062 }
1696 3063 }
@@ -1699,9 +3066,8 @@
1699 3066 }
1700 3067
1701 3068 /**
1702 3069 * Backup form action
1703 - *
1704 3070 * @param object xml - XML object where to add params for saved item
1705 3071 */
1706 3072 public function backup($xml = false) {
1707 3073 if (class_exists('FrmXMLController')) {
@@ -1706,9 +3072,14 @@
1706 3072 public function backup($xml = false) {
1707 3073 if (class_exists('FrmXMLController')) {
1708 3074
1709 3075 $ids = array();
1710 - $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 + }
1711 3082
1712 3083 $type = array();
1713 3084 $type[] = 'forms';
1714 3085
@@ -1720,55 +3091,220 @@
1720 3091 }
1721 3092
1722 3093 /**
1723 3094 * Import form action
1724 - *
1725 3095 * @param object xml - XML object to parse data to import form
1726 3096 */
1727 - public function import($xml, $item) {
3097 + public function import($xml, $options = array()) {
1728 3098
1729 - $updated_item = '';
3099 + $updated_items = array();
3100 + $new_form = isset($options['formidable_item_new_form']) && $options['formidable_item_new_form'] ? true : false;
1730 3101
1731 - if (class_exists('FrmXMLHelper') && class_exists('FrmField')) {
3102 + if (class_exists('FrmXMLHelper') && class_exists('FrmField') && $this->get('item')) {
1732 3103
1733 - if ($xml->formidable) {
3104 + if (isset($xml->formidable) && $xml->formidable) {
1734 3105
1735 3106 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
1736 - file_put_contents($tmp, base64_decode((String) $xml->formidable));
3107 + file_put_contents($tmp, base64_decode((string) $xml->formidable), LOCK_EX);
1737 3108
3109 + if ($new_form) {
3110 + add_filter('frm_match_xml_form', array($this, 'filter_frm_match_xml_form'), 10, 2);
3111 + }
1738 3112 $result = FrmXMLHelper::import_xml($tmp);
1739 3113
3114 + if ($new_form) {
3115 + remove_filter('frm_match_xml_form', array($this, 'filter_frm_match_xml_form'));
3116 + }
1740 3117 unlink($tmp);
1741 3118
1742 3119 FrmXMLHelper::parse_message($result, $message, $errors);
3120 +
1743 3121 if ($errors) {
1744 3122 return array(
1745 - 'errors' => $errors
3123 + 'errors' => $errors,
1746 3124 );
1747 3125 } else {
1748 - if (isset($result['forms'][$item])) {
1749 - $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')];
1750 3135 }
1751 3136 }
1752 3137 }
1753 3138 }
3139 + return $updated_items;
3140 + }
1754 3141
1755 - 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;
1756 3189 }
1757 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 +
1758 3242 /**
1759 3243 * Replace Old Formidable shortcodes to new values on pages
1760 - *
1761 3244 * @param array $pages - List of pages to replace shortcodes
1762 3245 * @param array $shortcodes_list - List of new/old shortcodes to replace
1763 - *
1764 3246 * @return array - List of updated pages
1765 3247 */
1766 3248 public function pages_replace_shortcodes($pages = array(), $shortcodes_list = array()) {
1767 3249
1768 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 +
1769 3272 foreach ($page['elements'] as $element_key => $element_value) {
1770 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 + }
1771 3307 }
1772 3308 }
1773 3309
1774 3310 return $pages;
@@ -1773,79 +3309,283 @@
1773 3309
1774 3310 return $pages;
1775 3311 }
1776 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 +
1777 3336 /**
1778 3337 * Replace Old Formidable shortcodes to new values
1779 - *
1780 3338 * @param string $content - Value that can contains old shortcodes
1781 3339 * @param array $shortcodes_list - List of new/old shortcodes to replace
1782 - *
1783 3340 * @return string - Updated value
1784 3341 */
1785 - public function replace_shortcodes($content = "", $shortcodes_list = array()) {
1786 -
3342 + public function replace_shortcodes($content = '', $shortcodes_list = array()) {
1787 3343 if (false === strpos($content, '[')) {
1788 3344 return $content;
1789 3345 }
1790 -
1791 3346 foreach ($shortcodes_list as $list_key => $list_value) {
1792 - $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);
1793 3348 }
1794 -
1795 3349 return $content;
1796 3350 }
1797 3351
1798 3352 /**
1799 - * Verify if form and dataset exists
1800 - *
1801 - * @return bool - Exists/Not exists
3353 + * Verify if item and dataset exists
3354 + * @return bool - item and dataset exists
1802 3355 */
1803 3356 public function verify() {
1804 - $item = $this->get('item');
1805 - $dataset = $this->get('dataset');
1806 -
1807 - if ($item && $dataset && class_exists('FrmEntry') && class_exists('FrmForm')) {
1808 - $entry = FrmEntry::getOne($dataset);
1809 - if (is_object($entry) && $entry->form_id == $item) {
1810 - 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);
1811 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;
1812 3371 }
1813 - return false;
3372 + return $verify;
1814 3373 }
1815 3374
1816 3375 /**
1817 - * Visual Mapper for Mapping field
1818 - *
1819 - * @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
1820 3380 */
1821 - public function visual_mapper() {
3381 + public function auto_form($template, $data = array()) {
1822 3382
1823 - $item = $this->get('item');
3383 + if ($template->get('ID')) {
1824 3384
1825 - 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;
1826 3387
1827 - if (class_exists("FrmProFieldsHelper")) {
1828 - 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);
1829 3523 }
3524 + }
1830 3525
1831 - $source = FrmformsController::show_form($item, '', true, true);
3526 + return $template;
3527 + }
1832 3528
1833 - 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')) {
1834 3551 remove_filter('frm_get_paged_fields', array($this, 'filter_remove_pagebreaks'), 9);
1835 3552 }
1836 -
1837 - libxml_use_internal_errors(true);
1838 - $dom = new DOMDocument;
1839 - $html = $dom->loadHTML($source);
1840 - libxml_clear_errors();
1841 -
1842 - if (!$html) {
1843 - 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>';
1844 3563 } else {
1845 3564
3565 + $xml = $this->helper->load('xml');
1846 3566 $xpath = new DomXPath($dom);
1847 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
1848 3588 $remove_by_class = array(
1849 3589 'frm_ajax_loading',
1850 3590 'wp-editor-tools',
1851 3591 'quicktags-toolbar',
@@ -1851,9 +3591,12 @@
1851 3591 'quicktags-toolbar',
1852 3592 'frm_button_submit',
1853 3593 'frm_range_value',
1854 3594 'star-rating',
1855 - 'frm_repeat_buttons'
3595 + 'frm_repeat_buttons',
3596 + 'frm_save_draft',
3597 + 'frm_final_submit',
3598 + 'frm_verify',
1856 3599 );
1857 3600 foreach ($remove_by_class as $key => $class) {
1858 3601 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
1859 3602 foreach ($elements as $element) {
@@ -1860,64 +3603,65 @@
1860 3603 $element->parentNode->removeChild($element);
1861 3604 }
1862 3605 }
1863 3606
3607 + // remove by tag
1864 3608 $remove_by_tag = array(
1865 3609 'link',
1866 3610 'style',
1867 - 'script'
3611 + 'script',
1868 3612 );
1869 3613 foreach ($remove_by_tag as $key => $tag) {
1870 - $elements = $xpath->query("//{$tag}");
3614 + $elements = $xpath->query('//' . $tag);
1871 3615 foreach ($elements as $element) {
1872 3616 $element->parentNode->removeChild($element);
1873 3617 }
1874 3618 }
1875 3619
3620 + // remove classes
1876 3621 $remove_classes = array(
1877 3622 'wp-editor-container',
1878 - 'frm_logic_form'
3623 + 'frm_logic_form',
3624 + 'frm_pos_none',
1879 3625 );
1880 -
1881 3626 foreach ($remove_classes as $key => $class) {
1882 3627 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
1883 3628 foreach ($elements as $element) {
1884 - $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')));
1885 3630 }
1886 3631 }
1887 3632
3633 + // remove styles
1888 3634 $remove_styles = array(
1889 - 'frm_toggle_container'
3635 + 'frm_toggle_container',
1890 3636 );
1891 -
1892 3637 foreach ($remove_styles as $key => $class) {
1893 3638 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
1894 3639 foreach ($elements as $element) {
1895 - $element->attributes->getNamedItem("style")->nodeValue = '';
3640 + $xml->set_node_value($element, 'style', '');
1896 3641 }
1897 3642 }
1898 3643
1899 -
1900 3644 /*
1901 3645 * Metas patterns to replace field names
1902 3646 * @since 0.01.42
1903 3647 */
1904 - $metas_pattern = array(
1905 - '/item_meta\[(?:.*?)\]\[0\]\[(.*?)\](?:\[\])?/i' => '$1:1',
3648 + $metas_pattern = [
3649 + '/item_meta\[(?:.*?)\]\[0\]\[(.*?)\](?:\[\])?/i' => $child ? '$1' : '$1:1',
1906 3650 '/item_meta\[(.*?)\](\[\])?/i' => '$1',
1907 - );
3651 + ];
1908 3652
1909 - // Replace names
3653 + // replace names
1910 3654 $metas = $xpath->query("//*[contains(@name, 'item_meta')]");
1911 3655 foreach ($metas as $element) {
1912 - $field_id = preg_replace(array_keys($metas_pattern), $metas_pattern, $element->attributes->getNamedItem("name")->nodeValue);
1913 - 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')) {
1914 3658 if (strpos($field_id, ':') !== false) {
1915 - $repeat_data = explode(":", $field_id);
3659 + $repeat_data = explode(':', $field_id);
1916 3660 if (isset($repeat_data['0'])) {
1917 3661 $field_data = FrmField::getOne($repeat_data['0']);
1918 3662 if ($field_data) {
1919 - $field_id = $field_data->field_key . ":1";
3663 + $field_id = $field_data->field_key . ':1';
1920 3664 }
1921 3665 }
1922 3666 } else {
1923 3667 $field_data = FrmField::getOne($field_id);
@@ -1925,327 +3669,283 @@
1925 3669 $field_id = $field_data->field_key;
1926 3670 }
1927 3671 }
1928 3672 }
1929 -
1930 - $element->attributes->getNamedItem("name")->nodeValue = $field_id;
3673 + $xml->set_node_value($element, 'name', $field_id);
1931 3674 }
1932 3675
1933 -
1934 -
1935 -
1936 - // Time field replace
1937 - $time_fields = $xpath->query("//div/select[contains(@class, 'frm_time_select')]/parent::*");
1938 - foreach ($time_fields as $key => $element) {
1939 - $span = $xpath->query("./span", $element)->item(0);
1940 - $select = $xpath->query("./select", $element)->item(0);
1941 -
1942 - if ($span) {
1943 -
1944 - $span_cloned = $span->cloneNode(true);
1945 - $select_cloned = $select->cloneNode(true);
1946 -
1947 - foreach ($xpath->query("./select", $span_cloned) as $key => $sub_select) {
1948 - $sub_select->attributes->getNamedItem("class")->nodeValue = $sub_select->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
1949 - }
1950 -
1951 - $select_cloned->attributes->getNamedItem("class")->nodeValue = $select_cloned->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
1952 -
1953 - $span->parentNode->removeChild($span);
1954 - $select->parentNode->removeChild($select);
1955 -
1956 - $wrapper = $dom->createElement('div');
1957 - $wrapper_atts = array(
1958 - 'class' => 'e2pdf-vm-field-wrapper',
1959 - );
1960 -
1961 - foreach ($wrapper_atts as $key => $value) {
1962 - $attr = $dom->createAttribute($key);
1963 - $attr->value = $value;
1964 - $wrapper->appendChild($attr);
1965 - }
1966 -
1967 - $field = $dom->createElement('input');
1968 -
1969 - $field_id = preg_replace('/\[(.*?)\]/i', '', $select_cloned->attributes->getNamedItem("name")->nodeValue);
1970 - if (get_option('e2pdf_formidable_use_keys') && class_exists("FrmField")) {
1971 - $field_data = FrmField::getOne($field_id);
1972 - if ($field_data) {
1973 - $field_id = $field_data->field_key;
1974 - }
1975 - }
1976 -
1977 - $field_atts = array(
1978 - 'type' => 'text',
1979 - 'class' => 'e2pdf-vm-field',
1980 - 'name' => $field_id
1981 - );
1982 -
1983 - foreach ($field_atts as $key => $value) {
1984 - $attr = $dom->createAttribute($key);
1985 - $attr->value = $value;
1986 - $field->appendChild($attr);
1987 - }
1988 -
1989 - $wrapper->appendChild($field);
1990 - $wrapper->appendChild($span_cloned);
1991 - $wrapper->appendChild($select_cloned);
1992 -
1993 - $element->appendChild($wrapper);
1994 - }
1995 - }
1996 -
1997 - // Combo fields
1998 3676 $frm_combo_inputs_container = $xpath->query("//*[contains(@class, 'frm_combo_inputs_container')]");
1999 3677 foreach ($frm_combo_inputs_container as $element) {
3678 + $inputs = $xpath->query('.//input', $element);
3679 + $selects = $xpath->query('.//select', $element);
2000 3680
2001 - $inputs = $xpath->query(".//input", $element);
2002 - $selects = $xpath->query(".//select", $element);
2003 -
2004 3681 foreach ($selects as $key => $sub_element) {
2005 - if ($sub_element->attributes->getNamedItem("class")->nodeValue) {
2006 - $sub_element->attributes->getNamedItem("class")->nodeValue = $sub_select->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
2007 - } else {
2008 - $class = $dom->createAttribute('class');
2009 - $class->value = 'e2pdf-no-vm';
2010 - $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);
2011 3687 }
2012 3688 }
2013 3689
2014 3690 foreach ($inputs as $key => $sub_element) {
2015 - if ($sub_element->attributes->getNamedItem("class")->nodeValue) {
2016 - $sub_element->attributes->getNamedItem("class")->nodeValue = $sub_element->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
2017 - } else {
2018 - $class = $dom->createAttribute('class');
2019 - $class->value = 'e2pdf-no-vm';
2020 - $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);
2021 3696 }
2022 3697 }
2023 -
2024 - $name = "";
2025 - if ($inputs->item(0)) {
2026 - $name = $inputs->item(0)->attributes->getNamedItem("name")->nodeValue;
2027 - } else {
2028 - $name = $selects->item(0)->attributes->getNamedItem("name")->nodeValue;
2029 - }
2030 -
2031 - $field_id = preg_replace('/\[(.*?)\]/i', '', $name);
2032 - if (get_option('e2pdf_formidable_use_keys') && class_exists("FrmField")) {
2033 - $field_data = FrmField::getOne($field_id);
2034 - if ($field_data) {
2035 - $field_id = $field_data->field_key;
2036 - }
2037 - }
2038 -
2039 - $field = $dom->createElement('input');
2040 - $field_atts = array(
2041 - 'type' => 'text',
2042 - 'class' => 'e2pdf-vm-field',
2043 - 'name' => $field_id
2044 - );
2045 -
2046 - foreach ($field_atts as $key => $value) {
2047 - $attr = $dom->createAttribute($key);
2048 - $attr->value = $value;
2049 - $field->appendChild($attr);
2050 - }
2051 - $element->appendChild($field);
2052 -
2053 - $element->attributes->getNamedItem("class")->nodeValue = $element->attributes->getNamedItem("class")->nodeValue . " e2pdf-vm-field-wrapper";
2054 3698 }
2055 3699
2056 3700 $frm_dropzone = $xpath->query("//*[contains(@class, 'frm_dropzone')]/parent::*");
2057 3701 foreach ($frm_dropzone as $element) {
2058 3702 $dropzone = $xpath->query(".//*[contains(@class, 'frm_dropzone')]", $element)->item(0);
2059 - $input = $xpath->query(".//input", $element)->item(0);
2060 - $input_cloned = $input->cloneNode(true);
2061 - $input_cloned->attributes->getNamedItem("type")->nodeValue = 'text';
2062 - $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);
2063 3706
2064 - if (strpos($input_cloned->attributes->getNamedItem("name")->nodeValue, ':') !== false) {
2065 - $input_cloned->attributes->getNamedItem("name")->nodeValue = $input_cloned->attributes->getNamedItem("name")->nodeValue . " size='full' show_image='0' add_link='0'";
2066 - } else {
2067 - $input_cloned->attributes->getNamedItem("name")->nodeValue = $input_cloned->attributes->getNamedItem("name")->nodeValue . " size='full'";
2068 - }
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;');
2069 3710
2070 - $style = $dom->createAttribute('style');
2071 - $style->value = 'width: 100%; height: 200px; text-align: center;';
2072 - $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 + }
2073 3716
2074 - $input->parentNode->replaceChild($input_cloned, $input);
2075 - $dropzone->parentNode->removeChild($dropzone);
3717 + $input->parentNode->replaceChild($input_cloned, $input);
3718 + $dropzone->parentNode->removeChild($dropzone);
3719 + }
2076 3720 }
2077 3721
2078 - // Replace signature
3722 + // replace signature
2079 3723 $sigpad = $xpath->query("//*[contains(@class, 'sigPad')]");
2080 3724 foreach ($sigpad as $element) {
2081 - $input = $xpath->query(".//input", $element)->item(0);
2082 - $input_cloned = $input->cloneNode(true);
3725 + $input = $xpath->query('.//input', $element)->item(0);
3726 + if ($input) {
3727 + $input_cloned = $input->cloneNode(true);
2083 3728
2084 - $style = $dom->createAttribute('style');
2085 - $style->value = 'width: 300px; height: 100px;';
2086 - $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 + }
2087 3736
2088 - $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 + }
2089 3742
2090 - if (get_option('e2pdf_formidable_use_keys') && class_exists("FrmField")) {
2091 - $field_data = FrmField::getOne($field_id);
2092 - if ($field_data) {
2093 - $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'), ':'));
2094 3755 }
2095 - }
3756 + if (preg_match('/\[(other(.*?[^\]]))\]/', $field_id)) {
3757 + $field_id = preg_replace('/\[(other(.*?[^\]]))\]/', '', $field_id);
3758 + }
2096 3759
2097 - $input_cloned->attributes->getNamedItem("name")->nodeValue = $field_id;
3760 + $field_data = FrmField::getOne($field_id);
2098 3761
2099 - $element->parentNode->replaceChild($input_cloned, $element);
2100 - }
3762 + if (isset($field_data->field_options['image_options']) && $field_data->field_options['image_options']) {
3763 + $image_options = true;
3764 + }
2101 3765
2102 - // Replace names
2103 - $fields = $xpath->query("//input");
2104 - foreach ($fields as $element) {
3766 + if (isset($field_data->field_options['separate_value']) && $field_data->field_options['separate_value']) {
3767 + $separate_value = true;
3768 + }
2105 3769
2106 - 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;
2107 3773
2108 - 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 + }
2109 3779
2110 - $field_id = $element->attributes->getNamedItem("name")->nodeValue;
2111 - if (false !== strpos($element->attributes->getNamedItem("name")->nodeValue, ':')) {
2112 - $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 + }
2113 3792 }
3793 + $field_data->options = $options;
3794 + }
2114 3795
2115 - $field_data = FrmField::getOne($field_id);
3796 + if (isset($field_data->options) && is_array($field_data->options)) {
2116 3797
2117 - if (isset($field_data->type) && $field_data->type === 'data' && isset($field_data->field_options['form_select'])) {
2118 - $dynamic_form_id = false;
2119 - $dynamic_field_id = false;
3798 + $field_options = $field_data->options;
3799 + $field_value = $xml->get_node_value($element, 'value');
2120 3800
2121 - $dynamic_field_id = $field_data->field_options['form_select'];
2122 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
2123 - if ($dynamic_field_data) {
2124 - $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;
2125 3806 }
3807 + }
2126 3808
2127 - $options = array();
2128 - if (class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
2129 - $where = array(
2130 - 'it.form_id' => $dynamic_form_id
2131 - );
2132 - $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
2133 - foreach ($entries_tmp as $key => $entry) {
2134 - $options[] = array(
2135 - 'label' => FrmEntryMeta::get_meta_value($entry, $dynamic_field_id),
2136 - 'value' => $key,
2137 - );
2138 - }
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;
2139 3814 }
2140 - $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 + }
2141 3823 }
3824 + }
3825 + }
2142 3826
2143 - if (isset($field_data->options) && is_array($field_data->options)) {
2144 - $field_options = $field_data->options;
2145 - $field_value = $element->attributes->getNamedItem("value")->nodeValue;
2146 - $field_key = array_search($field_value, array_column($field_options, 'value'));
2147 - if ($field_key !== false) {
2148 - $field_label = isset($field_options[$field_key]['label']) ? $field_options[$field_key]['label'] : $field_value;
2149 - $element->attributes->getNamedItem("value")->nodeValue = $field_label;
2150 - }
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"';
2151 3840 }
2152 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 + }
2153 3846 }
2154 3847
2155 - $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 . ']');
2156 3853 }
2157 3854
2158 - // Replace names
2159 - $textareas = $xpath->query("//textarea");
3855 + // replace names
3856 + $textareas = $xpath->query('//textarea');
2160 3857 foreach ($textareas as $element) {
2161 - $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]');
2162 3859 }
2163 3860
2164 - // Replace names
2165 - $selects = $xpath->query("//select");
3861 + // replace names
3862 + $selects = $xpath->query('//select');
2166 3863 foreach ($selects as $element) {
2167 3864
2168 3865 if (class_exists('FrmField')) {
2169 3866
2170 - $options = $xpath->query(".//option", $element);
3867 + $options = $xpath->query('.//option', $element);
3868 + $field_id = $xml->get_node_value($element, 'name');
2171 3869
2172 - $field_id = $element->attributes->getNamedItem("name")->nodeValue;
2173 - if (false !== strpos($element->attributes->getNamedItem("name")->nodeValue, ':')) {
2174 - $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'), ':'));
2175 3873 }
3874 + $field_id = str_replace(array('[H]', '[m]', '[A]'), '', $field_id);
2176 3875
2177 3876 $field_data = FrmField::getOne($field_id);
2178 -
2179 - if (isset($field_data->type) && ($field_data->type === 'lookup' || $field_data->type === 'data')) {
2180 - $dynamic_form_id = false;
2181 - $dynamic_field_id = false;
2182 -
2183 - if ($field_data->type === 'lookup' && isset($field_data->field_options['get_values_field']) && isset($field_data->field_options['get_values_form'])) {
2184 - $dynamic_form_id = $field_data->field_options['get_values_form'];
2185 - $dynamic_field_id = $field_data->field_options['get_values_field'];
2186 -
2187 - if (get_option('e2pdf_formidable_use_keys')) {
2188 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
2189 -
2190 - if ($dynamic_field_data) {
2191 - $dynamic_field_id = $dynamic_field_data->field_key;
2192 - }
2193 - }
2194 - } elseif ($field_data->type === 'data' && isset($field_data->field_options['form_select'])) {
2195 - $dynamic_field_id = $field_data->field_options['form_select'];
2196 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
2197 -
2198 - if ($dynamic_field_data) {
2199 - $dynamic_form_id = $dynamic_field_data->form_id;
2200 -
2201 - if (get_option('e2pdf_formidable_use_keys')) {
2202 - $dynamic_field_id = $dynamic_field_data->field_key;
2203 - }
2204 - }
3877 + if (isset($field_data->type) && $field_data->type === 'lookup') {
3878 + foreach ($options as $option) {
3879 + $option->parentNode->removeChild($option);
2205 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 + }
2206 3917
2207 - if ($dynamic_form_id && $dynamic_field_id) {
2208 -
2209 - foreach ($options as $option) {
2210 - $option->parentNode->removeChild($option);
2211 - }
2212 -
2213 - $wrapper = $dom->createElement('option');
2214 - $wrapper_atts = array(
2215 - 'value' => "[e2pdf-frm-entry-values id='{$dynamic_form_id}' field_id='{$dynamic_field_id}']",
2216 - );
2217 - foreach ($wrapper_atts as $key => $value) {
2218 - $attr = $dom->createAttribute($key);
2219 - $attr->value = $value;
2220 - $wrapper->appendChild($attr);
2221 - }
2222 - $element->appendChild($wrapper);
2223 - }
2224 - } else if (isset($field_data->options) && is_array($field_data->options)) {
3918 + if (isset($field_data->options) && is_array($field_data->options)) {
2225 3919 $field_options = $field_data->options;
2226 3920 foreach ($options as $option) {
2227 - $field_value = $option->attributes->getNamedItem("value")->nodeValue;
3921 + $field_value = $xml->get_node_value($option, 'value');
2228 3922 foreach ($field_options as $field_option) {
2229 3923 if (isset($field_option['value']) && $field_option['value'] === $field_value) {
2230 3924 $field_label = isset($field_option['label']) ? $field_option['label'] : $field_value;
2231 - $option->attributes->getNamedItem("value")->nodeValue = $field_label;
3925 + $xml->set_node_value($option, 'value', $field_label);
2232 3926 }
2233 3927 }
2234 3928 }
2235 3929 }
2236 3930 }
3931 + $xml->set_node_value($element, 'name', '[' . $xml->get_node_value($element, 'name') . ']');
3932 + }
2237 3933
2238 - $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 + }
2239 3941 }
2240 3942
2241 - if ($xpath->query("//form")->item(0) && class_exists('FrmStylesHelper')) {
2242 - $autocomplete = $dom->createAttribute('autocomplete');
2243 - $autocomplete->value = 'off';
2244 - $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();
2245 3947 }
2246 -
2247 - return $dom->saveHTML();
2248 3948 }
2249 3949 }
2250 3950 return false;
2251 3951 }
@@ -2252,11 +3952,9 @@
2252 3952
2253 3953 /**
2254 3954 * Convert Field name to Value
2255 3955 * @since 0.01.34
2256 - *
2257 3956 * @param string $name - Field name
2258 - *
2259 3957 * @return bool|string - Converted value or false
2260 3958 */
2261 3959 public function auto_map($name = false) {
2262 3960
@@ -2261,19 +3959,25 @@
2261 3959 public function auto_map($name = false) {
2262 3960
2263 3961 $item = $this->get('item');
2264 3962
2265 - if ($item && class_exists("FrmField")) {
2266 - $where = array('fi.form_id' => (int) $item,
2267 - "(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 + ),
2268 3971 );
2269 3972 $field = FrmField::getAll($where, 'id ASC', '1');
2270 3973
2271 3974 if ($field && is_object($field)) {
3975 + $field_id = get_option('e2pdf_formidable_use_keys', '0') ? $field->field_key : $field->id;
2272 3976 if ($field->type == 'textarea' || $field->type == 'rte') {
2273 - return "[" . $field->id . " wpautop=0]";
3977 + return '[' . $field_id . ' wpautop=0]';
2274 3978 } else {
2275 - return "[" . $field->id . "]";
3979 + return '[' . $field_id . ']';
2276 3980 }
2277 3981 }
2278 3982 }
2279 3983
@@ -2284,31 +3988,29 @@
2284 3988 * Load additional shortcodes for this extension
2285 3989 */
2286 3990 public function load_shortcodes() {
2287 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'));
2288 3994 add_shortcode('e2pdf-frm-repeatable', array($this, 'shortcode_e2pdf_frm_repeatable'));
2289 3995 }
2290 3996
2291 3997 /**
2292 - * [e2pdf-frm-repeatable id='{entry_id}' field_id='{field_id}'] shortcode
2293 - *
3998 + * [e2pdf-frm-repeatable id="entry_id' field_id="field_id"] shortcode
2294 3999 * @param array $atts - Atributes for shortcode
2295 - *
2296 - * @return string - Output of shortcodes
4000 + * @return string - Output of shortcode
2297 4001 */
2298 4002 public function shortcode_e2pdf_frm_repeatable($atts = array()) {
2299 4003 $id = (int) $atts['id'];
2300 4004 $field_id = $atts['field_id'];
2301 4005
2302 - $response = "[frm-field-value field_id='{$field_id}' entry='{$id}']";
4006 + $response = '[frm-field-value field_id="' . $field_id . '" entry="' . $id . '"]';
2303 4007 return $response;
2304 4008 }
2305 4009
2306 4010 /**
2307 4011 * [e2pdf-frm-entry-values id='{form_id}' field_id='{field_id}' separator=''] shortcode
2308 - *
2309 4012 * @param array $atts - Atributes for shortcode
2310 - *
2311 4013 * @return string - Output of shortcodes
2312 4014 */
2313 4015 public function shortcode_e2pdf_frm_entry_values($atts = array()) {
2314 4016 $form_id = (int) $atts['id'];
@@ -2317,10 +4019,11 @@
2317 4019
2318 4020 $response = '';
2319 4021 $values = array();
2320 4022 if ($form_id && $field_id && class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
4023 +
2321 4024 $where = array(
2322 - 'it.form_id' => $form_id
4025 + 'it.form_id' => $form_id,
2323 4026 );
2324 4027 $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
2325 4028 foreach ($entries_tmp as $key => $entry) {
2326 4029 $values[] = FrmEntryMeta::get_meta_value($entry, $field_id);
@@ -2330,13 +4033,125 @@
2330 4033 return $response;
2331 4034 }
2332 4035
2333 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 + /**
2334 4150 * Get styles for generating Map Field function
2335 - *
2336 4151 * @return array - List of css files to load
2337 4152 */
2338 - public function get_styles() {
4153 + public function styles($item_id = false) {
2339 4154
2340 4155 $styles = array();
2341 4156 if (class_exists('FrmStylesHelper')) {
2342 4157 $uploads = FrmStylesHelper::get_upload_base();
@@ -2345,12 +4160,136 @@
2345 4160 $url = $uploads['baseurl'] . $saved_css_path;
2346 4161 } else {
2347 4162 $url = admin_url('admin-ajax.php?action=frmpro_css');
2348 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 + }
2349 4169
2350 - $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 + }
2351 4213 }
4214 + }
2352 4215
2353 - 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 + }
2354 4256 }
2355 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 + }
2356 4295 }