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 +1586 -527 1.02.021.32.49 View file →
@@ -1,707 +1,1766 @@
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;
18 + private $info = [
19 + 'key' => 'wordpress',
20 + 'title' => 'WordPress',
21 + ];
19 22
20 - function __construct() {
21 - parent::__construct();
23 + // info
24 + public function info($key = false) {
25 + if ($key && isset($this->info[$key])) {
26 + return $this->info[$key];
27 + } else {
28 + return [
29 + $this->info['key'] => $this->info['title'],
30 + ];
31 + }
22 32 }
23 33
24 - /**
25 - * Get info about extension
26 - *
27 - * @return array() - Extension key and name
28 - */
29 - public function info() {
30 - return array(
31 - 'wordpress' => __('Wordpress', 'e2pdf')
32 - );
33 - }
34 -
35 - /**
36 - * Check if needed plugin active
37 - *
38 - * @return bool - Activated/Not Activated plugin
39 - */
34 + // active
40 35 public function active() {
41 36 return true;
42 37 }
43 38
44 - /**
45 - * Check if export item function available
46 - *
47 - * @return bool - Item export available/not available
48 - */
49 - public function export() {
50 - return false;
51 - }
52 -
53 - /**
54 - * Set option
55 - *
56 - * @param string $attr - Key of option
57 - * @param string $value - Value of option
58 - *
59 - * @return bool - Status of setting option
60 - */
39 + // set
61 40 public function set($key, $value) {
62 41 if (!isset($this->options)) {
63 42 $this->options = new stdClass();
64 43 }
65 -
66 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 + }
67 66 }
68 67
69 - /**
70 - * Get option by key
71 - *
72 - * @param string $key - Key to get assigned option value
73 - *
74 - * @return mixed
75 - */
68 + // get
76 69 public function get($key) {
70 + if ($key == 'user_id' && $this->get('item') == '-3') {
71 + $key = 'dataset';
72 + }
77 73 if (isset($this->options->$key)) {
78 74 $value = $this->options->$key;
79 - return $value;
80 75 } else {
81 - return false;
76 + switch ($key) {
77 + case 'args':
78 + $value = [];
79 + break;
80 + default:
81 + $value = false;
82 + break;
83 + }
82 84 }
85 + return $value;
83 86 }
84 87
85 - /**
86 - * Get items to work with
87 - *
88 - * @return array() - List of available items
89 - */
90 - public function get_items() {
91 - $content = array();
92 -
93 - $content[] = array(
94 - 'key' => 'post',
95 - 'value' => __('Wordpress Posts', 'e2pdf'),
96 - );
97 - $content[] = array(
98 - 'key' => 'page',
99 - 'value' => __('Wordpress Pages', 'e2pdf'),
100 - );
101 -
102 - return $content;
88 + // items
89 + public function items() {
90 + $items = [];
91 + $forms = get_post_types([], 'names');
92 + foreach ($forms as $form) {
93 + if ($form != 'attachment') {
94 + $items[] = $this->item($form);
95 + }
96 + }
97 + $items[] = $this->item('-3');
98 + return $items;
103 99 }
104 100
105 - /**
106 - * Get entries for export
107 - *
108 - * @param string $item - Item
109 - * @param string $name - Entries names
110 - *
111 - * @return array() - Entries list
112 - */
113 - public function get_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 + );
114 113
115 - $datasets = array();
116 -
117 - if ($item) {
118 - if ($item == 'page') {
119 - $datasets_tmp = get_pages();
120 - } elseif ($item == 'post') {
121 - $datasets_tmp = get_posts();
122 - }
123 -
124 - if ($datasets_tmp) {
125 - foreach ($datasets_tmp as $key => $dataset) {
126 - $this->set('item', $item);
127 - $this->set('dataset', $dataset->ID);
128 - $dataset_title = $this->render($name);
129 - if (!$dataset_title) {
130 - $dataset_title = $dataset->post_title;
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 + ];
131 126 }
132 - $datasets[] = array(
133 - 'key' => $dataset->ID,
134 - '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 + ]
135 140 );
141 + } else {
142 + $entries = get_posts(
143 + [
144 + 'post_type' => $item_id,
145 + 'numberposts' => -1,
146 + 'post_status' => 'any',
147 + ]
148 + );
136 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 + }
137 164 }
138 165 }
139 -
140 166 return $datasets;
141 167 }
142 168
143 - /**
144 - * Get dataset
145 - *
146 - * @param int $dataset - Dataset ID
147 - *
148 - * @return object - Dataset
149 - */
150 - public function get_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 + }
151 193
152 - $dataset = (int) $dataset;
153 -
154 - if (!$dataset) {
194 + // get template actions
195 + public function get_template_actions($template = false) {
196 + $template = (int) $template;
197 + if (!$template) {
155 198 return;
156 199 }
157 -
158 - $data = new stdClass();
159 - $data->url = $this->helper->get_url(array('post' => $dataset, 'action' => 'edit'), 'post.php?');
160 -
161 - return $data;
200 + $actions = new stdClass();
201 + $actions->delete = false;
202 + return $actions;
162 203 }
163 204
164 - /**
165 - * Get item
166 - *
167 - * @param string $item - Item
168 - *
169 - * @return object - Item
170 - */
171 - public function get_item($item = false) {
172 -
173 - $form = new stdClass();
174 - if ($item == 'post') {
175 - $form->name = __('Wordpress Posts', 'e2pdf');
176 - $form->url = $this->helper->get_url(array('post_type' => $item), 'edit.php?');
177 - } elseif ($item == 'page') {
178 - $form->name = __('Wordpress Pages', 'e2pdf');
179 - $form->url = $this->helper->get_url(array('post_type' => $item), 'edit.php?');
205 + // item
206 + public function item($item_id = false) {
207 + if (!$item_id && $this->get('item')) {
208 + $item_id = $this->get('item');
209 + }
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');
180 215 } else {
181 - $form->name = '';
182 - $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 + }
183 226 }
184 -
185 - return $form;
227 + return $item;
186 228 }
187 229
230 + // load filters
188 231 public function load_filters() {
189 - add_filter('the_content', array($this, 'filter_content'), 10, 2);
190 - }
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']);
191 235
192 - /**
193 - * Render value according to content
194 - *
195 - * @param string $value - Content
196 - * @param string $type - Type of rendering value
197 - * @param array $field - Field details
198 - *
199 - * @return string - Fully rendered value
200 - */
201 - public function render($value, $type = false, $field = array()) {
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);
202 241
203 - $value = $this->render_shortcodes($value, $type, $field);
204 - $value = $this->strip_shortcodes($value);
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);
205 253
206 - if ($type === 'value' && isset($field['type']) && $field['type'] === 'e2pdf-checkbox' && isset($field['properties']['option'])) {
207 - $option = $this->render($field['properties']['option']);
208 - $options = explode(', ', $value);
209 - $option_options = explode(', ', $option);
210 - if (is_array($options) && is_array($option_options) && !array_diff($option_options, $options)) {
211 - return $option;
212 - } else {
213 - return "";
214 - }
215 - }
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']);
216 259
217 - if ($type === 'value') {
218 - $value = str_replace("&#91;", "[", $value);
219 - }
260 + /**
261 + * WPBakery Page Builder Image Object Link
262 + */
263 + add_filter('vc_map_get_attributes', [$this, 'filter_vc_map_get_attributes'], 10, 2);
220 264
221 - return $value;
222 - }
265 + /**
266 + * Flatsome theme global tab content
267 + */
268 + add_filter('theme_mod_tab_content', [$this, 'filter_content_custom']);
223 269
224 - /**
225 - * Render shortcodes which available in this extension
226 - *
227 - * @param string $value - Content
228 - * @param string $type - Type of rendering value
229 - * @param array $field - Field details
230 - *
231 - * @return string - Value with rendered shortcodes
232 - */
233 - public function render_shortcodes($value, $type = false, $field = array()) {
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']);
234 277
235 - $dataset_id = $this->get('dataset');
236 - $item_id = $this->get('item');
237 - $post = get_post($dataset_id);
278 + /**
279 + * Thrive Theme Builder dynamic shortcode support
280 + */
281 + add_filter('thrive_theme_template_content', [$this, 'filter_thrive_theme_template_content']);
238 282
239 - $ext_shortcodes = array(
240 - "[id]" => $post->ID,
241 - "[post_author]" => get_userdata($post->post_author)->user_nicename,
242 - "[post_date]" => $post->post_date,
243 - "[post_date_gmt]" => $post->post_date_gmt,
244 - "[post_content]" => $post->post_content,
245 - "[post_title]" => $post->post_title,
246 - "[post_excerpt]" => $post->post_excerpt,
247 - "[post_status]" => $post->post_status,
248 - "[comment_status]" => $post->comment_status,
249 - "[ping_status]" => $post->ping_status,
250 - "[post_password]" => $post->post_password,
251 - "[post_name]" => $post->post_name,
252 - "[to_ping]" => $post->to_ping,
253 - "[pinged]" => $post->pinged,
254 - "[post_modified]" => $post->post_modified,
255 - "[post_modified_gmt]" => $post->post_modified_gmt,
256 - "[post_content_filtered]" => $post->post_content_filtered,
257 - "[post_parent]" => $post->post_parent,
258 - "[guid]" => $post->guid,
259 - "[menu_order]" => $post->menu_order,
260 - "[post_type]" => $post->post_type,
261 - "[post_mime_type]" => $post->post_mime_type,
262 - "[comment_count]" => $post->comment_count,
263 - "[filter]" => $post->filter
264 - );
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']);
265 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']);
266 294
267 - $post_content = false;
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']);
268 300
269 - if (false !== strpos($value, '[')) {
301 + /**
302 + * Cornerstone Builder
303 + * https://theme.co/cornerstone/
304 + */
305 + add_filter('cs_element_pre_render', [$this, 'filter_cs_element_pre_render']);
270 306
271 - $shortcode_tags = array(
272 - 'meta',
273 - );
274 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
275 - $tagnames = array_intersect($shortcode_tags, $matches[1]);
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);
276 312
277 - if (!empty($tagnames)) {
278 - $pattern = get_shortcode_regex($tagnames);
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);
279 318
280 - preg_match_all("/$pattern/", $value, $shortcodes);
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']);
281 324
282 - foreach ($shortcodes[0] as $key => $shortcode_value) {
283 - $shortcode = array();
284 - $shortcode[1] = $shortcodes[1][$key];
285 - $shortcode[2] = $shortcodes[2][$key];
286 - $shortcode[3] = $shortcodes[3][$key];
287 - $shortcode[4] = $shortcodes[4][$key];
288 - $shortcode[5] = $shortcodes[5][$key];
289 - $shortcode[6] = $shortcodes[6][$key];
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']);
290 330
291 - $atts = shortcode_parse_atts($shortcode[3]);
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);
335 + }
292 336
293 - if (array_key_exists('key', $atts)) {
294 - $value = str_replace($shortcode_value, get_post_meta($post->ID, $atts['key'], true), $value);
295 - }
296 - }
297 - }
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);
298 345
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']);
299 352
300 - $shortcode_tags = array(
301 - 'e2pdf-format-number',
302 - 'e2pdf-format-date',
303 - 'e2pdf-format-output',
304 - );
305 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
306 - $tagnames = array_intersect($shortcode_tags, $matches[1]);
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);
307 358
308 - if (!empty($tagnames)) {
359 + /**
360 + * MemberPress Mail attachments remove
361 + * https://memberpress.com/
362 + */
363 + add_action('mepr_email_sent', [$this, 'action_mepr_email_sent']);
309 364
310 - $pattern = get_shortcode_regex($tagnames);
311 - preg_match_all("/$pattern/", $value, $shortcodes);
312 - foreach ($shortcodes[0] as $key => $shortcode_value) {
313 - $shortcode = array();
314 - $shortcode[1] = $shortcodes[1][$key];
315 - $shortcode[2] = $shortcodes[2][$key];
316 - $shortcode[3] = $shortcodes[3][$key];
317 - $shortcode[4] = $shortcodes[4][$key];
318 - $shortcode[5] = $shortcodes[5][$key];
319 - $shortcode[6] = $shortcodes[6][$key];
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']);
320 371
321 - if (isset($shortcode['5'])) {
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']);
322 378
323 - if (strpos($shortcode['5'], "[post_content]") !== FALSE && !$this->get('no_filter') && !$post_content) {
324 - $ext_shortcodes['[post_content]'] = $this->before_render_post_content($ext_shortcodes['[post_content]']);
325 - $ext_shortcodes['[post_content]'] = apply_filters('the_content', $ext_shortcodes['[post_content]']);
326 - $ext_shortcodes['[post_content]'] = str_replace("</p>", "</p>&nbsp;\r\n", $ext_shortcodes['[post_content]']);
327 - $post_content = true;
328 - }
379 + /* Hooks */
380 + add_action('add_meta_boxes', [$this, 'hook_wordpress_page_edit']);
381 + }
329 382
330 - $sub_value = str_replace(array_keys($ext_shortcodes), $ext_shortcodes, $shortcode['5']);
331 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]" . $sub_value . "[/" . $shortcode['2'] . "]", $value);
332 - }
333 - }
334 - }
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);
335 390 }
391 + return $value;
392 + }
336 393
337 - $value = do_shortcode($value);
394 + // render shortcodes
395 + public function render_shortcodes($value, $field = []) {
338 396
339 - if (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
340 - $esig = isset($field['properties']['esig']) && $field['properties']['esig'] ? true : false;
341 - if ($esig) {
342 - //process e-signature
343 - $value = "";
344 - } else {
345 - if (!$this->helper->load('image')->get_image($value)) {
346 - $value = $this->strip_shortcodes($value);
347 - if (
348 - $value &&
349 - trim($value) != "" &&
350 - extension_loaded('gd') &&
351 - function_exists('imagettftext')
352 - ) {
353 - if (isset($field['properties']['text_color']) && $field['properties']['text_color']) {
354 - $penColour = $this->helper->load('convert')->to_hex_color($field['properties']['text_color']);
355 - } else {
356 - $penColour = array(0x14, 0x53, 0x94);
357 - }
397 + $element_id = isset($field['element_id']) ? $field['element_id'] : false;
358 398
359 - $default_options = array(
360 - 'imageSize' => array(isset($field['width']) ? $field['width'] : '400', isset($field['height']) ? $field['height'] : '150'),
361 - 'bgColour' => 'transparent',
362 - 'penColour' => $penColour
363 - );
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'));
364 405
365 - $options = array();
366 - $options = array_merge($default_options, $options);
406 + $wordpress_shortcodes = [
407 + 'id',
408 + 'post_author',
409 + 'post_date',
410 + 'post_date_gmt',
411 + 'post_content',
412 + 'post_title',
413 + 'post_excerpt',
414 + 'post_status',
415 + 'comment_status',
416 + 'ping_status',
417 + 'post_password',
418 + 'post_name',
419 + 'to_ping',
420 + 'pinged',
421 + 'post_modified',
422 + 'post_modified_gmt',
423 + 'post_content_filtered',
424 + 'post_parent',
425 + 'guid',
426 + 'menu_order',
427 + 'post_type',
428 + 'post_mime_type',
429 + 'comment_count',
430 + 'filter',
431 + 'post_thumbnail',
432 + 'get_the_post_thumbnail',
433 + 'get_the_post_thumbnail_url',
434 + 'get_permalink',
435 + 'get_post_permalink',
436 + ];
367 437
368 - $model_e2pdf_font = new Model_E2pdf_Font();
369 -
370 - $font = false;
371 - if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
372 - $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
438 + if (false !== strpos($value, '[')) {
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 + }
456 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
457 + $tagnames = array_intersect($shortcode_tags, $matches[1]);
458 + if (!empty($tagnames)) {
459 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
460 + foreach ($shortcodes[0] as $key => $shortcode_value) {
461 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
462 + $atts = shortcode_parse_atts($shortcode[3]);
463 + if ($shortcode[2] === 'e2pdf-content') {
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);
467 + }
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 . '';
471 + }
472 + if ($shortcode[2] === 'meta') {
473 + $shortcode[3] .= ' meta=true';
474 + }
475 + if ($shortcode[2] === 'terms') {
476 + $shortcode[3] .= ' terms=true';
477 + }
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);
485 + }
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);
492 + }
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 . '';
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 + }
373 508 }
374 - if (!$font) {
375 - $font = $model_e2pdf_font->get_font_path('Noto Sans');
376 - }
377 -
378 - $size = 150;
379 - if (isset($field['properties']['text_font_size']) && $field['properties']['text_font_size']) {
380 - $size = $field['properties']['text_font_size'];
381 - }
382 -
383 - $model_e2pdf_signature = new Model_E2pdf_Signature();
384 - $value = $model_e2pdf_signature->ttf_signature($value, $size, $font, $options);
385 - } else {
386 - $value = "";
387 509 }
388 510 }
511 + $value = $this->helper->load('field')->wrapper_shortcodes($value, $this, $field);
389 512 }
390 - } else {
391 - if (strpos($value, "[post_content]") !== FALSE && !$this->get('no_filter') && !$post_content) {
392 - $ext_shortcodes['[post_content]'] = $this->before_render_post_content($ext_shortcodes['[post_content]']);
393 - $ext_shortcodes['[post_content]'] = apply_filters('the_content', $ext_shortcodes['[post_content]']);
394 - $ext_shortcodes['[post_content]'] = str_replace("</p>", "</p>&nbsp;\r\n", $ext_shortcodes['[post_content]']);
395 - $post_content = true;
396 - }
397 - $value = str_replace(array_keys($ext_shortcodes), $ext_shortcodes, $value);
398 - $value = str_replace("[", '&#91;', $value);
513 +
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']);
399 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 + }
400 527
401 -
528 + // strip shortcodes
529 + public function strip_shortcodes($value) {
530 + $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
402 531 return $value;
403 532 }
404 533
405 - public function filter_custom_shortcodes() {
406 -
407 - }
408 -
409 - /**
410 - * Strip unused shortcodes
411 - *
412 - * @param string $value - Content
413 - *
414 - * @return string - Value with removed unused shortcodes
415 - */
416 - public function strip_shortcodes($value) {
417 - $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', "", $value);
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 + }
418 546 return $value;
419 547 }
420 548
549 + // auto
421 550 public function auto() {
422 - $response = array();
423 - $elements = array();
424 551
552 + $response = [];
553 + $elements = [];
425 554
426 - $post = $this->get('item');
427 -
428 - $elements[] = array(
429 - 'type' => 'e2pdf-html',
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',
430 741 'top' => '20',
431 742 'left' => '20',
432 743 'right' => '20',
433 - 'block' => true,
434 - 'properties' => array(
435 - 'value' => "<h1>[post_title]</h1>",
436 - )
437 - );
744 + ];
438 745
746 + $response['elements'] = $elements;
747 + return $response;
748 + }
439 749
440 - $elements[] = array(
441 - 'type' => 'e2pdf-html',
442 - 'top' => '20',
443 - 'left' => '20',
444 - 'right' => '20',
445 - 'block' => true,
446 - 'properties' => array(
447 - 'value' => __("Post name", 'e2pdf') . ": [post_name]",
448 - )
449 - );
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 + }
450 770
451 - $elements[] = array(
452 - 'type' => 'e2pdf-html',
453 - 'top' => '20',
454 - 'left' => '20',
455 - 'right' => '20',
456 - 'block' => true,
457 - 'properties' => array(
458 - 'value' => __("Post type", 'e2pdf') . ": [post_type]",
459 - )
460 - );
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 + }
461 775
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 + }
462 780
463 - $elements[] = array(
464 - 'type' => 'e2pdf-html',
465 - 'top' => '20',
466 - 'left' => '20',
467 - 'right' => '20',
468 - 'block' => true,
469 - 'properties' => array(
470 - 'value' => __("ID", 'e2pdf') . ": [id]",
471 - )
472 - );
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 + }
473 794
474 - $elements[] = array(
475 - 'type' => 'e2pdf-html',
476 - 'top' => '20',
477 - 'left' => '20',
478 - 'right' => '20',
479 - 'block' => true,
480 - 'properties' => array(
481 - 'value' => __("Author", 'e2pdf') . ": [post_author]",
482 - )
483 - );
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 + }
484 799
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 + }
485 811
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 + }
486 819
487 - $elements[] = array(
488 - 'type' => 'e2pdf-html',
489 - 'top' => '20',
490 - 'left' => '20',
491 - 'right' => '20',
492 - 'block' => true,
493 - 'properties' => array(
494 - 'value' => "[post_content]",
495 - 'dynamic_height' => '1',
496 - 'height' => '300',
497 - )
498 - );
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) . '/');
830 + }
831 + $this->helper->deset('wordpress_attachments_um');
832 + $this->helper->deset('wordpress_attachments_um_del');
833 + }
834 + }
499 835
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;
844 + }
500 845
501 - $elements[] = array(
502 - 'type' => 'e2pdf-html',
503 - 'top' => '20',
504 - 'left' => '20',
505 - 'right' => '20',
506 - 'block' => true,
507 - 'properties' => array(
508 - 'value' => __("Created", 'e2pdf') . ": [post_date]",
509 - )
510 - );
511 -
512 - $elements[] = array(
513 - 'type' => 'e2pdf-html',
514 - 'top' => '20',
515 - 'left' => '20',
516 - 'right' => '20',
517 - 'block' => true,
518 - 'properties' => array(
519 - 'value' => __("Modified", 'e2pdf') . ": [post_modified]",
520 - )
521 - );
522 -
523 -
524 - $response['page'] = array(
525 - 'bottom' => '20',
526 - 'top' => '20',
527 - );
528 -
529 -
530 -
531 - $response['elements'] = $elements;
532 - return $response;
846 + /**
847 + * Disable pre-rendering of E2Pdf shortcodes in the Toolset template.
848 + * https://toolset.com/
849 + */
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;
533 861 }
534 862
535 863 /**
536 - * Action before wordpress post/page render
537 - * Force to apply e2pdf shortcodes
538 - *
539 - * @param string $content - Content
540 - *
541 - * @return string - Content with update shortcodes
864 + * Enable rendering of E2Pdf shortcodes in the Toolset template.
865 + * https://toolset.com/
542 866 */
543 - public function before_render_post_content($content) {
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 + }
544 879
545 - if (false === strpos($content, '[')) {
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, '[')) {
546 884 return $content;
547 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 + }
945 + }
946 + }
947 + return $content;
948 + }
548 949
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 + }
549 963
550 - $shortcode_tags = array(
551 - 'e2pdf-exclude',
552 - );
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']))) {
553 967
968 + if (!empty($atts['link'])) {
969 + $atts['link'] = $this->filter_content($atts['link']);
970 + }
554 971
555 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
556 - $tagnames = array_intersect($shortcode_tags, $matches[1]);
972 + if (!empty($atts['img_link'])) {
973 + $atts['img_link'] = $this->filter_content($atts['img_link']);
974 + }
975 + }
976 + return $atts;
977 + }
557 978
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 + }
558 986
559 - if (!empty($tagnames)) {
560 - $pattern = get_shortcode_regex($tagnames);
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 + }
561 994
562 - preg_match_all("/$pattern/", $content, $shortcodes);
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 + }
563 1002
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 + }
564 1008
565 - foreach ($shortcodes[0] as $key => $shortcode_value) {
1009 + // filter content custom
1010 + public function filter_content_custom($content) {
1011 + $content = $this->filter_content($content);
1012 + return $content;
1013 + }
566 1014
567 - $shortcode = array();
568 - $shortcode[1] = $shortcodes[1][$key];
569 - $shortcode[2] = $shortcodes[2][$key];
570 - $shortcode[3] = $shortcodes[3][$key];
571 - $shortcode[4] = $shortcodes[4][$key];
572 - $shortcode[5] = $shortcodes[5][$key];
573 - $shortcode[6] = $shortcodes[6][$key];
1015 + // filter content loop
1016 + public function filter_content_loop($content) {
1017 + $content = $this->filter_content($content, false, false);
1018 + return $content;
1019 + }
574 1020
575 - $shortcode[3] .= " apply=\"true\"";
576 - $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
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 + }
577 1068 }
578 1069 }
1070 + return $attachments;
1071 + }
579 1072
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 + }
580 1093
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 + }
581 1153 return $content;
582 1154 }
583 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 +
584 1166 /**
585 - * Search and update shortcodes for this extension inside content
586 - * Auto set of dataset id
587 - *
588 - * @param string $content - Content
589 - *
590 - * @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/
591 1169 */
592 - public function filter_content($content) {
593 - global $post;
594 -
595 - if (false === strpos($content, '[')) {
1170 + public function filter_um_email_send_message_content($content) {
1171 + if (!is_string($content) || false === strpos($content, '[')) {
596 1172 return $content;
597 1173 }
598 -
599 - $shortcode_tags = array(
1174 + $shortcode_tags = [
600 1175 'e2pdf-download',
601 - 'e2pdf-view'
602 - );
603 -
1176 + 'e2pdf-save',
1177 + 'e2pdf-attachment',
1178 + 'e2pdf-view',
1179 + 'e2pdf-adobesign',
1180 + 'e2pdf-zapier',
1181 + ];
604 1182 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
605 1183 $tagnames = array_intersect($shortcode_tags, $matches[1]);
606 -
607 1184 if (!empty($tagnames)) {
608 - $pattern = get_shortcode_regex($tagnames);
609 -
610 - preg_match_all("/$pattern/", $content, $shortcodes);
611 -
1185 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
612 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 + }
613 1233
614 - wp_reset_postdata();
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 + }
615 1252
616 - $shortcode = array();
617 - $shortcode[1] = $shortcodes[1][$key];
618 - $shortcode[2] = $shortcodes[2][$key];
619 - $shortcode[3] = $shortcodes[3][$key];
620 - $shortcode[4] = $shortcodes[4][$key];
621 - $shortcode[5] = $shortcodes[5][$key];
622 - $shortcode[6] = $shortcodes[6][$key];
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 + }
623 1312
624 - $atts = shortcode_parse_atts($shortcode[3]);
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 + }
625 1321
626 - if (!array_key_exists('dataset', $atts) && array_key_exists('id', $atts)) {
627 - $template = new Model_E2pdf_Template();
628 - $template->load($atts['id']);
629 - if ($template->get('extension') === 'wordpress') {
630 - if (isset($post->ID)) {
631 - $dataset_id = $post->ID;
632 - $atts['dataset'] = $dataset_id;
633 - $shortcode[3] .= " dataset=\"{$dataset_id}\"";
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';
634 1334 }
1335 + if (!isset($atts['filter'])) {
1336 + $atts['filter'] = 'true';
1337 + }
635 1338 }
636 1339 }
637 - $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
638 1340 }
639 1341 }
1342 + return $atts;
1343 + }
640 1344
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;
1372 + $atts['dataset'] = $dataset;
1373 + $shortcode[3] .= ' dataset="' . $dataset . '"';
1374 + }
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);
1385 + }
1386 + }
1387 + }
641 1388 return $content;
642 1389 }
643 1390
1391 + // verify
644 1392 public function verify() {
645 - $item_id = $this->get('item');
646 - $dataset_id = $this->get('dataset');
647 -
648 - if ($item_id && $dataset_id && $item_id == get_post_type($dataset_id)) {
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')))) {
649 1394 return true;
650 1395 }
651 -
652 1396 return false;
653 1397 }
654 1398
1399 + // visual mapper
655 1400 public function visual_mapper() {
656 1401
657 - $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>';
658 1460 $vc .= "<div class='e2pdf-grid'>";
659 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("ID", "e2pdf"), 'id')}</div>";
660 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Author", "e2pdf"), 'post_author')}</div>";
661 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Date", "e2pdf"), 'post_date')}</div>";
662 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Date (GMT)", "e2pdf"), 'post_date_gmt')}</div>";
663 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Content", "e2pdf"), 'post_content')}</div>";
664 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Title", "e2pdf"), 'post_title')}</div>";
665 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Excerpt", "e2pdf"), 'post_excerpt')}</div>";
666 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Status", "e2pdf"), 'post_status')}</div>";
667 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Comment Status", "e2pdf"), 'comment_status')}</div>";
668 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Ping Status", "e2pdf"), 'ping_status')}</div>";
669 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Post Password", "e2pdf"), 'post_password')}</div>";
670 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Post Name", "e2pdf"), 'post_name')}</div>";
671 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("To Ping", "e2pdf"), 'to_ping')}</div>";
672 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Ping", "e2pdf"), 'pinged')}</div>";
673 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Modified Date", "e2pdf"), 'post_modified')}</div>";
674 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Modified Date (GMT)", "e2pdf"), 'post_modified_gmt')}</div>";
675 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Filtered Content", "e2pdf"), 'post_content_filtered')}</div>";
676 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Parent ID", "e2pdf"), 'post_parent')}</div>";
677 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("GUID", "e2pdf"), 'guid')}</div>";
678 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Menu Order", "e2pdf"), 'menu_order')}</div>";
679 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Type", "e2pdf"), 'post_type')}</div>";
680 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Mime Type", "e2pdf"), 'post_mime_type')}</div>";
681 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Comments Count", "e2pdf"), 'comment_count')}</div>";
682 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Filter", "e2pdf"), 'filter')}</div>";
683 - $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 + }
684 1536 return $vc;
685 1537 }
686 1538
687 - private function get_vm_element($name, $id) {
688 - $element = "<div>";
689 - $element .= "<label>{$name}:</label>";
690 - $element .= "<input type='text' name='[{$id}]' value='[{$id}]'>";
691 - $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>';
692 1629 return $element;
693 1630 }
694 1631
695 - public function load_shortcodes() {
696 - add_shortcode('e2pdf-exclude', array($this, 'shortcode_e2pdf_exclude'));
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 + }
697 1646 }
698 1647
699 - function shortcode_e2pdf_exclude($atts = array(), $content = null) {
700 - if (is_array($atts) && array_key_exists('apply', $atts)) {
701 - return '';
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 + }
702 1727 } else {
703 - return $content;
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 + }
704 1763 }
1764 + return $actions;
705 1765 }
706 -
707 1766 }