PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.49
E2Pdf – Export Pdf Tool for WordPress v1.32.49
1.32.49 1.32.48 1.32.43 1.32.40 1.32.34 1.32.32 1.32.31 1.32.26 1.32.22 1.32.23 1.32.18 1.32.17 1.32.15 trunk 1.00.00 1.00.13 1.01.01 1.02.02 1.03.07 1.04.07 1.05.03 1.06.02 1.07.11 1.08.00 1.08.06 All 72 releases
← All changes | classes/model/e2pdf-extension.php +253 -101 1.08.001.32.49 View file →
@@ -1,14 +1,12 @@
1 1 <?php
2 2
3 3 /**
4 - * E2pdf Extension Model
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: /model/e2pdf-extension.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 }
@@ -16,15 +14,10 @@
16 14 class Model_E2pdf_Extension extends Model_E2pdf_Model {
17 15
18 16 private $extension;
19 17
20 - function __construct() {
21 - parent::__construct();
22 - }
23 -
24 18 public function load($name) {
25 - if (is_array(get_option('e2pdf_disabled_extensions')) &&
26 - in_array($name, get_option('e2pdf_disabled_extensions'))) {
19 + if (in_array($name, get_option('e2pdf_disabled_extensions', []), true)) {
27 20 return false;
28 21 }
29 22 $class = 'Extension_E2pdf_' . ucfirst($name);
30 23 if (class_exists($class)) {
@@ -47,9 +40,9 @@
47 40 return false;
48 41 }
49 42
50 43 public function info($attr = false) {
51 - if (method_exists($this->extension(), 'info')) {
44 + if ($this->extension() && method_exists($this->extension(), 'info')) {
52 45 return $this->extension()->info($attr);
53 46 }
54 47 return false;
55 48 }
@@ -58,16 +51,39 @@
58 51 return $this->extension;
59 52 }
60 53
61 54 public function set($attr, $value) {
62 - if (method_exists($this->extension(), 'set')) {
55 + if ($this->extension() && method_exists($this->extension(), 'set')) {
63 56 return $this->extension()->set($attr, $value);
64 57 }
65 58 return false;
66 59 }
67 60
61 + public function patch($key = false, $value = false, $entry = null) {
62 + if ($this->extension()) {
63 + switch ($key) {
64 + case 'args':
65 + if (!empty($value)) {
66 + $this->extension()->set($key, $value);
67 + if ($entry) {
68 + $entry->set_data($key, $this->extension()->get($key));
69 + }
70 + }
71 + break;
72 + default:
73 + if ($value !== false) {
74 + $this->extension()->set($key, $value);
75 + if ($entry) {
76 + $entry->set_data($key, $this->extension()->get($key));
77 + }
78 + }
79 + break;
80 + }
81 + }
82 + }
83 +
68 84 public function get($attr) {
69 - if (method_exists($this->extension(), 'get')) {
85 + if ($this->extension() && method_exists($this->extension(), 'get')) {
70 86 return $this->extension()->get($attr);
71 87 }
72 88 return false;
73 89 }
@@ -72,23 +88,23 @@
72 88 return false;
73 89 }
74 90
75 91 public function verify() {
76 - if (method_exists($this->extension(), 'verify')) {
92 + if ($this->extension() && method_exists($this->extension(), 'verify')) {
77 93 return $this->extension()->verify();
78 94 }
79 95 return false;
80 96 }
81 97
82 - public function import($xml, $item, $options = array()) {
83 - if (method_exists($this->extension(), 'import')) {
84 - return $this->extension()->import($xml, $item, $options);
98 + public function import($xml, $options = []) {
99 + if ($this->extension() && method_exists($this->extension(), 'import')) {
100 + return $this->extension()->import($xml, $options);
85 101 }
86 102 return false;
87 103 }
88 104
89 105 public function after_import($old_template_id, $new_template_id) {
90 - if (method_exists($this->extension(), 'after_import')) {
106 + if ($this->extension() && method_exists($this->extension(), 'after_import')) {
91 107 return $this->extension()->after_import($old_template_id, $new_template_id);
92 108 }
93 109 return false;
94 110 }
@@ -93,9 +109,9 @@
93 109 return false;
94 110 }
95 111
96 112 public function backup($xml = false) {
97 - if (method_exists($this->extension(), 'backup')) {
113 + if ($this->extension() && method_exists($this->extension(), 'backup')) {
98 114 return $this->extension()->backup($xml);
99 115 }
100 116 return false;
101 117 }
@@ -100,9 +116,9 @@
100 116 return false;
101 117 }
102 118
103 119 public function item($item_id = false) {
104 - if (method_exists($this->extension(), 'item')) {
120 + if ($this->extension() && method_exists($this->extension(), 'item')) {
105 121 return $this->extension()->item($item_id);
106 122 }
107 123 return false;
108 124 }
@@ -107,59 +123,138 @@
107 123 return false;
108 124 }
109 125
110 126 public function items() {
111 - if (method_exists($this->extension(), 'items')) {
127 + if ($this->extension() && method_exists($this->extension(), 'items')) {
112 128 return $this->extension()->items();
113 129 }
114 130 return false;
115 131 }
116 132
117 - /**
118 - * Load styles from extension
119 - */
120 - public function styles() {
121 - if (method_exists($this->extension(), 'styles')) {
122 - return $this->extension()->styles();
133 + // styles
134 + public function styles($item = false) {
135 + if ($this->extension() && method_exists($this->extension(), 'styles')) {
136 + return $this->extension()->styles($item);
123 137 }
124 138 return false;
125 139 }
126 140
127 - /**
128 - * Render Value via extension
129 - */
130 - public function render($value, $type = false, $field = array()) {
131 - if (method_exists($this->extension(), 'render')) {
132 - return $this->extension()->render($value, $type, $field);
141 + // render
142 + public function render($value, $field = [], $convert_shortcodes = true, $raw = false) {
143 + if ($this->extension() && method_exists($this->extension(), 'render')) {
144 + $filter = has_filter('e2pdf_pdf_render_filter');
145 + if (!$filter) {
146 + $this->pre_render();
147 + }
148 + $content = $this->extension()->render($value, $field, $convert_shortcodes, $raw);
149 + if (!$filter) {
150 + $this->after_render();
151 + }
152 + $type = isset($field['type']) ? $field['type'] : false;
153 + if ($type == 'e2pdf-image' || $type == 'e2pdf-signature' || $type == 'e2pdf-qrcode' || $type == 'e2pdf-barcode' || $type == 'e2pdf-graph') {
154 + return $content;
155 + } else {
156 + return $this->helper->load('translator')->translate($content, 'full');
157 + }
133 158 }
159 + return '';
160 + }
161 +
162 + // datasets
163 + public function datasets($item = false, $name = false) {
164 + if ($this->extension() && method_exists($this->extension(), 'datasets')) {
165 + $filter = has_filter('e2pdf_pdf_render_filter');
166 + if (!$filter) {
167 + $this->pre_render();
168 + }
169 + $content = $this->extension()->datasets($item, $name);
170 + if (!$filter) {
171 + $this->after_render();
172 + }
173 + return $content;
174 + }
134 175 return false;
135 176 }
136 177
137 - /**
138 - * Get available datasets
139 - */
140 - public function datasets($item = false, $name = false) {
141 - if (method_exists($this->extension(), 'datasets')) {
142 - return $this->extension()->datasets($item, $name);
178 + public function pre_render() {
179 + add_filter('e2pdf_pdf_render_filter', [$this->helper, '__return_true'], 999);
180 + add_filter('e2pdf_pdf_render', [$this->helper, '__return_true'], 999);
181 + if (class_exists('ACF')) {
182 + if (apply_filters('e2pdf_acf_enable_shortcodes', true)) {
183 + add_filter('acf/settings/enable_shortcode', [$this->helper, '__return_true'], 999);
184 + }
185 + if (apply_filters('e2pdf_acf_allow_in_block_themes_outside_content', true)) {
186 + add_filter('acf/shortcode/allow_in_block_themes_outside_content', [$this->helper, '__return_true'], 999);
187 + }
188 + if (apply_filters('e2pdf_acf_allow_in_bindings', false)) {
189 + add_filter('acf/load_field', [$this, 'filter_acf_allow_in_bindings'], 999);
190 + }
191 + if (!apply_filters('e2pdf_prevent_access_to_fields_on_non_public_posts', true)) {
192 + add_filter('acf/shortcode/prevent_access_to_fields_on_non_public_posts', [$this->helper, '__return_false'], 999);
193 + }
194 + add_filter('acf/load_value', [$this, 'filter_acf_load_value'], 999);
195 + add_filter('do_shortcode_tag', [$this, 'filter_do_shortcode_tag_acf'], 999, 2);
143 196 }
197 + add_filter('jet-engine/listings/data/default-object', [$this, 'filter_jet_listings_data_default_object'], 999);
198 + }
199 +
200 + public function after_render() {
201 + remove_filter('jet-engine/listings/data/default-object', [$this, 'filter_jet_listings_data_default_object'], 999);
202 + if (class_exists('ACF')) {
203 + if (apply_filters('e2pdf_acf_enable_shortcodes', true)) {
204 + remove_filter('acf/settings/enable_shortcode', [$this->helper, '__return_true'], 999);
205 + }
206 + if (apply_filters('e2pdf_acf_allow_in_block_themes_outside_content', true)) {
207 + remove_filter('acf/shortcode/allow_in_block_themes_outside_content', [$this->helper, '__return_true'], 999);
208 + }
209 + if (apply_filters('e2pdf_acf_allow_in_bindings', false)) {
210 + remove_filter('acf/load_field', [$this, 'filter_acf_allow_in_bindings'], 999);
211 + }
212 + if (!apply_filters('e2pdf_prevent_access_to_fields_on_non_public_posts', true)) {
213 + remove_filter('acf/shortcode/prevent_access_to_fields_on_non_public_posts', [$this->helper, '__return_false'], 999);
214 + }
215 + remove_filter('acf/load_value', [$this, 'filter_acf_load_value'], 999);
216 + remove_filter('do_shortcode_tag', [$this, 'filter_do_shortcode_tag_acf'], 999);
217 + }
218 + remove_filter('e2pdf_pdf_render', [$this->helper, '__return_true'], 999);
219 + remove_filter('e2pdf_pdf_render_filter', [$this->helper, '__return_true'], 999);
220 + }
221 +
222 + // convert shortcodes
223 + public function convert_shortcodes($value, $to = false, $html = false) {
224 + if ($this->extension() && method_exists($this->extension(), 'convert_shortcodes')) {
225 + return $this->extension()->convert_shortcodes($value, $to, $html);
226 + }
144 227 return false;
145 228 }
146 229
147 - /**
148 - * Get current extension dataset
149 - */
150 - public function dataset($dataset_id = false) {
151 - if (method_exists($this->extension(), 'dataset')) {
152 - return $this->extension()->dataset($dataset_id);
230 + // dataset actions
231 + public function get_dataset_actions($dataset_id = false) {
232 + if ($this->extension() && method_exists($this->extension(), 'get_dataset_actions')) {
233 + return $this->extension()->get_dataset_actions($dataset_id);
153 234 }
154 235 return false;
155 236 }
156 237
157 - /**
158 - * List of available extensions
159 - */
238 + // template actions
239 + public function get_template_actions($template_id = false) {
240 + if ($this->extension() && method_exists($this->extension(), 'get_template_actions')) {
241 + return $this->extension()->get_template_actions($template_id);
242 + }
243 + return false;
244 + }
245 +
246 + // storing engine
247 + public function get_storing_engine() {
248 + if ($this->extension() && method_exists($this->extension(), 'get_storing_engine')) {
249 + return $this->extension()->get_storing_engine();
250 + }
251 + return false;
252 + }
253 +
254 + // extensions
160 255 public function extensions($load = true) {
161 - $list = array();
256 + $list = [];
162 257 $extentions_path = $this->helper->get('plugin_dir') . 'classes/extension/*';
163 258 foreach (array_filter(glob($extentions_path), 'is_file') as $file) {
164 259 $info = pathinfo($file);
165 260 $file_name = basename($file, '.' . $info['extension']);
@@ -175,116 +270,173 @@
175 270 }
176 271 return $list;
177 272 }
178 273
179 - /**
180 - * Delete item
181 - */
274 + // delete item
182 275 public function delete_item($template_id = false, $dataset_id = false) {
183 - if (method_exists($this->extension(), 'delete_item')) {
276 + if ($this->extension() && method_exists($this->extension(), 'delete_item')) {
184 277 return $this->extension()->delete_item($template_id, $dataset_id);
185 278 }
186 279 return false;
187 280 }
188 281
189 - /**
190 - * Delete all items
191 - */
282 + // delete items
192 283 public function delete_items($template_id = false) {
193 - if (method_exists($this->extension(), 'delete_items')) {
284 + if ($this->extension() && method_exists($this->extension(), 'delete_items')) {
194 285 return $this->extension()->delete_items($template_id);
195 286 }
196 287 return false;
197 288 }
198 289
199 - /**
200 - * Visual Mapper for Mapping field
201 - *
202 - * @return bool|string - Prepared form or false
203 - */
290 + // visual mapper
204 291 public function visual_mapper() {
205 292
206 - if (method_exists($this->extension(), 'visual_mapper')) {
293 + if ($this->extension() && method_exists($this->extension(), 'visual_mapper')) {
207 294 if (!extension_loaded('libxml')) {
208 - return __('libxml is required', 'e2pdf');
295 + /* translators: %s: PHP Extension */
296 + return sprintf(__('The PHP %s extension is required', 'e2pdf'), 'libxml');
209 297 }
210 298 if (!extension_loaded('Dom')) {
211 - return __('DOM is required', 'e2pdf');
299 + /* translators: %s: PHP Extension */
300 + return sprintf(__('The PHP %s extension is required', 'e2pdf'), 'DOM');
212 301 }
213 - return $this->extension()->visual_mapper();
302 + if ($this->extension()->get('item') == '-2') {
303 + $visual_mapper = '';
304 + if ($this->extension()->get('item1')) {
305 + $this->extension()->set('item', $this->extension()->get('item1'));
306 +
307 + $output = $this->extension()->visual_mapper();
308 + if ($output !== false) {
309 + $visual_mapper .= $output;
310 + }
311 + }
312 + if ($this->extension()->get('item2')) {
313 + $this->extension()->set('item', $this->extension()->get('item2'));
314 + $output = $this->extension()->visual_mapper();
315 + if ($output !== false) {
316 + $visual_mapper .= $output;
317 + }
318 + }
319 + return $visual_mapper;
320 + } else {
321 + return $this->extension()->visual_mapper();
322 + }
214 323 }
215 324 return false;
216 325 }
217 326
218 - public function auto_form($template, $data = array()) {
219 - if (method_exists($this->extension(), 'auto_form')) {
327 + public function auto_form($template, $data = []) {
328 + if ($this->extension() && method_exists($this->extension(), 'auto_form')) {
220 329 return $this->extension()->auto_form($template, $data);
221 330 }
222 331 return $template;
223 332 }
224 333
225 - /**
226 - * Convert Field name to Value
227 - * @since 0.01.34
228 - *
229 - * @param string $name - Field name
230 - *
231 - * @return bool|string - Converted value or false
232 - */
334 + // auto map
233 335 public function auto_map($name = false) {
234 - if (method_exists($this->extension(), 'auto_map') && $name) {
336 + if ($this->extension() && method_exists($this->extension(), 'auto_map') && $name) {
235 337 return $this->extension()->auto_map($name);
236 338 }
237 339 return false;
238 340 }
239 341
240 - /**
241 - * Auto PDF generation
242 - */
342 + // auto
243 343 public function auto() {
244 - if (method_exists($this->extension(), 'auto')) {
245 - return $this->extension()->auto();
344 + if ($this->extension() && method_exists($this->extension(), 'auto')) {
345 + if ($this->extension()->get('item') == '-2') {
346 + if (!$this->extension()->get('item1') && !$this->extension()->get('item2')) {
347 + return false;
348 + }
349 + $data = [];
350 + if ($this->extension()->get('item1')) {
351 + $this->extension()->set('item', $this->extension()->get('item1'));
352 + $data = $this->extension()->auto();
353 + }
354 + if ($this->extension()->get('item2')) {
355 + $this->extension()->set('item', $this->extension()->get('item2'));
356 +
357 + if (!empty($data)) {
358 +
359 + $data2 = $this->extension()->auto();
360 + $data['elements'] = array_merge($data['elements'], $data2['elements']);
361 + } else {
362 + $data = $this->extension()->auto();
363 + }
364 + }
365 + return $data;
366 + } else {
367 + return $this->extension()->auto();
368 + }
246 369 }
247 370 return false;
248 371 }
249 372
250 - /**
251 - * Check if function exists inside extension
252 - */
373 + // method
253 374 public function method($attr = false) {
254 - if ($attr && method_exists($this->extension(), $attr)) {
375 + if ($attr && $this->extension() && method_exists($this->extension(), $attr)) {
255 376 return true;
256 377 }
257 378 return false;
258 379 }
259 380
260 - /**
261 - * Load actions from extension
262 - */
381 + // load actions
263 382 public function load_actions() {
264 - if (method_exists($this->extension(), 'load_actions')) {
383 + if ($this->extension() && method_exists($this->extension(), 'load_actions')) {
265 384 return $this->extension()->load_actions();
266 385 }
267 386 return false;
268 387 }
269 388
270 - /**
271 - * Load filters from extension
272 - */
389 + // load filters
273 390 public function load_filters() {
274 - if (method_exists($this->extension(), 'load_filters')) {
391 + if ($this->extension() && method_exists($this->extension(), 'load_filters')) {
275 392 return $this->extension()->load_filters();
276 393 }
277 394 return false;
278 395 }
279 396
280 - /**
281 - * Load shortcodes from extension
282 - */
397 + // load shortcodes
283 398 public function load_shortcodes() {
284 - if (method_exists($this->extension(), 'load_shortcodes')) {
399 + if ($this->extension() && method_exists($this->extension(), 'load_shortcodes')) {
285 400 return $this->extension()->load_shortcodes();
286 401 }
287 402 return false;
288 403 }
289 404
405 + // filter acf allow in bidnings
406 + public function filter_acf_allow_in_bindings($field) {
407 + if (isset($field['allow_in_bindings']) && !$field['allow_in_bindings']) {
408 + $field['allow_in_bindings'] = 1;
409 + }
410 + return $field;
411 + }
412 +
413 + // filter acf load value
414 + public function filter_acf_load_value($output) {
415 + if (is_array($output)) {
416 + foreach ($output as $key => $value) {
417 + if (is_string($value)) {
418 + $output[$key] = $this->helper->load('translator')->translate($value, 'partial');
419 + }
420 + }
421 + }
422 + return $output;
423 + }
424 +
425 + // filter do shortcode tag acf
426 + public function filter_do_shortcode_tag_acf($output, $tag) {
427 + if ($tag === 'acf') {
428 + return $this->helper->load('translator')->translate($output, 'partial');
429 + }
430 + return $output;
431 + }
432 +
433 + // filter jet engine default object
434 + public function filter_jet_listings_data_default_object($default_object) {
435 + if ($this->extension instanceof Extension_E2pdf_Wordpress || $this->extension instanceof Extension_E2pdf_Woocommerce) {
436 + if ($this->get('item') != '-3' && $this->get('dataset')) {
437 + $default_object = get_post($this->get('dataset'));
438 + }
439 + }
440 + return $default_object;
441 + }
290 442 }