PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.49
E2Pdf – Export Pdf Tool for WordPress v1.32.49
1.32.51 1.32.49 1.32.48 1.32.43 1.32.40 1.32.34 1.32.32 1.32.31 1.32.26 1.32.22 1.32.23 1.32.18 1.32.17 1.32.15 trunk 1.00.00 1.00.13 1.01.01 1.02.02 1.03.07 1.04.07 1.05.03 1.06.02 1.07.11 1.08.00 All 73 releases
← All changes | classes/extension/e2pdf-wordpress.php +1530 -581 1.08.061.32.49 View file →
@@ -1,277 +1,410 @@
1 1 <?php
2 2
3 3 /**
4 - * E2pdf Wordpress Extension
5 - *
6 - * @copyright Copyright 2017 https://e2pdf.com
7 - * @license GPL v2
8 - * @version 1
9 - * @link https://e2pdf.com
10 - * @since 0.00.01
4 + * File: /extension/e2pdf-wordpress.php
5 + *
6 + * @package E2Pdf
7 + * @license GPLv3
8 + * @link https://e2pdf.com
11 9 */
12 10 if (!defined('ABSPATH')) {
13 11 die('Access denied.');
14 12 }
15 13
14 +// phpcs:ignore WordPress.WP.CapitalPDangit.MisspelledClassName
16 15 class Extension_E2pdf_Wordpress extends Model_E2pdf_Model {
17 16
18 17 private $options;
19 - private $info = array(
18 + private $info = [
20 19 'key' => 'wordpress',
21 - 'title' => 'WordPress'
22 - );
20 + 'title' => 'WordPress',
21 + ];
23 22
24 - function __construct() {
25 - parent::__construct();
26 - }
27 -
28 - /**
29 - * Get info about extension
30 - *
31 - * @param string $key - Key to get assigned extension info value
32 - *
33 - * @return array|string - Extension Key and Title or Assigned extension info value
34 - */
23 + // info
35 24 public function info($key = false) {
36 25 if ($key && isset($this->info[$key])) {
37 26 return $this->info[$key];
38 27 } else {
39 - return array(
40 - $this->info['key'] => $this->info['title']
41 - );
28 + return [
29 + $this->info['key'] => $this->info['title'],
30 + ];
42 31 }
43 32 }
44 33
45 - /**
46 - * Check if needed plugin active
47 - *
48 - * @return bool - Activated/Not Activated plugin
49 - */
34 + // active
50 35 public function active() {
51 36 return true;
52 37 }
53 38
54 - /**
55 - * Set option
56 - *
57 - * @param string $key - Key of option
58 - * @param string $value - Value of option
59 - *
60 - * @return bool - Status of setting option
61 - */
39 + // set
62 40 public function set($key, $value) {
63 41 if (!isset($this->options)) {
64 42 $this->options = new stdClass();
65 43 }
66 -
67 44 $this->options->$key = $value;
45 + switch ($key) {
46 + case 'dataset':
47 + $this->set('cached_post', false);
48 + if ($this->get('dataset')) {
49 + if ($this->get('item') == '-3') {
50 + $this->set('cached_post', get_user_by('id', $this->get('dataset')));
51 + } else {
52 + $pll = $this->helper->load('translator')->isPolylang();
53 + if ($pll) {
54 + $lang = pll_get_post_language($this->get('dataset'));
55 + if ($lang) {
56 + PLL()->curlang = PLL()->model->get_language($lang);
57 + }
58 + }
59 + $this->set('cached_post', get_post($this->get('dataset')));
60 + }
61 + }
62 + break;
63 + default:
64 + break;
65 + }
68 66 }
69 67
70 - /**
71 - * Get option by key
72 - *
73 - * @param string $key - Key to get assigned option value
74 - *
75 - * @return mixed
76 - */
68 + // get
77 69 public function get($key) {
70 + if ($key == 'user_id' && $this->get('item') == '-3') {
71 + $key = 'dataset';
72 + }
78 73 if (isset($this->options->$key)) {
79 74 $value = $this->options->$key;
80 - return $value;
81 - } elseif ($key == 'args') {
82 - return array();
83 75 } else {
84 - return false;
76 + switch ($key) {
77 + case 'args':
78 + $value = [];
79 + break;
80 + default:
81 + $value = false;
82 + break;
83 + }
85 84 }
85 + return $value;
86 86 }
87 87
88 - /**
89 - * Get items to work with
90 - *
91 - * @return array() - List of available items
92 - */
88 + // items
93 89 public function items() {
94 - $content = array();
95 -
96 - $items = get_post_types(array(), 'names');
97 -
98 - foreach ($items as $item) {
99 - if ($item != 'attachment') {
100 - $content[] = $this->item($item);
90 + $items = [];
91 + $forms = get_post_types([], 'names');
92 + foreach ($forms as $form) {
93 + if ($form != 'attachment') {
94 + $items[] = $this->item($form);
101 95 }
102 96 }
103 -
104 - return $content;
97 + $items[] = $this->item('-3');
98 + return $items;
105 99 }
106 100
107 - /**
108 - * Get entries for export
109 - *
110 - * @param string $item - Item
111 - * @param string $name - Entries names
112 - *
113 - * @return array() - Entries list
114 - */
115 - public function datasets($item = false, $name = false) {
101 + // datasets
102 + public function datasets($item_id = false, $name = false) {
103 + $datasets = [];
104 + if ($item_id) {
105 + if ($item_id == '-3') {
106 + $entries = get_users(
107 + [
108 + 'fields' => [
109 + 'ID', 'user_login',
110 + ],
111 + ]
112 + );
116 113
117 - $datasets = array();
118 -
119 - if ($item) {
120 - $datasets_tmp = get_posts(
121 - array(
122 - 'post_type' => $item,
123 - 'numberposts' => -1,
124 - 'post_status' => 'any'
125 - ));
126 -
127 - if ($datasets_tmp) {
128 - foreach ($datasets_tmp as $key => $dataset) {
129 - $this->set('item', $item);
130 - $this->set('dataset', $dataset->ID);
131 -
132 - $dataset_title = $this->render($name);
133 - if (!$dataset_title) {
134 - $dataset_title = isset($dataset->post_title) && $dataset->post_title ? $dataset->post_title : $dataset->ID;
114 + if ($entries) {
115 + $this->set('item', $item_id);
116 + foreach ($entries as $key => $entry) {
117 + $this->set('dataset', $entry->ID);
118 + $entry_title = $this->render($name);
119 + if (!$entry_title) {
120 + $entry_title = isset($entry->user_login) && $entry->user_login ? $entry->user_login : $entry->ID;
121 + }
122 + $datasets[] = [
123 + 'key' => $entry->ID,
124 + 'value' => $entry_title,
125 + ];
135 126 }
136 - $datasets[] = array(
137 - 'key' => $dataset->ID,
138 - '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 + ]
139 140 );
141 + } else {
142 + $entries = get_posts(
143 + [
144 + 'post_type' => $item_id,
145 + 'numberposts' => -1,
146 + 'post_status' => 'any',
147 + ]
148 + );
140 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 + }
141 164 }
142 165 }
143 -
144 166 return $datasets;
145 167 }
146 168
147 - /**
148 - * Get dataset
149 - *
150 - * @param int $dataset - Dataset ID
151 - *
152 - * @return object - Dataset
153 - */
154 - 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 + }
155 193
156 - $dataset = (int) $dataset;
157 -
158 - if (!$dataset) {
194 + // get template actions
195 + public function get_template_actions($template = false) {
196 + $template = (int) $template;
197 + if (!$template) {
159 198 return;
160 199 }
161 -
162 - $data = new stdClass();
163 - $data->url = $this->helper->get_url(array('post' => $dataset, 'action' => 'edit'), 'post.php?');
164 -
165 - return $data;
200 + $actions = new stdClass();
201 + $actions->delete = false;
202 + return $actions;
166 203 }
167 204
168 - /**
169 - * Get item
170 - *
171 - * @param string $item - Item
172 - *
173 - * @return object - Item
174 - */
175 - public function item($item = false) {
176 -
177 - if (!$item && $this->get('item')) {
178 - $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');
179 209 }
180 -
181 - $form = new stdClass();
182 - $post = get_post_type_object($item);
183 - if ($post) {
184 - $form->id = $item;
185 - $form->name = $post->label ? $post->label : $item;
186 - $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');
187 215 } else {
188 - $form->id = '';
189 - $form->name = '';
190 - $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 + }
191 226 }
192 -
193 - return $form;
227 + return $item;
194 228 }
195 229
230 + // load filters
196 231 public function load_filters() {
197 - add_filter('the_content', array($this, 'filter_content'), 10, 2);
198 - add_filter('widget_text', array($this, 'filter_content_custom'), 10, 1);
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']);
199 235
200 236 /**
237 + * Popup Maker – Popup for opt-ins, lead gen, & more
201 238 * https://wordpress.org/plugins/popup-maker/
202 239 */
203 - add_filter('pum_popup_content', array($this, 'filter_content'), 10, 2);
240 + add_filter('pum_popup_content', [$this, 'filter_the_content'], 10, 2);
204 241
205 242 /**
243 + * Events Manager
206 244 * https://wordpress.org/plugins/events-manager/
207 245 */
208 - add_filter('em_event_output_placeholder', array($this, 'filter_content_custom'), 0, 1);
209 - add_filter('em_event_output', array($this, 'filter_content_custom'), 10, 1);
210 - add_filter('em_booking_output_placeholder', array($this, 'filter_content_custom'), 0, 1);
211 - add_filter('em_booking_output', array($this, 'filter_content_custom'), 10, 1);
212 - add_filter('em_location_output_placeholder', array($this, 'filter_content_custom'), 0, 1);
213 - add_filter('em_location_output', array($this, 'filter_content_custom'), 10, 1);
214 - add_filter('em_category_output_placeholder', array($this, 'filter_content_custom'), 0, 1);
246 + add_filter('em_event_output_placeholder', [$this, 'filter_content_custom'], 0);
247 + add_filter('em_event_output', [$this, 'filter_content_custom']);
248 + add_filter('em_booking_output_placeholder', [$this, 'filter_content_custom'], 0);
249 + add_filter('em_booking_output', [$this, 'filter_content_custom']);
250 + add_filter('em_location_output_placeholder', [$this, 'filter_content_custom'], 0);
251 + add_filter('em_location_output', [$this, 'filter_content_custom']);
252 + add_filter('em_category_output_placeholder', [$this, 'filter_content_custom'], 0);
253 +
254 + /**
255 + * Beaver Builder – WordPress Page Builder
256 + * https://wordpress.org/plugins/beaver-builder-lite-version/
257 + */
258 + add_filter('fl_builder_before_render_shortcodes', [$this, 'filter_content_loop']);
259 +
260 + /**
261 + * WPBakery Page Builder Image Object Link
262 + */
263 + add_filter('vc_map_get_attributes', [$this, 'filter_vc_map_get_attributes'], 10, 2);
264 +
265 + /**
266 + * Flatsome theme global tab content
267 + */
268 + add_filter('theme_mod_tab_content', [$this, 'filter_content_custom']);
269 +
270 + /**
271 + * MemberPress Mail attachments
272 + * https://memberpress.com/
273 + */
274 + add_filter('mepr_email_send_attachments', [$this, 'filter_mepr_email_send_attachments'], 10, 4);
275 + add_filter('the_content', [$this, 'filter_mepr_the_content'], 99);
276 + add_filter('mepr_custom_thankyou_message', [$this, 'filter_mepr_custom_thankyou_message']);
277 +
278 + /**
279 + * Thrive Theme Builder dynamic shortcode support
280 + */
281 + add_filter('thrive_theme_template_content', [$this, 'filter_thrive_theme_template_content']);
282 +
283 + /**
284 + * WPBakery Page Builder Grid Item
285 + * [e2pdf-download id="1" dataset="{{ post_data:ID }}"]
286 + */
287 + add_filter('vc_basic_grid_items_list', [$this, 'filter_vc_basic_grid_items_list']);
288 +
289 + /**
290 + * Themify Builder dynamic shortcode support
291 + * https://wordpress.org/plugins/themify-builder/
292 + */
293 + add_filter('themify_builder_module_content', [$this, 'filter_themify_builder_module_content']);
294 +
295 + /**
296 + * Impreza theme by Up Solutions
297 + * https://themeforest.net/item/impreza-retina-responsive-wordpress-theme/6434280
298 + */
299 + add_filter('us_content_template_the_content', [$this, 'filter_content_custom']);
300 +
301 + /**
302 + * Cornerstone Builder
303 + * https://theme.co/cornerstone/
304 + */
305 + add_filter('cs_element_pre_render', [$this, 'filter_cs_element_pre_render']);
306 +
307 + /**
308 + * Divi Theme Builder
309 + * https://www.elegantthemes.com/
310 + */
311 + add_filter('et_pb_module_content', [$this, 'filter_et_pb_module_content'], 30, 6);
312 +
313 + /**
314 + * User Registration & Membership – Custom Registration Form, Login Form, and User Profile
315 + * https://wordpress.org/plugins/user-registration/
316 + */
317 + add_filter('user_registration_smart_tag_values', [$this, 'filter_user_registration_smart_tag_values'], 0);
318 +
319 + /**
320 + * Ultimate Member – User Profile, Registration, Login, Member Directory, Content Restriction & Membership Plugin
321 + * https://wordpress.org/plugins/ultimate-member/
322 + */
323 + add_filter('um_email_send_message_content', [$this, 'filter_um_email_send_message_content']);
324 +
325 + /**
326 + * Shortcodes do not render when the Toolset template is used
327 + * https://toolset.com/
328 + */
329 + add_filter('wpv_filter_content_template_output', [$this, 'filter_wpv_filter_content_template_output']);
330 +
331 + /* Hooks */
332 + add_filter('post_row_actions', [$this, 'hook_wordpress_row_actions'], 10, 2);
333 + add_filter('page_row_actions', [$this, 'hook_wordpress_row_actions'], 10, 2);
334 + add_filter('user_row_actions', [$this, 'hook_wordpress_row_actions'], 10, 2);
215 335 }
216 336
217 - /**
218 - * Render value according to content
219 - *
220 - * @param string $value - Content
221 - * @param string $type - Type of rendering value
222 - * @param array $field - Field details
223 - *
224 - * @return string - Fully rendered value
225 - */
226 - public function render($value, $type = false, $field = array()) {
337 + // load actions
338 + public function load_actions() {
339 + /**
340 + * Elementor Website Builder – More than Just a Page Builder
341 + * https://wordpress.org/plugins/elementor/
342 + */
343 + add_action('elementor/widget/before_render_content', [$this, 'action_elementor_widget_before_render_content']);
344 + add_action('elementor/frontend/widget/before_render', [$this, 'action_elementor_widget_before_render_content'], 5);
227 345
228 - $value = $this->render_shortcodes($value, $type, $field);
229 - $value = $this->strip_shortcodes($value);
346 + /**
347 + * JetEngine: WordPress Plugin for Elementor
348 + * https://crocoblock.com
349 + */
350 + add_action('jet-engine/listing/grid/before-render', [$this, 'action_jet_engine_listing_grid_before_render']);
351 + add_action('jet-engine/listing/grid/after-render', [$this, 'action_jet_engine_listing_grid_after_render']);
230 352
231 - if ($type === 'value' && isset($field['type']) && $field['type'] === 'e2pdf-checkbox' && isset($field['properties']['option'])) {
232 - $option = $this->render($field['properties']['option']);
233 - $options = explode(', ', $value);
234 - $option_options = explode(', ', $option);
235 - if (is_array($options) && is_array($option_options) && !array_diff($option_options, $options)) {
236 - return $option;
237 - } else {
238 - return "";
239 - }
240 - }
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);
241 358
242 - if ($type === 'value') {
243 - $value = $this->convert_shortcodes($value, true);
359 + /**
360 + * MemberPress Mail attachments remove
361 + * https://memberpress.com/
362 + */
363 + add_action('mepr_email_sent', [$this, 'action_mepr_email_sent']);
364 +
365 + /**
366 + * User Registration & Membership – Custom Registration Form, Login Form, and User Profile
367 + * https://wordpress.org/plugins/user-registration/
368 + */
369 + add_action('user_registration_email_send_before', [$this, 'action_user_registration_email_send_before']);
370 + add_action('user_registration_email_send_after', [$this, 'action_user_registration_email_send_after']);
371 +
372 + /**
373 + * Ultimate Member – User Profile, Registration, Login, Member Directory, Content Restriction & Membership Plugin
374 + * https://wordpress.org/plugins/ultimate-member/
375 + */
376 + add_action('um_before_email_notification_sending', [$this, 'action_um_before_email_notification_sending']);
377 + add_action('um_after_email_notification_sending', [$this, 'action_um_after_email_notification_sending']);
378 +
379 + /* Hooks */
380 + add_action('add_meta_boxes', [$this, 'hook_wordpress_page_edit']);
381 + }
382 +
383 + // render
384 + public function render($value, $field = [], $convert_shortcodes = true, $raw = false) {
385 + $value = $this->render_shortcodes($value, $field);
386 + if (!$raw) {
387 + $value = $this->strip_shortcodes($value);
388 + $value = $this->convert_shortcodes($value, $convert_shortcodes, isset($field['type']) && $field['type'] == 'e2pdf-html' ? true : false);
389 + $value = $this->helper->load('field')->render_checkbox($value, $this, $field);
244 390 }
245 -
246 391 return $value;
247 392 }
248 393
249 - /**
250 - * Render shortcodes which available in this extension
251 - *
252 - * @param string $value - Content
253 - * @param string $type - Type of rendering value
254 - * @param array $field - Field details
255 - *
256 - * @return string - Value with rendered shortcodes
257 - */
258 - public function render_shortcodes($value, $type = false, $field = array()) {
394 + // render shortcodes
395 + public function render_shortcodes($value, $field = []) {
259 396
260 - $dataset = $this->get('dataset');
261 - $item = $this->get('item');
262 - $args = $this->get('args');
263 - $user_id = $this->get('user_id');
264 - $template_id = $this->get('template_id') ? $this->get('template_id') : '0';
265 - $element_id = isset($field['element_id']) ? $field['element_id'] : '0';
397 + $element_id = isset($field['element_id']) ? $field['element_id'] : false;
266 398
267 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'));
268 405
269 - $args = apply_filters('e2pdf_extension_render_shortcodes_args', $args, $element_id, $template_id, $item, $dataset);
270 -
271 - $post = get_post($dataset);
272 -
273 - $wordpress_shortcodes = array(
406 + $wordpress_shortcodes = [
274 407 'id',
275 408 'post_author',
276 409 'post_date',
277 410 'post_date_gmt',
@@ -294,524 +427,1340 @@
294 427 'post_type',
295 428 'post_mime_type',
296 429 'comment_count',
297 430 'filter',
298 - 'post_thumbnail'
299 - );
431 + 'post_thumbnail',
432 + 'get_the_post_thumbnail',
433 + 'get_the_post_thumbnail_url',
434 + 'get_permalink',
435 + 'get_post_permalink',
436 + ];
300 437
301 438 if (false !== strpos($value, '[')) {
302 -
303 - $shortcode_tags = array(
304 - 'meta',
305 - 'terms',
306 - 'e2pdf-wp',
307 - 'e2pdf-content',
308 - 'e2pdf-user',
309 - 'e2pdf-arg'
310 - );
311 -
312 - $shortcode_tags = array_merge($shortcode_tags, $wordpress_shortcodes);
313 -
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 + }
314 456 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
315 457 $tagnames = array_intersect($shortcode_tags, $matches[1]);
316 -
317 458 if (!empty($tagnames)) {
318 -
319 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
320 -
321 - preg_match_all("/$pattern/", $value, $shortcodes);
322 -
459 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $value, $shortcodes);
323 460 foreach ($shortcodes[0] as $key => $shortcode_value) {
324 - $shortcode = array();
325 - $shortcode[1] = $shortcodes[1][$key];
326 - $shortcode[2] = $shortcodes[2][$key];
327 - $shortcode[3] = $shortcodes[3][$key];
328 - $shortcode[4] = $shortcodes[4][$key];
329 - $shortcode[5] = $shortcodes[5][$key];
330 - $shortcode[6] = $shortcodes[6][$key];
331 -
461 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
332 462 $atts = shortcode_parse_atts($shortcode[3]);
333 -
334 463 if ($shortcode[2] === 'e2pdf-content') {
335 - if (!isset($atts['id']) && isset($post->ID) && $post->ID) {
336 - $shortcode[3] .= " id=\"" . $post->ID . "\"";
337 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]", $value);
464 + if (!isset($atts['id']) && isset($this->get('cached_post')->ID) && $this->get('cached_post')->ID) {
465 + $shortcode[3] .= ' id=' . $this->get('cached_post')->ID . '';
466 + $value = str_replace($shortcode_value, '[' . $shortcode[2] . $shortcode[3] . ']', $value);
338 467 }
339 - } else if ($shortcode[2] === 'e2pdf-user') {
340 - if (!isset($atts['id']) && $user_id) {
341 - $shortcode[3] .= " id=\"" . $user_id . "\"";
342 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]", $value);
468 + } elseif ($shortcode[2] === 'meta' || $shortcode[2] === 'terms' || $shortcode[2] == 'e2pdf-wp') {
469 + if (!isset($atts['id']) && isset($this->get('cached_post')->ID) && $this->get('cached_post')->ID) {
470 + $shortcode[3] .= ' id=' . $this->get('cached_post')->ID . '';
343 471 }
344 - } else if ($shortcode['2'] === 'meta' || $shortcode['2'] === 'terms' || $shortcode['2'] == 'e2pdf-wp') {
345 - if (!isset($atts['id']) && isset($post->ID) && $post->ID) {
346 - $shortcode[3] .= " id=\"" . $post->ID . "\"";
472 + if ($shortcode[2] === 'meta') {
473 + $shortcode[3] .= ' meta=true';
347 474 }
348 - if ($shortcode['2'] === 'meta') {
349 - $shortcode[3] .= " meta=\"true\"";
475 + if ($shortcode[2] === 'terms') {
476 + $shortcode[3] .= ' terms=true';
350 477 }
351 - if ($shortcode['2'] === 'terms') {
352 - $shortcode[3] .= " terms=\"true\"";
478 + if (substr($shortcode_value, -11) === '[/e2pdf-wp]' || substr($shortcode_value, -8) === '[/terms]' || substr($shortcode_value, -7) === '[/meta]') {
479 + if ($shortcode[5]) {
480 + $shortcode[5] = $this->render($shortcode[5], [], false);
481 + }
482 + $value = str_replace($shortcode_value, '[e2pdf-wp' . $shortcode[3] . ']' . $shortcode[5] . '[/e2pdf-wp]', $value);
483 + } else {
484 + $value = str_replace($shortcode_value, '[e2pdf-wp' . $shortcode[3] . ']', $value);
353 485 }
354 -
355 - $value = str_replace($shortcode_value, "[e2pdf-wp" . $shortcode['3'] . "]", $value);
356 - } elseif (in_array($shortcode[2], $wordpress_shortcodes)) {
357 - if (!isset($atts['id']) && isset($post->ID) && $post->ID) {
358 - $shortcode[3] .= " id=\"" . $post->ID . "\"";
486 + } elseif ($shortcode[2] === 'e2pdf-wp-term') {
487 + if (substr($shortcode_value, -16) === '[/e2pdf-wp-term]') {
488 + if ($shortcode[5]) {
489 + $shortcode[5] = $this->render($shortcode[5], [], false);
490 + }
491 + $value = str_replace($shortcode_value, '[e2pdf-wp-term' . $shortcode[3] . ']' . $shortcode[5] . '[/e2pdf-wp-term]', $value);
359 492 }
360 - $shortcode[3] .= " key=\"" . $shortcode[2] . "\"";
361 - $value = str_replace($shortcode_value, "[e2pdf-wp" . $shortcode['3'] . "]", $value);
362 - } elseif ($shortcode['2'] == 'e2pdf-arg') {
363 - if (isset($atts['key']) && isset($args[$atts['key']])) {
364 - $sub_value = $this->strip_shortcodes($args[$atts['key']]);
365 - $value = str_replace($shortcode_value, $sub_value, $value);
366 - } else {
367 - $value = str_replace($shortcode_value, '', $value);
493 + } elseif (in_array($shortcode[2], $wordpress_shortcodes, false)) {
494 + if (!isset($atts['id']) && isset($this->get('cached_post')->ID) && $this->get('cached_post')->ID) {
495 + $shortcode[3] .= ' id=' . $this->get('cached_post')->ID . '';
368 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 + }
369 508 }
370 509 }
371 510 }
511 + $value = $this->helper->load('field')->wrapper_shortcodes($value, $this, $field);
512 + }
372 513
373 - $shortcode_tags = array(
374 - 'e2pdf-format-number',
375 - 'e2pdf-format-date',
376 - 'e2pdf-format-output',
377 - );
378 - $shortcode_tags = apply_filters('e2pdf_extension_render_shortcodes_tags', $shortcode_tags);
379 - preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $value, $matches);
380 - $tagnames = array_intersect($shortcode_tags, $matches[1]);
514 + add_filter('frm_filter_view', [$this, 'filter_frm_filter_view']);
515 + $value = $this->helper->load('field')->do_shortcodes($value, $this, $field);
516 + $value = $this->helper->load('field')->render(
517 + apply_filters('e2pdf_extension_render_shortcodes_pre_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false),
518 + $this,
519 + $field
520 + );
521 + remove_filter('frm_filter_view', [$this, 'filter_frm_filter_view']);
522 + }
523 + return apply_filters(
524 + 'e2pdf_extension_render_shortcodes_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false
525 + );
526 + }
381 527
382 - if (!empty($tagnames)) {
528 + // strip shortcodes
529 + public function strip_shortcodes($value) {
530 + $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value);
531 + return $value;
532 + }
383 533
384 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
385 -
386 - preg_match_all("/$pattern/", $value, $shortcodes);
387 - foreach ($shortcodes[0] as $key => $shortcode_value) {
388 - $shortcode = array();
389 - $shortcode[1] = $shortcodes[1][$key];
390 - $shortcode[2] = $shortcodes[2][$key];
391 - $shortcode[3] = $shortcodes[3][$key];
392 - $shortcode[4] = $shortcodes[4][$key];
393 - $shortcode[5] = $shortcodes[5][$key];
394 - $shortcode[6] = $shortcodes[6][$key];
395 -
396 - if (!$shortcode['5']) {
397 - $sub_value = '';
398 - } elseif (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
399 - $sub_value = $this->render($shortcode['5'], $type);
400 - } else {
401 - $sub_value = $this->render($shortcode['5'], $type, $field);
402 - }
403 - $value = str_replace($shortcode_value, "[" . $shortcode['2'] . $shortcode['3'] . "]" . $sub_value . "[/" . $shortcode['2'] . "]", $value);
404 - }
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);
405 541 }
542 + } else {
543 + $value = str_replace('[', '&#91;', $value);
406 544 }
545 + }
546 + return $value;
547 + }
407 548
408 - $value = do_shortcode($value);
549 + // auto
550 + public function auto() {
409 551
410 - if (isset($field['type']) && ($field['type'] === 'e2pdf-image' || $field['type'] === 'e2pdf-signature')) {
411 - $esig = isset($field['properties']['esig']) && $field['properties']['esig'] ? true : false;
412 - if ($esig) {
413 - //process e-signature
414 - $value = "";
415 - } else {
552 + $response = [];
553 + $elements = [];
416 554
417 - if (isset($field['properties']['preg_pattern']) && $field['properties']['preg_pattern'] && isset($field['properties']['preg_replacement']) && $value) {
418 - $value = $this->helper->load('convert')->preg_replace($field['properties']['preg_pattern'], $field['properties']['preg_replacement'], $value);
419 - }
555 + if ($this->get('item') == '-3') {
556 + $elements[] = [
557 + 'type' => 'e2pdf-html',
558 + 'block' => true,
559 + 'properties' => [
560 + 'top' => '20',
561 + 'left' => '20',
562 + 'right' => '20',
563 + 'width' => '100%',
564 + 'height' => 'auto',
565 + 'value' => '<h1>[e2pdf-user key="user_login"]</h1>',
566 + ],
567 + ];
568 + $elements[] = [
569 + 'type' => 'e2pdf-image',
570 + 'block' => true,
571 + 'properties' => [
572 + 'top' => '20',
573 + 'left' => '20',
574 + 'right' => '20',
575 + 'width' => '100%',
576 + 'height' => '100',
577 + 'vertical' => 'top',
578 + 'value' => '[e2pdf-user key="get_avatar_url"]',
579 + ],
580 + ];
581 + $elements[] = [
582 + 'type' => 'e2pdf-html',
583 + 'block' => true,
584 + 'properties' => [
585 + 'top' => '20',
586 + 'left' => '20',
587 + 'right' => '20',
588 + 'width' => '100%',
589 + 'height' => 'auto',
590 + 'value' => 'ID: [e2pdf-user key="ID"]',
591 + ],
592 + ];
593 + $elements[] = [
594 + 'type' => 'e2pdf-html',
595 + 'block' => true,
596 + 'properties' => [
597 + 'top' => '20',
598 + 'left' => '20',
599 + 'right' => '20',
600 + 'width' => '100%',
601 + 'height' => 'auto',
602 + 'value' => 'First Name: [e2pdf-user key="user_firstname"]',
603 + ],
604 + ];
605 + $elements[] = [
606 + 'type' => 'e2pdf-html',
607 + 'block' => true,
608 + 'properties' => [
609 + 'top' => '20',
610 + 'left' => '20',
611 + 'right' => '20',
612 + 'width' => '100%',
613 + 'height' => 'auto',
614 + 'value' => 'Last Name: [e2pdf-user key="user_lastname"]',
615 + ],
616 + ];
617 + $elements[] = [
618 + 'type' => 'e2pdf-html',
619 + 'block' => true,
620 + 'properties' => [
621 + 'top' => '20',
622 + 'left' => '20',
623 + 'right' => '20',
624 + 'width' => '100%',
625 + 'height' => 'auto',
626 + 'value' => 'Email: [e2pdf-user key="user_email"]',
627 + ],
628 + ];
629 + $elements[] = [
630 + 'type' => 'e2pdf-html',
631 + 'block' => true,
632 + 'properties' => [
633 + 'top' => '20',
634 + 'left' => '20',
635 + 'right' => '20',
636 + 'width' => '100%',
637 + 'height' => 'auto',
638 + 'value' => 'Registered: [e2pdf-user key="user_registered"]',
639 + ],
640 + ];
641 + } else {
642 + $elements[] = [
643 + 'type' => 'e2pdf-html',
644 + 'block' => true,
645 + 'properties' => [
646 + 'top' => '20',
647 + 'left' => '20',
648 + 'right' => '20',
649 + 'width' => '100%',
650 + 'height' => 'auto',
651 + 'value' => '<h1>[e2pdf-wp key="post_title"]</h1>',
652 + ],
653 + ];
654 + $elements[] = [
655 + 'type' => 'e2pdf-html',
656 + 'block' => true,
657 + 'properties' => [
658 + 'top' => '20',
659 + 'left' => '20',
660 + 'right' => '20',
661 + 'width' => '100%',
662 + 'height' => 'auto',
663 + 'value' => 'Post name: [e2pdf-wp key="post_name"]',
664 + ],
665 + ];
666 + $elements[] = [
667 + 'type' => 'e2pdf-html',
668 + 'block' => true,
669 + 'properties' => [
670 + 'top' => '20',
671 + 'left' => '20',
672 + 'right' => '20',
673 + 'width' => '100%',
674 + 'height' => 'auto',
675 + 'value' => 'Post type: [e2pdf-wp key="post_type"]',
676 + ],
677 + ];
678 + $elements[] = [
679 + 'type' => 'e2pdf-html',
680 + 'block' => true,
681 + 'properties' => [
682 + 'top' => '20',
683 + 'left' => '20',
684 + 'right' => '20',
685 + 'width' => '100%',
686 + 'height' => 'auto',
687 + 'value' => 'ID: [e2pdf-wp key="id"]',
688 + ],
689 + ];
690 + $elements[] = [
691 + 'type' => 'e2pdf-html',
692 + 'block' => true,
693 + 'properties' => [
694 + 'top' => '20',
695 + 'left' => '20',
696 + 'right' => '20',
697 + 'width' => '100%',
698 + 'height' => 'auto',
699 + 'value' => 'Author: [e2pdf-wp key="post_author"]',
700 + ],
701 + ];
702 + $elements[] = [
703 + 'type' => 'e2pdf-html',
704 + 'block' => true,
705 + 'properties' => [
706 + 'top' => '20',
707 + 'left' => '20',
708 + 'right' => '20',
709 + 'width' => '100%',
710 + 'height' => '300',
711 + 'value' => '[e2pdf-wp key="post_content"]',
712 + ],
713 + ];
714 + $elements[] = [
715 + 'type' => 'e2pdf-html',
716 + 'block' => true,
717 + 'properties' => [
718 + 'top' => '20',
719 + 'left' => '20',
720 + 'right' => '20',
721 + 'width' => '100%',
722 + 'height' => 'auto',
723 + 'value' => 'Created: [e2pdf-wp key="post_date"]',
724 + ],
725 + ];
726 + $elements[] = [
727 + 'type' => 'e2pdf-html',
728 + 'block' => true,
729 + 'properties' => [
730 + 'top' => '20',
731 + 'left' => '20',
732 + 'right' => '20',
733 + 'width' => '100%',
734 + 'height' => 'auto',
735 + 'value' => 'Modified: [e2pdf-wp key="post_modified"]',
736 + ],
737 + ];
738 + }
739 + $response['page'] = [
740 + 'bottom' => '20',
741 + 'top' => '20',
742 + 'left' => '20',
743 + 'right' => '20',
744 + ];
420 745
421 - if (!$this->helper->load('image')->get_image($value)) {
422 - $value = $this->strip_shortcodes($value);
423 - if (
424 - $value &&
425 - trim($value) != "" &&
426 - extension_loaded('gd') &&
427 - function_exists('imagettftext')
428 - ) {
429 - if (isset($field['properties']['text_color']) && $field['properties']['text_color']) {
430 - $penColour = $this->helper->load('convert')->to_hex_color($field['properties']['text_color']);
431 - } else {
432 - $penColour = array(0x14, 0x53, 0x94);
433 - }
746 + $response['elements'] = $elements;
747 + return $response;
748 + }
434 749
435 - $default_options = array(
436 - 'imageSize' => array(isset($field['width']) ? $field['width'] : '400', isset($field['height']) ? $field['height'] : '150'),
437 - 'bgColour' => 'transparent',
438 - 'penColour' => $penColour
439 - );
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 + }
440 770
441 - $options = array();
442 - $options = apply_filters('e2pdf_image_sig_output_options', $options, $element_id, $template_id);
443 - $options = array_merge($default_options, $options);
771 + // jet engine listing grid before render action
772 + public function action_jet_engine_listing_grid_before_render($listing_grid) {
773 + $this->set('queried_object', true);
774 + }
444 775
445 - $model_e2pdf_font = new Model_E2pdf_Font();
776 + // jet engine listing grid after render action
777 + public function action_jet_engine_listing_grid_after_render($listing_grid) {
778 + $this->set('queried_object', false);
779 + }
446 780
447 - $font = false;
448 - if (isset($field['properties']['text_font']) && $field['properties']['text_font']) {
449 - $font = $model_e2pdf_font->get_font_path($field['properties']['text_font']);
450 - }
451 - if (!$font) {
452 - $font = $model_e2pdf_font->get_font_path('Noto Sans');
453 - }
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 + }
454 794
455 - $size = 150;
456 - if (isset($field['properties']['text_font_size']) && $field['properties']['text_font_size']) {
457 - $size = $field['properties']['text_font_size'];
458 - }
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 + }
459 799
460 - $model_e2pdf_signature = new Model_E2pdf_Signature();
461 - $value = $model_e2pdf_signature->ttf_signature($value, $size, $font, $options);
462 - } else {
463 - $value = "";
464 - }
465 - }
466 - }
467 - } else {
800 + // registration email send after action
801 + public function action_user_registration_email_send_after() {
802 + remove_filter('wp_mail', [$this, 'filter_wp_mail'], 11);
803 + $files = $this->helper->get('wordpress_attachments');
804 + if (is_array($files) && !empty($files)) {
805 + foreach ($files as $key => $file) {
806 + $this->helper->delete_dir(dirname($file) . '/');
807 + }
808 + $this->helper->deset('wordpress_attachments');
809 + }
810 + }
468 811
469 - $value = $this->convert_shortcodes($value);
812 + /**
813 + * Ultimate Member – User Profile, Registration, Login, Member Directory, Content Restriction & Membership Plugin
814 + * https://wordpress.org/plugins/ultimate-member/
815 + */
816 + public function action_um_before_email_notification_sending() {
817 + add_filter('wp_mail', [$this, 'filter_wp_mail_um'], 11);
818 + }
470 819
471 - if (isset($field['properties']['preg_pattern']) && $field['properties']['preg_pattern'] && isset($field['properties']['preg_replacement']) && $value) {
472 - $value = $this->helper->load('convert')->preg_replace($field['properties']['preg_pattern'], $field['properties']['preg_replacement'], $value);
473 - }
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) . '/');
474 830 }
831 + $this->helper->deset('wordpress_attachments_um');
832 + $this->helper->deset('wordpress_attachments_um_del');
475 833 }
834 + }
476 835
477 - $value = apply_filters('e2pdf_extension_render_shortcodes_value', $value, $element_id, $template_id, $item, $dataset);
478 -
479 - return $value;
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;
480 844 }
481 845
482 846 /**
483 - * Strip unused shortcodes
484 - *
485 - * @param string $value - Content
486 - *
487 - * @return string - Value with removed unused shortcodes
847 + * Disable pre-rendering of E2Pdf shortcodes in the Toolset template.
848 + * https://toolset.com/
488 849 */
489 - public function strip_shortcodes($value) {
490 - $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', "", $value);
491 - return $value;
850 + public function filter_render_block_toolset_disable($block_content, $block) {
851 + if (
852 + !empty($block['blockName']) && strpos($block['blockName'], 'toolset-blocks/') === 0 && false !== strpos($block_content, '[e2pdf-')
853 + ) {
854 + remove_shortcode('e2pdf-download');
855 + remove_shortcode('e2pdf-view');
856 + remove_shortcode('e2pdf-save');
857 + remove_shortcode('e2pdf-zapier');
858 + remove_shortcode('e2pdf-adobesign');
859 + }
860 + return $block_content;
492 861 }
493 862
494 863 /**
495 - * Convert "shortcodes" inside value string
496 - *
497 - * @param string $value - Value string
498 - * @param bool $to - Convert From/To
499 - *
500 - * @return string - Converted value
864 + * Enable rendering of E2Pdf shortcodes in the Toolset template.
865 + * https://toolset.com/
501 866 */
502 - public function convert_shortcodes($value, $to = false) {
503 - if ($value) {
504 - if ($to) {
505 - $value = str_replace("&#91;", "[", $value);
506 - } else {
507 - $value = str_replace("[", "&#91;", $value);
867 + public function filter_render_block_toolset_enable($block_content, $block) {
868 + if (
869 + !empty($block['blockName']) && strpos($block['blockName'], 'toolset-blocks/') === 0 && false !== strpos($block_content, '[e2pdf-')
870 + ) {
871 + add_shortcode('e2pdf-download', [new Model_E2pdf_Shortcode(), 'e2pdf_download']);
872 + add_shortcode('e2pdf-view', [new Model_E2pdf_Shortcode(), 'e2pdf_view']);
873 + add_shortcode('e2pdf-save', [new Model_E2pdf_Shortcode(), 'e2pdf_save']);
874 + add_shortcode('e2pdf-zapier', [new Model_E2pdf_Shortcode(), 'e2pdf_zapier']);
875 + add_shortcode('e2pdf-adobesign', [new Model_E2pdf_Shortcode(), 'e2pdf_adobesign']);
876 + }
877 + return $block_content;
878 + }
879 +
880 + // filter content
881 + public function filter_content($content, $post_id = false, $wp_reset_postdata = true) {
882 + global $post;
883 + if (!is_string($content) || false === strpos($content, '[')) {
884 + return $content;
885 + }
886 + $shortcode_tags = [
887 + 'e2pdf-download',
888 + 'e2pdf-save',
889 + 'e2pdf-view',
890 + 'e2pdf-adobesign',
891 + 'e2pdf-zapier',
892 + ];
893 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
894 + $tagnames = array_intersect($shortcode_tags, $matches[1]);
895 + if (!empty($tagnames)) {
896 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
897 + foreach ($shortcodes[0] as $key => $shortcode_value) {
898 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
899 + $atts = shortcode_parse_atts($shortcode[3]);
900 + if (isset($atts['wp_reset_postdata'])) {
901 + if ($atts['wp_reset_postdata'] == 'true') {
902 + $wp_reset_postdata = true;
903 + } else {
904 + $wp_reset_postdata = false;
905 + }
906 + }
907 + if ($wp_reset_postdata) {
908 + wp_reset_postdata();
909 + }
910 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
911 + } else {
912 + if (isset($atts['id'])) {
913 + $template = new Model_E2pdf_Template();
914 + $template->load($atts['id']);
915 + if ($template->get('extension') === 'woocommerce' || $template->get('extension') === 'jetformbuilder') {
916 + continue;
917 + } elseif ($template->get('extension') === 'wordpress') { // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
918 + if (!isset($atts['dataset'])) {
919 + if ($template->get('item') == '-3') {
920 + $dataset = get_current_user_id();
921 + $atts['dataset'] = $dataset;
922 + $shortcode[3] .= ' dataset="' . $dataset . '"';
923 + } else {
924 + if ($this->get('queried_object') && !$post_id) {
925 + $queried_object = get_queried_object();
926 + $post_id = $queried_object && isset($queried_object->ID) ? $queried_object->ID : false;
927 + }
928 + if ($post_id || isset($post->ID)) {
929 + $dataset = $post_id ? $post_id : $post->ID;
930 + $atts['dataset'] = $dataset;
931 + $shortcode[3] .= ' dataset="' . $dataset . '"';
932 + }
933 + }
934 + }
935 + }
936 + }
937 + if (!isset($atts['apply'])) {
938 + $shortcode[3] .= ' apply="true"';
939 + }
940 + if (!isset($atts['filter'])) {
941 + $shortcode[3] .= ' filter="true"';
942 + }
943 + $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
944 + }
508 945 }
509 946 }
510 - return $value;
947 + return $content;
511 948 }
512 949
513 - public function auto() {
514 - $response = array();
515 - $elements = array();
950 + // [e2pdf-exclude] support inside Formidable Forms View beforeContent and afterContent
951 + public function filter_frm_filter_view($view) {
952 + if (isset($view->frm_before_content) && $view->frm_before_content) {
953 + $view->frm_before_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->frm_before_content);
954 + }
955 + if (isset($view->post_content) && $view->post_content) {
956 + $view->post_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->post_content);
957 + }
958 + if (isset($view->frm_after_content) && $view->frm_after_content) {
959 + $view->frm_after_content = str_replace('[e2pdf-exclude]', '[e2pdf-exclude apply="true"]', $view->frm_after_content);
960 + }
961 + return $view;
962 + }
516 963
517 - $post = $this->get('item');
964 + // vc map get attributes filter
965 + public function filter_vc_map_get_attributes($atts, $tag) {
966 + if ($tag == 'vc_single_image' && ((isset($atts['onclick']) && $atts['onclick'] == 'custom_link') || (empty($atts['onclick']) && (!isset($atts['img_link_large']) || 'yes' !== $atts['img_link_large']))) && (!empty($atts['link']) || !empty($atts['img_link']))) {
518 967
519 - $elements[] = array(
520 - 'type' => 'e2pdf-html',
521 - 'block' => true,
522 - 'properties' => array(
523 - 'top' => '20',
524 - 'left' => '20',
525 - 'right' => '20',
526 - 'width' => '100%',
527 - 'height' => 'auto',
528 - 'value' => "<h1>[post_title]</h1>",
529 - )
530 - );
968 + if (!empty($atts['link'])) {
969 + $atts['link'] = $this->filter_content($atts['link']);
970 + }
531 971
532 - $elements[] = array(
533 - 'type' => 'e2pdf-html',
534 - 'block' => true,
535 - 'properties' => array(
536 - 'top' => '20',
537 - 'left' => '20',
538 - 'right' => '20',
539 - 'width' => '100%',
540 - 'height' => 'auto',
541 - 'value' => __("Post name", 'e2pdf') . ": [post_name]",
542 - )
543 - );
972 + if (!empty($atts['img_link'])) {
973 + $atts['img_link'] = $this->filter_content($atts['img_link']);
974 + }
975 + }
976 + return $atts;
977 + }
544 978
545 - $elements[] = array(
546 - 'type' => 'e2pdf-html',
547 - 'block' => true,
548 - 'properties' => array(
549 - 'top' => '20',
550 - 'left' => '20',
551 - 'right' => '20',
552 - 'width' => '100%',
553 - 'height' => 'auto',
554 - 'value' => __("Post type", 'e2pdf') . ": [post_type]",
555 - )
556 - );
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 + }
557 986
558 - $elements[] = array(
559 - 'type' => 'e2pdf-html',
560 - 'block' => true,
561 - 'properties' => array(
562 - 'top' => '20',
563 - 'left' => '20',
564 - 'right' => '20',
565 - 'width' => '100%',
566 - 'height' => 'auto',
567 - 'value' => __("ID", 'e2pdf') . ": [id]",
568 - )
569 - );
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 + }
570 994
571 - $elements[] = array(
572 - 'type' => 'e2pdf-html',
573 - 'block' => true,
574 - 'properties' => array(
575 - 'top' => '20',
576 - 'left' => '20',
577 - 'right' => '20',
578 - 'width' => '100%',
579 - 'height' => 'auto',
580 - 'value' => __("Author", 'e2pdf') . ": [post_author]",
581 - )
582 - );
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 + }
583 1002
584 - $elements[] = array(
585 - 'type' => 'e2pdf-html',
586 - 'block' => true,
587 - 'properties' => array(
588 - 'top' => '20',
589 - 'left' => '20',
590 - 'right' => '20',
591 - 'width' => '100%',
592 - 'height' => '300',
593 - 'value' => "[post_content]",
594 - 'dynamic_height' => '1',
595 - )
596 - );
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 + }
597 1008
598 - $elements[] = array(
599 - 'type' => 'e2pdf-html',
600 - 'block' => true,
601 - 'properties' => array(
602 - 'top' => '20',
603 - 'left' => '20',
604 - 'right' => '20',
605 - 'width' => '100%',
606 - 'height' => 'auto',
607 - 'value' => __("Created", 'e2pdf') . ": [post_date]",
608 - )
609 - );
1009 + // filter content custom
1010 + public function filter_content_custom($content) {
1011 + $content = $this->filter_content($content);
1012 + return $content;
1013 + }
610 1014
611 - $elements[] = array(
612 - 'type' => 'e2pdf-html',
613 - 'block' => true,
614 - 'properties' => array(
615 - 'top' => '20',
616 - 'left' => '20',
617 - 'right' => '20',
618 - 'width' => '100%',
619 - 'height' => 'auto',
620 - 'value' => __("Modified", 'e2pdf') . ": [post_modified]",
621 - )
622 - );
1015 + // filter content loop
1016 + public function filter_content_loop($content) {
1017 + $content = $this->filter_content($content, false, false);
1018 + return $content;
1019 + }
623 1020
624 - $response['page'] = array(
625 - 'bottom' => '20',
626 - 'top' => '20',
627 - 'left' => '20',
628 - 'right' => '20'
629 - );
1021 + /**
1022 + * Memberpress Mail attachments filter
1023 + * https://memberpress.com/
1024 + */
1025 + public function filter_mepr_email_send_attachments($attachments, $mail, $body, $values) {
1026 + $message = $body ? $body : $mail->body();
1027 + if ($message && false !== strpos($message, '[')) {
1028 + $message = $mail->replace_variables($message, $values);
1029 + $shortcode_tags = [
1030 + 'e2pdf-attachment',
1031 + 'e2pdf-save',
1032 + ];
1033 + preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $message, $matches);
1034 + $tagnames = array_intersect($shortcode_tags, $matches[1]);
1035 + if (!empty($tagnames)) {
1036 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $message, $shortcodes);
1037 + foreach ($shortcodes[0] as $key => $shortcode_value) {
1038 + $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key);
1039 + $atts = shortcode_parse_atts($shortcode[3]);
1040 + $file = false;
1041 + if (isset($atts['id']) && isset($atts['dataset'])) {
1042 + if (!isset($atts['apply'])) {
1043 + $shortcode[3] .= ' apply="true"';
1044 + }
1045 + if (!isset($atts['filter'])) {
1046 + $shortcode[3] .= ' filter="true"';
1047 + }
1048 + if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) {
1049 + $file = do_shortcode_tag($shortcode);
1050 + if ($file) {
1051 + $tmp = false;
1052 + if (substr($file, 0, 4) === 'tmp:') {
1053 + $file = substr($file, 4);
1054 + $tmp = true;
1055 + }
1056 + if ($shortcode[2] === 'e2pdf-save' || isset($atts['pdf'])) {
1057 + if ($tmp) {
1058 + $this->helper->add('wordpress_attachments_mepr', $file);
1059 + }
1060 + } else {
1061 + $this->helper->add('wordpress_attachments_mepr', $file);
1062 + }
1063 + $attachments[] = $file;
1064 + }
1065 + }
1066 + }
1067 + }
1068 + }
1069 + }
1070 + return $attachments;
1071 + }
630 1072
631 - $response['elements'] = $elements;
632 - return $response;
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;
633 1092 }
634 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 + }
1153 + return $content;
1154 + }
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 +
635 1166 /**
636 - * Search and update shortcodes for this extension inside content
637 - * Auto set of dataset id
638 - *
639 - * @param string $content - Content
640 - * @param string $post_id - Custom Post ID
641 - *
642 - * @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/
643 1169 */
644 - public function filter_content($content, $post_id = false) {
645 - global $post;
646 -
647 - if (false === strpos($content, '[')) {
1170 + public function filter_um_email_send_message_content($content) {
1171 + if (!is_string($content) || false === strpos($content, '[')) {
648 1172 return $content;
649 1173 }
650 -
651 - $shortcode_tags = array(
1174 + $shortcode_tags = [
652 1175 'e2pdf-download',
653 1176 'e2pdf-save',
1177 + 'e2pdf-attachment',
654 1178 'e2pdf-view',
655 - 'e2pdf-adobesign'
656 - );
657 -
1179 + 'e2pdf-adobesign',
1180 + 'e2pdf-zapier',
1181 + ];
658 1182 preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches);
659 1183 $tagnames = array_intersect($shortcode_tags, $matches[1]);
660 -
661 1184 if (!empty($tagnames)) {
662 -
663 - $pattern = $this->helper->load('shortcode')->get_shortcode_regex($tagnames);
664 -
665 - preg_match_all("/$pattern/", $content, $shortcodes);
666 -
1185 + preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes);
667 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 + }
668 1233
669 - 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 + }
670 1252
671 - $shortcode = array();
672 - $shortcode[1] = $shortcodes[1][$key];
673 - $shortcode[2] = $shortcodes[2][$key];
674 - $shortcode[3] = $shortcodes[3][$key];
675 - $shortcode[4] = $shortcodes[4][$key];
676 - $shortcode[5] = $shortcodes[5][$key];
677 - $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 + }
678 1312
679 - $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 + }
680 1321
681 - if (($shortcode[2] === 'e2pdf-save' && isset($atts['attachment']) && $atts['attachment'] == 'true') || $shortcode[2] === 'e2pdf-attachment') {
682 -
683 - } else {
684 - if (!isset($atts['dataset']) && isset($atts['id'])) {
685 - $template = new Model_E2pdf_Template();
686 - $template->load($atts['id']);
687 - if ($template->get('extension') === 'wordpress') {
688 - if ($post_id || isset($post->ID)) {
689 - $dataset = $post_id ? $post_id : $post->ID;
690 - $atts['dataset'] = $dataset;
691 - $shortcode[3] .= " dataset=\"{$dataset}\"";
692 - }
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';
693 1334 }
1335 + if (!isset($atts['filter'])) {
1336 + $atts['filter'] = 'true';
1337 + }
694 1338 }
1339 + }
1340 + }
1341 + }
1342 + return $atts;
1343 + }
695 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 + }
696 1376 if (!isset($atts['apply'])) {
697 - $shortcode[3] .= " apply=\"true\"";
1377 + $shortcode[3] .= ' apply="true"';
698 1378 }
699 1379
700 1380 if (!isset($atts['filter'])) {
701 - $shortcode[3] .= " filter=\"true\"";
1381 + $shortcode[3] .= ' filter="true"';
702 1382 }
703 -
704 - $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content);
1383 + $new_shortcode = '[' . $shortcode[2] . $shortcode[3] . ']';
1384 + $content = str_replace($shortcode_value, $new_shortcode, $content);
705 1385 }
706 1386 }
707 1387 }
708 -
709 1388 return $content;
710 1389 }
711 1390
712 - public function filter_content_custom($content) {
713 - $content = $this->filter_content($content);
714 - return $content;
715 - }
716 -
717 - /**
718 - * Verify if item and dataset exists
719 - *
720 - * @return bool - item and dataset exists
721 - */
1391 + // verify
722 1392 public function verify() {
723 - $item = $this->get('item');
724 - $dataset = $this->get('dataset');
725 -
726 - if ($item && $dataset && get_post($dataset) && $item == get_post_type($dataset)) {
1393 + if ($this->get('item') && $this->get('cached_post') && (($this->get('item') == get_post_type($this->get('cached_post'))) || ($this->get('item') == '-3' && $this->get('cached_post')))) {
727 1394 return true;
728 1395 }
729 -
730 1396 return false;
731 1397 }
732 1398
733 - /**
734 - * Init Visual Mapper data
735 - *
736 - * @return bool|string - HTML data source for Visual Mapper
737 - */
1399 + // visual mapper
738 1400 public function visual_mapper() {
739 1401
740 - $meta_keys = $this->get_post_meta_keys();
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>';
1460 + $vc .= "<div class='e2pdf-grid'>";
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();
741 1485 if (!empty($meta_keys)) {
742 - $vc .= "<h3>" . __('Meta Keys', 'e2pdf') . "</h3>";
1486 + $vc .= '<h3 class="e2pdf-plr5">User Meta Keys</h3>';
743 1487 $vc .= "<div class='e2pdf-grid'>";
744 1488 foreach ($meta_keys as $meta_key) {
745 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element($meta_key, "meta key=\"{$meta_key}\"")}</div>";
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>';
746 1490 }
747 - $vc .= "</div>";
1491 + $vc .= '</div>';
748 1492 }
749 1493
750 - $vc .= "<h3>" . __('Common', 'e2pdf') . "</h3>";
751 - $vc .= "<div class='e2pdf-grid'>";
752 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("ID", "e2pdf"), 'id')}</div>";
753 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Author", "e2pdf"), 'post_author')}</div>";
754 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Date", "e2pdf"), 'post_date')}</div>";
755 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Date (GMT)", "e2pdf"), 'post_date_gmt')}</div>";
756 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Content", "e2pdf"), 'post_content')}</div>";
757 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Title", "e2pdf"), 'post_title')}</div>";
758 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Excerpt", "e2pdf"), 'post_excerpt')}</div>";
759 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Status", "e2pdf"), 'post_status')}</div>";
760 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Comment Status", "e2pdf"), 'comment_status')}</div>";
761 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Ping Status", "e2pdf"), 'ping_status')}</div>";
762 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Post Password", "e2pdf"), 'post_password')}</div>";
763 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Post Name", "e2pdf"), 'post_name')}</div>";
764 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("To Ping", "e2pdf"), 'to_ping')}</div>";
765 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Ping", "e2pdf"), 'pinged')}</div>";
766 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Modified Date", "e2pdf"), 'post_modified')}</div>";
767 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Modified Date (GMT)", "e2pdf"), 'post_modified_gmt')}</div>";
768 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Filtered Content", "e2pdf"), 'post_content_filtered')}</div>";
769 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Parent ID", "e2pdf"), 'post_parent')}</div>";
770 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("GUID", "e2pdf"), 'guid')}</div>";
771 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Menu Order", "e2pdf"), 'menu_order')}</div>";
772 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Type", "e2pdf"), 'post_type')}</div>";
773 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Mime Type", "e2pdf"), 'post_mime_type')}</div>";
774 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Comments Count", "e2pdf"), 'comment_count')}</div>";
775 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pl10'>{$this->get_vm_element(__("Filter", "e2pdf"), 'filter')}</div>";
776 - $vc .= "<div class='e2pdf-ib e2pdf-w50 e2pdf-pr10'>{$this->get_vm_element(__("Post Thumbnail", "e2pdf"), 'post_thumbnail')}</div>";
777 - $vc .= "</div>";
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 + }
1536 + return $vc;
1537 + }
778 1538
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 + }
779 1564 return $vc;
780 1565 }
781 1566
782 - private function get_post_meta_keys() {
1567 + // get post meta keys
1568 + public function get_post_meta_keys() {
783 1569 global $wpdb;
784 -
785 - $meta_keys = array();
1570 + $meta_keys = [];
786 1571 if ($this->get('item')) {
787 - $condition = array(
788 - 'p.post_type' => array(
1572 + $condition = [
1573 + 'p.post_type' => [
789 1574 'condition' => '=',
790 1575 'value' => $this->get('item'),
791 - 'type' => '%s'
792 - ),
793 - );
794 -
795 - $order_condition = array(
1576 + 'type' => '%s',
1577 + ],
1578 + ];
1579 + $order_condition = [
796 1580 'orderby' => 'meta_key',
797 1581 'order' => 'desc',
798 - );
799 -
1582 + ];
800 1583 $where = $this->helper->load('db')->prepare_where($condition);
801 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 + }
802 1590
803 - $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']));
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 . ''));
804 1603 }
1604 + return $meta_keys;
1605 + }
805 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 + }
806 1620 return $meta_keys;
807 1621 }
808 1622
809 - private function get_vm_element($name, $id) {
810 - $element = "<div>";
811 - $element .= "<label>{$name}:</label>";
812 - $element .= "<input type='text' name='[{$id}]' value='[{$id}]' class='e2pdf-w100'>";
813 - $element .= "</div>";
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>';
814 1629 return $element;
815 1630 }
816 1631
1632 + // page edit hook
1633 + public function hook_wordpress_page_edit() {
1634 + // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
1635 + $items = $this->helper->load('hooks')->get_items('wordpress', 'hook_wordpress_page_edit');
1636 + if (!empty($items)) {
1637 + add_meta_box(
1638 + 'e2pdf',
1639 + apply_filters('e2pdf_hook_section_title', __('E2Pdf Actions', 'e2pdf'), 'hook_wordpress_page_edit'),
1640 + [$this, 'hook_wordpress_page_edit_callback'],
1641 + $items,
1642 + 'side',
1643 + 'default'
1644 + );
1645 + }
1646 + }
1647 +
1648 + // page edit callback hook
1649 + public function hook_wordpress_page_edit_callback($post) {
1650 + if (!empty($post->post_type)) {
1651 + // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
1652 + $hooks = $this->helper->load('hooks')->get('wordpress', 'hook_wordpress_page_edit', $post->post_type);
1653 + if (!empty($hooks)) {
1654 + foreach ($hooks as $hook) {
1655 + if ($this->helper->load('hooks')->process_hook(
1656 + $hook,
1657 + [
1658 + 'dataset' => $post->ID,
1659 + ],
1660 + 'hook_wordpress_page_edit'
1661 + )
1662 + ) {
1663 + $action = apply_filters(
1664 + 'e2pdf_hook_action_button',
1665 + [
1666 + 'html' => '<p><a class="e2pdf-download-hook" target="_blank" title="%2$s" href="%1$s"><span class="dashicons dashicons-pdf"></span> %2$s</a></p>',
1667 + 'url' => $this->helper->get_url(
1668 + [
1669 + 'page' => 'e2pdf',
1670 + 'action' => 'export',
1671 + 'id' => $hook,
1672 + 'dataset' => $post->ID,
1673 + ], 'admin.php?'
1674 + ),
1675 + 'title' => 'PDF #' . $hook,
1676 + ], 'hook_wordpress_page_edit', $hook, $post->ID
1677 + );
1678 + if (!empty($action)) {
1679 + echo sprintf(
1680 + $action['html'], $action['url'], $action['title']
1681 + );
1682 + }
1683 + }
1684 + }
1685 + }
1686 + }
1687 + }
1688 +
1689 + // row actions hook
1690 + public function hook_wordpress_row_actions($actions, $post) {
1691 + if ($post && is_a($post, 'WP_User')) {
1692 + if (!empty($post->ID)) {
1693 + // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
1694 + $hooks = $this->helper->load('hooks')->get('wordpress', 'hook_wordpress_row_actions', '-3');
1695 + foreach ($hooks as $hook) {
1696 + if ($this->helper->load('hooks')->process_hook(
1697 + $hook,
1698 + [
1699 + 'dataset' => $post->ID,
1700 + ],
1701 + 'hook_wordpress_row_actions'
1702 + )
1703 + ) {
1704 + $action = apply_filters(
1705 + 'e2pdf_hook_action_button',
1706 + [
1707 + 'html' => '<a class="e2pdf-download-hook" target="_blank" href="%s">%s</a>',
1708 + 'url' => $this->helper->get_url(
1709 + [
1710 + 'page' => 'e2pdf',
1711 + 'action' => 'export',
1712 + 'id' => $hook,
1713 + 'dataset' => $post->ID,
1714 + ], 'admin.php?'
1715 + ),
1716 + 'title' => 'PDF #' . $hook,
1717 + ], 'hook_wordpress_row_actions', $hook, $post->ID
1718 + );
1719 + if (!empty($action)) {
1720 + $actions['e2pdf_' . $hook] = sprintf(
1721 + $action['html'], $action['url'], $action['title']
1722 + );
1723 + }
1724 + }
1725 + }
1726 + }
1727 + } else {
1728 + if (!empty($post->post_type) && !empty($post->ID)) {
1729 + // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
1730 + $hooks = $this->helper->load('hooks')->get('wordpress', 'hook_wordpress_row_actions', $post->post_type);
1731 + foreach ($hooks as $hook) {
1732 + if ($this->helper->load('hooks')->process_hook(
1733 + $hook,
1734 + [
1735 + 'dataset' => $post->ID,
1736 + ],
1737 + 'hook_wordpress_row_actions'
1738 + )
1739 + ) {
1740 + $action = apply_filters(
1741 + 'e2pdf_hook_action_button',
1742 + [
1743 + 'html' => '<a class="e2pdf-download-hook" target="_blank" href="%s">%s</a>',
1744 + 'url' => $this->helper->get_url(
1745 + [
1746 + 'page' => 'e2pdf',
1747 + 'action' => 'export',
1748 + 'id' => $hook,
1749 + 'dataset' => $post->ID,
1750 + ], 'admin.php?'
1751 + ),
1752 + 'title' => 'PDF #' . $hook,
1753 + ], 'hook_wordpress_row_actions', $hook, $post->ID
1754 + );
1755 + if (!empty($action)) {
1756 + $actions['e2pdf_' . $hook] = sprintf(
1757 + $action['html'], $action['url'], $action['title']
1758 + );
1759 + }
1760 + }
1761 + }
1762 + }
1763 + }
1764 + return $actions;
1765 + }
817 1766 }