PluginProbe
E2Pdf – Export Pdf Tool for WordPress / 1.32.55
E2Pdf – Export Pdf Tool for WordPress v1.32.55
1.32.55 1.32.56 1.32.53 1.32.51 1.32.49 1.32.48 1.32.43 1.32.40 1.32.34 1.32.32 1.32.31 1.32.26 1.32.22 1.32.23 1.32.18 1.32.17 1.32.15 trunk 1.00.00 1.00.13 1.01.01 1.02.02 1.03.07 1.04.07 1.05.03 All 76 releases
e2pdf / classes / model / e2pdf-loader.php

e2pdf-loader.php in E2Pdf – Export Pdf Tool for WordPress 1.32.55, at classes/model/e2pdf-loader.php

1,279 lines 65.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * File: /model/e2pdf-loader.php
5 *
6 * @package E2Pdf
7 * @license GPLv3
8 * @link https://e2pdf.com
9 */
10 if (!defined('ABSPATH')) {
11 die('Access denied.');
12 }
13
14 class Model_E2pdf_Loader extends Model_E2pdf_Model {
15
16 private $e2pdf_admin_pages = [
17 'toplevel_page_e2pdf',
18 'e2pdf_page_e2pdf-templates',
19 'e2pdf_page_e2pdf-integrations',
20 'e2pdf_page_e2pdf-settings',
21 'e2pdf_page_e2pdf-license',
22 'e2pdf_page_e2pdf-debug',
23 ];
24
25 // load
26 public function load() {
27 $this->load_translation();
28 $this->load_actions();
29 $this->load_filters();
30 $this->load_extensions();
31 $this->load_hooks();
32 $this->load_ajax();
33 $this->load_shortcodes();
34 }
35
36 // load translation
37 public function load_translation() {
38 load_plugin_textdomain('e2pdf', false, '/e2pdf/languages/');
39 }
40
41 // load ajax
42 public function load_ajax() {
43 if (is_admin()) {
44 add_action('wp_ajax_e2pdf_save_form', [new Controller_E2pdf_Templates(), 'ajax_save_form']);
45 add_action('wp_ajax_e2pdf_auto', [new Controller_E2pdf_Templates(), 'ajax_auto']);
46 add_action('wp_ajax_e2pdf_upload', [new Controller_E2pdf_Templates(), 'ajax_upload']);
47 add_action('wp_ajax_e2pdf_reupload', [new Controller_E2pdf_Templates(), 'ajax_reupload']);
48 add_action('wp_ajax_e2pdf_extension', [new Controller_E2pdf_Templates(), 'ajax_extension']);
49 add_action('wp_ajax_e2pdf_activate_template', [new Controller_E2pdf_Templates(), 'ajax_activate_template']);
50 add_action('wp_ajax_e2pdf_deactivate_template', [new Controller_E2pdf_Templates(), 'ajax_deactivate_template']);
51 add_action('wp_ajax_e2pdf_visual_mapper', [new Controller_E2pdf_Templates(), 'ajax_visual_mapper']);
52 add_action('wp_ajax_e2pdf_get_styles', [new Controller_E2pdf_Templates(), 'ajax_get_styles']);
53 add_action('wp_ajax_e2pdf_email', [new Controller_E2pdf_Templates(), 'ajax_email']);
54 add_action('wp_ajax_e2pdf_license_key', [new Controller_E2pdf_License(), 'ajax_change_license_key']);
55 add_action('wp_ajax_e2pdf_deactivate_all_templates', [new Controller_E2pdf_License(), 'ajax_deactivate_all_templates']);
56 add_action('wp_ajax_e2pdf_templates', [new Controller_E2pdf(), 'ajax_templates']);
57 add_action('wp_ajax_e2pdf_dataset', [new Controller_E2pdf(), 'ajax_dataset']);
58 add_action('wp_ajax_e2pdf_datasets_refresh', [new Controller_E2pdf(), 'ajax_datasets_refresh']);
59 add_action('wp_ajax_e2pdf_delete_item', [new Controller_E2pdf(), 'ajax_delete_item']);
60 add_action('wp_ajax_e2pdf_delete_items', [new Controller_E2pdf(), 'ajax_delete_items']);
61 add_action('wp_ajax_e2pdf_delete_font', [new Controller_E2pdf_Settings(), 'ajax_delete_font']);
62 add_action('wp_ajax_e2pdf_bulk_create', [new Controller_E2pdf(), 'ajax_bulk_create']);
63 add_action('wp_ajax_e2pdf_bulk_action', [new Controller_E2pdf(), 'ajax_bulk_action']);
64 add_action('wp_ajax_e2pdf_bulk_progress', [new Controller_E2pdf(), 'ajax_bulk_progress']);
65 }
66 }
67
68 // load actions
69 public function load_actions() {
70 if (is_admin()) {
71 add_action('wpmu_new_blog', [&$this, 'action_wpmu_new_blog']);
72 add_action('admin_menu', [&$this, 'action_admin_menu']);
73 add_action('admin_init', [&$this, 'action_admin_init'], 9);
74 add_action('admin_enqueue_scripts', [&$this, 'action_admin_enqueue_scripts']);
75 add_action('current_screen', [&$this, 'action_current_screen']);
76 add_action('plugins_loaded', [&$this, 'action_plugins_loaded']);
77 }
78 add_action('wp_enqueue_scripts', [&$this, 'action_wp_enqueue_scripts']);
79 add_action('wp', [Helper_E2pdf_View::instance(), 'render_frontend_page'], 5);
80 add_action('wp_loaded', [&$this, 'action_wp_loaded']);
81 add_action('init', [&$this, 'action_init'], 0);
82 add_action('e2pdf_bulk_export_cron', [new Controller_E2pdf(), 'cron_bulk_export']);
83 add_action('e2pdf_cache_pdfs_cron', [&$this, 'cron_cache_pdfs']);
84 add_action('e2pdf_cache_tmp_cron', [&$this, 'cron_cache_tmp']);
85
86 /**
87 * WPBakery Page Builder Actions
88 * https://wpbakery.com/
89 */
90 add_action('vc_before_init', [&$this, 'action_vc_before_init']);
91 }
92
93 // init action
94 public function action_init() {
95 if ($this->helper->get('page') == 'e2pdf-download') {
96 /**
97 * Compatibility fix with Minify HTML
98 * https://wordpress.org/plugins/minify-html-markup/
99 */
100 remove_action('init', 'teckel_init_minify_html', 1);
101
102 /**
103 * Compatibility fix with Minimal Coming Soon – Coming Soon Page
104 * https://wordpress.org/plugins/minimal-coming-soon-maintenance-mode/
105 */
106 remove_action('init', 'csmm_plugin_init');
107
108 /**
109 * Weglot Translate – Translate your WordPress website and go multilingual
110 * https://wordpress.org/plugins/weglot/
111 */
112 add_filter('weglot_active_translation_before_treat_page', '__return_false');
113
114 /**
115 * Compatibility fix with UltimateMember Homepage Redirect
116 * https://wordpress.org/plugins/ultimate-member/
117 */
118 if (class_exists('UM') && method_exists(UM(), 'access')) {
119 remove_filter('the_posts', [UM()->access(), 'filter_protected_posts'], 99);
120 }
121
122 /**
123 * Compatibility fix with Foxtool All-in-One: Contact chat button, Custom login, Media optimize images
124 * https://wordpress.org/plugins/foxtool/
125 */
126 remove_action('init', 'foxtool_init_minify_html', 1);
127
128 /**
129 * Compatibility fix with Image Optimizer, Resizer and CDN – Sirv
130 * https://wordpress.org/plugins/sirv/
131 */
132 remove_action('init', 'sirv_init', 20);
133 }
134
135 if (get_option('e2pdf_mod_rewrite', '0')) {
136 global $wp_rewrite;
137
138 $rewrite_url = rtrim(str_replace('%uid%', '([A-Za-z0-9]+)', get_option('e2pdf_mod_rewrite_url', 'e2pdf/%uid%/')), '/');
139
140 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
141 if (!empty($_SERVER['REQUEST_URI']) && preg_match('#' . $rewrite_url . '#', wp_unslash($_SERVER['REQUEST_URI']))) {
142 /**
143 * Compatibility fix with Minify HTML
144 * https://wordpress.org/plugins/minify-html-markup/
145 */
146 remove_action('init', 'teckel_init_minify_html', 1);
147
148 /**
149 * Compatibility fix with Minimal Coming Soon – Coming Soon Page
150 * https://wordpress.org/plugins/minimal-coming-soon-maintenance-mode/
151 */
152 remove_action('init', 'csmm_plugin_init');
153
154 /**
155 * Weglot Translate – Translate your WordPress website and go multilingual
156 * https://wordpress.org/plugins/weglot/
157 */
158 add_filter('weglot_active_translation_before_treat_page', '__return_false');
159
160 /**
161 * Compatibility fix with Foxtool All-in-One: Contact chat button, Custom login, Media optimize images
162 * https://wordpress.org/plugins/foxtool/
163 */
164 remove_action('init', 'foxtool_init_minify_html', 1);
165
166 /**
167 * Compatibility fix with Image Optimizer, Resizer and CDN – Sirv
168 * https://wordpress.org/plugins/sirv/
169 */
170 remove_action('init', 'sirv_init', 20);
171 }
172
173 $rules = [
174 '^' . $rewrite_url,
175 '^' . $wp_rewrite->index . '/' . $rewrite_url,
176 ];
177 $rewrite_to = 'index.php?e2pdf=1&uid=$matches[1]';
178 add_rewrite_rule($rules[0], $rewrite_to, 'top');
179 add_rewrite_rule($rules[1], $rewrite_to, 'top');
180
181 /**
182 * Polylang
183 * https://wordpress.org/plugins/polylang/
184 */
185 if (function_exists('pll_the_languages')) {
186 $languages = pll_the_languages(['raw' => 1]);
187 if (!empty($languages)) {
188 $settings = get_option('polylang');
189 $languages = array_keys($languages);
190 if (isset($settings['hide_default']) && isset($settings['default_lang']) && $settings['hide_default']) {
191 $languages = array_diff($languages, [$settings['default_lang']]);
192 }
193 if (!empty($languages)) {
194 $prefix = ((isset($settings['rewrite']) && $settings['rewrite']) ? '' : 'language/') . '(' . implode('|', $languages) . ')/';
195 $rules[] = '^' . $prefix . $rewrite_url;
196 $rules[] = '^' . $prefix . $wp_rewrite->index . '/' . $rewrite_url;
197 $rewrite_to = 'index.php?e2pdf=1&uid=$matches[2]';
198 add_rewrite_rule($rules[2], $rewrite_to, 'top');
199 add_rewrite_rule($rules[3], $rewrite_to, 'top');
200 }
201 }
202 }
203
204 $rewrite_rules = get_option('rewrite_rules');
205 foreach ($rules as $rule) {
206 if (!isset($rewrite_rules[$rule])) {
207 flush_rewrite_rules(false);
208 break;
209 }
210 }
211 }
212 }
213
214 // bulk export cron
215 public function cronjob() { // phpcs:ignore Squiz.WhiteSpace.SuperfluousWhitespace.EndLine
216 }
217
218 // clear pdfs cache
219 public function cron_cache_pdfs() {
220 $this->helper->load('cache')->purge_pdfs_cache_ttl();
221 }
222
223 // clear tmp cache
224 public function cron_cache_tmp() {
225 $this->helper->load('cache')->purge_tmp_cache();
226 }
227
228 // load filters
229 public function load_filters() {
230
231 if (get_option('e2pdf_dev_update', '0')) {
232 add_filter('pre_set_site_transient_update_plugins', [&$this, 'filter_pre_set_site_transient_update_plugins']);
233 }
234
235 add_filter('pre_do_shortcode_tag', [&$this, 'filter_pre_do_shortcode_tag'], 10, 2);
236
237 /**
238 * SiteGround Optimizer HTML Minify compatibility fix filter
239 * https://wordpress.org/plugins/sg-cachepress/
240 */
241 add_filter('sgo_html_minify_exclude_urls', [&$this, 'filter_sgo_html_minify_exclude_urls']);
242
243 if (get_option('e2pdf_mod_rewrite', '0')) {
244 add_filter('query_vars', [&$this, 'filter_query_vars']);
245 }
246
247 // phpcs:ignore WordPress.WP.CronInterval.CronSchedulesInterval
248 add_filter('cron_schedules', [&$this, 'filter_cron_schedules']);
249
250 /**
251 * WPBakery Page Builder Filters
252 * https://wpbakery.com/
253 */
254 add_filter('vc_grid_item_shortcodes', [&$this, 'filter_vc_grid_item_shortcodes']);
255 add_filter('vc_gitem_template_attribute_e2pdf_download', [&$this, 'filter_vc_gitem_template_attribute_e2pdf_download'], 10, 2);
256 add_filter('vc_gitem_template_attribute_e2pdf_view', [&$this, 'filter_vc_gitem_template_attribute_e2pdf_view'], 10, 2);
257 }
258
259 // plugins loaded action
260 public function action_plugins_loaded() {
261 if (get_option('e2pdf_version') !== $this->helper->get('version')) {
262 $this->activate();
263 }
264 }
265
266 // load extensions
267 public function load_extensions() {
268 $model_e2pdf_extension = new Model_E2pdf_Extension();
269 $extensions = $model_e2pdf_extension->extensions();
270 if (!empty($extensions)) {
271 foreach ($extensions as $extension => $extension_name) {
272 $model_e2pdf_extension->load($extension);
273 $model_e2pdf_extension->load_actions();
274 $model_e2pdf_extension->load_filters();
275 $model_e2pdf_extension->load_shortcodes();
276 }
277 }
278 }
279
280 // load shortcodes
281 public function load_shortcodes() {
282 $shortcode_handler = new Model_E2pdf_Shortcode();
283 foreach ($this->helper->shortcodes() as $shortcode) {
284 $method = str_replace('-', '_', $shortcode);
285 if (method_exists($shortcode_handler, $method)) {
286 add_shortcode($shortcode, [$shortcode_handler, $method]);
287 }
288 }
289 }
290
291 // load hooks
292 public function load_hooks() {
293 register_activation_hook($this->helper->get('plugin_file_path'), [&$this, 'activate']);
294 register_deactivation_hook($this->helper->get('plugin_file_path'), [&$this, 'deactivate']);
295 register_uninstall_hook($this->helper->get('plugin_file_path'), ['Model_E2pdf_Loader', 'uninstall']);
296 if (false !== strpos($this->helper->load('server')->get('REQUEST_URI'), '/e2pdf-rpc/')) {
297 add_action('wp_loaded', [Helper_E2pdf_View::instance(), 'rpc'], 5);
298 }
299 }
300
301 // admin body loading class
302 public function filter_admin_body_loading_class($classes) {
303 $classes .= ' e2pdf-loading';
304 return $classes;
305 }
306
307 // url rewrite
308 public function filter_query_vars($tags) {
309 global $wp;
310
311 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
312 if (!empty($_GET['e2pdf']) || strpos($wp->matched_query, 'e2pdf=1') === 0) {
313 $tags[] = 'e2pdf';
314 $tags[] = 'uid';
315 }
316 return $tags;
317 }
318
319 // custom cronjob time
320 public function filter_cron_schedules($schedules) {
321 $schedules['e2pdf_bulk_export_interval'] = [
322 'interval' => 3,
323 'display' => __('E2Pdf Bulk Export Interval', 'e2pdf'),
324 ];
325 return $schedules;
326 }
327
328 // filter sgo html minify
329 public function filter_sgo_html_minify_exclude_urls($exclude_urls) {
330 if (is_array($exclude_urls)) {
331 $exclude_urls[] = '/?page=e2pdf-download&uid=*';
332 if (get_option('e2pdf_download_inline_chrome_ios_fix', '0') == '1') {
333 $exclude_urls[] = '/*?page=e2pdf-download&uid=*';
334 }
335 if (get_option('e2pdf_mod_rewrite', '0')) {
336 $exclude_urls[] = '/' . rtrim(str_replace('%uid%', '*', get_option('e2pdf_mod_rewrite_url', 'e2pdf/%uid%/')), '/') . '*';
337 }
338 }
339 return $exclude_urls;
340 }
341
342 // release candidate updates
343 public function filter_pre_set_site_transient_update_plugins($transient) {
344
345 if (!is_object($transient)) {
346 return $transient;
347 }
348
349 $model_e2pdf_api = new Model_E2pdf_Api();
350 $model_e2pdf_api->set(
351 [
352 'action' => 'update/info',
353 ]
354 );
355 $request = $model_e2pdf_api->request();
356
357 if (isset($request['package'])) {
358 if (isset($transient->response[$this->helper->get('plugin')])) {
359 $update_info = $transient->response[$this->helper->get('plugin')];
360 } elseif (isset($transient->no_update[$this->helper->get('plugin')])) {
361 $update_info = $transient->no_update[$this->helper->get('plugin')];
362 } else {
363 $update_info = new stdClass();
364 $update_info->id = $this->helper->get('plugin');
365 $update_info->url = 'https://e2pdf.com';
366 $update_info->slug = $this->helper->get('slug');
367 $update_info->plugin = $this->helper->get('plugin');
368 $update_info->package = $request['package'];
369 $update_info->new_version = $request['version'];
370 $update_info->tested = $request['tested'];
371 $update_info->icons = $request['icons'];
372 $update_info->banners = $request['banners'];
373 }
374 if (version_compare($this->helper->get('version'), $request['version'], '<')) {
375 $update_info->package = $request['package'];
376 $update_info->new_version = $request['version'];
377 $update_info->tested = $request['tested'];
378 $transient->response[$this->helper->get('plugin')] = $update_info;
379 if (isset($transient->no_update[$this->helper->get('plugin')])) {
380 unset($transient->no_update[$this->helper->get('plugin')]);
381 }
382 }
383 }
384
385 return $transient;
386 }
387
388 // vc_gitem_template_attribute_e2pdf_download filter
389 public function filter_vc_gitem_template_attribute_e2pdf_download($value, $data) {
390
391 $post = isset($data['post']) ? $data['post'] : null;
392 $data = isset($data['data']) ? $data['data'] : '';
393
394 $atts = [];
395 parse_str($data, $atts);
396 if (!empty($post->ID)) {
397 $atts['dataset'] = $post->ID;
398 }
399 $atts = array_filter((array) $atts, 'strlen');
400 return (new Model_E2pdf_Shortcode())->e2pdf_download($atts);
401 }
402
403 // vc_gitem_template_attribute_e2pdf_view filter
404 public function filter_vc_gitem_template_attribute_e2pdf_view($value, $data) {
405
406 $post = isset($data['post']) ? $data['post'] : null;
407 $data = isset($data['data']) ? $data['data'] : '';
408
409 $atts = [];
410 parse_str($data, $atts);
411 if (!empty($post->ID)) {
412 $atts['dataset'] = $post->ID;
413 }
414 $atts = array_filter((array) $atts, 'strlen');
415 return (new Model_E2pdf_Shortcode())->e2pdf_view($atts);
416 }
417
418 // vc_grid_item_shortcodes filter
419 public function filter_vc_grid_item_shortcodes($shortcodes) {
420 if (class_exists('Vc_Grid_Item_Editor') && method_exists('Vc_Grid_Item_Editor', 'postType')) {
421 $shortcodes['e2pdf_vc_download_item'] = [
422 'name' => '[e2pdf-download]',
423 'base' => 'e2pdf-vc-download-item',
424 'icon' => 'vc_general vc_element-icon e2pdf_vc_element-icon',
425 'category' => esc_html__('Content', 'js_composer'),
426 'description' => esc_html__('Display E2Pdf PDF Download', 'e2pdf'),
427 'post_type' => Vc_Grid_Item_Editor::postType(),
428 'params' => $this->helper->load('vc')->params('e2pdf-download'),
429 ];
430 }
431 return $shortcodes;
432 }
433
434 // pre_do_shortcode_tag filter
435 public function filter_pre_do_shortcode_tag($output, $tag) {
436 if (in_array($tag, $this->helper->shortcodes(), true) && !$this->process_shortcodes()) {
437 return '[' . $tag . '::disabled]';
438 }
439 return $output;
440 }
441
442 // process shortcodes
443 public function process_shortcodes() {
444 $process_shortcodes = is_preview() && !current_user_can('publish_posts') ? false : true;
445 return apply_filters('e2pdf_process_shortcodes', $process_shortcodes);
446 }
447
448 // vc_before_init action
449 public function action_vc_before_init() {
450 if (function_exists('vc_map')) {
451 vc_map(
452 [
453 'name' => '[e2pdf-download]',
454 'description' => esc_html__('Display E2Pdf PDF Download', 'e2pdf'),
455 'base' => 'e2pdf-vc-download',
456 'class' => '',
457 'icon' => 'vc_general vc_element-icon e2pdf_vc_element-icon',
458 'category' => esc_html__('Content', 'js_composer'),
459 'params' => $this->helper->load('vc')->params('e2pdf-download'),
460 ]
461 );
462 vc_map(
463 [
464 'name' => '[e2pdf-view]',
465 'description' => esc_html__('Display E2Pdf PDF View', 'e2pdf'),
466 'base' => 'e2pdf-vc-view',
467 'class' => '',
468 'icon' => 'vc_general vc_element-icon e2pdf_vc_element-icon',
469 'category' => esc_html__('Content', 'js_composer'),
470 'params' => $this->helper->load('vc')->params('e2pdf-view'),
471 ]
472 );
473 }
474 }
475
476 // admin_menu action
477 public function action_admin_menu() {
478 ob_start();
479 $caps = $this->helper->get_caps();
480 if (current_user_can('manage_options')) {
481 foreach ($caps as $cap_key => $cap) {
482 $caps[$cap_key]['cap'] = 'manage_options';
483 }
484 }
485 add_menu_page('e2pdf', 'E2Pdf', $caps['e2pdf']['cap'], 'e2pdf', [Helper_E2pdf_View::instance(), 'render_page'], $this->get_icon(), '26');
486 add_submenu_page('e2pdf', __('Create PDF', 'e2pdf'), __('Create PDF', 'e2pdf'), $caps['e2pdf']['cap'], 'e2pdf', [Helper_E2pdf_View::instance(), 'render_page']);
487 add_submenu_page('e2pdf', __('Templates', 'e2pdf'), __('Templates', 'e2pdf'), $caps['e2pdf_templates']['cap'], 'e2pdf-templates', [Helper_E2pdf_View::instance(), 'render_page']);
488 add_submenu_page('e2pdf', __('Integrations', 'e2pdf'), __('Integrations', 'e2pdf'), $caps['e2pdf_settings']['cap'], 'e2pdf-integrations', [Helper_E2pdf_View::instance(), 'render_page']);
489 add_submenu_page('e2pdf', __('Settings', 'e2pdf'), __('Settings', 'e2pdf'), $caps['e2pdf_settings']['cap'], 'e2pdf-settings', [Helper_E2pdf_View::instance(), 'render_page']);
490 add_submenu_page('e2pdf', __('License', 'e2pdf'), __('License', 'e2pdf'), $caps['e2pdf_license']['cap'], 'e2pdf-license', [Helper_E2pdf_View::instance(), 'render_page']);
491 if (get_option('e2pdf_debug', '0') === '1') {
492 add_submenu_page('e2pdf', __('Debug', 'e2pdf'), __('Debug', 'e2pdf'), $caps['e2pdf_debug']['cap'], 'e2pdf-debug', [Helper_E2pdf_View::instance(), 'render_page']);
493 }
494 }
495
496 // icon
497 public function get_icon() {
498 $icon = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0idXVpZC00NjQyOGQyMi0wMzg2LTQ1ZmItODEyZC03YzViMTg0NDhlZDciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDU4MCA1MDIuNTMiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6ICNhN2FhYWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9kZWZzPgogIDxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTY4LjI5LDBjLTEyLjM1LDAtMjMuOTMsMy4zMS0zMy45LDkuMDctMTAuMjksNS45NS0xOC44NywxNC41NC0yNC44MiwyNC44M0MzLjgsNDMuODcuNDksNTUuNDUuNDksNjcuOHYyMzcuMzRjMCwxMi4zNSwzLjMsMjMuOTMsOS4wNywzMy45MSw1Ljk1LDEwLjI5LDE0LjU0LDE4Ljg3LDI0LjgzLDI0LjgyLDkuOTcsNS43OCwyMS41NSw5LjA3LDMzLjksOS4wN2gyNDQuMTNjLS45MS00LjMzLTEuMzgtOC44MS0xLjM4LTEzLjQsMC03LjYxLDEuMy0xNC45MywzLjcxLTIxLjczLDQuNjYtMTMuMTksMTMuNDQtMjQuNDMsMjQuNzktMzIuMTh2LTYxLjY0Yy0zLjY3LTMuODktNS45MS05LjEzLTUuOTEtMTQuODlzMi4yNC0xMSw1LjkxLTE0Ljg5VjBINjguMjlaTTkwLjMzLDc3Ljc4aDE1OS4zNmMxMC45LDAsMTkuNzUsOS43NCwxOS43NSwyMS43M3MtOC44NSwyMS43NC0xOS43NSwyMS43NEg5MC4zM2MtMTAuOTEsMC0xOS43NC05LjczLTE5Ljc0LTIxLjc0czguODMtMjEuNzMsMTkuNzQtMjEuNzNaTTI0OS42OSwyOTUuMTdIOTAuMzNjLTEwLjkxLDAtMTkuNzQtOS43My0xOS43NC0yMS43NHM4LjgzLTIxLjc0LDE5Ljc0LTIxLjc0aDE1OS4zNmMxMC45LDAsMTkuNzUsOS43NCwxOS43NSwyMS43NHMtOC44NSwyMS43NC0xOS43NSwyMS43NFpNMjQ5LjY5LDIwOC4yMUg5MC4zM2MtMTAuOTEsMC0xOS43NC05LjczLTE5Ljc0LTIxLjc0czguODMtMjEuNzQsMTkuNzQtMjEuNzRoMTU5LjM2YzEwLjksMCwxOS43NSw5Ljc0LDE5Ljc1LDIxLjc0cy04Ljg1LDIxLjc0LTE5Ljc1LDIxLjc0WiIvPgogIDxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTU3MC45MSwxNjMuNDljLTUuOTUtMTAuMjktMTQuNTMtMTguODctMjQuODMtMjQuODMtOS45Ni01Ljc2LTIxLjU0LTkuMDctMzMuODktOS4wN0gyNDAuOTR2MzUuMTRoOC43NWMxMC45LDAsMTkuNzUsOS43NCwxOS43NSwyMS43NHMtOC44NSwyMS43NC0xOS43NSwyMS43NGgtOC43NXY0My40OGg4Ljc1YzEwLjksMCwxOS43NSw5Ljc0LDE5Ljc1LDIxLjc0cy04Ljg1LDIxLjc0LTE5Ljc1LDIxLjc0aC04Ljc1djIwNy4zNmgyNzEuMjVjMTIuMzUsMCwyMy45My0zLjI5LDMzLjg5LTkuMDcsMTAuMy01Ljk1LDE4Ljg5LTE0LjUyLDI0Ljg0LTI0LjgyLDUuNzctOS45OCw5LjA3LTIxLjU2LDkuMDctMzMuOTF2LTIzNy4zNGMwLTEyLjM1LTMuMzEtMjMuOTMtOS4wOC0zMy45Wk00ODguMTYsNDI0Ljc2aC0xMTIuNzRjLTI4LjAzLS4zNS01MS44MS0xOC4zOS02MC42Ny00My40OC0uOTYtMi43LTEuNzQtNS40OS0yLjMzLTguMzQtLjkxLTQuMzMtMS4zOC04LjgxLTEuMzgtMTMuNCwwLTcuNjEsMS4zLTE0LjkzLDMuNzEtMjEuNzMsNC42Ni0xMy4xOSwxMy40NC0yNC40MywyNC43OS0zMi4xOCwxMC40Ni03LjEzLDIzLjEtMTEuMzEsMzYuNzMtMTEuMzFoNjUuMjJjMTIsMCwyMS43NC05LjczLDIxLjc0LTIxLjc0cy05Ljc0LTIxLjc0LTIxLjc0LTIxLjc0aC04Ni4xMmMtNi4yNSwwLTExLjg4LTIuNjMtMTUuODMtNi44NS0zLjY3LTMuODktNS45MS05LjEzLTUuOTEtMTQuODlzMi4yNC0xMSw1LjkxLTE0Ljg5YzMuOTYtNC4yMSw5LjU4LTYuODQsMTUuODMtNi44NGg4Ni45NmMyNi4zNy4zMiw0OC45NiwxNi4zMSw1OC45MywzOS4wOCwzLjUsOC4wMSw1LjQ1LDE2Ljg0LDUuNDUsMjYuMTMsMCwzNi4wMi0yOS4yLDY1LjIzLTY1LjIyLDY1LjIzaC02NS4yMmMtMTIuMDIsMC0yMS43NCw5LjcyLTIxLjc0LDIxLjczczkuNzIsMjEuNzQsMjEuNzQsMjEuNzRoMTExLjg5YzExLjk5LDAsMjEuNzMsOS43NCwyMS43MywyMS43NHMtOS43NCwyMS43NC0yMS43MywyMS43NFoiLz4KPC9zdmc+';
499 return $icon;
500 }
501
502 // settings page
503 public function action_admin_init() {
504 register_setting('e2pdf-settings', 'e2pdf_debug');
505
506 /**
507 * Compatibility fix with Gallery : FooGallery
508 * https://wordpress.org/plugins/foogallery/
509 */
510 if (class_exists('FooGallery_Admin_Extensions')) {
511 if (!wp_doing_ajax()) {
512 return;
513 }
514 $action = isset($_REQUEST['action']) && is_string($_REQUEST['action']) ? $_REQUEST['action'] : '';
515 if ('e2pdf_upload' !== $action) {
516 return;
517 }
518 global $wp_filter;
519 if (isset($wp_filter['admin_init']) && $wp_filter['admin_init'] instanceof WP_Hook) {
520 foreach ($wp_filter['admin_init']->callbacks as $priority => $callbacks) {
521 if (!is_array($callbacks)) {
522 continue;
523 }
524 foreach ($callbacks as $callback) {
525 if (
526 isset($callback['function']) &&
527 is_array($callback['function']) &&
528 isset($callback['function'][0], $callback['function'][1]) &&
529 $callback['function'][0] instanceof FooGallery_Admin_Extensions &&
530 'handle_extension_action' === $callback['function'][1]
531 ) {
532 remove_action('admin_init', $callback['function'], $priority);
533 }
534 }
535 }
536 }
537 }
538 }
539
540 // admin_enqueue_scripts action
541 public function action_admin_enqueue_scripts($page) {
542 $version = get_option('e2pdf_debug', '0') === '1' ? strtotime('now') : $this->helper->get('version');
543 wp_register_style('e2pdf.backend.global', plugins_url('css/e2pdf.backend.global.css', $this->helper->get('plugin_file_path')), [], $version);
544 wp_enqueue_style('e2pdf.backend.global');
545 if (!in_array($page, $this->e2pdf_admin_pages, false)) {
546 return;
547 }
548
549 if ($page == 'e2pdf_page_e2pdf-templates') {
550 wp_enqueue_script(
551 'js/e2pdf.purify', plugins_url('js/dompurify/purify.min.js', $this->helper->get('plugin_file_path')), ['jquery'], $version, false
552 );
553 wp_enqueue_script(
554 'js/e2pdf.backend', plugins_url('js/e2pdf.backend.js', $this->helper->get('plugin_file_path')), ['jquery', 'js/e2pdf.purify'], $version, false
555 );
556 } else {
557 wp_enqueue_script(
558 'js/e2pdf.backend', plugins_url('js/e2pdf.backend.js', $this->helper->get('plugin_file_path')), ['jquery'], $version, false
559 );
560 }
561 wp_localize_script('js/e2pdf.backend', 'e2pdf_lang', $this->get_js('lang'));
562 wp_localize_script('js/e2pdf.backend', 'e2pdf_params', $this->get_js('params'));
563 wp_register_style('e2pdf.backend', plugins_url('css/e2pdf.backend.css', $this->helper->get('plugin_file_path')), [], $version);
564 wp_enqueue_style('e2pdf.backend');
565 }
566
567 // wp_enqueue_scripts action
568 public function action_wp_enqueue_scripts() {
569 $version = get_option('e2pdf_debug', '0') === '1' ? strtotime('now') : $this->helper->get('version');
570 wp_enqueue_style('css/e2pdf.frontend.global', plugins_url('css/e2pdf.frontend.global.css', $this->helper->get('plugin_file_path')), [], $version, 'all');
571 wp_register_script(
572 'js/e2pdf.frontend', plugins_url('js/e2pdf.frontend.js', $this->helper->get('plugin_file_path')), ['jquery'], $version, false
573 );
574 wp_enqueue_script(
575 'js/e2pdf.frontend'
576 );
577 }
578
579 // get fontend javascript
580 public function get_js($type) {
581 $data = [];
582 switch ($type) {
583 case 'lang':
584 $data = [
585 'Page will be removed! Continue?' => __('Page will be removed! Continue?', 'e2pdf'),
586 'Font will be removed! Continue?' => __('Font will be removed! Continue?', 'e2pdf'),
587 'Changes will not be saved! Continue?' => __('Changes will not be saved! Continue?', 'e2pdf'),
588 'Saved Template will be overwritten! Continue?' => __('Saved Template will be overwritten! Continue?', 'e2pdf'),
589 'All pages will be removed! Continue?' => __('All pages will be removed! Continue?', 'e2pdf'),
590 'Adding new pages not available in "Uploaded PDF"' => __('Adding new pages not available in "Uploaded PDF"', 'e2pdf'),
591 'Dataset will be removed! Continue?' => __('Dataset will be removed! Continue?', 'e2pdf'),
592 'All datasets will be removed! Continue?' => __('All datasets will be removed! Continue?', 'e2pdf'),
593 'WARNING: Template has changes after last save! Changes will be lost! Continue?' => __('WARNING: Template has changes after last save! Changes will be lost! Continue?', 'e2pdf'),
594 'Element will be removed! Continue?' => __('Element will be removed! Continue?', 'e2pdf'),
595 'Elements will be removed! Continue?' => __('Elements will be removed! Continue?', 'e2pdf'),
596 'Action will be removed! Continue?' => __('Action will be removed! Continue?', 'e2pdf'),
597 'Condition will be removed! Continue?' => __('Condition will be removed! Continue?', 'e2pdf'),
598 'All Field Values will be overwritten! Continue?' => __('All Field Values will be overwritten! Continue?', 'e2pdf'),
599 'Website will be forced to use "FREE" License Key! Continue?' => __('Website will be forced to use "FREE" License Key! Continue?', 'e2pdf'),
600 'Not Available in Revision Edit Mode' => __('Not Available in Revision Edit Mode', 'e2pdf'),
601 'The WYSIWYG editor is disabled for this HTML object' => __('The WYSIWYG editor is disabled for this HTML object', 'e2pdf'),
602 'WYSIWYG can only be applied within HTML elements' => __('WYSIWYG can only be applied within HTML elements', 'e2pdf'),
603 'Only single-page PDFs are allowed with the "FREE" license type' => __('Only single-page PDFs are allowed with the "FREE" license type', 'e2pdf'),
604 'Last condition can\'t be removed' => __('Last condition can\'t be removed', 'e2pdf'),
605 'In Progress...' => __('In Progress...', 'e2pdf'),
606 'Delete' => __('Delete', 'e2pdf'),
607 'Properties' => __('Properties', 'e2pdf'),
608 'License Key' => __('License Key', 'e2pdf'),
609 'Empty PDF' => __('Empty PDF', 'e2pdf'),
610 'Upload PDF' => __('Upload PDF', 'e2pdf'),
611 'Auto PDF' => __('Auto PDF', 'e2pdf'),
612 'Create PDF' => __('Create PDF', 'e2pdf'),
613 'Extension' => __('Extension', 'e2pdf'),
614 'Size' => __('Size', 'e2pdf'),
615 'Properties' => __('Properties', 'e2pdf'),
616 'Enter link here' => __('Enter link here', 'e2pdf'),
617 'Border' => __('Border', 'e2pdf'),
618 'Background' => __('Background', 'e2pdf'),
619 'Left' => __('Left', 'e2pdf'),
620 'Right' => __('Right', 'e2pdf'),
621 'Top' => __('Top', 'e2pdf'),
622 'Center' => __('Center', 'e2pdf'),
623 'Bottom' => __('Bottom', 'e2pdf'),
624 'Justify' => __('Justify', 'e2pdf'),
625 'Border Color' => __('Border Color', 'e2pdf'),
626 'Border Radius' => __('Border Radius', 'e2pdf'),
627 'Line Height' => __('Line Height', 'e2pdf'),
628 'Width' => __('Width', 'e2pdf'),
629 'Height' => __('Height', 'e2pdf'),
630 'Value' => __('Value', 'e2pdf'),
631 'Font' => __('Font', 'e2pdf'),
632 'Option' => __('Option', 'e2pdf'),
633 'Group' => __('Group', 'e2pdf'),
634 'Type' => __('Type', 'e2pdf'),
635 'Scale' => __('Scale', 'e2pdf'),
636 'Width&Height' => __('Width&Height', 'e2pdf'),
637 'Choose Image' => __('Choose Image', 'e2pdf'),
638 'Options' => __('Options', 'e2pdf'),
639 'PDF Upload' => __('PDF Upload', 'e2pdf'),
640 'Global Actions' => __('Global Actions', 'e2pdf'),
641 'Global Properties' => __('Global Properties', 'e2pdf'),
642 'Connection' => __('Connection', 'e2pdf'),
643 'Map Field' => __('Map Field', 'e2pdf'),
644 'Insert Mapped' => __('Insert Mapped', 'e2pdf'),
645 'Resize' => __('Resize', 'e2pdf'),
646 'Copy' => __('Copy', 'e2pdf'),
647 'Cut' => __('Cut', 'e2pdf'),
648 'Paste' => __('Paste', 'e2pdf'),
649 'Paste in Place' => __('Paste in Place', 'e2pdf'),
650 'Apply' => __('Apply', 'e2pdf'),
651 'Dynamic Height' => __('Dynamic Height', 'e2pdf'),
652 'Multipage' => __('Multipage', 'e2pdf'),
653 'Text Align' => __('Text Align', 'e2pdf'),
654 'Read-Only' => __('Read-Only', 'e2pdf'),
655 'Multiline' => __('Multiline', 'e2pdf'),
656 'Required' => __('Required', 'e2pdf'),
657 'Page Options' => __('Page Options', 'e2pdf'),
658 'Direction' => __('Direction', 'e2pdf'),
659 'Hide' => __('Hide', 'e2pdf'),
660 'Unhide' => __('Unhide', 'e2pdf'),
661 'Password' => __('Password', 'e2pdf'),
662 'Visual Mapper' => __('Visual Mapper', 'e2pdf'),
663 'Parent' => __('Parent', 'e2pdf'),
664 '--- Select ---' => __('--- Select ---', 'e2pdf'),
665 'Activated' => __('Activated', 'e2pdf'),
666 'Not Activated' => __('Not Activated', 'e2pdf'),
667 'Page ID' => __('Page ID', 'e2pdf'),
668 'Page ID inside Upload PDF' => __('Page ID inside Upload PDF', 'e2pdf'),
669 'Render Fields from Upload PDF' => __('Render Fields from Upload PDF', 'e2pdf'),
670 'Delete created E2Pdf Fields' => __('Delete created E2Pdf Fields', 'e2pdf'),
671 'Keep Image Ratio' => __('Keep Image Ratio', 'e2pdf'),
672 'Keep Lower Size' => __('Keep Lower Size', 'e2pdf'),
673 'Lock Aspect Ratio' => __('Lock Aspect Ratio', 'e2pdf'),
674 'Fill Image' => __('Fill Image', 'e2pdf'),
675 'Page' => __('Page', 'e2pdf'),
676 'Resolution' => __('Resolution', 'e2pdf'),
677 'Disable Text to Image' => __('Disable Text to Image', 'e2pdf'),
678 'Confirmation Code' => __('Confirmation Code', 'e2pdf'),
679 'Code' => __('Code', 'e2pdf'),
680 'Visual Mapper' => __('Visual Mapper', 'e2pdf'),
681 'Auto' => __('Auto', 'e2pdf'),
682 'Actions' => __('Actions', 'e2pdf'),
683 'Save' => __('Save', 'e2pdf'),
684 'Horizontal Align' => __('Horizontal Align', 'e2pdf'),
685 'Vertical Align' => __('Vertical Align', 'e2pdf'),
686 'Middle' => __('Middle', 'e2pdf'),
687 'Apply If' => __('Apply If', 'e2pdf'),
688 'Action' => __('Action', 'e2pdf'),
689 'Property' => __('Property', 'e2pdf'),
690 'If' => __('If', 'e2pdf'),
691 'Condition' => __('Condition', 'e2pdf'),
692 'Any' => __('Any', 'e2pdf'),
693 'All' => __('All', 'e2pdf'),
694 'Sort' => __('Sort', 'e2pdf'),
695 'E-Signature' => __('E-Signature', 'e2pdf'),
696 'Contact' => __('Contact', 'e2pdf'),
697 'Location' => __('Location', 'e2pdf'),
698 'Reason' => __('Reason', 'e2pdf'),
699 'Placeholder' => __('Placeholder', 'e2pdf'),
700 'Length' => __('Length', 'e2pdf'),
701 'Comb' => __('Comb', 'e2pdf'),
702 'None' => __('None', 'e2pdf'),
703 'Highlight' => __('Highlight', 'e2pdf'),
704 'Invert' => __('Invert', 'e2pdf'),
705 'Outline' => __('Outline', 'e2pdf'),
706 'Push' => __('Push', 'e2pdf'),
707 'Title' => __('Title', 'e2pdf'),
708 'Status' => __('Status', 'e2pdf'),
709 'Add Action' => __('Add Action', 'e2pdf'),
710 'Shortcodes' => __('Shortcodes', 'e2pdf'),
711 'Labels' => __('Labels', 'e2pdf'),
712 'Field Values' => __('Field Values', 'e2pdf'),
713 'Field Names' => __('Field Names', 'e2pdf'),
714 'Field Name' => __('Field Name', 'e2pdf'),
715 'As Field Name' => __('As Field Name', 'e2pdf'),
716 'Confirm' => __('Confirm', 'e2pdf'),
717 'Cancel' => __('Cancel', 'e2pdf'),
718 'Hide (If Empty)' => __('Hide (If Empty)', 'e2pdf'),
719 'Hide Page (If Empty)' => __('Hide Page (If Empty)', 'e2pdf'),
720 'Replace Value' => __('Replace Value', 'e2pdf'),
721 'Auto-Close' => __('Auto-Close', 'e2pdf'),
722 'New Lines to BR' => __('New Lines to BR', 'e2pdf'),
723 'Disable WYSIWYG Editor' => __('Disable WYSIWYG Editor', 'e2pdf'),
724 'CSS Priority' => __('CSS Priority', 'e2pdf'),
725 'CSS Style' => __('CSS Style', 'e2pdf'),
726 'Enabling WYSIWYG can affect "HTML" Source' => __('Enabling WYSIWYG can affect "HTML" Source', 'e2pdf'),
727 'Hidden Fields' => __('Hidden Fields', 'e2pdf'),
728 'Error Message' => __('Error Message', 'e2pdf'),
729 'Redirect URL' => __('Redirect URL', 'e2pdf'),
730 'Element' => __('Element', 'e2pdf'),
731 'Elements' => __('Elements', 'e2pdf'),
732 'Position Top' => __('Position Top', 'e2pdf'),
733 'Position Left' => __('Position Left', 'e2pdf'),
734 'Padding Top' => __('Padding Top', 'e2pdf'),
735 'Padding Bottom' => __('Padding Bottom', 'e2pdf'),
736 'Padding Left' => __('Padding Left', 'e2pdf'),
737 'Padding Right' => __('Padding Right', 'e2pdf'),
738 'Margin Top' => __('Margin Top', 'e2pdf'),
739 'Margin Bottom' => __('Margin Bottom', 'e2pdf'),
740 'Margin Left' => __('Margin Left', 'e2pdf'),
741 'Margin Right' => __('Margin Right', 'e2pdf'),
742 'Border Color' => __('Border Color', 'e2pdf'),
743 'Border Top' => __('Border Top', 'e2pdf'),
744 'Border Bottom' => __('Border Bottom', 'e2pdf'),
745 'Border Left' => __('Border Left', 'e2pdf'),
746 'Border Right' => __('Border Right', 'e2pdf'),
747 'Field' => __('Field', 'e2pdf'),
748 'Style' => __('Style', 'e2pdf'),
749 'Lock / Hide' => __('Lock / Hide', 'e2pdf'),
750 'Font Color' => __('Font Color', 'e2pdf'),
751 'Font Size' => __('Font Size', 'e2pdf'),
752 'Text Align' => __('Text Align', 'e2pdf'),
753 'Rotation' => __('Rotation', 'e2pdf'),
754 'Preg Replace Pattern' => __('Preg Replace Pattern', 'e2pdf'),
755 'Preg Replace Replacement' => __('Preg Replace Replacement', 'e2pdf'),
756 'Preg Match All Pattern' => __('Preg Match All Pattern', 'e2pdf'),
757 'Preg Match All Output' => __('Preg Match All Output', 'e2pdf'),
758 'Preg Filters' => __('Preg Filters', 'e2pdf'),
759 'Char Spacing' => __('Char Spacing', 'e2pdf'),
760 'Color' => __('Color', 'e2pdf'),
761 'QR Code' => __('QR Code', 'e2pdf'),
762 'Barcode' => __('Barcode', 'e2pdf'),
763 'Format' => __('Format', 'e2pdf'),
764 'Precision' => __('Precision', 'e2pdf'),
765 'L - Smallest' => __('L - Smallest', 'e2pdf'),
766 'M - Medium' => __('M - Medium', 'e2pdf'),
767 'Q - High' => __('Q - High', 'e2pdf'),
768 'H - Best' => __('H - Best', 'e2pdf'),
769 'All Templates for this Website will be deactivated! Continue?' => __('All Templates for this Website will be deactivated! Continue?', 'e2pdf'),
770 'Pre-uploaded PDF will be removed from E2Pdf Template! Continue?' => __('Pre-uploaded PDF will be removed from E2Pdf Template! Continue?', 'e2pdf'),
771 'Quiet Zone Size' => __('Quiet Zone Size', 'e2pdf'),
772 'Hide Label' => __('Hide Label', 'e2pdf'),
773 'Lock' => __('Lock', 'e2pdf'),
774 'Unlock' => __('Unlock', 'e2pdf'),
775 'Opacity' => __('Opacity', 'e2pdf'),
776 'Auto Font Size' => __('Auto Font Size', 'e2pdf'),
777 'Max Upload File Size' => __('Max Upload File Size', 'e2pdf'),
778 'The bulk export task will be removed! Continue?' => __('The bulk export task will be removed! Continue?', 'e2pdf'),
779 'The bulk export task will be stopped! Continue?' => __('The bulk export task will be stopped! Continue?', 'e2pdf'),
780 'The bulk export task will be started! Continue?' => __('The bulk export task will be started! Continue?', 'e2pdf'),
781 'Search...' => __('Search...', 'e2pdf'),
782 'Show Element' => __('Show Element', 'e2pdf'),
783 'Hide Element' => __('Hide Element', 'e2pdf'),
784 'Show Page' => __('Show Page', 'e2pdf'),
785 'Hide Page' => __('Hide Page', 'e2pdf'),
786 'Change to' => __('Change to', 'e2pdf'),
787 'Merge' => __('Merge', 'e2pdf'),
788 'Change Property' => __('Change Property', 'e2pdf'),
789 'Format' => __('Format', 'e2pdf'),
790 'Insert Before' => __('Insert Before', 'e2pdf'),
791 'Insert After' => __('Insert After', 'e2pdf'),
792 'Full Replacement' => __('Full Replacement', 'e2pdf'),
793 'Search / Replace' => __('Search / Replace', 'e2pdf'),
794 'Contains' => __('Contains', 'e2pdf'),
795 'Not Contains' => __('Not Contains', 'e2pdf'),
796 'In Array' => __('In Array', 'e2pdf'),
797 'Array Key Exists' => __('Array Key Exists', 'e2pdf'),
798 'Else' => __('Else', 'e2pdf'),
799 'Append' => __('Append', 'e2pdf'),
800 'Vertical' => __('Vertical', 'e2pdf'),
801 'Horizontal' => __('Horizontal', 'e2pdf'),
802 'Palette' => __('Palette', 'e2pdf'),
803 'Line / Stroke Color' => __('Line / Stroke Color', 'e2pdf'),
804 'Graph' => __('Graph', 'e2pdf'),
805 'Markers' => __('Markers', 'e2pdf'),
806 'Grid' => __('Grid', 'e2pdf'),
807 'Axis' => __('Axis', 'e2pdf'),
808 'Legend' => __('Legend', 'e2pdf'),
809 'Structure' => __('Structure', 'e2pdf'),
810 'Space' => __('Space', 'e2pdf'),
811 'Position' => __('Position', 'e2pdf'),
812 'Vertical Label' => __('Vertical Label', 'e2pdf'),
813 'Horizontal Label' => __('Horizontal Label', 'e2pdf'),
814 'Label' => __('Label', 'e2pdf'),
815 'Axis Overlap' => __('Axis Overlap', 'e2pdf'),
816 'Grid Spacing' => __('Grid Spacing', 'e2pdf'),
817 'Grid Spacing (V)' => __('Grid Spacing (V)', 'e2pdf'),
818 'Grid Spacing (H)' => __('Grid Spacing (H)', 'e2pdf'),
819 'Grid Division (V)' => __('Grid Division (V)', 'e2pdf'),
820 'Grid Division (H)' => __('Grid Division (H)', 'e2pdf'),
821 'Axis Color' => __('Axis Color', 'e2pdf'),
822 'Grid Color' => __('Grid Color', 'e2pdf'),
823 'Bar Label Color' => __('Bar Label Color', 'e2pdf'),
824 'Position (V)' => __('Position (V)', 'e2pdf'),
825 'Position (H)' => __('Position (H)', 'e2pdf'),
826 'Bar Labels' => __('Bar Labels', 'e2pdf'),
827 'Marker' => __('Marker', 'e2pdf'),
828 'Grid Subdivision Color' => __('Grid Subdivision Color', 'e2pdf'),
829 'Sub Divisions' => __('Sub Divisions', 'e2pdf'),
830 'Axis (V)' => __('Axis (V)', 'e2pdf'),
831 'Axis (H)' => __('Axis (H)', 'e2pdf'),
832 'Text' => __('Text', 'e2pdf'),
833 'Enable' => __('Enable', 'e2pdf'),
834 'Min' => __('Min', 'e2pdf'),
835 'Max' => __('Max', 'e2pdf'),
836 'Fill Under' => __('Fill Under', 'e2pdf'),
837 'Reverse' => __('Reverse', 'e2pdf'),
838 'Sort' => __('Sort', 'e2pdf'),
839 'Percentage' => __('Percentage', 'e2pdf'),
840 'Legend Text Side' => __('Legend Text Side', 'e2pdf'),
841 'Columns' => __('Columns', 'e2pdf'),
842 'Padding (X)' => __('Padding (X)', 'e2pdf'),
843 'Padding (Y)' => __('Padding (Y)', 'e2pdf'),
844 'Stroke Color' => __('Stroke Color', 'e2pdf'),
845 'Stroke Width' => __('Stroke Width', 'e2pdf'),
846 'Bubble Scale' => __('Bubble Scale', 'e2pdf'),
847 'Units' => __('Units', 'e2pdf'),
848 'Increment' => __('Increment', 'e2pdf'),
849 'Stack Group' => __('Stack Group', 'e2pdf'),
850 'Line Dataset' => __('Line Dataset', 'e2pdf'),
851 'Project Angle' => __('Project Angle', 'e2pdf'),
852 'Legends' => __('Legends', 'e2pdf'),
853 'Colors' => __('Colors', 'e2pdf'),
854 'Line Curve' => __('Line Curve', 'e2pdf'),
855 'Margin (H)' => __('Margin (H)', 'e2pdf'),
856 'Margin (V)' => __('Margin (V)', 'e2pdf'),
857 'Units Label' => __('Units Label', 'e2pdf'),
858 'Dynamic Line / Stroke Color' => __('Dynamic Line / Stroke Color', 'e2pdf'),
859 'Dynamic Marker Color' => __('Dynamic Marker Color', 'e2pdf'),
860 'Inner' => __('Inner', 'e2pdf'),
861 'Outer' => __('Outer', 'e2pdf'),
862 'Align' => __('Align', 'e2pdf'),
863 'Offset (X)' => __('Offset (X)', 'e2pdf'),
864 'Offset (Y)' => __('Offset (Y)', 'e2pdf'),
865 'Link URL' => __('Link URL', 'e2pdf'),
866 'Link Type' => __('Link Type', 'e2pdf'),
867 'Link Label' => __('Link Label', 'e2pdf'),
868 'Url' => __('Url', 'e2pdf'),
869 'Attachment' => __('Attachment', 'e2pdf'),
870 'Image' => __('Image', 'e2pdf'),
871 'Media Library' => __('Media Library', 'e2pdf'),
872 'Underline' => __('Underline', 'e2pdf'),
873 'Page Number' => __('Page Number', 'e2pdf'),
874 'Adjust Page Number' => __('Adjust Page Number', 'e2pdf'),
875 'Adjust Page Total' => __('Adjust Page Total', 'e2pdf'),
876 'Preload Images' => __('Preload Images', 'e2pdf'),
877 'Hooks' => __('Hooks', 'e2pdf'),
878 'Display PDF download at' => __('Display PDF download at', 'e2pdf'),
879 'Optimization' => __('Optimization', 'e2pdf'),
880 'Inherit' => __('Inherit', 'e2pdf'),
881 'Not Optimized' => __('Not Optimized', 'e2pdf'),
882 'Low Quality' => __('Low Quality', 'e2pdf'),
883 'Basic Quality' => __('Basic Quality', 'e2pdf'),
884 'Good Quality' => __('Good Quality', 'e2pdf'),
885 'Best Quality' => __('Best Quality', 'e2pdf'),
886 'Ultra Quality' => __('Ultra Quality', 'e2pdf'),
887 'Error: Empty "if" and "value" detected in action condition' => __('Error: Empty "if" and "value" detected in action condition', 'e2pdf'),
888 'No Read-Only' => __('No Read-Only', 'e2pdf'),
889 'No Border' => __('No Border', 'e2pdf'),
890 'Quick Props' => __('Quick Props', 'e2pdf'),
891 'The Template ID used in the backup will be overwritten. Continue?' => __('The Template ID used in the backup will be overwritten. Continue?', 'e2pdf'),
892 /* translators: %d: Template ID */
893 'This will overwrite the Template ID "%d". Continue?' => __('This will overwrite the Template ID "%d". Continue?', 'e2pdf'),
894 'Filter' => __('Filter...', 'e2pdf'),
895 'Not linked' => __('Not linked', 'e2pdf'),
896 'Inner Radius' => __('Inner Radius', 'e2pdf'),
897 'Start Angle' => __('Start Angle', 'e2pdf'),
898 'Key Labels' => __('Key Labels', 'e2pdf'),
899 'Amount Labels' => __('Amount Labels', 'e2pdf'),
900 'Percent Labels' => __('Percent Labels', 'e2pdf'),
901 ];
902 break;
903 case 'params':
904 $nonces = [];
905 $caps = $this->helper->get_caps();
906 foreach ($caps as $cap) {
907 $nonces[$cap['cap']] = current_user_can('manage_options') || current_user_can($cap['cap']) ? wp_create_nonce($cap['cap']) : '';
908 }
909 $controller_e2pdf_templates = new Controller_E2pdf_Templates();
910 $model_e2pdf_extension = new Model_E2pdf_Extension();
911 $data = [
912 'nonce' => $nonces,
913 'plugins_url' => plugins_url('', $this->helper->get('plugin_file_path')),
914 'upload_url' => $this->helper->get_upload_url(),
915 'license_type' => $this->helper->get('license')->get('type'),
916 'upload_max_filesize' => $this->helper->load('files')->get_upload_max_filesize(),
917 'extensions' => $model_e2pdf_extension->extensions(),
918 'template_sizes' => $controller_e2pdf_templates->get_sizes_list(),
919 'css_styles' => array_keys($this->helper->load('properties')->css_styles()),
920 'undo_limit' => get_option('e2pdf_undo_limit', '20'),
921 'extension_hooks' => apply_filters('e2pdf_extension_hooks', []),
922 ];
923 break;
924 default:
925 break;
926 }
927 return $data;
928 }
929
930 // requirenments
931 public function requirenments() {
932 if (version_compare(PHP_VERSION, '5.4', '<')) {
933 throw new Exception(
934 /* translators: %s: PHP Version */
935 sprintf(__('E2Pdf requires PHP version 5.4 or later. Your PHP version is %s', 'e2pdf'), PHP_VERSION)
936 );
937 }
938
939 if (!function_exists('curl_version')) {
940 throw new Exception(
941 /* translators: %s: PHP Extension */
942 sprintf(__('The PHP %s extension is required', 'e2pdf'), 'CURL')
943 );
944 }
945 }
946
947 // current_screen action
948 public function action_current_screen() {
949 $current_screen = get_current_screen();
950 if (!$current_screen || !in_array($current_screen->id, $this->e2pdf_admin_pages, false)) {
951 return;
952 }
953
954 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
955 if ($current_screen->id == 'toplevel_page_e2pdf' || ($current_screen->id == 'e2pdf_page_e2pdf-templates' && isset($_GET['action']) && $_GET['action'] == 'edit')) {
956 add_filter('admin_body_class', [&$this, 'filter_admin_body_loading_class']);
957 }
958
959 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
960 if ($current_screen->id == 'e2pdf_page_e2pdf-templates' && !isset($_GET['action'])) {
961 $screen_option = [
962 'label' => __('Templates per page', 'e2pdf') . ':',
963 'default' => (int) get_option('e2pdf_templates_screen_per_page', '20'),
964 'option' => 'e2pdf_templates_screen_per_page',
965 ];
966 add_screen_option('per_page', $screen_option);
967 }
968 $this->helper->load('license')->load();
969 }
970
971 // wp_loaded action
972 public function action_wp_loaded() {
973 if (get_option('e2pdf_adobesign_refresh_token') && !get_transient('e2pdf_adobesign_refresh_token')) {
974 new Model_E2pdf_AdobeSign();
975 }
976 }
977
978 // activate website wrapper
979 public function activate($network = false) {
980 global $wpdb;
981
982 try {
983 $this->requirenments();
984 if (is_multisite() && $network) {
985 foreach ($wpdb->get_col('SELECT blog_id FROM `' . $wpdb->blogs . '`') as $blog_id) {
986 $this->activate_site($blog_id);
987 }
988 } else {
989 $this->activate_site();
990 }
991 } catch (Exception $ex) {
992 echo '<div style="line-height: 70px;">';
993 echo $ex->getMessage();
994 echo '</div>';
995 exit();
996 }
997 }
998
999 // deactivate website wrapper
1000 public function deactivate($network = false) {
1001 global $wpdb;
1002 if (is_multisite() && $network) {
1003 foreach ($wpdb->get_col('SELECT blog_id FROM `' . $wpdb->blogs . '`') as $blog_id) {
1004 $this->activate_site($blog_id);
1005 }
1006 } else {
1007 $this->deactivate_site();
1008 }
1009 }
1010
1011 // wpmu_new_blog action
1012 public function action_wpmu_new_blog($blog_id) {
1013 if (is_plugin_active_for_network('e2pdf/e2pdf.php')) {
1014 $this->activate_site($blog_id);
1015 }
1016 }
1017
1018 // activate site
1019 public function activate_site($blog_id = false) {
1020 global $wpdb;
1021
1022 $db_prefix = $wpdb->prefix;
1023
1024 if ($blog_id) {
1025 switch_to_blog($blog_id);
1026 $db_prefix = $wpdb->get_blog_prefix($blog_id);
1027 if (!is_main_site($blog_id)) {
1028 $this->helper->set('upload_dir', $this->helper->get_wp_upload_dir('basedir') . '/e2pdf/');
1029 $this->helper->set('tmp_dir', $this->helper->get('upload_dir') . 'tmp/');
1030 $this->helper->set('cache_dir', $this->helper->get('upload_dir') . 'tmp/cache/');
1031 $this->helper->set('pdf_dir', $this->helper->get('upload_dir') . 'pdf/');
1032 $this->helper->set('fonts_dir', $this->helper->get('upload_dir') . 'fonts/');
1033 $this->helper->set('tpl_dir', $this->helper->get('upload_dir') . 'tpl/');
1034 $this->helper->set('viewer_dir', $this->helper->get('upload_dir') . 'viewer/');
1035 $this->helper->set('bulk_dir', $this->helper->get('upload_dir') . 'bulks/');
1036 $this->helper->set('wpcf7_dir', $this->helper->get('upload_dir') . 'wpcf7/');
1037 }
1038 }
1039
1040 $dirs = [
1041 $this->helper->get('upload_dir'),
1042 $this->helper->get('tmp_dir'),
1043 $this->helper->get('cache_dir'),
1044 $this->helper->get('pdf_dir'),
1045 $this->helper->get('fonts_dir'),
1046 $this->helper->get('tpl_dir'),
1047 $this->helper->get('viewer_dir'),
1048 $this->helper->get('bulk_dir'),
1049 $this->helper->get('wpcf7_dir'),
1050 ];
1051
1052 if (!is_main_site($blog_id)) {
1053 array_unshift($dirs, $this->helper->get_wp_upload_dir('basedir'));
1054 }
1055
1056 foreach ($dirs as $dir) {
1057 if ($this->helper->create_dir($dir)) {
1058 if ($dir == $this->helper->get('fonts_dir')) {
1059 if (!file_exists($this->helper->get('fonts_dir') . 'NotoSans-Regular.ttf') || version_compare(get_option('e2pdf_version'), '1.10.05', '<')) {
1060 copy($this->helper->get('plugin_dir') . 'data/fonts/NotoSans-Regular.ttf', $this->helper->get('fonts_dir') . 'NotoSans-Regular.ttf');
1061 }
1062 } elseif ($dir == $this->helper->get('viewer_dir')) {
1063 if (!file_exists($this->helper->get('viewer_dir') . 'style.css')) {
1064 $this->helper->create_file($this->helper->get('viewer_dir') . 'style.css');
1065 }
1066 } elseif ($dir == $this->helper->get('bulk_dir') || $dir == $this->helper->get('cache_dir') || $dir == $this->helper->get('tmp_dir')) {
1067 $htaccess = $dir . '.htaccess';
1068 if (!file_exists($htaccess)) {
1069 $this->helper->create_file($htaccess, 'DENY FROM ALL');
1070 }
1071 }
1072 } else {
1073 throw new Exception(
1074 /* translators: %s: directory */
1075 sprintf(__("Can't create folder %s", 'e2pdf'), $dir)
1076 );
1077 }
1078 }
1079
1080 $this->helper->load('db')->db_init($db_prefix);
1081
1082 if (get_option('e2pdf_version') === false) {
1083 update_option('e2pdf_download_loader', '1');
1084 update_option('e2pdf_api_protocol', '1');
1085 }
1086
1087 if (class_exists('TRP_Translate_Press')) {
1088 if (get_option('e2pdf_pdf_translation') === false && get_option('e2pdf_translatepress_translation') !== false) {
1089 update_option('e2pdf_pdf_translation', get_option('e2pdf_translatepress_translation'));
1090 }
1091 }
1092
1093 if (get_option('e2pdf_pdf_translation_check') === false) {
1094 if (get_option('e2pdf_pdf_translation') === false && get_option('e2pdf_version') !== false && function_exists('icl_register_string')) {
1095 update_option('e2pdf_pdf_translation', '0');
1096 }
1097 update_option('e2pdf_pdf_translation_check', '1');
1098 }
1099
1100 if (get_option('e2pdf_version') !== $this->helper->get('version')) {
1101 update_option('e2pdf_version', $this->helper->get('version'));
1102 }
1103
1104 if (get_option('e2pdf_nonce_key') === false) {
1105 if (function_exists('wp_generate_password')) {
1106 update_option('e2pdf_nonce_key', wp_generate_password('64'));
1107 }
1108 }
1109
1110 if (get_option('e2pdf_wc_invoice_template_id') !== false) {
1111 update_option('e2pdf_wc_my_orders_actions_template_id', get_option('e2pdf_wc_invoice_template_id'));
1112 }
1113 if (get_option('e2pdf_wc_invoice_statuses') !== false) {
1114 update_option('e2pdf_wc_my_orders_actions_template_id_status', get_option('e2pdf_wc_invoice_statuses'));
1115 }
1116 if (get_option('e2pdf_wc_checkout_template_id_order') !== false) {
1117 update_option('e2pdf_wc_checkout_template_id_priority', get_option('e2pdf_wc_checkout_template_id_order'));
1118 }
1119 if (get_option('e2pdf_wc_cart_template_id_order') !== false) {
1120 update_option('e2pdf_wc_cart_template_id_priority', get_option('e2pdf_wc_cart_template_id_order'));
1121 }
1122 if (get_option('e2pdf_version') && version_compare(get_option('e2pdf_version'), '1.16.14', '<') && get_option('e2pdf_wc_cart_template_id') && get_option('e2pdf_wc_cart_template_id_priority') === false) {
1123 update_option('e2pdf_wc_cart_template_id_priority', '99');
1124 }
1125
1126 if (get_option('e2pdf_zapier_api_key') === false) {
1127 if (function_exists('wp_generate_password')) {
1128 update_option('e2pdf_zapier_api_key', strtoupper(wordwrap(wp_generate_password('24', false), 4, '-', true)));
1129 }
1130 }
1131
1132 if (get_option('e2pdf_adobe_api_key') === false) {
1133 if (function_exists('wp_generate_password')) {
1134 update_option('e2pdf_adobe_api_key', strtoupper(wordwrap(wp_generate_password('24', false), 4, '-', true)));
1135 }
1136 }
1137
1138 if (get_option('e2pdf_gdrive_api_key') === false) {
1139 if (function_exists('wp_generate_password')) {
1140 update_option('e2pdf_gdrive_api_key', strtoupper(wordwrap(wp_generate_password('24', false), 4, '-', true)));
1141 }
1142 }
1143
1144 if (get_option('e2pdf_adobe_api_version') === false) {
1145 if (get_option('e2pdf_adobesign_client_id', '') && get_option('e2pdf_adobesign_client_secret', '')) {
1146 update_option('e2pdf_adobe_api_version', '0');
1147 } else {
1148 update_option('e2pdf_adobe_api_version', '1');
1149 }
1150 }
1151
1152 if ((int) get_option('e2pdf_templates_screen_per_page', '20') <= 0) {
1153 update_option('e2pdf_templates_screen_per_page', '20');
1154 }
1155
1156 delete_option('e2pdf_developer');
1157 delete_option('e2pdf_developer_ips');
1158 delete_option('e2pdf_translatepress_translation');
1159 delete_option('e2pdf_wc_invoice_template_id');
1160 delete_option('e2pdf_wc_invoice_statuses');
1161 delete_option('e2pdf_wc_checkout_template_id_order');
1162 delete_option('e2pdf_wc_cart_template_id_order');
1163 delete_option('e2pdf_hash_timeout');
1164
1165 $license = $this->helper->load('license');
1166 if ($license && method_exists($license, 'activate')) {
1167 $license->activate();
1168 }
1169
1170 wp_clear_scheduled_hook('e2pdf_cronjob');
1171 if (!wp_next_scheduled('e2pdf_cache_tmp_cron')) {
1172 wp_schedule_event(time(), 'daily', 'e2pdf_cache_tmp_cron');
1173 }
1174
1175 if ($blog_id) {
1176 restore_current_blog();
1177 $this->helper->set('upload_dir', $this->helper->get_wp_upload_dir('basedir') . '/e2pdf/');
1178 $this->helper->set('tmp_dir', $this->helper->get('upload_dir') . 'tmp/');
1179 $this->helper->set('cache_dir', $this->helper->get('upload_dir') . 'tmp/cache/');
1180 $this->helper->set('pdf_dir', $this->helper->get('upload_dir') . 'pdf/');
1181 $this->helper->set('fonts_dir', $this->helper->get('upload_dir') . 'fonts/');
1182 $this->helper->set('tpl_dir', $this->helper->get('upload_dir') . 'tpl/');
1183 $this->helper->set('viewer_dir', $this->helper->get('upload_dir') . 'viewer/');
1184 $this->helper->set('bulk_dir', $this->helper->get('upload_dir') . 'bulks/');
1185 $this->helper->set('wpcf7_dir', $this->helper->get('upload_dir') . 'wpcf7/');
1186 }
1187 }
1188
1189 // deactivate site
1190 public function deactivate_site($blog_id = false) {
1191 if ($blog_id) {
1192 switch_to_blog($blog_id);
1193 }
1194 wp_clear_scheduled_hook('e2pdf_bulk_export_cron');
1195 wp_clear_scheduled_hook('e2pdf_cache_pdfs_cron');
1196 wp_clear_scheduled_hook('e2pdf_cache_tmp_cron');
1197 if ($blog_id) {
1198 restore_current_blog();
1199 }
1200 }
1201
1202 // uninstall
1203 public static function uninstall() {
1204 global $wpdb;
1205
1206 if (is_multisite()) {
1207 foreach ($wpdb->get_col('SELECT blog_id FROM `' . $wpdb->blogs . '`') as $blog_id) {
1208 self::uninstall_site($blog_id);
1209 }
1210 } else {
1211 self::uninstall_site();
1212 }
1213 }
1214
1215 // uninstall site
1216 public static function uninstall_site($blog_id = false) {
1217 global $wpdb;
1218
1219 $db_prefix = $wpdb->prefix;
1220 $helper = Helper_E2pdf_Helper::instance();
1221
1222 if ($blog_id) {
1223 switch_to_blog($blog_id);
1224 $db_prefix = $wpdb->get_blog_prefix($blog_id);
1225 if (!is_main_site($blog_id)) {
1226 $helper->set('upload_dir', $helper->get_wp_upload_dir('basedir') . '/e2pdf/');
1227 }
1228 }
1229
1230 wp_clear_scheduled_hook('e2pdf_bulk_export_cron');
1231 wp_clear_scheduled_hook('e2pdf_cache_pdfs_cron');
1232 wp_clear_scheduled_hook('e2pdf_cache_tmp_cron');
1233
1234 $model_e2pdf_api = new Model_E2pdf_Api();
1235 $model_e2pdf_api->set(
1236 [
1237 'action' => 'common/uninstall',
1238 ]
1239 );
1240 $model_e2pdf_api->request();
1241
1242 $options = Model_E2pdf_Options::get_options();
1243 foreach ($options as $option_key => $option_value) {
1244 delete_option($option_key);
1245 }
1246 delete_option('e2pdf_adobe_api_key');
1247 delete_option('e2pdf_adobe_api_version');
1248 delete_option('e2pdf_cache_tmp_ttl');
1249 delete_option('e2pdf_pdf_translation_check');
1250
1251 // phpcs:disable WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.NotPrepared
1252 $wpdb->query('DROP TABLE IF EXISTS `' . $db_prefix . 'e2pdf_templates`');
1253 $wpdb->query('DROP TABLE IF EXISTS `' . $db_prefix . 'e2pdf_entries`');
1254 $wpdb->query('DROP TABLE IF EXISTS `' . $db_prefix . 'e2pdf_datasets`');
1255 $wpdb->query('DROP TABLE IF EXISTS `' . $db_prefix . 'e2pdf_pages`');
1256 $wpdb->query('DROP TABLE IF EXISTS `' . $db_prefix . 'e2pdf_elements`');
1257 $wpdb->query('DROP TABLE IF EXISTS `' . $db_prefix . 'e2pdf_revisions`');
1258 // phpcs:enable
1259 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
1260 $wpdb->query($wpdb->prepare('DELETE FROM `' . $db_prefix . 'options` WHERE option_name LIKE %s OR option_name LIKE %s', '_transient_e2pdf_%', '_transient_timeout_e2pdf_%'));
1261
1262 $helper->delete_dir($helper->get('upload_dir'));
1263
1264 $caps = $helper->get_caps();
1265 $roles = wp_roles()->get_names();
1266 foreach ($roles as $role_key => $sub_role) {
1267 $role = get_role($role_key);
1268 foreach ($caps as $cap_key => $cap) {
1269 $role->remove_cap($cap_key);
1270 }
1271 }
1272
1273 if ($blog_id) {
1274 restore_current_blog();
1275 $helper->set('upload_dir', $helper->get_wp_upload_dir('basedir') . '/e2pdf/');
1276 }
1277 }
1278 }
1279