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