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