479 lines
13 KiB
PHP
Executable File
479 lines
13 KiB
PHP
Executable File
<?php
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) exit;
|
|
|
|
/**
|
|
* displays pdf button
|
|
*/
|
|
function dkpdf_display_pdf_button( $content ) {
|
|
|
|
// if is generated pdf don't show pdf button
|
|
$pdf = get_query_var( 'pdf' );
|
|
|
|
if( apply_filters( 'dkpdf_hide_button_isset', isset( $_POST['dkpdfg_action_create'] ) ) ) {
|
|
|
|
if ( $pdf || apply_filters( 'dkpdf_hide_button_equal', $_POST['dkpdfg_action_create'] == 'dkpdfg_action_create' ) ) {
|
|
|
|
remove_shortcode('dkpdf-button');
|
|
$content = str_replace( "[dkpdf-button]", "", $content );
|
|
|
|
return $content;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if ( $pdf ) {
|
|
|
|
remove_shortcode('dkpdf-button');
|
|
$content = str_replace( "[dkpdf-button]", "", $content );
|
|
|
|
return $content;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
global $post;
|
|
$post_type = get_post_type( $post->ID );
|
|
|
|
$option_post_types = sanitize_option( 'dkpdf_pdfbutton_post_types', get_option( 'dkpdf_pdfbutton_post_types', array() ) );
|
|
|
|
// TODO button checkboxes?
|
|
if ( is_archive() || is_front_page() || is_home() ) { return $content; }
|
|
|
|
// return content if not checked
|
|
if( $option_post_types ) {
|
|
|
|
if ( ! in_array( get_post_type( $post ), $option_post_types ) ) {
|
|
|
|
return $content;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if( $option_post_types ) {
|
|
|
|
if ( in_array( get_post_type( $post ), $option_post_types ) ) {
|
|
|
|
$c = $content;
|
|
|
|
$pdfbutton_position = sanitize_option( 'dkpdf_pdfbutton_position', get_option( 'dkpdf_pdfbutton_position', 'before' ) );
|
|
|
|
$template = new DKPDF_Template_Loader;
|
|
|
|
if( $pdfbutton_position ) {
|
|
|
|
if ( $pdfbutton_position == 'shortcode' ) {
|
|
return $c;
|
|
}
|
|
|
|
if( $pdfbutton_position == 'before' ) {
|
|
|
|
ob_start();
|
|
|
|
$content = $template->get_template_part( 'dkpdf-button' );
|
|
|
|
return ob_get_clean() . $c;
|
|
|
|
|
|
} else if ( $pdfbutton_position == 'after' ) {
|
|
|
|
ob_start();
|
|
|
|
$content = $template->get_template_part( 'dkpdf-button' );
|
|
|
|
return $c . ob_get_clean();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
return $content;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
add_filter( 'the_content', 'dkpdf_display_pdf_button' );
|
|
|
|
/**
|
|
* output the pdf
|
|
*/
|
|
function dkpdf_output_pdf( $query ) {
|
|
|
|
$pdf = sanitize_text_field( get_query_var( 'pdf' ) );
|
|
|
|
if( $pdf ) {
|
|
|
|
include('mpdf60/mpdf.php');
|
|
|
|
// page orientation
|
|
$dkpdf_page_orientation = get_option( 'dkpdf_page_orientation', '' );
|
|
|
|
if ( $dkpdf_page_orientation == 'horizontal') {
|
|
|
|
$format = apply_filters( 'dkpdf_pdf_format', 'A4' ).'-L';
|
|
|
|
} else {
|
|
|
|
$format = apply_filters( 'dkpdf_pdf_format', 'A4' );
|
|
|
|
}
|
|
|
|
// font size
|
|
$dkpdf_font_size = get_option( 'dkpdf_font_size', '12' );
|
|
$dkpdf_font_family = '';
|
|
|
|
// margins
|
|
$dkpdf_margin_left = get_option( 'dkpdf_margin_left', '15' );
|
|
$dkpdf_margin_right = get_option( 'dkpdf_margin_right', '15' );
|
|
$dkpdf_margin_top = get_option( 'dkpdf_margin_top', '50' );
|
|
$dkpdf_margin_bottom = get_option( 'dkpdf_margin_bottom', '30' );
|
|
$dkpdf_margin_header = get_option( 'dkpdf_margin_header', '15' );
|
|
|
|
// creating and setting the pdf
|
|
$mpdf = new mPDF('utf-8', $format, $dkpdf_font_size, $dkpdf_font_family,
|
|
$dkpdf_margin_left, $dkpdf_margin_right, $dkpdf_margin_top, $dkpdf_margin_bottom, $dkpdf_margin_header
|
|
);
|
|
|
|
/*
|
|
// make chinese characters work in the pdf
|
|
$mpdf->useAdobeCJK = true;
|
|
$mpdf->autoScriptToLang = true;
|
|
$mpdf->autoLangToFont = true;
|
|
*/
|
|
|
|
// header
|
|
$pdf_header_html = dkpdf_get_template( 'dkpdf-header' );
|
|
$mpdf->SetHTMLHeader( $pdf_header_html );
|
|
|
|
// footer
|
|
$pdf_footer_html = dkpdf_get_template( 'dkpdf-footer' );
|
|
$mpdf->SetHTMLFooter( $pdf_footer_html );
|
|
|
|
$mpdf->WriteHTML( apply_filters( 'dkpdf_before_content', '' ) );
|
|
$mpdf->WriteHTML( dkpdf_get_template( 'dkpdf-index' ) );
|
|
$mpdf->WriteHTML( apply_filters( 'dkpdf_after_content', '' ) );
|
|
|
|
// action to do (open or download)
|
|
$pdfbutton_action = sanitize_option( 'dkpdf_pdfbutton_action', get_option( 'dkpdf_pdfbutton_action', 'open' ) );
|
|
|
|
if( $pdfbutton_action == 'open') {
|
|
|
|
global $post;
|
|
$mpdf->Output( get_the_title( $post->ID ).'.pdf', 'I' );
|
|
|
|
} else {
|
|
|
|
global $post;
|
|
$mpdf->Output( get_the_title( $post->ID ).'.pdf', 'D' );
|
|
|
|
}
|
|
|
|
exit;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
add_action( 'wp', 'dkpdf_output_pdf' );
|
|
|
|
/**
|
|
* returs a template
|
|
* @param string template name
|
|
*/
|
|
function dkpdf_get_template( $template_name ) {
|
|
|
|
$template = new DKPDF_Template_Loader;
|
|
|
|
ob_start();
|
|
$template->get_template_part( $template_name );
|
|
return ob_get_clean();
|
|
|
|
}
|
|
|
|
/**
|
|
* returns an array of active post, page, attachment and custom post types
|
|
* @return array
|
|
*/
|
|
function dkpdf_get_post_types() {
|
|
|
|
$args = array(
|
|
'public' => true,
|
|
'_builtin' => false
|
|
);
|
|
|
|
$post_types = get_post_types( $args );
|
|
$post_arr = array( 'post' => 'post', 'page' => 'page', 'attachment' => 'attachment' );
|
|
|
|
foreach ( $post_types as $post_type ) {
|
|
|
|
$arr = array( $post_type => $post_type );
|
|
$post_arr += $arr;
|
|
|
|
}
|
|
|
|
$post_arr = apply_filters( 'dkpdf' . '_posts_arr', $post_arr );
|
|
|
|
return $post_arr;
|
|
|
|
}
|
|
|
|
/**
|
|
* set query_vars
|
|
*/
|
|
function dkpdf_set_query_vars( $query_vars ) {
|
|
|
|
$query_vars[] = 'pdf';
|
|
|
|
return $query_vars;
|
|
|
|
}
|
|
|
|
add_filter( 'query_vars', 'dkpdf_set_query_vars' );
|
|
|
|
/**
|
|
* sanitizes dkpdf options
|
|
*/
|
|
function dkpdf_sanitize_options() {
|
|
|
|
add_filter( 'pre_update_option_dkpdf_pdfbutton_text', 'dkpdf_update_field_dkpdf_pdfbutton_text', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_pdfbutton_post_types', 'dkpdf_update_field_dkpdf_pdfbutton_post_types', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_pdfbutton_action', 'dkpdf_update_field_dkpdf_pdfbutton_action', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_pdfbutton_position', 'dkpdf_update_field_dkpdf_pdfbutton_position', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_pdfbutton_align', 'dkpdf_update_field_dkpdf_pdfbutton_align', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_page_orientation', 'dkpdf_update_field_dkpdf_page_orientation', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_font_size', 'dkpdf_update_field_dkpdf_font_size', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_margin_left', 'dkpdf_update_field_dkpdf_margin_left', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_margin_right', 'dkpdf_update_field_dkpdf_margin_right', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_margin_top', 'dkpdf_update_field_dkpdf_margin_top', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_margin_bottom', 'dkpdf_update_field_dkpdf_margin_bottom', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_margin_header', 'dkpdf_update_field_dkpdf_margin_header', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_pdf_header_image', 'dkpdf_update_field_dkpdf_pdf_header_image', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_pdf_header_show_title', 'dkpdf_update_field_dkpdf_pdf_header_show_title', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_pdf_header_show_pagination', 'dkpdf_update_field_dkpdf_pdf_header_show_pagination', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_pdf_footer_text', 'dkpdf_update_field_dkpdf_pdf_footer_text', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_pdf_footer_show_title', 'dkpdf_update_field_dkpdf_pdf_footer_show_title', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_pdf_footer_show_pagination', 'dkpdf_update_field_dkpdf_pdf_footer_show_pagination', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_pdf_custom_css', 'dkpdf_update_field_dkpdf_pdf_custom_css', 10, 2 );
|
|
add_filter( 'pre_update_option_dkpdf_print_wp_head', 'dkpdf_update_field_dkpdf_print_wp_head', 10, 2 );
|
|
|
|
|
|
}
|
|
|
|
add_action( 'init', 'dkpdf_sanitize_options' );
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdfbutton_text option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdfbutton_text( $new_value, $old_value ) {
|
|
$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdfbutton_post_types option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdfbutton_post_types( $new_value, $old_value ) {
|
|
// TODO sanitize_text_field doesn't work
|
|
//$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdfbutton_action option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdfbutton_action( $new_value, $old_value ) {
|
|
$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdfbutton_position option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdfbutton_position( $new_value, $old_value ) {
|
|
$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdfbutton_align option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdfbutton_align( $new_value, $old_value ) {
|
|
$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_page_orientation option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_page_orientation( $new_value, $old_value ) {
|
|
$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_font_size option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_font_size( $new_value, $old_value ) {
|
|
$new_value = intval( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_margin_left option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_margin_left( $new_value, $old_value ) {
|
|
$new_value = intval( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_margin_right option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_margin_right( $new_value, $old_value ) {
|
|
$new_value = intval( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_margin_top option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_margin_top( $new_value, $old_value ) {
|
|
$new_value = intval( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_margin_bottom option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_margin_bottom( $new_value, $old_value ) {
|
|
$new_value = intval( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_margin_header option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_margin_header( $new_value, $old_value ) {
|
|
$new_value = intval( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdf_header_image option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdf_header_image( $new_value, $old_value ) {
|
|
$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdf_header_show_title option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdf_header_show_title( $new_value, $old_value ) {
|
|
$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdf_header_show_pagination option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdf_header_show_pagination( $new_value, $old_value ) {
|
|
$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdf_footer_text option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdf_footer_text( $new_value, $old_value ) {
|
|
|
|
$arr = array(
|
|
'a' => array(
|
|
'href' => array(),
|
|
'title' => array(),
|
|
'class' => array(),
|
|
'style' => array()
|
|
),
|
|
'br' => array(),
|
|
'em' => array(),
|
|
'strong' => array(),
|
|
'hr' => array(),
|
|
'p' => array(
|
|
'title' => array(),
|
|
'class' => array(),
|
|
'style' => array()
|
|
),
|
|
'h1' => array(
|
|
'title' => array(),
|
|
'class' => array(),
|
|
'style' => array()
|
|
),
|
|
'h2' => array(
|
|
'title' => array(),
|
|
'class' => array(),
|
|
'style' => array()
|
|
),
|
|
'h3' => array(
|
|
'title' => array(),
|
|
'class' => array(),
|
|
'style' => array()
|
|
),
|
|
'h4' => array(
|
|
'title' => array(),
|
|
'class' => array(),
|
|
'style' => array()
|
|
),
|
|
'div' => array(
|
|
'title' => array(),
|
|
'class' => array(),
|
|
'style' => array()
|
|
)
|
|
);
|
|
|
|
$new_value = wp_kses( $new_value, $arr );
|
|
return $new_value;
|
|
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdf_header_show_pagination option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdf_footer_show_title( $new_value, $old_value ) {
|
|
$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdf_header_show_pagination option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdf_footer_show_pagination( $new_value, $old_value ) {
|
|
$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_pdf_custom_css option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_pdf_custom_css( $new_value, $old_value ) {
|
|
$new_value = wp_filter_nohtml_kses( $new_value );
|
|
$new_value = str_replace('\"', '"', $new_value);
|
|
$new_value = str_replace("\'", "'", $new_value);
|
|
return $new_value;
|
|
}
|
|
|
|
/**
|
|
* sanitizes dkpdf_print_wp_head option
|
|
*/
|
|
function dkpdf_update_field_dkpdf_print_wp_head( $new_value, $old_value ) {
|
|
$new_value = sanitize_text_field( $new_value );
|
|
return $new_value;
|
|
}
|