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 +917 -763 1.05.03 → 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,10 +562,10 @@
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']);
616 569 $template->set('pages', $pages);
617 570 }
618 571 }
@@ -618,22 +571,27 @@
618 571 }
619 572 return $template;
620 573 }
621 574
575 + /**
576 + * Generate Random number for Field ID
577 + * @return int - Generated number
578 + */
622 579 private function random() {
623 580 return round((float) rand() / (float) getrandmax() * 10000000);
624 581 }
625 582
583 + /**
584 + * Init Visual Mapper data
585 + * @return bool|string - HTML data source for Visual Mapper
586 + */
626 587 public function visual_mapper() {
627 -
628 - $item = $this->get('item');
629 588 $forms = array();
630 589 $source = '';
631 590 $html = '';
632 -
633 - if ($item && class_exists("Caldera_Forms") && class_exists("Caldera_Forms_Forms") && class_exists("Caldera_Forms_Field_Util")) {
634 -
635 - $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'));
636 594 if (!empty($form['is_connected_form']) && isset($form['node']) && !empty($form['node'])) {
637 595 foreach ($form['node'] as $node) {
638 596 if (isset($node['form']) && $node['form']) {
639 597 $source .= Caldera_Forms::render_form($node['form']);
@@ -640,30 +598,54 @@
640 598 $forms[] = Caldera_Forms_Forms::get_form($node['form']);
641 599 }
642 600 }
643 601 } else {
644 - $source = Caldera_Forms::render_form($item);
602 + $source = Caldera_Forms::render_form($this->get('item'));
645 603 }
646 -
604 + remove_filter('caldera_forms_render_get_form', array($this, 'filter_caldera_forms_render_get_form'));
647 605 if ($source) {
648 - libxml_use_internal_errors(true);
649 606 $dom = new DOMDocument();
650 - if (function_exists('mb_convert_encoding')) {
651 - $html = $dom->loadHTML(mb_convert_encoding($source, 'HTML-ENTITIES', 'UTF-8'));
652 - } else {
653 - $html = $dom->loadHTML('<?xml encoding="UTF-8">' . $source);
654 - }
655 - libxml_clear_errors();
607 + $html = $this->helper->load('convert')->load_html($source, $dom, true);
656 608 }
657 -
658 609 if (!$source) {
659 - return __('Form source is empty', 'e2pdf');
610 + return '<div class="e2pdf-vm-error">' . __("The form source is empty or doesn't exist", 'e2pdf') . '</div>';
660 611 } elseif (!$html) {
661 - 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>';
662 613 } else {
614 + $xml = $this->helper->load('xml');
615 + $xpath = new DomXPath($dom);
663 616
664 - $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 + }
665 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
666 648 $remove_by_class = array(
667 649 'live-gravatar',
668 650 );
669 651 foreach ($remove_by_class as $key => $class) {
@@ -672,134 +654,127 @@
672 654 $element->parentNode->removeChild($element);
673 655 }
674 656 }
675 657
658 + // remove by tag
676 659 $remove_by_tag = array(
677 - 'script'
660 + 'script',
678 661 );
679 662 foreach ($remove_by_tag as $key => $tag) {
680 - $elements = $xpath->query("//{$tag}");
663 + $elements = $xpath->query('//' . $tag);
681 664 foreach ($elements as $element) {
682 665 $element->parentNode->removeChild($element);
683 666 }
684 667 }
685 668
686 - // Replace names
687 669 $fields = $xpath->query("//*[contains(@name, 'fld_')]");
688 670 foreach ($fields as $element) {
689 - if ($element->attributes->getNamedItem("type")->nodeValue == 'checkbox') {
690 - 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);
691 674 if (isset($matches[1])) {
692 675 $field_id = $matches[1];
693 676 }
694 677 } else {
695 - $field_id = $element->attributes->getNamedItem("name")->nodeValue;
678 + $field_id = $xml->get_node_value($element, 'name');
696 679 }
697 680
698 - // Modify Star field
699 - if ($element->attributes->getNamedItem("data-type")->nodeValue == 'star') {
700 - if ($element->attributes->getNamedItem("style")) {
701 - $element->attributes->getNamedItem("style")->nodeValue = '';
702 - }
681 + // modify rating field
682 + if ($xml->get_node_value($element, 'data-type') == 'star') {
683 + $xml->set_node_value($element, 'style', '');
703 684 }
704 685
705 - // Modify Range field
706 - if ($element->attributes->getNamedItem("type")->nodeValue == 'range') {
707 -
708 - if ($element->parentNode->attributes->getNamedItem("style")) {
709 - $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);
710 693 }
711 -
712 - if ($element->parentNode->attributes->getNamedItem("class")) {
713 - $element->parentNode->attributes->getNamedItem("class")->nodeValue = 'col-xs-12';
714 - }
715 -
716 - $next_element = $xpath->query(".//following-sibling::div[1]", $element->parentNode)->item(0);
717 - $next_element->parentNode->removeChild($next_element);
718 694 }
719 695
720 - if (!empty($form['is_connected_form'])) {
721 - foreach ($forms as $sub_form) {
722 - $field = Caldera_Forms_Field_Util::get_field($field_id, $sub_form);
723 - if ($field && isset($field['slug'])) {
724 - if ($element->attributes->getNamedItem("name")) {
725 - $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;
726 703 }
727 - break;
728 704 }
729 - }
730 - } else {
731 - $field = Caldera_Forms_Field_Util::get_field($field_id, $form);
732 - if ($field && isset($field['slug'])) {
733 - if ($element->attributes->getNamedItem("name")) {
734 - $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'] . '%');
735 709 }
736 710 }
737 711 }
738 712 }
739 713
740 - // Convert Calculation Fields
714 + // calculation
741 715 $calculation_fields = $xpath->query("//input[@data-type='calculation']");
742 - foreach ($calculation_fields as $calculation_field) {
743 -
744 - if ($calculation_field->attributes->getNamedItem("type")) {
745 - $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);
746 722 }
723 + }
747 724
748 - $calculation_text = $xpath->query(".//h3", $calculation_field->parentNode)->item(0);
749 - $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');
750 729 }
751 730
752 - // Modify Toggle Fields
731 + // toggle
753 732 $toggle_gorups = $xpath->query("//*[contains(@class, 'cf-toggle-switch')]");
754 - foreach ($toggle_gorups as $toogle_group) {
755 - $toggle_elements = $xpath->query(".//*[contains(@class, 'cf-toggle-group-buttons')]//a", $toogle_group);
756 - foreach ($toggle_elements as $toggle_element) {
757 - $toggle_id = $toggle_element->attributes->getNamedItem("id")->nodeValue;
758 -
759 - $radio = $toggle_elements = $xpath->query(".//input[@id='{$toggle_id}']", $toogle_group)->item(0);
760 -
761 - if ($radio) {
762 - $radio_cloned = $radio->cloneNode(true);
763 -
764 - $attr = $dom->createAttribute('style');
765 - $attr->value = 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;';
766 - $radio_cloned->appendChild($attr);
767 -
768 - $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 + }
769 744 }
770 745 }
771 746 }
772 747
773 - // Modify Advanced File Upload
748 + // ajax uploader
774 749 $advanced_uploaders = $xpath->query("//*[contains(@class, 'cf-uploader-trigger')]");
775 - foreach ($advanced_uploaders as $advanced_uploader) {
776 - $input = $xpath->query(".//input[@type='hidden']", $advanced_uploader->parentNode)->item(0);
777 -
750 + foreach ($advanced_uploaders as $element) {
751 + $input = $xpath->query(".//input[@type='hidden']", $element->parentNode)->item(0);
778 752 $attr = $dom->createAttribute('style');
779 753 $attr->value = 'position: relative;';
780 - $advanced_uploader->appendChild($attr);
781 -
754 + $element->appendChild($attr);
782 755 if ($input) {
783 756 $input_cloned = $input->cloneNode(true);
784 - $attr = $dom->createAttribute('style');
785 - $attr->value = 'position: absolute;width: 100%;top: 0;left: 0;height: 100%; opacity: 0;';
786 - $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 + }
787 762
788 - if ($input_cloned->attributes->getNamedItem('type')) {
789 - $input_cloned->attributes->getNamedItem('type')->nodeValue = 'text';
790 - }
791 -
792 - $advanced_uploader->appendChild($input_cloned);
793 - }
763 + $textareas = $xpath->query('//textarea');
764 + foreach ($textareas as $element) {
765 + $xml->set_node_value($element, 'rows', '4');
794 766 }
795 767
796 - // Remove unecessary elements
797 768 $submit_buttons = $xpath->query("//input[@type='submit']");
798 - foreach ($submit_buttons as $submit_button) {
799 - $submit_button->parentNode->removeChild($submit_button);
769 + foreach ($submit_buttons as $element) {
770 + $element->parentNode->removeChild($element);
800 771 }
801 - 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 + }
802 777 }
803 778 }
804 779 return false;
805 780 }
@@ -805,22 +780,17 @@
805 780 }
806 781
807 782 /**
808 783 * Auto Generate of Template for this extension
809 - *
810 784 * @return array - List of elements
811 785 */
812 786 public function auto() {
813 -
814 787 $response = array();
815 788 $elements = array();
816 789 $fields = array();
817 790 $forms = array();
818 -
819 - $item = $this->get('item');
820 -
821 - if (class_exists("Caldera_Forms_Forms")) {
822 - $form = Caldera_Forms_Forms::get_form($item);
791 + if (class_exists('Caldera_Forms_Forms')) {
792 + $form = Caldera_Forms_Forms::get_form($this->get('item'));
823 793 if (!empty($form['is_connected_form']) && isset($form['node']) && !empty($form['node'])) {
824 794 foreach ($form['node'] as $node) {
825 795 if (isset($node['form']) && $node['form']) {
826 796 $sub_form = Caldera_Forms_Forms::get_form($node['form']);
@@ -833,25 +803,23 @@
833 803 } else {
834 804 $forms[] = $form;
835 805 $fields = $form['fields'];
836 806 }
837 -
838 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 + }
839 811 if ($sub_form && isset($sub_form['layout_grid']['structure']) && isset($sub_form['layout_grid']['fields'])) {
840 812 $struct = explode('|', $sub_form['layout_grid']['structure']);
841 813 foreach ($struct as $row_num => $row) {
842 -
843 814 $float = false;
844 815 $columns = explode(':', $row);
845 816 foreach ($columns as $column_num => $column) {
846 - $column_fields = array_keys($sub_form['layout_grid']['fields'], ( $row_num + 1) . ':' . ( $column_num + 1));
847 -
848 - $width = 100 / (12 / $column) . "%";
849 -
817 + $column_fields = array_keys($sub_form['layout_grid']['fields'], ($row_num + 1) . ':' . ($column_num + 1));
818 + $width = 100 / (12 / $column) . '%';
850 819 foreach ($column_fields as $column_field_key) {
851 820 if (isset($fields[$column_field_key])) {
852 821 $field = $fields[$column_field_key];
853 -
854 822 switch ($field['type']) {
855 823 case 'text':
856 824 case 'email':
857 825 case 'phone_better':
@@ -867,105 +835,124 @@
867 835 case 'calculation':
868 836 case 'range_slider':
869 837 case 'star_rating':
870 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;
871 869 case 'file':
872 870 case 'advanced_file':
873 - $elements[] = $this->auto_field($field, array(
874 - 'type' => 'e2pdf-html',
875 - 'block' => true,
876 - 'float' => $float,
877 - 'properties' => array(
878 - 'top' => '20',
879 - 'left' => '20',
880 - 'right' => '20',
881 - 'width' => $width,
882 - 'height' => 'auto',
883 - 'value' => $field['label'],
884 - )
885 - ));
886 -
887 - $elements[] = $this->auto_field($field, array(
888 - 'type' => 'e2pdf-input',
889 - 'properties' => array(
890 - 'top' => '5',
891 - 'width' => '100%',
892 - 'height' => 'auto',
893 - 'value' => "%{$field['slug']}%",
894 - )
895 - ));
896 - break;
897 -
871 + case 'cf2_file':
898 872 case 'paragraph':
899 - $elements[] = $this->auto_field($field, array(
900 - 'type' => 'e2pdf-html',
901 - 'block' => true,
902 - 'float' => $float,
903 - 'properties' => array(
904 - 'top' => '20',
905 - 'left' => '20',
906 - 'right' => '20',
907 - 'width' => $width,
908 - 'height' => 'auto',
909 - 'value' => $field['label'],
910 - )
911 - ));
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 + );
912 889
913 - $elements[] = $this->auto_field($field, array(
914 - 'type' => 'e2pdf-textarea',
915 - 'properties' => array(
916 - 'top' => '5',
917 - 'width' => '100%',
918 - 'height' => '150',
919 - 'value' => "%{$field['slug']}%",
920 - )
921 - ));
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 + );
922 902 break;
923 -
924 903 case 'wysiwyg':
925 904 case 'html':
926 905 case 'summary':
927 - $elements[] = $this->auto_field($field, array(
928 - 'type' => 'e2pdf-html',
929 - 'block' => true,
930 - 'float' => $float,
931 - 'properties' => array(
932 - 'top' => '20',
933 - 'left' => '20',
934 - 'right' => '20',
935 - 'width' => $width,
936 - 'height' => 'auto',
937 - 'value' => $field['label'],
938 - )
939 - ));
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 + );
940 922
941 - $elements[] = $this->auto_field($field, array(
942 - 'type' => 'e2pdf-html',
943 - 'properties' => array(
944 - 'top' => '5',
945 - 'width' => '100%',
946 - 'height' => '150',
947 - 'value' => "%{$field['slug']}%",
948 - )
949 - ));
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 + );
950 935 break;
951 -
952 936 case 'dropdown':
953 937 case 'filtered_select2':
954 938 case 'states':
955 - $elements[] = $this->auto_field($field, array(
956 - 'type' => 'e2pdf-html',
957 - 'block' => true,
958 - 'float' => $float,
959 - 'properties' => array(
960 - 'top' => '20',
961 - 'left' => '20',
962 - 'right' => '20',
963 - 'width' => $width,
964 - 'height' => 'auto',
965 - 'value' => $field['label'],
966 - )
967 - ));
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 + );
968 955
969 956 $options_tmp = array();
970 957
971 958 if (isset($field['config']['option']) && is_array($field['config']['option'])) {
@@ -975,11 +962,11 @@
975 962 }
976 963 }
977 964 }
978 965
979 - if ($field['type'] == 'states' && defined("CFCORE_PATH")) {
980 - if (file_exists(CFCORE_PATH . "fields/states/field.php")) {
981 - $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');
982 969 preg_match_all('/<option value="(.*?)">(.*?)<\/option>/', $contents, $matches);
983 970 if (isset($matches[1])) {
984 971 foreach ($matches[1] as $state) {
985 972 $options_tmp[] = $state;
@@ -987,111 +974,128 @@
987 974 }
988 975 }
989 976 }
990 977
991 - $elements[] = $this->auto_field($field, array(
992 - 'type' => 'e2pdf-select',
993 - 'properties' => array(
994 - 'top' => '5',
995 - 'width' => '100%',
996 - 'height' => 'auto',
997 - 'options' => implode("\n", $options_tmp),
998 - 'value' => "%{$field['slug']}%",
999 - )
1000 - ));
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 + );
1001 991 break;
1002 -
1003 992 case 'checkbox':
1004 - $elements[] = $this->auto_field($field, array(
1005 - 'type' => 'e2pdf-html',
1006 - 'block' => true,
1007 - 'float' => $float,
1008 - 'properties' => array(
1009 - 'top' => '20',
1010 - 'left' => '20',
1011 - 'right' => '20',
1012 - 'width' => $width,
1013 - 'height' => 'auto',
1014 - 'value' => $field['label'],
1015 - )
1016 - ));
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 + );
1017 1009
1018 1010 if (isset($field['config']['option']) && is_array($field['config']['option'])) {
1019 1011 foreach ($field['config']['option'] as $opt_key => $option) {
1020 1012 if (is_array($option)) {
1021 - $elements[] = $this->auto_field($field, array(
1022 - 'type' => 'e2pdf-checkbox',
1023 - 'properties' => array(
1024 - 'top' => '5',
1025 - 'width' => 'auto',
1026 - 'height' => 'auto',
1027 - 'value' => "%{$field['slug']}%",
1028 - 'option' => $option['label']
1029 - )
1030 - ));
1031 - $elements[] = $this->auto_field($field, array(
1032 - 'type' => 'e2pdf-html',
1033 - 'float' => true,
1034 - 'properties' => array(
1035 - 'left' => '5',
1036 - 'width' => '100%',
1037 - 'height' => 'auto',
1038 - 'value' => $option['label']
1039 - )
1040 - ));
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 + );
1041 1039 }
1042 1040 }
1043 1041 }
1044 1042 break;
1045 -
1046 1043 case 'radio':
1047 1044 case 'toggle_switch':
1048 - $elements[] = $this->auto_field($field, array(
1049 - 'type' => 'e2pdf-html',
1050 - 'block' => true,
1051 - 'float' => $float,
1052 - 'properties' => array(
1053 - 'top' => '20',
1054 - 'left' => '20',
1055 - 'right' => '20',
1056 - 'width' => $width,
1057 - 'height' => 'auto',
1058 - 'value' => $field['label'],
1059 - )
1060 - ));
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 + );
1061 1061
1062 1062 if (isset($field['config']['option']) && is_array($field['config']['option'])) {
1063 1063 foreach ($field['config']['option'] as $opt_key => $option) {
1064 1064 if (is_array($option)) {
1065 - $elements[] = $this->auto_field($field, array(
1066 - 'type' => 'e2pdf-radio',
1067 - 'properties' => array(
1068 - 'top' => '5',
1069 - 'width' => 'auto',
1070 - 'height' => 'auto',
1071 - 'value' => "%{$field['slug']}%",
1072 - 'option' => $option['label'],
1073 - 'group' => "group_" . $field['slug'],
1074 - )
1075 - ));
1076 - $elements[] = $this->auto_field($field, array(
1077 - 'type' => 'e2pdf-html',
1078 - 'float' => true,
1079 - 'properties' => array(
1080 - 'left' => '5',
1081 - 'width' => '100%',
1082 - 'height' => 'auto',
1083 - 'value' => $option['label']
1084 - )
1085 - ));
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 + );
1086 1092 }
1087 1093 }
1088 1094 }
1089 1095 break;
1090 1096 default:
1091 - /*
1092 - * Unsupported fields: section_break, live_gravatar, button
1093 - */
1097 + /* Unsupported fields: section_break, live_gravatar, button */
1094 1098 break;
1095 1099 }
1096 1100 }
1097 1101 }
@@ -1101,32 +1105,32 @@
1101 1105 }
1102 1106 }
1103 1107 }
1104 1108 }
1105 -
1106 1109 $response['page'] = array(
1107 1110 'bottom' => '20',
1108 1111 'top' => '20',
1109 1112 );
1110 -
1111 1113 $response['elements'] = $elements;
1112 1114 return $response;
1113 1115 }
1114 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 + */
1115 1123 public function auto_field($field = false, $element = array()) {
1116 -
1117 1124 if (!$field) {
1118 1125 return false;
1119 1126 }
1120 -
1121 1127 if (!isset($element['block'])) {
1122 1128 $element['block'] = false;
1123 1129 }
1124 -
1125 1130 if (!isset($element['float'])) {
1126 1131 $element['float'] = false;
1127 1132 }
1128 -
1129 1133 return $element;
1130 1134 }
1131 1135
1132 1136 /**
@@ -1132,10 +1136,11 @@
1132 1136 /**
1133 1137 * Load actions for this extension
1134 1138 */
1135 1139 public function load_actions() {
1136 - add_action('caldera_forms_submit_complete', array($this, 'action_caldera_forms_submit_complete'), 99, 3);
1137 - 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);
1138 1143 }
1139 1144
1140 1145 /**
1141 1146 * Delete attachments that were sent by email
@@ -1140,11 +1145,9 @@
1140 1145 /**
1141 1146 * Delete attachments that were sent by email
1142 1147 */
1143 1148 public function action_caldera_forms_mailer_complete() {
1144 -
1145 1149 $files = $this->helper->get('caldera_attachments');
1146 -
1147 1150 if (is_array($files) && !empty($files)) {
1148 1151 foreach ($files as $key => $file) {
1149 1152 $this->helper->delete_dir(dirname($file) . '/');
1150 1153 }
@@ -1152,14 +1155,70 @@
1152 1155 }
1153 1156 }
1154 1157
1155 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 + /**
1156 1217 * Convert file and advanced_file field type to not rendered
1157 - *
1158 1218 * @param array $field - Field
1159 - * @param array $form - Current form
1160 - *
1161 - @return array - Updated field
1219 + * @param array $form - Current form
1220 + * @return array - Updated field
1162 1221 */
1163 1222 public function filter_caldera_forms_render_get_field($field, $form) {
1164 1223 if (isset($field['type']) && ($field['type'] == 'file' || $field['type'] == 'advanced_file')) {
1165 1224 $field['config']['media_lib'] = false;
@@ -1168,16 +1227,14 @@
1168 1227 }
1169 1228
1170 1229 /**
1171 1230 * Fix for {entry_id}
1172 - *
1173 1231 * @param array $form - Current form
1174 1232 * @param int $entry_id - Current entry_id
1175 - *
1176 - @return array - Updated form
1233 + * @return array - Updated form
1177 1234 */
1178 1235 public function filter_caldera_forms_magic_form($form, $entry_id) {
1179 - if (class_exists("Caldera_Forms") && $entry_id) {
1236 + if (class_exists('Caldera_Forms') && $entry_id) {
1180 1237 Caldera_Forms::set_field_data('_entry_id', $entry_id, $form);
1181 1238 }
1182 1239 return $form;
1183 1240 }
@@ -1183,85 +1240,168 @@
1183 1240 }
1184 1241
1185 1242 /**
1186 1243 * Render file and advanced_file field types to url instead image and link
1187 - *
1188 - * @param string $value - Text value
1244 + * @param string $_value - NULL value to overide
1245 + * @param string $value - Value to replace shortcodes
1189 1246 * @param array $matches - List of matches of magic tags
1190 1247 * @param int $entry_id - Current entry
1191 - * @param array $form - Current form
1192 - *
1248 + * @param array $form - Current form
1193 1249 * @return string - Updated value
1194 1250 */
1195 - public function filter_caldera_forms_do_field_magic_value($value, $matches, $entry_id, $form) {
1196 -
1197 - if (class_exists('Caldera_Forms') && class_exists('Caldera_Forms_Field_Util')) {
1198 - 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])) {
1199 1254 foreach ($matches[1] as $key => $tag) {
1200 -
1201 1255 $part_tags = explode(':', $tag);
1202 1256 if (!empty($part_tags[1])) {
1203 1257 $tag = $part_tags[0];
1204 1258 }
1205 1259 $entry = Caldera_Forms::get_slug_data($tag, $form, $entry_id);
1206 -
1207 1260 $field = false;
1208 1261 if ($entry !== null) {
1209 1262 $field = Caldera_Forms_Field_Util::get_field_by_slug($tag, $form);
1210 1263 }
1211 -
1212 - if (Caldera_Forms_Field_Util::is_file_field($field, $form)) {
1213 - if (filter_var($entry, FILTER_VALIDATE_URL)) {
1214 - $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 + }
1215 1273 }
1216 - continue;
1217 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 + }
1218 1311 $value = str_replace($matches[0][$key], $entry, $value);
1219 1312 }
1313 + return apply_filters('caldera_forms_do_field_magic_value', $value, $matches, $entry_id, $form);
1220 1314 }
1221 1315 }
1316 + return $_value;
1317 + }
1222 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 + }
1223 1333 return $value;
1224 1334 }
1225 1335
1226 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 + /**
1227 1358 * [e2pdf-view] shortcode fix
1228 - *
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
1229 1385 * @param array $out - Array with response
1230 - * @param array $form - Current form
1231 - *
1232 - @return array - Updated response
1386 + * @param array $form - Current form
1387 + * @return array - Updated response
1233 1388 */
1234 1389 public function filter_caldera_forms_ajax_return($out, $form) {
1235 -
1236 1390 if (isset($out['html'])) {
1237 -
1238 1391 if (false === strpos($out['html'], '[')) {
1239 1392 return $out;
1240 1393 }
1241 -
1242 1394 $shortcode_tags = array(
1243 - 'e2pdf-view'
1395 + 'e2pdf-view',
1396 + 'e2pdf-download',
1244 1397 );
1245 -
1246 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $form['success'], $matches);
1247 -
1398 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $out['html'], $matches);
1248 1399 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1249 -
1250 1400 if (!empty($tagnames)) {
1251 - $pattern = get_shortcode_regex($tagnames);
1252 -
1253 - preg_match_all("/$pattern/", $out['html'], $shortcodes);
1401 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $out['html'], $shortcodes);
1254 1402 foreach ($shortcodes[0] as $key => $shortcode_value) {
1255 -
1256 - $shortcode = array();
1257 - $shortcode[1] = $shortcodes[1][$key];
1258 - $shortcode[2] = $shortcodes[2][$key];
1259 - $shortcode[3] = $shortcodes[3][$key];
1260 - $shortcode[4] = $shortcodes[4][$key];
1261 - $shortcode[5] = $shortcodes[5][$key];
1262 - $shortcode[6] = $shortcodes[6][$key];
1263 -
1403 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1264 1404 $out['html'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $out['html']);
1265 1405 }
1266 1406 }
1267 1407 }
@@ -1268,69 +1408,54 @@
1268 1408
1269 1409 return $out;
1270 1410 }
1271 1411
1272 - public function action_caldera_forms_submit_complete($form, $referrer, $process_id) {
1273 - global $form, $transdata;
1274 -
1275 - if (isset($form['success'])) {
1276 -
1277 - if (false === strpos($form['success'], '[')) {
1278 - return;
1279 - }
1280 -
1412 + public function filter_success_message($message = '', $form = array(), $dataset_id = false) {
1413 + if (false !== strpos($message, '[')) {
1281 1414 $shortcode_tags = array(
1282 1415 'e2pdf-download',
1283 1416 'e2pdf-save',
1284 1417 'e2pdf-view',
1285 - 'e2pdf-adobesign'
1418 + 'e2pdf-adobesign',
1419 + 'e2pdf-zapier',
1286 1420 );
1287 -
1288 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $form['success'], $matches);
1289 -
1421 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $message, $matches);
1290 1422 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1291 -
1292 1423 if (!empty($tagnames)) {
1293 - $pattern = get_shortcode_regex($tagnames);
1294 -
1295 - preg_match_all("/$pattern/", $form['success'], $shortcodes);
1424 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $message, $shortcodes);
1296 1425 foreach ($shortcodes[0] as $key => $shortcode_value) {
1297 -
1298 - $shortcode = array();
1299 - $shortcode[1] = $shortcodes[1][$key];
1300 - $shortcode[2] = $shortcodes[2][$key];
1301 - $shortcode[3] = $shortcodes[3][$key];
1302 - $shortcode[4] = $shortcodes[4][$key];
1303 - $shortcode[5] = $shortcodes[5][$key];
1304 - $shortcode[6] = $shortcodes[6][$key];
1305 -
1426 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1306 1427 $atts = shortcode_parse_atts($shortcode[3]);
1307 -
1308 - if (!array_key_exists('dataset', $atts) && array_key_exists('id', $atts)) {
1309 - $template = new Model_E2pdf_Template();
1310 - $template->load($atts['id']);
1311 - if ($template->get('extension') === 'caldera') {
1312 - $dataset_id = isset($transdata['entry_id']) ? $transdata['entry_id'] : false;
1313 - if ($dataset_id) {
1314 - $atts['dataset'] = $dataset_id;
1315 - $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 + }
1316 1438 }
1317 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 + }
1318 1452 }
1319 -
1320 - if ($shortcode[2] === 'e2pdf-save' || $shortcode[2] === 'e2pdf-adobesign') {
1321 - $shortcode[3] .= " apply=\"true\"";
1322 - }
1323 -
1324 - if ($shortcode[2] === 'e2pdf-view') {
1325 - $new_shortcode = $shortcode[2] . $shortcode[3];
1326 - $form['success'] = str_replace($shortcode_value, "[{$new_shortcode}]", $form['success']);
1327 - } else {
1328 - $form['success'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $form['success']);
1329 - }
1330 1453 }
1331 1454 }
1332 1455 }
1456 +
1457 + return $message;
1333 1458 }
1334 1459
1335 1460 /**
1336 1461 * Load filters for this extension
@@ -1335,14 +1460,46 @@
1335 1460 /**
1336 1461 * Load filters for this extension
1337 1462 */
1338 1463 public function load_filters() {
1339 - 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);
1340 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);
1341 1470 }
1342 1471
1343 - 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 + }
1344 1497
1498 + /**
1499 + * Filter to replace mail message E2Pdf shortcodes
1500 + */
1501 + public function filter_caldera_forms_mailer($mail, $data, $form, $entryid) {
1345 1502 if ($mail && isset($mail['message'])) {
1346 1503 if (false !== strpos($mail['message'], '[')) {
1347 1504 $shortcode_tags = array(
1348 1505 'e2pdf-download',
@@ -1347,52 +1504,54 @@
1347 1504 $shortcode_tags = array(
1348 1505 'e2pdf-download',
1349 1506 'e2pdf-save',
1350 1507 'e2pdf-attachment',
1351 - 'e2pdf-adobesign'
1508 + 'e2pdf-adobesign',
1509 + 'e2pdf-zapier',
1352 1510 );
1353 -
1354 1511 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $mail['message'], $matches);
1355 1512 $tagnames = array_intersect($shortcode_tags, $matches[1]);
1356 -
1357 1513 if (!empty($tagnames)) {
1358 - $pattern = get_shortcode_regex($tagnames);
1359 -
1360 - preg_match_all("/$pattern/", $mail['message'], $shortcodes);
1361 -
1514 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $mail['message'], $shortcodes);
1362 1515 foreach ($shortcodes[0] as $key => $shortcode_value) {
1363 - $shortcode = array();
1364 - $shortcode[1] = $shortcodes[1][$key];
1365 - $shortcode[2] = $shortcodes[2][$key];
1366 - $shortcode[3] = $shortcodes[3][$key];
1367 - $shortcode[4] = $shortcodes[4][$key];
1368 - $shortcode[5] = $shortcodes[5][$key];
1369 - $shortcode[6] = $shortcodes[6][$key];
1370 -
1516 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1371 1517 $atts = shortcode_parse_atts($shortcode[3]);
1372 -
1373 - if (!array_key_exists('dataset', $atts) && array_key_exists('id', $atts)) {
1518 + if (!isset($atts['dataset']) && isset($atts['id'])) {
1374 1519 $template = new Model_E2pdf_Template();
1375 1520 $template->load($atts['id']);
1376 1521 if ($template->get('extension') === 'caldera') {
1377 - $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 + }
1378 1526 if ($dataset_id) {
1379 1527 $atts['dataset'] = $dataset_id;
1380 - $shortcode[3] .= " dataset=\"{$dataset_id}\"";
1528 + $shortcode[3] .= ' dataset="' . $dataset_id . '"';
1381 1529 }
1382 1530 }
1383 1531 }
1384 -
1385 - if ($shortcode[2] === 'e2pdf-attachment' || $shortcode[2] === 'e2pdf-save' || $shortcode[2] === 'e2pdf-adobesign') {
1386 - $shortcode[3] .= " apply=\"true\"";
1532 + if (!isset($atts['apply'])) {
1533 + $shortcode[3] .= ' apply="true"';
1387 1534 }
1388 -
1389 - $shortcode[3] .= " filter=\"true\"";
1390 -
1391 - 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)) {
1392 1540 $file = do_shortcode_tag($shortcode);
1393 1541 if ($file) {
1394 - $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 + }
1395 1554 $mail['attachments'][] = $file;
1396 1555 }
1397 1556 $mail['message'] = str_replace($shortcode_value, '', $mail['message']);
1398 1557 } else {
@@ -1401,25 +1560,20 @@
1401 1560 }
1402 1561 }
1403 1562 }
1404 1563 }
1405 -
1406 1564 return $mail;
1407 1565 }
1408 1566
1409 1567 /**
1410 1568 * Get styles for generating Map Field function
1411 - *
1412 1569 * @return array - List of css files to load
1413 1570 */
1414 - public function styles() {
1415 -
1571 + public function styles($item_id = false) {
1416 1572 $styles = array();
1417 1573 if (class_exists('Caldera_Forms_Render_Assets')) {
1418 1574 $url = Caldera_Forms_Render_Assets::make_url('caldera-forms-front', false);
1419 1575 $styles[] = $url;
1420 1576 }
1421 -
1422 1577 return $styles;
1423 1578 }
1424 -
1425 1579 }