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 +918 -763 1.04.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,384 +164,265 @@
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;
234 + $form = false;
186 235 if (class_exists('Caldera_Forms_Forms')) {
187 - $caldera_form = Caldera_Forms_Forms::get_form($item);
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 296 global $form;
290 - $tmp_form = false;
291 - if ($form && isset($form['ID'])) {
292 - $tmp_form = $form;
293 - if ($form['ID'] != $this->get('item')) {
294 - $form = Caldera_Forms_Forms::get_form($this->get('item'));
295 - }
296 - if (!empty($form['is_connected_form'])) {
297 - $form['processors']['_connected_form'] = array(
298 - 'type' => 'form-connector',
299 - 'runtimes' => array(
300 - 'insert' => true
301 - ),
302 - 'config' => array()
303 - );
304 -
305 - // setup fields
306 - $form_fields = array();
307 - // get meta
308 - $meta = Caldera_Forms::get_entry_meta((int) $dataset, $form);
309 -
310 - if (!empty($meta['form-connector']['data']['_connected_form']['entry']['form']['meta_value'])) {
311 - foreach ((array) $meta['form-connector']['data']['_connected_form']['entry']['form']['meta_value'] as $form_meta) {
312 - $form_fields = array_merge($form_fields, $form_meta);
313 - }
314 - }
315 -
316 - if (!empty($form['condition_points']['forms'])) {
317 - $form['fields'] = array();
318 - foreach ($form['condition_points']['forms'] as $connected_id => $connected_form) {
319 - if (!empty($form_fields[$connected_id]) && !empty($connected_form['fields'])) {
320 - $form['fields'] = array_merge($form['fields'], $connected_form['fields']);
321 - }
322 - }
323 -
324 - if (function_exists('cf_form_connector_setup_processors_meta')) {
325 - add_filter('caldera_forms_get_entry_detail', 'cf_form_connector_setup_processors_meta', 10, 3);
326 - }
327 - }
328 - }
297 + if ($this->get('cached_form')) {
298 + $form = $this->get('cached_form');
329 299 }
330 -
331 - $value = Caldera_Forms::do_magic_tags($value, $dataset);
332 -
333 - if ($tmp_form) {
334 - $form = $tmp_form;
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');
335 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 + );
336 309
337 - if (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
338 - $esig = isset($field['properties']['esig']) && $field['properties']['esig'] ? true : false;
339 - if ($esig) {
340 - //process e-signature
341 - $value = "";
342 - } else {
343 - if (!$this->helper->load('image')->get_image($value)) {
344 - $value = $this->strip_shortcodes($value);
345 - if (
346 - $value &&
347 - trim($value) != "" &&
348 - extension_loaded('gd') &&
349 - function_exists('imagettftext')
350 - ) {
351 - if (isset($field['properties']['text_color']) && $field['properties']['text_color']) {
352 - $penColour = $this->helper->load('convert')->to_hex_color($field['properties']['text_color']);
353 - } else {
354 - $penColour = array(0x14, 0x53, 0x94);
355 - }
356 -
357 - $default_options = array(
358 - 'imageSize' => array(isset($field['width']) ? $field['width'] : '400', isset($field['height']) ? $field['height'] : '150'),
359 - 'bgColour' => 'transparent',
360 - 'penColour' => $penColour
361 - );
362 -
363 - $options = array();
364 - $options = array_merge($default_options, $options);
365 -
366 - $model_e2pdf_font = new Model_E2pdf_Font();
367 -
368 - $font = false;
369 - if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
370 - $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
371 - }
372 - if (!$font) {
373 - $font = $model_e2pdf_font->get_font_path('Noto Sans');
374 - }
375 -
376 - $size = 150;
377 - if (isset($field['properties']['text_font_size']) && $field['properties']['text_font_size']) {
378 - $size = $field['properties']['text_font_size'];
379 - }
380 -
381 - $model_e2pdf_signature = new Model_E2pdf_Signature();
382 - $value = $model_e2pdf_signature->ttf_signature($value, $size, $font, $options);
383 - } else {
384 - $value = "";
385 - }
386 - }
387 - }
388 - } else {
389 - $value = $this->convert_shortcodes($value);
390 - }
391 -
392 310 remove_filter('caldera_forms_magic_form', array($this, 'filter_caldera_forms_magic_form'), 30);
393 311 remove_filter('caldera_forms_render_get_field', array($this, 'filter_caldera_forms_render_get_field'), 30);
394 - 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);
395 315 }
396 -
397 - 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 + );
398 319 }
399 320
400 321 /**
401 322 * Strip unused shortcodes
402 - *
403 323 * @param string $value - Content
404 - *
405 324 * @return string - Value with removed unused shortcodes
406 325 */
407 326 public function strip_shortcodes($value) {
408 - $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', "", $value);
409 - $value = preg_replace('~(?:%/?)[^/%]+/?%~s', "", $value);
327 + $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
328 + $value = preg_replace('~%[a-z0-9_]*%~', '', $value);
410 329 return $value;
411 330 }
412 331
413 - public function convert_shortcodes($value, $to = false) {
332 + // strip math
333 + public function strip_math($value, &$replacements) {
414 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) {
415 353 if ($to) {
416 - $value = str_replace("&#91;", "[", $value);
417 - //$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 + }
418 359 } else {
419 - $value = str_replace("[", "&#91;", $value);
420 - //$value = str_replace("%", "&#37;", $value);
360 + $value = str_replace('[', '&#91;', $value);
421 361 }
422 362 }
423 363 return $value;
424 364 }
425 365
366 + /**
367 + * Verify if item and dataset exists
368 + * @return bool - item and dataset exists
369 + */
426 370 public function verify() {
427 - $item = $this->get('item');
428 - $dataset = $this->get('dataset');
429 -
430 - if ($item && $dataset && class_exists('Caldera_Forms_Entry') && class_exists('Caldera_Forms_Forms') && class_exists("Caldera_Forms")) {
431 - $form = Caldera_Forms_Forms::get_form($item);
432 - if ($form && isset($form['_last_updated'])) {
433 - $entry = new Caldera_Forms_Entry($form, $dataset);
434 - if ($entry->found()) {
435 - return true;
436 - }
437 - }
371 + if ($this->get('cached_entry')) {
372 + return true;
438 373 }
439 374 return false;
440 375 }
441 376
442 - public function add_form($template) {
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()) {
443 384 if ($template->get('ID')) {
444 -
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;
445 387 $form = array(
388 + '_last_updated' => date('r'),
446 389 'success' => sprintf(__('Success. [e2pdf-download id="%s"]', 'e2pdf'), $template->get('ID')),
447 390 'name' => $template->get('title'),
391 + 'db_support' => '1',
392 + 'hide_form' => '1',
393 + 'form_ajax' => '1',
394 + 'custom_callback' => '',
448 395 'fields' => array(),
449 396 'layout_grid' => array(
450 397 'fields' => array(),
451 - 'strucutre' => ''
452 - )
398 + 'strucutre' => '',
399 + ),
400 + 'settings' => array(
401 + 'responsive' => array(
402 + 'break_point' => 'sm',
403 + ),
404 + ),
453 405 );
454 -
455 406 $pages = $template->get('pages');
456 407 $checkboxes = array();
457 408 $radios = array();
458 -
459 409 foreach ($pages as $page_key => $page) {
460 410 if (isset($page['elements']) && !empty($page['elements'])) {
461 -
462 411 foreach ($page['elements'] as $element_key => $element) {
412 + $type = false;
413 + $label = '';
463 414 if ($element['type'] == 'e2pdf-input' || $element['type'] == 'e2pdf-signature') {
464 -
465 - $field_id = 'fld_' . $this->random();
466 - $form['fields'][$field_id] = array(
467 - 'ID' => $field_id,
468 - 'slug' => 'element_' . $element['element_id'],
469 - 'type' => 'text',
470 - 'label' => $element['value'] ? '%element_' . $element['element_id'] . '% ' . $element['value'] : '%element_' . $element['element_id'] . '%',
471 - );
472 - $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $element['element_id'] . '%';
473 - if (isset($element['properties']['esig'])) {
474 - unset($pages[$page_key]['elements'][$element_key]['properties']['esig']);
475 - }
415 + $type = 'text';
416 + $label = 'Text';
476 417 } elseif ($element['type'] == 'e2pdf-textarea') {
477 -
478 - $field_id = 'fld_' . $this->random();
479 - $form['fields'][$field_id] = array(
480 - 'ID' => $field_id,
481 - 'slug' => 'element_' . $element['element_id'],
482 - 'type' => 'paragraph',
483 - 'label' => $element['value'] ? '%element_' . $element['element_id'] . '% ' . $element['value'] : '%element_' . $element['element_id'] . '%',
484 - );
485 - $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $element['element_id'] . '%';
418 + $type = 'paragraph';
419 + $label = 'Textarea';
486 420 } elseif ($element['type'] == 'e2pdf-select') {
487 -
421 + $type = 'dropdown';
422 + $label = 'Select';
488 423 $options = array();
489 424 $field_options = array();
490 -
491 425 if (isset($element['properties']['options'])) {
492 426 $field_options = explode("\n", $element['properties']['options']);
493 427 foreach ($field_options as $option) {
494 428 $option_id = 'opt' . $this->random();
@@ -494,27 +428,14 @@
494 428 $option_id = 'opt' . $this->random();
495 429 $options[$option_id] = array(
496 430 'calc_value' => '',
497 431 'label' => $option,
498 - 'value' => $option
432 + 'value' => $option,
499 433 );
500 434 }
501 435 }
502 -
503 - $field_id = 'fld_' . $this->random();
504 - $form['fields'][$field_id] = array(
505 - 'ID' => $field_id,
506 - 'slug' => 'element_' . $element['element_id'],
507 - 'type' => 'dropdown',
508 - 'label' => '%element_' . $element['element_id'] . '%',
509 - 'config' => array(
510 - 'option' => $options
511 - )
512 - );
513 -
514 - $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $element['element_id'] . '%';
515 436 } elseif ($element['type'] == 'e2pdf-checkbox') {
516 - $field_key = array_search($element['name'], array_column($checkboxes, 'name'));
437 + $field_key = array_search($element['name'], array_column($checkboxes, 'name'), false);
517 438 if ($field_key !== false) {
518 439 $option_id = 'opt' . $this->random();
519 440 $checkboxes[$field_key]['options'][$option_id] = array(
520 441 'calc_value' => $element['properties']['option'],
@@ -522,27 +443,18 @@
522 443 'value' => $element['properties']['option'],
523 444 );
524 445 $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $checkboxes[$field_key]['element_id'] . '%';
525 446 } else {
526 -
527 - $option_id = 'opt' . $this->random();
528 -
529 - $checkboxes[] = array(
530 - 'name' => $element['name'],
531 - 'element_id' => $element['element_id'],
532 - 'options' => array(
533 - $option_id => array(
534 - 'calc_value' => $element['properties']['option'],
535 - 'label' => $element['properties']['option'],
536 - 'value' => $element['properties']['option'],
537 - ),
538 - )
539 - );
540 -
541 - $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $element['element_id'] . '%';
447 + $type = 'checkbox';
448 + $label = 'Checkbox';
542 449 }
543 450 } elseif ($element['type'] == 'e2pdf-radio') {
544 - $field_key = array_search($element['name'], array_column($radios, 'name'));
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);
545 457 if ($field_key !== false) {
546 458 $option_id = 'opt' . $this->random();
547 459 $radios[$field_key]['options'][$option_id] = array(
548 460 'calc_value' => $element['properties']['option'],
@@ -550,30 +462,64 @@
550 462 'value' => $element['properties']['option'],
551 463 );
552 464 $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $radios[$field_key]['element_id'] . '%';
553 465 } else {
554 -
555 - $option_id = 'opt' . $this->random();
556 -
557 - $radios[] = array(
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(
558 483 'name' => $element['name'],
559 484 'element_id' => $element['element_id'],
485 + 'label' => !empty($labels) ? implode(' ', $labels) : $label,
560 486 'options' => array(
561 - $option_id => array(
487 + $field_id => array(
562 488 'calc_value' => $element['properties']['option'],
563 489 'label' => $element['properties']['option'],
564 490 'value' => $element['properties']['option'],
565 491 ),
566 - )
492 + ),
567 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 + );
568 507
569 - $pages[$page_key]['elements'][$element_key]['value'] = '%element_' . $element['element_id'] . '%';
508 + if ($type == 'select') {
509 + $form['fields'][$field_id]['config'] = array(
510 + 'option' => $options,
511 + );
512 + }
570 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 + }
571 518 }
572 519 }
573 520 }
574 521 }
575 -
576 522 foreach ($checkboxes as $element) {
577 523 $field_id = 'fld_' . $this->random();
578 524 $form['fields'][$field_id] = array(
579 525 'ID' => $field_id,
@@ -578,15 +524,14 @@
578 524 $form['fields'][$field_id] = array(
579 525 'ID' => $field_id,
580 526 'slug' => 'element_' . $element['element_id'],
581 527 'type' => 'checkbox',
582 - 'label' => '%element_' . $element['element_id'] . '%',
528 + 'label' => $element['label'],
583 529 'config' => array(
584 - 'option' => $element['options']
585 - )
530 + 'option' => $element['options'],
531 + ),
586 532 );
587 533 }
588 -
589 534 foreach ($radios as $element) {
590 535 $field_id = 'fld_' . $this->random();
591 536 $form['fields'][$field_id] = array(
592 537 'ID' => $field_id,
@@ -591,14 +536,22 @@
591 536 $form['fields'][$field_id] = array(
592 537 'ID' => $field_id,
593 538 'slug' => 'element_' . $element['element_id'],
594 539 'type' => 'radio',
595 - 'label' => '%element_' . $element['element_id'] . '%',
540 + 'label' => $element['label'],
596 541 'config' => array(
597 - 'option' => $element['options']
598 - )
542 + 'option' => $element['options'],
543 + ),
599 544 );
600 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 + );
601 554
602 555 $fields = array_keys($form['fields']);
603 556 $x = 1;
604 557 foreach ($fields as $field) {
@@ -609,30 +562,36 @@
609 562 $form['layout_grid']['structure'] .= '|12';
610 563 }
611 564 $x++;
612 565 }
613 -
614 - if ($item = Caldera_Forms_Forms::create_form($form)) {
566 + $item = Caldera_Forms_Forms::create_form($form);
567 + if ($item) {
615 568 $template->set('item', $item['ID']);
569 + $template->set('pages', $pages);
616 570 }
617 571 }
618 572 return $template;
619 573 }
620 574
575 + /**
576 + * Generate Random number for Field ID
577 + * @return int - Generated number
578 + */
621 579 private function random() {
622 580 return round((float) rand() / (float) getrandmax() * 10000000);
623 581 }
624 582
583 + /**
584 + * Init Visual Mapper data
585 + * @return bool|string - HTML data source for Visual Mapper
586 + */
625 587 public function visual_mapper() {
626 -
627 - $item = $this->get('item');
628 588 $forms = array();
629 589 $source = '';
630 590 $html = '';
631 -
632 - if ($item && class_exists("Caldera_Forms") && class_exists("Caldera_Forms_Forms") && class_exists("Caldera_Forms_Field_Util")) {
633 -
634 - $form = Caldera_Forms_Forms::get_form($item);
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'));
635 594 if (!empty($form['is_connected_form']) && isset($form['node']) && !empty($form['node'])) {
636 595 foreach ($form['node'] as $node) {
637 596 if (isset($node['form']) && $node['form']) {
638 597 $source .= Caldera_Forms::render_form($node['form']);
@@ -639,30 +598,54 @@
639 598 $forms[] = Caldera_Forms_Forms::get_form($node['form']);
640 599 }
641 600 }
642 601 } else {
643 - $source = Caldera_Forms::render_form($item);
602 + $source = Caldera_Forms::render_form($this->get('item'));
644 603 }
645 -
604 + remove_filter('caldera_forms_render_get_form', array($this, 'filter_caldera_forms_render_get_form'));
646 605 if ($source) {
647 - libxml_use_internal_errors(true);
648 606 $dom = new DOMDocument();
649 - if (function_exists('mb_convert_encoding')) {
650 - $html = $dom->loadHTML(mb_convert_encoding($source, 'HTML-ENTITIES', 'UTF-8'));
651 - } else {
652 - $html = $dom->loadHTML('<?xml encoding="UTF-8">' . $source);
653 - }
654 - libxml_clear_errors();
607 + $html = $this->helper->load('convert')->load_html($source, $dom, true);
655 608 }
656 -
657 609 if (!$source) {
658 - return __('Form source is empty', 'e2pdf');
610 + return '<div class="e2pdf-vm-error">' . __("The form source is empty or doesn't exist", 'e2pdf') . '</div>';
659 611 } elseif (!$html) {
660 - return __('Form could not be parsed due incorrect HTML', 'e2pdf');
612 + return '<div class="e2pdf-vm-error">' . __('The form could not be parsed due the incorrect HTML', 'e2pdf') . '</div>';
661 613 } else {
614 + $xml = $this->helper->load('xml');
615 + $xpath = new DomXPath($dom);
662 616
663 - $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 + }
664 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 + }
646 +
647 + // remove by class
665 648 $remove_by_class = array(
666 649 'live-gravatar',
667 650 );
668 651 foreach ($remove_by_class as $key => $class) {
@@ -671,134 +654,127 @@
671 654 $element->parentNode->removeChild($element);
672 655 }
673 656 }
674 657
658 + // remove by tag
675 659 $remove_by_tag = array(
676 - 'script'
660 + 'script',
677 661 );
678 662 foreach ($remove_by_tag as $key => $tag) {
679 - $elements = $xpath->query("//{$tag}");
663 + $elements = $xpath->query('//' . $tag);
680 664 foreach ($elements as $element) {
681 665 $element->parentNode->removeChild($element);
682 666 }
683 667 }
684 668
685 - // Replace names
686 669 $fields = $xpath->query("//*[contains(@name, 'fld_')]");
687 670 foreach ($fields as $element) {
688 - if ($element->attributes->getNamedItem("type")->nodeValue == 'checkbox') {
689 - 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);
690 674 if (isset($matches[1])) {
691 675 $field_id = $matches[1];
692 676 }
693 677 } else {
694 - $field_id = $element->attributes->getNamedItem("name")->nodeValue;
678 + $field_id = $xml->get_node_value($element, 'name');
695 679 }
696 680
697 - // Modify Star field
698 - if ($element->attributes->getNamedItem("data-type")->nodeValue == 'star') {
699 - if ($element->attributes->getNamedItem("style")) {
700 - $element->attributes->getNamedItem("style")->nodeValue = '';
701 - }
681 + // modify rating field
682 + if ($xml->get_node_value($element, 'data-type') == 'star') {
683 + $xml->set_node_value($element, 'style', '');
702 684 }
703 685
704 - // Modify Range field
705 - if ($element->attributes->getNamedItem("type")->nodeValue == 'range') {
706 -
707 - if ($element->parentNode->attributes->getNamedItem("style")) {
708 - $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);
709 693 }
710 -
711 - if ($element->parentNode->attributes->getNamedItem("class")) {
712 - $element->parentNode->attributes->getNamedItem("class")->nodeValue = 'col-xs-12';
713 - }
714 -
715 - $next_element = $xpath->query(".//following-sibling::div[1]", $element->parentNode)->item(0);
716 - $next_element->parentNode->removeChild($next_element);
717 694 }
718 695
719 - if (!empty($form['is_connected_form'])) {
720 - foreach ($forms as $sub_form) {
721 - $field = Caldera_Forms_Field_Util::get_field($field_id, $sub_form);
722 - if ($field && isset($field['slug'])) {
723 - if ($element->attributes->getNamedItem("name")) {
724 - $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;
725 703 }
726 - break;
727 704 }
728 - }
729 - } else {
730 - $field = Caldera_Forms_Field_Util::get_field($field_id, $form);
731 - if ($field && isset($field['slug'])) {
732 - if ($element->attributes->getNamedItem("name")) {
733 - $element->attributes->getNamedItem("name")->nodeValue = "%" . $field['slug'] . "%";
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'] . '%');
734 709 }
735 710 }
736 711 }
737 712 }
738 713
739 - // Convert Calculation Fields
714 + // calculation
740 715 $calculation_fields = $xpath->query("//input[@data-type='calculation']");
741 - foreach ($calculation_fields as $calculation_field) {
742 -
743 - if ($calculation_field->attributes->getNamedItem("type")) {
744 - $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);
745 722 }
723 + }
746 724
747 - $calculation_text = $xpath->query(".//h3", $calculation_field->parentNode)->item(0);
748 - $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');
749 729 }
750 730
751 - // Modify Toggle Fields
731 + // toggle
752 732 $toggle_gorups = $xpath->query("//*[contains(@class, 'cf-toggle-switch')]");
753 - foreach ($toggle_gorups as $toogle_group) {
754 - $toggle_elements = $xpath->query(".//*[contains(@class, 'cf-toggle-group-buttons')]//a", $toogle_group);
755 - foreach ($toggle_elements as $toggle_element) {
756 - $toggle_id = $toggle_element->attributes->getNamedItem("id")->nodeValue;
757 -
758 - $radio = $toggle_elements = $xpath->query(".//input[@id='{$toggle_id}']", $toogle_group)->item(0);
759 -
760 - if ($radio) {
761 - $radio_cloned = $radio->cloneNode(true);
762 -
763 - $attr = $dom->createAttribute('style');
764 - $attr->value = 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;';
765 - $radio_cloned->appendChild($attr);
766 -
767 - $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 + }
768 744 }
769 745 }
770 746 }
771 747
772 - // Modify Advanced File Upload
748 + // ajax uploader
773 749 $advanced_uploaders = $xpath->query("//*[contains(@class, 'cf-uploader-trigger')]");
774 - foreach ($advanced_uploaders as $advanced_uploader) {
775 - $input = $xpath->query(".//input[@type='hidden']", $advanced_uploader->parentNode)->item(0);
776 -
750 + foreach ($advanced_uploaders as $element) {
751 + $input = $xpath->query(".//input[@type='hidden']", $element->parentNode)->item(0);
777 752 $attr = $dom->createAttribute('style');
778 753 $attr->value = 'position: relative;';
779 - $advanced_uploader->appendChild($attr);
780 -
754 + $element->appendChild($attr);
781 755 if ($input) {
782 756 $input_cloned = $input->cloneNode(true);
783 - $attr = $dom->createAttribute('style');
784 - $attr->value = 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;';
785 - $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 + }
786 762
787 - if ($input_cloned->attributes->getNamedItem('type')) {
788 - $input_cloned->attributes->getNamedItem('type')->nodeValue = 'text';
789 - }
790 -
791 - $advanced_uploader->appendChild($input_cloned);
792 - }
763 + $textareas = $xpath->query('//textarea');
764 + foreach ($textareas as $element) {
765 + $xml->set_node_value($element, 'rows', '4');
793 766 }
794 767
795 - // Remove unecessary elements
796 768 $submit_buttons = $xpath->query("//input[@type='submit']");
797 - foreach ($submit_buttons as $submit_button) {
798 - $submit_button->parentNode->removeChild($submit_button);
769 + foreach ($submit_buttons as $element) {
770 + $element->parentNode->removeChild($element);
799 771 }
800 - 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 + }
801 777 }
802 778 }
803 779 return false;
804 780 }
@@ -804,22 +780,17 @@
804 780 }
805 781
806 782 /**
807 783 * Auto Generate of Template for this extension
808 - *
809 784 * @return array - List of elements
810 785 */
811 786 public function auto() {
812 -
813 787 $response = array();
814 788 $elements = array();
815 789 $fields = array();
816 790 $forms = array();
817 -
818 - $item = $this->get('item');
819 -
820 - if (class_exists("Caldera_Forms_Forms")) {
821 - $form = Caldera_Forms_Forms::get_form($item);
791 + if (class_exists('Caldera_Forms_Forms')) {
792 + $form = Caldera_Forms_Forms::get_form($this->get('item'));
822 793 if (!empty($form['is_connected_form']) && isset($form['node']) && !empty($form['node'])) {
823 794 foreach ($form['node'] as $node) {
824 795 if (isset($node['form']) && $node['form']) {
825 796 $sub_form = Caldera_Forms_Forms::get_form($node['form']);
@@ -832,25 +803,23 @@
832 803 } else {
833 804 $forms[] = $form;
834 805 $fields = $form['fields'];
835 806 }
836 -
837 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 + }
838 811 if ($sub_form && isset($sub_form['layout_grid']['structure']) && isset($sub_form['layout_grid']['fields'])) {
839 812 $struct = explode('|', $sub_form['layout_grid']['structure']);
840 813 foreach ($struct as $row_num => $row) {
841 -
842 814 $float = false;
843 815 $columns = explode(':', $row);
844 816 foreach ($columns as $column_num => $column) {
845 - $column_fields = array_keys($sub_form['layout_grid']['fields'], ( $row_num + 1) . ':' . ( $column_num + 1));
846 -
847 - $width = 100 / (12 / $column) . "%";
848 -
817 + $column_fields = array_keys($sub_form['layout_grid']['fields'], ($row_num + 1) . ':' . ($column_num + 1));
818 + $width = 100 / (12 / $column) . '%';
849 819 foreach ($column_fields as $column_field_key) {
850 820 if (isset($fields[$column_field_key])) {
851 821 $field = $fields[$column_field_key];
852 -
853 822 switch ($field['type']) {
854 823 case 'text':
855 824 case 'email':
856 825 case 'phone_better':
@@ -866,105 +835,124 @@
866 835 case 'calculation':
867 836 case 'range_slider':
868 837 case 'star_rating':
869 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 + );
855 +
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;
870 869 case 'file':
871 870 case 'advanced_file':
872 - $elements[] = $this->auto_field($field, array(
873 - 'type' => 'e2pdf-html',
874 - 'block' => true,
875 - 'float' => $float,
876 - 'properties' => array(
877 - 'top' => '20',
878 - 'left' => '20',
879 - 'right' => '20',
880 - 'width' => $width,
881 - 'height' => 'auto',
882 - 'value' => $field['label'],
883 - )
884 - ));
885 -
886 - $elements[] = $this->auto_field($field, array(
887 - 'type' => 'e2pdf-input',
888 - 'properties' => array(
889 - 'top' => '5',
890 - 'width' => '100%',
891 - 'height' => 'auto',
892 - 'value' => "%{$field['slug']}%",
893 - )
894 - ));
895 - break;
896 -
871 + case 'cf2_file':
897 872 case 'paragraph':
898 - $elements[] = $this->auto_field($field, array(
899 - 'type' => 'e2pdf-html',
900 - 'block' => true,
901 - 'float' => $float,
902 - 'properties' => array(
903 - 'top' => '20',
904 - 'left' => '20',
905 - 'right' => '20',
906 - 'width' => $width,
907 - 'height' => 'auto',
908 - 'value' => $field['label'],
909 - )
910 - ));
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 + );
911 889
912 - $elements[] = $this->auto_field($field, array(
913 - 'type' => 'e2pdf-textarea',
914 - 'properties' => array(
915 - 'top' => '5',
916 - 'width' => '100%',
917 - 'height' => '150',
918 - 'value' => "%{$field['slug']}%",
919 - )
920 - ));
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 + );
921 902 break;
922 -
923 903 case 'wysiwyg':
924 904 case 'html':
925 905 case 'summary':
926 - $elements[] = $this->auto_field($field, array(
927 - 'type' => 'e2pdf-html',
928 - 'block' => true,
929 - 'float' => $float,
930 - 'properties' => array(
931 - 'top' => '20',
932 - 'left' => '20',
933 - 'right' => '20',
934 - 'width' => $width,
935 - 'height' => 'auto',
936 - 'value' => $field['label'],
937 - )
938 - ));
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 + );
939 922
940 - $elements[] = $this->auto_field($field, array(
941 - 'type' => 'e2pdf-html',
942 - 'properties' => array(
943 - 'top' => '5',
944 - 'width' => '100%',
945 - 'height' => '150',
946 - 'value' => "%{$field['slug']}%",
947 - )
948 - ));
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 + );
949 935 break;
950 -
951 936 case 'dropdown':
952 937 case 'filtered_select2':
953 938 case 'states':
954 - $elements[] = $this->auto_field($field, array(
955 - 'type' => 'e2pdf-html',
956 - 'block' => true,
957 - 'float' => $float,
958 - 'properties' => array(
959 - 'top' => '20',
960 - 'left' => '20',
961 - 'right' => '20',
962 - 'width' => $width,
963 - 'height' => 'auto',
964 - 'value' => $field['label'],
965 - )
966 - ));
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 + );
967 955
968 956 $options_tmp = array();
969 957
970 958 if (isset($field['config']['option']) && is_array($field['config']['option'])) {
@@ -974,11 +962,11 @@
974 962 }
975 963 }
976 964 }
977 965
978 - if ($field['type'] == 'states' && defined("CFCORE_PATH")) {
979 - if (file_exists(CFCORE_PATH . "fields/states/field.php")) {
980 - $contents = file_get_contents(CFCORE_PATH . "fields/states/field.php");
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');
981 969 preg_match_all('/<option value="(.*?)">(.*?)<\/option>/', $contents, $matches);
982 970 if (isset($matches[1])) {
983 971 foreach ($matches[1] as $state) {
984 972 $options_tmp[] = $state;
@@ -986,111 +974,128 @@
986 974 }
987 975 }
988 976 }
989 977
990 - $elements[] = $this->auto_field($field, array(
991 - 'type' => 'e2pdf-select',
992 - 'properties' => array(
993 - 'top' => '5',
994 - 'width' => '100%',
995 - 'height' => 'auto',
996 - 'options' => implode("\n", $options_tmp),
997 - 'value' => "%{$field['slug']}%",
998 - )
999 - ));
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 + ),
989 + )
990 + );
1000 991 break;
1001 -
1002 992 case 'checkbox':
1003 - $elements[] = $this->auto_field($field, array(
1004 - 'type' => 'e2pdf-html',
1005 - 'block' => true,
1006 - 'float' => $float,
1007 - 'properties' => array(
1008 - 'top' => '20',
1009 - 'left' => '20',
1010 - 'right' => '20',
1011 - 'width' => $width,
1012 - 'height' => 'auto',
1013 - 'value' => $field['label'],
1014 - )
1015 - ));
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 + ),
1007 + )
1008 + );
1016 1009
1017 1010 if (isset($field['config']['option']) && is_array($field['config']['option'])) {
1018 1011 foreach ($field['config']['option'] as $opt_key => $option) {
1019 1012 if (is_array($option)) {
1020 - $elements[] = $this->auto_field($field, array(
1021 - 'type' => 'e2pdf-checkbox',
1022 - 'properties' => array(
1023 - 'top' => '5',
1024 - 'width' => 'auto',
1025 - 'height' => 'auto',
1026 - 'value' => "%{$field['slug']}%",
1027 - 'option' => $option['label']
1028 - )
1029 - ));
1030 - $elements[] = $this->auto_field($field, array(
1031 - 'type' => 'e2pdf-html',
1032 - 'float' => true,
1033 - 'properties' => array(
1034 - 'left' => '5',
1035 - 'width' => '100%',
1036 - 'height' => 'auto',
1037 - 'value' => $option['label']
1038 - )
1039 - ));
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 + );
1040 1039 }
1041 1040 }
1042 1041 }
1043 1042 break;
1044 -
1045 1043 case 'radio':
1046 1044 case 'toggle_switch':
1047 - $elements[] = $this->auto_field($field, 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 - ));
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 + );
1060 1061
1061 1062 if (isset($field['config']['option']) && is_array($field['config']['option'])) {
1062 1063 foreach ($field['config']['option'] as $opt_key => $option) {
1063 1064 if (is_array($option)) {
1064 - $elements[] = $this->auto_field($field, array(
1065 - 'type' => 'e2pdf-radio',
1066 - 'properties' => array(
1067 - 'top' => '5',
1068 - 'width' => 'auto',
1069 - 'height' => 'auto',
1070 - 'value' => "%{$field['slug']}%",
1071 - 'option' => $option['label'],
1072 - 'group' => "group_" . $field['slug'],
1073 - )
1074 - ));
1075 - $elements[] = $this->auto_field($field, array(
1076 - 'type' => 'e2pdf-html',
1077 - 'float' => true,
1078 - 'properties' => array(
1079 - 'left' => '5',
1080 - 'width' => '100%',
1081 - 'height' => 'auto',
1082 - 'value' => $option['label']
1083 - )
1084 - ));
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 + );
1085 1092 }
1086 1093 }
1087 1094 }
1088 1095 break;
1089 1096 default:
1090 - /*
1091 - * Unsupported fields: section_break, live_gravatar, button
1092 - */
1097 + /* Unsupported fields: section_break, live_gravatar, button */
1093 1098 break;
1094 1099 }
1095 1100 }
1096 1101 }
@@ -1100,32 +1105,32 @@
1100 1105 }
1101 1106 }
1102 1107 }
1103 1108 }
1104 -
1105 1109 $response['page'] = array(
1106 1110 'bottom' => '20',
1107 1111 'top' => '20',
1108 1112 );
1109 -
1110 1113 $response['elements'] = $elements;
1111 1114 return $response;
1112 1115 }
1113 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 + */
1114 1123 public function auto_field($field = false, $element = array()) {
1115 -
1116 1124 if (!$field) {
1117 1125 return false;
1118 1126 }
1119 -
1120 1127 if (!isset($element['block'])) {
1121 1128 $element['block'] = false;
1122 1129 }
1123 -
1124 1130 if (!isset($element['float'])) {
1125 1131 $element['float'] = false;
1126 1132 }
1127 -
1128 1133 return $element;
1129 1134 }
1130 1135
1131 1136 /**
@@ -1131,10 +1136,11 @@
1131 1136 /**
1132 1137 * Load actions for this extension
1133 1138 */
1134 1139 public function load_actions() {
1135 - add_action('caldera_forms_submit_complete', array($this, 'action_caldera_forms_submit_complete'), 99, 3);
1136 - 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);
1137 1143 }
1138 1144
1139 1145 /**
1140 1146 * Delete attachments that were sent by email
@@ -1139,11 +1145,9 @@
1139 1145 /**
1140 1146 * Delete attachments that were sent by email
1141 1147 */
1142 1148 public function action_caldera_forms_mailer_complete() {
1143 -
1144 1149 $files = $this->helper->get('caldera_attachments');
1145 -
1146 1150 if (is_array($files) && !empty($files)) {
1147 1151 foreach ($files as $key => $file) {
1148 1152 $this->helper->delete_dir(dirname($file) . '/');
1149 1153 }
@@ -1151,14 +1155,70 @@
1151 1155 }
1152 1156 }
1153 1157
1154 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 + /**
1155 1217 * Convert file and advanced_file field type to not rendered
1156 - *
1157 1218 * @param array $field - Field
1158 - * @param array $form - Current form
1159 - *
1160 - @return array - Updated field
1219 + * @param array $form - Current form
1220 + * @return array - Updated field
1161 1221 */
1162 1222 public function filter_caldera_forms_render_get_field($field, $form) {
1163 1223 if (isset($field['type']) && ($field['type'] == 'file' || $field['type'] == 'advanced_file')) {
1164 1224 $field['config']['media_lib'] = false;
@@ -1167,16 +1227,14 @@
1167 1227 }
1168 1228
1169 1229 /**
1170 1230 * Fix for {entry_id}
1171 - *
1172 1231 * @param array $form - Current form
1173 1232 * @param int $entry_id - Current entry_id
1174 - *
1175 - @return array - Updated form
1233 + * @return array - Updated form
1176 1234 */
1177 1235 public function filter_caldera_forms_magic_form($form, $entry_id) {
1178 - if (class_exists("Caldera_Forms") && $entry_id) {
1236 + if (class_exists('Caldera_Forms') && $entry_id) {
1179 1237 Caldera_Forms::set_field_data('_entry_id', $entry_id, $form);
1180 1238 }
1181 1239 return $form;
1182 1240 }
@@ -1182,85 +1240,168 @@
1182 1240 }
1183 1241
1184 1242 /**
1185 1243 * Render file and advanced_file field types to url instead image and link
1186 - *
1187 - * @param string $value - Text value
1244 + * @param string $_value - NULL value to overide
1245 + * @param string $value - Value to replace shortcodes
1188 1246 * @param array $matches - List of matches of magic tags
1189 1247 * @param int $entry_id - Current entry
1190 - * @param array $form - Current form
1191 - *
1248 + * @param array $form - Current form
1192 1249 * @return string - Updated value
1193 1250 */
1194 - public function filter_caldera_forms_do_field_magic_value($value, $matches, $entry_id, $form) {
1195 -
1196 - if (class_exists('Caldera_Forms') && class_exists('Caldera_Forms_Field_Util')) {
1197 - 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])) {
1198 1254 foreach ($matches[1] as $key => $tag) {
1199 -
1200 1255 $part_tags = explode(':', $tag);
1201 1256 if (!empty($part_tags[1])) {
1202 1257 $tag = $part_tags[0];
1203 1258 }
1204 1259 $entry = Caldera_Forms::get_slug_data($tag, $form, $entry_id);
1205 -
1206 1260 $field = false;
1207 1261 if ($entry !== null) {
1208 1262 $field = Caldera_Forms_Field_Util::get_field_by_slug($tag, $form);
1209 1263 }
1210 -
1211 - if (Caldera_Forms_Field_Util::is_file_field($field, $form)) {
1212 - if (filter_var($entry, FILTER_VALIDATE_URL)) {
1213 - $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 + }
1214 1273 }
1215 - continue;
1216 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 + }
1217 1311 $value = str_replace($matches[0][$key], $entry, $value);
1218 1312 }
1313 + return apply_filters('caldera_forms_do_field_magic_value', $value, $matches, $entry_id, $form);
1219 1314 }
1220 1315 }
1316 + return $_value;
1317 + }
1221 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 + }
1222 1333 return $value;
1223 1334 }
1224 1335
1225 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 + /**
1226 1358 * [e2pdf-view] shortcode fix
1227 - *
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
1228 1385 * @param array $out - Array with response
1229 - * @param array $form - Current form
1230 - *
1231 - @return array - Updated response
1386 + * @param array $form - Current form
1387 + * @return array - Updated response
1232 1388 */
1233 1389 public function filter_caldera_forms_ajax_return($out, $form) {
1234 -
1235 1390 if (isset($out['html'])) {
1236 -
1237 1391 if (false === strpos($out['html'], '[')) {
1238 1392 return $out;
1239 1393 }
1240 -
1241 1394 $shortcode_tags = array(
1242 - 'e2pdf-view'
1395 + 'e2pdf-view',
1396 + 'e2pdf-download',
1243 1397 );
1244 -
1245 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $form['success'], $matches);
1246 -
1398 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $out['html'], $matches);
1247 1399 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1248 -
1249 1400 if (!empty($tagnames)) {
1250 - $pattern = get_shortcode_regex($tagnames);
1251 -
1252 - preg_match_all("/$pattern/", $out['html'], $shortcodes);
1401 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $out['html'], $shortcodes);
1253 1402 foreach ($shortcodes[0] as $key => $shortcode_value) {
1254 -
1255 - $shortcode = array();
1256 - $shortcode[1] = $shortcodes[1][$key];
1257 - $shortcode[2] = $shortcodes[2][$key];
1258 - $shortcode[3] = $shortcodes[3][$key];
1259 - $shortcode[4] = $shortcodes[4][$key];
1260 - $shortcode[5] = $shortcodes[5][$key];
1261 - $shortcode[6] = $shortcodes[6][$key];
1262 -
1403 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1263 1404 $out['html'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $out['html']);
1264 1405 }
1265 1406 }
1266 1407 }
@@ -1267,69 +1408,54 @@
1267 1408
1268 1409 return $out;
1269 1410 }
1270 1411
1271 - public function action_caldera_forms_submit_complete($form, $referrer, $process_id) {
1272 - global $form, $transdata;
1273 -
1274 - if (isset($form['success'])) {
1275 -
1276 - if (false === strpos($form['success'], '[')) {
1277 - return;
1278 - }
1279 -
1412 + public function filter_success_message($message = '', $form = array(), $dataset_id = false) {
1413 + if (false !== strpos($message, '[')) {
1280 1414 $shortcode_tags = array(
1281 1415 'e2pdf-download',
1282 1416 'e2pdf-save',
1283 1417 'e2pdf-view',
1284 - 'e2pdf-adobesign'
1418 + 'e2pdf-adobesign',
1419 + 'e2pdf-zapier',
1285 1420 );
1286 -
1287 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $form['success'], $matches);
1288 -
1421 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $message, $matches);
1289 1422 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1290 -
1291 1423 if (!empty($tagnames)) {
1292 - $pattern = get_shortcode_regex($tagnames);
1293 -
1294 - preg_match_all("/$pattern/", $form['success'], $shortcodes);
1424 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $message, $shortcodes);
1295 1425 foreach ($shortcodes[0] as $key => $shortcode_value) {
1296 -
1297 - $shortcode = array();
1298 - $shortcode[1] = $shortcodes[1][$key];
1299 - $shortcode[2] = $shortcodes[2][$key];
1300 - $shortcode[3] = $shortcodes[3][$key];
1301 - $shortcode[4] = $shortcodes[4][$key];
1302 - $shortcode[5] = $shortcodes[5][$key];
1303 - $shortcode[6] = $shortcodes[6][$key];
1304 -
1426 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1305 1427 $atts = shortcode_parse_atts($shortcode[3]);
1306 -
1307 - if (!array_key_exists('dataset', $atts) && array_key_exists('id', $atts)) {
1308 - $template = new Model_E2pdf_Template();
1309 - $template->load($atts['id']);
1310 - if ($template->get('extension') === 'caldera') {
1311 - $dataset_id = isset($transdata['entry_id']) ? $transdata['entry_id'] : false;
1312 - if ($dataset_id) {
1313 - $atts['dataset'] = $dataset_id;
1314 - $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 + }
1315 1438 }
1316 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 + }
1317 1452 }
1318 -
1319 - if ($shortcode[2] === 'e2pdf-save' || $shortcode[2] === 'e2pdf-adobesign') {
1320 - $shortcode[3] .= " apply=\"true\"";
1321 - }
1322 -
1323 - if ($shortcode[2] === 'e2pdf-view') {
1324 - $new_shortcode = $shortcode[2] . $shortcode[3];
1325 - $form['success'] = str_replace($shortcode_value, "[{$new_shortcode}]", $form['success']);
1326 - } else {
1327 - $form['success'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $form['success']);
1328 - }
1329 1453 }
1330 1454 }
1331 1455 }
1456 +
1457 + return $message;
1332 1458 }
1333 1459
1334 1460 /**
1335 1461 * Load filters for this extension
@@ -1334,14 +1460,46 @@
1334 1460 /**
1335 1461 * Load filters for this extension
1336 1462 */
1337 1463 public function load_filters() {
1338 - add_filter('caldera_forms_mailer', array($this, 'filter_caldera_forms_mailer'), 30, 3);
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);
1339 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);
1340 1470 }
1341 1471
1342 - 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 + }
1343 1497
1498 + /**
1499 + * Filter to replace mail message E2Pdf shortcodes
1500 + */
1501 + public function filter_caldera_forms_mailer($mail, $data, $form, $entryid) {
1344 1502 if ($mail && isset($mail['message'])) {
1345 1503 if (false !== strpos($mail['message'], '[')) {
1346 1504 $shortcode_tags = array(
1347 1505 'e2pdf-download',
@@ -1346,52 +1504,54 @@
1346 1504 $shortcode_tags = array(
1347 1505 'e2pdf-download',
1348 1506 'e2pdf-save',
1349 1507 'e2pdf-attachment',
1350 - 'e2pdf-adobesign'
1508 + 'e2pdf-adobesign',
1509 + 'e2pdf-zapier',
1351 1510 );
1352 -
1353 1511 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $mail['message'], $matches);
1354 1512 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1355 -
1356 1513 if (!empty($tagnames)) {
1357 - $pattern = get_shortcode_regex($tagnames);
1358 -
1359 - preg_match_all("/$pattern/", $mail['message'], $shortcodes);
1360 -
1514 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $mail['message'], $shortcodes);
1361 1515 foreach ($shortcodes[0] as $key => $shortcode_value) {
1362 - $shortcode = array();
1363 - $shortcode[1] = $shortcodes[1][$key];
1364 - $shortcode[2] = $shortcodes[2][$key];
1365 - $shortcode[3] = $shortcodes[3][$key];
1366 - $shortcode[4] = $shortcodes[4][$key];
1367 - $shortcode[5] = $shortcodes[5][$key];
1368 - $shortcode[6] = $shortcodes[6][$key];
1369 -
1516 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1370 1517 $atts = shortcode_parse_atts($shortcode[3]);
1371 -
1372 - if (!array_key_exists('dataset', $atts) && array_key_exists('id', $atts)) {
1518 + if (!isset($atts['dataset']) && isset($atts['id'])) {
1373 1519 $template = new Model_E2pdf_Template();
1374 1520 $template->load($atts['id']);
1375 1521 if ($template->get('extension') === 'caldera') {
1376 - $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 + }
1377 1526 if ($dataset_id) {
1378 1527 $atts['dataset'] = $dataset_id;
1379 - $shortcode[3] .= " dataset=\"{$dataset_id}\"";
1528 + $shortcode[3] .= ' dataset="' . $dataset_id . '"';
1380 1529 }
1381 1530 }
1382 1531 }
1383 -
1384 - if ($shortcode[2] === 'e2pdf-attachment' || $shortcode[2] === 'e2pdf-save' || $shortcode[2] === 'e2pdf-adobesign') {
1385 - $shortcode[3] .= " apply=\"true\"";
1532 + if (!isset($atts['apply'])) {
1533 + $shortcode[3] .= ' apply="true"';
1386 1534 }
1387 -
1388 - $shortcode[3] .= " filter=\"true\"";
1389 -
1390 - 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)) {
1391 1540 $file = do_shortcode_tag($shortcode);
1392 1541 if ($file) {
1393 - $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 + }
1394 1554 $mail['attachments'][] = $file;
1395 1555 }
1396 1556 $mail['message'] = str_replace($shortcode_value, '', $mail['message']);
1397 1557 } else {
@@ -1400,25 +1560,20 @@
1400 1560 }
1401 1561 }
1402 1562 }
1403 1563 }
1404 -
1405 1564 return $mail;
1406 1565 }
1407 1566
1408 1567 /**
1409 1568 * Get styles for generating Map Field function
1410 - *
1411 1569 * @return array - List of css files to load
1412 1570 */
1413 - public function styles() {
1414 -
1571 + public function styles($item_id = false) {
1415 1572 $styles = array();
1416 1573 if (class_exists('Caldera_Forms_Render_Assets')) {
1417 1574 $url = Caldera_Forms_Render_Assets::make_url('caldera-forms-front', false);
1418 1575 $styles[] = $url;
1419 1576 }
1420 -
1421 1577 return $styles;
1422 1578 }
1423 -
1424 1579 }