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
← All changes | classes/extension/e2pdf-wordpress.php +1563 -548 1.08.001.32.49 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,471 +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);
372 -
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];
382 -
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);
391 - }
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);
392 541 }
542 + } else {
543 + $value = str_replace('[', '&#91;', $value);
393 544 }
545 + }
546 + return $value;
547 + }
394 548
395 - $value = do_shortcode($value);
549 + // auto
550 + public function auto() {
396 551
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 {
552 + $response = [];
553 + $elements = [];
403 554
404 - if (isset($field['properties']['preg_pattern']) && $field['properties']['preg_pattern'] && isset($field['properties']['preg_replacement']) && $value) {
405 - $value = $this->helper->load('convert')->preg_replace($field['properties']['preg_pattern'], $field['properties']['preg_replacement'], $value);
406 - }
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 + ];
407 745
408 - if (!$this->helper->load('image')->get_image($value)) {
409 - $value = $this->strip_shortcodes($value);
410 - if (
411 - $value &&
412 - trim($value) != "" &&
413 - extension_loaded('gd') &&
414 - function_exists('imagettftext')
415 - ) {
416 - if (isset($field['properties']['text_color']) && $field['properties']['text_color']) {
417 - $penColour = $this->helper->load('convert')->to_hex_color($field['properties']['text_color']);
418 - } else {
419 - $penColour = array(0x14, 0x53, 0x94);
420 - }
746 + $response['elements'] = $elements;
747 + return $response;
748 + }
421 749
422 - $default_options = array(
423 - 'imageSize' => array(isset($field['width']) ? $field['width'] : '400', isset($field['height']) ? $field['height'] : '150'),
424 - 'bgColour' => 'transparent',
425 - 'penColour' => $penColour
426 - );
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;
760 + }
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 + }
767 + }
768 + }
769 + }
427 770
428 - $options = array();
429 - $options = apply_filters('e2pdf_image_sig_output_options', $options, $element_id, $template_id);
430 - $options = array_merge($default_options, $options);
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 + }
431 775
432 - $model_e2pdf_font = new Model_E2pdf_Font();
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 + }
433 780
434 - $font = false;
435 - if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
436 - $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
437 - }
438 - if (!$font) {
439 - $font = $model_e2pdf_font->get_font_path('Noto Sans');
440 - }
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 + }
441 794
442 - $size = 150;
443 - if (isset($field['properties']['text_font_size']) && $field['properties']['text_font_size']) {
444 - $size = $field['properties']['text_font_size'];
445 - }
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 + }
446 799
447 - $model_e2pdf_signature = new Model_E2pdf_Signature();
448 - $value = $model_e2pdf_signature->ttf_signature($value, $size, $font, $options);
449 - } else {
450 - $value = "";
451 - }
452 - }
453 - }
454 - } else {
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 + }
455 811
456 - $value = $this->convert_shortcodes($value);
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 + }
457 819
458 - if (isset($field['properties']['preg_pattern']) && $field['properties']['preg_pattern'] && isset($field['properties']['preg_replacement']) && $value) {
459 - $value = $this->helper->load('convert')->preg_replace($field['properties']['preg_pattern'], $field['properties']['preg_replacement'], $value);
460 - }
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) . '/');
461 830 }
831 + $this->helper->deset('wordpress_attachments_um');
832 + $this->helper->deset('wordpress_attachments_um_del');
462 833 }
463 -
464 - $value = apply_filters('e2pdf_extension_render_shortcodes_value', $value, $element_id, $template_id, $item, $dataset);
465 -
466 - return $value;
467 834 }
468 835
469 - public function filter_custom_shortcodes() {
470 -
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;
471 844 }
472 845
473 846 /**
474 - * Strip unused shortcodes
475 - *
476 - * @param string $value - Content
477 - *
478 - * @return string - Value with removed unused shortcodes
847 + * Disable pre-rendering of E2Pdf shortcodes in the Toolset template.
848 + * https://toolset.com/
479 849 */
480 - public function strip_shortcodes($value) {
481 - $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', "", $value);
482 - 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;
483 861 }
484 862
485 863 /**
486 - * Convert "shortcodes" inside value string
487 - *
488 - * @param string $value - Value string
489 - * @param bool $to - Convert From/To
490 - *
491 - * @return string - Converted value
864 + * Enable rendering of E2Pdf shortcodes in the Toolset template.
865 + * https://toolset.com/
492 866 */
493 - public function convert_shortcodes($value, $to = false) {
494 - if ($value) {
495 - if ($to) {
496 - $value = str_replace("&#91;", "[", $value);
497 - } else {
498 - $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 + }
499 945 }
500 946 }
501 - return $value;
947 + return $content;
502 948 }
503 949
504 - public function auto() {
505 - $response = array();
506 - $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 + }
507 963
508 - $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']))) {
509 967
510 - $elements[] = array(
511 - 'type' => 'e2pdf-html',
512 - 'block' => true,
513 - 'properties' => array(
514 - 'top' => '20',
515 - 'left' => '20',
516 - 'right' => '20',
517 - 'width' => '100%',
518 - 'height' => 'auto',
519 - 'value' => "<h1>[post_title]</h1>",
520 - )
521 - );
968 + if (!empty($atts['link'])) {
969 + $atts['link'] = $this->filter_content($atts['link']);
970 + }
522 971
523 - $elements[] = array(
524 - 'type' => 'e2pdf-html',
525 - 'block' => true,
526 - 'properties' => array(
527 - 'top' => '20',
528 - 'left' => '20',
529 - 'right' => '20',
530 - 'width' => '100%',
531 - 'height' => 'auto',
532 - 'value' => __("Post name", 'e2pdf') . ": [post_name]",
533 - )
534 - );
972 + if (!empty($atts['img_link'])) {
973 + $atts['img_link'] = $this->filter_content($atts['img_link']);
974 + }
975 + }
976 + return $atts;
977 + }
535 978
536 - $elements[] = array(
537 - 'type' => 'e2pdf-html',
538 - 'block' => true,
539 - 'properties' => array(
540 - 'top' => '20',
541 - 'left' => '20',
542 - 'right' => '20',
543 - 'width' => '100%',
544 - 'height' => 'auto',
545 - 'value' => __("Post type", 'e2pdf') . ": [post_type]",
546 - )
547 - );
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 + }
548 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 + }
549 994
550 - $elements[] = array(
551 - 'type' => 'e2pdf-html',
552 - 'block' => true,
553 - 'properties' => array(
554 - 'top' => '20',
555 - 'left' => '20',
556 - 'right' => '20',
557 - 'width' => '100%',
558 - 'height' => 'auto',
559 - 'value' => __("ID", 'e2pdf') . ": [id]",
560 - )
561 - );
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 + }
562 1002
563 - $elements[] = array(
564 - 'type' => 'e2pdf-html',
565 - 'block' => true,
566 - 'properties' => array(
567 - 'top' => '20',
568 - 'left' => '20',
569 - 'right' => '20',
570 - 'width' => '100%',
571 - 'height' => 'auto',
572 - 'value' => __("Author", 'e2pdf') . ": [post_author]",
573 - )
574 - );
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 + }
575 1008
576 - $elements[] = array(
577 - 'type' => 'e2pdf-html',
578 - 'block' => true,
579 - 'properties' => array(
580 - 'top' => '20',
581 - 'left' => '20',
582 - 'right' => '20',
583 - 'width' => '100%',
584 - 'height' => '300',
585 - 'value' => "[post_content]",
586 - 'dynamic_height' => '1',
587 - )
588 - );
1009 + // filter content custom
1010 + public function filter_content_custom($content) {
1011 + $content = $this->filter_content($content);
1012 + return $content;
1013 + }
589 1014
590 - $elements[] = array(
591 - 'type' => 'e2pdf-html',
592 - 'block' => true,
593 - 'properties' => array(
594 - 'top' => '20',
595 - 'left' => '20',
596 - 'right' => '20',
597 - 'width' => '100%',
598 - 'height' => 'auto',
599 - 'value' => __("Created", 'e2pdf') . ": [post_date]",
600 - )
601 - );
1015 + // filter content loop
1016 + public function filter_content_loop($content) {
1017 + $content = $this->filter_content($content, false, false);
1018 + return $content;
1019 + }
602 1020
603 - $elements[] = array(
604 - 'type' => 'e2pdf-html',
605 - 'block' => true,
606 - 'properties' => array(
607 - 'top' => '20',
608 - 'left' => '20',
609 - 'right' => '20',
610 - 'width' => '100%',
611 - 'height' => 'auto',
612 - 'value' => __("Modified", 'e2pdf') . ": [post_modified]",
613 - )
614 - );
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 + }
615 1072
616 - $response['page'] = array(
617 - 'bottom' => '20',
618 - 'top' => '20',
619 - 'left' => '20',
620 - 'right' => '20'
621 - );
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 + }
622 1093
623 - $response['elements'] = $elements;
624 - 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;
625 1154 }
626 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 +
627 1166 /**
628 - * Search and update shortcodes for this extension inside content
629 - * Auto set of dataset id
630 - *
631 - * @param string $content - Content
632 - * @param string $post_id - Custom Post ID
633 - *
634 - * @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/
635 1169 */
636 - public function filter_content($content, $post_id = false) {
637 - global $post;
638 -
639 - if (false === strpos($content, '[')) {
1170 + public function filter_um_email_send_message_content($content) {
1171 + if (!is_string($content) || false === strpos($content, '[')) {
640 1172 return $content;
641 1173 }
642 -
643 - $shortcode_tags = array(
1174 + $shortcode_tags = [
644 1175 'e2pdf-download',
645 - 'e2pdf-view'
646 - );
647 -
1176 + 'e2pdf-save',
1177 + 'e2pdf-attachment',
1178 + 'e2pdf-view',
1179 + 'e2pdf-adobesign',
1180 + 'e2pdf-zapier',
1181 + ];
648 1182 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
649 1183 $tagnames = array_intersect($shortcode_tags, $matches[1]);
650 -
651 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 + }
652 1233
653 - $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 + }
654 1252
655 - 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 + }
656 1312
657 - 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 + }
658 1321
659 - 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 + }
660 1344
661 - $shortcode = array();
662 - $shortcode[1] = $shortcodes[1][$key];
663 - $shortcode[2] = $shortcodes[2][$key];
664 - $shortcode[3] = $shortcodes[3][$key];
665 - $shortcode[4] = $shortcodes[4][$key];
666 - $shortcode[5] = $shortcodes[5][$key];
667 - $shortcode[6] = $shortcodes[6][$key];
668 -
669 - $atts = shortcode_parse_atts($shortcode[3]);
670 -
671 - if (!isset($atts['dataset']) && isset($atts['id'])) {
672 - $template = new Model_E2pdf_Template();
673 - $template->load($atts['id']);
674 - if ($template->get('extension') === 'wordpress') {
675 - if ($post_id || isset($post->ID)) {
676 - $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;
677 1372 $atts['dataset'] = $dataset;
678 - $shortcode[3] .= " dataset=\"{$dataset}\"";
1373 + $shortcode[3] .= ' dataset="' . $dataset . '"';
679 1374 }
680 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);
681 1385 }
682 - $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
683 1386 }
684 1387 }
685 -
686 1388 return $content;
687 1389 }
688 1390
689 - /**
690 - * Verify if item and dataset exists
691 - *
692 - * @return bool - item and dataset exists
693 - */
1391 + // verify
694 1392 public function verify() {
695 - $item = $this->get('item');
696 - $dataset = $this->get('dataset');
697 -
698 - 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')))) {
699 1394 return true;
700 1395 }
701 -
702 1396 return false;
703 1397 }
704 1398
705 - /**
706 - * Init Visual Mapper data
707 - *
708 - * @return bool|string - HTML data source for Visual Mapper
709 - */
1399 + // visual mapper
710 1400 public function visual_mapper() {
711 1401
712 - $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>';
713 1460 $vc .= "<div class='e2pdf-grid'>";
714 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("ID", "e2pdf"), 'id')}</div>";
715 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Author", "e2pdf"), 'post_author')}</div>";
716 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Date", "e2pdf"), 'post_date')}</div>";
717 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Date (GMT)", "e2pdf"), 'post_date_gmt')}</div>";
718 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Content", "e2pdf"), 'post_content')}</div>";
719 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Title", "e2pdf"), 'post_title')}</div>";
720 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Excerpt", "e2pdf"), 'post_excerpt')}</div>";
721 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Status", "e2pdf"), 'post_status')}</div>";
722 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Comment Status", "e2pdf"), 'comment_status')}</div>";
723 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Ping Status", "e2pdf"), 'ping_status')}</div>";
724 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Post Password", "e2pdf"), 'post_password')}</div>";
725 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Post Name", "e2pdf"), 'post_name')}</div>";
726 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("To Ping", "e2pdf"), 'to_ping')}</div>";
727 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Ping", "e2pdf"), 'pinged')}</div>";
728 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Modified Date", "e2pdf"), 'post_modified')}</div>";
729 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Modified Date (GMT)", "e2pdf"), 'post_modified_gmt')}</div>";
730 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Filtered Content", "e2pdf"), 'post_content_filtered')}</div>";
731 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Parent ID", "e2pdf"), 'post_parent')}</div>";
732 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("GUID", "e2pdf"), 'guid')}</div>";
733 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Menu Order", "e2pdf"), 'menu_order')}</div>";
734 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Type", "e2pdf"), 'post_type')}</div>";
735 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Mime Type", "e2pdf"), 'post_mime_type')}</div>";
736 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Comments Count", "e2pdf"), 'comment_count')}</div>";
737 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Filter", "e2pdf"), 'filter')}</div>";
738 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Post Thumbnail", "e2pdf"), 'post_thumbnail')}</div>";
739 - $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 + }
740 1536 return $vc;
741 1537 }
742 1538
743 - private function get_vm_element($name, $id) {
744 - $element = "<div>";
745 - $element .= "<label>{$name}:</label>";
746 - $element .= "<input type='text' name='[{$id}]' value='[{$id}]' class='e2pdf-w100'>";
747 - $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>';
748 1629 return $element;
749 1630 }
750 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 + }
751 1766 }