PluginProbe
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin / trunk
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin vtrunk
trunk 1.5 1.6 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 All 71 releases
pdf-print / pdf-print.php

pdf-print.php in PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin trunk, at pdf-print.php

2,195 lines 81.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 Plugin Name: PDF & Print by BestWebSoft
4 Plugin URI: https://bestwebsoft.com/products/wordpress/plugins/pdf-print/
5 Description: Generate PDF files and print WordPress posts/pages. Customize document header/footer styles and appearance.
6 Author: BestWebSoft
7 Text Domain: pdf-print
8 Domain Path: /languages
9 Version: 2.4.7
10 Author URI: https://bestwebsoft.com/
11 License: GPLv2 or later
12 */
13
14 /**
15 © Copyright 2021 BestWebSoft ( https://support.bestwebsoft.com )
16
17 This program is free software; you can redistribute it and/or modify
18 it under the terms of the GNU General Public License, version 2, as
19 published by the Free Software Foundation.
20
21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 GNU General Public License for more details.
25
26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
29 */
30
31 if ( ! defined( 'ABSPATH' ) ) {
32 exit;
33 }
34
35 require_once dirname( __FILE__ ) . '/includes/deprecated.php';
36
37 if ( ! function_exists( 'pdfprnt_add_admin_menu' ) ) {
38 /**
39 * Add our own menu
40 */
41 function pdfprnt_add_admin_menu() {
42 global $submenu, $pdfprnt_plugin_info, $wp_version, $pdfprnt_options;
43 if ( ! is_plugin_active( 'pdf-print-pro/pdf-print-pro.php' )/*pls */ && ! is_plugin_active( 'pdf-print-plus/pdf-print-plus.php' )/* pls*/ ) {
44 $settings = add_menu_page( esc_html__( 'PDF & Print Settings', 'pdf-print' ), 'PDF & Print', 'manage_options', 'pdf-print.php', 'pdfprnt_settings_page' );
45 add_submenu_page( 'pdf-print.php', esc_html__( 'PDF & Print Settings', 'pdf-print' ), esc_html__( 'Settings', 'pdf-print' ), 'manage_options', 'pdf-print.php', 'pdfprnt_settings_page' );
46 add_submenu_page( 'pdf-print.php', esc_html__( 'Headers & Footers', 'pdf-print' ), esc_html__( 'Headers & Footers', 'pdf-print' ), 'manage_options', 'pdf-print-templates.php', 'pdfprnt_templates' );
47 add_submenu_page( 'pdf-print.php', 'BWS Panel', 'BWS Panel', 'manage_options', 'pdfprnt-bws-panel', 'bws_add_menu_render' );
48 if ( isset( $submenu['pdf-print.php'] ) ) {
49 $submenu['pdf-print.php'][] = array(
50 '<span style="color:#d86463"> ' . esc_html__( 'Upgrade to Pro', 'pdf-print' ) . '</span>',
51 'manage_options',
52 'https://bestwebsoft.com/products/wordpress/plugins/pdf-print/?k=d9da7c9c2046bed8dfa38d005d4bffdb&pn=101&v=' . $pdfprnt_plugin_info['Version'] . '&wp_v=' . $wp_version,
53 );
54 }
55
56 add_action( "load-{$settings}", 'pdfprnt_add_tabs' );
57 }
58 }
59 }
60
61 if ( ! function_exists( 'pdfprnt_add_tabs' ) ) {
62 /**
63 * Add help tab on settings page
64 *
65 * @return void
66 */
67 function pdfprnt_add_tabs() {
68 $args = array(
69 'id' => 'pdfprnt',
70 'section' => '200538669',
71 );
72 bws_help_tab( get_current_screen(), $args );
73 }
74 }
75
76 if ( ! function_exists( 'pdfprnt_plugins_loaded' ) ) {
77 /**
78 * Localization
79 */
80 function pdfprnt_plugins_loaded() {
81 /* Internationalization */
82 load_plugin_textdomain( 'pdf-print', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
83 }
84 }
85
86 if ( ! function_exists( 'pdfprnt_init' ) ) {
87 /**
88 * Init plugin
89 */
90 function pdfprnt_init() {
91 global $pdfprnt_plugin_info, $pdfprnt_is_old_php;
92
93 $plugin_basename = plugin_basename( __FILE__ );
94
95 require_once dirname( __FILE__ ) . '/bws_menu/bws_include.php';
96 bws_include_init( $plugin_basename );
97
98 if ( empty( $pdfprnt_plugin_info ) ) {
99 if ( ! function_exists( 'get_plugin_data' ) ) {
100 require_once ABSPATH . 'wp-admin/includes/plugin.php';
101 }
102 $pdfprnt_plugin_info = get_plugin_data( __FILE__ );
103 }
104
105 /* check WordPress version */
106 bws_wp_min_version_check( $plugin_basename, $pdfprnt_plugin_info, '4.5' );
107
108 /* check PHP version */
109 $pdfprnt_is_old_php = version_compare( PHP_VERSION, '5.4.0', '<' );
110
111 /* Get/Register and check settings for plugin */
112 if ( ! is_admin() || ( isset( $_GET['page'] ) && 'pdf-print.php' === $_GET['page'] ) ) {
113 pdfprnt_settings();
114 }
115
116 if ( function_exists( 'wp_register_block_types_from_metadata_collection' ) ) {
117 wp_register_block_types_from_metadata_collection( __DIR__ . '/includes/build', __DIR__ . '/includes/build/blocks-manifest.php' );
118 return;
119 }
120
121 if ( function_exists( 'wp_register_block_metadata_collection' ) ) {
122 wp_register_block_metadata_collection( __DIR__ . '/includes/build', __DIR__ . '/includes/build/blocks-manifest.php' );
123 }
124 $manifest_data = require __DIR__ . '/includes/build/blocks-manifest.php';
125 foreach ( array_keys( $manifest_data ) as $block_type ) {
126 register_block_type( __DIR__ . "/includes/build/{$block_type}" );
127 }
128 }
129 }
130
131 if ( ! function_exists( 'pdfprnt_admin_init' ) ) {
132 /**
133 * Admin init
134 */
135 function pdfprnt_admin_init() {
136 global $bws_plugin_info, $pdfprnt_plugin_info, $bws_shortcode_list, $pagenow, $pdfprnt_options;
137
138 if ( empty( $bws_plugin_info ) ) {
139 $bws_plugin_info = array(
140 'id' => '101',
141 'version' => $pdfprnt_plugin_info['Version'],
142 );
143 }
144 /* add PDF&Print to global $bws_shortcode_list */
145 $bws_shortcode_list['pdfprnt'] = array(
146 'name' => 'PDF&Print',
147 'js_function' => 'pdfprnt_shortcode_init',
148 );
149 if ( 'plugins.php' === $pagenow ) {
150 /* Install the option defaults */
151 if ( function_exists( 'bws_plugin_banner_go_pro' ) ) {
152 pdfprnt_settings();
153 bws_plugin_banner_go_pro( $pdfprnt_options, $pdfprnt_plugin_info, 'pdfprnt', 'pdf-print', 'e2f2549f4d70bc4cb9b48071169d264e', '101', 'pdf-print' );
154 }
155 }
156 }
157 }
158
159
160 if ( ! function_exists( 'pdfprnt_plugin_activate' ) ) {
161 /**
162 * Function for activation
163 */
164 function pdfprnt_plugin_activate() {
165 if ( is_multisite() ) {
166 switch_to_blog( 1 );
167 register_uninstall_hook( __FILE__, 'pdfprnt_uninstall' );
168 restore_current_blog();
169 } else {
170 register_uninstall_hook( __FILE__, 'pdfprnt_uninstall' );
171 }
172 }
173 }
174
175 if ( ! function_exists( 'pdfprnt_settings' ) ) {
176 /**
177 * Register settings for plugin
178 */
179 function pdfprnt_settings() {
180 global $pdfprnt_options, $pdfprnt_plugin_info;
181 $options_default = pdfprnt_get_options_default();
182 if ( ! get_option( 'pdfprnt_options' ) ) {
183 add_option( 'pdfprnt_options', $options_default );
184 }
185
186 $pdfprnt_options = get_option( 'pdfprnt_options' );
187 if ( ! isset( $pdfprnt_options['plugin_option_version'] ) || $pdfprnt_options['plugin_option_version'] !== $pdfprnt_plugin_info['Version'] ) {
188 if ( isset( $pdfprnt_options['button_post_types'] ) ) {
189 unset( $options_default['button_post_types'] );
190 }
191 if ( function_exists( 'array_replace_recursive' ) ) {
192 $pdfprnt_options = array_replace_recursive( $options_default, $pdfprnt_options );
193 } else {
194 foreach ( $options_default as $key => $value ) {
195 if (
196 ! isset( $pdfprnt_options[ $key ] ) ||
197 ( isset( $pdfprnt_options[ $key ] ) && is_array( $options_default[ $key ] ) && ! is_array( $pdfprnt_options[ $key ] ) )
198 ) {
199 $pdfprnt_options[ $key ] = $options_default[ $key ];
200 } else {
201 if ( is_array( $options_default[ $key ] ) ) {
202 foreach ( $options_default[ $key ] as $key2 => $value2 ) {
203 if ( ! isset( $pdfprnt_options[ $key ][ $key2 ] ) ) {
204 $pdfprnt_options[ $key ][ $key2 ] = $options_default[ $key ][ $key2 ];
205 }
206 }
207 }
208 }
209 }
210 }
211 $is_old_pro = false === strpos( 'pro-', $pdfprnt_options['plugin_option_version'] ) ? false : true;
212 if ( $is_old_pro ) {
213 foreach ( array( 'pdf', 'print' ) as $button ) {
214 if ( 'none' !== $pdfprnt_options['button_image'][ $button ]['type'] ) {
215 $pdfprnt_options['button_image'][ $button ]['type'] = 'default';
216 $pdfprnt_options['button_image'][ $button ]['image_src'] = plugins_url( "images/{$button}.png", __FILE__ );
217 }
218 }
219 }
220
221 $pdfprnt_options['plugin_option_version'] = $pdfprnt_plugin_info['Version'];
222 $pdfprnt_options['hide_premium_options'] = array();
223 update_option( 'pdfprnt_options', $pdfprnt_options );
224 pdfprnt_plugin_activate();
225 }
226 }
227 }
228
229 if ( ! function_exists( 'pdfprnt_get_options_default' ) ) {
230 /**
231 * Get plugin default settings
232 */
233 function pdfprnt_get_options_default() {
234 global $pdfprnt_plugin_info, $wp_roles;
235
236 /* Variable to verify performance number of once function. */
237 $default_post_types = array();
238 /* Default post types of WordPress. */
239 foreach ( get_post_types(
240 array(
241 'public' => 1,
242 'show_ui' => 1,
243 '_builtin' => true,
244 ),
245 'names'
246 ) as $value ) {
247 $default_post_types[] = $value;
248 }
249 $default_post_types[] = 'pdfprnt_search';
250 $default_post_types[] = 'pdfprnt_archives';
251 $default_post_types[] = 'pdfprnt_blog';
252
253 $enabled_roles = array();
254 $roles = array_keys( $wp_roles->roles );
255 foreach ( $roles as $key => $role ) {
256 $enabled_roles[ $role ] = 1;
257 }
258 $enabled_roles['unauthorized'] = 1;
259
260 $options_default = array(
261 'plugin_option_version' => $pdfprnt_plugin_info['Version'],
262 'button_post_types' => array(
263 'pdf' => $default_post_types,
264 'print' => $default_post_types,
265 ),
266 'buttons_position' => 'top-right',
267 'use_default_css' => 0,
268 'use_custom_css' => 0,
269 'custom_css_code' => '',
270 'do_shorcodes' => 1,
271 'disable_links' => 0,
272 'remove_links' => 0,
273 'replace_video' => 0,
274 'qr_code_link' => 0,
275 'show_print_window' => 0,
276 'additional_fonts' => 0,
277 'show_title' => 1,
278 'show_featured_image' => 0,
279 'show_author' => 0,
280 'show_date' => 0,
281 'show_category' => 0,
282 'featured_image_size' => 'thumbnail',
283 'button_image' => array(
284 'pdf' => array(
285 'type' => 'default',
286 'image_src' => plugins_url( 'images/pdf.png', __FILE__ ),
287 ),
288 'print' => array(
289 'type' => 'default',
290 'image_src' => plugins_url( 'images/print.png', __FILE__ ),
291 ),
292 ),
293 'button_title' => array(
294 'pdf' => '',
295 'print' => '',
296 ),
297 'pdf_page_size' => 'A4',
298 'image_to_pdf' => 0,
299 'pdf_margins' => array(
300 'left' => 15,
301 'right' => 15,
302 'top' => 16,
303 'bottom' => 16,
304 ),
305 'first_install' => strtotime( 'now' ),
306 'suggest_feature_banner' => 1,
307 'file_action' => 'open',
308 'print_action' => 'plugin_function',
309 'enabled_roles' => $enabled_roles,
310 'mpdf_library_version' => '8.2.6',
311 'hide_classes' => array(),
312 'count_generation' => 0,
313 );
314
315 $options_default = apply_filters( 'pdfprnt_get_additional_options_default', $options_default );
316
317 return $options_default;
318 }
319 }
320
321 if ( ! function_exists( 'pdfprnt_settings_page' ) ) {
322 /**
323 * Settings page
324 */
325 function pdfprnt_settings_page() {
326 global $pdfprnt_plugin_info;
327 require_once dirname( __FILE__ ) . '/includes/pro_banners.php';
328 if ( ! class_exists( 'Bws_Settings_Tabs' ) ) {
329 require_once dirname( __FILE__ ) . '/bws_menu/class-bws-settings.php';
330 }
331 require_once dirname( __FILE__ ) . '/includes/class-pdfprnt-settings.php';
332 $page = new Pdfprnt_Settings_Tabs( plugin_basename( __FILE__ ) );
333 if ( method_exists( $page, 'add_request_feature' ) ) {
334 $page->add_request_feature();
335 } ?>
336 <div class="wrap">
337 <h1 class="pdfprnt-title"><?php esc_html_e( 'PDF & Print Settings', 'pdf-print' ); ?></h1>
338 <?php
339 if ( function_exists( 'bws_plugin_promo_banner' ) ) {
340 echo bws_plugin_promo_banner( $pdfprnt_plugin_info, 'pdfprnt_options', 'pdf-print', 'https://bestwebsoft.com/products/wordpress/plugins/pdf-print/?utm_source=wordpress&utm_medium=plugin_banner&utm_campaign=upgrade' );
341 }
342 $page->display_content(); ?>
343 </div>
344 <?php
345 }
346 }
347
348
349 if ( ! function_exists( 'pdfprnt_templates' ) ) {
350 /**
351 * Headers & Footers page
352 */
353 function pdfprnt_templates() {
354 global $wp_version, $pdfprnt_plugin_info, $pdfprnt_options, $pdfprnt_links;
355 require_once dirname( __FILE__ ) . '/includes/pro_banners.php';
356
357 pdfprnt_settings();
358 $bws_hide_premium = bws_hide_premium_options_check( $pdfprnt_options );
359
360 $tab_action = ( isset( $_GET['pdfprnt_tab_action'] ) && 'new' === $_GET['pdfprnt_tab_action'] );
361 if ( $tab_action ) {
362 $page_title = esc_html__( 'Add New', 'pdf-print' );
363 $page_name = esc_html__( 'Header & Footer Template', 'pdf-print' );
364 } else {
365 $page_title = '';
366 $page_name = esc_html__( 'Headers & Footers', 'pdf-print' );
367 }
368 $display_title = ( ! empty( $page_title ) ) ? "$page_title $page_name" : "$page_name";
369 if ( ! isset( $_GET['pdfprnt_tab_action'] ) && ! $bws_hide_premium ) {
370 $display_title .= sprintf(
371 ' <a class="add-new-h2 pdfprnt_add_new_button" href="%s">%s</a>',
372 admin_url( 'admin.php?page=pdf-print-templates.php&pdfprnt_tab_action=new' ),
373 esc_html__( 'Add New', 'pdf-print' )
374 );
375 }
376 ?>
377 <div class="wrap">
378 <h1 class="pdfprnt-title"><?php echo wp_kses_post( $display_title ); ?></h1>
379 <br>
380 <?php if ( $bws_hide_premium ) { ?>
381 <p>
382 <?php
383 esc_html_e( 'This tab contains Pro options only.', 'pdf-print' );
384 echo ' ' . sprintf(
385 esc_html__( '%1$sChange the settings%2$s to view the Pro options.', 'pdf-print' ),
386 '<a href="admin.php?page=pdf-print.php&bws_active_tab=misc">',
387 '</a>'
388 );
389 ?>
390 </p>
391 <?php } else { ?>
392 <div class="bws_pro_version_bloc pdfprnt-pro-feature pdfprnt-pro-feature-templates">
393 <div class="bws_pro_version_table_bloc">
394 <div class="bws_table_bg" style="z-index: 1098;"></div>
395 <div class="bws_pro_version">
396 <?php
397 if ( ! $tab_action ) {
398 $date_format = get_option( 'date_format' );
399 pdfprnt_headers_footers_list_block( $date_format );
400 } else {
401 pdfprnt_headers_footers_editor_block();
402 }
403 ?>
404 </div>
405 </div>
406 <div class="bws_pro_version_tooltip" style="z-index: 1099;">
407 <a class="bws_button" href="https://bestwebsoft.com/products/wordpress/plugins/pdf-print/?k=d9da7c9c2046bed8dfa38d005d4bffdb&pn=101&v=<?php echo esc_attr( $pdfprnt_plugin_info['Version'] ); ?>&wp_v=<?php echo esc_attr( $wp_version ); ?>" target="_blank" title="PDF & Print Pro Plugin"><?php esc_html_e( 'Upgrade to Pro', 'pdf-print' ); ?></a>
408 <div class="clear"></div>
409 </div>
410 </div>
411 <?php } ?>
412 </div>
413 <?php
414 }
415 }
416
417 if ( ! function_exists( 'pdfprnt_shortcode' ) ) {
418 /**
419 * PDF&Print shortcode
420 * [bws_pdfprint]
421 *
422 * @param array $attr Attribute for shortcode.
423 */
424 function pdfprnt_shortcode( $attr ) {
425 global $pdfprnt_options, $pdfprnt_is_old_php;
426
427 if ( isset( $_REQUEST['print'] ) || $pdfprnt_is_old_php || ! pdfprnt_is_user_role_enabled() ) {
428 return;
429 }
430
431 $buttons = '';
432 if ( is_home() ) {
433 global $post;
434 $permalink = get_permalink( $post );
435 } else {
436 $permalink = isset( $_SERVER['HTTP_HOST'] ) && isset( $_SERVER['REQUEST_URI'] ) ? ( is_ssl() ? 'https://' : 'http://' ) . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) . sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';
437 }
438 $shortcode_atts = shortcode_atts( array( 'display' => 'pdf' ), $attr );
439 $shortcode_atts = str_word_count( $shortcode_atts['display'], 1 );
440
441 foreach ( $shortcode_atts as $value ) {
442 if ( 'pdf' === $value ) {
443 $buttons .= pdfprnt_get_button( 'pdf', $permalink );
444 }
445 if ( 'print' === $value ) {
446 $buttons .= pdfprnt_get_button( 'print', $permalink );
447 }
448 }
449 if ( 1 === $pdfprnt_options['count_generation'] ) {
450 $post_type = get_post_type();
451 if ( in_array( $post_type, $pdfprnt_options['button_post_types']['pdf'] ) || in_array( $post_type, $pdfprnt_options['button_post_types']['print'] ) ) {
452 $count = get_post_meta( get_the_ID(), 'pdfprnt_count_generation', true );
453 $buttons .= ' <span class="pdfprnt-count-generation">' . $count . '</span>';
454 }
455 }
456 if ( ! empty( $buttons ) ) {
457 $buttons = sprintf(
458 '<div class="pdfprnt-buttons">%s</div>',
459 $buttons
460 );
461 add_action( 'wp_footer', 'pdfprnt_add_script' );
462 }
463
464 return $buttons;
465 }
466 }
467
468 if ( ! function_exists( 'pdfprnt_shortcode_pagebreak' ) ) {
469 /**
470 * [pdfprnt_shortcode_pagebreak]
471 */
472 function pdfprnt_shortcode_pagebreak() {
473 if ( isset( $_GET['print'] ) && 'pdf' === $_GET['print'] ) {
474 return '<div style="page-break-after:always"></div>';
475 }
476 return '';
477 }
478 }
479
480
481 if ( ! function_exists( 'pdfprnt_qr_code_content' ) ) {
482 /**
483 * Add custom fields shortcodes button
484 *
485 * @param string $content Post content.
486 */
487 function pdfprnt_qr_code_content( $content ) {
488 global $pdfprnt_options;
489 if ( 1 === $pdfprnt_options['replace_video'] ) {
490 $provider_match_masks = array(
491 'youtube' => '/http.*(?:youtu\.be\/|youtube(?:-nocookie)?\.com\/)[^\"\'>]+/',
492 'vimeo' => '/http.*vimeo\.com\/[^\"\'>]+/',
493 'dailymotion' => '/http.*dailymotion.com\/[^\"\'>]+/',
494 'videopress' => array(
495 '/(?:http(?:s)?:\/\/)?videos\.files\.wordpress\.com\/[^\"\'>]+/i',
496 '/(?:http(?:s)?:\/\/)?(?:www\.)?video(?:\.word)?press\.com\/(?:v|embed)\/[^\"\'>]+/i',
497 ),
498 );
499 $find_replace = array();
500 foreach ( $provider_match_masks as $provider => $match_mask ) {
501 if ( ! is_array( $match_mask ) ) {
502 $match_mask = array( $match_mask );
503 }
504 foreach ( $match_mask as $mask ) {
505 $matches = array();
506 preg_match_all( $mask, $content, $matches, PREG_OFFSET_CAPTURE );
507 if ( isset( $matches[0][0] ) ) {
508 $pos_start = strrpos( substr( $content, 0, $matches[0][0][1] ), '<', 0 );
509 $pos_end = strpos( substr( $content, $pos_start ), '>', 0 );
510 preg_match( '/<.*>/', substr( $content, $pos_start + $pos_end, 15 ), $matches2 );
511 $text = substr( $content, $pos_start, $pos_end + 1 ) . $matches2[0];
512 $find_replace[] = array( $matches[0][0][0], $matches[0][0][1], $text );
513 }
514 }
515 }
516 if ( ! empty( $find_replace ) ) {
517 require_once( dirname( __FILE__ ) . '/includes/qr_code/qr_code.php' );
518
519 foreach( $find_replace as $replace ) {
520 $qr_code = QRCode::getMinimumQRCode( $replace[0], QR_ERROR_CORRECT_LEVEL_L );
521
522 $image = $qr_code->createImage( 6, 4 );
523 ob_start();
524 imagejpeg( $image );
525 $contents = ob_get_contents();
526 ob_end_clean();
527 $image_data = "data:image/jpeg;base64," . base64_encode( $contents );
528
529 if ( 1 === $pdfprnt_options['qr_code_link'] ) {
530 $content = str_replace( $replace[2], '<a href="' . $replace[0] . '"><img src="' . $image_data . '" /></a>', $content );
531 } else {
532 $content = str_replace( $replace[2], '<img src="' . $image_data . '" />', $content );
533 }
534 }
535 }
536 }
537 return $content;
538 }
539 }
540 if ( ! function_exists( 'pdfprnt_shortcode_button_content' ) ) {
541 /**
542 * Add shortcode content
543 *
544 * @param string $content Post content.
545 */
546 function pdfprnt_shortcode_button_content( $content ) {
547 ?>
548 <div id="pdfprnt" style="display:none;">
549 <fieldset>
550 <?php esc_html_e( 'Add PDF & Print Buttons to your page or post', 'pdf-print' ); ?>
551 <br />
552 <label>
553 <input type="checkbox" name="pdfprnt_selected_pdf" value="pdf" checked="checked" />
554 <?php esc_html_e( 'PDF', 'pdf-print' ); ?>
555 </label>
556 <br />
557 <label>
558 <input type="checkbox" name="pdfprnt_selected_print" value="print" />
559 <?php esc_html_e( 'Print', 'pdf-print' ); ?>
560 </label>
561 <input class="bws_default_shortcode" type="hidden" name="default" value="[bws_pdfprint]" />
562 <div class="clear"></div>
563 </fieldset>
564 </div>
565 <?php
566 $script = "function pdfprnt_shortcode_init() {
567 ( function( $ ) {
568 $( '.mce-reset input[name^=\"pdfprnt_selected\"]' ).change( function() {
569 var result = '';
570 $( '.mce-reset input[name^=\"pdfprnt_selected\"]' ).each( function() {
571 if ( $( this ).is( ':checked' ) ) {
572 result += $( this ).val() + ',';
573 }
574 } );
575
576 if ( '' == result ) {
577 $( '.mce-reset #bws_shortcode_display' ).text( '' );
578 } else {
579 result = result.slice( 0, - 1 );
580 $( '.mce-reset #bws_shortcode_display' ).text( '[bws_pdfprint display=\"' + result + '\"]' );
581 }
582 } );
583 } ) ( jQuery );
584 }";
585
586 wp_register_script( 'pdfprnt_bws_shortcode_button', '//', false, null, false );
587 wp_enqueue_script( 'pdfprnt_bws_shortcode_button' );
588 wp_add_inline_script( 'pdfprnt_bws_shortcode_button', sprintf( $script ) );
589 }
590 }
591
592 if ( ! function_exists( 'pdfprnt_get_button' ) ) {
593 /**
594 * Forming button
595 *
596 * @param string $button button name: 'pdf' or 'print'.
597 * @param string $url page url or permalink.
598 * @param string $custom_query_arg custom query arg to add to query.
599 * @return string $link formed link with image and button title.
600 */
601 function pdfprnt_get_button( $button = 'pdf', $url = '', $custom_query_arg = '' ) {
602 global $pdfprnt_options;
603
604 if ( empty( $url ) ) {
605 $url = home_url( '/' );
606 }
607 $button = ( 'print' === $button ) ? 'print' : 'pdf';
608
609 if ( 'default' === $pdfprnt_options['button_image'][ $button ]['type'] && ! empty( $pdfprnt_options['button_image'][ $button ]['image_src'] ) ) {
610 $image = sprintf(
611 '<img src="%s" alt="image_%s" title="%s" />',
612 esc_url( $pdfprnt_options['button_image'][ $button ]['image_src'] ),
613 $button,
614 ( ( 'print' === $button ) ? esc_html__( 'Print Content', 'pdf-print' ) : ( ( 'open' === $pdfprnt_options['file_action'] ) ? esc_html__( 'View PDF', 'pdf-print' ) : esc_html__( 'Download PDF', 'pdf-print' ) ) )
615 );
616 } else {
617 $image = '';
618 }
619
620 $custom_query_arg = ( ! empty( $custom_query_arg ) ) ? $custom_query_arg : $button;
621 $url = esc_url( $url );
622 $url = add_query_arg( 'print', $custom_query_arg, $url );
623 $target = '_blank';
624
625 $title = ( ! empty( $pdfprnt_options['button_title'][ $button ] ) ) ?
626 sprintf(
627 '<span class="pdfprnt-button-title pdfprnt-button-%s-title">%s</span>',
628 $button,
629 $pdfprnt_options['button_title'][ $button ]
630 )
631 :
632 '';
633 if ( $pdfprnt_options['image_to_pdf'] && 'pdf' === $custom_query_arg ) {
634 $url = 'javascript: imageToPdf(' . get_the_ID() . ')';
635 $target = '_self';
636 }
637
638 if ( 'print' === $button && 'ctrl_p' === $pdfprnt_options['print_action'] ) {
639 $url = "javascript: window.print()";
640 $target = '_self';
641 }
642
643 $link = sprintf(
644 '<a href="%s" class="pdfprnt-button pdfprnt-button-%s" target="%s" >%s%s</a>',
645 $url,
646 $button,
647 $target,
648 $image,
649 $title
650 );
651
652 $link = apply_filters( 'pdfprnt_add_atribute_rel', $link, $url, $button, $target, $image, $title );
653
654 return $link;
655 }
656 }
657
658 if ( ! function_exists( 'pdfprnt_is_user_role_enabled' ) ) {
659 /**
660 * Check is enabled for user role
661 */
662 function pdfprnt_is_user_role_enabled() {
663 global $pdfprnt_options, $current_user;
664 if ( ! is_user_logged_in() || empty( $current_user->roles ) ) {
665 return ! empty( $pdfprnt_options['enabled_roles']['unauthorized'] );
666 } else {
667 $role = $current_user->roles[0];
668 return ! empty( $pdfprnt_options['enabled_roles'][ $role ] );
669 }
670 }
671 }
672
673 if ( ! function_exists( 'pdfprnt_content' ) ) {
674 /**
675 * Positioning buttons in content of standart posts and pages
676 *
677 * @param string $content Post content.
678 * @return string $content
679 */
680 function pdfprnt_content( $content ) {
681 global $pdfprnt_options, $post, $pdfprnt_is_old_php;
682
683 if ( $pdfprnt_is_old_php || is_admin() || is_feed() || is_search() || is_category() || is_tax() || is_tag() || is_author() || ! pdfprnt_is_user_role_enabled() || post_password_required( $post->ID ) ) {
684 return $content;
685 }
686
687 $show_button_pdf = ! empty( $pdfprnt_options['button_post_types']['pdf'] ) && in_array( $post->post_type, $pdfprnt_options['button_post_types']['pdf'], true );
688 $show_button_print = ! empty( $pdfprnt_options['button_post_types']['print'] ) && in_array( $post->post_type, $pdfprnt_options['button_post_types']['print'], true );
689
690 if ( $show_button_pdf || $show_button_print ) {
691
692 $str = '<div class="pdfprnt-buttons pdfprnt-buttons-' . $post->post_type . ' pdfprnt-' . $pdfprnt_options['buttons_position'] . '">';
693 if ( is_home() ) {
694 $permalink = get_permalink( $post );
695 } else {
696 $permalink = isset( $_SERVER['HTTP_HOST'] ) && isset( $_SERVER['REQUEST_URI'] ) ? ( is_ssl() ? 'https://' : 'http://' ) . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) . sanitize_text_field( wp_unslash( urldecode( $_SERVER['REQUEST_URI'] ) ) ) : '';
697 }
698
699 if ( $show_button_pdf ) {
700 $str .= pdfprnt_get_button( 'pdf', $permalink );
701 if ( ! is_archive() && ! is_home() ) {
702 add_action( 'wp_footer', 'pdfprnt_add_script' );
703 }
704 }
705 if ( $show_button_print ) {
706 $str .= pdfprnt_get_button( 'print', $permalink );
707 }
708 if ( 1 === $pdfprnt_options['count_generation'] ) {
709 $post_type = get_post_type();
710 if ( in_array( $post_type, $pdfprnt_options['button_post_types']['pdf'] ) || in_array( $post_type, $pdfprnt_options['button_post_types']['print'] ) ) {
711 $count = get_post_meta( get_the_ID(), 'pdfprnt_count_generation', true );
712 $str .= ' <span class="pdfprnt-count-generation">' . $count . '</span>';
713 }
714 }
715 $str .= '</div>';
716
717 if ( 'top-left' === $pdfprnt_options['buttons_position'] || 'top-right' === $pdfprnt_options['buttons_position'] ) {
718 $content = $str . $content;
719 } elseif ( 'bottom-left' === $pdfprnt_options['buttons_position'] || 'bottom-right' === $pdfprnt_options['buttons_position'] ) {
720 $content = $content . $str;
721 } else {
722 $content = $str . $content . $str;
723 }
724 }
725 return $content;
726 }
727 }
728
729 if ( ! function_exists( 'pdfprnt_excerpt' ) ) {
730 /**
731 * Remove Print word from excerpt
732 *
733 * @param string $content Post excerpt.
734 * @return string $content
735 */
736 function pdfprnt_excerpt( $content ) {
737 global $pdfprnt_options;
738 $temp = array();
739 $temp[1] = $content;
740 $title = isset( $pdfprnt_options['button_title'] ) ? $pdfprnt_options['button_title'] : array( 'pdf' => '', 'print' => '' );
741 if ( ! empty( $title['pdf'] ) ) {
742 $temp = explode( $title['pdf'], $content );
743 }
744 if ( ! empty( $title['print'] ) ) {
745 $temp = explode( $title['print'], $content );
746 }
747 if ( isset( $temp[1] ) ) {
748 return $temp[1];
749 } else {
750 return $content;
751 }
752 }
753 }
754
755 if ( ! function_exists( 'pdfprnt_show_buttons_search_archive' ) ) {
756 /**
757 * Output buttons for search or archive pages
758 *
759 * @param string $content Post content.
760 */
761 function pdfprnt_show_buttons_search_archive( $content ) {
762 global $wp_query;
763
764 /* make sure that we display pdf/print buttons only with main loop */
765 if ( is_main_query() && $content === $wp_query ) {
766 global $pdfprnt_options, $wp, $posts, $pdfprnt_show_archive_start, $pdfprnt_show_archive_end;
767
768 $is_search = ( is_search() );
769 $is_archive = ( is_archive() || is_category() || is_tax() || is_tag() || is_author() );
770 $is_blog = ( is_home() );
771
772 if ( $is_search ) {
773 $show_button_pdf = ( in_array( 'pdfprnt_search', $pdfprnt_options['button_post_types']['pdf'], true ) );
774 $show_button_print = ( in_array( 'pdfprnt_search', $pdfprnt_options['button_post_types']['print'], true ) );
775 } elseif ( $is_archive ) {
776 $show_button_pdf = ( in_array( 'pdfprnt_archives', $pdfprnt_options['button_post_types']['pdf'], true ) );
777 $show_button_print = ( in_array( 'pdfprnt_archives', $pdfprnt_options['button_post_types']['print'], true ) );
778 } elseif ( $is_blog ) {
779 $show_button_pdf = ( in_array( 'pdfprnt_blog', $pdfprnt_options['button_post_types']['pdf'], true ) );
780 $show_button_print = ( in_array( 'pdfprnt_blog', $pdfprnt_options['button_post_types']['print'], true ) );
781 } else {
782 $show_button_pdf = false;
783 $show_button_print = false;
784 }
785
786 $loop_position = current_filter();
787 if ( ! ( $show_button_pdf || $show_button_print ) ) {
788 return;
789 }
790
791 if ( ( 'loop_start' === $loop_position && intval( $pdfprnt_show_archive_start ) === 1 ) || ( 'loop_end' === $loop_position && intval( $pdfprnt_show_archive_end ) === 1 ) ) {
792 return;
793 }
794
795 if ( $show_button_pdf || $show_button_print ) {
796 global $pdfprnt_is_search_archive;
797 $current_url = isset( $_SERVER['HTTP_HOST'] ) && isset( $_SERVER['REQUEST_URI'] ) ? set_url_scheme( ( is_ssl() ? 'https://' : 'http://' ) . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) . sanitize_text_field( wp_unslash( urldecode( $_SERVER['REQUEST_URI'] ) ) ) ) : '';
798 $pdfprnt_is_search_archive = true;
799 $str = '<div class="pdfprnt-buttons pdfprnt-buttons-' . ( ( $is_search ) ? 'search' : 'archive' ) . ' pdfprnt-' . $pdfprnt_options['buttons_position'] . '">';
800 if ( $show_button_pdf ) {
801 $str .= pdfprnt_get_button( 'pdf', $current_url, 'pdf-search' );
802 add_action( 'wp_footer', 'pdfprnt_add_script' );
803 }
804
805 if ( $show_button_print ) {
806 $str .= pdfprnt_get_button( 'print', $current_url, 'print-search' );
807 }
808 $str .= '</div>';
809 echo wp_kses_post( $str );
810 if ( 'loop_start' === $loop_position ) {
811 $pdfprnt_show_archive_start++;
812 } elseif ( 'loop_end' === $loop_position ) {
813 $pdfprnt_show_archive_end++;
814 }
815 }
816 }
817 }
818 }
819
820 if ( ! function_exists( 'pdfprnt_return_buttons_search_archive' ) ) {
821 /**
822 * Return buttons for search or archive pages
823 */
824 function pdfprnt_return_buttons_search_archive() {
825 global $wp_query;
826
827 global $pdfprnt_options, $wp, $posts, $pdfprnt_show_archive_start, $pdfprnt_show_archive_end;
828
829 $is_search = ( is_search() );
830 $is_archive = ( is_archive() || is_category() || is_tax() || is_tag() || is_author() );
831 $is_blog = ( is_home() );
832
833 if ( $is_search ) {
834 $show_button_pdf = ( in_array( 'pdfprnt_search', $pdfprnt_options['button_post_types']['pdf'], true ) );
835 $show_button_print = ( in_array( 'pdfprnt_search', $pdfprnt_options['button_post_types']['print'], true ) );
836 } elseif ( $is_archive ) {
837 $show_button_pdf = ( in_array( 'pdfprnt_archives', $pdfprnt_options['button_post_types']['pdf'], true ) );
838 $show_button_print = ( in_array( 'pdfprnt_archives', $pdfprnt_options['button_post_types']['print'], true ) );
839 } elseif ( $is_blog ) {
840 $show_button_pdf = ( in_array( 'pdfprnt_blog', $pdfprnt_options['button_post_types']['pdf'], true ) );
841 $show_button_print = ( in_array( 'pdfprnt_blog', $pdfprnt_options['button_post_types']['print'], true ) );
842 } else {
843 $show_button_pdf = false;
844 $show_button_print = false;
845 }
846
847 $loop_position = current_filter();
848 if ( ! ( $show_button_pdf || $show_button_print ) ) {
849 return;
850 }
851
852 if ( ( 'loop_start' === $loop_position && intval( $pdfprnt_show_archive_start ) === 1 ) || ( 'loop_end' === $loop_position && intval( $pdfprnt_show_archive_end ) === 1 ) ) {
853 return;
854 }
855
856 if ( $show_button_pdf || $show_button_print ) {
857 global $pdfprnt_is_search_archive;
858 $current_url = isset( $_SERVER['HTTP_HOST'] ) && isset( $_SERVER['REQUEST_URI'] ) ? set_url_scheme( ( is_ssl() ? 'https://' : 'http://' ) . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) . sanitize_text_field( wp_unslash( urldecode( $_SERVER['REQUEST_URI'] ) ) ) ) : '';
859 $pdfprnt_is_search_archive = true;
860 $str = '<div class="pdfprnt-buttons pdfprnt-buttons-' . ( ( $is_search ) ? 'search' : 'archive' ) . ' pdfprnt-' . $pdfprnt_options['buttons_position'] . '">';
861 if ( $show_button_pdf ) {
862 $str .= pdfprnt_get_button( 'pdf', $current_url );
863 add_action( 'wp_footer', 'pdfprnt_add_script' );
864 }
865
866 if ( $show_button_print ) {
867 $str .= pdfprnt_get_button( 'print', $current_url, 'print-search' );
868 }
869 $str .= '</div>';
870 if ( 'loop_start' === $loop_position ) {
871 $pdfprnt_show_archive_start++;
872 } elseif ( 'loop_end' === $loop_position ) {
873 $pdfprnt_show_archive_end++;
874 }
875 return $str;
876 }
877 }
878 }
879
880 if ( ! function_exists( 'pdfprnt_auto_show_buttons_search_archive' ) ) {
881 /**
882 * Add buttons before or after the loop
883 */
884 function pdfprnt_auto_show_buttons_search_archive() {
885 global $pdfprnt_options, $pdfprnt_is_old_php, $pdfprnt_plugin_info;
886 $check_page = false;
887 if ( $pdfprnt_is_old_php || apply_filters( 'pdfprnt_prevent_display_buttons', $check_page ) ) {
888 return;
889 }
890
891 $display_in_search = ( is_search() && ( in_array( 'pdfprnt_search', $pdfprnt_options['button_post_types']['pdf'], true ) || in_array( 'pdfprnt_search', $pdfprnt_options['button_post_types']['print'], true ) ) );
892 $display_in_archive = ( ( is_archive() || is_category() || is_tax() || is_tag() || is_author() ) && ( in_array( 'pdfprnt_archives', $pdfprnt_options['button_post_types']['pdf'], true ) || in_array( 'pdfprnt_archives', $pdfprnt_options['button_post_types']['print'], true ) ) );
893 $display_in_blog = ( ( is_home() ) && ( in_array( 'pdfprnt_blog', $pdfprnt_options['button_post_types']['pdf'], true ) || in_array( 'pdfprnt_blog', $pdfprnt_options['button_post_types']['print'], true ) ) );
894
895 if ( ( $display_in_search || $display_in_archive || $display_in_blog ) && pdfprnt_is_user_role_enabled() ) {
896 global $pdfprnt_show_archive_start, $pdfprnt_show_archive_end;
897 $pdfprnt_show_archive_start = 0;
898 $pdfprnt_show_archive_end = 0;
899
900 $css = wp_remote_get( get_bloginfo( 'stylesheet_url' ) );
901
902 if ( is_array( $css ) && ! empty( $css['body'] ) && ( ! empty( mb_stristr( $css['body'], 'Twenty Twenty-Two', true ) ) || ! empty( mb_stristr( $css['body'], 'Twenty Twenty-Three', true ) ) ) ) {
903 $out1 = pdfprnt_return_buttons_search_archive();
904 if ( ! empty( $out1 ) ) {
905 wp_enqueue_script( 'pdfprnt_custom_script', plugins_url( 'js/custom_script.js', __FILE__ ), array( 'jquery' ), $pdfprnt_plugin_info['Version'], true );
906 }
907 }
908 if ( in_array( $pdfprnt_options['buttons_position'], array( 'top-left', 'top-right' ), true ) ) {
909 add_action( 'loop_start', 'pdfprnt_show_buttons_search_archive' );
910 if ( isset( $out1 ) && ! empty( $out1 ) ) {
911 wp_localize_script(
912 'pdfprnt_custom_script',
913 'pdfprnt_display_buttons',
914 array(
915 'top' => $out1,
916 )
917 );
918 }
919 } elseif ( in_array( $pdfprnt_options['buttons_position'], array( 'bottom-left', 'bottom-right' ), true ) ) {
920 add_action( 'loop_end', 'pdfprnt_show_buttons_search_archive' );
921 if ( isset( $out1 ) && ! empty( $out1 ) ) {
922 wp_localize_script(
923 'pdfprnt_custom_script',
924 'pdfprnt_display_buttons',
925 array(
926 'bottom' => $out1,
927 )
928 );
929 }
930 } else {
931 if ( isset( $out1 ) && ! empty( $out1 ) ) {
932 wp_localize_script(
933 'pdfprnt_custom_script',
934 'pdfprnt_display_buttons',
935 array(
936 'top' => $out1,
937 'bottom' => $out1,
938 )
939 );
940 }
941 add_action( 'loop_start', 'pdfprnt_show_buttons_search_archive' );
942 add_action( 'loop_end', 'pdfprnt_show_buttons_search_archive' );
943 }
944 }
945 }
946 }
947
948 if ( ! function_exists( 'pdfprnt_display_plugin_buttons' ) ) {
949 /**
950 * Display plugin buttons via action call
951 *
952 * @param string $where where to display.
953 * @param mixed $user_query WP_Query parameters.
954 */
955 function pdfprnt_display_plugin_buttons( $where = 'top', $user_query = '' ) {
956 global $pdfprnt_options, $pdfprnt_is_old_php;
957
958 if ( $pdfprnt_is_old_php ) {
959 return;
960 }
961
962 if ( preg_match( '|' . $where . '|', $pdfprnt_options['buttons_position'] ) || empty( $where ) ) {
963 echo wp_kses_post( pdfprnt_show_buttons_for_custom_post_type( $user_query ) );
964 }
965 }
966 }
967
968 if ( ! function_exists( 'pdfprnt_show_buttons_for_custom_post_type' ) ) {
969 /**
970 * Output buttons of page for custom post type
971 *
972 * @param string $user_query (Optional) User query.
973 * @return string $str
974 */
975 function pdfprnt_show_buttons_for_custom_post_type( $user_query = '' ) {
976 global $pdfprnt_options, $post, $posts;
977
978 $show_button_pdf = in_array( $post->post_type, $pdfprnt_options['button_post_types']['pdf'], true );
979 $show_button_print = in_array( $post->post_type, $pdfprnt_options['button_post_types']['print'], true );
980
981 $show_button_pdf = apply_filters( 'pdfprnt_show_buttons_for_custom_post_type', 'pdf', $show_button_pdf );
982 $show_button_print = apply_filters( 'pdfprnt_show_buttons_for_custom_post_type', 'print', $show_button_print );
983
984 if (
985 /* not display anything if displaying buttons for post and pages is disabled */
986 ( ! ( $show_button_pdf || $show_button_print ) ) ||
987 /* not display anything if we have wrong $user_query */
988 ( ! ( is_array( $user_query ) || is_string( $user_query ) ) )
989 ) {
990 return;
991 }
992 $current_url = isset( $_SERVER['HTTP_HOST'] ) && isset( $_SERVER['REQUEST_URI'] ) ? set_url_scheme( ( is_ssl() ? 'https://' : 'http://' ) . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) . sanitize_text_field( wp_unslash( urldecode( $_SERVER['REQUEST_URI'] ) ) ) ) : '';
993 $current_url = esc_url( $current_url );
994 $is_return = true;
995
996 if ( empty( $user_query ) ) { /* set necessary values of parameters for pdf/print buttons */
997 $nothing_else = false;
998 if ( is_search() || is_archive() || is_category() || is_tax() || is_tag() || is_author() || ! pdfprnt_is_user_role_enabled() ) { /* search, cattegories, archives */
999 foreach ( $posts as $value ) {
1000 if ( in_array( $value->post_type, $pdfprnt_options['button_post_types']['pdf'], true ) || in_array( 'page', $pdfprnt_options['button_post_types']['print'], true ) ) {
1001 $is_return = false;
1002 break;
1003 }
1004 }
1005 if ( $is_return ) {
1006 return;
1007 }
1008 $pdf_query_parameter = 'pdf-search';
1009 $print_query_parameter = 'print-search';
1010 } elseif ( is_page() ) { /* pages */
1011 if ( in_array( 'page', $pdfprnt_options['button_post_types']['pdf'], true ) || in_array( 'page', $pdfprnt_options['button_post_types']['print'], true ) ) {
1012 $nothing_else = true;
1013 } else {
1014 return;
1015 }
1016 } elseif ( is_single() ) { /* posts */
1017 $post_type = get_post_type( $post->ID );
1018 if ( in_array( $post_type, $pdfprnt_options['button_post_types']['pdf'], true ) || in_array( $post_type, $pdfprnt_options['button_post_types']['print'], true ) ) {
1019 $nothing_else = true;
1020 } else {
1021 return;
1022 }
1023 } else {
1024 $nothing_else = true;
1025 }
1026 if ( $nothing_else ) {
1027 $pdf_query_parameter = 'pdf';
1028 $print_query_parameter = 'print';
1029 }
1030 } else {
1031 $custom_query = new WP_Query( $user_query );
1032 $current_url = add_query_arg( $custom_query->query, '', $current_url );
1033 /* Check for existence the type of posts. */
1034 if ( ! empty( $custom_query->posts ) ) {
1035 foreach ( $custom_query->posts as $post ) {
1036 if ( in_array( get_post_type( $post ), $pdfprnt_options['button_post_types']['pdf'], true ) || in_array( get_post_type( $post ), $pdfprnt_options['button_post_types']['print'], true ) ) {
1037 $is_return = false;
1038 break;
1039 }
1040 }
1041 }
1042 if ( $is_return ) {
1043 return;
1044 }
1045 global $pdfprnt_is_custom_post_type;
1046 $pdfprnt_is_custom_post_type = true;
1047 $pdf_query_parameter = 'pdf-custom';
1048 $print_query_parameter = 'print-custom';
1049 }
1050
1051 $str = '<div class="pdfprnt-buttons pdfprnt-buttons-custom pdfprnt-buttons-' . $post->post_type . ' pdfprnt-' . $pdfprnt_options['buttons_position'] . '">';
1052 $current_url = apply_filters( 'pdfprnt_current_url_filter', $current_url );
1053 if ( $show_button_pdf ) {
1054 $str .= pdfprnt_get_button( 'pdf', $current_url, $pdf_query_parameter );
1055 add_action( 'wp_footer', 'pdfprnt_add_script' );
1056 }
1057 if ( $show_button_print ) {
1058 $str .= pdfprnt_get_button( 'print', $current_url, $print_query_parameter );
1059 }
1060 if ( 1 === $pdfprnt_options['count_generation'] && ( $show_button_pdf || $show_button_print ) ) {
1061 $count = get_post_meta( get_the_ID(), 'pdfprnt_count_generation', true );
1062 $str .= ' <span class="pdfprnt-count-generation">' . $count . '</span>';
1063 }
1064 $str .= '</div>';
1065 return $str;
1066 }
1067 }
1068
1069 if ( ! function_exists( 'pdfprnt_action_links' ) ) {
1070 /**
1071 * Add action links
1072 *
1073 * @param array $links Links array.
1074 * @param string $file Plugin file.
1075 * @return array $links
1076 */
1077 function pdfprnt_action_links( $links, $file ) {
1078 if ( ! is_network_admin() && is_plugin_inactive( 'pdf-print-pro/pdf-print-pro.php' ) ) {
1079 $base = plugin_basename( __FILE__ );
1080 if ( $file === $base ) {
1081 $settings_link = '<a href="admin.php?page=pdf-print.php">' . esc_html__( 'Settings', 'pdf-print' ) . '</a>';
1082 array_unshift( $links, $settings_link );
1083 }
1084 }
1085 return $links;
1086 }
1087 }
1088
1089 if ( ! function_exists( 'pdfprnt_links' ) ) {
1090 /**
1091 * Add Settings, FAQ and Support links
1092 *
1093 * @param array $links Links array.
1094 * @param string $file Plugin file.
1095 * @return array $links
1096 */
1097 function pdfprnt_links( $links, $file ) {
1098 $base = plugin_basename( __FILE__ );
1099 if ( $file === $base ) {
1100 if ( ! is_network_admin() && is_plugin_inactive( 'pdf-print-pro/pdf-print-pro.php' ) ) {
1101 $links[] = '<a href="admin.php?page=pdf-print.php">' . esc_html__( 'Settings', 'pdf-print' ) . '</a>';
1102 }
1103 $links[] = '<a href="https://support.bestwebsoft.com/hc/en-us/sections/200538669" target="_blank">' . esc_html__( 'FAQ', 'pdf-print' ) . '</a>';
1104 $links[] = '<a href="https://support.bestwebsoft.com">' . esc_html__( 'Support', 'pdf-print' ) . '</a>';
1105 }
1106 return $links;
1107 }
1108 }
1109
1110 if ( ! function_exists( 'pdfprnt_admin_head' ) ) {
1111 /**
1112 * Add stylesheets
1113 */
1114 function pdfprnt_admin_head() {
1115 global $pdfprnt_plugin_info, $pdfprnt_options, $post;
1116
1117 if ( is_admin() ) {
1118 wp_enqueue_style( 'pdfprnt_general', plugins_url( 'css/style-general.css', __FILE__ ), false, $pdfprnt_plugin_info['Version'] );
1119
1120 if ( isset( $_GET['page'] ) && 'pdf-print.php' === $_GET['page'] ) {
1121 wp_enqueue_style( 'pdfprnt_stylesheet', plugins_url( 'css/style.css', __FILE__ ), false, $pdfprnt_plugin_info['Version'] );
1122 bws_enqueue_settings_scripts();
1123 bws_plugins_include_codemirror();
1124 wp_enqueue_script( 'pdfprnt_script', plugins_url( 'js/script.js', __FILE__ ), array( 'jquery', 'jquery-ui-accordion', 'jquery-ui-slider' ), $pdfprnt_plugin_info['Version'], false );
1125 wp_localize_script(
1126 'pdfprnt_script',
1127 'pdfprnt_var',
1128 array(
1129 'loading_fonts' => esc_html__( 'Loading of fonts. It might take a several minutes.', 'pdf-print' ),
1130 'loading_mpdf' => esc_html__( 'Loading the mPDF library. It will take few minutes.', 'pdf-print' ),
1131 'ajax_nonce' => wp_create_nonce( 'pdfprnt_ajax_nonce' ),
1132 'need_reload' => '&nbsp;' . sprintf(
1133 esc_html__( 'It is necessary to reload fonts. For more info, please see %s.', 'pdf-print' ),
1134 '<a href="https://support.bestwebsoft.com/hc/en-us/articles/206693223" target="_blank">' . esc_html__( 'FAQ', 'pdf-print' ) . '</a>'
1135 ),
1136 )
1137 );
1138 }
1139 if ( isset( $_GET['page'] ) && 'pdf-print-templates.php' === $_GET['page'] ) {
1140 wp_enqueue_style( 'pdfprnt_stylesheet', plugins_url( 'css/templates.css', __FILE__ ), false, $pdfprnt_plugin_info['Version'] );
1141 }
1142 } elseif ( isset( $post->post_title ) ) {
1143 wp_enqueue_style( 'pdfprnt_frontend', plugins_url( 'css/frontend.css', __FILE__ ), false, $pdfprnt_plugin_info['Version'] );
1144 }
1145 }
1146 }
1147
1148 if ( ! function_exists( 'pdfprnt_add_script' ) ) {
1149 /**
1150 * Sending data for front js
1151 */
1152 function pdfprnt_add_script() {
1153 global $pdfprnt_plugin_info , $post, $pdfprnt_options;
1154 if ( 1 === intval( $pdfprnt_options['image_to_pdf'] ) ) {
1155 $file_name = $post->post_title;
1156 wp_enqueue_script( 'html2canvas.js', plugins_url( 'js/html2canvas.js', __FILE__ ), array(), $pdfprnt_plugin_info['Version'], false );
1157 wp_enqueue_script( 'jspdf.js', plugins_url( 'js/jspdf.js', __FILE__ ), array(), $pdfprnt_plugin_info['Version'], false );
1158 wp_enqueue_script( 'pdfprnt_front_script', plugins_url( 'js/front-script.js', __FILE__ ), array( 'jquery', 'html2canvas.js', 'jspdf.js' ), $pdfprnt_plugin_info['Version'] . '.7', false );
1159 wp_localize_script(
1160 'pdfprnt_front_script',
1161 'pdfprnt_file_settings',
1162 array(
1163 'margin_left' => $pdfprnt_options['pdf_margins']['left'],
1164 'margin_right' => $pdfprnt_options['pdf_margins']['right'],
1165 'margin_top' => $pdfprnt_options['pdf_margins']['top'],
1166 'margin_bottom' => $pdfprnt_options['pdf_margins']['bottom'],
1167 'page_size' => $pdfprnt_options['pdf_page_size'],
1168 'file_action' => $pdfprnt_options['file_action'],
1169 'file_name' => $file_name,
1170 'hide_classes' => implode( ', ', $pdfprnt_options['hide_classes'] ),
1171 'ajax_nonce' => wp_create_nonce( 'pdfprnt_ajax_nonce' ),
1172 'ajaxurl' => admin_url( 'admin-ajax.php' ),
1173 'count_generation' => $pdfprnt_options['count_generation']
1174 )
1175 );
1176 }
1177 }
1178 }
1179
1180 if ( ! function_exists( 'pdfprnt_preg_replace' ) ) {
1181 /**
1182 * Remove inline 'font-family' and 'font' styles from content
1183 *
1184 * @param array $patterns Patterns array.
1185 * @param string $content Post content.
1186 * @return string $content
1187 */
1188 function pdfprnt_preg_replace( $patterns, $content ) {
1189 foreach ( $patterns as $pattern ) {
1190 $content = preg_replace( '/' . $pattern . '(.*?);/', '', $content );
1191 preg_match_all( "~style=(\"\'?)~", $content, $quotes );/* get array with quotes */
1192 if ( isset( $quotes[1] ) && ! empty( $quotes[1] ) ) {
1193 foreach ( $quotes[1] as $quote ) {
1194 preg_match_all( '~style=' . $quote . '(.*?)' . $quote . '~', $content, $styles );
1195 if ( ! empty( $styles[1] ) ) {
1196 foreach ( $styles[1] as $style ) {
1197 if ( preg_match( '/' . $pattern . '/', $style ) ) {
1198 $content = preg_replace( '/' . $style . '/', '', $content );
1199 }
1200 }
1201 }
1202 }
1203 }
1204 }
1205 return $content;
1206 }
1207 }
1208
1209 if ( ! function_exists( 'pdfprnt_generate_template' ) ) {
1210 /**
1211 * Generate templates for pdf file or print
1212 *
1213 * @param string $content Post content.
1214 * @param bool $is_print (Optional) Flag for print version.
1215 * @return string $html
1216 */
1217 function pdfprnt_generate_template( $content, $is_print = false ) {
1218 global $pdfprnt_options, $wp_locale, $post;
1219 $html =
1220 '<html>
1221 <head>';
1222 $html .= apply_filters( 'pdfprnt_add_meta_tag_robots', $html );
1223 if ( $is_print && $post instanceof WP_Post ) {
1224 if ( is_archive() || is_category() || is_tax() || is_tag() || is_author() || ! pdfprnt_is_user_role_enabled() ) {
1225 $title = ( function_exists( 'get_the_archive_title' ) ) ? get_the_archive_title() : wp_title( '', false );
1226 } elseif ( is_search() ) {
1227 $title = sprintf( esc_html__( 'Search Results for: %s', 'pdf-print' ), get_search_query() );
1228 } else {
1229 $title = get_the_title();
1230 }
1231 $html .= sprintf(
1232 '<title>%s - %s</title>',
1233 wp_strip_all_tags( $title ),
1234 get_bloginfo( 'name' )
1235 );
1236 }
1237 if ( ! empty( $pdfprnt_options['use_default_css'] ) && 1 === intval( $pdfprnt_options['use_default_css'] ) ) {
1238 /* remove 'font-family' and 'font' styles from theme css-file if additional fonts not loaded */
1239 if ( 0 === intval( $pdfprnt_options['additional_fonts'] ) ) {
1240 $css = wp_remote_get( get_bloginfo( 'stylesheet_url' ) );
1241 if ( is_array( $css ) && ! empty( $css['body'] ) ) {
1242 $html .= '<style type="text/css">' . preg_replace( '/(font:(.*?);)|(font-family(.*?);)/', '', $css['body'] ) . '</style>';
1243 }
1244 } else {
1245 $html .= '<link type="text/css" rel="stylesheet" href="' . get_bloginfo( 'stylesheet_url' ) . '" media="all" />';
1246 }
1247 } else {
1248 $html .= '<link type="text/css" rel="stylesheet" href="' . plugins_url( 'css/default.css', __FILE__ ) . '" media="all" />';
1249 }
1250 $html .= pdfprnt_additional_styles( $is_print );
1251 if ( 1 === intval( $pdfprnt_options['use_custom_css'] ) && ! empty( $pdfprnt_options['custom_css_code'] ) ) {
1252 $html .= '<style type="text/css">' . $pdfprnt_options['custom_css_code'] . '</style>';
1253 }
1254 if ( $is_print && 1 === intval( $pdfprnt_options['show_print_window'] ) ) {
1255 $html .= '<script>window.onload = function(){ window.print(); };</script>';
1256 }
1257 if ( ! empty( $pdfprnt_options['hide_classes'] ) ) {
1258 $html .= '<style>' . implode( ',', $pdfprnt_options['hide_classes'] ) . '{ display: none; }</style>';
1259 }
1260 $html .= apply_filters( 'pdfprnt_woocommerce_layout', $html, $is_print );
1261 $html .=
1262 '</head>
1263 <body class="' . ( $is_print ? 'pdfprnt_print ' : '' ) . $wp_locale->text_direction . '">';
1264 /* Remove inline 'font-family' and 'font' styles from content */
1265 if ( 0 === intval( $pdfprnt_options['additional_fonts'] ) ) {
1266 $content = pdfprnt_preg_replace( array( 'font-family', 'font:' ), $content );
1267 }
1268 if ( function_exists( 'has_blocks' ) && has_blocks( $content ) ) {
1269 $content = preg_replace( '/\s?<!--.*-->\s?/', '', $content );
1270 $content = preg_replace( '~<p></p>~', '', $content );
1271 }
1272 $html .= $content .
1273 '</body>
1274 </html>';
1275 return $html;
1276 }
1277 }
1278
1279 if ( ! function_exists( 'pdfprnt_additional_styles' ) ) {
1280 /**
1281 * Additinal styles for plugin
1282 *
1283 * @param bool $is_print Flag for print version.
1284 * @return string $html
1285 */
1286 function pdfprnt_additional_styles( $is_print ) {
1287 $styles = apply_filters( 'bwsplgns_add_pdf_print_styles', array() );
1288 $html = '';
1289 if ( ! empty( $styles ) && is_array( $styles ) ) {
1290 $url = get_bloginfo( 'url' );
1291 require_once ABSPATH . 'wp-admin/includes/file.php';
1292 $path = get_home_path();
1293 foreach ( $styles as $style ) {
1294 if ( ! empty( $style[0] ) && file_exists( $path . $style[0] ) ) {
1295 /* if "get print" */
1296 if ( $is_print ) {
1297 if ( ( isset( $style[1] ) && 'print' === $style[1] ) || ! isset( $style[1] ) ) {
1298 $html .= '<link type="text/css" rel="stylesheet" href="' . $url . '/' . $style[0] . '" media="all" />';
1299 }
1300 /* if "get pdf" */
1301 } else {
1302 if ( ( isset( $style[1] ) && 'pdf' === $style[1] ) || ! isset( $style[1] ) ) {
1303 $html .= '<link type="text/css" rel="stylesheet" href="' . $url . '/' . $style[0] . '" media="all" />';
1304 }
1305 }
1306 }
1307 }
1308 }
1309 return $html;
1310 }
1311 }
1312
1313 if ( ! function_exists( 'pdfprnt_print' ) ) {
1314 /**
1315 * Output print page or pdf document and include plugin script
1316 *
1317 * @param string $query Query for post.
1318 */
1319 function pdfprnt_print( $query ) {
1320 global $pdfprnt_options, $posts, $post, $pdfprnt_is_old_php, $pdfprnt_links;
1321 $print = get_query_var( 'print' );
1322
1323 if ( $pdfprnt_is_old_php || empty( $print ) || ! pdfprnt_is_user_role_enabled() || post_password_required() ) {
1324 return;
1325 }
1326
1327 if ( apply_filters( 'bwsplgns_remove_content_filters', true ) ) {
1328 remove_all_filters( 'the_content' );
1329 add_filter( 'the_content', 'capital_P_dangit', 11 );
1330 add_filter( 'the_content', 'wptexturize' );
1331 add_filter( 'the_content', 'convert_smilies' );
1332 add_filter( 'the_content', 'convert_chars' );
1333 add_filter( 'the_content', 'wpautop' );
1334
1335 if ( ! class_exists( 'WP_Embed' ) ) {
1336 require_once ABSPATH . WPINC . '/class-wp-embed.php';
1337 }
1338 new WP_Embed();
1339 }
1340 do_action( 'bwsplgns_pdf_print_the_content' );
1341 if ( 1 === intval( $pdfprnt_options['do_shorcodes'] ) ) {
1342 add_filter( 'the_content', 'do_shortcode' );
1343 $pattern = false;
1344 } else {
1345 $pattern = get_shortcode_regex();
1346 }
1347
1348 $doc_type = explode( '-', $print );
1349
1350 if ( ! is_array( $doc_type ) ) {
1351 return;
1352 }
1353
1354 /* for search or archives */
1355 if ( isset( $doc_type[1] ) ) {
1356 switch ( $doc_type[1] ) {
1357 case 'custom':
1358 $url_data = isset( $_SERVER['REQUEST_URI'] ) ? wp_parse_url( sanitize_text_field( wp_unslash( urldecode( $_SERVER['REQUEST_URI'] ) ) ) ) : array();
1359 parse_str( $url_data['query'], $args );
1360 unset( $args['print'] );
1361 if ( ! empty( $args ) ) {
1362 $posts = query_posts( $args );
1363 }
1364 break;
1365 case 'search':
1366 do_action( 'pdfprnt_rewrite_posts_woocommerce' );
1367 break;
1368 default:
1369 break;
1370 }
1371 /* for single posts or pages */
1372 } elseif (
1373 ( is_ssl() ? 'https://' : 'http://' ) . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) . sanitize_text_field( wp_unslash( urldecode( $_SERVER['REQUEST_URI'] ) ) ) === get_home_url() . '/?print=' . $doc_type[0]
1374 &&
1375 'page' === get_option( 'show_on_front' )
1376 ) {
1377 $post_id = get_option( 'page_on_front' );
1378 $posts = query_posts( array( 'page_id' => $post_id ) );
1379 } else {
1380 if ( ! is_home() ) {
1381 $posts = array( $post );
1382 $count_generation = get_post_meta( $post->ID, 'pdfprnt_count_generation', true );
1383 update_post_meta( $post->ID, 'pdfprnt_count_generation', (int) ++$count_generation );
1384 }
1385 }
1386
1387 switch ( $doc_type[0] ) {
1388 case 'pdf':
1389 /* set path to directory with fonts */
1390 if ( ! ( 0 === intval( $pdfprnt_options['additional_fonts'] ) && defined( '_MPDF_SYSTEM_TTFONTS' ) ) ) {
1391 if ( is_multisite() ) {
1392 switch_to_blog( 1 );
1393 $upload_dir = wp_upload_dir();
1394 restore_current_blog();
1395 } else {
1396 $upload_dir = wp_upload_dir();
1397 }
1398 @define( '_MPDF_SYSTEM_TTFONTS', $upload_dir['basedir'] . '/pdf-print-fonts/' );
1399 }
1400
1401 /* prepare data */
1402 $titles = array();
1403 $authors = array();
1404 $default_font = 0 === intval( $pdfprnt_options['additional_fonts'] ) ? 'dejavusansmono' : '';
1405 $last = count( $posts );
1406 $i = 1;
1407 $html = '<div id="content">';
1408 foreach ( $posts as $p ) {
1409 if ( function_exists( 'et_theme_builder_get_template_layouts' ) && function_exists( 'et_theme_builder_frontend_render_header' ) ) {
1410 $layouts = et_theme_builder_get_template_layouts();
1411 ob_start();
1412 et_theme_builder_frontend_render_header(
1413 $layouts[ ET_THEME_BUILDER_HEADER_LAYOUT_POST_TYPE ]['id'],
1414 $layouts[ ET_THEME_BUILDER_HEADER_LAYOUT_POST_TYPE ]['enabled'],
1415 $layouts[ ET_THEME_BUILDER_TEMPLATE_POST_TYPE ]
1416 );
1417 $html .= ob_get_clean();
1418 }
1419 $title_filter = apply_filters( 'bwsplgns_get_pdf_print_title', apply_filters( 'the_title', $p->post_title, $p->ID ), $p );
1420 $titles[] = $title_filter;
1421 $user_info = get_userdata( $p->post_author );
1422 $authors[] = $user_info->display_name;
1423 $title = 1 === intval( $pdfprnt_options['show_title'] ) ? '<div class="entry-header"><h1 class="entry-title"><a href="' . get_permalink( $p ) . '">' . $title_filter . '</a></h1></div>' : '';
1424 $image = 1 === intval( $pdfprnt_options['show_featured_image'] ) && has_post_thumbnail( $p->ID ) ? '<div class="entry-thumbnail">' . get_the_post_thumbnail( $p->ID, $pdfprnt_options['featured_image_size'] ) . '</div>' : '';
1425 $date = 1 === intval( $pdfprnt_options['show_date'] ) ? '<span class="entry-date">' . get_the_date( get_option( 'date_format' ) ) . '</span>' : '';
1426 $author = 1 === intval( $pdfprnt_options['show_author'] ) ? '<span class="entry-author">' . esc_html__( 'written by', 'pdf-print' ) . ' ' . get_the_author_meta( 'display_name', $p->post_author ) . '</span>' : '';
1427 $category = 1 === intval( $pdfprnt_options['show_category'] ) && has_category( '', $p->ID ) ? '<div class="entry-category">' . __( 'Category', 'pdf-print-pro' ) . ': ' . implode( ',', wp_get_post_categories( $p->ID, array( 'fields' => 'names' ) ) ) . '</div>' : '';
1428 /* replacing shortcodes to an empty string which were added to the content */
1429 if ( $pattern && preg_match_all( '/' . $pattern . '/s', $p->post_content, $matches ) ) {
1430 foreach ( array_unique( $matches[0] ) as $value ) {
1431 $p->post_content = str_replace( $value, '', $p->post_content );
1432 }
1433 }
1434 if ( 1 === intval( $pdfprnt_options['remove_links'] ) ) {
1435 $p->post_content = preg_replace( '~<a\b[^>]*+>|</a\b[^>]*+>~', '$2', $p->post_content );
1436 $p->post_content = preg_replace( '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '', $p->post_content );
1437 }
1438 if ( 1 === intval( $pdfprnt_options['disable_links'] ) ) {
1439 $html .= '<style> a {text-decoration: none; color:#000000 !important; } </style>';
1440 }
1441
1442 $post_visible = ( ! empty( $p->post_excerpt ) && ! is_singular() ) ? $p->post_excerpt : $p->post_content;
1443 $post_content = apply_filters( 'bwsplgns_get_pdf_print_content', $post_visible, $p );
1444 $shortcodes = implode( '|', apply_filters( 'bwsplgns_pdf_print_remove_shortcodes', array( 'vc_', 'az_', 'multilanguage_switcher' ) ) );
1445 $post_content = preg_replace( "/\[\/?({$shortcodes})[^\]]*?\]/", '', $post_content );
1446 $post_content = apply_filters( 'the_content', $post_content );
1447 $post_content = apply_filters( 'bwsplgns_pdf_customize_content', $post_content );
1448 $post_content = apply_filters( 'bwsplgns_pdf_replace_content', $post_content );
1449 $separator = '';
1450 if ( ! empty( $author ) && ! empty( $date ) ) {
1451 $separator = ' | ';
1452 }
1453 $html .=
1454 '<div class="post">' .
1455 $title .
1456 $category .
1457 '<div class="postmetadata">' . $author . $separator . $date . '</div>' .
1458 $image .
1459 '<div class="entry-content">' . $post_content . '</div>
1460 </div>';
1461 if ( $i !== $last ) {
1462 $html .= '<br/><hr/><br/>';
1463 $i ++;
1464 }
1465 }
1466 if ( function_exists( 'et_theme_builder_get_template_layouts' ) && function_exists( 'et_theme_builder_frontend_render_footer' ) ) {
1467 ob_start();
1468 et_theme_builder_frontend_render_footer(
1469 $layouts[ ET_THEME_BUILDER_FOOTER_LAYOUT_POST_TYPE ]['id'],
1470 $layouts[ ET_THEME_BUILDER_FOOTER_LAYOUT_POST_TYPE ]['enabled'],
1471 $layouts[ ET_THEME_BUILDER_TEMPLATE_POST_TYPE ]
1472 );
1473 $html .= ob_get_clean();
1474 }
1475 $html .= '</div>';
1476 $titles = array_unique( $titles );
1477 $authors = array_unique( $authors );
1478
1479 $pdfprnt_links = $pdfprnt_options['disable_links'];
1480
1481 /* generate PDF-document */
1482 $path = $upload_dir['basedir'] . '/vendor/mpdf';
1483 $is_installed = file_exists( $path );
1484 if ( $is_installed ) {
1485 /* Implement mPDF v7.1.5 */
1486 if ( ! class_exists( '\Mpdf\Mpdf' ) ) {
1487 include $upload_dir['basedir'] . '/vendor/autoload.php';
1488 }
1489 $mpdf_config = array(
1490 'mode' => '+aCJK',
1491 'format' => $pdfprnt_options['pdf_page_size'],
1492 'default_font_size' => 0,
1493 'default_font' => $default_font,
1494 'margin_left' => $pdfprnt_options['pdf_margins']['left'],
1495 'margin_right' => $pdfprnt_options['pdf_margins']['right'],
1496 'margin_top' => $pdfprnt_options['pdf_margins']['top'],
1497 'margin_bottom' => $pdfprnt_options['pdf_margins']['bottom'],
1498 );
1499 $mpdf = new \Mpdf\Mpdf( $mpdf_config );
1500
1501 } else {
1502 include dirname( __FILE__ ) . '/mpdf/mpdf.php';
1503 $mpdf = new mPDF(
1504 '+aCJK',
1505 $pdfprnt_options['pdf_page_size'],
1506 0,
1507 $default_font,
1508 $pdfprnt_options['pdf_margins']['left'],
1509 $pdfprnt_options['pdf_margins']['right'],
1510 $pdfprnt_options['pdf_margins']['top'],
1511 $pdfprnt_options['pdf_margins']['bottom']
1512 );
1513 }
1514 $mpdf->allow_charset_conversion = true;
1515 $mpdf->charset_in = get_bloginfo( 'charset' );
1516 if ( 0 !== intval( $pdfprnt_options['additional_fonts'] ) ) {
1517 $mpdf->autoScriptToLang = true;
1518 $mpdf->autoLangToFont = true;
1519 $mpdf->baseScript = 1;
1520 $mpdf->autoVietnamese = true;
1521 $mpdf->autoArabic = true;
1522 }
1523 if ( is_rtl() ) {
1524 $mpdf->SetDirectionality( 'rtl' );
1525 }
1526 $mpdf->SetTitle( htmlspecialchars_decode( implode( ',', $titles ) ) );
1527 $mpdf->SetAuthor( implode( ',', $authors ) );
1528 $mpdf->SetSubject( get_bloginfo( 'blogdescription' ) );
1529 $mpdf->WriteHTML( pdfprnt_generate_template( $html ) );
1530 do_action_ref_array( 'bwsplgns_mpdf', array( &$mpdf ) );
1531 if ( 'download' === $pdfprnt_options['file_action'] ) {
1532 $mpdf->Output( '', 'D' );
1533 } else {
1534 $mpdf->Output();
1535 }
1536 die();
1537 break;
1538 case 'print':
1539 $last = count( $posts );
1540 $i = 1;
1541 $html = '<div id="content">';
1542 foreach ( $posts as $p ) {
1543 if ( function_exists( 'et_theme_builder_get_template_layouts' ) && function_exists( 'et_theme_builder_frontend_render_header' ) ) {
1544 $layouts = et_theme_builder_get_template_layouts();
1545 ob_start();
1546 et_theme_builder_frontend_render_header(
1547 $layouts[ ET_THEME_BUILDER_HEADER_LAYOUT_POST_TYPE ]['id'],
1548 $layouts[ ET_THEME_BUILDER_HEADER_LAYOUT_POST_TYPE ]['enabled'],
1549 $layouts[ ET_THEME_BUILDER_TEMPLATE_POST_TYPE ]
1550 );
1551 $html .= ob_get_clean();
1552 }
1553
1554 $title = 1 === intval( $pdfprnt_options['show_title'] ) ? '<div class="entry-header"><h1 class="entry-title">' . apply_filters( 'bwsplgns_get_pdf_print_title', apply_filters( 'the_title', $p->post_title, $p->ID ), $p ) . '</h1></div>' : '';
1555 $image = 1 === intval( $pdfprnt_options['show_featured_image'] ) && has_post_thumbnail( $p->ID ) ? '<div class="entry-thumbnail">' . get_the_post_thumbnail( $p->ID, $pdfprnt_options['featured_image_size'] ) . '</div>' : '';
1556 $date = 1 === intval( $pdfprnt_options['show_date'] ) ? '<span class="entry-date">' . get_the_date( get_option( 'date_format' ) ) . '</span>' : '';
1557 $author = 1 === intval( $pdfprnt_options['show_author'] ) ? '<span class="entry-author">' . esc_html__( 'written by', 'pdf-print' ) . ' ' . get_the_author_meta( 'display_name', $p->post_author ) . '</span>' : '';
1558 $category = 1 === intval( $pdfprnt_options['show_category'] ) && has_category( '', $p->ID ) ? '<div class="entry-category">' . __( 'Category', 'pdf-print-pro' ) . ': ' . implode( ',', wp_get_post_categories( $p->ID, array( 'fields' => 'names' ) ) ) . '</div>' : '';
1559 /* replacing shortcodes to an empty string which were added to the content */
1560 if ( $pattern && preg_match_all( '/' . $pattern . '/s', $p->post_content, $matches ) ) {
1561 foreach ( array_unique( $matches[0] ) as $value ) {
1562 $p->post_content = str_replace( $value, '', $p->post_content );
1563 }
1564 }
1565 if ( 1 === intval( $pdfprnt_options['remove_links'] ) ) {
1566 $p->post_content = preg_replace( '~<a\b[^>]*+>|</a\b[^>]*+>~', '$2', $p->post_content );
1567 $p->post_content = preg_replace( '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '', $p->post_content );
1568 }
1569 if ( 1 === intval( $pdfprnt_options['disable_links'] ) ) {
1570 $html .= '<style> a {text-decoration: none; color:#000000 !important; } </style>';
1571 }
1572
1573 $post_content = apply_filters( 'bwsplgns_get_pdf_print_content', $p->post_content, $p );
1574 $shortcodes = implode( '|', apply_filters( 'bwsplgns_pdf_print_remove_shortcodes', array( 'vc_', 'az_', 'multilanguage_switcher' ) ) );
1575 $post_content = preg_replace( "/\[\/?({$shortcodes})[^\]]*?\]/", '', $post_content );
1576 $post_content = apply_filters( 'the_content', $post_content );
1577 $separator = '';
1578
1579 if ( ! empty( $author ) && ! empty( $date ) ) {
1580 $separator = ' | ';
1581 }
1582
1583 ob_start();
1584 ?>
1585 <div class="post">
1586 <?php
1587 echo wp_kses_post( $title ) .
1588 wp_kses_post( $category ) .
1589 '<div class="postmetadata">' . wp_kses_post( $author . $separator . $date ) . '</div>' .
1590 wp_kses_post( $image );
1591 ?>
1592 <div class="entry-content"><?php echo $post_content; ?></div>
1593 </div>
1594 <?php
1595 $html .= ob_get_clean();
1596 if ( $i !== $last ) {
1597 $html .= '<br/><hr/><br/>';
1598 $i ++;
1599 }
1600 }
1601 if ( function_exists( 'et_theme_builder_get_template_layouts' ) && function_exists( 'et_theme_builder_frontend_render_footer' ) ) {
1602 ob_start();
1603 et_theme_builder_frontend_render_footer(
1604 $layouts[ ET_THEME_BUILDER_FOOTER_LAYOUT_POST_TYPE ]['id'],
1605 $layouts[ ET_THEME_BUILDER_FOOTER_LAYOUT_POST_TYPE ]['enabled'],
1606 $layouts[ ET_THEME_BUILDER_TEMPLATE_POST_TYPE ]
1607 );
1608 $html .= ob_get_clean();
1609 }
1610 $html .= '</div>';
1611 echo pdfprnt_generate_template( $html, true );
1612 die();
1613 default:
1614 break;
1615 }
1616 }
1617 }
1618
1619 if ( ! function_exists( 'pdfprnt_print_vars_callback' ) ) {
1620 /**
1621 * Add query vars
1622 *
1623 * @param array $query_vars Query vars array.
1624 */
1625 function pdfprnt_print_vars_callback( $query_vars ) {
1626 $query_vars[] = 'print';
1627 return $query_vars;
1628 }
1629 }
1630
1631 if ( class_exists( 'ZipArchive' ) && ! class_exists( 'Pdfprnt_ZipArchive' ) ) {
1632 /**
1633 * Class Pdfprnt_ZipArchive for extracting
1634 * necessary folder from zip-archive
1635 */
1636 class Pdfprnt_ZipArchive extends ZipArchive {
1637 /**
1638 * Constructor of class
1639 *
1640 * @param string $destination Directory for zip.
1641 * @param string $subdir Subdirectory for zip.
1642 */
1643 public function extractSubdirTo( $destination, $subdir ) {
1644 $errors = array();
1645 $charset = get_bloginfo( 'charset' );
1646 /* Prepare dirs */
1647 $destination = str_replace( array( '/', '\\' ), DIRECTORY_SEPARATOR, $destination );
1648 $subdir = str_replace( array( '/', '\\' ), '/', $subdir );
1649
1650 if ( substr( $destination, mb_strlen( DIRECTORY_SEPARATOR, $charset ) * -1 ) !== DIRECTORY_SEPARATOR ) {
1651 $destination .= DIRECTORY_SEPARATOR;
1652 }
1653
1654 if ( substr( $subdir, -1 ) !== '/' ) {
1655 $subdir .= '/';
1656 }
1657 /* Extract files */
1658 for ( $i = 0; $i < $this->numFiles; $i++ ) {
1659 $filename = $this->getNameIndex( $i );
1660
1661 if ( substr( $filename, 0, mb_strlen( $subdir, $charset ) ) === $subdir ) {
1662 $relative_path = substr( $filename, mb_strlen( $subdir, $charset ) );
1663 $relative_path = str_replace( array( '/', '\\' ), DIRECTORY_SEPARATOR, $relative_path );
1664
1665 if ( mb_strlen( $relative_path, $charset ) > 0 ) {
1666 if ( substr( $filename, -1 ) === '/' ) {
1667 if ( ! is_dir( $destination . $relative_path ) ) {
1668 if ( ! @mkdir( $destination . $relative_path, 0755, true ) ) {
1669 $errors[ $i ] = $filename;
1670 }
1671 }
1672 } else {
1673 if ( dirname( $relative_path ) !== '.' ) {
1674 if ( ! is_dir( $destination . dirname( $relative_path ) ) ) {
1675 /* New dir (for file) */
1676 @mkdir( $destination . dirname( $relative_path ), 0755, true );
1677 }
1678 }
1679 /* New file */
1680 if ( @file_put_contents( $destination . $relative_path, $this->getFromIndex( $i ) ) === false ) {
1681 $errors[ $i ] = $filename;
1682 }
1683 }
1684 }
1685 }
1686 }
1687 return $errors;
1688 }
1689 }
1690 }
1691
1692 if ( ! function_exists( 'pdfprnt_download_zip' ) ) {
1693 /**
1694 * Download Zip
1695 *
1696 * @param array $zip_file Zip file name.
1697 * @param array $upload_dir Path for upload directory.
1698 * @param array $url Url for Curl.
1699 * @return array $result
1700 */
1701 function pdfprnt_download_zip( $zip_file, $upload_dir, $url ) {
1702 /* Check permissions */
1703 if ( is_writable( $upload_dir ) ) {
1704 /* Load ZIP-archive */
1705 $result = array();
1706 $fp = fopen( $zip_file, 'w+' );
1707 /* File size is too big to use wp_remote_get function */
1708 $curl = curl_init();
1709 $curl_parametres = array(
1710 CURLOPT_URL => $url,
1711 CURLOPT_FILE => $fp,
1712 CURLOPT_USERAGENT => ( isset( $_SERVER['HTTP_USER_AGENT'] ) ? sanitize_text_field( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ) : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0' ),
1713 );
1714 curl_setopt_array( $curl, $curl_parametres );
1715 if ( curl_exec( $curl ) ) {
1716 $result['done'] = 'ok';
1717 } else {
1718 $result['error'] = curl_error( $curl ) . '<br />' . esc_html__( 'Check your internet connection', 'pdf-print' );
1719 }
1720 curl_close( $curl );
1721 fclose( $fp );
1722 } else {
1723 $result['error'] = esc_html__( 'Cannot load files in to "uploads" folder. Check your permissions', 'pdf-print' );
1724 }
1725 return $result;
1726 }
1727 }
1728
1729 if ( ! function_exists( 'pdfprnt_copy_fonts' ) ) {
1730 /**
1731 * Extract additional fonts to uploads/pdf-print-fonts
1732 *
1733 * @param string $zip_file Path to zip archive.
1734 * @param string $upload_dir Name for zip archive.
1735 */
1736 function pdfprnt_copy_fonts( $zip_file, $upload_dir ) {
1737 global $pdfprnt_options;
1738 if ( empty( $pdfprnt_options ) ) {
1739 $pdfprnt_options = get_option( 'pdfprnt_options' );
1740 }
1741 $destination = $upload_dir . '/pdf-print-fonts';
1742 if ( ! file_exists( $destination ) ) {
1743 mkdir( $destination, 0755, true );
1744 }
1745 $result = array();
1746 /* check permissions */
1747 if ( is_writable( $destination ) ) {
1748 $zip = new Pdfprnt_ZipArchive();
1749 /* open zip-archive */
1750 if ( true === $zip->open( $zip_file ) ) {
1751 /* extract folder with fonts */
1752 $errors = $zip->extractSubdirTo( $destination, 'mpdf-master/ttfonts' );
1753 $zip->close();
1754 if ( empty( $errors ) ) {
1755 $result['done'] = esc_html__( 'Additional fonts were loaded successfully.', 'pdf-print' );
1756 unlink( $zip_file );
1757 } else {
1758 $result['error'] = esc_html__( 'Some errors occurred during loading files.', 'pdf-print' );
1759 }
1760 } else {
1761 $result['error'] = esc_html__( 'Can not extract files from zip-archive.', 'pdf-print' );
1762 unlink( $zip_file );
1763 }
1764 } else {
1765 $result['error'] = sprintf( esc_html__( 'Cannot create %s folder. Check your permissions.', 'pdf-print' ), '"uploads/pdf-print-fonts"' );
1766 }
1767 $files = scandir( $destination );
1768 $value = isset( $result['error'] ) ? -1 : count( $files );
1769 $opt = 'additional_fonts';
1770 pdfprnt_update_option( $opt, $value, true );
1771 return $result;
1772 }
1773 }
1774
1775
1776 if ( ! function_exists( 'pdfprnt_extract_mpdf_library' ) ) {
1777 /**
1778 * Extract mPDF library ( verson 7.1.5 ) from zip-archive
1779 *
1780 * @param string $zip_file Path to zip-archive.
1781 * @param string $upload_dir Path to "Upload" folder.
1782 * @return string $result Result message.
1783 */
1784 function pdfprnt_extract_mpdf_library( $zip_file, $upload_dir ) {
1785 global $wpdb;
1786
1787 $result = array();
1788 /* check permissions */
1789 if ( is_writable( $upload_dir ) ) {
1790 $zip = new Pdfprnt_ZipArchive();
1791 /* open zip-archive */
1792 if ( true === $zip->open( $zip_file ) ) {
1793 /* extract folder with fonts */
1794 $errors = $zip->extractSubdirTo( $upload_dir, 'mpdf' );
1795 $zip->close();
1796 if ( empty( $errors ) ) {
1797 $options_default = pdfprnt_get_options_default();
1798 $value = $options_default['mpdf_library_version'];
1799 $result['done'] = esc_html__( 'The mPDF library has been loaded successfully.', 'pdf-print' );
1800 unlink( $zip_file );
1801 } else {
1802 $result['error'] = esc_html__( 'Some errors occurred during loading files.', 'pdf-print' );
1803 }
1804 } else {
1805 $result['error'] = esc_html__( 'Can not extract files from zip-archive.', 'pdf-print' );
1806 unlink( $zip_file );
1807 }
1808 } else {
1809 $result['error'] = sprintf( esc_html__( 'Cannot extract files into %s folder. Check your permissions.', 'pdf-print' ), $upload_dir );
1810 }
1811 if ( ! isset( $value ) ) {
1812 $value = '6.1';
1813 }
1814
1815 $opt = 'mpdf_library_version';
1816 pdfprnt_update_option( $opt, $value, true );
1817 return $result;
1818 }
1819 }
1820
1821 if ( ! function_exists( 'pdfprnt_load_and_copy' ) ) {
1822 /**
1823 * Download ZIP-archive with MPDF library,
1824 * copy fonts to folder 'pdf-print-fons'
1825 *
1826 * @param string $zip_file path to zip-archive.
1827 * @param string $upload_dir path to "Upload" folder.
1828 * @param boolean $url url for archive.
1829 * @param boolean $old_dir old dir for archive.
1830 * @return string $result result message.
1831 */
1832 function pdfprnt_load_and_copy( $zip_file, $upload_dir, $url, $old_dir = '' ) {
1833 $result = file_exists( $zip_file ) ? array( 'done' => 'ok' ) : pdfprnt_download_zip( $zip_file, $upload_dir, $url );
1834 if ( is_multisite() ) {
1835 switch_to_blog( 1 );
1836 $dir = wp_upload_dir();
1837 restore_current_blog();
1838 } else {
1839 $dir = wp_upload_dir();
1840 }
1841 if ( ! empty( $old_dir ) && plugin_dir_path( __FILE__ ) . 'mpdf' === $old_dir && isset( $result['done'] ) ) {
1842 $result = pdfprnt_extract_mpdf_library( $zip_file, $upload_dir );
1843 } elseif ( isset( $result['done'] ) ) {
1844 $result = pdfprnt_copy_fonts( $zip_file, $upload_dir );
1845 }
1846 return $result;
1847 }
1848 }
1849
1850
1851 if ( ! function_exists( 'pdfprnt_load_fonts' ) ) {
1852 /**
1853 * Function to load fonts for MPDF library
1854 */
1855 function pdfprnt_load_fonts() {
1856 global $pdfprnt_options;
1857 if ( empty( $pdfprnt_options ) ) {
1858 $pdfprnt_options = get_option( 'pdfprnt_options' );
1859 }
1860 $ajax_request = isset( $_REQUEST['action'] ) && 'pdfprnt_load_fonts' === sanitize_text_field( wp_unslash( $_REQUEST['action'] ) ) ? true : false;
1861 $php_request = isset( $_REQUEST['pdfprnt_action'] ) && 'pdfprnt_load_fonts' === sanitize_text_field( wp_unslash( $_REQUEST['pdfprnt_action'] ) ) ? true : false;
1862 $verified = isset( $_REQUEST['pdfprnt_ajax_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['pdfprnt_ajax_nonce'] ) ), 'pdfprnt_ajax_nonce' ) ? true : false;
1863 /* Sourse of the fonts */
1864 $url = 'https://bestwebsoft.com/wp-content/plugins/paid-products/plugins/fontdownloads/?action=loading_fonts';
1865 if ( ( $ajax_request || $php_request ) && $verified ) {
1866 $result = array();
1867 $flag = false;
1868 /* get path to directory for ZIP-archive uploading */
1869 if ( is_multisite() ) {
1870 switch_to_blog( 1 );
1871 $upload_dir = wp_upload_dir();
1872 restore_current_blog();
1873 } else {
1874 $upload_dir = wp_upload_dir();
1875 }
1876 $zip_file = $upload_dir['basedir'] . '/mpdf-master.zip';
1877 $destination = $upload_dir['basedir'] . '/pdf-print-fonts';
1878 if ( file_exists( $destination ) ) { /* if folder with fonts already exists */
1879 if ( is_multisite() ) {
1880 $network_options = get_site_option( 'pdfprnt_options' ); /* get network options */
1881 $files = scandir( $destination );
1882 if ( intval( $network_options['additional_fonts'] ) === count( $files ) ) { /* if all fonts was loaded successfully */
1883 $result['done'] = esc_html__( 'Additional fonts were loaded successfully.', 'pdf-print' );
1884 $opt = 'additional_fonts';
1885 pdfprnt_update_option( $opt, $network_options['additional_fonts'], true );
1886 } else { /* if something wrong */
1887 $result = pdfprnt_load_and_copy( $zip_file, $upload_dir['basedir'], $url ); /* load fonts */
1888 }
1889 } else {
1890 $result = pdfprnt_load_and_copy( $zip_file, $upload_dir['basedir'], $url ); /* load fonts */
1891 }
1892 } else {
1893 mkdir( $destination, 0755, true );
1894 $result = pdfprnt_load_and_copy( $zip_file, $upload_dir['basedir'], $url );
1895 }
1896 if ( $ajax_request ) {
1897 echo wp_json_encode( $result );
1898 } else {
1899 return $result;
1900 }
1901 }
1902 if ( $ajax_request ) {
1903 die();
1904 }
1905 }
1906 }
1907
1908 if ( ! function_exists( 'pdfprnt_upgrade_library' ) ) {
1909 /**
1910 * Function to upgrade the MPDF library from version 6.1 to verson 7.1.5
1911 *
1912 * @return string $result result message
1913 */
1914 function pdfprnt_upgrade_library() {
1915 global $pdfprnt_options, $wpdb;
1916
1917 $ajax_request = isset( $_REQUEST['action'] ) && 'pdfprnt_upgrade_library' === $_REQUEST['action'] ? true : false;
1918
1919 $php_request = isset( $_REQUEST['pdfprnt_action'] ) && 'pdfprnt_upgrade_library' === sanitize_text_field( wp_unslash( $_REQUEST['pdfprnt_action'] ) ) ? true : false;
1920 $verified = isset( $_REQUEST['pdfprnt_ajax_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['pdfprnt_ajax_nonce'] ) ), 'pdfprnt_ajax_nonce' ) ? true : false;
1921 $old_dir = plugin_dir_path( __FILE__ ) . 'mpdf';
1922 $result = array();
1923 if ( ( $ajax_request || $php_request ) && true === $verified ) {
1924 /* get path to directory for ZIP-archive uploading */
1925 if ( is_multisite() ) {
1926 switch_to_blog( 1 );
1927 $upload_dir = wp_upload_dir();
1928 restore_current_blog();
1929 } else {
1930 $upload_dir = wp_upload_dir();
1931 }
1932 $zip_file = $upload_dir['basedir'] . '/mpdf.zip';
1933
1934 /* Sourse of the MPDF library */
1935 $url = 'https://bestwebsoft.com/wp-content/plugins/paid-products/plugins/pdf-print-mpdf/?action=loading_library';
1936 $new_dir = $upload_dir['basedir'] . '/vendor';
1937
1938 if ( ! file_exists( $new_dir ) ) {
1939 $result = pdfprnt_load_and_copy( $zip_file, $upload_dir['basedir'], $url, $old_dir ); /* load library */
1940 }
1941 if ( ! isset( $result['error'] ) ) {
1942 pdfprnt_delete_old_library( $old_dir );
1943 }
1944 }
1945 if ( true === $ajax_request ) {
1946 echo wp_json_encode( $result );
1947 wp_die();
1948 } else {
1949 return $result;
1950 }
1951 }
1952 }
1953
1954 if ( ! function_exists( 'pdfprnt_pdf_count' ) ) {
1955 /**
1956 * Function to update pdf count generation
1957 */
1958 function pdfprnt_pdf_count() {
1959 global $pdfprnt_options;
1960 if ( empty( $pdfprnt_options ) ) {
1961 $pdfprnt_options = get_option( 'pdfprnt_options' );
1962 }
1963 if ( 1 === $pdfprnt_options['count_generation'] ) {
1964 $verified = isset( $_REQUEST['pdfprnt_ajax_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['pdfprnt_ajax_nonce'] ) ), 'pdfprnt_ajax_nonce' ) ? true : false;
1965 if ( true === $verified && isset( $_REQUEST['id'] ) ) {
1966 $count_generation = get_post_meta( intval( $_REQUEST['id'] ), 'pdfprnt_count_generation', true );
1967 update_post_meta( intval( $_REQUEST['id'] ), 'pdfprnt_count_generation', (int) ++$count_generation );
1968 }
1969 }
1970 wp_die();
1971 }
1972 }
1973
1974 if ( ! function_exists( 'pdfprnt_delete_old_library' ) ) {
1975 /**
1976 * Delete old library
1977 *
1978 * @param string $dir path to library dir.
1979 * @return bool resullt removing dir.
1980 */
1981 function pdfprnt_delete_old_library( $dir ) {
1982 $files = scandir( $dir );
1983 $files = array_diff( $files, array( '.', '..' ) );
1984 foreach ( $files as $file ) {
1985 ( is_dir( "$dir/$file" ) ) ? pdfprnt_delete_old_library( "$dir/$file" ) : unlink( "$dir/$file" );
1986 }
1987 return rmdir( $dir );
1988 }
1989 }
1990
1991 if ( ! function_exists( 'pdfprnt_update_option' ) ) {
1992 /**
1993 * Update options
1994 *
1995 * @param string $opt option slug.
1996 * @param string $value new value.
1997 * @param bool $update_network (Optional) flag for update network.
1998 */
1999 function pdfprnt_update_option( $opt, $value, $update_network = false ) {
2000 global $pdfprnt_options;
2001 if ( empty( $pdfprnt_options ) ) {
2002 $pdfprnt_options = get_option( 'pdfprnt_options' );
2003 }
2004 $pdfprnt_options[ $opt ] = $value;
2005 update_option( 'pdfprnt_options', $pdfprnt_options );
2006 if ( $update_network ) {
2007 $network_options = get_site_option( 'pdfprnt_options' );
2008 $network_options[ $opt ] = $value;
2009 update_site_option( 'pdfprnt_options', $network_options );
2010 }
2011 }
2012 }
2013
2014 if ( ! function_exists( 'pdfprnt_get_pdf_page_sizes' ) ) {
2015 /**
2016 * Pafe sizes array
2017 */
2018 function pdfprnt_get_pdf_page_sizes() {
2019 $page_sizes = array(
2020 'A0',
2021 'A1',
2022 'A2',
2023 'A3',
2024 'A4',
2025 'A5',
2026 'A6',
2027 'A7',
2028 'A8',
2029 'A9',
2030 'A10',
2031 'B0',
2032 'B1',
2033 'B2',
2034 'B3',
2035 'B4',
2036 'B5',
2037 'B6',
2038 'B7',
2039 'B8',
2040 'B9',
2041 'B10',
2042 'C0',
2043 'C1',
2044 'C2',
2045 'C3',
2046 'C4',
2047 'C5',
2048 'C6',
2049 'C7',
2050 'C8',
2051 'C9',
2052 'C10',
2053 '4A0',
2054 '2A0',
2055 'RA0',
2056 'RA1',
2057 'RA2',
2058 'RA3',
2059 'RA4',
2060 'SRA0',
2061 'SRA1',
2062 'SRA2',
2063 'SRA3',
2064 'SRA4',
2065 'Letter',
2066 'Legal',
2067 'Executive',
2068 'Folio',
2069 'Demy',
2070 'Royal',
2071 'A',
2072 'B',
2073 );
2074 $page_sizes = apply_filters( 'pdfprnt_get_pdf_page_sizes', $page_sizes );
2075 return $page_sizes;
2076 }
2077 }
2078
2079 if ( ! function_exists( 'pdfprnt_plugin_banner' ) ) {
2080 /**
2081 * Display plugn banner
2082 */
2083 function pdfprnt_plugin_banner() {
2084 global $hook_suffix, $pdfprnt_plugin_info;
2085 if ( 'plugins.php' === $hook_suffix ) {
2086 bws_plugin_banner_to_settings( $pdfprnt_plugin_info, 'pdfprnt_options', 'pdf-print', 'admin.php?page=pdf-print.php' );
2087 if ( function_exists( 'bws_plugin_banner_to_promo' ) ) {
2088 bws_plugin_banner_to_promo( $pdfprnt_plugin_info, 'pdfprnt_options', 'pdf-print', 'admin.php?page=pdf-print.php', array( __( 'Test your PDF Generation Settings', 'bestwebsoft' ), __( "Ensure your PDF & Print plugin is correctly configured. Check your settings now!", 'bestwebsoft' ) ) );
2089 }
2090
2091 if ( isset( $_REQUEST['page'] ) && 'pdf-print.php' === $_REQUEST['page'] ) {
2092 bws_plugin_suggest_feature_banner( $pdfprnt_plugin_info, 'pdfprnt_options', 'pdf-print' );
2093 }
2094 }
2095 }
2096 }
2097
2098 if ( ! function_exists( 'pdfprnt_register_buttons_widget' ) ) {
2099 /**
2100 * Register buttons Widget
2101 */
2102 function pdfprnt_register_buttons_widget() {
2103 global $pdfprnt_is_old_php;
2104 if ( ! $pdfprnt_is_old_php ) {
2105 if ( ! class_exists( 'Pdfprnt_Buttons_Widget' ) ) {
2106 require_once dirname( __FILE__ ) . '/includes/class-pdfprnt-buttons-widget.php';
2107 }
2108 register_widget( 'Pdfprnt_Buttons_Widget' );
2109 }
2110 }
2111 }
2112
2113
2114 if ( ! function_exists( 'pdfprnt_uninstall' ) ) {
2115 /**
2116 * Deleting plugin options on uninstalling
2117 */
2118 function pdfprnt_uninstall() {
2119 if ( ! function_exists( 'get_plugins' ) ) {
2120 require_once ABSPATH . 'wp-admin/includes/plugin.php';
2121 }
2122 $all_plugins = get_plugins();
2123
2124 if ( ! array_key_exists( 'pdf-print-pro/pdf-print-pro.php' /*pls */ && ! array_key_exists( 'pdf-print-plus/pdf-print-plus.php', $all_plugins )/* pls*/, $all_plugins ) ) {
2125 global $wpdb;
2126 if ( is_multisite() ) {
2127 /* Get all blog ids */
2128 $blogids = $wpdb->get_col( "SELECT `blog_id` FROM $wpdb->blogs" );
2129 $tables = '';
2130 $old_blog = $wpdb->blogid;
2131 foreach ( $blogids as $blog_id ) {
2132 switch_to_blog( $blog_id );
2133 delete_option( 'pdfprnt_options' );
2134 delete_option( 'widget_pdfprint_buttons' );
2135 }
2136 switch_to_blog( $old_blog );
2137 delete_site_option( 'pdfprnt_options' );
2138 delete_option( 'widget_pdfprnt_buttons' );
2139 } else {
2140 delete_option( 'pdfprnt_options' );
2141 delete_option( 'widget_pdfprnt_buttons' );
2142 }
2143 }
2144
2145 require_once dirname( __FILE__ ) . '/bws_menu/bws_include.php';
2146 bws_include_init( plugin_basename( __FILE__ ) );
2147 bws_delete_plugin( plugin_basename( __FILE__ ) );
2148 }
2149 }
2150
2151 /* Adding function to output PDF document or pirnt page */
2152 register_activation_hook( __FILE__, 'pdfprnt_plugin_activate' );
2153 add_action( 'wp', 'pdfprnt_print', 20, 1 );
2154 add_action( 'wp_head', 'pdfprnt_auto_show_buttons_search_archive' );
2155 add_action( 'plugins_loaded', 'pdfprnt_plugins_loaded' );
2156 /* Initialization */
2157 add_action( 'init', 'pdfprnt_init' );
2158 add_action( 'admin_init', 'pdfprnt_admin_init' );
2159 /* Adding stylesheets */
2160 add_action( 'admin_enqueue_scripts', 'pdfprnt_admin_head' );
2161 add_action( 'wp_enqueue_scripts', 'pdfprnt_admin_head' );
2162 /* Adding 'BWS Plugins' admin menu */
2163 add_action( 'admin_menu', 'pdfprnt_add_admin_menu' );
2164 /* Add query vars */
2165 add_filter( 'query_vars', 'pdfprnt_print_vars_callback' );
2166
2167 add_shortcode( 'bws_pdfprint', 'pdfprnt_shortcode' );
2168 add_shortcode( 'bws_pdfprint_pagebreak', 'pdfprnt_shortcode_pagebreak' );
2169
2170 add_filter( 'bwsplgns_pdf_replace_content', 'pdfprnt_qr_code_content', 10, 1 );
2171
2172 /* custom filter for bws button in tinyMCE */
2173 add_filter( 'bws_shortcode_button_content', 'pdfprnt_shortcode_button_content' );
2174
2175 /* Additional links on the plugin page */
2176 add_filter( 'plugin_action_links', 'pdfprnt_action_links', 10, 2 );
2177 add_filter( 'plugin_row_meta', 'pdfprnt_links', 10, 2 );
2178 /* Adding buttons plugin to content */
2179 add_filter( 'the_content', 'pdfprnt_content' );
2180 /* Remove Print word from excerpt */
2181 add_filter( 'get_the_excerpt', 'pdfprnt_excerpt' );
2182 /* load additional fonts */
2183 add_action( 'wp_ajax_pdfprnt_load_fonts', 'pdfprnt_load_fonts' );
2184 /* load mPDF library */
2185 add_action( 'wp_ajax_pdfprnt_upgrade_library', 'pdfprnt_upgrade_library' );
2186 add_action( 'wp_ajax_pdfprnt_pdf_count', 'pdfprnt_pdf_count' );
2187 add_action( 'wp_ajax_nopriv_pdfprnt_pdf_count', 'pdfprnt_pdf_count' );
2188 /* Adding banner */
2189 add_action( 'admin_notices', 'pdfprnt_plugin_banner' );
2190
2191 /* Register widget */
2192 add_action( 'widgets_init', 'pdfprnt_register_buttons_widget' );
2193
2194 add_action( 'bwsplgns_display_pdf_print_buttons', 'pdfprnt_display_plugin_buttons', 10, 2 );
2195