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 -1214 1.01.01 → 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,186 +47,246 @@
59 47 }
60 48
61 49 /**
62 50 * Set option
63 - *
64 51 * @param string $key - Key of option
65 52 * @param string $value - Value of option
66 - *
67 53 * @return bool - Status of setting option
68 54 */
69 55 public function set($key, $value) {
70 -
71 56 if (!isset($this->options)) {
72 57 $this->options = new stdClass();
73 58 }
74 -
75 59 $this->options->$key = $value;
60 + switch ($key) {
61 + case 'item':
62 + $this->set('cached_form', false);
63 + if ($this->get('item') && $this->get('item') != '-2' && class_exists('FrmForm')) {
64 + $form = FrmForm::getOne($this->get('item'));
65 + if (isset($form->id)) {
66 + $this->set('cached_form', $form);
67 + }
68 + }
69 + break;
70 + case 'item1':
71 + $this->set('cached_form', false);
72 + if ($this->get('item1') && class_exists('FrmForm')) {
73 + $form = FrmForm::getOne($this->get('item1'));
74 + if (isset($form->id)) {
75 + $this->set('cached_form', $form);
76 + }
77 + }
78 + break;
79 + case 'item2':
80 + $this->set('cached_form2', false);
81 + if ($this->get('item2') && class_exists('FrmForm')) {
82 + $form = FrmForm::getOne($this->get('item2'));
83 + if (isset($form->id)) {
84 + $this->set('cached_form2', $form);
85 + }
86 + }
87 + break;
88 + case 'dataset':
89 + $this->set('cached_entry', false);
90 + if ($this->get('cached_form') && $this->get('dataset') && class_exists('FrmEntry')) {
91 + if (substr($this->get('dataset'), 0, 4) === 'tmp_') {
92 + $this->set('cached_entry', get_transient('e2pdf_' . $this->get('dataset')));
93 + } else {
94 + $entry = FrmEntry::getOne($this->get('dataset'));
95 + if ($entry && isset($entry->form_id) && $entry->form_id == $this->get('cached_form')->id) {
96 + if (!empty($entry->parent_item_id)) {
97 + $parent_entry = FrmEntry::getOne($entry->parent_item_id);
98 + if ($parent_entry && isset($parent_entry->form_id)) {
99 + $entry->parent_entry = $parent_entry;
100 + }
101 + }
102 + $this->set('cached_entry', $entry);
103 + }
104 + }
105 + }
106 + break;
107 + case 'dataset2':
108 + if ($this->get('cached_form2') && $this->get('dataset2') && class_exists('FrmEntry')) {
109 + $entry = FrmEntry::getOne($this->get('dataset2'));
110 + if ($entry && isset($entry->form_id) && $entry->form_id == $this->get('cached_form2')->id) {
111 + if (!empty($entry->parent_item_id)) {
112 + $parent_entry = FrmEntry::getOne($entry->parent_item_id);
113 + if ($parent_entry && isset($parent_entry->form_id)) {
114 + $entry->parent_entry = $parent_entry;
115 + }
116 + }
117 + $this->set('cached_entry2', $entry);
118 + }
119 + }
120 + break;
121 + default:
122 + break;
123 + }
76 124 return true;
77 125 }
78 126
79 127 /**
80 128 * Get option by key
81 - *
82 129 * @param string $key - Key to get assigned option value
83 - *
84 130 * @return mixed
85 131 */
86 132 public function get($key) {
87 -
88 133 if (isset($this->options->$key)) {
89 134 $value = $this->options->$key;
90 - return $value;
91 135 } else {
92 - return false;
136 + switch ($key) {
137 + case 'args':
138 + $value = array();
139 + break;
140 + default:
141 + $value = false;
142 + break;
143 + }
93 144 }
145 + return $value;
94 146 }
95 147
96 148 /**
97 149 * Get items to work with
98 - *
99 150 * @return array() - List of available items
100 151 */
101 - public function get_items() {
102 -
103 - $content = array();
104 -
152 + public function items() {
153 + $items = array();
105 154 if (class_exists('FrmForm')) {
106 155 $where = array(
107 156 'is_template' => 0,
108 - 'status' => 'published'
157 + 'status' => 'published',
109 158 );
110 -
111 159 $forms = FrmForm::getAll($where, 'name');
112 160 if ($forms) {
113 - foreach ($forms as $key => $value) {
114 - $content[] = array(
115 - 'key' => $value->id,
116 - 'value' => $value->name
117 - );
161 + foreach ($forms as $key => $form) {
162 + $items[] = $this->item($form->id);
118 163 }
119 164 }
120 165 }
121 -
122 - return $content;
166 + return $items;
123 167 }
124 168
125 169 /**
126 170 * Get entries for export
127 - *
128 171 * @param int $item - Form ID
129 172 * @param string $name - Entries names
130 - *
131 173 * @return array() - Entries list
132 174 */
133 - public function get_datasets($item = false, $name = false) {
134 -
135 - $item = (int) $item;
175 + public function datasets($item_id = false, $name = false) {
176 + $item_id = (int) $item_id;
136 177 $datasets = array();
137 -
138 - if (class_exists('FrmEntry') && $item) {
178 + if (class_exists('FrmEntry') && $item_id) {
139 179 $where = array(
140 - 'it.form_id' => $item
180 + 'it.form_id' => $item_id,
141 181 );
142 -
143 - $datasets_tmp = FrmEntry::getAll($where, ' ORDER BY id DESC');
144 -
145 - if ($datasets_tmp) {
146 - foreach ($datasets_tmp as $key => $dataset) {
147 - $this->set('item', $item);
148 - $this->set('dataset', $dataset->id);
149 -
150 - $dataset_title = $this->render($name);
151 - if (!$dataset_title) {
152 - $dataset_title = $dataset->item_key;
182 + $entries = FrmEntry::getAll($where, ' ORDER BY id DESC');
183 + if ($entries) {
184 + $this->set('item', $item_id);
185 + if (class_exists('FrmFieldsHelper') && class_exists('FrmFormsController') && method_exists('FrmFormsController', 'replace_form_name_shortcodes')) {
186 + $this->set('cached_shortcodes', FrmFieldsHelper::get_shortcodes($name, $item_id));
187 + }
188 + foreach ($entries as $key => $entry) {
189 + $this->set('dataset', $entry->id);
190 + $entry_title = $this->render($name);
191 + if (!$entry_title) {
192 + $entry_title = $entry->item_key;
153 193 }
154 194 $datasets[] = array(
155 - 'key' => $dataset->id,
156 - 'value' => $dataset_title
195 + 'key' => $entry->id,
196 + 'value' => $entry_title,
157 197 );
158 198 }
199 + $this->set('cached_shortcodes', false);
159 200 }
160 201 }
161 -
162 -
163 202 return $datasets;
164 203 }
165 204
166 205 /**
167 - * Get dataset
168 - *
169 - * @param int $dataset - Dataset ID
170 - *
171 - * @return object - Dataset
206 + * Get Dataset Actions
207 + * @param int $dataset_id - Dataset ID
208 + * @return object
172 209 */
173 - public function get_dataset($dataset = false) {
174 -
175 - $dataset = (int) $dataset;
176 -
177 - if (!$dataset) {
210 + public function get_dataset_actions($dataset_id = false) {
211 + $dataset_id = (int) $dataset_id;
212 + if (!$dataset_id) {
178 213 return false;
179 214 }
215 + $actions = new stdClass();
216 + $actions->view = $this->helper->get_url(
217 + array(
218 + 'page' => 'formidable-entries',
219 + 'frm_action' => 'show',
220 + 'id' => $dataset_id,
221 + )
222 + );
223 + $actions->delete = false;
224 + return $actions;
225 + }
180 226
181 - $data = new stdClass();
182 - $data->url = $this->helper->get_url(array('page' => 'formidable-entries', 'frm_action' => 'show', 'id' => $dataset));
183 -
184 - return $data;
227 + /**
228 + * Get Template Actions
229 + * @param int $template - Template ID
230 + * @return object
231 + */
232 + public function get_template_actions($template = false) {
233 + $template = (int) $template;
234 + if (!$template) {
235 + return;
236 + }
237 + $actions = new stdClass();
238 + $actions->delete = false;
239 + return $actions;
185 240 }
186 241
187 242 /**
188 243 * Get item
189 - *
190 - * @param int $item - Item ID
191 - *
244 + * @param int $item_id - Item ID
192 245 * @return object - Item
193 246 */
194 - public function get_item($item = false) {
195 -
196 - $item = (int) $item;
197 - $form = new stdClass();
198 -
199 - $formidable_form = false;
247 + public function item($item_id = false) {
248 + $item_id = (int) $item_id;
249 + if (!$item_id && $this->get('item')) {
250 + $item_id = $this->get('item');
251 + }
252 + $form = false;
200 253 if (class_exists('FrmForm')) {
201 - $formidable_form = FrmForm::getOne($item);
254 + $form = FrmForm::getOne($item_id);
202 255 }
203 -
204 - if ($formidable_form) {
205 - $form->url = $this->helper->get_url(array('page' => 'formidable', 'frm_action' => 'edit', 'id' => $item));
206 - $form->name = $formidable_form->name;
256 + $item = new stdClass();
257 + if ($form) {
258 + $item->id = (string) $item_id;
259 + $item->url = $this->helper->get_url(
260 + array(
261 + 'page' => 'formidable',
262 + 'frm_action' => 'edit',
263 + 'id' => $item_id,
264 + )
265 + );
266 + $item->name = esc_html('' === $form->name ? __('(no title)', 'formidable') : $form->name . ($form->parent_form_id ? __(' (child)', 'formidable') : ''));
207 267 } else {
208 - $form->url = 'javascript:void(0);';
209 - $form->name = '';
268 + $item->id = '';
269 + $item->url = '';
270 + $item->name = '';
210 271 }
211 - return $form;
272 + return $item;
212 273 }
213 274
214 275 /**
215 276 * Render value according to content
216 - *
217 277 * @param string $value - Content
218 278 * @param string $type - Type of rendering value
219 279 * @param array $field - Field details
220 - *
221 280 * @return string - Fully rendered value
222 281 */
223 - public function render($value, $type = false, $field = array()) {
224 -
225 - $value = $this->render_shortcodes($value, $type, $field);
226 - $value = $this->strip_shortcodes($value);
227 -
228 - if ($type === 'value' && isset($field['type']) && $field['type'] === 'e2pdf-checkbox' && isset($field['properties']['option'])) {
229 - $option = $this->render($field['properties']['option']);
230 - $options = explode(', ', $value);
231 - $option_options = explode(', ', $option);
232 - if (is_array($options) && is_array($option_options) && !array_diff($option_options, $options)) {
233 - return $option;
234 - } else {
235 - return "";
236 - }
282 + public function render($value, $field = array(), $convert_shortcodes = true, $raw = false) {
283 + $value = $this->render_shortcodes($value, $field);
284 + if (!$raw) {
285 + $value = $this->strip_shortcodes($value);
286 + $value = $this->convert_shortcodes($value, $convert_shortcodes, isset($field['type']) && $field['type'] == 'e2pdf-html' ? true : false);
287 + $value = $this->helper->load('field')->render_checkbox($value, $this, $field);
237 288 }
238 -
239 - $value = str_replace("&#91;", "[", $value);
240 -
241 289 return $value;
242 290 }
243 291
244 292 /**
@@ -245,10 +293,16 @@
245 293 * Load actions for this extension
246 294 */
247 295 public function load_actions() {
248 296 add_action('frm_notification', array($this, 'action_frm_notification'), 30, 3);
249 - add_action('e2pdf_model_template_fill_pre', array($this, 'action_e2pdf_model_template_fill_pre'), 10, 2);
250 - add_action('e2pdf_model_template_fill_after', array($this, 'action_e2pdf_model_template_fill_after'), 10, 2);
297 + add_action('check_ajax_referer', array($this, 'action_check_ajax_referer'), 10, 2);
298 + add_action('frm_after_create_entry', array($this, 'action_frm_default_value'), 0, 2);
299 + add_action('frm_after_update_entry', array($this, 'action_frm_default_value'), 0, 2);
300 + add_action('frm_success_action', array($this, 'action_frm_success_action'));
301 +
302 + /* Hooks */
303 + add_action('frm_show_entry_sidebar', array($this, 'hook_formidable_entry_view'));
304 + add_action('frm_edit_entry_sidebar', array($this, 'hook_formidable_entry_edit'));
251 305 }
252 306
253 307 /**
254 308 * Load filters for this extension
@@ -253,106 +307,117 @@
253 307 /**
254 308 * Load filters for this extension
255 309 */
256 310 public function load_filters() {
311 +
312 + if (!get_option('e2pdf_formidable_disable_filter', '0')) {
313 + add_filter('frm_display_entry_content', array(new Model_E2pdf_Filter(), 'pre_filter'), 9);
314 + add_filter('frm_display_entry_content', array(new Model_E2pdf_Filter(), 'filter'), 25);
315 + add_filter('frm_display_entry_content', array($this, 'filter_frm_display_entry_content'), 30);
316 + add_filter('frm_content', array(new Model_E2pdf_Filter(), 'pre_filter'));
317 + add_filter('frm_content', array(new Model_E2pdf_Filter(), 'filter'), 25);
318 + }
319 +
257 320 add_filter('frm_content', array($this, 'filter_frm_content'), 30, 3);
321 + add_filter('frm_image_html_array', array($this, 'filter_frm_image_html_array'), 10, 2);
258 322 add_filter('frm_notification_attachment', array($this, 'filter_frm_notification_attachment'), 30, 3);
259 - add_filter('e2pdf_model_options_get_options_options', array($this, 'filter_e2pdf_model_options_get_options_options'), 10, 1);
323 + add_filter('e2pdf_model_options_get_options_options', array($this, 'filter_e2pdf_model_options_get_options_options'));
324 + add_filter('frm_main_feedback', array($this, 'filter_frm_main_feedback'));
325 +
326 + // replace shortcodes on backup
260 327 add_filter('e2pdf_controller_templates_backup_options', array($this, 'filter_e2pdf_controller_templates_backup_options'), 10, 3);
261 -
262 328 add_filter('e2pdf_controller_templates_backup_pages', array($this, 'filter_e2pdf_controller_templates_backup_pages'), 10, 4);
263 - add_filter('e2pdf_controller_templates_backup_dataset_title', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
264 - add_filter('e2pdf_controller_templates_backup_button_title', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
265 - add_filter('e2pdf_controller_templates_backup_name', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
266 - add_filter('e2pdf_controller_templates_backup_password', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
329 + add_filter('e2pdf_controller_templates_backup_actions', array($this, 'filter_e2pdf_controller_templates_backup_actions'), 10, 4);
330 + add_filter('e2pdf_controller_templates_backup_replace_shortcodes', array($this, 'filter_e2pdf_controller_templates_backup_replace_shortcodes'), 10, 4);
267 331
332 + // replace shortcodes on import
333 + add_filter('e2pdf_controller_templates_import_options', array($this, 'filter_e2pdf_controller_templates_import_options'), 10, 3);
268 334 add_filter('e2pdf_controller_templates_import_pages', array($this, 'filter_e2pdf_controller_templates_import_pages'), 10, 5);
269 - add_filter('e2pdf_controller_templates_import_dataset_title', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
270 - add_filter('e2pdf_controller_templates_import_button_title', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
271 - add_filter('e2pdf_controller_templates_import_name', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
272 - add_filter('e2pdf_controller_templates_import_password', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
335 + add_filter('e2pdf_controller_templates_import_actions', array($this, 'filter_e2pdf_controller_templates_import_actions'), 10, 5);
336 + add_filter('e2pdf_controller_templates_import_replace_shortcodes', array($this, 'filter_e2pdf_controller_templates_import_replace_shortcodes'), 10, 5);
337 +
338 + // hooks
339 + add_filter('frm_row_actions', array($this, 'hook_formidable_row_actions'), 10, 2);
340 +
341 + // frm-graph
342 + add_filter('frm_graph_shortcode_custom_html', array($this, 'filter_frm_graph_shortcode_custom_html'), 99, 2);
273 343 }
274 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 +
275 354 /**
276 355 * Render shortcodes which available in this extension
277 - *
278 356 * @param string $value - Content
279 357 * @param string $type - Type of rendering value
280 358 * @param array $field - Field details
281 - *
282 359 * @return string - Value with rendered shortcodes
283 360 */
284 - public function render_shortcodes($value, $type = false, $field = array()) {
285 -
286 - $dataset = $this->get('dataset');
287 - $item = $this->get('item');
288 -
289 - $form = false;
290 - $entry = false;
291 - $maybe_checkbox_separated = false;
292 -
293 - if (class_exists('FrmForm') && class_exists('FrmEntry')) {
294 - $form = FrmForm::getOne($item);
295 - $entry = FrmEntry::getOne($dataset);
296 - }
297 -
298 - if ($form && $entry) {
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;
367 + if ($this->verify()) {
299 368 if (false !== strpos($value, '[')) {
300 -
301 - // Start render Separatable fields shortcode
369 + $value = $this->helper->load('field')->pre_shortcodes($value, $this, $field);
302 370 if (class_exists('FrmProEntry')) {
303 371 $shortcode_tags = array();
304 372 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
305 373 $tagnames = array_intersect($shortcode_tags, $matches[1]);
306 -
307 374 foreach ($matches[1] as $key => $shortcode) {
308 - if (strpos($shortcode, ':') !== false) {
375 + if (false !== strpos($shortcode, ':')) {
309 376 $shortcode_tags[] = $shortcode;
310 377 }
311 378 }
312 -
313 379 $tagnames = array_intersect($shortcode_tags, $matches[1]);
314 380 if (!empty($tagnames)) {
315 - $pattern = get_shortcode_regex($tagnames);
316 - preg_match_all("/$pattern/", $value, $shortcodes);
381 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
317 382 foreach ($shortcodes[0] as $key => $shortcode_value) {
318 - $shortcode = array();
319 - $shortcode[1] = $shortcodes[1][$key];
320 - $shortcode[2] = $shortcodes[2][$key];
321 - $shortcode[3] = $shortcodes[3][$key];
322 - $shortcode[4] = $shortcodes[4][$key];
323 - $shortcode[5] = $shortcodes[5][$key];
324 - $shortcode[6] = $shortcodes[6][$key];
325 -
326 - $shortcode_details = explode(":", $shortcode[2]);
327 -
383 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
384 + $shortcode_details = explode(':', $shortcode[2]);
328 385 $field_id = $shortcode_details['0'];
329 386 $child_id = $shortcode_details['1'];
330 387 $child_entry = 0;
331 -
332 388 $child_field = false;
333 389 $child_form = false;
334 -
335 - if (class_exists("FrmField")) {
390 + if (class_exists('FrmField')) {
336 391 $child_field = FrmField::getOne($field_id);
337 392 if ($child_field) {
338 393 $child_form = $child_field->form_id;
339 394 }
340 395 }
341 -
342 - $childs = FrmProEntry::get_sub_entries($dataset, true);
343 396 $child_entries = array();
344 -
345 - if ($childs && $child_form) {
346 - foreach ($childs as $child) {
347 - if ($child->form_id == $child_form) {
348 - $child_entries[] = $child->id;
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 + }
349 404 }
350 405 }
351 406 }
352 -
353 - $new_shortcode = "";
354 -
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 = '';
355 420 if (!empty($child_entries) && count($child_entries) >= $child_id) {
356 421 $start = 1;
357 422 foreach ($child_entries as $key => $sub_entry) {
358 423 if ($start == $child_id) {
@@ -361,307 +426,417 @@
361 426 }
362 427 $start++;
363 428 }
364 429
365 - $shortcode[2] = "frm-field-value field_id={$field_id} entry={$child_entry}";
366 - $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] . ']';
367 432 }
368 -
369 - $maybe_checkbox_separated = true;
433 + $checkbox_separated = true;
370 434 $value = str_replace($shortcode_value, $new_shortcode, $value);
371 435 }
372 436 }
373 437 }
374 - // End render Separatable fields shortcode
375 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 */
376 459 $shortcode_tags = array(
377 - 'e2pdf-format-number',
378 - 'e2pdf-format-date',
379 - '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',
380 466 );
381 -
382 467 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
383 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 + }
384 504
385 - 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);
386 515
387 - $pattern = get_shortcode_regex($tagnames);
388 - preg_match_all("/$pattern/", $value, $shortcodes);
389 - foreach ($shortcodes[0] as $key => $shortcode_value) {
390 - $shortcode = array();
391 - $shortcode[1] = $shortcodes[1][$key];
392 - $shortcode[2] = $shortcodes[2][$key];
393 - $shortcode[3] = $shortcodes[3][$key];
394 - $shortcode[4] = $shortcodes[4][$key];
395 - $shortcode[5] = $shortcodes[5][$key];
396 - $shortcode[6] = $shortcodes[6][$key];
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 + }
397 525
398 - if (isset($shortcode['5'])) {
399 - $sub_value = $this->strip_shortcodes(apply_filters('frm_content', $shortcode['5'], $form, $entry));
400 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]" . $sub_value . "[/" . $shortcode['2'] . "]", $value);
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);
401 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);
402 541 }
403 542 }
404 543 }
405 544
406 -
407 545 /*
408 546 * Checkboxes separatable fix filter add
409 547 * @since 0.01.43
410 548 */
411 - if ($maybe_checkbox_separated) {
549 + if ($checkbox_separated) {
412 550 add_filter('frm_display_value_custom', array($this, 'filter_frm_display_value_custom'), 0, 3);
413 551 }
414 552
415 - $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 + }
416 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 +
417 587 /*
418 588 * Checkboxes separatable fix filter remove
419 589 * @since 0.01.43
420 590 */
421 - if ($maybe_checkbox_separated) {
591 + if ($checkbox_separated) {
422 592 remove_filter('frm_display_value_custom', array($this, 'filter_frm_display_value_custom'), 0);
423 593 }
424 594
425 - $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);
426 608
427 - if (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
428 - $esig = isset($field['properties']['esig']) && $field['properties']['esig'] ? true : false;
429 - if ($esig) {
430 - //process e-signature
431 - $value = "";
432 - } else {
433 - preg_match('/src="([^"]*)"/', $value, $matches);
434 -
435 - if (isset($matches[1])) {
436 - $value = $matches[1];
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'));
437 621 }
438 -
439 - $helper_e2pdf_image = new Helper_E2pdf_Image();
440 -
441 - if (!$helper_e2pdf_image->get_image($value)) {
442 - $value = $this->strip_shortcodes($value);
443 - if (
444 - $value &&
445 - trim($value) != "" &&
446 - extension_loaded('gd') &&
447 - function_exists('imagettftext')
448 - ) {
449 - if (isset($field['properties']['text_color']) && $field['properties']['text_color']) {
450 - $penColour = $this->helper->hexColorAllocate($field['properties']['text_color']);
451 - } else {
452 - $penColour = array(0x14, 0x53, 0x94);
453 - }
454 -
455 - $default_options = array(
456 - 'imageSize' => array(isset($field['width']) ? $field['width'] : '400', isset($field['height']) ? $field['height'] : '150'),
457 - 'bgColour' => 'transparent',
458 - 'penColour' => $penColour
459 - );
460 -
461 - $options = array();
462 - $options = apply_filters('e2pdf_frm_sig_output_options', $options, $field_id);
463 - $options = array_merge($default_options, $options);
464 -
465 - $model_e2pdf_font = new Model_E2pdf_Font();
466 -
467 - $font = false;
468 - if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
469 - $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
470 - } elseif (class_exists('FrmSigAppHelper')) {
471 - if (file_exists(FrmSigAppHelper::plugin_path() . '/assets/journal.ttf')) {
472 - $font = FrmSigAppHelper::plugin_path() . '/assets/journal.ttf';
473 - }
474 - }
475 -
476 - if (!$font) {
477 - $font = $model_e2pdf_font->get_font_path('Noto Sans');
478 - }
479 -
480 - $size = 150;
481 - if (isset($field['properties']['text_font_size']) && $field['properties']['text_font_size']) {
482 - $size = $field['properties']['text_font_size'];
483 - }
484 -
485 - $model_e2pdf_signature = new Model_E2pdf_Signature();
486 - $value = $model_e2pdf_signature->ttf_signature($value, $size, $font, $options);
487 - } else {
488 - $value = "";
489 - }
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'));
490 626 }
491 627 }
492 - }
493 -
494 - if ((false !== strpos($value, '[referer]') || false !== strpos($value, '[browser]')) && isset($entry->description)) {
495 - $description = maybe_unserialize($entry->description);
496 - $referer = "";
497 - if (isset($description['referrer'])) {
498 - if (@preg_match('/Referer +\d+\:[ \t]+([^\n\t]+)/', $description['referrer'], $m)) {
499 - $referer = $m[1];
500 - } else {
501 - $referer = $description['referrer'];
502 - }
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);
503 632 }
504 -
505 - $browser = "";
506 - if (isset($description['browser'])) {
507 - $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);
508 637 }
638 + }
509 639
510 - $replace = array(
511 - 'from' => array(
512 - '[referer]',
513 - '[browser]'
514 - ),
515 - 'to' => array(
516 - $referer,
517 - $browser
518 - )
519 - );
520 - $value = str_replace($replace['from'], $replace['to'], $value);
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);
521 644 }
522 645
523 - if (false !== strpos($value, '[entry_num]')) {
524 - $entry_num = '';
525 - if (class_exists("FrmDb")) {
526 - $entry_num = FrmDb::get_count('frm_items', array("form_id = '{$form->id}' AND id <= '{$entry->id}' AND 1" => "1"));
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 + }
527 654 }
528 -
529 - $replace = array(
530 - 'from' => array(
531 - '[entry_num]'
532 - ),
533 - 'to' => array(
534 - $entry_num
535 - )
536 - );
537 -
538 -
539 - $value = str_replace($replace['from'], $replace['to'], $value);
655 + $value = $this->helper->load('field')->inner_shortcodes($value, $this, $field);
540 656 }
541 657
542 -
543 - if (false !== strpos($value, '[pdf_num]')) {
544 - $pdf_num = '0';
545 - $uid = $this->get('uid');
546 - if ($uid) {
547 - $entry = new Model_E2pdf_Entry();
548 - if ($entry->load_by_uid($uid)) {
549 - $pdf_num = $entry->get('pdf_num') + 1;
550 - }
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';
551 664 }
552 -
553 - $replace = array(
554 - 'from' => array(
555 - '[pdf_num]'
556 - ),
557 - 'to' => array(
558 - $pdf_num
559 - )
560 - );
561 -
562 -
563 - $value = str_replace($replace['from'], $replace['to'], $value);
564 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 + );
565 678 }
566 -
567 - 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 + );
568 682 }
569 683
570 684 /**
571 685 * Strip unused shortcodes
572 - *
573 686 * @param string $value - Content
574 - *
575 687 * @return string - Value with removed unused shortcodes
576 688 */
577 689 public function strip_shortcodes($value) {
578 - $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', "", $value);
690 + $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
579 691 return $value;
580 692 }
581 693
582 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 + /**
583 743 * Search and update shortcodes for this extension inside content
584 744 * Auto set of dataset id
585 - *
586 745 * @param string $content - Content
587 746 * @param int $form - ID of form
588 - * @param int $dataset - ID of dataset
589 - *
747 + * @param int $dataset_id - ID of dataset
590 748 * @return string - Content with updates shortcodes
591 749 */
592 - public function filter_frm_content($content, $form, $dataset) {
750 + public function filter_frm_content($content, $form, $dataset_id) {
593 751
594 752 if (false === strpos($content, '[')) {
595 753 return $content;
596 754 }
597 -
598 755 $shortcode_tags = array(
599 756 'e2pdf-download',
600 757 'e2pdf-save',
601 - 'e2pdf-view'
758 + 'e2pdf-view',
759 + 'e2pdf-adobesign',
760 + 'e2pdf-zapier',
602 761 );
603 -
604 762 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
605 -
606 763 $tagnames = array_intersect($shortcode_tags, $matches[1]);
607 -
608 764 if (!empty($tagnames)) {
609 - $pattern = get_shortcode_regex($tagnames);
610 -
611 - preg_match_all("/$pattern/", $content, $shortcodes);
765 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
612 766 foreach ($shortcodes[0] as $key => $shortcode_value) {
613 -
614 - $extension = false;
615 - $item = false;
616 -
617 - $shortcode = array();
618 - $shortcode[1] = $shortcodes[1][$key];
619 - $shortcode[2] = $shortcodes[2][$key];
620 - $shortcode[3] = $shortcodes[3][$key];
621 - $shortcode[4] = $shortcodes[4][$key];
622 - $shortcode[5] = $shortcodes[5][$key];
623 - $shortcode[6] = $shortcodes[6][$key];
624 -
767 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
625 768 $atts = shortcode_parse_atts($shortcode[3]);
626 -
627 - if (array_key_exists('id', $atts)) {
628 - $template = new Model_E2pdf_Template();
629 - $template->load($atts['id']);
630 - if ($template->get('extension') === 'formidable') {
631 - $extension = $template->get('extension');
632 - $item = $template->get('item');
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 + }
633 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);
634 802 }
803 + }
804 + }
635 805
636 - if ($extension) {
637 - if (!array_key_exists('dataset', $atts)) {
806 + return $content;
807 + }
638 808
639 - if (is_object($dataset)) {
640 - $entry_id = $dataset->id;
641 - } else {
642 - $entry_id = $dataset;
643 - }
809 + public function filter_frm_display_entry_content($content) {
644 810
645 - if ($entry_id) {
646 - $atts['dataset'] = $entry_id;
647 - $shortcode[3] .= " dataset='{$entry_id}'";
648 -
649 - if ($shortcode[2] === 'e2pdf-save') {
650 - $shortcode[3] .= " apply='true'";
651 - }
652 -
653 - $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
654 - }
655 - } else {
656 -
657 - if ($shortcode[2] === 'e2pdf-save') {
658 - $shortcode[3] .= " apply='true'";
659 - }
660 -
661 - $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
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);
827 + $atts = shortcode_parse_atts($shortcode[3]);
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"';
662 832 }
663 - } elseif ($shortcode['2'] === 'e2pdf-view') {
833 + if (!isset($atts['filter'])) {
834 + $shortcode[3] .= ' filter="true"';
835 + }
836 + if (!isset($atts['iframe_download'])) {
837 + $shortcode[3] .= ' iframe_download="true"';
838 + }
664 839 $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
665 840 }
666 841 }
667 842 }
@@ -670,20 +845,21 @@
670 845 }
671 846
672 847 /**
673 848 * Filter for checkbox repeatable Label/Value fix
674 - *
675 849 * @param array $value - Value
676 850 * @param obj $field - Field
677 851 * @param array $atts - Shortcode Attributes
678 - *
679 852 * @return mixed - Updated value
680 853 */
681 854 public function filter_frm_display_value_custom($value, $field, $atts = array()) {
682 - if (class_exists("FrmProEntriesController")) {
683 - $defaults = array('html' => 0, 'type' => $field->type, 'keepjs' => 0);
855 + if (class_exists('FrmProEntriesController')) {
856 + $defaults = array(
857 + 'html' => 0,
858 + 'type' => $field->type,
859 + 'keepjs' => 0,
860 + );
684 861 $atts = array_merge($defaults, $atts);
685 -
686 862 if ($atts['type'] === 'checkbox') {
687 863 $value = FrmProEntriesController::get_option_label_for_saved_value($value, $field, $atts);
688 864 }
689 865 }
@@ -690,97 +866,239 @@
690 866 return $value;
691 867 }
692 868
693 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 + /**
694 918 * Generate attachments according shortcodes in Email template
695 - *
696 919 * @param array $attachments - List of attachments
697 920 * @param int $form - ID of form
698 921 * @param array $args - Arguments
699 - *
700 922 * @return array - Updated list of attachments
701 923 */
702 - public function filter_frm_notification_attachment($attachments = array(), $form, $args) {
703 -
924 + public function filter_frm_notification_attachment($attachments, $form, $args) {
704 925 if (!isset($args['email_key'])) {
705 926 return $attachments;
706 927 }
707 -
708 928 $form_actions = FrmFormAction::get_action_for_form($form->id);
709 -
710 - $dataset = $args['entry']->id;
929 + $dataset_id = $args['entry']->id;
711 930 $email_key = $args['email_key'];
712 931
713 932 $shortcode_tags = array(
714 933 'e2pdf-attachment',
934 + 'e2pdf-save',
715 935 );
716 936
717 937 foreach ($form_actions as $key => $action) {
718 938 if ($action->ID === $email_key) {
719 -
720 939 $content = $action->post_content['email_message'];
721 -
722 940 if (false === strpos($content, '[')) {
723 941 return $attachments;
724 942 }
725 943
944 + remove_filter('frm_content', array($this, 'filter_frm_content'), 30);
726 945 $content = apply_filters('frm_content', $content, $form, $args['entry']);
946 + add_filter('frm_content', array($this, 'filter_frm_content'), 30, 3);
727 947
728 948 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
729 949 $tagnames = array_intersect($shortcode_tags, $matches[1]);
730 -
731 950 if (!empty($tagnames)) {
732 - $pattern = get_shortcode_regex($tagnames);
951 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
952 + foreach ($shortcodes[0] as $key => $shortcode_value) {
953 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
954 + $atts = shortcode_parse_atts($shortcode[3]);
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 + }
976 + }
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 + }
1011 + }
1012 + }
1013 + }
1014 + }
1015 + }
1016 + return $attachments;
1017 + }
733 1018
734 - preg_match_all("/$pattern/", $content, $shortcodes);
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) {
735 1026
736 - foreach ($shortcodes[0] as $key => $shortcode_value) {
1027 + if (isset($atts['decrypt']) &&
1028 + $atts['decrypt'] &&
1029 + class_exists('FrmProFileField') &&
1030 + class_exists('FrmProFilePayloadBuilder') &&
1031 + class_exists('FrmAppHelper')
1032 + ) {
737 1033
738 - $shortcode = array();
739 - $shortcode[1] = $shortcodes[1][$key];
740 - $shortcode[2] = $shortcodes[2][$key];
741 - $shortcode[3] = $shortcodes[3][$key];
742 - $shortcode[4] = $shortcodes[4][$key];
743 - $shortcode[5] = $shortcodes[5][$key];
744 - $shortcode[6] = $shortcodes[6][$key];
1034 + $id = $atts['media_id'];
1035 + $permission = isset($atts['permission']) && $atts['permission'] ? true : false;
745 1036
746 - $atts = shortcode_parse_atts($shortcode[3]);
747 - if (!array_key_exists('dataset', $atts)) {
748 - if (is_object($dataset)) {
749 - $entry_id = $dataset->id;
750 - } else {
751 - $entry_id = $dataset;
752 - }
1037 + remove_filter('wp_get_attachment_url', 'FrmProFileField::filter_attachment_url');
1038 + remove_filter('wp_get_attachment_image_src', 'FrmProFileField::filter_attachment_image_src');
753 1039
754 - if ($entry_id) {
755 - $atts['dataset'] = $entry_id;
756 - $shortcode[3] .= " dataset='{$entry_id}' apply='true'";
757 - }
758 - } else {
759 - $shortcode[3] .= " apply='true'";
760 - }
1040 + $is_image = wp_attachment_is_image($id);
1041 + $url = $this->get_file_url($id, $is_image ? $atts['size'] : false);
761 1042
762 - $file = do_shortcode_tag($shortcode);
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) : '';
763 1048
764 - if ($file) {
765 - $this->helper->add('formidable_attachments', $file);
766 - $attachments[] = $file;
767 - }
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;
768 1056 }
769 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);
770 1077 }
771 1078 }
772 - return $attachments;
1079 +
1080 + return $html;
773 1081 }
774 1082
775 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 + /**
776 1096 * Remove Page Breaks for Visual Mapper
777 - *
778 - * @param array $fields - List of fields
779 - *
1097 + * @param array $fields - List of fields
780 1098 * @return array - Updated fields
781 1099 */
782 - function filter_remove_pagebreaks($fields) {
1100 + public function filter_remove_pagebreaks($fields) {
783 1101 foreach ((array) $fields as $field_key => $field) {
784 1102 if ($field->type == 'break') {
785 1103 unset($fields[$field_key]);
786 1104 }
@@ -787,18 +1105,34 @@
787 1105 }
788 1106 return $fields;
789 1107 }
790 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 +
791 1127 /**
792 1128 * Add options for Formidable extension
793 - *
794 - * @param array $options - List of options
795 - *
1129 + * @param array $options - List of options
796 1130 * @return array - Updated options list
797 1131 */
798 1132 public function filter_e2pdf_model_options_get_options_options($options = array()) {
799 1133 $options['formidable_group'] = array(
800 - 'name' => __('Formidable', 'e2pdf'),
1134 + 'name' => 'Formidable Forms',
801 1135 'action' => 'extension',
802 1136 'group' => 'formidable_group',
803 1137 'options' => array(
804 1138 array(
@@ -803,24 +1137,55 @@
803 1137 'options' => array(
804 1138 array(
805 1139 'name' => __('Auto PDF and Visual Mapper', 'e2pdf'),
806 1140 'key' => 'e2pdf_formidable_use_keys',
807 - 'value' => get_option('e2pdf_formidable_use_keys') === false ? 0 : get_option('e2pdf_formidable_use_keys'),
808 - 'default_value' => 0,
1141 + 'value' => get_option('e2pdf_formidable_use_keys', '0'),
1142 + 'default_value' => '0',
809 1143 'type' => 'checkbox',
1144 + 'checkbox_value' => '1',
810 1145 'placeholder' => __('Use Field Keys instead Field IDs', 'e2pdf'),
811 1146 ),
812 - )
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 + ),
813 1157 );
814 1158 return $options;
815 1159 }
816 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 +
817 1183 public function filter_e2pdf_controller_templates_backup_options($options, $template, $extension) {
818 1184
819 1185 if ($extension->loaded('formidable')) {
820 -
821 1186 $options['formidable'] = array(
822 - 'name' => __('Formidable', 'e2pdf'),
1187 + 'name' => 'Formidable Forms',
823 1188 'options' => array(
824 1189 array(
825 1190 'name' => __('Force shortcodes to use', 'e2pdf'),
826 1191 'key' => 'options[formidable_force_shortcodes]',
@@ -830,11 +1195,11 @@
830 1195 'options' => array(
831 1196 '0' => __('None', 'e2pdf'),
832 1197 '1' => __('Fields IDs', 'e2pdf'),
833 1198 '2' => __('Field Keys', 'e2pdf'),
834 - )
1199 + ),
835 1200 ),
836 - )
1201 + ),
837 1202 );
838 1203 }
839 1204
840 1205 return $options;
@@ -839,15 +1204,32 @@
839 1204
840 1205 return $options;
841 1206 }
842 1207
843 - 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) {
844 1209
845 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 + }
846 1231
847 - $where = array('fi.form_id' => (int) $template->get('item'));
848 - $fields = FrmField::getAll($where, 'id ASC');
849 -
850 1232 $search = array();
851 1233 $replace = array();
852 1234
853 1235 if ($options['formidable_force_shortcodes'] == '1') {
@@ -854,13 +1236,14 @@
854 1236 foreach ($fields as $field_key => $field) {
855 1237 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
856 1238 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
857 1239 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
858 -
859 1240 foreach ($sub_fields as $sub_field_key => $sub_field) {
860 1241 $search[] = $sub_field->field_key;
861 1242 $replace[] = $sub_field->id;
862 1243 }
1244 + $search[] = $field->field_key;
1245 + $replace[] = $field->id;
863 1246 } else {
864 1247 $search[] = $field->field_key;
865 1248 $replace[] = $field->id;
866 1249 }
@@ -870,13 +1253,14 @@
870 1253
871 1254 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
872 1255 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
873 1256 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
874 -
875 1257 foreach ($sub_fields as $sub_field_key => $sub_field) {
876 1258 $search[] = $sub_field->id;
877 1259 $replace[] = $sub_field->field_key;
878 1260 }
1261 + $search[] = $field->id;
1262 + $replace[] = $field->field_key;
879 1263 } else {
880 1264 $search[] = $field->id;
881 1265 $replace[] = $field->field_key;
882 1266 }
@@ -884,11 +1268,9 @@
884 1268 }
885 1269
886 1270 $search = array_reverse($search);
887 1271 $replace = array_reverse($replace);
888 -
889 1272 $list = array_combine($search, $replace);
890 -
891 1273 $pages = $this->pages_replace_shortcodes($pages, $list);
892 1274 }
893 1275
894 1276 return $pages;
@@ -893,13 +1275,31 @@
893 1275
894 1276 return $pages;
895 1277 }
896 1278
897 - 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) {
898 1280
899 1281 if ($extension->loaded('formidable') && (isset($options['formidable_force_shortcodes']) && $options['formidable_force_shortcodes'])) {
900 - $where = array('fi.form_id' => (int) $template->get('item'));
901 - $fields = FrmField::getAll($where, 'id ASC');
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 + }
902 1302
903 1303 $search = array();
904 1304 $replace = array();
905 1305
@@ -907,13 +1307,85 @@
907 1307 foreach ($fields as $field_key => $field) {
908 1308 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
909 1309 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
910 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) {
911 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');
912 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) {
913 1383 $search[] = $sub_field->field_key;
914 1384 $replace[] = $sub_field->id;
915 1385 }
1386 + $search[] = $field->field_key;
1387 + $replace[] = $field->id;
916 1388 } else {
917 1389 $search[] = $field->field_key;
918 1390 $replace[] = $field->id;
919 1391 }
@@ -923,13 +1395,14 @@
923 1395
924 1396 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
925 1397 $sub_where = array('fi.form_id' => $field->field_options['form_select']);
926 1398 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
927 -
928 1399 foreach ($sub_fields as $sub_field_key => $sub_field) {
929 1400 $search[] = $sub_field->id;
930 1401 $replace[] = $sub_field->field_key;
931 1402 }
1403 + $search[] = $field->id;
1404 + $replace[] = $field->field_key;
932 1405 } else {
933 1406 $search[] = $field->id;
934 1407 $replace[] = $field->field_key;
935 1408 }
@@ -937,11 +1410,9 @@
937 1410 }
938 1411
939 1412 $search = array_reverse($search);
940 1413 $replace = array_reverse($replace);
941 -
942 1414 $list = array_combine($search, $replace);
943 -
944 1415 $value = $this->replace_shortcodes($value, $list);
945 1416 }
946 1417
947 1418 return $value;
@@ -946,13 +1417,13 @@
946 1417
947 1418 return $value;
948 1419 }
949 1420
950 - 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) {
951 1422
952 1423 if ($extension->loaded('formidable') &&
953 1424 $template->get('item') &&
954 - $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))) &&
955 1426 $xml->item->formidable &&
956 1427 $options['item'] &&
957 1428 class_exists('FrmXMLHelper') &&
958 1429 class_exists('FrmField')
@@ -958,35 +1429,33 @@
958 1429 class_exists('FrmField')
959 1430 ) {
960 1431
961 1432 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
962 - file_put_contents($tmp, base64_decode((String) $xml->item->formidable));
963 -
964 - $dom = new DOMDocument;
1433 + file_put_contents($tmp, base64_decode((string) $xml->item->formidable), LOCK_EX);
1434 + $dom = new DOMDocument();
965 1435 $success = $dom->loadXML(file_get_contents($tmp));
966 -
967 1436 $old_ids = array();
968 1437 $old_keys = array();
969 -
970 1438 if ($success && function_exists('simplexml_import_dom')) {
971 1439 $item_xml = simplexml_import_dom($dom);
972 -
973 1440 foreach ($item_xml->form as $form_key => $form) {
974 - 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))) {
975 1442 foreach ($form->field as $field_key => $field) {
976 - $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
977 1444 if (isset($field_options['form_select']) && $field_options['form_select']) {
978 1445 foreach ($item_xml->form as $sub_form_key => $sub_form) {
979 - if ((String) $sub_form->id == $field_options['form_select']) {
1446 + if ((string) $sub_form->id == $field_options['form_select']) {
980 1447 foreach ($sub_form->field as $sub_field_key => $sub_field) {
981 - $old_ids[] = (String) $sub_field->id;
982 - $old_keys[] = (String) $sub_field->field_key;
1448 + $old_ids[] = (string) $sub_field->id;
1449 + $old_keys[] = (string) $sub_field->field_key;
983 1450 }
984 1451 }
985 1452 }
1453 + $old_ids[] = (string) $field->id;
1454 + $old_keys[] = (string) $field->field_key;
986 1455 } else {
987 - $old_ids[] = (String) $field->id;
988 - $old_keys[] = (String) $field->field_key;
1456 + $old_ids[] = (string) $field->id;
1457 + $old_keys[] = (string) $field->field_key;
989 1458 }
990 1459 }
991 1460 }
992 1461 }
@@ -991,11 +1460,30 @@
991 1460 }
992 1461 }
993 1462 }
994 1463
995 - $where = array('fi.form_id' => (int) $template->get('item'));
996 - $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 + }
997 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 +
998 1486 $new_ids = array();
999 1487 $new_keys = array();
1000 1488
1001 1489 foreach ($fields as $field_key => $field) {
@@ -1002,13 +1490,14 @@
1002 1490
1003 1491 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1004 1492 $sub_where = array('fi.form_id' => (int) $field->field_options['form_select']);
1005 1493 $sub_fields = FrmField::getAll($sub_where, 'id ASC');
1006 -
1007 1494 foreach ($sub_fields as $sub_field_key => $sub_field) {
1008 1495 $new_ids[] = $sub_field->id;
1009 1496 $new_keys[] = $sub_field->field_key;
1010 1497 }
1498 + $new_ids[] = $field->id;
1499 + $new_keys[] = $field->field_key;
1011 1500 } else {
1012 1501 $new_ids[] = $field->id;
1013 1502 $new_keys[] = $field->field_key;
1014 1503 }
@@ -1013,9 +1502,8 @@
1013 1502 $new_keys[] = $field->field_key;
1014 1503 }
1015 1504 }
1016 1505
1017 -
1018 1506 if (count($old_ids) === count($new_ids)) {
1019 1507 $old_ids = array_reverse($old_ids);
1020 1508 $new_ids = array_reverse($new_ids);
1021 1509
@@ -1035,13 +1523,13 @@
1035 1523
1036 1524 return $pages;
1037 1525 }
1038 1526
1039 - 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) {
1040 1528
1041 1529 if ($extension->loaded('formidable') &&
1042 1530 $template->get('item') &&
1043 - $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))) &&
1044 1532 $xml->item->formidable &&
1045 1533 $options['item'] &&
1046 1534 class_exists('FrmXMLHelper') &&
1047 1535 class_exists('FrmField')
@@ -1047,11 +1535,11 @@
1047 1535 class_exists('FrmField')
1048 1536 ) {
1049 1537
1050 1538 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
1051 - file_put_contents($tmp, base64_decode((String) $xml->item->formidable));
1539 + file_put_contents($tmp, base64_decode((string) $xml->item->formidable), LOCK_EX);
1052 1540
1053 - $dom = new DOMDocument;
1541 + $dom = new DOMDocument();
1054 1542 $success = $dom->loadXML(file_get_contents($tmp));
1055 1543
1056 1544 $old_ids = array();
1057 1545 $old_keys = array();
@@ -1059,23 +1547,25 @@
1059 1547 if ($success && function_exists('simplexml_import_dom')) {
1060 1548 $item_xml = simplexml_import_dom($dom);
1061 1549
1062 1550 foreach ($item_xml->form as $form_key => $form) {
1063 - 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))) {
1064 1552 foreach ($form->field as $field_key => $field) {
1065 - $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
1066 1554 if (isset($field_options['form_select']) && $field_options['form_select']) {
1067 1555 foreach ($item_xml->form as $sub_form_key => $sub_form) {
1068 - if ((String) $sub_form->id == $field_options['form_select']) {
1556 + if ((string) $sub_form->id == $field_options['form_select']) {
1069 1557 foreach ($sub_form->field as $sub_field_key => $sub_field) {
1070 - $old_ids[] = (String) $sub_field->id;
1071 - $old_keys[] = (String) $sub_field->field_key;
1558 + $old_ids[] = (string) $sub_field->id;
1559 + $old_keys[] = (string) $sub_field->field_key;
1072 1560 }
1073 1561 }
1074 1562 }
1563 + $old_ids[] = (string) $field->id;
1564 + $old_keys[] = (string) $field->field_key;
1075 1565 } else {
1076 - $old_ids[] = (String) $field->id;
1077 - $old_keys[] = (String) $field->field_key;
1566 + $old_ids[] = (string) $field->id;
1567 + $old_keys[] = (string) $field->field_key;
1078 1568 }
1079 1569 }
1080 1570 }
1081 1571 }
@@ -1080,11 +1570,31 @@
1080 1570 }
1081 1571 }
1082 1572 }
1083 1573
1084 - $where = array('fi.form_id' => (int) $template->get('item'));
1085 - $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 + }
1086 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 +
1087 1597 $new_ids = array();
1088 1598 $new_keys = array();
1089 1599
1090 1600 foreach ($fields as $field_key => $field) {
@@ -1091,13 +1601,129 @@
1091 1601
1092 1602 if (isset($field->field_options['form_select']) && $field->field_options['form_select']) {
1093 1603 $sub_where = array('fi.form_id' => (int) $field->field_options['form_select']);
1094 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 + }
1095 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');
1096 1720 foreach ($sub_fields as $sub_field_key => $sub_field) {
1097 1721 $new_ids[] = $sub_field->id;
1098 1722 $new_keys[] = $sub_field->field_key;
1099 1723 }
1724 + $new_ids[] = $field->id;
1725 + $new_keys[] = $field->field_key;
1100 1726 } else {
1101 1727 $new_ids[] = $field->id;
1102 1728 $new_keys[] = $field->field_key;
1103 1729 }
@@ -1120,10 +1746,8 @@
1120 1746
1121 1747 unset($dom);
1122 1748 unlink($tmp);
1123 1749 }
1124 -
1125 -
1126 1750 return $value;
1127 1751 }
1128 1752
1129 1753 /**
@@ -1131,9 +1755,8 @@
1131 1755 */
1132 1756 public function action_frm_notification() {
1133 1757
1134 1758 $files = $this->helper->get('formidable_attachments');
1135 -
1136 1759 if (is_array($files) && !empty($files)) {
1137 1760 foreach ($files as $key => $file) {
1138 1761 $this->helper->delete_dir(dirname($file) . '/');
1139 1762 }
@@ -1141,21 +1764,35 @@
1141 1764 }
1142 1765 }
1143 1766
1144 1767 /**
1145 - * Fix for user_id shortcode
1146 - *
1147 - * @param object $template - Current Template
1148 - * @param object $extension - Loaded extension
1149 - *
1768 + * Fix to render E2Pdf shortcodes with beforeContent and afterContent inside Formidable Form View Preview
1150 1769 */
1151 - public function action_e2pdf_model_template_fill_pre($template, $extension) {
1152 - if ($extension->loaded("formidable")) {
1153 - if ($extension->get('dataset') && class_exists("FrmEntry") && is_admin()) {
1154 - $extension->set('user_id', get_current_user_id());
1155 - $entry = FrmEntry::getOne($extension->get('dataset'));
1156 - if ($entry) {
1157 - set_current_user($entry->user_id);
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 + }
1158 1795 }
1159 1796 }
1160 1797 }
1161 1798 }
@@ -1160,25 +1797,55 @@
1160 1797 }
1161 1798 }
1162 1799
1163 1800 /**
1164 - * Revert Fix for user_id shortcode
1165 - *
1166 - * @param object $template - Current Template
1167 - * @param object $extension - Loaded extension
1168 - *
1801 + * Filter "get" shortcodes with beforeContent and afterContent inside Formidable Form View Preview
1802 + * @param type $content
1803 + * @return type
1169 1804 */
1170 - public function action_e2pdf_model_template_fill_after($template, $extension) {
1171 - if ($extension->loaded("formidable")) {
1172 - if ($extension->get('dataset') && class_exists("FrmEntry") && is_admin()) {
1173 - set_current_user($extension->get('user_id'));
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 + }
1174 1825 }
1175 1826 }
1827 + return $content;
1176 1828 }
1177 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 +
1178 1846 /**
1179 1847 * Auto Generate of Template for this extension
1180 - *
1181 1848 * @return array - List of elements
1182 1849 */
1183 1850 public function auto() {
1184 1851
@@ -1187,73 +1854,75 @@
1187 1854
1188 1855 $form_id = $this->get('item');
1189 1856
1190 1857 $fields = array();
1191 -
1192 1858 if (class_exists('FrmField')) {
1193 - $fields = FrmField::get_all_for_form($form_id);
1859 + $fields = FrmField::get_all_for_form($form_id, '', 'include', 'include');
1194 1860 }
1195 1861
1196 1862 if ($fields) {
1197 1863 foreach ($fields as $key => $field) {
1864 + $field_id = get_option('e2pdf_formidable_use_keys', '0') ? $field->field_key : $field->id;
1198 1865
1199 - $field_id = get_option('e2pdf_formidable_use_keys') ? $field->field_key : $field->id;
1200 -
1201 - if ($field->type === 'lookup' || $field->type === 'data') {
1202 -
1203 - $dynamic_field_id = false;
1204 - $dynamic_form_id = false;
1205 -
1206 - if ($field->type === 'lookup' && isset($field->field_options['get_values_field']) && isset($field->field_options['get_values_form'])) {
1207 -
1208 - $dynamic_form_id = $field->field_options['get_values_form'];
1209 - $dynamic_field_id = $field->field_options['get_values_field'];
1210 -
1211 - if (get_option('e2pdf_formidable_use_keys')) {
1212 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
1213 -
1214 - if ($dynamic_field_data) {
1215 - $dynamic_field_id = $dynamic_field_data->field_key;
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;
1216 1878 }
1217 1879 }
1218 - } elseif ($field->type === 'data' && isset($field->field_options['form_select']) && $field->field_options['form_select'] !== 'taxonomy' && class_exists('FrmField')) {
1219 1880
1220 - $dynamic_field_id = $field->field_options['form_select'];
1221 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
1222 -
1223 - if ($dynamic_field_data) {
1224 - $dynamic_form_id = $dynamic_field_data->form_id;
1225 -
1226 - if (get_option('e2pdf_formidable_use_keys')) {
1227 - $dynamic_field_id = $dynamic_field_data->field_key;
1228 - }
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'];
1229 1887 }
1888 + if ($frm_filter) {
1889 + remove_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings');
1890 + }
1891 + $field->options = $options;
1230 1892 }
1231 -
1232 1893 $field->type = $field->field_options['data_type'];
1233 - if ($dynamic_field_id && $dynamic_form_id) {
1234 - 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 + }
1235 1908
1236 - $field->options = array(
1237 - "[e2pdf-frm-entry-values id='$dynamic_form_id' field_id='$dynamic_field_id']"
1238 - );
1239 - } elseif ($field->field_options['data_type'] == 'radio' || $field->field_options['data_type'] == 'checkbox') {
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);
1240 1913
1241 - $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 + }
1242 1918
1243 - if (class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
1244 - $where = array(
1245 - 'it.form_id' => $dynamic_form_id
1246 - );
1247 -
1248 - $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
1249 - foreach ($entries_tmp as $key => $entry) {
1250 - $options[] = FrmEntryMeta::get_meta_value($entry, $dynamic_field_id);
1251 - }
1252 - }
1253 - $field->options = $options;
1919 + if ($frm_filter) {
1920 + remove_filter('frm_default_field_options', 'FrmProFieldsHelper::add_default_field_settings');
1254 1921 }
1922 + $field->options = $options;
1255 1923 }
1924 + $field->type = $field->field_options['data_type'];
1256 1925 }
1257 1926
1258 1927 /*
1259 1928 * Repeatable fields Field ID modification
@@ -1259,138 +1928,211 @@
1259 1928 * Repeatable fields Field ID modification
1260 1929 * @since 0.01.42
1261 1930 */
1262 1931 if ($field->type !== 'lookup' && $field->type !== 'data' && isset($field->form_id) && $field->form_id != $form_id) {
1263 - $field_id = $field_id . ":1";
1932 + $field_id = $field_id . ':1';
1264 1933 }
1265 1934
1266 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;
1267 1955 case 'html':
1268 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1269 - 'top' => '20',
1270 - 'left' => '20',
1271 - 'right' => '20',
1272 - 'block' => true,
1273 - 'properties' => array(
1274 - 'value' => $field->name,
1275 - )
1276 - ));
1277 -
1278 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1279 - 'properties' => array(
1280 - 'value' => $field->description,
1281 - )
1282 - ));
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 + }
1283 1973 break;
1284 -
1285 1974 case 'signature':
1286 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1287 - 'top' => '20',
1288 - 'left' => '20',
1289 - 'right' => '20',
1290 - 'block' => true,
1291 - 'properties' => array(
1292 - 'value' => $field->name,
1293 - )
1294 - ));
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 + );
1295 1990
1296 - $elements[] = $this->auto_field($field, 'e2pdf-signature', array(
1297 - 'properties' => array(
1298 - 'width' => '400',
1299 - 'height' => '150',
1300 - 'scale' => '1',
1301 - 'dimension' => '1',
1302 - 'value' => "[$field_id]"
1303 - )
1304 - ));
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 + );
1305 2005 break;
1306 -
1307 2006 case 'scale':
1308 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1309 - 'top' => '20',
1310 - 'left' => '20',
1311 - 'right' => '20',
1312 - 'block' => true,
1313 - 'properties' => array(
1314 - 'value' => $field->name,
1315 - )
1316 - ));
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 + );
1317 2022
1318 - $left = 0;
1319 -
1320 2023 if (isset($field->options) && is_array($field->options)) {
2024 + $start = true;
1321 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 + }
1322 2061
2062 + $start = false;
2063 + }
2064 +
2065 + $start = true;
2066 + foreach ($field->options as $opt_key => $option) {
1323 2067 if (is_array($option)) {
1324 - $elements[] = $this->auto_field($field, 'e2pdf-radio', array(
1325 - 'top' => 0,
1326 - 'left' => $left,
1327 - 'properties' => array(
1328 - 'width' => '15',
1329 - 'height' => '15',
1330 - 'value' => "[$field_id]",
1331 - 'option' => $option['value'],
1332 - 'group' => "group_" . $field_id
1333 - )
1334 - ));
1335 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1336 - 'top' => '20',
1337 - 'left' => $left - 5,
1338 - 'properties' => array(
1339 - 'value' => $option['label'],
1340 - 'width' => '25',
1341 - 'text_align' => 'center',
1342 - )
1343 - ));
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 + );
1344 2084 } else {
1345 -
1346 - $elements[] = $this->auto_field($field, 'e2pdf-radio', array(
1347 - 'top' => 0,
1348 - 'left' => $left,
1349 - 'properties' => array(
1350 - 'width' => '15',
1351 - 'height' => '15',
1352 - 'value' => "[$field_id]",
1353 - 'option' => $option,
1354 - 'group' => "group_" . $field_id
1355 - )
1356 - ));
1357 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1358 - 'top' => '20',
1359 - 'left' => $left - 5,
1360 - 'properties' => array(
1361 - 'value' => $option,
1362 - 'width' => '25',
1363 - 'text_align' => 'center',
1364 - )
1365 - ));
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 + );
1366 2100 }
1367 -
1368 - $left = $left + 25;
2101 + $start = false;
1369 2102 }
1370 2103 }
1371 2104 break;
1372 -
1373 2105 case 'rte':
1374 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1375 - 'top' => '20',
1376 - 'left' => '20',
1377 - 'right' => '20',
1378 - 'block' => true,
1379 - 'properties' => array(
1380 - 'value' => $field->name,
1381 - )
1382 - ));
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 + );
1383 2121
1384 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1385 - 'properties' => array(
1386 - 'height' => '150',
1387 - 'value' => "[$field_id wpautop=0]"
1388 - )
1389 - ));
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 + );
1390 2134 break;
1391 -
1392 - case 'file':
1393 2135 case 'text':
1394 2136 case 'email':
1395 2137 case 'url':
1396 2138 case 'number':
@@ -1395,48 +2137,151 @@
1395 2137 case 'url':
1396 2138 case 'number':
1397 2139 case 'phone':
1398 2140 case 'date':
1399 - case 'time':
1400 2141 case 'image':
1401 2142 case 'tag':
1402 2143 case 'password':
1403 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1404 - 'top' => '20',
1405 - 'left' => '20',
1406 - 'right' => '20',
1407 - 'block' => true,
1408 - 'properties' => array(
1409 - 'value' => $field->name,
1410 - )
1411 - ));
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 + );
1412 2160
1413 - if ($field->type == 'file') {
1414 - if (strpos($field_id, ':') !== false) {
1415 - $field_id .= " size='full' show_image='0' add_link='0'";
1416 - } else {
1417 - $field_id .= " size='full'";
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 + );
1418 2265 }
1419 2266 }
1420 -
1421 - $elements[] = $this->auto_field($field, 'e2pdf-input', array(
1422 - 'properties' => array(
1423 - 'value' => "[$field_id]",
1424 - 'pass' => $field->type === 'password' ? '1' : '0',
1425 - )
1426 - ));
1427 2267 break;
1428 -
1429 2268 case 'select':
1430 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1431 - 'top' => '20',
1432 - 'left' => '20',
1433 - 'right' => '20',
1434 - 'block' => true,
1435 - 'properties' => array(
1436 - 'value' => $field->name,
1437 - )
1438 - ));
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 + );
1439 2284
1440 2285 $options_tmp = array();
1441 2286 if (isset($field->options) && is_array($field->options)) {
1442 2287 foreach ($field->options as $opt_key => $option) {
@@ -1447,169 +2292,664 @@
1447 2292 }
1448 2293 }
1449 2294 }
1450 2295
1451 - $elements[] = $this->auto_field($field, 'e2pdf-select', array(
1452 - 'properties' => array(
1453 - 'options' => implode("\n", $options_tmp),
1454 - 'value' => "[$field_id]",
1455 - 'height' => isset($field->field_options['multiple']) && $field->field_options['multiple'] ? '80' : '',
1456 - 'multiline' => isset($field->field_options['multiple']) && $field->field_options['multiple'] ? '1' : '0',
1457 - )
1458 - ));
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 + );
1459 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 + );
1460 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 + );
1461 2341
1462 - 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;
1463 2388 case 'address':
1464 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1465 - 'top' => '20',
1466 - 'left' => '20',
1467 - 'right' => '20',
1468 - 'block' => true,
1469 - 'properties' => array(
1470 - 'value' => $field->name,
1471 - )
1472 - ));
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 + );
1473 2404
1474 - $elements[] = $this->auto_field($field, 'e2pdf-textarea', array(
1475 - 'properties' => array(
1476 - 'value' => "[$field_id]",
1477 - )
1478 - ));
1479 - 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 + }
1480 2419
1481 - case 'textarea':
1482 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1483 - 'top' => '20',
1484 - 'left' => '20',
1485 - 'right' => '20',
1486 - 'block' => true,
1487 - 'properties' => array(
1488 - 'value' => $field->name,
1489 - )
1490 - ));
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 + );
1491 2432
1492 - $elements[] = $this->auto_field($field, 'e2pdf-textarea', array(
1493 - 'properties' => array(
1494 - 'value' => "[$field_id wpautop=0]",
1495 - )
1496 - ));
1497 - 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 + }
1498 2447
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 + );
1499 2460
1500 - case 'radio':
1501 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1502 - 'top' => '20',
1503 - 'left' => '20',
1504 - 'right' => '20',
1505 - 'block' => true,
1506 - 'properties' => array(
1507 - 'value' => $field->name,
1508 - )
1509 - ));
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 + ) {
1510 2466
1511 - $top = 0;
1512 - if (isset($field->options) && is_array($field->options)) {
1513 - foreach ($field->options as $opt_key => $option) {
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 + }
1514 2485
1515 - if (is_array($option)) {
1516 - $elements[] = $this->auto_field($field, 'e2pdf-radio', array(
1517 - 'top' => $top,
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,
1518 2515 'properties' => array(
1519 - 'width' => '15',
1520 - 'height' => '15',
1521 - 'value' => "[$field_id]",
1522 - 'option' => $option['label'],
1523 - '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 + ),
1524 2540 )
1525 - ));
1526 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1527 - 'top' => $top,
1528 - '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,
1529 2552 'properties' => array(
1530 - '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 + ),
1531 2589 )
1532 - ));
1533 - } 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 + }
1534 2609
1535 - $elements[] = $this->auto_field($field, 'e2pdf-radio', array(
1536 - '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,
1537 2632 'properties' => array(
1538 - 'width' => '15',
1539 - 'height' => '15',
1540 - 'value' => "[$field_id]",
1541 - 'option' => $option,
1542 - '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 + ),
1543 2655 )
1544 - ));
1545 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1546 - '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',
1547 2687 'left' => '20',
1548 - 'properties' => array(
1549 - 'value' => $option
1550 - )
1551 - ));
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 + }
1552 2844 }
1553 - $top = $top + 20;
1554 2845 }
1555 2846 }
1556 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 + );
1557 2864
1558 - case 'checkbox':
1559 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1560 - 'top' => '20',
1561 - 'left' => '20',
1562 - 'right' => '20',
1563 - 'block' => true,
1564 - 'properties' => array(
1565 - 'value' => $field->name,
1566 - )
1567 - ));
2865 + $image_options = false;
2866 + if (isset($field->field_options['image_options']) && $field->field_options['image_options']) {
2867 + $image_options = true;
2868 + }
1568 2869
1569 - $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 +
1570 2875 if (isset($field->options) && is_array($field->options)) {
1571 2876 foreach ($field->options as $opt_key => $option) {
1572 2877 if (is_array($option)) {
1573 - $elements[] = $this->auto_field($field, 'e2pdf-checkbox', array(
1574 - 'top' => $top,
1575 - 'properties' => array(
1576 - 'width' => '15',
1577 - 'height' => '15',
1578 - 'value' => "[$field_id]",
1579 - 'option' => $option['label']
1580 - )
1581 - ));
1582 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1583 - 'top' => $top,
1584 - 'left' => '20',
1585 - 'properties' => array(
1586 - 'value' => $option['label']
1587 - )
1588 - ));
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 + );
1589 2904 } else {
1590 - $elements[] = $this->auto_field($field, 'e2pdf-checkbox', array(
1591 - 'top' => $top,
1592 - 'properties' => array(
1593 - 'width' => '15',
1594 - 'height' => '15',
1595 - 'value' => "[$field_id]",
1596 - 'option' => $option
1597 - )
1598 - ));
1599 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
1600 - 'top' => $top,
1601 - 'left' => '20',
1602 - 'properties' => array(
1603 - 'value' => $option
1604 - )
1605 - ));
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 + }
1606 2948 }
1607 - $top = $top + 20;
1608 2949 }
1609 2950 }
1610 2951 break;
1611 -
1612 2952 default:
1613 2953 break;
1614 2954 }
1615 2955 }
@@ -1617,8 +2957,10 @@
1617 2957
1618 2958 $response['page'] = array(
1619 2959 'bottom' => '20',
1620 2960 'top' => '20',
2961 + 'right' => '20',
2962 + 'left' => '20',
1621 2963 );
1622 2964
1623 2965 $response['elements'] = $elements;
1624 2966 return $response;
@@ -1625,36 +2967,32 @@
1625 2967 }
1626 2968
1627 2969 /**
1628 2970 * Generate field for Auto PDF
1629 - *
1630 2971 * @param object $field - Formidable field object
1631 2972 * @param string $type - Field type
1632 2973 * @param array $options - Field additional options
1633 - *
1634 2974 * @return array - Prepared auto field
1635 2975 */
1636 - public function auto_field($field = false, $type = false, $options = array()) {
2976 + public function auto_field($field = false, $element = array()) {
1637 2977
1638 - if (!$field || !$type) {
2978 + if (!$field) {
1639 2979 return false;
1640 2980 }
1641 2981
2982 + if (!isset($element['block'])) {
2983 + $element['block'] = false;
2984 + }
2985 +
2986 + if (!isset($element['float'])) {
2987 + $element['float'] = false;
2988 + }
2989 +
1642 2990 $classes = array();
1643 2991 if (isset($field->field_options['classes'])) {
1644 - $classes = explode(" ", $field->field_options['classes']);
2992 + $classes = explode(' ', $field->field_options['classes']);
1645 2993 }
1646 2994
1647 - $element = array(
1648 - 'type' => $type,
1649 - 'properties' => isset($options['properties']) ? $options['properties'] : array(),
1650 - );
1651 -
1652 - $element['top'] = isset($options['top']) ? $options['top'] : '0';
1653 - $element['left'] = isset($options['left']) ? $options['left'] : '0';
1654 - $element['right'] = isset($options['right']) ? $options['right'] : '0';
1655 - $element['block'] = isset($options['block']) ? $options['block'] : false;
1656 -
1657 2995 $float_classes = array(
1658 2996 'frm_half',
1659 2997 'frm_third',
1660 2998 'frm_two_thirds',
@@ -1663,16 +3001,16 @@
1663 3001 'frm_fifth',
1664 3002 'frm_two_fifths',
1665 3003 'frm_sixth',
1666 3004 'frm_seventh',
1667 - 'frm_eighth'
3005 + 'frm_eighth',
1668 3006 );
1669 3007
1670 3008 $array_intersect = array_intersect($classes, $float_classes);
1671 3009
1672 - if (!empty($array_intersect) && !in_array('frm_first', $classes)) {
3010 + if (!empty($array_intersect) && !in_array('frm_first', $classes) && isset($element['block']) && $element['block']) {
1673 3011 $element['float'] = true;
1674 - };
3012 + }
1675 3013
1676 3014 $primary_class = false;
1677 3015 if (!empty($array_intersect)) {
1678 3016 $primary_class = end($array_intersect);
@@ -1677,50 +3015,40 @@
1677 3015 if (!empty($array_intersect)) {
1678 3016 $primary_class = end($array_intersect);
1679 3017 }
1680 3018
1681 - if ($element['block']) {
3019 + if (isset($element['block']) && $element['block']) {
1682 3020 switch ($primary_class) {
1683 3021 case 'frm_half':
1684 - $element['width'] = '50%';
3022 + $element['properties']['width'] = '50%';
1685 3023 break;
1686 -
1687 3024 case 'frm_third':
1688 - $element['width'] = '33.3%';
3025 + $element['properties']['width'] = '33.3%';
1689 3026 break;
1690 -
1691 3027 case 'frm_two_thirds':
1692 - $element['width'] = '66.67%';
3028 + $element['properties']['width'] = '66.67%';
1693 3029 break;
1694 -
1695 3030 case 'frm_fourth':
1696 - $element['width'] = '25%';
3031 + $element['properties']['width'] = '25%';
1697 3032 break;
1698 -
1699 3033 case 'frm_three_fourths':
1700 - $element['width'] = '75%';
3034 + $element['properties']['width'] = '75%';
1701 3035 break;
1702 -
1703 3036 case 'frm_fifth':
1704 - $element['width'] = '20%';
3037 + $element['properties']['width'] = '20%';
1705 3038 break;
1706 -
1707 3039 case 'frm_two_fifths':
1708 - $element['width'] = '80%';
3040 + $element['properties']['width'] = '80%';
1709 3041 break;
1710 -
1711 3042 case 'frm_sixth':
1712 - $element['width'] = '16.67%';
3043 + $element['properties']['width'] = '16.67%';
1713 3044 break;
1714 -
1715 3045 case 'frm_seventh':
1716 - $element['width'] = '14.29%';
3046 + $element['properties']['width'] = '14.29%';
1717 3047 break;
1718 -
1719 3048 case 'frm_eighth':
1720 - $element['width'] = '12.5%';
3049 + $element['properties']['width'] = '12.5%';
1721 3050 break;
1722 -
1723 3051 default:
1724 3052 break;
1725 3053 }
1726 3054 }
@@ -1729,9 +3057,8 @@
1729 3057 }
1730 3058
1731 3059 /**
1732 3060 * Backup form action
1733 - *
1734 3061 * @param object xml - XML object where to add params for saved item
1735 3062 */
1736 3063 public function backup($xml = false) {
1737 3064 if (class_exists('FrmXMLController')) {
@@ -1736,9 +3063,14 @@
1736 3063 public function backup($xml = false) {
1737 3064 if (class_exists('FrmXMLController')) {
1738 3065
1739 3066 $ids = array();
1740 - $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 + }
1741 3073
1742 3074 $type = array();
1743 3075 $type[] = 'forms';
1744 3076
@@ -1750,55 +3082,220 @@
1750 3082 }
1751 3083
1752 3084 /**
1753 3085 * Import form action
1754 - *
1755 3086 * @param object xml - XML object to parse data to import form
1756 3087 */
1757 - public function import($xml, $item) {
3088 + public function import($xml, $options = array()) {
1758 3089
1759 - $updated_item = '';
3090 + $updated_items = array();
3091 + $new_form = isset($options['formidable_item_new_form']) && $options['formidable_item_new_form'] ? true : false;
1760 3092
1761 - if (class_exists('FrmXMLHelper') && class_exists('FrmField')) {
3093 + if (class_exists('FrmXMLHelper') && class_exists('FrmField') && $this->get('item')) {
1762 3094
1763 - if ($xml->formidable) {
3095 + if (isset($xml->formidable) && $xml->formidable) {
1764 3096
1765 3097 $tmp = tempnam($this->helper->get('tmp_dir'), 'e2pdf');
1766 - file_put_contents($tmp, base64_decode((String) $xml->formidable));
3098 + file_put_contents($tmp, base64_decode((string) $xml->formidable), LOCK_EX);
1767 3099
3100 + if ($new_form) {
3101 + add_filter('frm_match_xml_form', array($this, 'filter_frm_match_xml_form'), 10, 2);
3102 + }
1768 3103 $result = FrmXMLHelper::import_xml($tmp);
1769 3104
3105 + if ($new_form) {
3106 + remove_filter('frm_match_xml_form', array($this, 'filter_frm_match_xml_form'));
3107 + }
1770 3108 unlink($tmp);
1771 3109
1772 3110 FrmXMLHelper::parse_message($result, $message, $errors);
3111 +
1773 3112 if ($errors) {
1774 3113 return array(
1775 - 'errors' => $errors
3114 + 'errors' => $errors,
1776 3115 );
1777 3116 } else {
1778 - if (isset($result['forms'][$item])) {
1779 - $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')];
1780 3126 }
1781 3127 }
1782 3128 }
1783 3129 }
3130 + return $updated_items;
3131 + }
1784 3132
1785 - 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;
1786 3180 }
1787 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 +
1788 3233 /**
1789 3234 * Replace Old Formidable shortcodes to new values on pages
1790 - *
1791 3235 * @param array $pages - List of pages to replace shortcodes
1792 3236 * @param array $shortcodes_list - List of new/old shortcodes to replace
1793 - *
1794 3237 * @return array - List of updated pages
1795 3238 */
1796 3239 public function pages_replace_shortcodes($pages = array(), $shortcodes_list = array()) {
1797 3240
1798 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 +
1799 3263 foreach ($page['elements'] as $element_key => $element_value) {
1800 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 + }
1801 3298 }
1802 3299 }
1803 3300
1804 3301 return $pages;
@@ -1803,79 +3300,283 @@
1803 3300
1804 3301 return $pages;
1805 3302 }
1806 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 +
1807 3327 /**
1808 3328 * Replace Old Formidable shortcodes to new values
1809 - *
1810 3329 * @param string $content - Value that can contains old shortcodes
1811 3330 * @param array $shortcodes_list - List of new/old shortcodes to replace
1812 - *
1813 3331 * @return string - Updated value
1814 3332 */
1815 - public function replace_shortcodes($content = "", $shortcodes_list = array()) {
1816 -
3333 + public function replace_shortcodes($content = '', $shortcodes_list = array()) {
1817 3334 if (false === strpos($content, '[')) {
1818 3335 return $content;
1819 3336 }
1820 -
1821 3337 foreach ($shortcodes_list as $list_key => $list_value) {
1822 - $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);
1823 3339 }
1824 -
1825 3340 return $content;
1826 3341 }
1827 3342
1828 3343 /**
1829 - * Verify if form and dataset exists
1830 - *
1831 - * @return bool - Exists/Not exists
3344 + * Verify if item and dataset exists
3345 + * @return bool - item and dataset exists
1832 3346 */
1833 3347 public function verify() {
1834 - $item = $this->get('item');
1835 - $dataset = $this->get('dataset');
1836 -
1837 - if ($item && $dataset && class_exists('FrmEntry')) {
1838 - $entry = FrmEntry::getOne($dataset);
1839 - if (is_object($entry) && $entry->form_id === $item) {
1840 - return true;
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);
1841 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;
1842 3362 }
1843 - return false;
3363 + return $verify;
1844 3364 }
1845 3365
1846 3366 /**
1847 - * Visual Mapper for Mapping field
1848 - *
1849 - * @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
1850 3371 */
1851 - public function visual_mapper() {
3372 + public function auto_form($template, $data = array()) {
1852 3373
1853 - $item = $this->get('item');
3374 + if ($template->get('ID')) {
1854 3375
1855 - 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;
1856 3378
1857 - if (class_exists("FrmProFieldsHelper")) {
1858 - 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);
1859 3514 }
3515 + }
1860 3516
1861 - $source = FrmformsController::show_form($item, '', true, true);
3517 + return $template;
3518 + }
1862 3519
1863 - 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')) {
1864 3542 remove_filter('frm_get_paged_fields', array($this, 'filter_remove_pagebreaks'), 9);
1865 3543 }
1866 -
1867 - libxml_use_internal_errors(true);
1868 - $dom = new DOMDocument;
1869 - $html = $dom->loadHTML($source);
1870 - libxml_clear_errors();
1871 -
1872 - if (!$html) {
1873 - return __('Form could not be parsed due incorrect HTML', 'e2pdf');
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>';
1874 3554 } else {
1875 3555
3556 + $xml = $this->helper->load('xml');
1876 3557 $xpath = new DomXPath($dom);
1877 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
1878 3579 $remove_by_class = array(
1879 3580 'frm_ajax_loading',
1880 3581 'wp-editor-tools',
1881 3582 'quicktags-toolbar',
@@ -1881,9 +3582,12 @@
1881 3582 'quicktags-toolbar',
1882 3583 'frm_button_submit',
1883 3584 'frm_range_value',
1884 3585 'star-rating',
1885 - 'frm_repeat_buttons'
3586 + 'frm_repeat_buttons',
3587 + 'frm_save_draft',
3588 + 'frm_final_submit',
3589 + 'frm_verify',
1886 3590 );
1887 3591 foreach ($remove_by_class as $key => $class) {
1888 3592 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
1889 3593 foreach ($elements as $element) {
@@ -1890,64 +3594,65 @@
1890 3594 $element->parentNode->removeChild($element);
1891 3595 }
1892 3596 }
1893 3597
3598 + // remove by tag
1894 3599 $remove_by_tag = array(
1895 3600 'link',
1896 3601 'style',
1897 - 'script'
3602 + 'script',
1898 3603 );
1899 3604 foreach ($remove_by_tag as $key => $tag) {
1900 - $elements = $xpath->query("//{$tag}");
3605 + $elements = $xpath->query('//' . $tag);
1901 3606 foreach ($elements as $element) {
1902 3607 $element->parentNode->removeChild($element);
1903 3608 }
1904 3609 }
1905 3610
3611 + // remove classes
1906 3612 $remove_classes = array(
1907 3613 'wp-editor-container',
1908 - 'frm_logic_form'
3614 + 'frm_logic_form',
3615 + 'frm_pos_none',
1909 3616 );
1910 -
1911 3617 foreach ($remove_classes as $key => $class) {
1912 3618 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
1913 3619 foreach ($elements as $element) {
1914 - $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')));
1915 3621 }
1916 3622 }
1917 3623
3624 + // remove styles
1918 3625 $remove_styles = array(
1919 - 'frm_toggle_container'
3626 + 'frm_toggle_container',
1920 3627 );
1921 -
1922 3628 foreach ($remove_styles as $key => $class) {
1923 3629 $elements = $xpath->query("//*[contains(@class, '{$class}')]");
1924 3630 foreach ($elements as $element) {
1925 - $element->attributes->getNamedItem("style")->nodeValue = '';
3631 + $xml->set_node_value($element, 'style', '');
1926 3632 }
1927 3633 }
1928 3634
1929 -
1930 3635 /*
1931 3636 * Metas patterns to replace field names
1932 3637 * @since 0.01.42
1933 3638 */
1934 - $metas_pattern = array(
1935 - '/item_meta\[(?:.*?)\]\[0\]\[(.*?)\](?:\[\])?/i' => '$1:1',
3639 + $metas_pattern = [
3640 + '/item_meta\[(?:.*?)\]\[0\]\[(.*?)\](?:\[\])?/i' => $child ? '$1' : '$1:1',
1936 3641 '/item_meta\[(.*?)\](\[\])?/i' => '$1',
1937 - );
3642 + ];
1938 3643
1939 - // Replace names
3644 + // replace names
1940 3645 $metas = $xpath->query("//*[contains(@name, 'item_meta')]");
1941 3646 foreach ($metas as $element) {
1942 - $field_id = preg_replace(array_keys($metas_pattern), $metas_pattern, $element->attributes->getNamedItem("name")->nodeValue);
1943 - if (get_option('e2pdf_formidable_use_keys') && class_exists("FrmField")) {
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')) {
1944 3649 if (strpos($field_id, ':') !== false) {
1945 - $repeat_data = explode(":", $field_id);
3650 + $repeat_data = explode(':', $field_id);
1946 3651 if (isset($repeat_data['0'])) {
1947 3652 $field_data = FrmField::getOne($repeat_data['0']);
1948 3653 if ($field_data) {
1949 - $field_id = $field_data->field_key . ":1";
3654 + $field_id = $field_data->field_key . ':1';
1950 3655 }
1951 3656 }
1952 3657 } else {
1953 3658 $field_data = FrmField::getOne($field_id);
@@ -1955,327 +3660,283 @@
1955 3660 $field_id = $field_data->field_key;
1956 3661 }
1957 3662 }
1958 3663 }
1959 -
1960 - $element->attributes->getNamedItem("name")->nodeValue = $field_id;
3664 + $xml->set_node_value($element, 'name', $field_id);
1961 3665 }
1962 3666
1963 -
1964 -
1965 -
1966 - // Time field replace
1967 - $time_fields = $xpath->query("//div/select[contains(@class, 'frm_time_select')]/parent::*");
1968 - foreach ($time_fields as $key => $element) {
1969 - $span = $xpath->query("./span", $element)->item(0);
1970 - $select = $xpath->query("./select", $element)->item(0);
1971 -
1972 - if ($span) {
1973 -
1974 - $span_cloned = $span->cloneNode(true);
1975 - $select_cloned = $select->cloneNode(true);
1976 -
1977 - foreach ($xpath->query("./select", $span_cloned) as $key => $sub_select) {
1978 - $sub_select->attributes->getNamedItem("class")->nodeValue = $sub_select->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
1979 - }
1980 -
1981 - $select_cloned->attributes->getNamedItem("class")->nodeValue = $select_cloned->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
1982 -
1983 - $span->parentNode->removeChild($span);
1984 - $select->parentNode->removeChild($select);
1985 -
1986 - $wrapper = $dom->createElement('div');
1987 - $wrapper_atts = array(
1988 - 'class' => 'e2pdf-vm-field-wrapper',
1989 - );
1990 -
1991 - foreach ($wrapper_atts as $key => $value) {
1992 - $attr = $dom->createAttribute($key);
1993 - $attr->value = $value;
1994 - $wrapper->appendChild($attr);
1995 - }
1996 -
1997 - $field = $dom->createElement('input');
1998 -
1999 - $field_id = preg_replace('/\[(.*?)\]/i', '', $select_cloned->attributes->getNamedItem("name")->nodeValue);
2000 - if (get_option('e2pdf_formidable_use_keys') && class_exists("FrmField")) {
2001 - $field_data = FrmField::getOne($field_id);
2002 - if ($field_data) {
2003 - $field_id = $field_data->field_key;
2004 - }
2005 - }
2006 -
2007 - $field_atts = array(
2008 - 'type' => 'text',
2009 - 'class' => 'e2pdf-vm-field',
2010 - 'name' => $field_id
2011 - );
2012 -
2013 - foreach ($field_atts as $key => $value) {
2014 - $attr = $dom->createAttribute($key);
2015 - $attr->value = $value;
2016 - $field->appendChild($attr);
2017 - }
2018 -
2019 - $wrapper->appendChild($field);
2020 - $wrapper->appendChild($span_cloned);
2021 - $wrapper->appendChild($select_cloned);
2022 -
2023 - $element->appendChild($wrapper);
2024 - }
2025 - }
2026 -
2027 - // Combo fields
2028 3667 $frm_combo_inputs_container = $xpath->query("//*[contains(@class, 'frm_combo_inputs_container')]");
2029 3668 foreach ($frm_combo_inputs_container as $element) {
3669 + $inputs = $xpath->query('.//input', $element);
3670 + $selects = $xpath->query('.//select', $element);
2030 3671
2031 - $inputs = $xpath->query(".//input", $element);
2032 - $selects = $xpath->query(".//select", $element);
2033 -
2034 3672 foreach ($selects as $key => $sub_element) {
2035 - if ($sub_element->attributes->getNamedItem("class")->nodeValue) {
2036 - $sub_element->attributes->getNamedItem("class")->nodeValue = $sub_select->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
2037 - } else {
2038 - $class = $dom->createAttribute('class');
2039 - $class->value = 'e2pdf-no-vm';
2040 - $sub_element->appendChild($class);
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);
2041 3678 }
2042 3679 }
2043 3680
2044 3681 foreach ($inputs as $key => $sub_element) {
2045 - if ($sub_element->attributes->getNamedItem("class")->nodeValue) {
2046 - $sub_element->attributes->getNamedItem("class")->nodeValue = $sub_element->attributes->getNamedItem("class")->nodeValue . " e2pdf-no-vm";
2047 - } else {
2048 - $class = $dom->createAttribute('class');
2049 - $class->value = 'e2pdf-no-vm';
2050 - $sub_element->appendChild($class);
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);
2051 3687 }
2052 3688 }
2053 -
2054 - $name = "";
2055 - if ($inputs->item(0)) {
2056 - $name = $inputs->item(0)->attributes->getNamedItem("name")->nodeValue;
2057 - } else {
2058 - $name = $selects->item(0)->attributes->getNamedItem("name")->nodeValue;
2059 - }
2060 -
2061 - $field_id = preg_replace('/\[(.*?)\]/i', '', $name);
2062 - if (get_option('e2pdf_formidable_use_keys') && class_exists("FrmField")) {
2063 - $field_data = FrmField::getOne($field_id);
2064 - if ($field_data) {
2065 - $field_id = $field_data->field_key;
2066 - }
2067 - }
2068 -
2069 - $field = $dom->createElement('input');
2070 - $field_atts = array(
2071 - 'type' => 'text',
2072 - 'class' => 'e2pdf-vm-field',
2073 - 'name' => $field_id
2074 - );
2075 -
2076 - foreach ($field_atts as $key => $value) {
2077 - $attr = $dom->createAttribute($key);
2078 - $attr->value = $value;
2079 - $field->appendChild($attr);
2080 - }
2081 - $element->appendChild($field);
2082 -
2083 - $element->attributes->getNamedItem("class")->nodeValue = $element->attributes->getNamedItem("class")->nodeValue . " e2pdf-vm-field-wrapper";
2084 3689 }
2085 3690
2086 3691 $frm_dropzone = $xpath->query("//*[contains(@class, 'frm_dropzone')]/parent::*");
2087 3692 foreach ($frm_dropzone as $element) {
2088 3693 $dropzone = $xpath->query(".//*[contains(@class, 'frm_dropzone')]", $element)->item(0);
2089 - $input = $xpath->query(".//input", $element)->item(0);
2090 - $input_cloned = $input->cloneNode(true);
2091 - $input_cloned->attributes->getNamedItem("type")->nodeValue = 'text';
2092 - $input_cloned->attributes->getNamedItem("value")->nodeValue = __('File Upload', 'e2pdf');
3694 + $input = $xpath->query('.//input', $element)->item(0);
3695 + if ($input && $dropzone) {
3696 + $input_cloned = $input->cloneNode(true);
2093 3697
2094 - if (strpos($input_cloned->attributes->getNamedItem("name")->nodeValue, ':') !== false) {
2095 - $input_cloned->attributes->getNamedItem("name")->nodeValue = $input_cloned->attributes->getNamedItem("name")->nodeValue . " size='full' show_image='0' add_link='0'";
2096 - } else {
2097 - $input_cloned->attributes->getNamedItem("name")->nodeValue = $input_cloned->attributes->getNamedItem("name")->nodeValue . " size='full'";
2098 - }
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;');
2099 3701
2100 - $style = $dom->createAttribute('style');
2101 - $style->value = 'width: 100%; height: 200px; text-align: center;';
2102 - $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 + }
2103 3707
2104 - $input->parentNode->replaceChild($input_cloned, $input);
2105 - $dropzone->parentNode->removeChild($dropzone);
3708 + $input->parentNode->replaceChild($input_cloned, $input);
3709 + $dropzone->parentNode->removeChild($dropzone);
3710 + }
2106 3711 }
2107 3712
2108 - // Replace signature
3713 + // replace signature
2109 3714 $sigpad = $xpath->query("//*[contains(@class, 'sigPad')]");
2110 3715 foreach ($sigpad as $element) {
2111 - $input = $xpath->query(".//input", $element)->item(0);
2112 - $input_cloned = $input->cloneNode(true);
3716 + $input = $xpath->query('.//input', $element)->item(0);
3717 + if ($input) {
3718 + $input_cloned = $input->cloneNode(true);
2113 3719
2114 - $style = $dom->createAttribute('style');
2115 - $style->value = 'width: 300px; height: 100px;';
2116 - $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 + }
2117 3727
2118 - $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 + }
2119 3733
2120 - if (get_option('e2pdf_formidable_use_keys') && class_exists("FrmField")) {
2121 - $field_data = FrmField::getOne($field_id);
2122 - if ($field_data) {
2123 - $field_id = $field_data->field_key;
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'), ':'));
2124 3746 }
2125 - }
3747 + if (preg_match('/\[(other(.*?[^\]]))\]/', $field_id)) {
3748 + $field_id = preg_replace('/\[(other(.*?[^\]]))\]/', '', $field_id);
3749 + }
2126 3750
2127 - $input_cloned->attributes->getNamedItem("name")->nodeValue = $field_id;
3751 + $field_data = FrmField::getOne($field_id);
2128 3752
2129 - $element->parentNode->replaceChild($input_cloned, $element);
2130 - }
3753 + if (isset($field_data->field_options['image_options']) && $field_data->field_options['image_options']) {
3754 + $image_options = true;
3755 + }
2131 3756
2132 - // Replace names
2133 - $fields = $xpath->query("//input");
2134 - foreach ($fields as $element) {
3757 + if (isset($field_data->field_options['separate_value']) && $field_data->field_options['separate_value']) {
3758 + $separate_value = true;
3759 + }
2135 3760
2136 - 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;
2137 3764
2138 - 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 + }
2139 3770
2140 - $field_id = $element->attributes->getNamedItem("name")->nodeValue;
2141 - if (false !== strpos($element->attributes->getNamedItem("name")->nodeValue, ':')) {
2142 - $field_id = substr($element->attributes->getNamedItem("name")->nodeValue, 0, strpos($element->attributes->getNamedItem("name")->nodeValue, ":"));
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 + }
2143 3783 }
3784 + $field_data->options = $options;
3785 + }
2144 3786
2145 - $field_data = FrmField::getOne($field_id);
3787 + if (isset($field_data->options) && is_array($field_data->options)) {
2146 3788
2147 - if (isset($field_data->type) && $field_data->type === 'data' && isset($field_data->field_options['form_select'])) {
2148 - $dynamic_form_id = false;
2149 - $dynamic_field_id = false;
3789 + $field_options = $field_data->options;
3790 + $field_value = $xml->get_node_value($element, 'value');
2150 3791
2151 - $dynamic_field_id = $field_data->field_options['form_select'];
2152 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
2153 - if ($dynamic_field_data) {
2154 - $dynamic_form_id = $dynamic_field_data->form_id;
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;
2155 3797 }
3798 + }
2156 3799
2157 - $options = array();
2158 - if (class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
2159 - $where = array(
2160 - 'it.form_id' => $dynamic_form_id
2161 - );
2162 - $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
2163 - foreach ($entries_tmp as $key => $entry) {
2164 - $options[] = array(
2165 - 'label' => FrmEntryMeta::get_meta_value($entry, $dynamic_field_id),
2166 - 'value' => $key,
2167 - );
2168 - }
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;
2169 3805 }
2170 - $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 + }
2171 3814 }
3815 + }
3816 + }
2172 3817
2173 - if (isset($field_data->options) && is_array($field_data->options)) {
2174 - $field_options = $field_data->options;
2175 - $field_value = $element->attributes->getNamedItem("value")->nodeValue;
2176 - $field_key = array_search($field_value, array_column($field_options, 'value'));
2177 - if ($field_key !== false) {
2178 - $field_label = isset($field_options[$field_key]['label']) ? $field_options[$field_key]['label'] : $field_value;
2179 - $element->attributes->getNamedItem("value")->nodeValue = $field_label;
2180 - }
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"';
2181 3831 }
2182 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 + }
2183 3837 }
2184 3838
2185 - $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 . ']');
2186 3844 }
2187 3845
2188 - // Replace names
2189 - $textareas = $xpath->query("//textarea");
3846 + // replace names
3847 + $textareas = $xpath->query('//textarea');
2190 3848 foreach ($textareas as $element) {
2191 - $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]');
2192 3850 }
2193 3851
2194 - // Replace names
2195 - $selects = $xpath->query("//select");
3852 + // replace names
3853 + $selects = $xpath->query('//select');
2196 3854 foreach ($selects as $element) {
2197 3855
2198 3856 if (class_exists('FrmField')) {
2199 3857
2200 - $options = $xpath->query(".//option", $element);
3858 + $options = $xpath->query('.//option', $element);
3859 + $field_id = $xml->get_node_value($element, 'name');
2201 3860
2202 - $field_id = $element->attributes->getNamedItem("name")->nodeValue;
2203 - if (false !== strpos($element->attributes->getNamedItem("name")->nodeValue, ':')) {
2204 - $field_id = substr($element->attributes->getNamedItem("name")->nodeValue, 0, strpos($element->attributes->getNamedItem("name")->nodeValue, ":"));
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'), ':'));
2205 3864 }
3865 + $field_id = str_replace(array('[H]', '[m]', '[A]'), '', $field_id);
2206 3866
2207 3867 $field_data = FrmField::getOne($field_id);
2208 -
2209 - if (isset($field_data->type) && ($field_data->type === 'lookup' || $field_data->type === 'data')) {
2210 - $dynamic_form_id = false;
2211 - $dynamic_field_id = false;
2212 -
2213 - if ($field_data->type === 'lookup' && isset($field_data->field_options['get_values_field']) && isset($field_data->field_options['get_values_form'])) {
2214 - $dynamic_form_id = $field_data->field_options['get_values_form'];
2215 - $dynamic_field_id = $field_data->field_options['get_values_field'];
2216 -
2217 - if (get_option('e2pdf_formidable_use_keys')) {
2218 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
2219 -
2220 - if ($dynamic_field_data) {
2221 - $dynamic_field_id = $dynamic_field_data->field_key;
2222 - }
2223 - }
2224 - } elseif ($field_data->type === 'data' && isset($field_data->field_options['form_select'])) {
2225 - $dynamic_field_id = $field_data->field_options['form_select'];
2226 - $dynamic_field_data = FrmField::getOne($dynamic_field_id);
2227 -
2228 - if ($dynamic_field_data) {
2229 - $dynamic_form_id = $dynamic_field_data->form_id;
2230 -
2231 - if (get_option('e2pdf_formidable_use_keys')) {
2232 - $dynamic_field_id = $dynamic_field_data->field_key;
2233 - }
2234 - }
3868 + if (isset($field_data->type) && $field_data->type === 'lookup') {
3869 + foreach ($options as $option) {
3870 + $option->parentNode->removeChild($option);
2235 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 + }
2236 3908
2237 - if ($dynamic_form_id && $dynamic_field_id) {
2238 -
2239 - foreach ($options as $option) {
2240 - $option->parentNode->removeChild($option);
2241 - }
2242 -
2243 - $wrapper = $dom->createElement('option');
2244 - $wrapper_atts = array(
2245 - 'value' => "[e2pdf-frm-entry-values id='{$dynamic_form_id}' field_id='{$dynamic_field_id}']",
2246 - );
2247 - foreach ($wrapper_atts as $key => $value) {
2248 - $attr = $dom->createAttribute($key);
2249 - $attr->value = $value;
2250 - $wrapper->appendChild($attr);
2251 - }
2252 - $element->appendChild($wrapper);
2253 - }
2254 - } else if (isset($field_data->options) && is_array($field_data->options)) {
3909 + if (isset($field_data->options) && is_array($field_data->options)) {
2255 3910 $field_options = $field_data->options;
2256 3911 foreach ($options as $option) {
2257 - $field_value = $option->attributes->getNamedItem("value")->nodeValue;
3912 + $field_value = $xml->get_node_value($option, 'value');
2258 3913 foreach ($field_options as $field_option) {
2259 3914 if (isset($field_option['value']) && $field_option['value'] === $field_value) {
2260 3915 $field_label = isset($field_option['label']) ? $field_option['label'] : $field_value;
2261 - $option->attributes->getNamedItem("value")->nodeValue = $field_label;
3916 + $xml->set_node_value($option, 'value', $field_label);
2262 3917 }
2263 3918 }
2264 3919 }
2265 3920 }
2266 3921 }
3922 + $xml->set_node_value($element, 'name', '[' . $xml->get_node_value($element, 'name') . ']');
3923 + }
2267 3924
2268 - $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 + }
2269 3932 }
2270 3933
2271 - if ($xpath->query("//form")->item(0) && class_exists('FrmStylesHelper')) {
2272 - $autocomplete = $dom->createAttribute('autocomplete');
2273 - $autocomplete->value = 'off';
2274 - $xpath->query("//form")->item(0)->appendChild($autocomplete);
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();
2275 3938 }
2276 -
2277 - return $dom->saveHTML();
2278 3939 }
2279 3940 }
2280 3941 return false;
2281 3942 }
@@ -2282,11 +3943,9 @@
2282 3943
2283 3944 /**
2284 3945 * Convert Field name to Value
2285 3946 * @since 0.01.34
2286 - *
2287 3947 * @param string $name - Field name
2288 - *
2289 3948 * @return bool|string - Converted value or false
2290 3949 */
2291 3950 public function auto_map($name = false) {
2292 3951
@@ -2291,19 +3950,25 @@
2291 3950 public function auto_map($name = false) {
2292 3951
2293 3952 $item = $this->get('item');
2294 3953
2295 - if ($item && class_exists("FrmField")) {
2296 - $where = array('fi.form_id' => (int) $item,
2297 - "(fi.field_key = '{$name}' OR fi.name = '{$name}') AND 1" => "1"
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 + ),
2298 3962 );
2299 3963 $field = FrmField::getAll($where, 'id ASC', '1');
2300 3964
2301 3965 if ($field && is_object($field)) {
3966 + $field_id = get_option('e2pdf_formidable_use_keys', '0') ? $field->field_key : $field->id;
2302 3967 if ($field->type == 'textarea' || $field->type == 'rte') {
2303 - return "[" . $field->id . " wpautop=0]";
3968 + return '[' . $field_id . ' wpautop=0]';
2304 3969 } else {
2305 - return "[" . $field->id . "]";
3970 + return '[' . $field_id . ']';
2306 3971 }
2307 3972 }
2308 3973 }
2309 3974
@@ -2314,31 +3979,29 @@
2314 3979 * Load additional shortcodes for this extension
2315 3980 */
2316 3981 public function load_shortcodes() {
2317 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'));
2318 3985 add_shortcode('e2pdf-frm-repeatable', array($this, 'shortcode_e2pdf_frm_repeatable'));
2319 3986 }
2320 3987
2321 3988 /**
2322 - * [e2pdf-frm-repeatable id='{entry_id}' field_id='{field_id}'] shortcode
2323 - *
3989 + * [e2pdf-frm-repeatable id="entry_id' field_id="field_id"] shortcode
2324 3990 * @param array $atts - Atributes for shortcode
2325 - *
2326 - * @return string - Output of shortcodes
3991 + * @return string - Output of shortcode
2327 3992 */
2328 3993 public function shortcode_e2pdf_frm_repeatable($atts = array()) {
2329 3994 $id = (int) $atts['id'];
2330 3995 $field_id = $atts['field_id'];
2331 3996
2332 - $response = "[frm-field-value field_id='{$field_id}' entry='{$id}']";
3997 + $response = '[frm-field-value field_id="' . $field_id . '" entry="' . $id . '"]';
2333 3998 return $response;
2334 3999 }
2335 4000
2336 4001 /**
2337 4002 * [e2pdf-frm-entry-values id='{form_id}' field_id='{field_id}' separator=''] shortcode
2338 - *
2339 4003 * @param array $atts - Atributes for shortcode
2340 - *
2341 4004 * @return string - Output of shortcodes
2342 4005 */
2343 4006 public function shortcode_e2pdf_frm_entry_values($atts = array()) {
2344 4007 $form_id = (int) $atts['id'];
@@ -2347,10 +4010,11 @@
2347 4010
2348 4011 $response = '';
2349 4012 $values = array();
2350 4013 if ($form_id && $field_id && class_exists('FrmEntry') && class_exists('FrmEntryMeta')) {
4014 +
2351 4015 $where = array(
2352 - 'it.form_id' => $form_id
4016 + 'it.form_id' => $form_id,
2353 4017 );
2354 4018 $entries_tmp = FrmEntry::getAll($where, ' ORDER BY id ASC');
2355 4019 foreach ($entries_tmp as $key => $entry) {
2356 4020 $values[] = FrmEntryMeta::get_meta_value($entry, $field_id);
@@ -2360,13 +4024,125 @@
2360 4024 return $response;
2361 4025 }
2362 4026
2363 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 + /**
2364 4141 * Get styles for generating Map Field function
2365 - *
2366 4142 * @return array - List of css files to load
2367 4143 */
2368 - public function get_styles() {
4144 + public function styles($item_id = false) {
2369 4145
2370 4146 $styles = array();
2371 4147 if (class_exists('FrmStylesHelper')) {
2372 4148 $uploads = FrmStylesHelper::get_upload_base();
@@ -2375,12 +4151,136 @@
2375 4151 $url = $uploads['baseurl'] . $saved_css_path;
2376 4152 } else {
2377 4153 $url = admin_url('admin-ajax.php?action=frmpro_css');
2378 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 + }
2379 4160
2380 - $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 + }
2381 4204 }
4205 + }
2382 4206
2383 - 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 + }
2384 4247 }
2385 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 + }
2386 4286 }