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