PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.49
E2Pdf – Export Pdf Tool for WordPress v1.32.49
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 1.08.00 1.08.06 All 72 releases
e2pdf / classes / helper / e2pdf-field.php

e2pdf-field.php in E2Pdf – Export Pdf Tool for WordPress 1.32.49, at classes/helper/e2pdf-field.php

457 lines 26.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * File: /helper/e2pdf-field.php
5 *
6 * @package E2Pdf
7 * @license GPLv3
8 * @link https://e2pdf.com
9 */
10 if (!defined('ABSPATH')) {
11 die('Access denied.');
12 }
13
14 class Helper_E2pdf_Field {
15
16 private $helper;
17
18 public function __construct() {
19 $this->helper = Helper_E2pdf_Helper::instance();
20 }
21
22 public function pre_shortcodes($value, $extension, $field = array()) {
23 if (false !== strpos($value, '[')) {
24
25 $shortcode_tags = array(
26 'e2pdf-translate'
27 );
28 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
29 $tagnames = array_intersect($shortcode_tags, $matches[1]);
30 if (!empty($tagnames)) {
31 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
32 foreach ($shortcodes[0] as $key => $shortcode_value) {
33 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
34 $atts = shortcode_parse_atts($shortcode[3]);
35 if ($shortcode[2] === 'e2pdf-translate') {
36 if (!isset($atts['domain'])) {
37 if ($this->helper->load('translator')->isTRP()) {
38 $value = str_replace($shortcode_value, $this->helper->load('translator')->pre_translate($shortcode[5], $extension->get('template_id')), $value);
39 }
40 }
41 }
42 }
43 }
44
45 $replace = array(
46 '[e2pdf-dataset]' => $extension->get('dataset') ? $extension->get('dataset') : '',
47 '[e2pdf-userid]' => (int) $extension->get('user_id'),
48 '[e2pdf-usercurrentid]' => function_exists('get_current_user_id') ? get_current_user_id() : 0,
49 '[pdf_url]' => '[e2pdf-url]',
50 '[e2pdf-url]' => '',
51 '[e2pdf-uid]' => '',
52 );
53 if (false !== strpos($value, '[e2pdf-lang]')) {
54 $replace['[e2pdf-lang]'] = $this->helper->load('translator')->lang();
55 }
56 if (false !== strpos($value, '[e2pdf-url]') || false !== strpos($value, '[pdf_url]') || false !== strpos($value, '[e2pdf-uid]')) {
57 $pdf_url = '';
58 if ($extension->get('entry')) {
59 if ($extension->get('entry')->get_data('e2pdf-url')) {
60 $pdf_url = $extension->get('entry')->get_data('e2pdf-url');
61 } else {
62 if (!$extension->get('entry')->load_by_uid()) {
63 $extension->get('entry')->save();
64 }
65 $url_data = array(
66 'page' => 'e2pdf-download',
67 'uid' => $extension->get('entry')->get('uid'),
68 );
69 $pdf_url = esc_url_raw(
70 $this->helper->get_frontend_pdf_url(
71 $url_data, false,
72 array(
73 'e2pdf_extension_render_shortcodes_site_url',
74 'e2pdf_extension_' . $extension->info('key') . '_render_shortcodes_site_url',
75 )
76 )
77 );
78 $replace['[e2pdf-uid]'] = $extension->get('entry')->get('uid');
79 }
80 }
81 $replace['[e2pdf-url]'] = $pdf_url;
82 }
83 if ($extension instanceof Extension_E2pdf_Formidable) {
84 $replace['[e2pdf-dataset2]'] = $extension->get('dataset2') ? $extension->get('dataset2') : '';
85 } elseif ($extension instanceof Extension_E2pdf_Wordpress || $extension instanceof Extension_E2pdf_Woocommerce) {
86 $replace['[id]'] = isset($extension->get('cached_post')->ID) && $extension->get('cached_post')->ID ? $extension->get('cached_post')->ID : '';
87 }
88 $replace = apply_filters('e2pdf_helper_field_pre_shortcodes', $replace, $value, $extension, $field);
89 $value = str_replace(array_keys($replace), $replace, $value);
90
91 $args = apply_filters('e2pdf_extension_render_shortcodes_args', $extension->get('args'), isset($field['element_id']) ? $field['element_id'] : false, $extension->get('template_id'), $extension->get('item'), $extension->get('dataset'), false, false);
92 $shortcode_tags = array(
93 'e2pdf-arg',
94 );
95 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
96 $tagnames = array_intersect($shortcode_tags, $matches[1]);
97 if (!empty($tagnames)) {
98 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
99 foreach ($shortcodes[0] as $key => $shortcode_value) {
100 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
101 $atts = shortcode_parse_atts($shortcode[3]);
102 if ($shortcode[2] === 'e2pdf-arg') {
103 if (isset($atts['key']) && isset($args[$atts['key']])) {
104 $value = str_replace($shortcode_value, $extension->strip_shortcodes($args[$atts['key']]), $value);
105 } else {
106 $value = str_replace($shortcode_value, '', $value);
107 }
108 }
109 }
110 }
111
112 if (false !== strpos($value, '[e2pdf-arg')) {
113 $value = preg_replace_callback(
114 '/(\[e2pdf-arg)([0-9]+)(\])/',
115 function ($m) use ($args, $extension) {
116 return isset($args['arg' . $m[2]]) ? $extension->strip_shortcodes($args['arg' . $m[2]]) : '';
117 },
118 $value
119 );
120 }
121 }
122 return $value;
123 }
124
125 public function inner_shortcodes($value, $extension, $field = array()) {
126 if (false !== strpos($value, '[')) {
127 if ($extension instanceof Extension_E2pdf_Woocommerce || $extension instanceof Extension_E2pdf_Wordpress) {
128 // [e2pdf-foreach] backward compatibility
129 $shortcode_tags = array(
130 'e2pdf-foreach',
131 );
132 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
133 $tagnames = array_intersect($shortcode_tags, $matches[1]);
134 foreach ($matches[1] as $key => $shortcode) {
135 if (strpos($shortcode, ':') !== false) {
136 $shortcode_tags[] = $shortcode;
137 }
138 }
139 if (!empty($tagnames)) {
140 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
141 foreach ($shortcodes[0] as $key => $shortcode_value) {
142 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
143 $atts = shortcode_parse_atts($shortcode[3]);
144 if ($shortcode[2] == 'e2pdf-foreach') {
145 if ($extension instanceof Extension_E2pdf_Woocommerce) {
146 switch ($extension->get('item')) {
147 case 'product':
148 case 'product_variation':
149 if (isset($atts['shortcode']) && $atts['shortcode'] == 'e2pdf-wc-customer') { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
150 } elseif (isset($atts['shortcode']) && $atts['shortcode'] == 'e2pdf-wc-order') {
151 if (!isset($atts['id']) && $extension->get('wc_order_id')) {
152 $shortcode[3] .= ' id="' . $extension->get('wc_order_id') . '"';
153 }
154 } else {
155 if (!isset($atts['id']) && isset($extension->get('cached_post')->ID) && $extension->get('cached_post')->ID) {
156 $shortcode[3] .= ' id="' . $extension->get('cached_post')->ID . '"';
157 }
158 if (!isset($atts['wc_order_id']) && $extension->get('wc_order_id')) {
159 $shortcode[3] .= ' wc_order_id="' . $extension->get('wc_order_id') . '"';
160 }
161
162 if (!isset($atts['wc_product_item_id']) && $extension->get('wc_product_item_id')) {
163 $shortcode[3] .= ' wc_product_item_id="' . $extension->get('wc_product_item_id') . '"';
164 }
165 }
166 break;
167 case 'shop_order':
168 case 'shop_subscription':
169 if (isset($atts['shortcode']) && $atts['shortcode'] == 'e2pdf-wc-customer') { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
170 } elseif (isset($atts['shortcode']) && $atts['shortcode'] == 'e2pdf-wc-product') {
171 if (!isset($atts['wc_order_id']) && isset($extension->get('cached_post')->ID) && $extension->get('cached_post')->ID) {
172 $shortcode[3] .= ' wc_order_id="' . $extension->get('cached_post')->ID . '"';
173 }
174 } else {
175 if (!isset($atts['id']) && isset($extension->get('cached_post')->ID) && $extension->get('cached_post')->ID) {
176 $shortcode[3] .= ' id="' . $extension->get('cached_post')->ID . '"';
177 }
178 }
179 break;
180 case 'cart':
181 if (isset($atts['shortcode']) && $atts['shortcode'] == 'e2pdf-wc-customer') { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
182 } elseif (isset($atts['shortcode']) && $atts['shortcode'] == 'e2pdf-wc-product') {
183 if (!isset($atts['wc_order_id']) && isset($extension->get('cached_post')->ID) && $extension->get('cached_post')->ID) {
184 $shortcode[3] .= ' wc_order_id="cart"';
185 }
186 } else {
187 if (!isset($atts['id']) && isset($extension->get('cached_post')->ID) && $extension->get('cached_post')->ID) {
188 $shortcode[3] .= ' id="' . $extension->get('cached_post')->ID . '"';
189 }
190 }
191 break;
192 default:
193 break;
194 }
195 } elseif ($extension instanceof Extension_E2pdf_Wordpress) {
196 if (isset($atts['shortcode']) && $atts['shortcode'] == 'e2pdf-wp') {
197 if (!isset($atts['id']) && isset($extension->get('cached_post')->ID) && $extension->get('cached_post')->ID) {
198 $shortcode[3] .= ' id="' . $extension->get('cached_post')->ID . '"';
199 }
200 }
201 }
202 $value = str_replace($shortcode_value, do_shortcode_tag($shortcode), $value);
203 }
204 }
205 }
206 }
207
208 $shortcode_tags = array(
209 'e2pdf-for', 'e2pdf-acf-repeater',
210 );
211 $value = $this->helper->load('shortcode')->apply_inline_shortcodes($value, $shortcode_tags, $extension);
212
213 $shortcode_tags = array(
214 'e2pdf-if',
215 );
216 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
217 $tagnames = array_intersect($shortcode_tags, $matches[1]);
218 if (!empty($tagnames)) {
219 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
220 foreach ($shortcodes[0] as $key => $shortcode_value) {
221 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
222 $atts = shortcode_parse_atts($shortcode[3]);
223 $value = str_replace($shortcode_value, $this->helper->load('if')->do_shortcode($atts, $shortcode[5], 0, $extension), $value);
224 }
225 }
226
227 $shortcode_tags = array(
228 'e2pdf-user',
229 );
230 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
231 $tagnames = array_intersect($shortcode_tags, $matches[1]);
232 if (!empty($tagnames)) {
233 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
234 foreach ($shortcodes[0] as $key => $shortcode_value) {
235 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
236 $atts = shortcode_parse_atts($shortcode[3]);
237 if ($shortcode[2] === 'e2pdf-user') {
238 if (!isset($atts['id']) && $extension->get('user_id')) {
239 $shortcode[3] .= ' id=' . $extension->get('user_id') . '';
240 }
241 if (substr($shortcode_value, -13) === '[/e2pdf-user]') {
242 if ($shortcode[5]) {
243 $shortcode[5] = $extension->render($shortcode[5], array(), false);
244 }
245 $value = str_replace($shortcode_value, '[e2pdf-user' . $shortcode[3] . ']' . $shortcode[5] . '[/e2pdf-user]', $value);
246 } else {
247 $value = str_replace($shortcode_value, '[e2pdf-user' . $shortcode[3] . ']', $value);
248 }
249 }
250 }
251 }
252 }
253 return $value;
254 }
255
256 public function wrapper_shortcodes($value, $extension, $field = array(), $do_shortcode = false) {
257 if (false !== strpos($value, '[')) {
258 $shortcode_tags = array(
259 'e2pdf-format-number',
260 'e2pdf-format-date',
261 'e2pdf-format-output',
262 'e2pdf-math',
263 );
264 if ($extension instanceof Extension_E2pdf_Formidable) {
265 $shortcode_tags[] = 'frm-math';
266 $shortcode_tags[] = 'e2pdf-frm-field-value';
267 }
268 if ($extension instanceof Extension_E2pdf_Gravity) {
269 $shortcode_tags[] = 'gravityforms';
270 }
271 $shortcode_tags = apply_filters('e2pdf_extension_render_shortcodes_tags', $shortcode_tags, $extension, $field, $do_shortcode);
272 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
273 $tagnames = array_intersect($shortcode_tags, $matches[1]);
274 if (!empty($tagnames)) {
275 preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
276 foreach ($shortcodes[0] as $key => $shortcode_value) {
277 $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
278 if ($shortcode[2] === 'gravityforms') {
279 if (class_exists('GFCommon')) {
280 $value = str_replace($shortcode_value, GFCommon::replace_variables($shortcode_value, $extension->get('cached_form'), $extension->get('cached_entry'), false, false, false, 'text'), $value);
281 }
282 } else {
283 if ($shortcode[5]) {
284 if ($shortcode[2] === 'e2pdf-math') {
285 $shortcode[5] = $this->helper->load('math')->pre_render($shortcode[5], $extension);
286 }
287 $shortcode[5] = $extension->render($shortcode[5], array(), false);
288 if ($shortcode[2] === 'e2pdf-math') {
289 $shortcode[5] = $this->helper->load('math')->after_render($shortcode[5]);
290 }
291 }
292 if ($do_shortcode) {
293 $value = str_replace($shortcode_value, do_shortcode_tag($shortcode), $value);
294 } else {
295 $value = str_replace($shortcode_value, '[' . $shortcode[2] . $shortcode[3] . ']' . $shortcode[5] . '[/' . $shortcode[2] . ']', $value);
296 }
297 }
298 }
299 }
300 }
301 return $value;
302 }
303
304 public function do_shortcodes($value, $extension, $field = array()) {
305 $element_id = isset($field['element_id']) ? $field['element_id'] : false;
306 $value = apply_filters('e2pdf_extension_render_shortcodes_pre_do_shortcode', $value, $element_id, $extension->get('template_id'), $extension->get('item'), $extension->get('dataset'), $extension->get('item2'), $extension->get('dataset2'));
307 $value = do_shortcode($value);
308 $value = apply_filters('e2pdf_extension_render_shortcodes_after_do_shortcode', $value, $element_id, $extension->get('template_id'), $extension->get('item'), $extension->get('dataset'), $extension->get('item2'), $extension->get('dataset2'));
309 return $value;
310 }
311
312 public function render($value, $extension, $field = array()) {
313 $type = isset($field['type']) ? $field['type'] : false;
314 $element_id = isset($field['element_id']) ? $field['element_id'] : false;
315 if (false !== strpos($value, '[pdf_num]') || false !== strpos($value, '[e2pdf-num]')) {
316 $replace = array(
317 '[pdf_num]' => '[e2pdf-num]',
318 '[e2pdf-num]' => '',
319 );
320 if ($extension->get('entry')) {
321 if (!$extension->get('entry')->load_by_uid()) {
322 $extension->get('entry')->save();
323 }
324 $replace['[e2pdf-num]'] = $extension->get('entry')->get('pdf_num') + 1;
325 }
326 $value = str_replace(array_keys($replace), $replace, $value);
327 }
328
329 switch ($type) {
330 case 'e2pdf-image':
331 case 'e2pdf-signature':
332 $esig = isset($field['properties']['esig']) && $field['properties']['esig'] ? true : false;
333 $text = isset($field['properties']['text']) && $field['properties']['text'] ? true : false;
334 if ($esig) {
335 $value = '';
336 } else {
337 $value = $this->helper->load('properties')->apply($field, $value);
338 $value = $this->helper->load('translator')->translate($value, 'full');
339 $file = false;
340 if (!$text) {
341 if ($this->helper->load('pdf')->get_extension($value)) {
342 $file = $this->helper->load('pdf')->get_pdf($value, $extension->info('key'));
343 } else {
344 $file = $this->helper->load('image')->get_image($value, $extension->info('key'), $field);
345 }
346 }
347 if ($file) {
348 $value = $file;
349 } elseif (!$text && $value && 0 === strpos($value, 'image/jsignature;base30,')) {
350 $options = apply_filters(
351 'e2pdf_image_sig_output_options',
352 array(
353 'bgColour' => 'transparent',
354 'penColour' => isset($field['properties']['text_color']) && $field['properties']['text_color'] ? $this->helper->load('convert')->to_hex_color($field['properties']['text_color']) : array(0x14, 0x53, 0x94),
355 ), $element_id, $extension->get('template_id')
356 );
357
358 $model_e2pdf_signature = new Model_E2pdf_Signature();
359 $value = $model_e2pdf_signature->j_signature($value, $options);
360 } elseif (isset($field['properties']['only_image']) && $field['properties']['only_image']) {
361 $value = '';
362 } else {
363 $value = $extension->strip_shortcodes($value);
364 $font = false;
365 $model_e2pdf_font = new Model_E2pdf_Font();
366 if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
367 $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
368 } elseif ($extension instanceof Extension_E2pdf_Formidable && class_exists('FrmSigAppHelper')) {
369 if (file_exists(FrmSigAppHelper::plugin_path() . '/assets/journal.ttf')) {
370 $font = FrmSigAppHelper::plugin_path() . '/assets/journal.ttf';
371 }
372 }
373 if (!$font) {
374 $font = $model_e2pdf_font->get_font_path('Noto Sans Regular');
375 }
376 if (!$font) {
377 $font = $model_e2pdf_font->get_font_path('Noto Sans');
378 }
379
380 $options = apply_filters(
381 'e2pdf_image_sig_output_options',
382 array(
383 'bgColour' => 'transparent',
384 'penColour' => isset($field['properties']['text_color']) && $field['properties']['text_color'] ? $this->helper->load('convert')->to_hex_color($field['properties']['text_color']) : array(0x14, 0x53, 0x94),
385 'font' => $font,
386 'fontSize' => isset($field['properties']['text_font_size']) && $field['properties']['text_font_size'] ? $field['properties']['text_font_size'] : 150,
387 ), $element_id, $extension->get('template_id')
388 );
389
390 /* Formidable Forms 1.16.x compatbility filter */
391 if ($extension instanceof Extension_E2pdf_Formidable) {
392 $options = apply_filters('e2pdf_frm_sig_output_options', $options, $element_id);
393 }
394 $model_e2pdf_signature = new Model_E2pdf_Signature();
395 $value = $model_e2pdf_signature->ttf_signature($value, $options);
396 }
397 }
398 break;
399 case 'e2pdf-qrcode':
400 $value = $this->helper->load('properties')->apply($field, $value);
401 $value = $this->helper->load('translator')->translate($value, 'full');
402 $value = $this->helper->load('qrcode')->qrcode($extension->strip_shortcodes($value), $field);
403 break;
404 case 'e2pdf-barcode':
405 $value = $this->helper->load('properties')->apply($field, $value);
406 $value = $this->helper->load('translator')->translate($value, 'full');
407 $value = $this->helper->load('qrcode')->barcode($extension->strip_shortcodes($value), $field);
408 break;
409 case 'e2pdf-graph':
410 $value = $this->helper->load('properties')->apply($field, $value);
411 $value = $this->helper->load('translator')->translate($value, 'full');
412 $chart = isset($field['properties']['chart']) && $field['properties']['chart'] ? true : false;
413 if (!$chart) {
414 $value = $this->helper->load('graph')->graph($extension->strip_shortcodes($value), $field);
415 }
416 break;
417 default:
418 if (!($extension instanceof Extension_E2pdf_Formidable) && !($extension instanceof Extension_E2pdf_Metform) && !($extension instanceof Extension_E2pdf_Wpcf7)) {
419 $value = $extension->convert_shortcodes($value);
420 }
421 $value = $this->helper->load('properties')->apply($field, $value);
422 break;
423 }
424 return $value;
425 }
426
427 public function render_checkbox($value, $extension, $field = array(), $separator = ', ') {
428 if (isset($field['type']) && $field['type'] === 'e2pdf-checkbox' && isset($field['properties']['option'])) {
429 $option = $extension->render($field['properties']['option']);
430 $sub_options = explode($separator, $option);
431 $checked = explode($separator, $value);
432 if (!array_diff($sub_options, $checked)) {
433 $value = $option;
434 } else {
435 $value = '';
436 }
437 }
438 return $value;
439 }
440
441 public function render_select_multiline($value, $extension, $field = array(), $separator = ', ') {
442 if (isset($field['type']) && $field['type'] === 'e2pdf-select' && !empty($field['properties']['multiline']) && isset($field['properties']['options'])) {
443 $options = preg_split('/\r?\n/', $extension->render($field['properties']['options']));
444 $selected = array();
445 $checked = explode($separator, $value);
446 foreach ($options as $option) {
447 $sub_options = explode($separator, $option);
448 if (!array_diff($sub_options, $checked)) {
449 $selected[] = $option;
450 }
451 }
452 $value = implode(', ', $selected);
453 }
454 return $value;
455 }
456 }
457