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 +260 -101 1.05.031.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,30 @@
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
105 + public function after_import($old_template_id, $new_template_id) {
106 + if ($this->extension() && method_exists($this->extension(), 'after_import')) {
107 + return $this->extension()->after_import($old_template_id, $new_template_id);
108 + }
109 + return false;
110 + }
111 +
89 112 public function backup($xml = false) {
90 - if (method_exists($this->extension(), 'backup')) {
113 + if ($this->extension() && method_exists($this->extension(), 'backup')) {
91 114 return $this->extension()->backup($xml);
92 115 }
93 116 return false;
94 117 }
@@ -93,9 +116,9 @@
93 116 return false;
94 117 }
95 118
96 119 public function item($item_id = false) {
97 - if (method_exists($this->extension(), 'item')) {
120 + if ($this->extension() && method_exists($this->extension(), 'item')) {
98 121 return $this->extension()->item($item_id);
99 122 }
100 123 return false;
101 124 }
@@ -100,59 +123,138 @@
100 123 return false;
101 124 }
102 125
103 126 public function items() {
104 - if (method_exists($this->extension(), 'items')) {
127 + if ($this->extension() && method_exists($this->extension(), 'items')) {
105 128 return $this->extension()->items();
106 129 }
107 130 return false;
108 131 }
109 132
110 - /**
111 - * Load styles from extension
112 - */
113 - public function styles() {
114 - if (method_exists($this->extension(), 'styles')) {
115 - 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);
116 137 }
117 138 return false;
118 139 }
119 140
120 - /**
121 - * Render Value via extension
122 - */
123 - public function render($value, $type = false, $field = array()) {
124 - if (method_exists($this->extension(), 'render')) {
125 - 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 + }
126 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 + }
127 175 return false;
128 176 }
129 177
130 - /**
131 - * Get available datasets
132 - */
133 - public function datasets($item = false, $name = false) {
134 - if (method_exists($this->extension(), 'datasets')) {
135 - 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);
136 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 + }
137 227 return false;
138 228 }
139 229
140 - /**
141 - * Get current extension dataset
142 - */
143 - public function dataset($dataset_id = false) {
144 - if (method_exists($this->extension(), 'dataset')) {
145 - 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);
146 234 }
147 235 return false;
148 236 }
149 237
150 - /**
151 - * List of available extensions
152 - */
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
153 255 public function extensions($load = true) {
154 - $list = array();
256 + $list = [];
155 257 $extentions_path = $this->helper->get('plugin_dir') . 'classes/extension/*';
156 258 foreach (array_filter(glob($extentions_path), 'is_file') as $file) {
157 259 $info = pathinfo($file);
158 260 $file_name = basename($file, '.' . $info['extension']);
@@ -168,116 +270,173 @@
168 270 }
169 271 return $list;
170 272 }
171 273
172 - /**
173 - * Delete item
174 - */
274 + // delete item
175 275 public function delete_item($template_id = false, $dataset_id = false) {
176 - if (method_exists($this->extension(), 'delete_item')) {
276 + if ($this->extension() && method_exists($this->extension(), 'delete_item')) {
177 277 return $this->extension()->delete_item($template_id, $dataset_id);
178 278 }
179 279 return false;
180 280 }
181 281
182 - /**
183 - * Delete all items
184 - */
282 + // delete items
185 283 public function delete_items($template_id = false) {
186 - if (method_exists($this->extension(), 'delete_items')) {
284 + if ($this->extension() && method_exists($this->extension(), 'delete_items')) {
187 285 return $this->extension()->delete_items($template_id);
188 286 }
189 287 return false;
190 288 }
191 289
192 - /**
193 - * Visual Mapper for Mapping field
194 - *
195 - * @return bool|string - Prepared form or false
196 - */
290 + // visual mapper
197 291 public function visual_mapper() {
198 292
199 - if (method_exists($this->extension(), 'visual_mapper')) {
293 + if ($this->extension() && method_exists($this->extension(), 'visual_mapper')) {
200 294 if (!extension_loaded('libxml')) {
201 - return __('libxml is required', 'e2pdf');
295 + /* translators: %s: PHP Extension */
296 + return sprintf(__('The PHP %s extension is required', 'e2pdf'), 'libxml');
202 297 }
203 298 if (!extension_loaded('Dom')) {
204 - return __('DOM is required', 'e2pdf');
299 + /* translators: %s: PHP Extension */
300 + return sprintf(__('The PHP %s extension is required', 'e2pdf'), 'DOM');
205 301 }
206 - 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 + }
207 323 }
208 324 return false;
209 325 }
210 326
211 - public function add_form($template) {
212 - if (method_exists($this->extension(), 'add_form')) {
213 - return $this->extension()->add_form($template);
327 + public function auto_form($template, $data = []) {
328 + if ($this->extension() && method_exists($this->extension(), 'auto_form')) {
329 + return $this->extension()->auto_form($template, $data);
214 330 }
215 331 return $template;
216 332 }
217 333
218 - /**
219 - * Convert Field name to Value
220 - * @since 0.01.34
221 - *
222 - * @param string $name - Field name
223 - *
224 - * @return bool|string - Converted value or false
225 - */
334 + // auto map
226 335 public function auto_map($name = false) {
227 - if (method_exists($this->extension(), 'auto_map') && $name) {
336 + if ($this->extension() && method_exists($this->extension(), 'auto_map') && $name) {
228 337 return $this->extension()->auto_map($name);
229 338 }
230 339 return false;
231 340 }
232 341
233 - /**
234 - * Auto PDF generation
235 - */
342 + // auto
236 343 public function auto() {
237 - if (method_exists($this->extension(), 'auto')) {
238 - 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 + }
239 369 }
240 370 return false;
241 371 }
242 372
243 - /**
244 - * Check if function exists inside extension
245 - */
373 + // method
246 374 public function method($attr = false) {
247 - if ($attr && method_exists($this->extension(), $attr)) {
375 + if ($attr && $this->extension() && method_exists($this->extension(), $attr)) {
248 376 return true;
249 377 }
250 378 return false;
251 379 }
252 380
253 - /**
254 - * Load actions from extension
255 - */
381 + // load actions
256 382 public function load_actions() {
257 - if (method_exists($this->extension(), 'load_actions')) {
383 + if ($this->extension() && method_exists($this->extension(), 'load_actions')) {
258 384 return $this->extension()->load_actions();
259 385 }
260 386 return false;
261 387 }
262 388
263 - /**
264 - * Load filters from extension
265 - */
389 + // load filters
266 390 public function load_filters() {
267 - if (method_exists($this->extension(), 'load_filters')) {
391 + if ($this->extension() && method_exists($this->extension(), 'load_filters')) {
268 392 return $this->extension()->load_filters();
269 393 }
270 394 return false;
271 395 }
272 396
273 - /**
274 - * Load shortcodes from extension
275 - */
397 + // load shortcodes
276 398 public function load_shortcodes() {
277 - if (method_exists($this->extension(), 'load_shortcodes')) {
399 + if ($this->extension() && method_exists($this->extension(), 'load_shortcodes')) {
278 400 return $this->extension()->load_shortcodes();
279 401 }
280 402 return false;
281 403 }
282 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 + }
283 442 }