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 +288 -109 1.00.131.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,24 +14,16 @@
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) {
19 + if (in_array($name, get_option('e2pdf_disabled_extensions', []), true)) {
20 + return false;
21 + }
25 22 $class = 'Extension_E2pdf_' . ucfirst($name);
26 23 if (class_exists($class)) {
27 24 $extension = new $class();
28 -
29 - if (is_array(get_option('e2pdf_extensions'))) {
30 - $extensions = get_option('e2pdf_extensions');
31 - } else {
32 - $extensions = array();
33 - }
34 -
35 - if ($extension->active() && in_array($name, $extensions)) {
25 + if ($extension->active()) {
36 26 $this->extension = $extension;
37 27 return true;
38 28 }
39 29 }
@@ -49,135 +39,222 @@
49 39 }
50 40 return false;
51 41 }
52 42
53 - public function exist($name) {
54 - $class = 'Extension_E2pdf_' . ucfirst($name);
55 - if (class_exists($class)) {
56 - return true;
43 + public function info($attr = false) {
44 + if ($this->extension() && method_exists($this->extension(), 'info')) {
45 + return $this->extension()->info($attr);
57 46 }
58 47 return false;
59 48 }
60 49
61 - public function download($extensions = array()) {
50 + public function extension() {
51 + return $this->extension;
52 + }
62 53
63 - if ($extensions && is_array($extensions) && !empty($extensions)) {
64 - $model_e2pdf_api = new Model_E2pdf_Api();
65 - $model_e2pdf_api->set(array(
66 - 'action' => 'update/extensions',
67 - 'data' => array(
68 - 'version' => $this->helper->get('version'),
69 - 'extensions' => $extensions
70 - )
71 - ));
72 - $request = $model_e2pdf_api->request();
54 + public function set($attr, $value) {
55 + if ($this->extension() && method_exists($this->extension(), 'set')) {
56 + return $this->extension()->set($attr, $value);
57 + }
58 + return false;
59 + }
73 60
74 - if (isset($request['extensions']) && is_array($request['extensions'])) {
75 - $extentions_path = $this->helper->get('plugin_dir') . 'classes/extension/';
76 - foreach ($request['extensions'] as $extension) {
77 - if ($extension['filename'] && $extension['file']) {
78 - if (!file_exists($extentions_path . $extension['filename'])) {
79 - file_put_contents($extentions_path . $extension['filename'], base64_decode($extension['file']));
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));
80 69 }
81 70 }
82 - }
83 - return true;
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;
84 80 }
85 81 }
82 + }
86 83
84 + public function get($attr) {
85 + if ($this->extension() && method_exists($this->extension(), 'get')) {
86 + return $this->extension()->get($attr);
87 + }
87 88 return false;
88 89 }
89 90
90 - public function extension() {
91 - return $this->extension;
91 + public function verify() {
92 + if ($this->extension() && method_exists($this->extension(), 'verify')) {
93 + return $this->extension()->verify();
94 + }
95 + return false;
92 96 }
93 97
94 - public function set($attr, $value) {
95 - if (method_exists($this->extension(), 'set')) {
96 - return $this->extension()->set($attr, $value);
98 + public function import($xml, $options = []) {
99 + if ($this->extension() && method_exists($this->extension(), 'import')) {
100 + return $this->extension()->import($xml, $options);
97 101 }
98 102 return false;
99 103 }
100 104
101 - public function get($attr) {
102 - if (method_exists($this->extension(), 'get')) {
103 - return $this->extension()->get($attr);
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);
104 108 }
105 109 return false;
106 110 }
107 111
108 - public function verify() {
109 - if (method_exists($this->extension(), 'verify')) {
110 - return $this->extension()->verify();
112 + public function backup($xml = false) {
113 + if ($this->extension() && method_exists($this->extension(), 'backup')) {
114 + return $this->extension()->backup($xml);
111 115 }
112 116 return false;
113 117 }
114 118
115 - public function import() {
116 - if (method_exists($this->extension(), 'import')) {
117 - return $this->extension()->import();
119 + public function item($item_id = false) {
120 + if ($this->extension() && method_exists($this->extension(), 'item')) {
121 + return $this->extension()->item($item_id);
118 122 }
119 123 return false;
120 124 }
121 125
122 - public function export() {
123 - if (method_exists($this->extension(), 'export')) {
124 - return $this->extension()->export();
126 + public function items() {
127 + if ($this->extension() && method_exists($this->extension(), 'items')) {
128 + return $this->extension()->items();
125 129 }
126 130 return false;
127 131 }
128 132
129 - public function backup() {
130 - if (method_exists($this->extension(), 'backup')) {
131 - return $this->extension()->backup();
133 + // styles
134 + public function styles($item = false) {
135 + if ($this->extension() && method_exists($this->extension(), 'styles')) {
136 + return $this->extension()->styles($item);
132 137 }
133 138 return false;
134 139 }
135 140
136 - public function get_item($item_id = false) {
137 - if (method_exists($this->extension(), 'get_item')) {
138 - return $this->extension()->get_item($item_id);
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 + }
139 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 + }
140 175 return false;
141 176 }
142 177
143 - public function get_items() {
144 - if (method_exists($this->extension(), 'get_items')) {
145 - return $this->extension()->get_items();
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);
146 196 }
147 - return false;
197 + add_filter('jet-engine/listings/data/default-object', [$this, 'filter_jet_listings_data_default_object'], 999);
148 198 }
149 199
150 - public function get_styles() {
151 - if (method_exists($this->extension(), 'get_styles')) {
152 - return $this->extension()->get_styles();
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);
153 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 + }
154 227 return false;
155 228 }
156 229
157 - public function render($value, $type = false, $field = array()) {
158 - if (method_exists($this->extension(), 'render')) {
159 - return $this->extension()->render($value, $type, $field);
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);
160 234 }
161 235 return false;
162 236 }
163 237
164 - public function get_datasets($item = false, $name = false) {
165 - if (method_exists($this->extension(), 'get_datasets')) {
166 - return $this->extension()->get_datasets($item, $name);
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);
167 242 }
168 243 return false;
169 244 }
170 245
171 - public function get_dataset($dataset_id = false) {
172 - if (method_exists($this->extension(), 'get_dataset')) {
173 - return $this->extension()->get_dataset($dataset_id);
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();
174 250 }
175 251 return false;
176 252 }
177 253
178 - public function get_extensions_list() {
179 - $list = array();
254 + // extensions
255 + public function extensions($load = true) {
256 + $list = [];
180 257 $extentions_path = $this->helper->get('plugin_dir') . 'classes/extension/*';
181 258 foreach (array_filter(glob($extentions_path), 'is_file') as $file) {
182 259 $info = pathinfo($file);
183 260 $file_name = basename($file, '.' . $info['extension']);
@@ -182,82 +259,184 @@
182 259 $info = pathinfo($file);
183 260 $file_name = basename($file, '.' . $info['extension']);
184 261 $file_name = substr($file_name, 6);
185 262
186 - if ($this->load($file_name)) {
187 - $list = array_merge($list, $this->extension->info());
263 + if ($load) {
264 + if ($this->load($file_name)) {
265 + $list = array_merge($list, $this->extension->info());
266 + }
267 + } else {
268 + $list[] = $file_name;
188 269 }
189 270 }
190 -
191 271 return $list;
192 272 }
193 273
274 + // delete item
194 275 public function delete_item($template_id = false, $dataset_id = false) {
195 - if (method_exists($this->extension(), 'delete_item')) {
276 + if ($this->extension() && method_exists($this->extension(), 'delete_item')) {
196 277 return $this->extension()->delete_item($template_id, $dataset_id);
197 278 }
198 279 return false;
199 280 }
200 281
282 + // delete items
201 283 public function delete_items($template_id = false) {
202 - if (method_exists($this->extension(), 'delete_items')) {
284 + if ($this->extension() && method_exists($this->extension(), 'delete_items')) {
203 285 return $this->extension()->delete_items($template_id);
204 286 }
205 287 return false;
206 288 }
207 289
208 - /**
209 - * Visual Mapper for Mapping field
210 - *
211 - * @return bool|string - Prepared form or false
212 - */
290 + // visual mapper
213 291 public function visual_mapper() {
214 - if (method_exists($this->extension(), 'visual_mapper')) {
215 - return $this->extension()->visual_mapper();
292 +
293 + if ($this->extension() && method_exists($this->extension(), 'visual_mapper')) {
294 + if (!extension_loaded('libxml')) {
295 + /* translators: %s: PHP Extension */
296 + return sprintf(__('The PHP %s extension is required', 'e2pdf'), 'libxml');
297 + }
298 + if (!extension_loaded('Dom')) {
299 + /* translators: %s: PHP Extension */
300 + return sprintf(__('The PHP %s extension is required', 'e2pdf'), 'DOM');
301 + }
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 + }
216 323 }
217 324 return false;
218 325 }
219 326
220 - /**
221 - * Convert Field name to Value
222 - * @since 0.01.34
223 - *
224 - * @param string $name - Field name
225 - *
226 - * @return bool|string - Converted value or false
227 - */
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);
330 + }
331 + return $template;
332 + }
333 +
334 + // auto map
228 335 public function auto_map($name = false) {
229 - if (method_exists($this->extension(), 'auto_map') && $name) {
336 + if ($this->extension() && method_exists($this->extension(), 'auto_map') && $name) {
230 337 return $this->extension()->auto_map($name);
231 338 }
232 339 return false;
233 340 }
234 341
342 + // auto
235 343 public function auto() {
236 - if (method_exists($this->extension(), 'auto')) {
237 - 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 + }
238 369 }
239 370 return false;
240 371 }
241 372
373 + // method
374 + public function method($attr = false) {
375 + if ($attr && $this->extension() && method_exists($this->extension(), $attr)) {
376 + return true;
377 + }
378 + return false;
379 + }
380 +
381 + // load actions
242 382 public function load_actions() {
243 - if (method_exists($this->extension(), 'load_actions')) {
383 + if ($this->extension() && method_exists($this->extension(), 'load_actions')) {
244 384 return $this->extension()->load_actions();
245 385 }
246 386 return false;
247 387 }
248 388
389 + // load filters
249 390 public function load_filters() {
250 - if (method_exists($this->extension(), 'load_filters')) {
391 + if ($this->extension() && method_exists($this->extension(), 'load_filters')) {
251 392 return $this->extension()->load_filters();
252 393 }
253 394 return false;
254 395 }
255 396
397 + // load shortcodes
256 398 public function load_shortcodes() {
257 - if (method_exists($this->extension(), 'load_shortcodes')) {
399 + if ($this->extension() && method_exists($this->extension(), 'load_shortcodes')) {
258 400 return $this->extension()->load_shortcodes();
259 401 }
260 402 return false;
261 403 }
262 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 + }
263 442 }