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-wordpress.php +1565 -540 1.07.11 → 1.32.53 View file →
@@ -1,264 +1,410 @@
1 1 <?php
2 2
3 3 /**
4 - * E2pdf Wordpress Extension
5 - *
6 - * @copyright Copyright 2017 https://e2pdf.com
7 - * @license GPL v2
8 - * @version 1
9 - * @link https://e2pdf.com
10 - * @since 0.00.01
4 + * File: /extension/e2pdf-wordpress.php
5 + *
6 + * @package E2Pdf
7 + * @license GPLv3
8 + * @link https://e2pdf.com
11 9 */
12 10 if (!defined('ABSPATH')) {
13 11 die('Access denied.');
14 12 }
15 13
14 +// phpcs:ignore WordPress.WP.CapitalPDangit.MisspelledClassName
16 15 class Extension_E2pdf_Wordpress extends Model_E2pdf_Model {
17 16
18 17 private $options;
19 - private $info = array(
18 + private $info = [
20 19 'key' => 'wordpress',
21 - 'title' => 'WordPress'
22 - );
20 + 'title' => 'WordPress',
21 + ];
23 22
24 - function __construct() {
25 - parent::__construct();
26 - }
27 -
28 - /**
29 - * Get info about extension
30 - *
31 - * @param string $key - Key to get assigned extension info value
32 - *
33 - * @return array|string - Extension Key and Title or Assigned extension info value
34 - */
23 + // info
35 24 public function info($key = false) {
36 25 if ($key && isset($this->info[$key])) {
37 26 return $this->info[$key];
38 27 } else {
39 - return array(
40 - $this->info['key'] => $this->info['title']
41 - );
28 + return [
29 + $this->info['key'] => $this->info['title'],
30 + ];
42 31 }
43 32 }
44 33
45 - /**
46 - * Check if needed plugin active
47 - *
48 - * @return bool - Activated/Not Activated plugin
49 - */
34 + // active
50 35 public function active() {
51 36 return true;
52 37 }
53 38
54 - /**
55 - * Set option
56 - *
57 - * @param string $attr - Key of option
58 - * @param string $value - Value of option
59 - *
60 - * @return bool - Status of setting option
61 - */
39 + // set
62 40 public function set($key, $value) {
63 41 if (!isset($this->options)) {
64 42 $this->options = new stdClass();
65 43 }
66 -
67 44 $this->options->$key = $value;
45 + switch ($key) {
46 + case 'dataset':
47 + $this->set('cached_post', false);
48 + if ($this->get('dataset')) {
49 + if ($this->get('item') == '-3') {
50 + $this->set('cached_post', get_user_by('id', $this->get('dataset')));
51 + } else {
52 + $pll = $this->helper->load('translator')->isPolylang();
53 + if ($pll) {
54 + $lang = pll_get_post_language($this->get('dataset'));
55 + if ($lang) {
56 + PLL()->curlang = PLL()->model->get_language($lang);
57 + }
58 + }
59 + $this->set('cached_post', get_post($this->get('dataset')));
60 + }
61 + }
62 + break;
63 + default:
64 + break;
65 + }
68 66 }
69 67
70 - /**
71 - * Get option by key
72 - *
73 - * @param string $key - Key to get assigned option value
74 - *
75 - * @return mixed
76 - */
68 + // get
77 69 public function get($key) {
70 + if ($key == 'user_id' && $this->get('item') == '-3') {
71 + $key = 'dataset';
72 + }
78 73 if (isset($this->options->$key)) {
79 74 $value = $this->options->$key;
80 - return $value;
81 - } elseif ($key == 'args') {
82 - return array();
83 75 } else {
84 - return false;
76 + switch ($key) {
77 + case 'args':
78 + $value = [];
79 + break;
80 + default:
81 + $value = false;
82 + break;
83 + }
85 84 }
85 + return $value;
86 86 }
87 87
88 - /**
89 - * Get items to work with
90 - *
91 - * @return array() - List of available items
92 - */
88 + // items
93 89 public function items() {
94 - $content = array();
95 -
96 - $items = get_post_types(array('public' => true), 'names');
97 -
98 - foreach ($items as $item) {
99 - if ($item != 'attachment') {
100 - $content[] = $this->item($item);
90 + $items = [];
91 + $forms = get_post_types([], 'names');
92 + foreach ($forms as $form) {
93 + if ($form != 'attachment') {
94 + $items[] = $this->item($form);
101 95 }
102 96 }
103 -
104 - return $content;
97 + $items[] = $this->item('-3');
98 + return $items;
105 99 }
106 100
107 - /**
108 - * Get entries for export
109 - *
110 - * @param string $item - Item
111 - * @param string $name - Entries names
112 - *
113 - * @return array() - Entries list
114 - */
115 - public function datasets($item = false, $name = false) {
101 + // datasets
102 + public function datasets($item_id = false, $name = false) {
103 + $datasets = [];
104 + if ($item_id) {
105 + if ($item_id == '-3') {
106 + $entries = get_users(
107 + [
108 + 'fields' => [
109 + 'ID', 'user_login',
110 + ],
111 + ]
112 + );
116 113
117 - $datasets = array();
118 -
119 - if ($item) {
120 - $datasets_tmp = get_posts(
121 - array(
122 - 'post_type' => $item,
123 - 'numberposts' => -1,
124 - 'post_status' => array(
125 - 'publish',
126 - 'private'
127 - )
128 - ));
129 -
130 - if ($datasets_tmp) {
131 - foreach ($datasets_tmp as $key => $dataset) {
132 - $this->set('item', $item);
133 - $this->set('dataset', $dataset->ID);
134 -
135 - $dataset_title = $this->render($name);
136 - if (!$dataset_title) {
137 - $dataset_title = isset($dataset->post_title) && $dataset->post_title ? $dataset->post_title : $dataset->ID;
114 + if ($entries) {
115 + $this->set('item', $item_id);
116 + foreach ($entries as $key => $entry) {
117 + $this->set('dataset', $entry->ID);
118 + $entry_title = $this->render($name);
119 + if (!$entry_title) {
120 + $entry_title = isset($entry->user_login) && $entry->user_login ? $entry->user_login : $entry->ID;
121 + }
122 + $datasets[] = [
123 + 'key' => $entry->ID,
124 + 'value' => $entry_title,
125 + ];
138 126 }
139 - $datasets[] = array(
140 - 'key' => $dataset->ID,
141 - 'value' => $dataset_title
127 + }
128 + } else {
129 + $wpml = $this->helper->load('translator')->isWPML();
130 + if ($wpml) {
131 + $lang = apply_filters('wpml_current_language', null);
132 + $entries = get_posts(
133 + [
134 + 'post_type' => $item_id,
135 + 'numberposts' => -1,
136 + 'post_status' => 'any',
137 + 'lang' => $lang,
138 + 'suppress_filters' => false,
139 + ]
142 140 );
141 + } else {
142 + $entries = get_posts(
143 + [
144 + 'post_type' => $item_id,
145 + 'numberposts' => -1,
146 + 'post_status' => 'any',
147 + ]
148 + );
143 149 }
150 + if ($entries) {
151 + $this->set('item', $item_id);
152 + foreach ($entries as $key => $entry) {
153 + $this->set('dataset', $entry->ID);
154 + $entry_title = $this->render($name);
155 + if (!$entry_title) {
156 + $entry_title = isset($entry->post_title) && $entry->post_title ? $entry->post_title : $entry->ID;
157 + }
158 + $datasets[] = [
159 + 'key' => $entry->ID,
160 + 'value' => $entry_title,
161 + ];
162 + }
163 + }
144 164 }
145 165 }
146 -
147 166 return $datasets;
148 167 }
149 168
150 - /**
151 - * Get dataset
152 - *
153 - * @param int $dataset - Dataset ID
154 - *
155 - * @return object - Dataset
156 - */
157 - public function dataset($dataset = false) {
169 + // get dataset actions
170 + public function get_dataset_actions($dataset_id = false) {
171 + $dataset_id = (int) $dataset_id;
172 + if (!$dataset_id) {
173 + return false;
174 + }
175 + $actions = new stdClass();
176 + if ($this->get('item') == '-3') {
177 + $actions->view = $this->helper->get_url(
178 + [
179 + 'user_id' => $dataset_id,
180 + ], 'user-edit.php?'
181 + );
182 + } else {
183 + $actions->view = $this->helper->get_url(
184 + [
185 + 'post' => $dataset_id,
186 + 'action' => 'edit',
187 + ], 'post.php?'
188 + );
189 + }
190 + $actions->delete = false;
191 + return $actions;
192 + }
158 193
159 - $dataset = (int) $dataset;
160 -
161 - if (!$dataset) {
194 + // get template actions
195 + public function get_template_actions($template = false) {
196 + $template = (int) $template;
197 + if (!$template) {
162 198 return;
163 199 }
164 -
165 - $data = new stdClass();
166 - $data->url = $this->helper->get_url(array('post' => $dataset, 'action' => 'edit'), 'post.php?');
167 -
168 - return $data;
200 + $actions = new stdClass();
201 + $actions->delete = false;
202 + return $actions;
169 203 }
170 204
171 - /**
172 - * Get item
173 - *
174 - * @param string $item - Item
175 - *
176 - * @return object - Item
177 - */
178 - public function item($item = false) {
179 -
180 - if (!$item && $this->get('item')) {
181 - $item = $this->get('item');
205 + // item
206 + public function item($item_id = false) {
207 + if (!$item_id && $this->get('item')) {
208 + $item_id = $this->get('item');
182 209 }
183 -
184 - $form = new stdClass();
185 - $post = get_post_type_object($item);
186 - if ($post) {
187 - $form->id = $item;
188 - $form->name = $post->label ? $post->label : $item;
189 - $form->url = $this->helper->get_url(array('post_type' => $item), 'edit.php?');
210 + $item = new stdClass();
211 + if ($item_id == '-3') {
212 + $item->id = $item_id;
213 + $item->name = __('Users');
214 + $item->url = $this->helper->get_url([], 'users.php');
190 215 } else {
191 - $form->id = '';
192 - $form->name = '';
193 - $form->url = 'javascript:void(0);';
216 + $form = get_post_type_object($item_id);
217 + if ($form) {
218 + $item->id = $item_id;
219 + $item->name = $form->label ? $form->label : $item_id;
220 + $item->url = $this->helper->get_url(['post_type' => $item_id], 'edit.php?');
221 + } else {
222 + $item->id = '';
223 + $item->name = '';
224 + $item->url = '';
225 + }
194 226 }
195 -
196 - return $form;
227 + return $item;
197 228 }
198 229
230 + // load filters
199 231 public function load_filters() {
200 - add_filter('the_content', array($this, 'filter_content'), 10, 2);
201 - add_filter('pum_popup_content', array($this, 'filter_content'), 10, 2);
232 + add_filter('the_content', [$this, 'filter_the_content'], 10, 2);
233 + add_filter('widget_text', [$this, 'filter_content_custom']);
234 + add_filter('widget_block_content', [$this, 'filter_content_custom']);
235 +
236 + /**
237 + * Popup Maker – Popup for opt-ins, lead gen, & more
238 + * https://wordpress.org/plugins/popup-maker/
239 + */
240 + add_filter('pum_popup_content', [$this, 'filter_the_content'], 10, 2);
241 +
242 + /**
243 + * Events Manager
244 + * https://wordpress.org/plugins/events-manager/
245 + */
246 + add_filter('em_event_output_placeholder', [$this, 'filter_content_custom'], 0);
247 + add_filter('em_event_output', [$this, 'filter_content_custom']);
248 + add_filter('em_booking_output_placeholder', [$this, 'filter_content_custom'], 0);
249 + add_filter('em_booking_output', [$this, 'filter_content_custom']);
250 + add_filter('em_location_output_placeholder', [$this, 'filter_content_custom'], 0);
251 + add_filter('em_location_output', [$this, 'filter_content_custom']);
252 + add_filter('em_category_output_placeholder', [$this, 'filter_content_custom'], 0);
253 +
254 + /**
255 + * Beaver Builder – WordPress Page Builder
256 + * https://wordpress.org/plugins/beaver-builder-lite-version/
257 + */
258 + add_filter('fl_builder_before_render_shortcodes', [$this, 'filter_content_loop']);
259 +
260 + /**
261 + * WPBakery Page Builder Image Object Link
262 + */
263 + add_filter('vc_map_get_attributes', [$this, 'filter_vc_map_get_attributes'], 10, 2);
264 +
265 + /**
266 + * Flatsome theme global tab content
267 + */
268 + add_filter('theme_mod_tab_content', [$this, 'filter_content_custom']);
269 +
270 + /**
271 + * MemberPress Mail attachments
272 + * https://memberpress.com/
273 + */
274 + add_filter('mepr_email_send_attachments', [$this, 'filter_mepr_email_send_attachments'], 10, 4);
275 + add_filter('the_content', [$this, 'filter_mepr_the_content'], 99);
276 + add_filter('mepr_custom_thankyou_message', [$this, 'filter_mepr_custom_thankyou_message']);
277 +
278 + /**
279 + * Thrive Theme Builder dynamic shortcode support
280 + */
281 + add_filter('thrive_theme_template_content', [$this, 'filter_thrive_theme_template_content']);
282 +
283 + /**
284 + * WPBakery Page Builder Grid Item
285 + * [e2pdf-download id="1" dataset="{{ post_data:ID }}"]
286 + */
287 + add_filter('vc_basic_grid_items_list', [$this, 'filter_vc_basic_grid_items_list']);
288 +
289 + /**
290 + * Themify Builder dynamic shortcode support
291 + * https://wordpress.org/plugins/themify-builder/
292 + */
293 + add_filter('themify_builder_module_content', [$this, 'filter_themify_builder_module_content']);
294 +
295 + /**
296 + * Impreza theme by Up Solutions
297 + * https://themeforest.net/item/impreza-retina-responsive-wordpress-theme/6434280
298 + */
299 + add_filter('us_content_template_the_content', [$this, 'filter_content_custom']);
300 +
301 + /**
302 + * Cornerstone Builder
303 + * https://theme.co/cornerstone/
304 + */
305 + add_filter('cs_element_pre_render', [$this, 'filter_cs_element_pre_render']);
306 +
307 + /**
308 + * Divi Theme Builder
309 + * https://www.elegantthemes.com/
310 + */
311 + add_filter('et_pb_module_content', [$this, 'filter_et_pb_module_content'], 30, 6);
312 +
313 + /**
314 + * User Registration & Membership – Custom Registration Form, Login Form, and User Profile
315 + * https://wordpress.org/plugins/user-registration/
316 + */
317 + add_filter('user_registration_smart_tag_values', [$this, 'filter_user_registration_smart_tag_values'], 0);
318 +
319 + /**
320 + * Ultimate Member – User Profile, Registration, Login, Member Directory, Content Restriction & Membership Plugin
321 + * https://wordpress.org/plugins/ultimate-member/
322 + */
323 + add_filter('um_email_send_message_content', [$this, 'filter_um_email_send_message_content']);
324 +
325 + /**
326 + * Shortcodes do not render when the Toolset template is used
327 + * https://toolset.com/
328 + */
329 + add_filter('wpv_filter_content_template_output', [$this, 'filter_wpv_filter_content_template_output']);
330 +
331 + /* Hooks */
332 + add_filter('post_row_actions', [$this, 'hook_wordpress_row_actions'], 10, 2);
333 + add_filter('page_row_actions', [$this, 'hook_wordpress_row_actions'], 10, 2);
334 + add_filter('user_row_actions', [$this, 'hook_wordpress_row_actions'], 10, 2);
202 335 }
203 336
204 - /**
205 - * Render value according to content
206 - *
207 - * @param string $value - Content
208 - * @param string $type - Type of rendering value
209 - * @param array $field - Field details
210 - *
211 - * @return string - Fully rendered value
212 - */
213 - public function render($value, $type = false, $field = array()) {
337 + // load actions
338 + public function load_actions() {
339 + /**
340 + * Elementor Website Builder – More than Just a Page Builder
341 + * https://wordpress.org/plugins/elementor/
342 + */
343 + add_action('elementor/widget/before_render_content', [$this, 'action_elementor_widget_before_render_content']);
344 + add_action('elementor/frontend/widget/before_render', [$this, 'action_elementor_widget_before_render_content'], 5);
214 345
215 - $value = $this->render_shortcodes($value, $type, $field);
216 - $value = $this->strip_shortcodes($value);
346 + /**
347 + * JetEngine: WordPress Plugin for Elementor
348 + * https://crocoblock.com
349 + */
350 + add_action('jet-engine/listing/grid/before-render', [$this, 'action_jet_engine_listing_grid_before_render']);
351 + add_action('jet-engine/listing/grid/after-render', [$this, 'action_jet_engine_listing_grid_after_render']);
217 352
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 - }
227 - }
353 + /**
354 + * Happy Addons for Elementor
355 + * https://wordpress.org/plugins/happy-elementor-addons/ compatibility fix
356 + */
357 + add_action('elementor/frontend/before_render', [$this, 'action_elementor_widget_before_render_content'], 0);
228 358
229 - if ($type === 'value') {
230 - $value = $this->convert_shortcodes($value, true);
359 + /**
360 + * MemberPress Mail attachments remove
361 + * https://memberpress.com/
362 + */
363 + add_action('mepr_email_sent', [$this, 'action_mepr_email_sent']);
364 +
365 + /**
366 + * User Registration & Membership – Custom Registration Form, Login Form, and User Profile
367 + * https://wordpress.org/plugins/user-registration/
368 + */
369 + add_action('user_registration_email_send_before', [$this, 'action_user_registration_email_send_before']);
370 + add_action('user_registration_email_send_after', [$this, 'action_user_registration_email_send_after']);
371 +
372 + /**
373 + * Ultimate Member – User Profile, Registration, Login, Member Directory, Content Restriction & Membership Plugin
374 + * https://wordpress.org/plugins/ultimate-member/
375 + */
376 + add_action('um_before_email_notification_sending', [$this, 'action_um_before_email_notification_sending']);
377 + add_action('um_after_email_notification_sending', [$this, 'action_um_after_email_notification_sending']);
378 +
379 + /* Hooks */
380 + add_action('add_meta_boxes', [$this, 'hook_wordpress_page_edit']);
381 + }
382 +
383 + // render
384 + public function render($value, $field = [], $convert_shortcodes = true, $raw = false) {
385 + $value = $this->render_shortcodes($value, $field);
386 + if (!$raw) {
387 + $value = $this->strip_shortcodes($value);
388 + $value = $this->convert_shortcodes($value, $convert_shortcodes, isset($field['type']) && $field['type'] == 'e2pdf-html' ? true : false);
389 + $value = $this->helper->load('field')->render_checkbox($value, $this, $field);
231 390 }
232 -
233 391 return $value;
234 392 }
235 393
236 - /**
237 - * Render shortcodes which available in this extension
238 - *
239 - * @param string $value - Content
240 - * @param string $type - Type of rendering value
241 - * @param array $field - Field details
242 - *
243 - * @return string - Value with rendered shortcodes
244 - */
245 - public function render_shortcodes($value, $type = false, $field = array()) {
394 + // render shortcodes
395 + public function render_shortcodes($value, $field = []) {
246 396
247 - $dataset = $this->get('dataset');
248 - $item = $this->get('item');
249 - $args = $this->get('args');
250 - $user_id = $this->get('user_id');
251 - $template_id = $this->get('template_id') ? $this->get('template_id') : '0';
252 - $element_id = isset($field['element_id']) ? $field['element_id'] : '0';
397 + $element_id = isset($field['element_id']) ? $field['element_id'] : false;
253 398
254 399 if ($this->verify()) {
400 + /**
401 + * Set current Post for Toolset Views
402 + * https://toolset.com/
403 + */
404 + do_action('wpv_action_wpv_set_top_current_post', $this->get('cached_post'));
255 405
256 - $args = apply_filters('e2pdf_extension_render_shortcodes_args', $args, $element_id, $template_id, $item, $dataset);
257 -
258 - $post = get_post($dataset);
259 -
260 - $wordpress_shortcodes = array(
406 + $wordpress_shortcodes = [
261 407 'id',
262 408 'post_author',
263 409 'post_date',
264 410 'post_date_gmt',
@@ -281,461 +427,1340 @@
281 427 'post_type',
282 428 'post_mime_type',
283 429 'comment_count',
284 430 'filter',
285 - 'post_thumbnail'
286 - );
431 + 'post_thumbnail',
432 + 'get_the_post_thumbnail',
433 + 'get_the_post_thumbnail_url',
434 + 'get_permalink',
435 + 'get_post_permalink',
436 + ];
287 437
288 438 if (false !== strpos($value, '[')) {
289 -
290 - $shortcode_tags = array(
291 - 'meta',
292 - 'terms',
293 - 'e2pdf-wp',
294 - 'e2pdf-content',
295 - 'e2pdf-user',
296 - 'e2pdf-arg'
297 - );
298 -
299 - $shortcode_tags = array_merge($shortcode_tags, $wordpress_shortcodes);
300 -
439 + $value = $this->helper->load('field')->pre_shortcodes($value, $this, $field);
440 + $value = $this->helper->load('field')->inner_shortcodes($value, $this, $field);
441 + if ($this->get('item') == '-3') {
442 + $shortcode_tags = [
443 + 'acf',
444 + ];
445 + } else {
446 + $shortcode_tags = [
447 + 'meta',
448 + 'terms',
449 + 'e2pdf-wp',
450 + 'e2pdf-wp-term',
451 + 'e2pdf-content',
452 + 'acf',
453 + ];
454 + $shortcode_tags = array_merge($shortcode_tags, $wordpress_shortcodes);
455 + }
301 456 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
302 457 $tagnames = array_intersect($shortcode_tags, $matches[1]);
303 -
304 458 if (!empty($tagnames)) {
305 -
306 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
307 -
308 - preg_match_all("/$pattern/", $value, $shortcodes);
309 -
459 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
310 460 foreach ($shortcodes[0] as $key => $shortcode_value) {
311 - $shortcode = array();
312 - $shortcode[1] = $shortcodes[1][$key];
313 - $shortcode[2] = $shortcodes[2][$key];
314 - $shortcode[3] = $shortcodes[3][$key];
315 - $shortcode[4] = $shortcodes[4][$key];
316 - $shortcode[5] = $shortcodes[5][$key];
317 - $shortcode[6] = $shortcodes[6][$key];
318 -
461 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
319 462 $atts = shortcode_parse_atts($shortcode[3]);
320 -
321 463 if ($shortcode[2] === 'e2pdf-content') {
322 - if (!isset($atts['id']) && isset($post->ID) && $post->ID) {
323 - $shortcode[3] .= " id=\"" . $post->ID . "\"";
324 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]", $value);
464 + if (!isset($atts['id']) && isset($this->get('cached_post')->ID) && $this->get('cached_post')->ID) {
465 + $shortcode[3] .= ' id=' . $this->get('cached_post')->ID . '';
466 + $value = str_replace($shortcode_value, '[' . $shortcode[2] . $shortcode[3] . ']', $value);
325 467 }
326 - } else if ($shortcode[2] === 'e2pdf-user') {
327 - if (!isset($atts['id']) && $user_id) {
328 - $shortcode[3] .= " id=\"" . $user_id . "\"";
329 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]", $value);
468 + } elseif ($shortcode[2] === 'meta' || $shortcode[2] === 'terms' || $shortcode[2] == 'e2pdf-wp') {
469 + if (!isset($atts['id']) && isset($this->get('cached_post')->ID) && $this->get('cached_post')->ID) {
470 + $shortcode[3] .= ' id=' . $this->get('cached_post')->ID . '';
330 471 }
331 - } else if ($shortcode['2'] === 'meta' || $shortcode['2'] === 'terms' || $shortcode['2'] == 'e2pdf-wp') {
332 - if (!isset($atts['id']) && isset($post->ID) && $post->ID) {
333 - $shortcode[3] .= " id=\"" . $post->ID . "\"";
472 + if ($shortcode[2] === 'meta') {
473 + $shortcode[3] .= ' meta=true';
334 474 }
335 - if ($shortcode['2'] === 'meta') {
336 - $shortcode[3] .= " meta=\"true\"";
475 + if ($shortcode[2] === 'terms') {
476 + $shortcode[3] .= ' terms=true';
337 477 }
338 - if ($shortcode['2'] === 'terms') {
339 - $shortcode[3] .= " terms=\"true\"";
478 + if (substr($shortcode_value, -11) === '[/e2pdf-wp]' || substr($shortcode_value, -8) === '[/terms]' || substr($shortcode_value, -7) === '[/meta]') {
479 + if ($shortcode[5]) {
480 + $shortcode[5] = $this->render($shortcode[5], [], false);
481 + }
482 + $value = str_replace($shortcode_value, '[e2pdf-wp' . $shortcode[3] . ']' . $shortcode[5] . '[/e2pdf-wp]', $value);
483 + } else {
484 + $value = str_replace($shortcode_value, '[e2pdf-wp' . $shortcode[3] . ']', $value);
340 485 }
341 -
342 - $value = str_replace($shortcode_value, "[e2pdf-wp" . $shortcode['3'] . "]", $value);
343 - } elseif (in_array($shortcode[2], $wordpress_shortcodes)) {
344 - if (!isset($atts['id']) && isset($post->ID) && $post->ID) {
345 - $shortcode[3] .= " id=\"" . $post->ID . "\"";
486 + } elseif ($shortcode[2] === 'e2pdf-wp-term') {
487 + if (substr($shortcode_value, -16) === '[/e2pdf-wp-term]') {
488 + if ($shortcode[5]) {
489 + $shortcode[5] = $this->render($shortcode[5], [], false);
490 + }
491 + $value = str_replace($shortcode_value, '[e2pdf-wp-term' . $shortcode[3] . ']' . $shortcode[5] . '[/e2pdf-wp-term]', $value);
346 492 }
347 - $shortcode[3] .= " key=\"" . $shortcode[2] . "\"";
348 - $value = str_replace($shortcode_value, "[e2pdf-wp" . $shortcode['3'] . "]", $value);
349 - } elseif ($shortcode['2'] == 'e2pdf-arg') {
350 - if (isset($atts['key']) && isset($args[$atts['key']])) {
351 - $sub_value = $this->strip_shortcodes($args[$atts['key']]);
352 - $value = str_replace($shortcode_value, $sub_value, $value);
353 - } else {
354 - $value = str_replace($shortcode_value, '', $value);
493 + } elseif (in_array($shortcode[2], $wordpress_shortcodes, false)) {
494 + if (!isset($atts['id']) && isset($this->get('cached_post')->ID) && $this->get('cached_post')->ID) {
495 + $shortcode[3] .= ' id=' . $this->get('cached_post')->ID . '';
355 496 }
497 + $shortcode[3] .= ' key=' . $shortcode[2] . '';
498 + $value = str_replace($shortcode_value, '[e2pdf-wp' . $shortcode[3] . ']', $value);
499 + } elseif ($shortcode[2] === 'acf') {
500 + if (!isset($atts['post_id']) && isset($this->get('cached_post')->ID) && $this->get('cached_post')->ID) {
501 + if ($this->get('item') == '-3') {
502 + $shortcode[3] .= ' post_id=user_' . $this->get('cached_post')->ID . '';
503 + } else {
504 + $shortcode[3] .= ' post_id=' . $this->get('cached_post')->ID . '';
505 + }
506 + $value = str_replace($shortcode_value, '[' . $shortcode[2] . $shortcode[3] . ']', $value);
507 + }
356 508 }
357 509 }
358 510 }
511 + $value = $this->helper->load('field')->wrapper_shortcodes($value, $this, $field);
512 + }
359 513
360 - $shortcode_tags = array(
361 - 'e2pdf-format-number',
362 - 'e2pdf-format-date',
363 - 'e2pdf-format-output',
364 - );
365 - $shortcode_tags = apply_filters('e2pdf_extension_render_shortcodes_tags', $shortcode_tags);
366 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
367 - $tagnames = array_intersect($shortcode_tags, $matches[1]);
514 + add_filter('frm_filter_view', [$this, 'filter_frm_filter_view']);
515 + $value = $this->helper->load('field')->do_shortcodes($value, $this, $field);
516 + $value = $this->helper->load('field')->render(
517 + apply_filters('e2pdf_extension_render_shortcodes_pre_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false),
518 + $this,
519 + $field
520 + );
521 + remove_filter('frm_filter_view', [$this, 'filter_frm_filter_view']);
522 + }
523 + return apply_filters(
524 + 'e2pdf_extension_render_shortcodes_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false
525 + );
526 + }
368 527
369 - if (!empty($tagnames)) {
528 + // strip shortcodes
529 + public function strip_shortcodes($value) {
530 + $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
531 + return $value;
532 + }
370 533
371 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
534 + // convert shortcodes
535 + public function convert_shortcodes($value, $to = false, $html = false) {
536 + if ($value) {
537 + if ($to) {
538 + $value = str_replace('&#91;', '[', $value);
539 + if (!$html) {
540 + $value = wp_specialchars_decode($value, ENT_QUOTES);
541 + }
542 + } else {
543 + $value = str_replace('[', '&#91;', $value);
544 + }
545 + }
546 + return $value;
547 + }
372 548
373 - preg_match_all("/$pattern/", $value, $shortcodes);
374 - foreach ($shortcodes[0] as $key => $shortcode_value) {
375 - $shortcode = array();
376 - $shortcode[1] = $shortcodes[1][$key];
377 - $shortcode[2] = $shortcodes[2][$key];
378 - $shortcode[3] = $shortcodes[3][$key];
379 - $shortcode[4] = $shortcodes[4][$key];
380 - $shortcode[5] = $shortcodes[5][$key];
381 - $shortcode[6] = $shortcodes[6][$key];
549 + // auto
550 + public function auto() {
382 551
383 - if (!$shortcode['5']) {
384 - $sub_value = '';
385 - } elseif (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
386 - $sub_value = $this->render($shortcode['5'], $type);
387 - } else {
388 - $sub_value = $this->render($shortcode['5'], $type, $field);
389 - }
390 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]" . $sub_value . "[/" . $shortcode['2'] . "]", $value);
552 + $response = [];
553 + $elements = [];
554 +
555 + if ($this->get('item') == '-3') {
556 + $elements[] = [
557 + 'type' => 'e2pdf-html',
558 + 'block' => true,
559 + 'properties' => [
560 + 'top' => '20',
561 + 'left' => '20',
562 + 'right' => '20',
563 + 'width' => '100%',
564 + 'height' => 'auto',
565 + 'value' => '<h1>[e2pdf-user key="user_login"]</h1>',
566 + ],
567 + ];
568 + $elements[] = [
569 + 'type' => 'e2pdf-image',
570 + 'block' => true,
571 + 'properties' => [
572 + 'top' => '20',
573 + 'left' => '20',
574 + 'right' => '20',
575 + 'width' => '100%',
576 + 'height' => '100',
577 + 'vertical' => 'top',
578 + 'value' => '[e2pdf-user key="get_avatar_url"]',
579 + ],
580 + ];
581 + $elements[] = [
582 + 'type' => 'e2pdf-html',
583 + 'block' => true,
584 + 'properties' => [
585 + 'top' => '20',
586 + 'left' => '20',
587 + 'right' => '20',
588 + 'width' => '100%',
589 + 'height' => 'auto',
590 + 'value' => 'ID: [e2pdf-user key="ID"]',
591 + ],
592 + ];
593 + $elements[] = [
594 + 'type' => 'e2pdf-html',
595 + 'block' => true,
596 + 'properties' => [
597 + 'top' => '20',
598 + 'left' => '20',
599 + 'right' => '20',
600 + 'width' => '100%',
601 + 'height' => 'auto',
602 + 'value' => 'First Name: [e2pdf-user key="user_firstname"]',
603 + ],
604 + ];
605 + $elements[] = [
606 + 'type' => 'e2pdf-html',
607 + 'block' => true,
608 + 'properties' => [
609 + 'top' => '20',
610 + 'left' => '20',
611 + 'right' => '20',
612 + 'width' => '100%',
613 + 'height' => 'auto',
614 + 'value' => 'Last Name: [e2pdf-user key="user_lastname"]',
615 + ],
616 + ];
617 + $elements[] = [
618 + 'type' => 'e2pdf-html',
619 + 'block' => true,
620 + 'properties' => [
621 + 'top' => '20',
622 + 'left' => '20',
623 + 'right' => '20',
624 + 'width' => '100%',
625 + 'height' => 'auto',
626 + 'value' => 'Email: [e2pdf-user key="user_email"]',
627 + ],
628 + ];
629 + $elements[] = [
630 + 'type' => 'e2pdf-html',
631 + 'block' => true,
632 + 'properties' => [
633 + 'top' => '20',
634 + 'left' => '20',
635 + 'right' => '20',
636 + 'width' => '100%',
637 + 'height' => 'auto',
638 + 'value' => 'Registered: [e2pdf-user key="user_registered"]',
639 + ],
640 + ];
641 + } else {
642 + $elements[] = [
643 + 'type' => 'e2pdf-html',
644 + 'block' => true,
645 + 'properties' => [
646 + 'top' => '20',
647 + 'left' => '20',
648 + 'right' => '20',
649 + 'width' => '100%',
650 + 'height' => 'auto',
651 + 'value' => '<h1>[e2pdf-wp key="post_title"]</h1>',
652 + ],
653 + ];
654 + $elements[] = [
655 + 'type' => 'e2pdf-html',
656 + 'block' => true,
657 + 'properties' => [
658 + 'top' => '20',
659 + 'left' => '20',
660 + 'right' => '20',
661 + 'width' => '100%',
662 + 'height' => 'auto',
663 + 'value' => 'Post name: [e2pdf-wp key="post_name"]',
664 + ],
665 + ];
666 + $elements[] = [
667 + 'type' => 'e2pdf-html',
668 + 'block' => true,
669 + 'properties' => [
670 + 'top' => '20',
671 + 'left' => '20',
672 + 'right' => '20',
673 + 'width' => '100%',
674 + 'height' => 'auto',
675 + 'value' => 'Post type: [e2pdf-wp key="post_type"]',
676 + ],
677 + ];
678 + $elements[] = [
679 + 'type' => 'e2pdf-html',
680 + 'block' => true,
681 + 'properties' => [
682 + 'top' => '20',
683 + 'left' => '20',
684 + 'right' => '20',
685 + 'width' => '100%',
686 + 'height' => 'auto',
687 + 'value' => 'ID: [e2pdf-wp key="id"]',
688 + ],
689 + ];
690 + $elements[] = [
691 + 'type' => 'e2pdf-html',
692 + 'block' => true,
693 + 'properties' => [
694 + 'top' => '20',
695 + 'left' => '20',
696 + 'right' => '20',
697 + 'width' => '100%',
698 + 'height' => 'auto',
699 + 'value' => 'Author: [e2pdf-wp key="post_author"]',
700 + ],
701 + ];
702 + $elements[] = [
703 + 'type' => 'e2pdf-html',
704 + 'block' => true,
705 + 'properties' => [
706 + 'top' => '20',
707 + 'left' => '20',
708 + 'right' => '20',
709 + 'width' => '100%',
710 + 'height' => '300',
711 + 'value' => '[e2pdf-wp key="post_content"]',
712 + ],
713 + ];
714 + $elements[] = [
715 + 'type' => 'e2pdf-html',
716 + 'block' => true,
717 + 'properties' => [
718 + 'top' => '20',
719 + 'left' => '20',
720 + 'right' => '20',
721 + 'width' => '100%',
722 + 'height' => 'auto',
723 + 'value' => 'Created: [e2pdf-wp key="post_date"]',
724 + ],
725 + ];
726 + $elements[] = [
727 + 'type' => 'e2pdf-html',
728 + 'block' => true,
729 + 'properties' => [
730 + 'top' => '20',
731 + 'left' => '20',
732 + 'right' => '20',
733 + 'width' => '100%',
734 + 'height' => 'auto',
735 + 'value' => 'Modified: [e2pdf-wp key="post_modified"]',
736 + ],
737 + ];
738 + }
739 + $response['page'] = [
740 + 'bottom' => '20',
741 + 'top' => '20',
742 + 'left' => '20',
743 + 'right' => '20',
744 + ];
745 +
746 + $response['elements'] = $elements;
747 + return $response;
748 + }
749 +
750 + // before render content widget action
751 + public function action_elementor_widget_before_render_content($widget) {
752 + if ($widget && ($widget->get_name() == 'shortcode' || $widget->get_name() == 'text-editor')) {
753 + $content = $widget->get_name() == 'shortcode' ? $widget->get_settings('shortcode') : $widget->get_settings('editor');
754 + if ($content && false !== strpos($content, '[e2pdf-')) {
755 + $wp_reset_postdata = true;
756 + if (class_exists('\ElementorPro\Plugin') && class_exists('\ElementorPro\Modules\LoopBuilder\Documents\Loop')) {
757 + $document = \ElementorPro\Plugin::elementor()->documents->get_current();
758 + if ($document && $document instanceof \ElementorPro\Modules\LoopBuilder\Documents\Loop) {
759 + $wp_reset_postdata = false;
391 760 }
392 761 }
762 + if ($widget->get_name() == 'shortcode') {
763 + $widget->set_settings('shortcode', $this->filter_content($content, false, $wp_reset_postdata));
764 + } elseif ($widget->get_name() == 'text-editor' && !$wp_reset_postdata) {
765 + $widget->set_settings('editor', $this->filter_content($content, false, $wp_reset_postdata));
766 + }
393 767 }
768 + }
769 + }
394 770
395 - $value = do_shortcode($value);
771 + // jet engine listing grid before render action
772 + public function action_jet_engine_listing_grid_before_render($listing_grid) {
773 + $this->set('queried_object', true);
774 + }
396 775
397 - if (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
398 - $esig = isset($field['properties']['esig']) && $field['properties']['esig'] ? true : false;
399 - if ($esig) {
400 - //process e-signature
401 - $value = "";
402 - } else {
403 - if (!$this->helper->load('image')->get_image($value)) {
404 - $value = $this->strip_shortcodes($value);
405 - if (
406 - $value &&
407 - trim($value) != "" &&
408 - extension_loaded('gd') &&
409 - function_exists('imagettftext')
410 - ) {
411 - if (isset($field['properties']['text_color']) && $field['properties']['text_color']) {
412 - $penColour = $this->helper->load('convert')->to_hex_color($field['properties']['text_color']);
413 - } else {
414 - $penColour = array(0x14, 0x53, 0x94);
415 - }
776 + // jet engine listing grid after render action
777 + public function action_jet_engine_listing_grid_after_render($listing_grid) {
778 + $this->set('queried_object', false);
779 + }
416 780
417 - $default_options = array(
418 - 'imageSize' => array(isset($field['width']) ? $field['width'] : '400', isset($field['height']) ? $field['height'] : '150'),
419 - 'bgColour' => 'transparent',
420 - 'penColour' => $penColour
421 - );
781 + /**
782 + * Delete attachments that were sent by MemberPress email
783 + * https://memberpress.com/
784 + */
785 + public function action_mepr_email_sent() {
786 + $files = $this->helper->get('wordpress_attachments_mepr');
787 + if (is_array($files) && !empty($files)) {
788 + foreach ($files as $key => $file) {
789 + $this->helper->delete_dir(dirname($file) . '/');
790 + }
791 + $this->helper->deset('wordpress_attachments_mepr');
792 + }
793 + }
422 794
423 - $options = array();
424 - $options = apply_filters('e2pdf_image_sig_output_options', $options, $element_id, $template_id);
425 - $options = array_merge($default_options, $options);
795 + // registration email send before action
796 + public function action_user_registration_email_send_before() {
797 + add_filter('wp_mail', [$this, 'filter_wp_mail'], 11);
798 + }
426 799
427 - $model_e2pdf_font = new Model_E2pdf_Font();
800 + // registration email send after action
801 + public function action_user_registration_email_send_after() {
802 + remove_filter('wp_mail', [$this, 'filter_wp_mail'], 11);
803 + $files = $this->helper->get('wordpress_attachments');
804 + if (is_array($files) && !empty($files)) {
805 + foreach ($files as $key => $file) {
806 + $this->helper->delete_dir(dirname($file) . '/');
807 + }
808 + $this->helper->deset('wordpress_attachments');
809 + }
810 + }
428 811
429 - $font = false;
430 - if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
431 - $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
432 - }
433 - if (!$font) {
434 - $font = $model_e2pdf_font->get_font_path('Noto Sans');
435 - }
812 + /**
813 + * Ultimate Member – User Profile, Registration, Login, Member Directory, Content Restriction & Membership Plugin
814 + * https://wordpress.org/plugins/ultimate-member/
815 + */
816 + public function action_um_before_email_notification_sending() {
817 + add_filter('wp_mail', [$this, 'filter_wp_mail_um'], 11);
818 + }
436 819
437 - $size = 150;
438 - if (isset($field['properties']['text_font_size']) && $field['properties']['text_font_size']) {
439 - $size = $field['properties']['text_font_size'];
440 - }
441 -
442 - $model_e2pdf_signature = new Model_E2pdf_Signature();
443 - $value = $model_e2pdf_signature->ttf_signature($value, $size, $font, $options);
444 - } else {
445 - $value = "";
446 - }
447 - }
448 - }
449 - } else {
450 - $value = $this->convert_shortcodes($value);
820 + /**
821 + * Ultimate Member – User Profile, Registration, Login, Member Directory, Content Restriction & Membership Plugin
822 + * https://wordpress.org/plugins/ultimate-member/
823 + */
824 + public function action_um_after_email_notification_sending() {
825 + remove_filter('wp_mail', [$this, 'filter_wp_mail_um'], 11);
826 + $files = $this->helper->get('wordpress_attachments_um_del');
827 + if (is_array($files) && !empty($files)) {
828 + foreach ($files as $key => $file) {
829 + $this->helper->delete_dir(dirname($file) . '/');
451 830 }
831 + $this->helper->deset('wordpress_attachments_um');
832 + $this->helper->deset('wordpress_attachments_um_del');
452 833 }
453 -
454 - $value = apply_filters('e2pdf_extension_render_shortcodes_value', $value, $element_id, $template_id, $item, $dataset);
455 -
456 - return $value;
457 834 }
458 835
459 - public function filter_custom_shortcodes() {
460 -
836 + /**
837 + * Enable / Disable pre-rendering of E2Pdf shortcodes in the Toolset template.
838 + * https://toolset.com/
839 + */
840 + public function filter_wpv_filter_content_template_output($content) {
841 + add_filter('render_block', [$this, 'filter_render_block_toolset_disable'], 9, 2);
842 + add_filter('render_block', [$this, 'filter_render_block_toolset_enable'], 11, 2);
843 + return $content;
461 844 }
462 845
463 846 /**
464 - * Strip unused shortcodes
465 - *
466 - * @param string $value - Content
467 - *
468 - * @return string - Value with removed unused shortcodes
847 + * Disable pre-rendering of E2Pdf shortcodes in the Toolset template.
848 + * https://toolset.com/
469 849 */
470 - public function strip_shortcodes($value) {
471 - $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', "", $value);
472 - return $value;
850 + public function filter_render_block_toolset_disable($block_content, $block) {
851 + if (
852 + !empty($block['blockName']) && strpos($block['blockName'], 'toolset-blocks/') === 0 && false !== strpos($block_content, '[e2pdf-')
853 + ) {
854 + remove_shortcode('e2pdf-download');
855 + remove_shortcode('e2pdf-view');
856 + remove_shortcode('e2pdf-save');
857 + remove_shortcode('e2pdf-zapier');
858 + remove_shortcode('e2pdf-adobesign');
859 + }
860 + return $block_content;
473 861 }
474 862
475 863 /**
476 - * Convert "shortcodes" inside value string
477 - *
478 - * @param string $value - Value string
479 - * @param bool $to - Convert From/To
480 - *
481 - * @return string - Converted value
864 + * Enable rendering of E2Pdf shortcodes in the Toolset template.
865 + * https://toolset.com/
482 866 */
483 - public function convert_shortcodes($value, $to = false) {
484 - if ($value) {
485 - if ($to) {
486 - $value = str_replace("&#91;", "[", $value);
487 - } else {
488 - $value = str_replace("[", "&#91;", $value);
867 + public function filter_render_block_toolset_enable($block_content, $block) {
868 + if (
869 + !empty($block['blockName']) && strpos($block['blockName'], 'toolset-blocks/') === 0 && false !== strpos($block_content, '[e2pdf-')
870 + ) {
871 + add_shortcode('e2pdf-download', [new Model_E2pdf_Shortcode(), 'e2pdf_download']);
872 + add_shortcode('e2pdf-view', [new Model_E2pdf_Shortcode(), 'e2pdf_view']);
873 + add_shortcode('e2pdf-save', [new Model_E2pdf_Shortcode(), 'e2pdf_save']);
874 + add_shortcode('e2pdf-zapier', [new Model_E2pdf_Shortcode(), 'e2pdf_zapier']);
875 + add_shortcode('e2pdf-adobesign', [new Model_E2pdf_Shortcode(), 'e2pdf_adobesign']);
876 + }
877 + return $block_content;
878 + }
879 +
880 + // filter content
881 + public function filter_content($content, $post_id = false, $wp_reset_postdata = true) {
882 + global $post;
883 + if (!is_string($content) || false === strpos($content, '[')) {
884 + return $content;
885 + }
886 + $shortcode_tags = [
887 + 'e2pdf-download',
888 + 'e2pdf-save',
889 + 'e2pdf-view',
890 + 'e2pdf-adobesign',
891 + 'e2pdf-zapier',
892 + ];
893 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
894 + $tagnames = array_intersect($shortcode_tags, $matches[1]);
895 + if (!empty($tagnames)) {
896 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
897 + foreach ($shortcodes[0] as $key => $shortcode_value) {
898 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
899 + $atts = shortcode_parse_atts($shortcode[3]);
900 + if (isset($atts['wp_reset_postdata'])) {
901 + if ($atts['wp_reset_postdata'] == 'true') {
902 + $wp_reset_postdata = true;
903 + } else {
904 + $wp_reset_postdata = false;
905 + }
906 + }
907 + if ($wp_reset_postdata) {
908 + wp_reset_postdata();
909 + }
910 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
911 + } else {
912 + if (isset($atts['id'])) {
913 + $template = new Model_E2pdf_Template();
914 + $template->load($atts['id']);
915 + if ($template->get('extension') === 'woocommerce' || $template->get('extension') === 'jetformbuilder') {
916 + continue;
917 + } elseif ($template->get('extension') === 'wordpress') { // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
918 + if (!isset($atts['dataset'])) {
919 + if ($template->get('item') == '-3') {
920 + $dataset = get_current_user_id();
921 + $atts['dataset'] = $dataset;
922 + $shortcode[3] .= ' dataset="' . $dataset . '"';
923 + } else {
924 + if ($this->get('queried_object') && !$post_id) {
925 + $queried_object = get_queried_object();
926 + $post_id = $queried_object && isset($queried_object->ID) ? $queried_object->ID : false;
927 + }
928 + if ($post_id || isset($post->ID)) {
929 + $dataset = $post_id ? $post_id : $post->ID;
930 + $atts['dataset'] = $dataset;
931 + $shortcode[3] .= ' dataset="' . $dataset . '"';
932 + }
933 + }
934 + }
935 + }
936 + }
937 + if (!isset($atts['apply'])) {
938 + $shortcode[3] .= ' apply="true"';
939 + }
940 + if (!isset($atts['filter'])) {
941 + $shortcode[3] .= ' filter="true"';
942 + }
943 + $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
944 + }
489 945 }
490 946 }
491 - return $value;
947 + return $content;
492 948 }
493 949
494 - public function auto() {
495 - $response = array();
496 - $elements = array();
950 + // [e2pdf-exclude] support inside Formidable Forms View beforeContent and afterContent
951 + public function filter_frm_filter_view($view) {
952 + if (isset($view->frm_before_content) && $view->frm_before_content) {
953 + $view->frm_before_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->frm_before_content);
954 + }
955 + if (isset($view->post_content) && $view->post_content) {
956 + $view->post_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->post_content);
957 + }
958 + if (isset($view->frm_after_content) && $view->frm_after_content) {
959 + $view->frm_after_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->frm_after_content);
960 + }
961 + return $view;
962 + }
497 963
498 - $post = $this->get('item');
964 + // vc map get attributes filter
965 + public function filter_vc_map_get_attributes($atts, $tag) {
966 + if ($tag == 'vc_single_image' && ((isset($atts['onclick']) && $atts['onclick'] == 'custom_link') || (empty($atts['onclick']) && (!isset($atts['img_link_large']) || 'yes' !== $atts['img_link_large']))) && (!empty($atts['link']) || !empty($atts['img_link']))) {
499 967
500 - $elements[] = array(
501 - 'type' => 'e2pdf-html',
502 - 'block' => true,
503 - 'properties' => array(
504 - 'top' => '20',
505 - 'left' => '20',
506 - 'right' => '20',
507 - 'width' => '100%',
508 - 'height' => 'auto',
509 - 'value' => "<h1>[post_title]</h1>",
510 - )
511 - );
968 + if (!empty($atts['link'])) {
969 + $atts['link'] = $this->filter_content($atts['link']);
970 + }
512 971
513 - $elements[] = array(
514 - 'type' => 'e2pdf-html',
515 - 'block' => true,
516 - 'properties' => array(
517 - 'top' => '20',
518 - 'left' => '20',
519 - 'right' => '20',
520 - 'width' => '100%',
521 - 'height' => 'auto',
522 - 'value' => __("Post name", 'e2pdf') . ": [post_name]",
523 - )
524 - );
972 + if (!empty($atts['img_link'])) {
973 + $atts['img_link'] = $this->filter_content($atts['img_link']);
974 + }
975 + }
976 + return $atts;
977 + }
525 978
526 - $elements[] = array(
527 - 'type' => 'e2pdf-html',
528 - 'block' => true,
529 - 'properties' => array(
530 - 'top' => '20',
531 - 'left' => '20',
532 - 'right' => '20',
533 - 'width' => '100%',
534 - 'height' => 'auto',
535 - 'value' => __("Post type", 'e2pdf') . ": [post_type]",
536 - )
537 - );
979 + // filter cs element pre prender
980 + public function filter_cs_element_pre_render($data) {
981 + if (!empty($data['_type']) && $data['_type'] == 'raw-content' && !empty($data['raw_content']) && !empty($data['_p'])) {
982 + $data['raw_content'] = $this->filter_content($data['raw_content'], $data['_p']);
983 + }
984 + return $data;
985 + }
538 986
987 + // filter themify builder module content
988 + public function filter_themify_builder_module_content($content) {
989 + if ($content) {
990 + $content = $this->filter_content($content);
991 + }
992 + return $content;
993 + }
539 994
540 - $elements[] = array(
541 - 'type' => 'e2pdf-html',
542 - 'block' => true,
543 - 'properties' => array(
544 - 'top' => '20',
545 - 'left' => '20',
546 - 'right' => '20',
547 - 'width' => '100%',
548 - 'height' => 'auto',
549 - 'value' => __("ID", 'e2pdf') . ": [id]",
550 - )
551 - );
995 + // filter vs basic grid items list
996 + public function filter_vc_basic_grid_items_list($items) {
997 + if ($items) {
998 + $items = $this->filter_content($items);
999 + }
1000 + return $items;
1001 + }
552 1002
553 - $elements[] = array(
554 - 'type' => 'e2pdf-html',
555 - 'block' => true,
556 - 'properties' => array(
557 - 'top' => '20',
558 - 'left' => '20',
559 - 'right' => '20',
560 - 'width' => '100%',
561 - 'height' => 'auto',
562 - 'value' => __("Author", 'e2pdf') . ": [post_author]",
563 - )
564 - );
1003 + // filter the content
1004 + public function filter_the_content($content, $post_id = false) {
1005 + $content = $this->filter_content($content, $post_id);
1006 + return $content;
1007 + }
565 1008
566 - $elements[] = array(
567 - 'type' => 'e2pdf-html',
568 - 'block' => true,
569 - 'properties' => array(
570 - 'top' => '20',
571 - 'left' => '20',
572 - 'right' => '20',
573 - 'width' => '100%',
574 - 'height' => '300',
575 - 'value' => "[post_content]",
576 - 'dynamic_height' => '1',
577 - )
578 - );
1009 + // filter content custom
1010 + public function filter_content_custom($content) {
1011 + $content = $this->filter_content($content);
1012 + return $content;
1013 + }
579 1014
580 - $elements[] = array(
581 - 'type' => 'e2pdf-html',
582 - 'block' => true,
583 - 'properties' => array(
584 - 'top' => '20',
585 - 'left' => '20',
586 - 'right' => '20',
587 - 'width' => '100%',
588 - 'height' => 'auto',
589 - 'value' => __("Created", 'e2pdf') . ": [post_date]",
590 - )
591 - );
1015 + // filter content loop
1016 + public function filter_content_loop($content) {
1017 + $content = $this->filter_content($content, false, false);
1018 + return $content;
1019 + }
592 1020
593 - $elements[] = array(
594 - 'type' => 'e2pdf-html',
595 - 'block' => true,
596 - 'properties' => array(
597 - 'top' => '20',
598 - 'left' => '20',
599 - 'right' => '20',
600 - 'width' => '100%',
601 - 'height' => 'auto',
602 - 'value' => __("Modified", 'e2pdf') . ": [post_modified]",
603 - )
604 - );
1021 + /**
1022 + * Memberpress Mail attachments filter
1023 + * https://memberpress.com/
1024 + */
1025 + public function filter_mepr_email_send_attachments($attachments, $mail, $body, $values) {
1026 + $message = $body ? $body : $mail->body();
1027 + if ($message && false !== strpos($message, '[')) {
1028 + $message = $mail->replace_variables($message, $values);
1029 + $shortcode_tags = [
1030 + 'e2pdf-attachment',
1031 + 'e2pdf-save',
1032 + ];
1033 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $message, $matches);
1034 + $tagnames = array_intersect($shortcode_tags, $matches[1]);
1035 + if (!empty($tagnames)) {
1036 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $message, $shortcodes);
1037 + foreach ($shortcodes[0] as $key => $shortcode_value) {
1038 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1039 + $atts = shortcode_parse_atts($shortcode[3]);
1040 + $file = false;
1041 + if (isset($atts['id']) && isset($atts['dataset'])) {
1042 + if (!isset($atts['apply'])) {
1043 + $shortcode[3] .= ' apply="true"';
1044 + }
1045 + if (!isset($atts['filter'])) {
1046 + $shortcode[3] .= ' filter="true"';
1047 + }
1048 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) {
1049 + $file = do_shortcode_tag($shortcode);
1050 + if ($file) {
1051 + $tmp = false;
1052 + if (substr($file, 0, 4) === 'tmp:') {
1053 + $file = substr($file, 4);
1054 + $tmp = true;
1055 + }
1056 + if ($shortcode[2] === 'e2pdf-save' || isset($atts['pdf'])) {
1057 + if ($tmp) {
1058 + $this->helper->add('wordpress_attachments_mepr', $file);
1059 + }
1060 + } else {
1061 + $this->helper->add('wordpress_attachments_mepr', $file);
1062 + }
1063 + $attachments[] = $file;
1064 + }
1065 + }
1066 + }
1067 + }
1068 + }
1069 + }
1070 + return $attachments;
1071 + }
605 1072
606 - $response['page'] = array(
607 - 'bottom' => '20',
608 - 'top' => '20',
609 - 'left' => '20',
610 - 'right' => '20'
611 - );
1073 + // mepr the content filter
1074 + public function filter_mepr_the_content($content) {
1075 + if (
1076 + class_exists('MeprUtils') && method_exists('MeprUtils', 'get_current_post') &&
1077 + class_exists('MeprOptions') && method_exists('MeprOptions', 'fetch')
1078 + ) {
1079 + $current_post = MeprUtils::get_current_post();
1080 + if ($current_post !== false) {
1081 + $mepr_options = MeprOptions::fetch();
1082 + if ($current_post->ID == $mepr_options->thankyou_page_id) {
1083 + remove_shortcode('e2pdf-download');
1084 + remove_shortcode('e2pdf-view');
1085 + remove_shortcode('e2pdf-save');
1086 + remove_shortcode('e2pdf-zapier');
1087 + remove_shortcode('e2pdf-adobesign');
1088 + }
1089 + }
1090 + }
1091 + return $content;
1092 + }
612 1093
613 - $response['elements'] = $elements;
614 - return $response;
1094 + // mepr custom thank you message filter
1095 + public function filter_mepr_custom_thankyou_message($content) {
1096 + add_shortcode('e2pdf-download', [new Model_E2pdf_Shortcode(), 'e2pdf_download']);
1097 + add_shortcode('e2pdf-view', [new Model_E2pdf_Shortcode(), 'e2pdf_view']);
1098 + add_shortcode('e2pdf-save', [new Model_E2pdf_Shortcode(), 'e2pdf_save']);
1099 + add_shortcode('e2pdf-zapier', [new Model_E2pdf_Shortcode(), 'e2pdf_zapier']);
1100 + add_shortcode('e2pdf-adobesign', [new Model_E2pdf_Shortcode(), 'e2pdf_adobesign']);
1101 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended
1102 + if (isset($_REQUEST['trans_num']) && class_exists('MeprTransaction') && method_exists('MeprTransaction', 'get_one_by_trans_num')) {
1103 + $txn = new MeprTransaction();
1104 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1105 + $data = MeprTransaction::get_one_by_trans_num($_REQUEST['trans_num']);
1106 + if (method_exists($txn, 'load_data')) {
1107 + $txn->load_data($data);
1108 + if (false !== strpos($content, '[')) {
1109 + $shortcode_tags = [
1110 + 'e2pdf-download',
1111 + 'e2pdf-view',
1112 + 'e2pdf-save',
1113 + 'e2pdf-zapier',
1114 + 'e2pdf-adobesign',
1115 + ];
1116 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
1117 + $tagnames = array_intersect($shortcode_tags, $matches[1]);
1118 + if (!empty($tagnames)) {
1119 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
1120 + foreach ($shortcodes[0] as $key => $shortcode_value) {
1121 + wp_reset_postdata();
1122 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1123 + $atts = shortcode_parse_atts($shortcode[3]);
1124 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
1125 + } elseif (isset($atts['id'])) {
1126 + $user_id = !empty($txn->user_id) ? $txn->user_id : get_current_user_id();
1127 + $template = new Model_E2pdf_Template();
1128 + $template->load($atts['id']);
1129 + if ($template->get('extension') === 'wordpress' && $template->get('item') == '-3') { // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
1130 + if (!isset($atts['dataset'])) {
1131 + $atts['dataset'] = $user_id;
1132 + $shortcode[3] .= ' dataset="' . $user_id . '"';
1133 + }
1134 + } else {
1135 + if (!isset($atts['user_id'])) {
1136 + $atts['user_id'] = $user_id;
1137 + $shortcode[3] .= ' user_id="' . $user_id . '"';
1138 + }
1139 + }
1140 + }
1141 + if (!isset($atts['apply'])) {
1142 + $shortcode[3] .= ' apply="true"';
1143 + }
1144 + if (!isset($atts['filter'])) {
1145 + $shortcode[3] .= ' filter="true"';
1146 + }
1147 + $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
1148 + }
1149 + }
1150 + }
1151 + }
1152 + }
1153 + return $content;
615 1154 }
616 1155
1156 + // user registration smart tag values filter
1157 + public function filter_user_registration_smart_tag_values($values) {
1158 + foreach ($values as $key => $value) {
1159 + if (is_string($value) && false !== strpos($value, '[e2pdf-')) {
1160 + $values[$key] = str_replace('[e2pdf-', '&#91;e2pdf-', $value);
1161 + }
1162 + }
1163 + return $values;
1164 + }
1165 +
617 1166 /**
618 - * Search and update shortcodes for this extension inside content
619 - * Auto set of dataset id
620 - *
621 - * @param string $content - Content
622 - * @param string $post_id - Custom Post ID
623 - *
624 - * @return string - Content with updated shortcodes
1167 + * Ultimate Member – User Profile, Registration, Login, Member Directory, Content Restriction & Membership Plugin
1168 + * https://wordpress.org/plugins/ultimate-member/
625 1169 */
626 - public function filter_content($content, $post_id = false) {
627 - global $post;
628 -
629 - if (false === strpos($content, '[')) {
1170 + public function filter_um_email_send_message_content($content) {
1171 + if (!is_string($content) || false === strpos($content, '[')) {
630 1172 return $content;
631 1173 }
632 -
633 - $shortcode_tags = array(
1174 + $shortcode_tags = [
634 1175 'e2pdf-download',
635 - 'e2pdf-view'
636 - );
637 -
1176 + 'e2pdf-save',
1177 + 'e2pdf-attachment',
1178 + 'e2pdf-view',
1179 + 'e2pdf-adobesign',
1180 + 'e2pdf-zapier',
1181 + ];
638 1182 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
639 1183 $tagnames = array_intersect($shortcode_tags, $matches[1]);
640 -
641 1184 if (!empty($tagnames)) {
1185 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
1186 + foreach ($shortcodes[0] as $key => $shortcode_value) {
1187 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1188 + $atts = shortcode_parse_atts($shortcode[3]);
1189 + if (!isset($atts['apply'])) {
1190 + $shortcode[3] .= ' apply="true"';
1191 + }
1192 + if (!isset($atts['filter'])) {
1193 + $shortcode[3] .= ' filter="true"';
1194 + }
1195 + if (isset($atts['id'])) {
1196 + $template = new Model_E2pdf_Template();
1197 + $template->load($atts['id']);
1198 + if ($template->get('extension') === 'wordpress') { // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
1199 + if (!isset($atts['dataset'])) {
1200 + if ($template->get('item') == '-3' && function_exists('um_user')) {
1201 + $dataset = um_user('ID');
1202 + $atts['dataset'] = $dataset;
1203 + $shortcode[3] .= ' dataset="' . $dataset . '"';
1204 + }
1205 + }
1206 + }
1207 + }
1208 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) {
1209 + $file = do_shortcode_tag($shortcode);
1210 + if ($file) {
1211 + $tmp = false;
1212 + if (substr($file, 0, 4) === 'tmp:') {
1213 + $file = substr($file, 4);
1214 + $tmp = true;
1215 + }
1216 + if ($shortcode[2] === 'e2pdf-save' || isset($atts['pdf'])) {
1217 + if ($tmp) {
1218 + $this->helper->add('wordpress_attachments_um_del', $file);
1219 + }
1220 + } else {
1221 + $this->helper->add('wordpress_attachments_um_del', $file);
1222 + }
1223 + $this->helper->add('wordpress_attachments_um', $file);
1224 + }
1225 + $content = str_replace($shortcode_value, '', $content);
1226 + } else {
1227 + $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
1228 + }
1229 + }
1230 + }
1231 + return $content;
1232 + }
642 1233
643 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
1234 + /**
1235 + * Ultimate Member – User Profile, Registration, Login, Member Directory, Content Restriction & Membership Plugin
1236 + * https://wordpress.org/plugins/ultimate-member/
1237 + */
1238 + public function filter_wp_mail_um($args) {
1239 + $files = $this->helper->get('wordpress_attachments_um');
1240 + if (is_array($files) && !empty($files)) {
1241 + if (empty($args['attachments'])) {
1242 + $args['attachments'] = [];
1243 + } elseif (!is_array($args['attachments'])) {
1244 + $args['attachments'] = [$args['attachments']];
1245 + }
1246 + foreach ($files as $key => $file) {
1247 + $args['attachments'][] = $file;
1248 + }
1249 + }
1250 + return $args;
1251 + }
644 1252
645 - preg_match_all("/$pattern/", $content, $shortcodes);
1253 + // wp mail filter
1254 + public function filter_wp_mail($args) {
1255 + if (isset($args['message'])) {
1256 + if (false !== strpos($args['message'], '[')) {
1257 + $shortcode_tags = [
1258 + 'e2pdf-download',
1259 + 'e2pdf-save',
1260 + 'e2pdf-attachment',
1261 + 'e2pdf-adobesign',
1262 + 'e2pdf-zapier',
1263 + ];
1264 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $args['message'], $matches);
1265 + $tagnames = array_intersect($shortcode_tags, $matches[1]);
1266 + if (!empty($tagnames)) {
1267 + $args['attachments'] = $this->helper->load('convert')->is_string_array($args['attachments']);
1268 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $args['message'], $shortcodes);
1269 + foreach ($shortcodes[0] as $key => $shortcode_value) {
1270 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1271 + $atts = shortcode_parse_atts($shortcode[3]);
1272 + if (!isset($atts['apply'])) {
1273 + $shortcode[3] .= ' apply="true"';
1274 + }
1275 + if (!isset($atts['filter'])) {
1276 + $shortcode[3] .= ' filter="true"';
1277 + }
1278 + $file = false;
1279 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) {
1280 + $file = do_shortcode_tag($shortcode);
1281 + if ($file) {
1282 + $tmp = false;
1283 + if (substr($file, 0, 4) === 'tmp:') {
1284 + $file = substr($file, 4);
1285 + $tmp = true;
1286 + }
1287 + if ($shortcode[2] === 'e2pdf-save' || isset($atts['pdf'])) {
1288 + if ($tmp) {
1289 + $this->helper->add('wordpress_attachments', $file);
1290 + }
1291 + } else {
1292 + $this->helper->add('wordpress_attachments', $file);
1293 + }
1294 + $args['attachments'][] = $file;
1295 + }
1296 + $args['message'] = str_replace($shortcode_value, '', $args['message']);
1297 + } else {
1298 + $args['message'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $args['message']);
1299 + }
1300 + }
1301 + }
1302 + }
1303 + }
1304 + return [
1305 + 'to' => $args['to'],
1306 + 'subject' => $args['subject'],
1307 + 'message' => $args['message'],
1308 + 'headers' => $args['headers'],
1309 + 'attachments' => $args['attachments'],
1310 + ];
1311 + }
646 1312
647 - foreach ($shortcodes[0] as $key => $shortcode_value) {
1313 + // Thrive Theme Builder dynamic shortcode support
1314 + public function filter_thrive_theme_template_content($html) {
1315 + add_filter('e2pdf_model_shortcode_e2pdf_download_atts', [$this, 'filter_global_post_id']);
1316 + add_filter('e2pdf_model_shortcode_e2pdf_view_atts', [$this, 'filter_global_post_id']);
1317 + add_filter('e2pdf_model_shortcode_e2pdf_save_atts', [$this, 'filter_global_post_id']);
1318 + add_filter('e2pdf_model_shortcode_e2pdf_zapier_atts', [$this, 'filter_global_post_id']);
1319 + return $html;
1320 + }
648 1321
649 - wp_reset_postdata();
1322 + // dynamic post id support filter
1323 + public function filter_global_post_id($atts) {
1324 + if (!isset($atts['dataset']) && isset($atts['id'])) {
1325 + $template_id = isset($atts['id']) ? (int) $atts['id'] : 0;
1326 + $template = new Model_E2pdf_Template();
1327 + if ($template->load($template_id, false)) {
1328 + if ($template->get('extension') === 'wordpress') { // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
1329 + global $post;
1330 + if (isset($post->ID)) {
1331 + $atts['dataset'] = (string) $post->ID;
1332 + if (!isset($atts['apply'])) {
1333 + $atts['apply'] = 'true';
1334 + }
1335 + if (!isset($atts['filter'])) {
1336 + $atts['filter'] = 'true';
1337 + }
1338 + }
1339 + }
1340 + }
1341 + }
1342 + return $atts;
1343 + }
650 1344
651 - $shortcode = array();
652 - $shortcode[1] = $shortcodes[1][$key];
653 - $shortcode[2] = $shortcodes[2][$key];
654 - $shortcode[3] = $shortcodes[3][$key];
655 - $shortcode[4] = $shortcodes[4][$key];
656 - $shortcode[5] = $shortcodes[5][$key];
657 - $shortcode[6] = $shortcodes[6][$key];
658 -
659 - $atts = shortcode_parse_atts($shortcode[3]);
660 -
661 - if (!isset($atts['dataset']) && isset($atts['id'])) {
662 - $template = new Model_E2pdf_Template();
663 - $template->load($atts['id']);
664 - if ($template->get('extension') === 'wordpress') {
665 - if ($post_id || isset($post->ID)) {
666 - $dataset = $post_id ? $post_id : $post->ID;
1345 + // et pb module content filter
1346 + public function filter_et_pb_module_content($content, $props, $attrs, $render_slug, $_address, $global_content) {
1347 + if (($render_slug == 'et_pb_code' || $render_slug == 'et_pb_text') &&
1348 + false !== strpos($content, '[') &&
1349 + function_exists('et_core_is_builder_used_on_current_request') &&
1350 + !et_core_is_builder_used_on_current_request()
1351 + ) {
1352 + global $post;
1353 + $shortcode_tags = [
1354 + 'e2pdf-download',
1355 + 'e2pdf-save',
1356 + 'e2pdf-view',
1357 + 'e2pdf-adobesign',
1358 + 'e2pdf-zapier',
1359 + ];
1360 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
1361 + $tagnames = array_intersect($shortcode_tags, $matches[1]);
1362 + if (!empty($tagnames)) {
1363 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
1364 + foreach ($shortcodes[0] as $key => $shortcode_value) {
1365 + wp_reset_postdata();
1366 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1367 + $atts = shortcode_parse_atts($shortcode[3]);
1368 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
1369 + } else {
1370 + if (!isset($atts['dataset']) && isset($atts['id']) && (isset($post->ID))) {
1371 + $dataset = $post->ID;
667 1372 $atts['dataset'] = $dataset;
668 - $shortcode[3] .= " dataset=\"{$dataset}\"";
1373 + $shortcode[3] .= ' dataset="' . $dataset . '"';
669 1374 }
670 1375 }
1376 + if (!isset($atts['apply'])) {
1377 + $shortcode[3] .= ' apply="true"';
1378 + }
1379 +
1380 + if (!isset($atts['filter'])) {
1381 + $shortcode[3] .= ' filter="true"';
1382 + }
1383 + $new_shortcode = '[' . $shortcode[2] . $shortcode[3] . ']';
1384 + $content = str_replace($shortcode_value, $new_shortcode, $content);
671 1385 }
672 - $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
673 1386 }
674 1387 }
675 -
676 1388 return $content;
677 1389 }
678 1390
679 - /**
680 - * Verify if item and dataset exists
681 - *
682 - * @return bool - item and dataset exists
683 - */
1391 + // verify
684 1392 public function verify() {
685 - $item = $this->get('item');
686 - $dataset = $this->get('dataset');
687 -
688 - if ($item && $dataset && get_post($dataset) && $item == get_post_type($dataset)) {
1393 + if ($this->get('item') && $this->get('cached_post') && (($this->get('item') == get_post_type($this->get('cached_post'))) || ($this->get('item') == '-3' && $this->get('cached_post')))) {
689 1394 return true;
690 1395 }
691 -
692 1396 return false;
693 1397 }
694 1398
695 - /**
696 - * Init Visual Mapper data
697 - *
698 - * @return bool|string - HTML data source for Visual Mapper
699 - */
1399 + // visual mapper
700 1400 public function visual_mapper() {
701 1401
702 - $vc = "<h3>Wordpress</h3>";
1402 + $vc = '';
1403 +
1404 + if ($this->get('item') != '-3') {
1405 + $vc .= '<h3 class="e2pdf-plr5">Common</h3>';
1406 + $vc .= '<div class="e2pdf-grid">';
1407 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('ID', 'e2pdf-wp key="id"') . '</div>';
1408 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Author', 'e2pdf-wp key="post_author"') . '</div>';
1409 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Author ID', 'e2pdf-wp key="post_author_id"') . '</div>';
1410 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Date', 'e2pdf-wp key="post_date"') . '</div>';
1411 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Date (GMT)', 'e2pdf-wp key="post_date_gmt"') . '</div>';
1412 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Content', 'e2pdf-wp key="post_content"') . '</div>';
1413 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Title', 'e2pdf-wp key="post_title"') . '</div>';
1414 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Excerpt', 'e2pdf-wp key="post_excerpt"') . '</div>';
1415 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Status', 'e2pdf-wp key="post_status"') . '</div>';
1416 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Comment Status', 'e2pdf-wp key="comment_status"') . '</div>';
1417 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Ping Status', 'e2pdf-wp key="ping_status"') . '</div>';
1418 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Password', 'e2pdf-wp key="post_password"') . '</div>';
1419 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Name', 'e2pdf-wp key="post_name"') . '</div>';
1420 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('To Ping', 'e2pdf-wp key="to_ping"') . '</div>';
1421 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Ping', 'e2pdf-wp key="pinged"') . '</div>';
1422 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Modified Date', 'e2pdf-wp key="post_modified"') . '</div>';
1423 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Modified Date (GMT)', 'e2pdf-wp key="post_modified_gmt"') . '</div>';
1424 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Filtered Content', 'e2pdf-wp key="post_content_filtered"') . '</div>';
1425 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Parent ID', 'e2pdf-wp key="post_parent"') . '</div>';
1426 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('GUID', 'e2pdf-wp key="guid"') . '</div>';
1427 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Menu Order', 'e2pdf-wp key="menu_order"') . '</div>';
1428 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Type', 'e2pdf-wp key="post_type"') . '</div>';
1429 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Mime Type', 'e2pdf-wp key="post_mime_type"') . '</div>';
1430 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Comments Count', 'e2pdf-wp key="comment_count"') . '</div>';
1431 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Filter', 'e2pdf-wp key="filter"') . '</div>';
1432 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Post Thumbnail', 'e2pdf-wp key="get_the_post_thumbnail"') . '</div>';
1433 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Post Thumbnail URL', 'e2pdf-wp key="get_the_post_thumbnail_url"') . '</div>';
1434 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Permalink', 'e2pdf-wp key="get_permalink"') . '</div>';
1435 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Post Permalink', 'e2pdf-wp key="get_post_permalink"') . '</div>';
1436 + $vc .= '</div>';
1437 +
1438 + $meta_keys = $this->get_post_meta_keys();
1439 + if (!empty($meta_keys)) {
1440 + $vc .= '<h3 class="e2pdf-plr5">Meta Keys</h3>';
1441 + $vc .= "<div class='e2pdf-grid'>";
1442 + foreach ($meta_keys as $meta_key) {
1443 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element($meta_key, 'e2pdf-wp key="' . $meta_key . '" meta="true"') . '</div>';
1444 + }
1445 + $vc .= '</div>';
1446 + }
1447 +
1448 + $meta_keys = $this->get_post_taxonomy_keys();
1449 + if (!empty($meta_keys)) {
1450 + $vc .= '<h3 class="e2pdf-plr5">Taxonomy</h3>';
1451 + $vc .= "<div class='e2pdf-grid'>";
1452 + foreach ($meta_keys as $meta_key) {
1453 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element($meta_key, 'e2pdf-wp key="' . $meta_key . '" terms="true" names="true"') . '</div>';
1454 + }
1455 + $vc .= '</div>';
1456 + }
1457 + }
1458 +
1459 + $vc .= '<h3 class="e2pdf-plr5">User</h3>';
703 1460 $vc .= "<div class='e2pdf-grid'>";
704 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("ID", "e2pdf"), 'id')}</div>";
705 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Author", "e2pdf"), 'post_author')}</div>";
706 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Date", "e2pdf"), 'post_date')}</div>";
707 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Date (GMT)", "e2pdf"), 'post_date_gmt')}</div>";
708 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Content", "e2pdf"), 'post_content')}</div>";
709 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Title", "e2pdf"), 'post_title')}</div>";
710 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Excerpt", "e2pdf"), 'post_excerpt')}</div>";
711 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Status", "e2pdf"), 'post_status')}</div>";
712 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Comment Status", "e2pdf"), 'comment_status')}</div>";
713 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Ping Status", "e2pdf"), 'ping_status')}</div>";
714 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Post Password", "e2pdf"), 'post_password')}</div>";
715 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Post Name", "e2pdf"), 'post_name')}</div>";
716 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("To Ping", "e2pdf"), 'to_ping')}</div>";
717 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Ping", "e2pdf"), 'pinged')}</div>";
718 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Modified Date", "e2pdf"), 'post_modified')}</div>";
719 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Modified Date (GMT)", "e2pdf"), 'post_modified_gmt')}</div>";
720 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Filtered Content", "e2pdf"), 'post_content_filtered')}</div>";
721 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Parent ID", "e2pdf"), 'post_parent')}</div>";
722 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("GUID", "e2pdf"), 'guid')}</div>";
723 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Menu Order", "e2pdf"), 'menu_order')}</div>";
724 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Type", "e2pdf"), 'post_type')}</div>";
725 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Mime Type", "e2pdf"), 'post_mime_type')}</div>";
726 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Comments Count", "e2pdf"), 'comment_count')}</div>";
727 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Filter", "e2pdf"), 'filter')}</div>";
728 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Post Thumbnail", "e2pdf"), 'post_thumbnail')}</div>";
729 - $vc .= "</div>";
1461 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('ID', 'e2pdf-user key="ID"') . '</div>';
1462 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Description', 'e2pdf-user key="user_description"') . '</div>';
1463 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('First Name', 'e2pdf-user key="user_firstname"') . '</div>';
1464 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Last Name', 'e2pdf-user key="user_lastname"') . '</div>';
1465 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Login', 'e2pdf-user key="user_login"') . '</div>';
1466 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Nicename', 'e2pdf-user key="user_nicename"') . '</div>';
1467 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('E-mail', 'e2pdf-user key="user_email"') . '</div>';
1468 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Url', 'e2pdf-user key="user_url"') . '</div>';
1469 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Registered', 'e2pdf-user key="user_registered"') . '</div>';
1470 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('User Status', 'e2pdf-user key="user_status"') . '</div>';
1471 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('User Level', 'e2pdf-user key="user_level"') . '</div>';
1472 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Display Name', 'e2pdf-user key="display_name"') . '</div>';
1473 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Spam', 'e2pdf-user key="spam"') . '</div>';
1474 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Deleted', 'e2pdf-user key="deleted"') . '</div>';
1475 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Locale', 'e2pdf-user key="locale"') . '</div>';
1476 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Rich Editing', 'e2pdf-user key="rich_editing"') . '</div>';
1477 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Syntax Highlighting', 'e2pdf-user key="syntax_highlighting"') . '</div>';
1478 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Use SSL', 'e2pdf-user key="use_ssl"') . '</div>';
1479 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Roles', 'e2pdf-user key="roles"') . '</div>';
1480 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Avatar', 'e2pdf-user key="get_avatar"') . '</div>';
1481 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element('Avatar Url', 'e2pdf-user key="get_avatar_url"') . '</div>';
1482 + $vc .= '</div>';
1483 +
1484 + $meta_keys = $this->get_user_meta_keys();
1485 + if (!empty($meta_keys)) {
1486 + $vc .= '<h3 class="e2pdf-plr5">User Meta Keys</h3>';
1487 + $vc .= "<div class='e2pdf-grid'>";
1488 + foreach ($meta_keys as $meta_key) {
1489 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element($meta_key, 'e2pdf-user key="' . $meta_key . '" meta="true"') . '</div>';
1490 + }
1491 + $vc .= '</div>';
1492 + }
1493 +
1494 + if (class_exists('ACF') && function_exists('acf_get_field_groups')) {
1495 + $user_groups = acf_get_field_groups(
1496 + [
1497 + 'user_id' => 'new',
1498 + 'user_form' => 'all',
1499 + ]
1500 + );
1501 + if (!empty($user_groups)) {
1502 + $user_groups = array_column($user_groups, 'key');
1503 + }
1504 + if ($this->get('item') == '-3') {
1505 + $groups = acf_get_field_groups(
1506 + [
1507 + 'user_id' => 'new',
1508 + 'user_form' => 'all',
1509 + ]
1510 + );
1511 + } else {
1512 + $groups = acf_get_field_groups(['post_type' => $this->get('item')]);
1513 + }
1514 + if (!empty($groups)) {
1515 + $vc .= "<h3 class='e2pdf-plr5'>ACF</h3>";
1516 + foreach ($groups as $group_key => $group) {
1517 + $post_id = '';
1518 + if (!empty($user_groups)) {
1519 + if (in_array($group['key'], $user_groups, false)) {
1520 + if ($this->get('item') == '-3') {
1521 + $post_id = ' post_id="user_[e2pdf-dataset]"';
1522 + } else {
1523 + $post_id = ' post_id="user_[e2pdf-userid]"';
1524 + }
1525 + }
1526 + }
1527 + $vc .= '<h3 class="e2pdf-plr5">' . $group['title'] . '</h3>';
1528 + $vc .= "<div class='e2pdf-grid'>";
1529 + foreach (acf_get_fields($group['key']) as $field_key => $field) {
1530 + $vc = $this->get_acf_field($vc, $field, $post_id);
1531 + }
1532 + $vc .= '</div>';
1533 + }
1534 + }
1535 + }
730 1536 return $vc;
731 1537 }
732 1538
733 - private function get_vm_element($name, $id) {
734 - $element = "<div>";
735 - $element .= "<label>{$name}:</label>";
736 - $element .= "<input type='text' name='[{$id}]' value='[{$id}]' class='e2pdf-w100'>";
737 - $element .= "</div>";
1539 + // get acf field
1540 + public function get_acf_field($vc, $field, $post_id) {
1541 + if ($field['type'] == 'repeater' && !empty($field['sub_fields'])) {
1542 + $sub_fields = [];
1543 + foreach ($field['sub_fields'] as $sub_field_key => $sub_field) {
1544 + $sub_fields[] = '[acf field="' . $sub_field['name'] . '"' . $post_id . ']';
1545 + $sub_field['label'] = $field['label'] . ' ' . $sub_field['label'];
1546 + $sub_field['name'] = $field['name'] . '_0_' . $sub_field['name'];
1547 + $vc = $this->get_acf_field($vc, $sub_field, $post_id);
1548 + }
1549 + if (!empty($sub_fields)) {
1550 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element($field['label'] . ' Iteration', 'e2pdf-acf-repeater field="' . $field['name'] . '"' . $post_id . ']' . implode(' ', $sub_fields) . "\r\n" . '[/e2pdf-acf-repeater') . '</div>';
1551 + }
1552 + } elseif ($field['type'] == 'group' && !empty($field['sub_fields'])) {
1553 + $sub_fields = [];
1554 + foreach ($field['sub_fields'] as $sub_field_key => $sub_field) {
1555 + $sub_field['label'] = $field['label'] . ' ' . $sub_field['label'];
1556 + $sub_field['name'] = $field['name'] . '_' . $sub_field['name'];
1557 + $vc = $this->get_acf_field($vc, $sub_field, $post_id);
1558 + }
1559 + } else {
1560 + if ($field['name']) {
1561 + $vc .= '<div class="e2pdf-ib e2pdf-w50 e2pdf-vm-item">' . $this->get_vm_element($field['label'], 'acf field="' . $field['name'] . '"' . $post_id) . '</div>';
1562 + }
1563 + }
1564 + return $vc;
1565 + }
1566 +
1567 + // get post meta keys
1568 + public function get_post_meta_keys() {
1569 + global $wpdb;
1570 + $meta_keys = [];
1571 + if ($this->get('item')) {
1572 + $condition = [
1573 + 'p.post_type' => [
1574 + 'condition' => '=',
1575 + 'value' => $this->get('item'),
1576 + 'type' => '%s',
1577 + ],
1578 + ];
1579 + $order_condition = [
1580 + 'orderby' => 'meta_key',
1581 + 'order' => 'desc',
1582 + ];
1583 + $where = $this->helper->load('db')->prepare_where($condition);
1584 + $orderby = $this->helper->load('db')->prepare_orderby($order_condition);
1585 + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
1586 + $meta_keys = $wpdb->get_col($wpdb->prepare('SELECT DISTINCT `meta_key` FROM `' . $wpdb->postmeta . '` `pm` LEFT JOIN ' . $wpdb->posts . ' `p` ON (`p`.`ID` = `pm`.`post_ID`) ' . $where['sql'] . $orderby . '', $where['filter']));
1587 + }
1588 + return $meta_keys;
1589 + }
1590 +
1591 + // get user meta keys
1592 + public function get_user_meta_keys() {
1593 + global $wpdb;
1594 + $meta_keys = [];
1595 + if ($this->get('item')) {
1596 + $order_condition = [
1597 + 'orderby' => 'meta_key',
1598 + 'order' => 'desc',
1599 + ];
1600 + $orderby = $this->helper->load('db')->prepare_orderby($order_condition);
1601 + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
1602 + $meta_keys = $wpdb->get_col($wpdb->prepare('SELECT DISTINCT `meta_key` FROM `' . $wpdb->usermeta . '` ' . $orderby . ''));
1603 + }
1604 + return $meta_keys;
1605 + }
1606 +
1607 + // get post taxonomy keys
1608 + public function get_post_taxonomy_keys() {
1609 + global $wpdb;
1610 + $meta_keys = [];
1611 + if ($this->get('item')) {
1612 + $order_condition = [
1613 + 'orderby' => 'taxonomy',
1614 + 'order' => 'desc',
1615 + ];
1616 + $orderby = $this->helper->load('db')->prepare_orderby($order_condition);
1617 + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
1618 + $meta_keys = $wpdb->get_col($wpdb->prepare('SELECT DISTINCT `taxonomy` FROM `' . $wpdb->term_taxonomy . '` `t` ' . $orderby . ''));
1619 + }
1620 + return $meta_keys;
1621 + }
1622 +
1623 + // get wm element
1624 + public function get_vm_element($name, $id) {
1625 + $element = '<div>';
1626 + $element .= '<label>' . $name . ':</label>';
1627 + $element .= '<input type="text" name=\'[' . $id . ']\' value=\'[' . $id . ']\' class="e2pdf-w100">';
1628 + $element .= '</div>';
738 1629 return $element;
739 1630 }
740 1631
1632 + // page edit hook
1633 + public function hook_wordpress_page_edit() {
1634 + // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
1635 + $items = $this->helper->load('hooks')->get_items('wordpress', 'hook_wordpress_page_edit');
1636 + if (!empty($items)) {
1637 + add_meta_box(
1638 + 'e2pdf',
1639 + apply_filters('e2pdf_hook_section_title', __('E2Pdf Actions', 'e2pdf'), 'hook_wordpress_page_edit'),
1640 + [$this, 'hook_wordpress_page_edit_callback'],
1641 + $items,
1642 + 'side',
1643 + 'default'
1644 + );
1645 + }
1646 + }
1647 +
1648 + // page edit callback hook
1649 + public function hook_wordpress_page_edit_callback($post) {
1650 + if (!empty($post->post_type)) {
1651 + // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
1652 + $hooks = $this->helper->load('hooks')->get('wordpress', 'hook_wordpress_page_edit', $post->post_type);
1653 + if (!empty($hooks)) {
1654 + foreach ($hooks as $hook) {
1655 + if ($this->helper->load('hooks')->process_hook(
1656 + $hook,
1657 + [
1658 + 'dataset' => $post->ID,
1659 + ],
1660 + 'hook_wordpress_page_edit'
1661 + )
1662 + ) {
1663 + $action = apply_filters(
1664 + 'e2pdf_hook_action_button',
1665 + [
1666 + 'html' => '<p><a class="e2pdf-download-hook" target="_blank" title="%2$s" href="%1$s"><span class="dashicons dashicons-pdf"></span> %2$s</a></p>',
1667 + 'url' => $this->helper->get_url(
1668 + [
1669 + 'page' => 'e2pdf',
1670 + 'action' => 'export',
1671 + 'id' => $hook,
1672 + 'dataset' => $post->ID,
1673 + ], 'admin.php?'
1674 + ),
1675 + 'title' => 'PDF #' . $hook,
1676 + ], 'hook_wordpress_page_edit', $hook, $post->ID
1677 + );
1678 + if (!empty($action)) {
1679 + echo sprintf(
1680 + $action['html'], $action['url'], $action['title']
1681 + );
1682 + }
1683 + }
1684 + }
1685 + }
1686 + }
1687 + }
1688 +
1689 + // row actions hook
1690 + public function hook_wordpress_row_actions($actions, $post) {
1691 + if ($post && is_a($post, 'WP_User')) {
1692 + if (!empty($post->ID)) {
1693 + // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
1694 + $hooks = $this->helper->load('hooks')->get('wordpress', 'hook_wordpress_row_actions', '-3');
1695 + foreach ($hooks as $hook) {
1696 + if ($this->helper->load('hooks')->process_hook(
1697 + $hook,
1698 + [
1699 + 'dataset' => $post->ID,
1700 + ],
1701 + 'hook_wordpress_row_actions'
1702 + )
1703 + ) {
1704 + $action = apply_filters(
1705 + 'e2pdf_hook_action_button',
1706 + [
1707 + 'html' => '<a class="e2pdf-download-hook" target="_blank" href="%s">%s</a>',
1708 + 'url' => $this->helper->get_url(
1709 + [
1710 + 'page' => 'e2pdf',
1711 + 'action' => 'export',
1712 + 'id' => $hook,
1713 + 'dataset' => $post->ID,
1714 + ], 'admin.php?'
1715 + ),
1716 + 'title' => 'PDF #' . $hook,
1717 + ], 'hook_wordpress_row_actions', $hook, $post->ID
1718 + );
1719 + if (!empty($action)) {
1720 + $actions['e2pdf_' . $hook] = sprintf(
1721 + $action['html'], $action['url'], $action['title']
1722 + );
1723 + }
1724 + }
1725 + }
1726 + }
1727 + } else {
1728 + if (!empty($post->post_type) && !empty($post->ID)) {
1729 + // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
1730 + $hooks = $this->helper->load('hooks')->get('wordpress', 'hook_wordpress_row_actions', $post->post_type);
1731 + foreach ($hooks as $hook) {
1732 + if ($this->helper->load('hooks')->process_hook(
1733 + $hook,
1734 + [
1735 + 'dataset' => $post->ID,
1736 + ],
1737 + 'hook_wordpress_row_actions'
1738 + )
1739 + ) {
1740 + $action = apply_filters(
1741 + 'e2pdf_hook_action_button',
1742 + [
1743 + 'html' => '<a class="e2pdf-download-hook" target="_blank" href="%s">%s</a>',
1744 + 'url' => $this->helper->get_url(
1745 + [
1746 + 'page' => 'e2pdf',
1747 + 'action' => 'export',
1748 + 'id' => $hook,
1749 + 'dataset' => $post->ID,
1750 + ], 'admin.php?'
1751 + ),
1752 + 'title' => 'PDF #' . $hook,
1753 + ], 'hook_wordpress_row_actions', $hook, $post->ID
1754 + );
1755 + if (!empty($action)) {
1756 + $actions['e2pdf_' . $hook] = sprintf(
1757 + $action['html'], $action['url'], $action['title']
1758 + );
1759 + }
1760 + }
1761 + }
1762 + }
1763 + }
1764 + return $actions;
1765 + }
741 1766 }