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