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-caldera.php +1156 -681 1.02.02 → 1.32.53 View file →
@@ -1,11 +1,10 @@
1 1 <?php
2 2
3 3 /**
4 - * E2pdf Caldera Extension
5 - *
4 + * E2Pdf Caldera 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.01.47
11 10 */
@@ -15,45 +14,34 @@
15 14
16 15 class Extension_E2pdf_Caldera extends Model_E2pdf_Model {
17 16
18 17 private $options;
18 + private $info = array(
19 + 'key' => 'caldera',
20 + 'title' => 'Caldera 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 - 'caldera' => __('Caldera', '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 false;
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('caldera-forms/caldera-core.php')) {
43 + if (defined('E2PDF_CALDERA_EXTENSION') || $this->helper->load('extension')->is_plugin_active('caldera-forms/caldera-core.php')) {
56 44 return true;
57 45 }
58 46 return false;
59 47 }
@@ -59,12 +47,10 @@
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 56 if (!isset($this->options)) {
@@ -69,44 +55,109 @@
69 55 public function set($key, $value) {
70 56 if (!isset($this->options)) {
71 57 $this->options = new stdClass();
72 58 }
59 + $this->options->$key = $value;
60 + switch ($key) {
61 + case 'item':
62 + global $form;
63 + $this->set('cached_form', false);
64 + $this->set('cached_tmp_form', false);
65 + if (class_exists('Caldera_Forms_Forms') && $this->get('item')) {
66 + if ($form && isset($form['ID'])) {
67 + $this->set('cached_tmp_form', $form);
68 + if ($form['ID'] != $this->get('item')) {
69 + $form = Caldera_Forms_Forms::get_form($this->get('item'));
70 + }
71 + }
72 + if ($form == null) {
73 + $form = Caldera_Forms_Forms::get_form($this->get('item'));
74 + }
75 + if (isset($form['_last_updated'])) {
76 + $this->set('cached_form', $form);
77 + }
78 + }
79 + break;
80 + case 'dataset':
81 + $this->set('cached_entry', false);
82 + if (class_exists('Caldera_Forms_Entry') && class_exists('Caldera_Forms') && $this->get('cached_form') && $this->get('dataset')) {
83 + $entry = new Caldera_Forms_Entry($this->get('cached_form'), $this->get('dataset'));
84 + if ($entry->found()) {
85 + $this->set('cached_entry', $entry);
86 + }
87 + if (!empty($this->get('cached_form')['is_connected_form'])) {
88 + $form = $this->get('cached_form');
89 + $form['processors']['_connected_form'] = array(
90 + 'type' => 'form-connector',
91 + 'runtimes' => array(
92 + 'insert' => true,
93 + ),
94 + 'config' => array(),
95 + );
96 + $form_fields = array();
97 + $meta = Caldera_Forms::get_entry_meta((int) $this->get('dataset'), $form);
98 + if (!empty($meta['form-connector']['data']['_connected_form']['entry']['form']['meta_value'])) {
99 + foreach ((array) $meta['form-connector']['data']['_connected_form']['entry']['form']['meta_value'] as $form_meta) {
100 + $form_fields = array_merge($form_fields, $form_meta);
101 + }
102 + }
103 + if (!empty($form['condition_points']['forms'])) {
104 + $form['fields'] = array();
105 + foreach ($form['condition_points']['forms'] as $connected_id => $connected_form) {
106 + if (!empty($form_fields[$connected_id]) && !empty($connected_form['fields'])) {
107 + $form['fields'] = array_merge($form['fields'], $connected_form['fields']);
108 + }
109 + }
73 110
74 - $this->options->$key = $value;
111 + if (function_exists('cf_form_connector_setup_processors_meta')) {
112 + add_filter('caldera_forms_get_entry_detail', 'cf_form_connector_setup_processors_meta', 10, 3);
113 + }
114 + }
115 + if (isset($form['node']) && function_exists('cf_from_connector_merge_fields')) {
116 + $form['fields'] = cf_from_connector_merge_fields($form);
117 + }
118 + $this->set('cached_form', $form);
119 + }
120 + }
121 + break;
122 + default:
123 + break;
124 + }
75 125 return true;
76 126 }
77 127
78 128 /**
79 129 * Get option by key
80 - *
81 130 * @param string $key - Key to get assigned option value
82 - *
83 131 * @return mixed
84 132 */
85 133 public function get($key) {
86 134 if (isset($this->options->$key)) {
87 135 $value = $this->options->$key;
88 - return $value;
89 136 } else {
90 - return false;
137 + switch ($key) {
138 + case 'args':
139 + $value = array();
140 + break;
141 + default:
142 + $value = false;
143 + break;
144 + }
91 145 }
146 + return $value;
92 147 }
93 148
94 149 /**
95 150 * Get items to work with
96 - *
97 151 * @return array() - List of available items
98 152 */
99 - public function get_items() {
153 + public function items() {
100 154 $content = array();
101 - if (class_exists("Caldera_Forms_Forms")) {
155 + if (class_exists('Caldera_Forms_Forms')) {
102 156 $forms = Caldera_Forms_Forms::get_forms(true);
103 157 if ($forms) {
104 158 foreach ($forms as $key => $value) {
105 - $content[] = array(
106 - 'key' => $value['ID'],
107 - 'value' => $value['name']
108 - );
159 + $content[] = $this->item($value['ID']);
109 160 }
110 161 }
111 162 }
112 163 return $content;
@@ -113,288 +164,488 @@
113 164 }
114 165
115 166 /**
116 167 * Get entries for export
117 - *
118 - * @param int $item - Form ID
168 + * @param int $item_id - Item ID
119 169 * @param string $name - Entries names
120 - *
121 170 * @return array() - Entries list
122 171 */
123 - public function get_datasets($item = false, $name = false) {
124 -
172 + public function datasets($item_id = false, $name = false) {
125 173 $datasets = array();
126 -
127 - if (class_exists("Caldera_Forms_Admin") && $item) {
128 -
129 - $form = Caldera_Forms_Admin::get_entries($item, 1, 9999999999);
130 -
174 + if (class_exists('Caldera_Forms_Admin') && $item_id) {
175 + $form = Caldera_Forms_Admin::get_entries($item_id, 1, 9999999999);
131 176 if ($form && isset($form['entries']) && is_array($form['entries'])) {
132 - foreach ($form['entries'] as $key => $dataset) {
133 - $this->set('item', $item);
134 - $this->set('dataset', $dataset['_entry_id']);
135 -
136 - $dataset_title = $this->render($name);
137 - if (!$dataset_title) {
138 - $dataset_title = $dataset['_date'];
177 + $this->set('item', $item_id);
178 + foreach ($form['entries'] as $key => $entry) {
179 + $this->set('dataset', $entry['_entry_id']);
180 + $entry_title = $this->render($name);
181 + if (!$entry_title) {
182 + $entry_title = $entry['_date'];
139 183 }
140 184 $datasets[] = array(
141 - 'key' => $dataset['_entry_id'],
142 - 'value' => $dataset_title
185 + 'key' => $entry['_entry_id'],
186 + 'value' => $entry_title,
143 187 );
144 188 }
145 189 }
146 190 }
147 -
148 -
149 191 return $datasets;
150 192 }
151 193
152 194 /**
153 - * Get dataset
154 - *
155 - * @param int $dataset - Dataset ID
156 - *
157 - * @return object - Dataset
195 + * Get Dataset Actions
196 + * @param int $dataset_id - Dataset ID
197 + * @return object
158 198 */
159 - public function get_dataset($dataset = false) {
160 - $dataset = (int) $dataset;
161 -
162 - if (!$dataset) {
199 + public function get_dataset_actions($dataset_id = false) {
200 + $dataset_id = (int) $dataset_id;
201 + if (!$dataset_id) {
163 202 return false;
164 203 }
204 + $actions = new stdClass();
205 + $actions->view = false;
206 + $actions->delete = false;
207 + return $actions;
208 + }
165 209
166 - $data = new stdClass();
167 - $data->url = false;
168 -
169 - return $data;
210 + /**
211 + * Get Template Actions
212 + * @param int $template - Template ID
213 + * @return object
214 + */
215 + public function get_template_actions($template = false) {
216 + $template = (int) $template;
217 + if (!$template) {
218 + return;
219 + }
220 + $actions = new stdClass();
221 + $actions->delete = false;
222 + return $actions;
170 223 }
171 224
172 225 /**
173 226 * Get item
174 - *
175 - * @param string $item - Item ID
176 - *
227 + * @param string $item_id - Item ID
177 228 * @return object - Item
178 229 */
179 - public function get_item($item = false) {
180 -
181 - $form = new stdClass();
182 -
183 - $caldera_form = false;
184 - if (class_exists("Caldera_Forms_Forms")) {
185 - $caldera_form = Caldera_Forms_Forms::get_form($item);
230 + public function item($item_id = false) {
231 + if (!$item_id && $this->get('item')) {
232 + $item_id = $this->get('item');
186 233 }
187 -
188 - if ($caldera_form) {
189 - $form->url = $this->helper->get_url(array('page' => 'caldera-forms', 'edit' => $caldera_form['ID']));
190 - $form->name = $caldera_form['name'];
234 + $form = false;
235 + if (class_exists('Caldera_Forms_Forms')) {
236 + $form = Caldera_Forms_Forms::get_form($item_id);
237 + }
238 + $item = new stdClass();
239 + if ($form) {
240 + $item->id = (string) $form['ID'];
241 + $item->url = $this->helper->get_url(
242 + array(
243 + 'page' => 'caldera-forms',
244 + 'edit' => $form['ID'],
245 + )
246 + );
247 + $item->name = isset($form['name']) ? $form['name'] : '';
191 248 } else {
192 - $form->url = 'javascript:void(0);';
193 - $form->name = '';
249 + $item->id = '';
250 + $item->url = '';
251 + $item->name = '';
194 252 }
195 - return $form;
253 + return $item;
196 254 }
197 255
198 256 /**
199 257 * Render value according to content
200 - *
201 258 * @param string $value - Content
202 259 * @param string $type - Type of rendering value
203 260 * @param array $field - Field details
204 - *
205 261 * @return string - Fully rendered value
206 262 */
207 - public function render($value, $type = false, $field = array()) {
208 -
209 - $value = $this->render_shortcodes($value, $type, $field);
210 - $value = $this->strip_shortcodes($value);
211 -
212 - if ($type === 'value' && isset($field['type']) && $field['type'] === 'e2pdf-checkbox' && isset($field['properties']['option'])) {
213 - $option = $this->render($field['properties']['option']);
214 - $options = explode(', ', $value);
215 - $option_options = explode(', ', $option);
216 - if (is_array($options) && is_array($option_options) && !array_diff($option_options, $options)) {
217 - return $option;
218 - } else {
219 - return "";
220 - }
263 + public function render($value, $field = array(), $convert_shortcodes = true, $raw = false) {
264 + $value = $this->render_shortcodes($value, $field);
265 + if (!$raw) {
266 + $value = $this->strip_shortcodes($value);
267 + $value = $this->convert_shortcodes($value, $convert_shortcodes, isset($field['type']) && $field['type'] == 'e2pdf-html' ? true : false);
268 + $value = $this->helper->load('field')->render_checkbox($value, $this, $field);
221 269 }
222 -
223 - if ($type === 'value') {
224 - $value = str_replace("&#91;", "[", $value);
225 - }
226 -
227 270 return $value;
228 271 }
229 272
230 273 /**
231 274 * Render shortcodes which available in this extension
232 - *
233 275 * @param string $value - Content
234 276 * @param string $type - Type of rendering value
235 277 * @param array $field - Field details
236 - *
237 278 * @return string - Value with rendered shortcodes
238 279 */
239 - public function render_shortcodes($value, $type = false, $field = array()) {
240 -
241 - $dataset = $this->get('dataset');
242 -
280 + public function render_shortcodes($value, $field = array()) {
281 + $element_id = isset($field['element_id']) ? $field['element_id'] : false;
243 282 if ($this->verify()) {
244 283 if (false !== strpos($value, '[')) {
245 -
246 - $shortcode_tags = array(
247 - 'e2pdf-format-number',
248 - 'e2pdf-format-date',
249 - 'e2pdf-format-output',
250 - );
251 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
252 - $tagnames = array_intersect($shortcode_tags, $matches[1]);
253 -
254 - if (!empty($tagnames)) {
255 -
256 - $pattern = get_shortcode_regex($tagnames);
257 - preg_match_all("/$pattern/", $value, $shortcodes);
258 - foreach ($shortcodes[0] as $key => $shortcode_value) {
259 - $shortcode = array();
260 - $shortcode[1] = $shortcodes[1][$key];
261 - $shortcode[2] = $shortcodes[2][$key];
262 - $shortcode[3] = $shortcodes[3][$key];
263 - $shortcode[4] = $shortcodes[4][$key];
264 - $shortcode[5] = $shortcodes[5][$key];
265 - $shortcode[6] = $shortcodes[6][$key];
266 -
267 - if (isset($shortcode['5'])) {
268 - $sub_value = $this->strip_shortcodes(Caldera_Forms::do_magic_tags($shortcode['5'], $dataset));
269 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]" . $sub_value . "[/" . $shortcode['2'] . "]", $value);
270 - }
271 - }
272 - }
284 + $value = $this->helper->load('field')->pre_shortcodes($value, $this, $field);
285 + $value = $this->helper->load('field')->inner_shortcodes($value, $this, $field);
286 + $value = $this->helper->load('field')->wrapper_shortcodes($value, $this, $field);
273 287 }
288 + $value = $this->helper->load('field')->do_shortcodes($value, $this, $field);
274 289
275 - $value = do_shortcode($value);
276 -
277 290 add_filter('caldera_forms_magic_form', array($this, 'filter_caldera_forms_magic_form'), 30, 2);
278 291 add_filter('caldera_forms_render_get_field', array($this, 'filter_caldera_forms_render_get_field'), 30, 2);
279 - add_filter('caldera_forms_do_field_magic_value', array($this, 'filter_caldera_forms_do_field_magic_value'), 30, 4);
292 + add_filter('caldera_forms_pre_do_field_magic', array($this, 'filter_caldera_forms_pre_do_field_magic'), 30, 5);
293 + add_filter('caldera_forms_get_field_entry', array($this, 'filter_caldera_forms_get_field_entry'), 30, 4);
294 + add_filter('caldera_forms_pre_check_condition', array($this, 'filter_caldera_forms_pre_check_condition'), 30);
280 295
281 - $value = Caldera_Forms::do_magic_tags($value, $dataset);
282 -
283 - if (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
284 - $esig = isset($field['properties']['esig']) && $field['properties']['esig'] ? true : false;
285 - if ($esig) {
286 - //process e-signature
287 - $value = "";
288 - } else {
289 - if (!$this->helper->load('image')->get_image($value)) {
290 - $value = $this->strip_shortcodes($value);
291 - if (
292 - $value &&
293 - trim($value) != "" &&
294 - extension_loaded('gd') &&
295 - function_exists('imagettftext')
296 - ) {
297 - if (isset($field['properties']['text_color']) && $field['properties']['text_color']) {
298 - $penColour = $this->helper->load('convert')->to_hex_color($field['properties']['text_color']);
299 - } else {
300 - $penColour = array(0x14, 0x53, 0x94);
301 - }
302 -
303 - $default_options = array(
304 - 'imageSize' => array(isset($field['width']) ? $field['width'] : '400', isset($field['height']) ? $field['height'] : '150'),
305 - 'bgColour' => 'transparent',
306 - 'penColour' => $penColour
307 - );
308 -
309 - $options = array();
310 - $options = array_merge($default_options, $options);
311 -
312 - $model_e2pdf_font = new Model_E2pdf_Font();
313 -
314 - $font = false;
315 - if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
316 - $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
317 - }
318 - if (!$font) {
319 - $font = $model_e2pdf_font->get_font_path('Noto Sans');
320 - }
321 -
322 - $size = 150;
323 - if (isset($field['properties']['text_font_size']) && $field['properties']['text_font_size']) {
324 - $size = $field['properties']['text_font_size'];
325 - }
326 -
327 - $model_e2pdf_signature = new Model_E2pdf_Signature();
328 - $value = $model_e2pdf_signature->ttf_signature($value, $size, $font, $options);
329 - } else {
330 - $value = "";
331 - }
332 - }
333 - }
334 - } else {
335 - $value = str_replace("[", '&#91;', $value);
296 + global $form;
297 + if ($this->get('cached_form')) {
298 + $form = $this->get('cached_form');
336 299 }
300 + $value = Caldera_Forms::do_magic_tags($value, $this->get('dataset'));
301 + if ($this->get('cached_tmp_form')) {
302 + $form = $this->get('cached_tmp_form');
303 + }
304 + $value = $this->helper->load('field')->render(
305 + apply_filters('e2pdf_extension_render_shortcodes_pre_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false),
306 + $this,
307 + $field
308 + );
337 309
338 310 remove_filter('caldera_forms_magic_form', array($this, 'filter_caldera_forms_magic_form'), 30);
339 311 remove_filter('caldera_forms_render_get_field', array($this, 'filter_caldera_forms_render_get_field'), 30);
340 - remove_filter('caldera_forms_do_field_magic_value', array($this, 'filter_caldera_forms_do_field_magic_value'), 30);
312 + remove_filter('caldera_forms_pre_do_field_magic', array($this, 'filter_caldera_forms_pre_do_field_magic'), 30);
313 + remove_filter('caldera_forms_get_field_entry', array($this, 'filter_caldera_forms_get_field_entry'), 30);
314 + remove_filter('caldera_forms_pre_check_condition', array($this, 'filter_caldera_forms_pre_check_condition'), 30);
341 315 }
342 -
343 - return $value;
316 + return apply_filters(
317 + 'e2pdf_extension_render_shortcodes_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false
318 + );
344 319 }
345 320
346 321 /**
347 322 * Strip unused shortcodes
348 - *
349 323 * @param string $value - Content
350 - *
351 324 * @return string - Value with removed unused shortcodes
352 325 */
353 326 public function strip_shortcodes($value) {
354 - $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', "", $value);
355 - $value = preg_replace('~(?:%/?)[^/%]+/?%~s', "", $value);
327 + $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
328 + $value = preg_replace('~%[a-z0-9_]*%~', '', $value);
356 329 return $value;
357 330 }
358 331
359 - public function verify() {
360 - $item = $this->get('item');
361 - $dataset = $this->get('dataset');
332 + // strip math
333 + public function strip_math($value, &$replacements) {
334 + if ($value) {
335 + preg_match_all('/%[a-z0-9_]*%/', $value, $matches);
336 + foreach ($matches[0] as $match) {
337 + $index = count($replacements) + 1;
338 + $replacements[] = $match;
339 + $value = str_replace($match, '%' . $index . '$s', $value);
340 + }
341 + }
342 + return $value;
343 + }
362 344
363 - if ($item && $dataset && class_exists('Caldera_Forms_Entry') && class_exists('Caldera_Forms_Forms') && class_exists("Caldera_Forms")) {
364 - $form = Caldera_Forms_Forms::get_form($item);
365 - if ($form && isset($form['_last_updated'])) {
366 - $entry = new Caldera_Forms_Entry($form, $dataset);
367 - if ($entry->found()) {
368 - return true;
345 + /**
346 + * Convert shortcodes inside value string
347 + * @param string $value - Value string
348 + * @param bool $to - Convert From/To
349 + * @return string - Converted value
350 + */
351 + public function convert_shortcodes($value, $to = false, $html = false) {
352 + if ($value) {
353 + if ($to) {
354 + $value = stripslashes_deep($value);
355 + $value = str_replace('&#91;', '[', $value);
356 + if (!$html) {
357 + $value = wp_specialchars_decode($value, ENT_QUOTES);
369 358 }
359 + } else {
360 + $value = str_replace('[', '&#91;', $value);
370 361 }
371 362 }
363 + return $value;
364 + }
365 +
366 + /**
367 + * Verify if item and dataset exists
368 + * @return bool - item and dataset exists
369 + */
370 + public function verify() {
371 + if ($this->get('cached_entry')) {
372 + return true;
373 + }
372 374 return false;
373 375 }
374 376
375 - public function visual_mapper() {
377 + /**
378 + * Create Form based on uploaded PDF
379 + * @param object $template - Template Object to work with
380 + * @param array $data - Settings to create labels/shortcodes
381 + * @return object - Mapped Template Object
382 + */
383 + public function auto_form($template, $data = array()) {
384 + if ($template->get('ID')) {
385 + $auto_form_label = isset($data['auto_form_label']) && $data['auto_form_label'] ? $data['auto_form_label'] : false;
386 + $auto_form_shortcode = isset($data['auto_form_shortcode']) ? true : false;
387 + $form = array(
388 + '_last_updated' => date('r'),
389 + 'success' => sprintf(__('Success. [e2pdf-download id="%s"]', 'e2pdf'), $template->get('ID')),
390 + 'name' => $template->get('title'),
391 + 'db_support' => '1',
392 + 'hide_form' => '1',
393 + 'form_ajax' => '1',
394 + 'custom_callback' => '',
395 + 'fields' => array(),
396 + 'layout_grid' => array(
397 + 'fields' => array(),
398 + 'strucutre' => '',
399 + ),
400 + 'settings' => array(
401 + 'responsive' => array(
402 + 'break_point' => 'sm',
403 + ),
404 + ),
405 + );
406 + $pages = $template->get('pages');
407 + $checkboxes = array();
408 + $radios = array();
409 + foreach ($pages as $page_key => $page) {
410 + if (isset($page['elements']) && !empty($page['elements'])) {
411 + foreach ($page['elements'] as $element_key => $element) {
412 + $type = false;
413 + $label = '';
414 + if ($element['type'] == 'e2pdf-input' || $element['type'] == 'e2pdf-signature') {
415 + $type = 'text';
416 + $label = 'Text';
417 + } elseif ($element['type'] == 'e2pdf-textarea') {
418 + $type = 'paragraph';
419 + $label = 'Textarea';
420 + } elseif ($element['type'] == 'e2pdf-select') {
421 + $type = 'dropdown';
422 + $label = 'Select';
423 + $options = array();
424 + $field_options = array();
425 + if (isset($element['properties']['options'])) {
426 + $field_options = explode("\n", $element['properties']['options']);
427 + foreach ($field_options as $option) {
428 + $option_id = 'opt' . $this->random();
429 + $options[$option_id] = array(
430 + 'calc_value' => '',
431 + 'label' => $option,
432 + 'value' => $option,
433 + );
434 + }
435 + }
436 + } elseif ($element['type'] == 'e2pdf-checkbox') {
437 + $field_key = array_search($element['name'], array_column($checkboxes, 'name'), false);
438 + if ($field_key !== false) {
439 + $option_id = 'opt' . $this->random();
440 + $checkboxes[$field_key]['options'][$option_id] = array(
441 + 'calc_value' => $element['properties']['option'],
442 + 'label' => $element['properties']['option'],
443 + 'value' => $element['properties']['option'],
444 + );
445 + $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $checkboxes[$field_key]['element_id'] . '%';
446 + } else {
447 + $type = 'checkbox';
448 + $label = 'Checkbox';
449 + }
450 + } elseif ($element['type'] == 'e2pdf-radio') {
451 + if (isset($element['properties']['group']) && $element['properties']['group']) {
452 + $element['name'] = $element['properties']['group'];
453 + } else {
454 + $element['name'] = $element['element_id'];
455 + }
456 + $field_key = array_search($element['name'], array_column($radios, 'name'), false);
457 + if ($field_key !== false) {
458 + $option_id = 'opt' . $this->random();
459 + $radios[$field_key]['options'][$option_id] = array(
460 + 'calc_value' => $element['properties']['option'],
461 + 'label' => $element['properties']['option'],
462 + 'value' => $element['properties']['option'],
463 + );
464 + $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $radios[$field_key]['element_id'] . '%';
465 + } else {
466 + $type = 'radio';
467 + $label = 'Radio';
468 + }
469 + }
470 + if ($type) {
471 + $labels = array();
472 + if ($auto_form_shortcode) {
473 + $labels[] = '%element_' . $element['element_id'] . '%';
474 + }
475 + if ($auto_form_label && $auto_form_label == 'value' && isset($element['value']) && $element['value']) {
476 + $labels[] = $element['value'];
477 + } elseif ($auto_form_label && $auto_form_label == 'name' && isset($element['name']) && $element['name']) {
478 + $labels[] = $element['name'];
479 + }
480 + if ($type == 'checkbox' || $type == 'radio') {
481 + $field_id = 'opt' . $this->random();
482 + $field_data = array(
483 + 'name' => $element['name'],
484 + 'element_id' => $element['element_id'],
485 + 'label' => !empty($labels) ? implode(' ', $labels) : $label,
486 + 'options' => array(
487 + $field_id => array(
488 + 'calc_value' => $element['properties']['option'],
489 + 'label' => $element['properties']['option'],
490 + 'value' => $element['properties']['option'],
491 + ),
492 + ),
493 + );
494 + if ($type == 'checkbox') {
495 + $checkboxes[] = $field_data;
496 + } else {
497 + $radios[] = $field_data;
498 + }
499 + } else {
500 + $field_id = 'fld_' . $this->random();
501 + $form['fields'][$field_id] = array(
502 + 'ID' => $field_id,
503 + 'slug' => 'element_' . $element['element_id'],
504 + 'type' => $type,
505 + 'label' => !empty($labels) ? implode(' ', $labels) : $label,
506 + );
376 507
377 - $item = $this->get('item');
508 + if ($type == 'select') {
509 + $form['fields'][$field_id]['config'] = array(
510 + 'option' => $options,
511 + );
512 + }
513 + }
514 + $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $element['element_id'] . '%';
515 + if (isset($element['properties']['esig'])) {
516 + unset($pages[$page_key]['elements'][$element_key]['properties']['esig']);
517 + }
518 + }
519 + }
520 + }
521 + }
522 + foreach ($checkboxes as $element) {
523 + $field_id = 'fld_' . $this->random();
524 + $form['fields'][$field_id] = array(
525 + 'ID' => $field_id,
526 + 'slug' => 'element_' . $element['element_id'],
527 + 'type' => 'checkbox',
528 + 'label' => $element['label'],
529 + 'config' => array(
530 + 'option' => $element['options'],
531 + ),
532 + );
533 + }
534 + foreach ($radios as $element) {
535 + $field_id = 'fld_' . $this->random();
536 + $form['fields'][$field_id] = array(
537 + 'ID' => $field_id,
538 + 'slug' => 'element_' . $element['element_id'],
539 + 'type' => 'radio',
540 + 'label' => $element['label'],
541 + 'config' => array(
542 + 'option' => $element['options'],
543 + ),
544 + );
545 + }
546 + $field_id = 'fld_' . $this->random();
547 + $form['fields'][$field_id] = array(
548 + 'ID' => $field_id,
549 + 'slug' => 'submit',
550 + 'type' => 'button',
551 + 'label' => 'Submit',
552 + 'class' => 'btn btn-default',
553 + );
378 554
379 - if ($item && class_exists("Caldera_Forms") && class_exists("Caldera_Forms_Forms") && class_exists("Caldera_Forms_Field_Util")) {
555 + $fields = array_keys($form['fields']);
556 + $x = 1;
557 + foreach ($fields as $field) {
558 + $form['layout_grid']['fields'][$field] = $x . ':1';
559 + if ($x == 1) {
560 + $form['layout_grid']['structure'] .= '12';
561 + } else {
562 + $form['layout_grid']['structure'] .= '|12';
563 + }
564 + $x++;
565 + }
566 + $item = Caldera_Forms_Forms::create_form($form);
567 + if ($item) {
568 + $template->set('item', $item['ID']);
569 + $template->set('pages', $pages);
570 + }
571 + }
572 + return $template;
573 + }
380 574
381 - $source = Caldera_Forms::render_form($item);
575 + /**
576 + * Generate Random number for Field ID
577 + * @return int - Generated number
578 + */
579 + private function random() {
580 + return round((float) rand() / (float) getrandmax() * 10000000);
581 + }
382 582
383 - $form = Caldera_Forms_Forms::get_form($item);
384 -
385 - libxml_use_internal_errors(true);
386 - $dom = new DOMDocument;
387 - $html = $dom->loadHTML($source);
388 - libxml_clear_errors();
389 -
390 - if (!$html) {
391 - return __('Form could not be parsed due incorrect HTML', 'e2pdf');
583 + /**
584 + * Init Visual Mapper data
585 + * @return bool|string - HTML data source for Visual Mapper
586 + */
587 + public function visual_mapper() {
588 + $forms = array();
589 + $source = '';
590 + $html = '';
591 + if ($this->get('item') && class_exists('Caldera_Forms') && class_exists('Caldera_Forms_Forms') && class_exists('Caldera_Forms_Field_Util')) {
592 + add_filter('caldera_forms_render_get_form', array($this, 'filter_caldera_forms_render_get_form'));
593 + $form = Caldera_Forms_Forms::get_form($this->get('item'));
594 + if (!empty($form['is_connected_form']) && isset($form['node']) && !empty($form['node'])) {
595 + foreach ($form['node'] as $node) {
596 + if (isset($node['form']) && $node['form']) {
597 + $source .= Caldera_Forms::render_form($node['form']);
598 + $forms[] = Caldera_Forms_Forms::get_form($node['form']);
599 + }
600 + }
392 601 } else {
602 + $source = Caldera_Forms::render_form($this->get('item'));
603 + }
604 + remove_filter('caldera_forms_render_get_form', array($this, 'filter_caldera_forms_render_get_form'));
605 + if ($source) {
606 + $dom = new DOMDocument();
607 + $html = $this->helper->load('convert')->load_html($source, $dom, true);
608 + }
609 + if (!$source) {
610 + return '<div class="e2pdf-vm-error">' . __("The form source is empty or doesn't exist", 'e2pdf') . '</div>';
611 + } elseif (!$html) {
612 + return '<div class="e2pdf-vm-error">' . __('The form could not be parsed due the incorrect HTML', 'e2pdf') . '</div>';
613 + } else {
614 + $xml = $this->helper->load('xml');
615 + $xpath = new DomXPath($dom);
393 616
394 - $xpath = new DomXPath($dom);
617 + $conditional_fields = $xpath->query("//*[contains(@class, 'caldera-forms-conditional-field')]");
618 + foreach ($conditional_fields as $element) {
619 + $conditional_field_id = $xml->get_node_value($element, 'data-field-id');
620 + if ($conditional_field_id) {
621 + preg_match('/<script type="text\/html" id="conditional-' . $conditional_field_id . '-tmpl">(.*?)<\/script>/s', $source, $matches);
622 + if (isset($matches[1])) {
623 + $conditional_dom = new DOMDocument();
624 + $conditional_dom_html = $this->helper->load('convert')->load_html($matches[1], $dom);
625 + if ($conditional_dom_html) {
626 + $element->appendChild($dom->importNode($conditional_dom->documentElement, true));
627 + }
628 + }
629 + }
630 + }
395 631
632 + // remove by name
633 + $remove_by_name = array(
634 + '_cf_verify',
635 + '_wp_http_referer',
636 + '_cf_frm_id',
637 + '_cf_frm_ct',
638 + 'cfajax',
639 + );
640 + foreach ($remove_by_name as $key => $name) {
641 + $elements = $xpath->query('//*[@name="' . $name . '"]');
642 + foreach ($elements as $element) {
643 + $element->parentNode->removeChild($element);
644 + }
645 + }
396 646
647 + // remove by class
397 648 $remove_by_class = array(
398 649 'live-gravatar',
399 650 );
400 651 foreach ($remove_by_class as $key => $class) {
@@ -403,113 +654,127 @@
403 654 $element->parentNode->removeChild($element);
404 655 }
405 656 }
406 657
658 + // remove by tag
407 659 $remove_by_tag = array(
408 - 'script'
660 + 'script',
409 661 );
410 662 foreach ($remove_by_tag as $key => $tag) {
411 - $elements = $xpath->query("//{$tag}");
663 + $elements = $xpath->query('//' . $tag);
412 664 foreach ($elements as $element) {
413 665 $element->parentNode->removeChild($element);
414 666 }
415 667 }
416 668
417 -
418 - // Replace names
419 669 $fields = $xpath->query("//*[contains(@name, 'fld_')]");
420 670 foreach ($fields as $element) {
421 - if ($element->attributes->getNamedItem("type")->nodeValue == 'checkbox') {
422 - preg_match("/(.*?)\[(.*?)\]/i", $element->attributes->getNamedItem("name")->nodeValue, $matches);
671 + $field_id = false;
672 + if ($xml->get_node_value($element, 'type') == 'checkbox') {
673 + preg_match('/(.*?)\[(.*?)\]/i', $xml->get_node_value($element, 'name'), $matches);
423 674 if (isset($matches[1])) {
424 675 $field_id = $matches[1];
425 676 }
426 677 } else {
427 - $field_id = $element->attributes->getNamedItem("name")->nodeValue;
678 + $field_id = $xml->get_node_value($element, 'name');
428 679 }
429 680
430 -
431 - // Modify Star field
432 - if ($element->attributes->getNamedItem("data-type")->nodeValue == 'star') {
433 - $element->attributes->getNamedItem("style")->nodeValue = '';
681 + // modify rating field
682 + if ($xml->get_node_value($element, 'data-type') == 'star') {
683 + $xml->set_node_value($element, 'style', '');
434 684 }
435 685
436 - // Modify Range field
437 - if ($element->attributes->getNamedItem("type")->nodeValue == 'range') {
438 - $element->parentNode->attributes->getNamedItem("style")->nodeValue = '';
439 - $element->parentNode->attributes->getNamedItem("class")->nodeValue = 'col-xs-12';
440 -
441 - $next_element = $xpath->query(".//following-sibling::div[1]", $element->parentNode)->item(0);
442 - $next_element->parentNode->removeChild($next_element);
686 + // modify range field
687 + if ($xml->get_node_value($element, 'type') == 'range') {
688 + $xml->set_node_value($element, 'style', '', true);
689 + $xml->set_node_value($element, 'class', 'col-xs-12', true);
690 + $next_element = $xpath->query('.//following-sibling::div[1]', $element->parentNode)->item(0);
691 + if ($next_element) {
692 + $next_element->parentNode->removeChild($next_element);
693 + }
443 694 }
444 695
445 -
446 - $field = Caldera_Forms_Field_Util::get_field($field_id, $form);
447 - if ($field && isset($field['slug'])) {
448 - $element->attributes->getNamedItem("name")->nodeValue = "%" . $field['slug'] . "%";
696 + if ($field_id) {
697 + if (!empty($form['is_connected_form'])) {
698 + foreach ($forms as $sub_form) {
699 + $field = Caldera_Forms_Field_Util::get_field($field_id, $sub_form);
700 + if ($field && isset($field['slug'])) {
701 + $xml->set_node_value($element, 'name', '%' . $field['slug'] . '%');
702 + break;
703 + }
704 + }
705 + } else {
706 + $field = Caldera_Forms_Field_Util::get_field($field_id, $form);
707 + if ($field && isset($field['slug'])) {
708 + $xml->set_node_value($element, 'name', '%' . $field['slug'] . '%');
709 + }
710 + }
449 711 }
450 712 }
451 713
452 - // Convert Calculation Fields
714 + // calculation
453 715 $calculation_fields = $xpath->query("//input[@data-type='calculation']");
454 - foreach ($calculation_fields as $calculation_field) {
455 - $calculation_field->attributes->getNamedItem("type")->nodeValue = 'text';
716 + foreach ($calculation_fields as $element) {
717 + $xml->set_node_value($element, 'type', 'text');
718 + $xml->set_node_value($element, 'class', $xml->get_node_value($element, 'class') . ' form-control');
719 + $calculation_text = $xpath->query('.//h3', $element->parentNode)->item(0);
720 + if ($calculation_text) {
721 + $element->parentNode->removeChild($calculation_text);
722 + }
723 + }
456 724
457 - $calculation_text = $xpath->query(".//h3", $calculation_field->parentNode)->item(0);
458 - $calculation_field->parentNode->removeChild($calculation_text);
725 + // file upload
726 + $file_uploads = $xpath->query("//input[@type='file']");
727 + foreach ($file_uploads as $element) {
728 + $xml->set_node_value($element, 'class', $xml->get_node_value($element, 'type') . ' form-control');
459 729 }
460 730
461 -
462 - // Modify Toggle Fields
731 + // toggle
463 732 $toggle_gorups = $xpath->query("//*[contains(@class, 'cf-toggle-switch')]");
464 - foreach ($toggle_gorups as $toogle_group) {
465 - $toggle_elements = $xpath->query(".//*[contains(@class, 'cf-toggle-group-buttons')]//a", $toogle_group);
466 - foreach ($toggle_elements as $toggle_element) {
467 - $toggle_id = $toggle_element->attributes->getNamedItem("id")->nodeValue;
468 -
469 - $radio = $toggle_elements = $xpath->query(".//input[@id='{$toggle_id}']", $toogle_group)->item(0);
470 -
471 - if ($radio) {
472 - $radio_cloned = $radio->cloneNode(true);
473 -
474 - $attr = $dom->createAttribute('style');
475 - $attr->value = 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;';
476 - $radio_cloned->appendChild($attr);
477 -
478 - $toggle_element->appendChild($radio_cloned);
733 + foreach ($toggle_gorups as $element) {
734 + $toggle_elements = $xpath->query(".//*[contains(@class, 'cf-toggle-group-buttons')]//a", $element);
735 + foreach ($toggle_elements as $sub_element) {
736 + if ($sub_element->attributes->getNamedItem('id')) {
737 + $toggle_id = $xml->get_node_value($sub_element, 'id');
738 + $radio = $xpath->query(".//input[@id='{$toggle_id}']", $element)->item(0);
739 + if ($radio) {
740 + $radio_cloned = $radio->cloneNode(true);
741 + $xml->set_node_value($radio_cloned, 'style', 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;');
742 + $sub_element->appendChild($radio_cloned);
743 + }
479 744 }
480 745 }
481 746 }
482 747
483 - // Modify Advanced File Upload
748 + // ajax uploader
484 749 $advanced_uploaders = $xpath->query("//*[contains(@class, 'cf-uploader-trigger')]");
485 - foreach ($advanced_uploaders as $advanced_uploader) {
486 - $input = $xpath->query(".//input[@type='hidden']", $advanced_uploader->parentNode)->item(0);
487 -
488 -
750 + foreach ($advanced_uploaders as $element) {
751 + $input = $xpath->query(".//input[@type='hidden']", $element->parentNode)->item(0);
489 752 $attr = $dom->createAttribute('style');
490 753 $attr->value = 'position: relative;';
491 - $advanced_uploader->appendChild($attr);
492 -
493 -
754 + $element->appendChild($attr);
494 755 if ($input) {
495 756 $input_cloned = $input->cloneNode(true);
496 - $attr = $dom->createAttribute('style');
497 - $attr->value = 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;';
498 - $input_cloned->appendChild($attr);
757 + $xml->set_node_value($input_cloned, 'style', 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;');
758 + $xml->set_node_value($input_cloned, 'type', 'text');
759 + $element->appendChild($input_cloned);
760 + }
761 + }
499 762
500 - $input_cloned->attributes->getNamedItem('type')->nodeValue = 'text';
501 -
502 - $advanced_uploader->appendChild($input_cloned);
503 - }
763 + $textareas = $xpath->query('//textarea');
764 + foreach ($textareas as $element) {
765 + $xml->set_node_value($element, 'rows', '4');
504 766 }
505 767
506 - // Remove unecessary elements
507 768 $submit_buttons = $xpath->query("//input[@type='submit']");
508 - foreach ($submit_buttons as $submit_button) {
509 - $submit_button->parentNode->removeChild($submit_button);
769 + foreach ($submit_buttons as $element) {
770 + $element->parentNode->removeChild($element);
510 771 }
511 - return $dom->saveHTML();
772 + if (defined('LIBXML_HTML_NOIMPLIED') && defined('LIBXML_HTML_NODEFDTD')) {
773 + return str_replace(array('<html>', '</html>'), '', $dom->saveHTML());
774 + } else {
775 + return $dom->saveHTML();
776 + }
512 777 }
513 778 }
514 779 return false;
515 780 }
@@ -515,296 +780,357 @@
515 780 }
516 781
517 782 /**
518 783 * Auto Generate of Template for this extension
519 - *
520 784 * @return array - List of elements
521 785 */
522 786 public function auto() {
523 787 $response = array();
524 788 $elements = array();
525 -
526 - $item = $this->get('item');
527 -
528 789 $fields = array();
529 -
530 - if (class_exists("Caldera_Forms_Forms")) {
531 - $form = Caldera_Forms_Forms::get_form($item);
532 - if ($form && isset($form['fields'])) {
790 + $forms = array();
791 + if (class_exists('Caldera_Forms_Forms')) {
792 + $form = Caldera_Forms_Forms::get_form($this->get('item'));
793 + if (!empty($form['is_connected_form']) && isset($form['node']) && !empty($form['node'])) {
794 + foreach ($form['node'] as $node) {
795 + if (isset($node['form']) && $node['form']) {
796 + $sub_form = Caldera_Forms_Forms::get_form($node['form']);
797 + $forms[] = $sub_form;
798 + if ($sub_form && isset($sub_form['fields']) && is_array($sub_form['fields'])) {
799 + $fields = array_merge($fields, $sub_form['fields']);
800 + }
801 + }
802 + }
803 + } else {
804 + $forms[] = $form;
533 805 $fields = $form['fields'];
534 806 }
535 - }
807 + foreach ($forms as $sub_form) {
808 + if (isset($sub_form['layout_grid']['structure']) && $sub_form['layout_grid']['structure']) {
809 + $sub_form['layout_grid']['structure'] = str_replace('#', '|', $sub_form['layout_grid']['structure']);
810 + }
811 + if ($sub_form && isset($sub_form['layout_grid']['structure']) && isset($sub_form['layout_grid']['fields'])) {
812 + $struct = explode('|', $sub_form['layout_grid']['structure']);
813 + foreach ($struct as $row_num => $row) {
814 + $float = false;
815 + $columns = explode(':', $row);
816 + foreach ($columns as $column_num => $column) {
817 + $column_fields = array_keys($sub_form['layout_grid']['fields'], ($row_num + 1) . ':' . ($column_num + 1));
818 + $width = 100 / (12 / $column) . '%';
819 + foreach ($column_fields as $column_field_key) {
820 + if (isset($fields[$column_field_key])) {
821 + $field = $fields[$column_field_key];
822 + switch ($field['type']) {
823 + case 'text':
824 + case 'email':
825 + case 'phone_better':
826 + case 'phone_better':
827 + case 'number':
828 + case 'phone':
829 + case 'url':
830 + case 'date_picker':
831 + case 'color_picker':
832 + case 'credit_card_number':
833 + case 'credit_card_exp':
834 + case 'credit_card_cvc':
835 + case 'calculation':
836 + case 'range_slider':
837 + case 'star_rating':
838 + case 'utm':
839 + $elements[] = $this->auto_field(
840 + $field,
841 + array(
842 + 'type' => 'e2pdf-html',
843 + 'block' => true,
844 + 'float' => $float,
845 + 'properties' => array(
846 + 'top' => '20',
847 + 'left' => '20',
848 + 'right' => '20',
849 + 'width' => $width,
850 + 'height' => 'auto',
851 + 'value' => $field['label'],
852 + ),
853 + )
854 + );
536 855
537 - if ($form && isset($form['layout_grid']['structure']) && isset($form['layout_grid']['fields'])) {
538 - $struct = explode('|', $form['layout_grid']['structure']);
539 - foreach ($struct as $row_num => $row) {
856 + $elements[] = $this->auto_field(
857 + $field,
858 + array(
859 + 'type' => 'e2pdf-input',
860 + 'properties' => array(
861 + 'top' => '5',
862 + 'width' => '100%',
863 + 'height' => 'auto',
864 + 'value' => '%' . $field['slug'] . '%',
865 + ),
866 + )
867 + );
868 + break;
869 + case 'file':
870 + case 'advanced_file':
871 + case 'cf2_file':
872 + case 'paragraph':
873 + $elements[] = $this->auto_field(
874 + $field,
875 + array(
876 + 'type' => 'e2pdf-html',
877 + 'block' => true,
878 + 'float' => $float,
879 + 'properties' => array(
880 + 'top' => '20',
881 + 'left' => '20',
882 + 'right' => '20',
883 + 'width' => $width,
884 + 'height' => 'auto',
885 + 'value' => $field['label'],
886 + ),
887 + )
888 + );
540 889
541 - $float = false;
890 + $elements[] = $this->auto_field(
891 + $field,
892 + array(
893 + 'type' => 'e2pdf-textarea',
894 + 'properties' => array(
895 + 'top' => '5',
896 + 'width' => '100%',
897 + 'height' => '150',
898 + 'value' => '%' . $field['slug'] . '%',
899 + ),
900 + )
901 + );
902 + break;
903 + case 'wysiwyg':
904 + case 'html':
905 + case 'summary':
906 + $elements[] = $this->auto_field(
907 + $field,
908 + array(
909 + 'type' => 'e2pdf-html',
910 + 'block' => true,
911 + 'float' => $float,
912 + 'properties' => array(
913 + 'top' => '20',
914 + 'left' => '20',
915 + 'right' => '20',
916 + 'width' => $width,
917 + 'height' => 'auto',
918 + 'value' => $field['label'],
919 + ),
920 + )
921 + );
542 922
543 - $columns = explode(':', $row);
544 - foreach ($columns as $column_num => $column) {
545 - $column_fields = array_keys($form['layout_grid']['fields'], ( $row_num + 1) . ':' . ( $column_num + 1));
923 + $elements[] = $this->auto_field(
924 + $field,
925 + array(
926 + 'type' => 'e2pdf-html',
927 + 'properties' => array(
928 + 'top' => '5',
929 + 'width' => '100%',
930 + 'height' => '150',
931 + 'value' => '%' . $field['slug'] . '%',
932 + ),
933 + )
934 + );
935 + break;
936 + case 'dropdown':
937 + case 'filtered_select2':
938 + case 'states':
939 + $elements[] = $this->auto_field(
940 + $field,
941 + array(
942 + 'type' => 'e2pdf-html',
943 + 'block' => true,
944 + 'float' => $float,
945 + 'properties' => array(
946 + 'top' => '20',
947 + 'left' => '20',
948 + 'right' => '20',
949 + 'width' => $width,
950 + 'height' => 'auto',
951 + 'value' => $field['label'],
952 + ),
953 + )
954 + );
546 955
547 - $width = 100 / (12 / $column) . "%";
956 + $options_tmp = array();
548 957
549 - foreach ($column_fields as $column_field_key) {
550 - if (isset($fields[$column_field_key])) {
551 - $field = $fields[$column_field_key];
552 -
553 - switch ($field['type']) {
554 - case 'text':
555 - case 'email':
556 - case 'phone_better':
557 - case 'phone_better':
558 - case 'number':
559 - case 'phone':
560 - case 'url':
561 - case 'date_picker':
562 - case 'color_picker':
563 - case 'credit_card_number':
564 - case 'credit_card_exp':
565 - case 'credit_card_cvc':
566 - case 'calculation':
567 - case 'range_slider':
568 - case 'star_rating':
569 - case 'utm':
570 - case 'file':
571 - case 'advanced_file':
572 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
573 - 'top' => '20',
574 - 'left' => '20',
575 - 'right' => '20',
576 - 'block' => true,
577 - 'float' => $float,
578 - 'width' => $width,
579 - 'properties' => array(
580 - 'value' => $field['label'],
581 - )
582 - ));
583 -
584 - $elements[] = $this->auto_field($field, 'e2pdf-input', array(
585 - 'properties' => array(
586 - 'value' => "%{$field['slug']}%",
587 - )
588 - ));
589 - break;
590 -
591 -
592 - case 'paragraph':
593 -
594 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
595 - 'top' => '20',
596 - 'left' => '20',
597 - 'right' => '20',
598 - 'block' => true,
599 - 'float' => $float,
600 - 'width' => $width,
601 - 'properties' => array(
602 - 'value' => $field['label'],
603 - )
604 - ));
605 -
606 - $elements[] = $this->auto_field($field, 'e2pdf-textarea', array(
607 - 'properties' => array(
608 - 'value' => "%{$field['slug']}%",
609 - )
610 - ));
611 - break;
612 -
613 -
614 - case 'wysiwyg':
615 - case 'html':
616 - case 'summary':
617 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
618 - 'top' => '20',
619 - 'left' => '20',
620 - 'right' => '20',
621 - 'block' => true,
622 - 'float' => $float,
623 - 'width' => $width,
624 - 'properties' => array(
625 - 'value' => $field['label'],
626 - )
627 - ));
628 -
629 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
630 - 'properties' => array(
631 - 'height' => '100',
632 - 'value' => "%{$field['slug']}%",
633 - )
634 - ));
635 - break;
636 -
637 -
638 - case 'dropdown':
639 - case 'filtered_select2':
640 - case 'states':
641 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
642 - 'top' => '20',
643 - 'left' => '20',
644 - 'right' => '20',
645 - 'block' => true,
646 - 'float' => $float,
647 - 'width' => $width,
648 - 'properties' => array(
649 - 'value' => $field['label'],
650 - )
651 - ));
652 -
653 - $options_tmp = array();
654 -
655 - if (isset($field['config']['option']) && is_array($field['config']['option'])) {
656 - foreach ($field['config']['option'] as $opt_key => $option) {
657 - if (is_array($option)) {
658 - $options_tmp[] = $option['value'];
958 + if (isset($field['config']['option']) && is_array($field['config']['option'])) {
959 + foreach ($field['config']['option'] as $opt_key => $option) {
960 + if (is_array($option)) {
961 + $options_tmp[] = $option['value'];
962 + }
963 + }
659 964 }
660 - }
661 - }
662 965
663 - if ($field['type'] == 'states' && defined("CFCORE_PATH")) {
664 - if (file_exists(CFCORE_PATH . "fields/states/field.php")) {
665 - $contents = file_get_contents(CFCORE_PATH . "fields/states/field.php");
666 - preg_match_all('/<option value="(.*?)">(.*?)<\/option>/', $contents, $matches);
667 - if (isset($matches[1])) {
668 - foreach ($matches[1] as $state) {
669 - $options_tmp[] = $state;
966 + if ($field['type'] == 'states' && defined('CFCORE_PATH')) {
967 + if (file_exists(CFCORE_PATH . 'fields/states/field.php')) {
968 + $contents = file_get_contents(CFCORE_PATH . 'fields/states/field.php');
969 + preg_match_all('/<option value="(.*?)">(.*?)<\/option>/', $contents, $matches);
970 + if (isset($matches[1])) {
971 + foreach ($matches[1] as $state) {
972 + $options_tmp[] = $state;
973 + }
974 + }
670 975 }
671 976 }
672 - }
673 - }
674 977
675 - $elements[] = $this->auto_field($field, 'e2pdf-select', array(
676 - 'properties' => array(
677 - 'options' => implode("\n", $options_tmp),
678 - 'value' => "%{$field['slug']}%",
679 - )
680 - ));
681 - break;
682 -
683 -
684 - case 'checkbox':
685 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
686 - 'top' => '20',
687 - 'left' => '20',
688 - 'right' => '20',
689 - 'block' => true,
690 - 'float' => $float,
691 - 'width' => $width,
692 - 'properties' => array(
693 - 'value' => $field['label'],
694 - )
695 - ));
696 -
697 - $top = 0;
698 - if (isset($field['config']['option']) && is_array($field['config']['option'])) {
699 - foreach ($field['config']['option'] as $opt_key => $option) {
700 - if (is_array($option)) {
701 - $elements[] = $this->auto_field($field, 'e2pdf-checkbox', array(
702 - 'top' => $top,
703 - 'properties' => array(
704 - 'width' => '15',
705 - 'height' => '15',
706 - 'value' => "%{$field['slug']}%",
707 - 'option' => $option['label']
978 + $elements[] = $this->auto_field(
979 + $field,
980 + array(
981 + 'type' => 'e2pdf-select',
982 + 'properties' => array(
983 + 'top' => '5',
984 + 'width' => '100%',
985 + 'height' => 'auto',
986 + 'options' => implode("\n", $options_tmp),
987 + 'value' => '%' . $field['slug'] . '%',
988 + ),
708 989 )
709 - ));
710 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
711 - 'top' => $top,
712 - 'left' => '20',
713 - 'properties' => array(
714 - 'value' => $option['label']
990 + );
991 + break;
992 + case 'checkbox':
993 + $elements[] = $this->auto_field(
994 + $field,
995 + array(
996 + 'type' => 'e2pdf-html',
997 + 'block' => true,
998 + 'float' => $float,
999 + 'properties' => array(
1000 + 'top' => '20',
1001 + 'left' => '20',
1002 + 'right' => '20',
1003 + 'width' => $width,
1004 + 'height' => 'auto',
1005 + 'value' => $field['label'],
1006 + ),
715 1007 )
716 - ));
1008 + );
1009 +
1010 + if (isset($field['config']['option']) && is_array($field['config']['option'])) {
1011 + foreach ($field['config']['option'] as $opt_key => $option) {
1012 + if (is_array($option)) {
1013 + $elements[] = $this->auto_field(
1014 + $field,
1015 + array(
1016 + 'type' => 'e2pdf-checkbox',
1017 + 'properties' => array(
1018 + 'top' => '5',
1019 + 'width' => 'auto',
1020 + 'height' => 'auto',
1021 + 'value' => '%' . $field['slug'] . '%',
1022 + 'option' => $option['value'],
1023 + ),
1024 + )
1025 + );
1026 + $elements[] = $this->auto_field(
1027 + $field,
1028 + array(
1029 + 'type' => 'e2pdf-html',
1030 + 'float' => true,
1031 + 'properties' => array(
1032 + 'left' => '5',
1033 + 'width' => '100%',
1034 + 'height' => 'auto',
1035 + 'value' => $option['label'],
1036 + ),
1037 + )
1038 + );
1039 + }
1040 + }
717 1041 }
718 - $top = $top + 20;
719 - }
720 - }
721 - break;
1042 + break;
1043 + case 'radio':
1044 + case 'toggle_switch':
1045 + $elements[] = $this->auto_field(
1046 + $field,
1047 + array(
1048 + 'type' => 'e2pdf-html',
1049 + 'block' => true,
1050 + 'float' => $float,
1051 + 'properties' => array(
1052 + 'top' => '20',
1053 + 'left' => '20',
1054 + 'right' => '20',
1055 + 'width' => $width,
1056 + 'height' => 'auto',
1057 + 'value' => $field['label'],
1058 + ),
1059 + )
1060 + );
722 1061
723 -
724 - case 'radio':
725 - case 'toggle_switch':
726 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
727 - 'top' => '20',
728 - 'left' => '20',
729 - 'right' => '20',
730 - 'block' => true,
731 - 'float' => $float,
732 - 'width' => $width,
733 - 'properties' => array(
734 - 'value' => $field['label'],
735 - )
736 - ));
737 -
738 - $top = 0;
739 - if (isset($field['config']['option']) && is_array($field['config']['option'])) {
740 - foreach ($field['config']['option'] as $opt_key => $option) {
741 - if (is_array($option)) {
742 - $elements[] = $this->auto_field($field, 'e2pdf-radio', array(
743 - 'top' => $top,
744 - 'properties' => array(
745 - 'width' => '15',
746 - 'height' => '15',
747 - 'value' => "%{$field['slug']}%",
748 - 'option' => $option['label'],
749 - 'group' => "group_" . $field['slug'],
750 - )
751 - ));
752 - $elements[] = $this->auto_field($field, 'e2pdf-html', array(
753 - 'top' => $top,
754 - 'left' => '20',
755 - 'properties' => array(
756 - 'value' => $option['label']
757 - )
758 - ));
1062 + if (isset($field['config']['option']) && is_array($field['config']['option'])) {
1063 + foreach ($field['config']['option'] as $opt_key => $option) {
1064 + if (is_array($option)) {
1065 + $elements[] = $this->auto_field(
1066 + $field,
1067 + array(
1068 + 'type' => 'e2pdf-radio',
1069 + 'properties' => array(
1070 + 'top' => '5',
1071 + 'width' => 'auto',
1072 + 'height' => 'auto',
1073 + 'value' => '%' . $field['slug'] . '%',
1074 + 'option' => $option['value'],
1075 + 'group' => '%' . $field['slug'] . '%',
1076 + ),
1077 + )
1078 + );
1079 + $elements[] = $this->auto_field(
1080 + $field,
1081 + array(
1082 + 'type' => 'e2pdf-html',
1083 + 'float' => true,
1084 + 'properties' => array(
1085 + 'left' => '5',
1086 + 'width' => '100%',
1087 + 'height' => 'auto',
1088 + 'value' => $option['label'],
1089 + ),
1090 + )
1091 + );
1092 + }
1093 + }
759 1094 }
760 - $top = $top + 20;
761 - }
1095 + break;
1096 + default:
1097 + /* Unsupported fields: section_break, live_gravatar, button */
1098 + break;
762 1099 }
763 - break;
764 - default:
765 - /*
766 - * Unsupported fields: section_break, live_gravatar, button
767 - */
768 - break;
1100 + }
769 1101 }
1102 +
1103 + $float = true;
770 1104 }
771 1105 }
772 -
773 - $float = true;
774 1106 }
775 1107 }
776 1108 }
777 -
778 1109 $response['page'] = array(
779 1110 'bottom' => '20',
780 1111 'top' => '20',
781 1112 );
782 -
783 1113 $response['elements'] = $elements;
784 1114 return $response;
785 1115 }
786 1116
787 - public function auto_field($field = false, $type = false, $options = array()) {
788 -
789 - if (!$field || !$type) {
1117 + /**
1118 + * Element generation for Auto PDF
1119 + * @param array $field - Field options
1120 + * @param array $element - Element options
1121 + * @return array - Element with modified options
1122 + */
1123 + public function auto_field($field = false, $element = array()) {
1124 + if (!$field) {
790 1125 return false;
791 1126 }
792 -
793 - $element = array(
794 - 'type' => $type,
795 - 'properties' => isset($options['properties']) ? $options['properties'] : array(),
796 - );
797 -
798 - $element['top'] = isset($options['top']) ? $options['top'] : '0';
799 - $element['left'] = isset($options['left']) ? $options['left'] : '0';
800 - $element['right'] = isset($options['right']) ? $options['right'] : '0';
801 - $element['block'] = isset($options['block']) ? $options['block'] : false;
802 - $element['float'] = isset($options['float']) ? $options['float'] : false;
803 -
804 - if (isset($options['width']) && $element['block']) {
805 - $element['width'] = $options['width'];
1127 + if (!isset($element['block'])) {
1128 + $element['block'] = false;
806 1129 }
1130 + if (!isset($element['float'])) {
1131 + $element['float'] = false;
1132 + }
807 1133 return $element;
808 1134 }
809 1135
810 1136 /**
@@ -810,10 +1136,11 @@
810 1136 /**
811 1137 * Load actions for this extension
812 1138 */
813 1139 public function load_actions() {
814 - add_action('caldera_forms_submit_complete', array($this, 'action_caldera_forms_submit_complete'), 99, 3);
815 - add_action('caldera_forms_mailer_complete', array($this, 'action_caldera_forms_mailer_complete'), 99, 3);
1140 + add_action('caldera_forms_mailer_complete', array($this, 'action_caldera_forms_mailer_complete'), 99, 0);
1141 + add_action('caldera_forms_mailer_failed', array($this, 'action_caldera_forms_mailer_complete'), 99, 0);
1142 + add_action('caldera_forms_submit_complete', array($this, 'action_caldera_forms_mailer_complete'), 99, 0);
816 1143 }
817 1144
818 1145 /**
819 1146 * Delete attachments that were sent by email
@@ -818,11 +1145,9 @@
818 1145 /**
819 1146 * Delete attachments that were sent by email
820 1147 */
821 1148 public function action_caldera_forms_mailer_complete() {
822 -
823 1149 $files = $this->helper->get('caldera_attachments');
824 -
825 1150 if (is_array($files) && !empty($files)) {
826 1151 foreach ($files as $key => $file) {
827 1152 $this->helper->delete_dir(dirname($file) . '/');
828 1153 }
@@ -830,14 +1155,70 @@
830 1155 }
831 1156 }
832 1157
833 1158 /**
1159 + * Remove Page Breaks
1160 + * @param array $form - Form
1161 + * @return array - Form
1162 + */
1163 + public function filter_caldera_forms_render_get_form($form) {
1164 + if (isset($form['layout_grid']['structure']) && $form['layout_grid']['structure']) {
1165 + $form['layout_grid']['structure'] = str_replace('#', '|', $form['layout_grid']['structure']);
1166 + }
1167 + return $form;
1168 + }
1169 +
1170 + /**
1171 + * Incorrectly rendered Checkbox Value
1172 + * @param array $entry - Field
1173 + * @param array $field_id - Field ID
1174 + * @param array $form - Current Form
1175 + * @param array $entry_id - Entry ID
1176 + * @return mixed - Fixed entry
1177 + */
1178 + public function filter_caldera_forms_get_field_entry($entry, $field_id, $form, $entry_id) {
1179 + if (class_exists('Caldera_Forms_Field_Util') && $field_id) {
1180 + if (Caldera_Forms_Field_Util::get_type($field_id, $form) == 'checkbox' && $entry && is_array($entry)) {
1181 + $last = array_pop($entry);
1182 + if ($last && is_array($last) && isset($last['value'])) {
1183 + $json = @json_decode($last['value'], ARRAY_A); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
1184 + if (!empty($json)) {
1185 + $entry = array(
1186 + '0' => array(
1187 + 'value' => $json,
1188 + ),
1189 + );
1190 + } else {
1191 + if (is_serialized($last['value'])) {
1192 + $serialized = $this->helper->load('convert')->unserialize($last['value']);
1193 + if (!empty($serialized)) {
1194 + $entry = array(
1195 + '0' => array(
1196 + 'value' => $serialized,
1197 + ),
1198 + );
1199 + }
1200 + }
1201 + }
1202 + }
1203 + }
1204 + }
1205 + return $entry;
1206 + }
1207 +
1208 + /**
1209 + * Disable conditions to render inside PDF
1210 + * @return boolean
1211 + */
1212 + public function filter_caldera_forms_pre_check_condition($result) {
1213 + return true;
1214 + }
1215 +
1216 + /**
834 1217 * Convert file and advanced_file field type to not rendered
835 - *
836 1218 * @param array $field - Field
837 - * @param array $form - Current form
838 - *
839 - @return array - Updated field
1219 + * @param array $form - Current form
1220 + * @return array - Updated field
840 1221 */
841 1222 public function filter_caldera_forms_render_get_field($field, $form) {
842 1223 if (isset($field['type']) && ($field['type'] == 'file' || $field['type'] == 'advanced_file')) {
843 1224 $field['config']['media_lib'] = false;
@@ -846,16 +1227,14 @@
846 1227 }
847 1228
848 1229 /**
849 1230 * Fix for {entry_id}
850 - *
851 1231 * @param array $form - Current form
852 1232 * @param int $entry_id - Current entry_id
853 - *
854 - @return array - Updated form
1233 + * @return array - Updated form
855 1234 */
856 1235 public function filter_caldera_forms_magic_form($form, $entry_id) {
857 - if (class_exists("Caldera_Forms") && $entry_id) {
1236 + if (class_exists('Caldera_Forms') && $entry_id) {
858 1237 Caldera_Forms::set_field_data('_entry_id', $entry_id, $form);
859 1238 }
860 1239 return $form;
861 1240 }
@@ -861,86 +1240,168 @@
861 1240 }
862 1241
863 1242 /**
864 1243 * Render file and advanced_file field types to url instead image and link
865 - *
866 - * @param string $value - Text value
1244 + * @param string $_value - NULL value to overide
1245 + * @param string $value - Value to replace shortcodes
867 1246 * @param array $matches - List of matches of magic tags
868 1247 * @param int $entry_id - Current entry
869 - * @param array $form - Current form
870 - *
1248 + * @param array $form - Current form
871 1249 * @return string - Updated value
872 1250 */
873 - public function filter_caldera_forms_do_field_magic_value($value, $matches, $entry_id, $form) {
874 -
875 - if (class_exists("Caldera_Forms") && class_exists("Caldera_Forms_Field_Util")) {
876 - if (isset($matches[1])) {
1251 + public function filter_caldera_forms_pre_do_field_magic($_value, $value, $matches, $entry_id, $form) {
1252 + if (class_exists('Caldera_Forms') && $value) {
1253 + if (!empty($matches[1])) {
877 1254 foreach ($matches[1] as $key => $tag) {
878 -
879 1255 $part_tags = explode(':', $tag);
880 1256 if (!empty($part_tags[1])) {
881 1257 $tag = $part_tags[0];
882 1258 }
883 1259 $entry = Caldera_Forms::get_slug_data($tag, $form, $entry_id);
884 -
885 1260 $field = false;
886 1261 if ($entry !== null) {
887 1262 $field = Caldera_Forms_Field_Util::get_field_by_slug($tag, $form);
888 1263 }
889 -
890 - if (Caldera_Forms_Field_Util::is_file_field($field, $form)) {
891 - if (filter_var($entry, FILTER_VALIDATE_URL)) {
892 - $value = $entry;
1264 + if ('html' === $this->get_field_type_by_slug($tag, $form)) {
1265 + $field = Caldera_Forms_Field_Util::get_field_by_slug($tag, $form);
1266 + $entry = Caldera_Forms::do_magic_tags(Caldera_Forms_Field_Util::get_default($field, $form));
1267 + }
1268 + if (!empty($field) && Caldera_Forms_Field_Util::is_file_field($field, $form)) {
1269 + if (is_string($entry) && Caldera_Forms_Field_Util::is_file_field($field, $form)) {
1270 + if (!filter_var($entry, FILTER_VALIDATE_URL)) {
1271 + $entry = '';
1272 + }
893 1273 }
894 - continue;
895 1274 }
1275 + if (is_string($entry)) {
1276 + if (!empty($field) && !empty($part_tags[1]) && $part_tags[1] == 'label') {
1277 + $_entry = @json_decode($entry); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
1278 + if (is_object($_entry)) {
1279 + $entry = $_entry;
1280 + }
1281 + } else {
1282 + $entry = $this->maybe_implode_opts($entry);
1283 + }
1284 + }
1285 + if (!empty($field) && !empty($part_tags[1]) && $part_tags[1] == 'label') {
1286 + if (!is_array($entry)) {
1287 + $entry = (array) $entry;
1288 + }
1289 + foreach ((array) $entry as $entry_key => $entry_line) {
1290 + if (!empty($field['config']['option'])) {
1291 + foreach ($field['config']['option'] as $option) {
1292 + if ($option['value'] == $entry_line) {
1293 + $entry[$entry_key] = $option['label'];
1294 + }
1295 + }
1296 + }
1297 + }
1298 + }
1299 + if (is_array($entry)) {
1300 + if (count($entry) === 1) {
1301 + $entry = array_shift($entry);
1302 + } elseif (count($entry) === 2) {
1303 + $entry = implode(', ', $entry);
1304 + } elseif (count($entry) > 2) {
1305 + $last = array_pop($entry);
1306 + $entry = implode(', ', $entry) . ', ' . $last;
1307 + } else {
1308 + $entry = null;
1309 + }
1310 + }
896 1311 $value = str_replace($matches[0][$key], $entry, $value);
897 1312 }
1313 + return apply_filters('caldera_forms_do_field_magic_value', $value, $matches, $entry_id, $form);
898 1314 }
899 1315 }
1316 + return $_value;
1317 + }
900 1318
1319 + /**
1320 + * Implode "opts" -- IE checkboxes stored as "opts" as needed
1321 + * @param string $value Value to check and possibly convert
1322 + * @return string
1323 + */
1324 + public function maybe_implode_opts($value) {
1325 + if (is_string($value) && '{"opt' == substr($value, 0, 5)) {
1326 + $_value = @json_decode($value); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
1327 + if (is_object($_value)) {
1328 + $value = implode(', ', (array) $_value);
1329 + }
1330 + } elseif (is_array($value)) {
1331 + $value = implode(', ', $value);
1332 + }
1333 + return $value;
1334 + }
901 1335
902 - return $value;
1336 + /**
1337 + * Get field type by slug for HTML field render
1338 + * @param string $slug Slug to check
1339 + * @param array $form Form to check
1340 + * @return boolean|mixed
1341 + */
1342 + public function get_field_type_by_slug($slug, $form) {
1343 + if (is_array($form) && isset($form['fields'])) {
1344 + foreach ($form['fields'] as $field_id => $field) {
1345 + if ($field['slug'] == $slug) {
1346 + if (isset($field['type'])) {
1347 + return $field['type'];
1348 + } else {
1349 + return false;
1350 + }
1351 + }
1352 + }
1353 + }
1354 + return false;
903 1355 }
904 1356
905 1357 /**
906 1358 * [e2pdf-view] shortcode fix
907 - *
1359 + * @param string $out - HTML Output
1360 + * @param array $form - Current form
1361 + * @return string - Updated HTML Output
1362 + */
1363 + public function filter_caldera_forms_render_form($out, $form) {
1364 + if (false === strpos($out, '[')) {
1365 + return $out;
1366 + }
1367 + $shortcode_tags = array(
1368 + 'e2pdf-view',
1369 + 'e2pdf-download',
1370 + );
1371 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $out, $matches);
1372 + $tagnames = array_intersect($shortcode_tags, $matches[1]);
1373 + if (!empty($tagnames)) {
1374 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $out, $shortcodes);
1375 + foreach ($shortcodes[0] as $key => $shortcode_value) {
1376 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1377 + $out = str_replace($shortcode_value, do_shortcode_tag($shortcode), $out);
1378 + }
1379 + }
1380 + return $out;
1381 + }
1382 +
1383 + /**
1384 + * [e2pdf-view] shortcode fix
908 1385 * @param array $out - Array with response
909 - * @param array $form - Current form
910 - *
911 - @return array - Updated response
1386 + * @param array $form - Current form
1387 + * @return array - Updated response
912 1388 */
913 1389 public function filter_caldera_forms_ajax_return($out, $form) {
914 -
915 1390 if (isset($out['html'])) {
916 -
917 1391 if (false === strpos($out['html'], '[')) {
918 1392 return $out;
919 1393 }
920 -
921 1394 $shortcode_tags = array(
922 - 'e2pdf-view'
1395 + 'e2pdf-view',
1396 + 'e2pdf-download',
923 1397 );
924 -
925 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $form['success'], $matches);
926 -
1398 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $out['html'], $matches);
927 1399 $tagnames = array_intersect($shortcode_tags, $matches[1]);
928 -
929 1400 if (!empty($tagnames)) {
930 - $pattern = get_shortcode_regex($tagnames);
931 -
932 - preg_match_all("/$pattern/", $out['html'], $shortcodes);
1401 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $out['html'], $shortcodes);
933 1402 foreach ($shortcodes[0] as $key => $shortcode_value) {
934 -
935 - $shortcode = array();
936 - $shortcode[1] = $shortcodes[1][$key];
937 - $shortcode[2] = $shortcodes[2][$key];
938 - $shortcode[3] = $shortcodes[3][$key];
939 - $shortcode[4] = $shortcodes[4][$key];
940 - $shortcode[5] = $shortcodes[5][$key];
941 - $shortcode[6] = $shortcodes[6][$key];
942 -
1403 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
943 1404 $out['html'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $out['html']);
944 1405 }
945 1406 }
946 1407 }
@@ -947,69 +1408,54 @@
947 1408
948 1409 return $out;
949 1410 }
950 1411
951 - public function action_caldera_forms_submit_complete($form, $referrer, $process_id) {
952 - global $form, $transdata;
953 -
954 - if (isset($form['success'])) {
955 -
956 - if (false === strpos($form['success'], '[')) {
957 - return;
958 - }
959 -
1412 + public function filter_success_message($message = '', $form = array(), $dataset_id = false) {
1413 + if (false !== strpos($message, '[')) {
960 1414 $shortcode_tags = array(
961 1415 'e2pdf-download',
962 1416 'e2pdf-save',
963 1417 'e2pdf-view',
964 - 'e2pdf-adobesign'
1418 + 'e2pdf-adobesign',
1419 + 'e2pdf-zapier',
965 1420 );
966 -
967 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $form['success'], $matches);
968 -
1421 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $message, $matches);
969 1422 $tagnames = array_intersect($shortcode_tags, $matches[1]);
970 -
971 1423 if (!empty($tagnames)) {
972 - $pattern = get_shortcode_regex($tagnames);
973 -
974 - preg_match_all("/$pattern/", $form['success'], $shortcodes);
1424 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $message, $shortcodes);
975 1425 foreach ($shortcodes[0] as $key => $shortcode_value) {
976 -
977 - $shortcode = array();
978 - $shortcode[1] = $shortcodes[1][$key];
979 - $shortcode[2] = $shortcodes[2][$key];
980 - $shortcode[3] = $shortcodes[3][$key];
981 - $shortcode[4] = $shortcodes[4][$key];
982 - $shortcode[5] = $shortcodes[5][$key];
983 - $shortcode[6] = $shortcodes[6][$key];
984 -
1426 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
985 1427 $atts = shortcode_parse_atts($shortcode[3]);
986 -
987 - if (!array_key_exists('dataset', $atts) && array_key_exists('id', $atts)) {
988 - $template = new Model_E2pdf_Template();
989 - $template->load($atts['id']);
990 - if ($template->get('extension') === 'caldera') {
991 - $dataset_id = isset($transdata['entry_id']) ? $transdata['entry_id'] : false;
992 - if ($dataset_id) {
993 - $atts['dataset'] = $dataset_id;
994 - $shortcode[3] .= " dataset=\"{$dataset_id}\"";
1428 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
1429 + } else {
1430 + if (!isset($atts['dataset']) && isset($atts['id'])) {
1431 + $template = new Model_E2pdf_Template();
1432 + $template->load($atts['id']);
1433 + if ($template->get('extension') === 'caldera') {
1434 + if ($dataset_id) {
1435 + $atts['dataset'] = $dataset_id;
1436 + $shortcode[3] .= ' dataset="' . $dataset_id . '"';
1437 + }
995 1438 }
996 1439 }
1440 + if (!isset($atts['apply'])) {
1441 + $shortcode[3] .= ' apply="true"';
1442 + }
1443 + if (!isset($atts['iframe_download'])) {
1444 + $shortcode[3] .= ' iframe_download="true"';
1445 + }
1446 + if ($shortcode[2] === 'e2pdf-view' || $shortcode[2] === 'e2pdf-download') {
1447 + $new_shortcode = $shortcode[2] . $shortcode[3];
1448 + $message = str_replace($shortcode_value, '[' . $new_shortcode . ']', $message);
1449 + } else {
1450 + $message = str_replace($shortcode_value, do_shortcode_tag($shortcode), $message);
1451 + }
997 1452 }
998 -
999 - if ($shortcode[2] === 'e2pdf-save' || $shortcode[2] === 'e2pdf-adobesign') {
1000 - $shortcode[3] .= " apply=\"true\"";
1001 - }
1002 -
1003 - if ($shortcode[2] === 'e2pdf-view') {
1004 - $new_shortcode = $shortcode[2] . $shortcode[3];
1005 - $form['success'] = str_replace($shortcode_value, "[{$new_shortcode}]", $form['success']);
1006 - } else {
1007 - $form['success'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $form['success']);
1008 - }
1009 1453 }
1010 1454 }
1011 1455 }
1456 +
1457 + return $message;
1012 1458 }
1013 1459
1014 1460 /**
1015 1461 * Load filters for this extension
@@ -1014,14 +1460,46 @@
1014 1460 /**
1015 1461 * Load filters for this extension
1016 1462 */
1017 1463 public function load_filters() {
1018 - add_filter('caldera_forms_mailer', array($this, 'filter_caldera_forms_mailer'), 10, 3);
1019 - add_filter('caldera_forms_ajax_return', array($this, 'filter_caldera_forms_ajax_return'), 10, 2);
1464 + /* 1.15.06 SendGripd Priority Fix (30 to 25) */
1465 + add_filter('caldera_forms_mailer', array($this, 'filter_caldera_forms_mailer'), 25, 4);
1466 + add_filter('caldera_forms_autoresponse_mail', array($this, 'filter_caldera_forms_mailer'), 30, 4);
1467 + add_filter('caldera_forms_render_notices', array($this, 'filter_caldera_forms_render_notices'), 99, 2);
1468 + add_filter('caldera_forms_ajax_return', array($this, 'filter_caldera_forms_ajax_return'), 30, 2);
1469 + add_filter('caldera_forms_render_form', array($this, 'filter_caldera_forms_render_form'), 30, 2);
1020 1470 }
1021 1471
1022 - public function filter_caldera_forms_mailer($mail, $data, $form) {
1472 + public function filter_caldera_forms_render_notices($notices, $form) {
1473 + if (class_exists('Caldera_Forms')) {
1474 + if (!empty($notices['success']['note'])) {
1475 + $dataset_id = false;
1476 + if (!empty($form['form_ajax'])) {
1477 + if (!empty($form['stage_form'])) {
1478 + if (function_exists('cf_form_connector_get_current_position')) {
1479 + $process_record = cf_form_connector_get_current_position();
1480 + if (!empty($process_record[$form['stage_form']]['entry_id'])) {
1481 + $dataset_id = $process_record[$form['stage_form']]['entry_id'];
1482 + }
1483 + }
1484 + } else {
1485 + $dataset_id = (int) Caldera_Forms::do_magic_tags('{entry_id}');
1486 + }
1487 + } else {
1488 + if (isset($_GET['cf_id']) && isset($_GET['cf_su'])) {
1489 + $dataset_id = absint($_GET['cf_id']);
1490 + }
1491 + }
1492 + $notices['success']['note'] = $this->filter_success_message($notices['success']['note'], $form, $dataset_id);
1493 + }
1494 + }
1495 + return $notices;
1496 + }
1023 1497
1498 + /**
1499 + * Filter to replace mail message E2Pdf shortcodes
1500 + */
1501 + public function filter_caldera_forms_mailer($mail, $data, $form, $entryid) {
1024 1502 if ($mail && isset($mail['message'])) {
1025 1503 if (false !== strpos($mail['message'], '[')) {
1026 1504 $shortcode_tags = array(
1027 1505 'e2pdf-download',
@@ -1026,52 +1504,54 @@
1026 1504 $shortcode_tags = array(
1027 1505 'e2pdf-download',
1028 1506 'e2pdf-save',
1029 1507 'e2pdf-attachment',
1030 - 'e2pdf-adobesign'
1508 + 'e2pdf-adobesign',
1509 + 'e2pdf-zapier',
1031 1510 );
1032 -
1033 1511 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $mail['message'], $matches);
1034 1512 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1035 -
1036 1513 if (!empty($tagnames)) {
1037 - $pattern = get_shortcode_regex($tagnames);
1038 -
1039 - preg_match_all("/$pattern/", $mail['message'], $shortcodes);
1040 -
1514 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $mail['message'], $shortcodes);
1041 1515 foreach ($shortcodes[0] as $key => $shortcode_value) {
1042 - $shortcode = array();
1043 - $shortcode[1] = $shortcodes[1][$key];
1044 - $shortcode[2] = $shortcodes[2][$key];
1045 - $shortcode[3] = $shortcodes[3][$key];
1046 - $shortcode[4] = $shortcodes[4][$key];
1047 - $shortcode[5] = $shortcodes[5][$key];
1048 - $shortcode[6] = $shortcodes[6][$key];
1049 -
1516 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1050 1517 $atts = shortcode_parse_atts($shortcode[3]);
1051 -
1052 - if (!array_key_exists('dataset', $atts) && array_key_exists('id', $atts)) {
1518 + if (!isset($atts['dataset']) && isset($atts['id'])) {
1053 1519 $template = new Model_E2pdf_Template();
1054 1520 $template->load($atts['id']);
1055 1521 if ($template->get('extension') === 'caldera') {
1056 - $dataset_id = isset($data['_entry_id']) ? $data['_entry_id'] : false;
1522 + $dataset_id = $entryid;
1523 + if (!$dataset_id) {
1524 + $dataset_id = isset($data['_entry_id']) ? $data['_entry_id'] : false;
1525 + }
1057 1526 if ($dataset_id) {
1058 1527 $atts['dataset'] = $dataset_id;
1059 - $shortcode[3] .= " dataset=\"{$dataset_id}\"";
1528 + $shortcode[3] .= ' dataset="' . $dataset_id . '"';
1060 1529 }
1061 1530 }
1062 1531 }
1063 -
1064 - if ($shortcode[2] === 'e2pdf-attachment' || $shortcode[2] === 'e2pdf-save' || $shortcode[2] === 'e2pdf-adobesign') {
1065 - $shortcode[3] .= " apply=\"true\"";
1532 + if (!isset($atts['apply'])) {
1533 + $shortcode[3] .= ' apply="true"';
1066 1534 }
1067 -
1068 - $shortcode[3] .= " filter=\"true\"";
1069 -
1070 - if ($shortcode[2] === 'e2pdf-attachment') {
1535 + if (!isset($atts['filter'])) {
1536 + $shortcode[3] .= ' filter="true"';
1537 + }
1538 + $file = false;
1539 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) {
1071 1540 $file = do_shortcode_tag($shortcode);
1072 1541 if ($file) {
1073 - $this->helper->add('caldera_attachments', $file);
1542 + $tmp = false;
1543 + if (substr($file, 0, 4) === 'tmp:') {
1544 + $file = substr($file, 4);
1545 + $tmp = true;
1546 + }
1547 + if ($shortcode[2] === 'e2pdf-save' || isset($atts['pdf'])) {
1548 + if ($tmp) {
1549 + $this->helper->add('caldera_attachments', $file);
1550 + }
1551 + } else {
1552 + $this->helper->add('caldera_attachments', $file);
1553 + }
1074 1554 $mail['attachments'][] = $file;
1075 1555 }
1076 1556 $mail['message'] = str_replace($shortcode_value, '', $mail['message']);
1077 1557 } else {
@@ -1080,25 +1560,20 @@
1080 1560 }
1081 1561 }
1082 1562 }
1083 1563 }
1084 -
1085 1564 return $mail;
1086 1565 }
1087 1566
1088 1567 /**
1089 1568 * Get styles for generating Map Field function
1090 - *
1091 1569 * @return array - List of css files to load
1092 1570 */
1093 - public function get_styles() {
1094 -
1571 + public function styles($item_id = false) {
1095 1572 $styles = array();
1096 1573 if (class_exists('Caldera_Forms_Render_Assets')) {
1097 1574 $url = Caldera_Forms_Render_Assets::make_url('caldera-forms-front', false);
1098 1575 $styles[] = $url;
1099 1576 }
1100 -
1101 1577 return $styles;
1102 1578 }
1103 -
1104 1579 }