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 +1124 -703 1.03.07 → 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 */
@@ -17,20 +16,14 @@
17 16
18 17 private $options;
19 18 private $info = array(
20 19 'key' => 'caldera',
21 - 'title' => 'Caldera Forms'
20 + 'title' => 'Caldera Forms',
22 21 );
23 22
24 - function __construct() {
25 - parent::__construct();
26 - }
27 -
28 23 /**
29 24 * Get info about extension
30 - *
31 25 * @param string $key - Key to get assigned extension info value
32 - *
33 26 * @return array|string - Extension Key and Title or Assigned extension info value
34 27 */
35 28 public function info($key = false) {
36 29 if ($key && isset($this->info[$key])) {
@@ -36,9 +29,9 @@
36 29 if ($key && isset($this->info[$key])) {
37 30 return $this->info[$key];
38 31 } else {
39 32 return array(
40 - $this->info['key'] => $this->info['title']
33 + $this->info['key'] => $this->info['title'],
41 34 );
42 35 }
43 36 }
44 37
@@ -43,18 +36,12 @@
43 36 }
44 37
45 38 /**
46 39 * Check if needed plugin active
47 - *
48 40 * @return bool - Activated/Not Activated plugin
49 41 */
50 42 public function active() {
51 -
52 - if (!function_exists('is_plugin_active')) {
53 - include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
54 - }
55 -
56 - 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')) {
57 44 return true;
58 45 }
59 46 return false;
60 47 }
@@ -60,12 +47,10 @@
60 47 }
61 48
62 49 /**
63 50 * Set option
64 - *
65 51 * @param string $key - Key of option
66 52 * @param string $value - Value of option
67 - *
68 53 * @return bool - Status of setting option
69 54 */
70 55 public function set($key, $value) {
71 56 if (!isset($this->options)) {
@@ -70,37 +55,105 @@
70 55 public function set($key, $value) {
71 56 if (!isset($this->options)) {
72 57 $this->options = new stdClass();
73 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 + }
74 110
75 - $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 + }
76 125 return true;
77 126 }
78 127
79 128 /**
80 129 * Get option by key
81 - *
82 130 * @param string $key - Key to get assigned option value
83 - *
84 131 * @return mixed
85 132 */
86 133 public function get($key) {
87 134 if (isset($this->options->$key)) {
88 135 $value = $this->options->$key;
89 - return $value;
90 136 } else {
91 - return false;
137 + switch ($key) {
138 + case 'args':
139 + $value = array();
140 + break;
141 + default:
142 + $value = false;
143 + break;
144 + }
92 145 }
146 + return $value;
93 147 }
94 148
95 149 /**
96 150 * Get items to work with
97 - *
98 151 * @return array() - List of available items
99 152 */
100 153 public function items() {
101 154 $content = array();
102 - if (class_exists("Caldera_Forms_Forms")) {
155 + if (class_exists('Caldera_Forms_Forms')) {
103 156 $forms = Caldera_Forms_Forms::get_forms(true);
104 157 if ($forms) {
105 158 foreach ($forms as $key => $value) {
106 159 $content[] = $this->item($value['ID']);
@@ -111,314 +164,488 @@
111 164 }
112 165
113 166 /**
114 167 * Get entries for export
115 - *
116 - * @param int $item - Form ID
168 + * @param int $item_id - Item ID
117 169 * @param string $name - Entries names
118 - *
119 170 * @return array() - Entries list
120 171 */
121 - public function datasets($item = false, $name = false) {
122 -
172 + public function datasets($item_id = false, $name = false) {
123 173 $datasets = array();
124 -
125 - if (class_exists("Caldera_Forms_Admin") && $item) {
126 -
127 - $form = Caldera_Forms_Admin::get_entries($item, 1, 9999999999);
128 -
174 + if (class_exists('Caldera_Forms_Admin') && $item_id) {
175 + $form = Caldera_Forms_Admin::get_entries($item_id, 1, 9999999999);
129 176 if ($form && isset($form['entries']) && is_array($form['entries'])) {
130 - foreach ($form['entries'] as $key => $dataset) {
131 - $this->set('item', $item);
132 - $this->set('dataset', $dataset['_entry_id']);
133 -
134 - $dataset_title = $this->render($name);
135 - if (!$dataset_title) {
136 - $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'];
137 183 }
138 184 $datasets[] = array(
139 - 'key' => $dataset['_entry_id'],
140 - 'value' => $dataset_title
185 + 'key' => $entry['_entry_id'],
186 + 'value' => $entry_title,
141 187 );
142 188 }
143 189 }
144 190 }
145 -
146 -
147 191 return $datasets;
148 192 }
149 193
150 194 /**
151 - * Get dataset
152 - *
153 - * @param int $dataset - Dataset ID
154 - *
155 - * @return object - Dataset
195 + * Get Dataset Actions
196 + * @param int $dataset_id - Dataset ID
197 + * @return object
156 198 */
157 - public function dataset($dataset = false) {
158 - $dataset = (int) $dataset;
159 -
160 - if (!$dataset) {
199 + public function get_dataset_actions($dataset_id = false) {
200 + $dataset_id = (int) $dataset_id;
201 + if (!$dataset_id) {
161 202 return false;
162 203 }
204 + $actions = new stdClass();
205 + $actions->view = false;
206 + $actions->delete = false;
207 + return $actions;
208 + }
163 209
164 - $data = new stdClass();
165 - $data->url = false;
166 -
167 - 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;
168 223 }
169 224
170 225 /**
171 226 * Get item
172 - *
173 - * @param string $item - Item ID
174 - *
227 + * @param string $item_id - Item ID
175 228 * @return object - Item
176 229 */
177 - public function item($item = false) {
178 -
179 - $form = new stdClass();
180 -
181 - if (!$item && $this->get('item')) {
182 - $item = $this->get('item');
230 + public function item($item_id = false) {
231 + if (!$item_id && $this->get('item')) {
232 + $item_id = $this->get('item');
183 233 }
184 -
185 - $caldera_form = false;
186 - if (class_exists("Caldera_Forms_Forms")) {
187 - $caldera_form = Caldera_Forms_Forms::get_form($item);
234 + $form = false;
235 + if (class_exists('Caldera_Forms_Forms')) {
236 + $form = Caldera_Forms_Forms::get_form($item_id);
188 237 }
189 -
190 - if ($caldera_form) {
191 - $form->id = (string) $caldera_form['ID'];
192 - $form->url = $this->helper->get_url(array('page' => 'caldera-forms', 'edit' => $caldera_form['ID']));
193 - $form->name = $caldera_form['name'];
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'] : '';
194 248 } else {
195 - $form->id = '';
196 - $form->url = 'javascript:void(0);';
197 - $form->name = '';
249 + $item->id = '';
250 + $item->url = '';
251 + $item->name = '';
198 252 }
199 - return $form;
253 + return $item;
200 254 }
201 255
202 256 /**
203 257 * Render value according to content
204 - *
205 258 * @param string $value - Content
206 259 * @param string $type - Type of rendering value
207 260 * @param array $field - Field details
208 - *
209 261 * @return string - Fully rendered value
210 262 */
211 - public function render($value, $type = false, $field = array()) {
212 -
213 - $value = $this->render_shortcodes($value, $type, $field);
214 - $value = $this->strip_shortcodes($value);
215 -
216 - if ($type === 'value' && isset($field['type']) && $field['type'] === 'e2pdf-checkbox' && isset($field['properties']['option'])) {
217 - $option = $this->render($field['properties']['option']);
218 - $options = explode(', ', $value);
219 - $option_options = explode(', ', $option);
220 - if (is_array($options) && is_array($option_options) && !array_diff($option_options, $options)) {
221 - return $option;
222 - } else {
223 - return "";
224 - }
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);
225 269 }
226 -
227 - if ($type === 'value') {
228 - $value = $this->convert_shortcodes($value, true);
229 - }
230 -
231 270 return $value;
232 271 }
233 272
234 273 /**
235 274 * Render shortcodes which available in this extension
236 - *
237 275 * @param string $value - Content
238 276 * @param string $type - Type of rendering value
239 277 * @param array $field - Field details
240 - *
241 278 * @return string - Value with rendered shortcodes
242 279 */
243 - public function render_shortcodes($value, $type = false, $field = array()) {
244 -
245 - $dataset = $this->get('dataset');
246 -
280 + public function render_shortcodes($value, $field = array()) {
281 + $element_id = isset($field['element_id']) ? $field['element_id'] : false;
247 282 if ($this->verify()) {
248 283 if (false !== strpos($value, '[')) {
249 -
250 - $shortcode_tags = array(
251 - 'e2pdf-format-number',
252 - 'e2pdf-format-date',
253 - 'e2pdf-format-output',
254 - );
255 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
256 - $tagnames = array_intersect($shortcode_tags, $matches[1]);
257 -
258 - if (!empty($tagnames)) {
259 -
260 - $pattern = get_shortcode_regex($tagnames);
261 - preg_match_all("/$pattern/", $value, $shortcodes);
262 - foreach ($shortcodes[0] as $key => $shortcode_value) {
263 - $shortcode = array();
264 - $shortcode[1] = $shortcodes[1][$key];
265 - $shortcode[2] = $shortcodes[2][$key];
266 - $shortcode[3] = $shortcodes[3][$key];
267 - $shortcode[4] = $shortcodes[4][$key];
268 - $shortcode[5] = $shortcodes[5][$key];
269 - $shortcode[6] = $shortcodes[6][$key];
270 -
271 - if (isset($shortcode['5'])) {
272 - if (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
273 - $sub_value = $this->render($shortcode['5'], $type);
274 - } else {
275 - $sub_value = $this->render($shortcode['5'], $type, $field);
276 - }
277 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]" . $sub_value . "[/" . $shortcode['2'] . "]", $value);
278 - }
279 - }
280 - }
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);
281 287 }
288 + $value = $this->helper->load('field')->do_shortcodes($value, $this, $field);
282 289
283 - $value = do_shortcode($value);
284 -
285 290 add_filter('caldera_forms_magic_form', array($this, 'filter_caldera_forms_magic_form'), 30, 2);
286 291 add_filter('caldera_forms_render_get_field', array($this, 'filter_caldera_forms_render_get_field'), 30, 2);
287 - 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);
288 295
289 - $value = Caldera_Forms::do_magic_tags($value, $dataset);
290 -
291 - if (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
292 - $esig = isset($field['properties']['esig']) && $field['properties']['esig'] ? true : false;
293 - if ($esig) {
294 - //process e-signature
295 - $value = "";
296 - } else {
297 - if (!$this->helper->load('image')->get_image($value)) {
298 - $value = $this->strip_shortcodes($value);
299 - if (
300 - $value &&
301 - trim($value) != "" &&
302 - extension_loaded('gd') &&
303 - function_exists('imagettftext')
304 - ) {
305 - if (isset($field['properties']['text_color']) && $field['properties']['text_color']) {
306 - $penColour = $this->helper->load('convert')->to_hex_color($field['properties']['text_color']);
307 - } else {
308 - $penColour = array(0x14, 0x53, 0x94);
309 - }
310 -
311 - $default_options = array(
312 - 'imageSize' => array(isset($field['width']) ? $field['width'] : '400', isset($field['height']) ? $field['height'] : '150'),
313 - 'bgColour' => 'transparent',
314 - 'penColour' => $penColour
315 - );
316 -
317 - $options = array();
318 - $options = array_merge($default_options, $options);
319 -
320 - $model_e2pdf_font = new Model_E2pdf_Font();
321 -
322 - $font = false;
323 - if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
324 - $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
325 - }
326 - if (!$font) {
327 - $font = $model_e2pdf_font->get_font_path('Noto Sans');
328 - }
329 -
330 - $size = 150;
331 - if (isset($field['properties']['text_font_size']) && $field['properties']['text_font_size']) {
332 - $size = $field['properties']['text_font_size'];
333 - }
334 -
335 - $model_e2pdf_signature = new Model_E2pdf_Signature();
336 - $value = $model_e2pdf_signature->ttf_signature($value, $size, $font, $options);
337 - } else {
338 - $value = "";
339 - }
340 - }
341 - }
342 - } else {
343 - $value = $this->convert_shortcodes($value);
296 + global $form;
297 + if ($this->get('cached_form')) {
298 + $form = $this->get('cached_form');
344 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 + );
345 309
346 310 remove_filter('caldera_forms_magic_form', array($this, 'filter_caldera_forms_magic_form'), 30);
347 311 remove_filter('caldera_forms_render_get_field', array($this, 'filter_caldera_forms_render_get_field'), 30);
348 - 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);
349 315 }
350 -
351 - 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 + );
352 319 }
353 320
354 321 /**
355 322 * Strip unused shortcodes
356 - *
357 323 * @param string $value - Content
358 - *
359 324 * @return string - Value with removed unused shortcodes
360 325 */
361 326 public function strip_shortcodes($value) {
362 - $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', "", $value);
363 - $value = preg_replace('~(?:%/?)[^/%]+/?%~s', "", $value);
327 + $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
328 + $value = preg_replace('~%[a-z0-9_]*%~', '', $value);
364 329 return $value;
365 330 }
366 331
367 - public function convert_shortcodes($value, $to = false) {
332 + // strip math
333 + public function strip_math($value, &$replacements) {
368 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 + }
344 +
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) {
369 353 if ($to) {
370 - $value = str_replace("&#91;", "[", $value);
371 - //$value = str_replace("&#37;", "%", $value);
354 + $value = stripslashes_deep($value);
355 + $value = str_replace('&#91;', '[', $value);
356 + if (!$html) {
357 + $value = wp_specialchars_decode($value, ENT_QUOTES);
358 + }
372 359 } else {
373 - $value = str_replace("[", "&#91;", $value);
374 - //$value = str_replace("%", "&#37;", $value);
360 + $value = str_replace('[', '&#91;', $value);
375 361 }
376 362 }
377 363 return $value;
378 364 }
379 365
366 + /**
367 + * Verify if item and dataset exists
368 + * @return bool - item and dataset exists
369 + */
380 370 public function verify() {
381 - $item = $this->get('item');
382 - $dataset = $this->get('dataset');
383 -
384 - if ($item && $dataset && class_exists('Caldera_Forms_Entry') && class_exists('Caldera_Forms_Forms') && class_exists("Caldera_Forms")) {
385 - $form = Caldera_Forms_Forms::get_form($item);
386 - if ($form && isset($form['_last_updated'])) {
387 - $entry = new Caldera_Forms_Entry($form, $dataset);
388 - if ($entry->found()) {
389 - return true;
390 - }
391 - }
371 + if ($this->get('cached_entry')) {
372 + return true;
392 373 }
393 374 return false;
394 375 }
395 376
396 - 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 + );
397 507
398 - $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 + );
399 554
400 - 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 + }
401 574
402 - $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 + }
403 582
404 - $form = Caldera_Forms_Forms::get_form($item);
405 -
406 - libxml_use_internal_errors(true);
407 - $dom = new DOMDocument();
408 - if (function_exists('mb_convert_encoding')) {
409 - $html = $dom->loadHTML(mb_convert_encoding($source, 'HTML-ENTITIES', 'UTF-8'));
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 + }
410 601 } else {
411 - $html = $dom->loadHTML('<?xml encoding="UTF-8">' . $source);
602 + $source = Caldera_Forms::render_form($this->get('item'));
412 603 }
413 - libxml_clear_errors();
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);
414 616
415 - if (!$html) {
416 - return __('Form could not be parsed due incorrect HTML', 'e2pdf');
417 - } else {
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 + }
418 631
419 - $xpath = new DomXPath($dom);
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 + }
420 646
647 + // remove by class
421 648 $remove_by_class = array(
422 649 'live-gravatar',
423 650 );
424 651 foreach ($remove_by_class as $key => $class) {
@@ -427,123 +654,127 @@
427 654 $element->parentNode->removeChild($element);
428 655 }
429 656 }
430 657
658 + // remove by tag
431 659 $remove_by_tag = array(
432 - 'script'
660 + 'script',
433 661 );
434 662 foreach ($remove_by_tag as $key => $tag) {
435 - $elements = $xpath->query("//{$tag}");
663 + $elements = $xpath->query('//' . $tag);
436 664 foreach ($elements as $element) {
437 665 $element->parentNode->removeChild($element);
438 666 }
439 667 }
440 668
441 - // Replace names
442 669 $fields = $xpath->query("//*[contains(@name, 'fld_')]");
443 670 foreach ($fields as $element) {
444 - if ($element->attributes->getNamedItem("type")->nodeValue == 'checkbox') {
445 - 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);
446 674 if (isset($matches[1])) {
447 675 $field_id = $matches[1];
448 676 }
449 677 } else {
450 - $field_id = $element->attributes->getNamedItem("name")->nodeValue;
678 + $field_id = $xml->get_node_value($element, 'name');
451 679 }
452 680
453 - // Modify Star field
454 - if ($element->attributes->getNamedItem("data-type")->nodeValue == 'star') {
455 - if ($element->attributes->getNamedItem("style")) {
456 - $element->attributes->getNamedItem("style")->nodeValue = '';
457 - }
681 + // modify rating field
682 + if ($xml->get_node_value($element, 'data-type') == 'star') {
683 + $xml->set_node_value($element, 'style', '');
458 684 }
459 685
460 - // Modify Range field
461 - if ($element->attributes->getNamedItem("type")->nodeValue == 'range') {
462 -
463 - if ($element->parentNode->attributes->getNamedItem("style")) {
464 - $element->parentNode->attributes->getNamedItem("style")->nodeValue = '';
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);
465 693 }
466 -
467 - if ($element->parentNode->attributes->getNamedItem("class")) {
468 - $element->parentNode->attributes->getNamedItem("class")->nodeValue = 'col-xs-12';
469 - }
470 -
471 - $next_element = $xpath->query(".//following-sibling::div[1]", $element->parentNode)->item(0);
472 - $next_element->parentNode->removeChild($next_element);
473 694 }
474 695
475 -
476 - $field = Caldera_Forms_Field_Util::get_field($field_id, $form);
477 - if ($field && isset($field['slug'])) {
478 - if ($element->attributes->getNamedItem("name")) {
479 - $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 + }
480 710 }
481 711 }
482 712 }
483 713
484 - // Convert Calculation Fields
714 + // calculation
485 715 $calculation_fields = $xpath->query("//input[@data-type='calculation']");
486 - foreach ($calculation_fields as $calculation_field) {
487 -
488 - if ($calculation_field->attributes->getNamedItem("type")) {
489 - $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);
490 722 }
723 + }
491 724
492 - $calculation_text = $xpath->query(".//h3", $calculation_field->parentNode)->item(0);
493 - $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');
494 729 }
495 730
496 - // Modify Toggle Fields
731 + // toggle
497 732 $toggle_gorups = $xpath->query("//*[contains(@class, 'cf-toggle-switch')]");
498 - foreach ($toggle_gorups as $toogle_group) {
499 - $toggle_elements = $xpath->query(".//*[contains(@class, 'cf-toggle-group-buttons')]//a", $toogle_group);
500 - foreach ($toggle_elements as $toggle_element) {
501 - $toggle_id = $toggle_element->attributes->getNamedItem("id")->nodeValue;
502 -
503 - $radio = $toggle_elements = $xpath->query(".//input[@id='{$toggle_id}']", $toogle_group)->item(0);
504 -
505 - if ($radio) {
506 - $radio_cloned = $radio->cloneNode(true);
507 -
508 - $attr = $dom->createAttribute('style');
509 - $attr->value = 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;';
510 - $radio_cloned->appendChild($attr);
511 -
512 - $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 + }
513 744 }
514 745 }
515 746 }
516 747
517 - // Modify Advanced File Upload
748 + // ajax uploader
518 749 $advanced_uploaders = $xpath->query("//*[contains(@class, 'cf-uploader-trigger')]");
519 - foreach ($advanced_uploaders as $advanced_uploader) {
520 - $input = $xpath->query(".//input[@type='hidden']", $advanced_uploader->parentNode)->item(0);
521 -
750 + foreach ($advanced_uploaders as $element) {
751 + $input = $xpath->query(".//input[@type='hidden']", $element->parentNode)->item(0);
522 752 $attr = $dom->createAttribute('style');
523 753 $attr->value = 'position: relative;';
524 - $advanced_uploader->appendChild($attr);
525 -
754 + $element->appendChild($attr);
526 755 if ($input) {
527 756 $input_cloned = $input->cloneNode(true);
528 - $attr = $dom->createAttribute('style');
529 - $attr->value = 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;';
530 - $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 + }
531 762
532 - if ($input_cloned->attributes->getNamedItem('type')) {
533 - $input_cloned->attributes->getNamedItem('type')->nodeValue = 'text';
534 - }
535 -
536 - $advanced_uploader->appendChild($input_cloned);
537 - }
763 + $textareas = $xpath->query('//textarea');
764 + foreach ($textareas as $element) {
765 + $xml->set_node_value($element, 'rows', '4');
538 766 }
539 767
540 - // Remove unecessary elements
541 768 $submit_buttons = $xpath->query("//input[@type='submit']");
542 - foreach ($submit_buttons as $submit_button) {
543 - $submit_button->parentNode->removeChild($submit_button);
769 + foreach ($submit_buttons as $element) {
770 + $element->parentNode->removeChild($element);
544 771 }
545 - 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 + }
546 777 }
547 778 }
548 779 return false;
549 780 }
@@ -549,317 +780,357 @@
549 780 }
550 781
551 782 /**
552 783 * Auto Generate of Template for this extension
553 - *
554 784 * @return array - List of elements
555 785 */
556 786 public function auto() {
557 787 $response = array();
558 788 $elements = array();
559 -
560 - $item = $this->get('item');
561 -
562 789 $fields = array();
563 -
564 - if (class_exists("Caldera_Forms_Forms")) {
565 - $form = Caldera_Forms_Forms::get_form($item);
566 - 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;
567 805 $fields = $form['fields'];
568 806 }
569 - }
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 + );
570 855
571 - if ($form && isset($form['layout_grid']['structure']) && isset($form['layout_grid']['fields'])) {
572 - $struct = explode('|', $form['layout_grid']['structure']);
573 - 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 + );
574 889
575 - $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 + );
576 922
577 - $columns = explode(':', $row);
578 - foreach ($columns as $column_num => $column) {
579 - $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 + );
580 955
581 - $width = 100 / (12 / $column) . "%";
956 + $options_tmp = array();
582 957
583 - foreach ($column_fields as $column_field_key) {
584 - if (isset($fields[$column_field_key])) {
585 - $field = $fields[$column_field_key];
586 -
587 - switch ($field['type']) {
588 - case 'text':
589 - case 'email':
590 - case 'phone_better':
591 - case 'phone_better':
592 - case 'number':
593 - case 'phone':
594 - case 'url':
595 - case 'date_picker':
596 - case 'color_picker':
597 - case 'credit_card_number':
598 - case 'credit_card_exp':
599 - case 'credit_card_cvc':
600 - case 'calculation':
601 - case 'range_slider':
602 - case 'star_rating':
603 - case 'utm':
604 - case 'file':
605 - case 'advanced_file':
606 - $elements[] = $this->auto_field($field, array(
607 - 'type' => 'e2pdf-html',
608 - 'block' => true,
609 - 'float' => $float,
610 - 'properties' => array(
611 - 'top' => '20',
612 - 'left' => '20',
613 - 'right' => '20',
614 - 'width' => $width,
615 - 'height' => 'auto',
616 - 'value' => $field['label'],
617 - )
618 - ));
619 -
620 - $elements[] = $this->auto_field($field, array(
621 - 'type' => 'e2pdf-input',
622 - 'properties' => array(
623 - 'top' => '5',
624 - 'width' => '100%',
625 - 'height' => 'auto',
626 - 'value' => "%{$field['slug']}%",
627 - )
628 - ));
629 - break;
630 -
631 - case 'paragraph':
632 -
633 - $elements[] = $this->auto_field($field, array(
634 - 'type' => 'e2pdf-html',
635 - 'block' => true,
636 - 'float' => $float,
637 - 'properties' => array(
638 - 'top' => '20',
639 - 'left' => '20',
640 - 'right' => '20',
641 - 'width' => $width,
642 - 'height' => 'auto',
643 - 'value' => $field['label'],
644 - )
645 - ));
646 -
647 - $elements[] = $this->auto_field($field, array(
648 - 'type' => 'e2pdf-textarea',
649 - 'properties' => array(
650 - 'top' => '5',
651 - 'width' => '100%',
652 - 'height' => '150',
653 - 'value' => "%{$field['slug']}%",
654 - )
655 - ));
656 - break;
657 -
658 - case 'wysiwyg':
659 - case 'html':
660 - case 'summary':
661 - $elements[] = $this->auto_field($field, array(
662 - 'type' => 'e2pdf-html',
663 - 'block' => true,
664 - 'float' => $float,
665 - 'properties' => array(
666 - 'top' => '20',
667 - 'left' => '20',
668 - 'right' => '20',
669 - 'width' => $width,
670 - 'height' => 'auto',
671 - 'value' => $field['label'],
672 - )
673 - ));
674 -
675 - $elements[] = $this->auto_field($field, array(
676 - 'type' => 'e2pdf-html',
677 - 'properties' => array(
678 - 'top' => '5',
679 - 'width' => '100%',
680 - 'height' => '150',
681 - 'value' => "%{$field['slug']}%",
682 - )
683 - ));
684 - break;
685 -
686 - case 'dropdown':
687 - case 'filtered_select2':
688 - case 'states':
689 - $elements[] = $this->auto_field($field, array(
690 - 'type' => 'e2pdf-html',
691 - 'block' => true,
692 - 'float' => $float,
693 - 'properties' => array(
694 - 'top' => '20',
695 - 'left' => '20',
696 - 'right' => '20',
697 - 'width' => $width,
698 - 'height' => 'auto',
699 - 'value' => $field['label'],
700 - )
701 - ));
702 -
703 - $options_tmp = array();
704 -
705 - if (isset($field['config']['option']) && is_array($field['config']['option'])) {
706 - foreach ($field['config']['option'] as $opt_key => $option) {
707 - if (is_array($option)) {
708 - $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 + }
709 964 }
710 - }
711 - }
712 965
713 - if ($field['type'] == 'states' && defined("CFCORE_PATH")) {
714 - if (file_exists(CFCORE_PATH . "fields/states/field.php")) {
715 - $contents = file_get_contents(CFCORE_PATH . "fields/states/field.php");
716 - preg_match_all('/<option value="(.*?)">(.*?)<\/option>/', $contents, $matches);
717 - if (isset($matches[1])) {
718 - foreach ($matches[1] as $state) {
719 - $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 + }
720 975 }
721 976 }
722 - }
723 - }
724 977
725 - $elements[] = $this->auto_field($field, array(
726 - 'type' => 'e2pdf-select',
727 - 'properties' => array(
728 - 'top' => '5',
729 - 'width' => '100%',
730 - 'height' => 'auto',
731 - 'options' => implode("\n", $options_tmp),
732 - 'value' => "%{$field['slug']}%",
733 - )
734 - ));
735 - break;
736 -
737 - case 'checkbox':
738 - $elements[] = $this->auto_field($field, array(
739 - 'type' => 'e2pdf-html',
740 - 'block' => true,
741 - 'float' => $float,
742 - 'properties' => array(
743 - 'top' => '20',
744 - 'left' => '20',
745 - 'right' => '20',
746 - 'width' => $width,
747 - 'height' => 'auto',
748 - 'value' => $field['label'],
749 - )
750 - ));
751 -
752 -
753 - if (isset($field['config']['option']) && is_array($field['config']['option'])) {
754 - foreach ($field['config']['option'] as $opt_key => $option) {
755 - if (is_array($option)) {
756 - $elements[] = $this->auto_field($field, array(
757 - 'type' => 'e2pdf-checkbox',
758 - 'properties' => array(
759 - 'top' => '5',
760 - 'width' => 'auto',
761 - 'height' => 'auto',
762 - 'value' => "%{$field['slug']}%",
763 - '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 + ),
764 989 )
765 - ));
766 - $elements[] = $this->auto_field($field, array(
767 - 'type' => 'e2pdf-html',
768 - 'float' => true,
769 - 'properties' => array(
770 - 'left' => '5',
771 - 'width' => '100%',
772 - 'height' => 'auto',
773 - '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 + ),
774 1007 )
775 - ));
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 + }
776 1041 }
777 - }
778 - }
779 - 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 + );
780 1061
781 - case 'radio':
782 - case 'toggle_switch':
783 - $elements[] = $this->auto_field($field, array(
784 - 'type' => 'e2pdf-html',
785 - 'block' => true,
786 - 'float' => $float,
787 - 'properties' => array(
788 - 'top' => '20',
789 - 'left' => '20',
790 - 'right' => '20',
791 - 'width' => $width,
792 - 'height' => 'auto',
793 - 'value' => $field['label'],
794 - )
795 - ));
796 -
797 - if (isset($field['config']['option']) && is_array($field['config']['option'])) {
798 - foreach ($field['config']['option'] as $opt_key => $option) {
799 - if (is_array($option)) {
800 - $elements[] = $this->auto_field($field, array(
801 - 'type' => 'e2pdf-radio',
802 - 'properties' => array(
803 - 'top' => '5',
804 - 'width' => 'auto',
805 - 'height' => 'auto',
806 - 'value' => "%{$field['slug']}%",
807 - 'option' => $option['label'],
808 - 'group' => "group_" . $field['slug'],
809 - )
810 - ));
811 - $elements[] = $this->auto_field($field, array(
812 - 'type' => 'e2pdf-html',
813 - 'float' => true,
814 - 'properties' => array(
815 - 'left' => '5',
816 - 'width' => '100%',
817 - 'height' => 'auto',
818 - 'value' => $option['label']
819 - )
820 - ));
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 + }
821 1094 }
822 - }
1095 + break;
1096 + default:
1097 + /* Unsupported fields: section_break, live_gravatar, button */
1098 + break;
823 1099 }
824 - break;
825 - default:
826 - /*
827 - * Unsupported fields: section_break, live_gravatar, button
828 - */
829 - break;
1100 + }
830 1101 }
1102 +
1103 + $float = true;
831 1104 }
832 1105 }
833 -
834 - $float = true;
835 1106 }
836 1107 }
837 1108 }
838 -
839 1109 $response['page'] = array(
840 1110 'bottom' => '20',
841 1111 'top' => '20',
842 1112 );
843 -
844 1113 $response['elements'] = $elements;
845 1114 return $response;
846 1115 }
847 1116
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 + */
848 1123 public function auto_field($field = false, $element = array()) {
849 -
850 1124 if (!$field) {
851 1125 return false;
852 1126 }
853 -
854 1127 if (!isset($element['block'])) {
855 1128 $element['block'] = false;
856 1129 }
857 -
858 1130 if (!isset($element['float'])) {
859 1131 $element['float'] = false;
860 1132 }
861 -
862 1133 return $element;
863 1134 }
864 1135
865 1136 /**
@@ -865,10 +1136,11 @@
865 1136 /**
866 1137 * Load actions for this extension
867 1138 */
868 1139 public function load_actions() {
869 - add_action('caldera_forms_submit_complete', array($this, 'action_caldera_forms_submit_complete'), 99, 3);
870 - 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);
871 1143 }
872 1144
873 1145 /**
874 1146 * Delete attachments that were sent by email
@@ -873,11 +1145,9 @@
873 1145 /**
874 1146 * Delete attachments that were sent by email
875 1147 */
876 1148 public function action_caldera_forms_mailer_complete() {
877 -
878 1149 $files = $this->helper->get('caldera_attachments');
879 -
880 1150 if (is_array($files) && !empty($files)) {
881 1151 foreach ($files as $key => $file) {
882 1152 $this->helper->delete_dir(dirname($file) . '/');
883 1153 }
@@ -885,14 +1155,70 @@
885 1155 }
886 1156 }
887 1157
888 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 + /**
889 1217 * Convert file and advanced_file field type to not rendered
890 - *
891 1218 * @param array $field - Field
892 - * @param array $form - Current form
893 - *
894 - @return array - Updated field
1219 + * @param array $form - Current form
1220 + * @return array - Updated field
895 1221 */
896 1222 public function filter_caldera_forms_render_get_field($field, $form) {
897 1223 if (isset($field['type']) && ($field['type'] == 'file' || $field['type'] == 'advanced_file')) {
898 1224 $field['config']['media_lib'] = false;
@@ -901,16 +1227,14 @@
901 1227 }
902 1228
903 1229 /**
904 1230 * Fix for {entry_id}
905 - *
906 1231 * @param array $form - Current form
907 1232 * @param int $entry_id - Current entry_id
908 - *
909 - @return array - Updated form
1233 + * @return array - Updated form
910 1234 */
911 1235 public function filter_caldera_forms_magic_form($form, $entry_id) {
912 - if (class_exists("Caldera_Forms") && $entry_id) {
1236 + if (class_exists('Caldera_Forms') && $entry_id) {
913 1237 Caldera_Forms::set_field_data('_entry_id', $entry_id, $form);
914 1238 }
915 1239 return $form;
916 1240 }
@@ -916,85 +1240,168 @@
916 1240 }
917 1241
918 1242 /**
919 1243 * Render file and advanced_file field types to url instead image and link
920 - *
921 - * @param string $value - Text value
1244 + * @param string $_value - NULL value to overide
1245 + * @param string $value - Value to replace shortcodes
922 1246 * @param array $matches - List of matches of magic tags
923 1247 * @param int $entry_id - Current entry
924 - * @param array $form - Current form
925 - *
1248 + * @param array $form - Current form
926 1249 * @return string - Updated value
927 1250 */
928 - public function filter_caldera_forms_do_field_magic_value($value, $matches, $entry_id, $form) {
929 -
930 - if (class_exists("Caldera_Forms") && class_exists("Caldera_Forms_Field_Util")) {
931 - 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])) {
932 1254 foreach ($matches[1] as $key => $tag) {
933 -
934 1255 $part_tags = explode(':', $tag);
935 1256 if (!empty($part_tags[1])) {
936 1257 $tag = $part_tags[0];
937 1258 }
938 1259 $entry = Caldera_Forms::get_slug_data($tag, $form, $entry_id);
939 -
940 1260 $field = false;
941 1261 if ($entry !== null) {
942 1262 $field = Caldera_Forms_Field_Util::get_field_by_slug($tag, $form);
943 1263 }
944 -
945 - if (Caldera_Forms_Field_Util::is_file_field($field, $form)) {
946 - if (filter_var($entry, FILTER_VALIDATE_URL)) {
947 - $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 + }
948 1273 }
949 - continue;
950 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 + }
951 1311 $value = str_replace($matches[0][$key], $entry, $value);
952 1312 }
1313 + return apply_filters('caldera_forms_do_field_magic_value', $value, $matches, $entry_id, $form);
953 1314 }
954 1315 }
1316 + return $_value;
1317 + }
955 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 + }
956 1333 return $value;
957 1334 }
958 1335
959 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;
1355 + }
1356 +
1357 + /**
960 1358 * [e2pdf-view] shortcode fix
961 - *
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
962 1385 * @param array $out - Array with response
963 - * @param array $form - Current form
964 - *
965 - @return array - Updated response
1386 + * @param array $form - Current form
1387 + * @return array - Updated response
966 1388 */
967 1389 public function filter_caldera_forms_ajax_return($out, $form) {
968 -
969 1390 if (isset($out['html'])) {
970 -
971 1391 if (false === strpos($out['html'], '[')) {
972 1392 return $out;
973 1393 }
974 -
975 1394 $shortcode_tags = array(
976 - 'e2pdf-view'
1395 + 'e2pdf-view',
1396 + 'e2pdf-download',
977 1397 );
978 -
979 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $form['success'], $matches);
980 -
1398 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $out['html'], $matches);
981 1399 $tagnames = array_intersect($shortcode_tags, $matches[1]);
982 -
983 1400 if (!empty($tagnames)) {
984 - $pattern = get_shortcode_regex($tagnames);
985 -
986 - preg_match_all("/$pattern/", $out['html'], $shortcodes);
1401 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $out['html'], $shortcodes);
987 1402 foreach ($shortcodes[0] as $key => $shortcode_value) {
988 -
989 - $shortcode = array();
990 - $shortcode[1] = $shortcodes[1][$key];
991 - $shortcode[2] = $shortcodes[2][$key];
992 - $shortcode[3] = $shortcodes[3][$key];
993 - $shortcode[4] = $shortcodes[4][$key];
994 - $shortcode[5] = $shortcodes[5][$key];
995 - $shortcode[6] = $shortcodes[6][$key];
996 -
1403 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
997 1404 $out['html'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $out['html']);
998 1405 }
999 1406 }
1000 1407 }
@@ -1001,69 +1408,54 @@
1001 1408
1002 1409 return $out;
1003 1410 }
1004 1411
1005 - public function action_caldera_forms_submit_complete($form, $referrer, $process_id) {
1006 - global $form, $transdata;
1007 -
1008 - if (isset($form['success'])) {
1009 -
1010 - if (false === strpos($form['success'], '[')) {
1011 - return;
1012 - }
1013 -
1412 + public function filter_success_message($message = '', $form = array(), $dataset_id = false) {
1413 + if (false !== strpos($message, '[')) {
1014 1414 $shortcode_tags = array(
1015 1415 'e2pdf-download',
1016 1416 'e2pdf-save',
1017 1417 'e2pdf-view',
1018 - 'e2pdf-adobesign'
1418 + 'e2pdf-adobesign',
1419 + 'e2pdf-zapier',
1019 1420 );
1020 -
1021 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $form['success'], $matches);
1022 -
1421 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $message, $matches);
1023 1422 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1024 -
1025 1423 if (!empty($tagnames)) {
1026 - $pattern = get_shortcode_regex($tagnames);
1027 -
1028 - preg_match_all("/$pattern/", $form['success'], $shortcodes);
1424 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $message, $shortcodes);
1029 1425 foreach ($shortcodes[0] as $key => $shortcode_value) {
1030 -
1031 - $shortcode = array();
1032 - $shortcode[1] = $shortcodes[1][$key];
1033 - $shortcode[2] = $shortcodes[2][$key];
1034 - $shortcode[3] = $shortcodes[3][$key];
1035 - $shortcode[4] = $shortcodes[4][$key];
1036 - $shortcode[5] = $shortcodes[5][$key];
1037 - $shortcode[6] = $shortcodes[6][$key];
1038 -
1426 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1039 1427 $atts = shortcode_parse_atts($shortcode[3]);
1040 -
1041 - if (!array_key_exists('dataset', $atts) && array_key_exists('id', $atts)) {
1042 - $template = new Model_E2pdf_Template();
1043 - $template->load($atts['id']);
1044 - if ($template->get('extension') === 'caldera') {
1045 - $dataset_id = isset($transdata['entry_id']) ? $transdata['entry_id'] : false;
1046 - if ($dataset_id) {
1047 - $atts['dataset'] = $dataset_id;
1048 - $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 + }
1049 1438 }
1050 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 + }
1051 1452 }
1052 -
1053 - if ($shortcode[2] === 'e2pdf-save' || $shortcode[2] === 'e2pdf-adobesign') {
1054 - $shortcode[3] .= " apply=\"true\"";
1055 - }
1056 -
1057 - if ($shortcode[2] === 'e2pdf-view') {
1058 - $new_shortcode = $shortcode[2] . $shortcode[3];
1059 - $form['success'] = str_replace($shortcode_value, "[{$new_shortcode}]", $form['success']);
1060 - } else {
1061 - $form['success'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $form['success']);
1062 - }
1063 1453 }
1064 1454 }
1065 1455 }
1456 +
1457 + return $message;
1066 1458 }
1067 1459
1068 1460 /**
1069 1461 * Load filters for this extension
@@ -1068,14 +1460,46 @@
1068 1460 /**
1069 1461 * Load filters for this extension
1070 1462 */
1071 1463 public function load_filters() {
1072 - add_filter('caldera_forms_mailer', array($this, 'filter_caldera_forms_mailer'), 10, 3);
1073 - 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);
1074 1470 }
1075 1471
1076 - 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 + }
1077 1497
1498 + /**
1499 + * Filter to replace mail message E2Pdf shortcodes
1500 + */
1501 + public function filter_caldera_forms_mailer($mail, $data, $form, $entryid) {
1078 1502 if ($mail && isset($mail['message'])) {
1079 1503 if (false !== strpos($mail['message'], '[')) {
1080 1504 $shortcode_tags = array(
1081 1505 'e2pdf-download',
@@ -1080,52 +1504,54 @@
1080 1504 $shortcode_tags = array(
1081 1505 'e2pdf-download',
1082 1506 'e2pdf-save',
1083 1507 'e2pdf-attachment',
1084 - 'e2pdf-adobesign'
1508 + 'e2pdf-adobesign',
1509 + 'e2pdf-zapier',
1085 1510 );
1086 -
1087 1511 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $mail['message'], $matches);
1088 1512 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1089 -
1090 1513 if (!empty($tagnames)) {
1091 - $pattern = get_shortcode_regex($tagnames);
1092 -
1093 - preg_match_all("/$pattern/", $mail['message'], $shortcodes);
1094 -
1514 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $mail['message'], $shortcodes);
1095 1515 foreach ($shortcodes[0] as $key => $shortcode_value) {
1096 - $shortcode = array();
1097 - $shortcode[1] = $shortcodes[1][$key];
1098 - $shortcode[2] = $shortcodes[2][$key];
1099 - $shortcode[3] = $shortcodes[3][$key];
1100 - $shortcode[4] = $shortcodes[4][$key];
1101 - $shortcode[5] = $shortcodes[5][$key];
1102 - $shortcode[6] = $shortcodes[6][$key];
1103 -
1516 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1104 1517 $atts = shortcode_parse_atts($shortcode[3]);
1105 -
1106 - if (!array_key_exists('dataset', $atts) && array_key_exists('id', $atts)) {
1518 + if (!isset($atts['dataset']) && isset($atts['id'])) {
1107 1519 $template = new Model_E2pdf_Template();
1108 1520 $template->load($atts['id']);
1109 1521 if ($template->get('extension') === 'caldera') {
1110 - $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 + }
1111 1526 if ($dataset_id) {
1112 1527 $atts['dataset'] = $dataset_id;
1113 - $shortcode[3] .= " dataset=\"{$dataset_id}\"";
1528 + $shortcode[3] .= ' dataset="' . $dataset_id . '"';
1114 1529 }
1115 1530 }
1116 1531 }
1117 -
1118 - if ($shortcode[2] === 'e2pdf-attachment' || $shortcode[2] === 'e2pdf-save' || $shortcode[2] === 'e2pdf-adobesign') {
1119 - $shortcode[3] .= " apply=\"true\"";
1532 + if (!isset($atts['apply'])) {
1533 + $shortcode[3] .= ' apply="true"';
1120 1534 }
1121 -
1122 - $shortcode[3] .= " filter=\"true\"";
1123 -
1124 - 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)) {
1125 1540 $file = do_shortcode_tag($shortcode);
1126 1541 if ($file) {
1127 - $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 + }
1128 1554 $mail['attachments'][] = $file;
1129 1555 }
1130 1556 $mail['message'] = str_replace($shortcode_value, '', $mail['message']);
1131 1557 } else {
@@ -1134,25 +1560,20 @@
1134 1560 }
1135 1561 }
1136 1562 }
1137 1563 }
1138 -
1139 1564 return $mail;
1140 1565 }
1141 1566
1142 1567 /**
1143 1568 * Get styles for generating Map Field function
1144 - *
1145 1569 * @return array - List of css files to load
1146 1570 */
1147 - public function styles() {
1148 -
1571 + public function styles($item_id = false) {
1149 1572 $styles = array();
1150 1573 if (class_exists('Caldera_Forms_Render_Assets')) {
1151 1574 $url = Caldera_Forms_Render_Assets::make_url('caldera-forms-front', false);
1152 1575 $styles[] = $url;
1153 1576 }
1154 -
1155 1577 return $styles;
1156 1578 }
1157 -
1158 1579 }