487 lines
13 KiB
PHP
487 lines
13 KiB
PHP
|
<?php
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) exit;
|
||
|
|
||
|
class DKPDF_Settings {
|
||
|
|
||
|
private static $_instance = null;
|
||
|
public $parent = null;
|
||
|
public $_token;
|
||
|
public $base = '';
|
||
|
public $settings = array();
|
||
|
|
||
|
public function __construct ( $parent ) {
|
||
|
|
||
|
$this->parent = $parent;
|
||
|
|
||
|
$this->base = 'dkpdf_';
|
||
|
|
||
|
// Initialise settings
|
||
|
add_action( 'init', array( $this, 'init_settings' ), 11 );
|
||
|
|
||
|
// Register plugin settings
|
||
|
add_action( 'admin_init' , array( $this, 'register_settings' ) );
|
||
|
|
||
|
// Add settings page to menu
|
||
|
add_action( 'admin_menu' , array( $this, 'add_menu_item' ) );
|
||
|
|
||
|
// Add settings link to plugins page
|
||
|
add_filter( 'plugin_action_links_' . plugin_basename( DKPDF_PLUGIN_FILE ) , array( $this, 'add_settings_link' ) );
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Initialise settings
|
||
|
* @return void
|
||
|
*/
|
||
|
public function init_settings () {
|
||
|
$this->settings = $this->settings_fields();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Adds DK PDF admin menu
|
||
|
* @return void
|
||
|
*/
|
||
|
public function add_menu_item () {
|
||
|
|
||
|
// main menu
|
||
|
$page = add_menu_page( 'DK PDF', 'DK PDF', 'manage_options', 'dkpdf' . '_settings', array( $this, 'settings_page' ) );
|
||
|
|
||
|
// Addons submenu
|
||
|
add_submenu_page( 'dkpdf' . '_settings', 'Addons', 'Addons', 'manage_options', 'dkpdf-addons', array( $this, 'dkpdf_addons_screen' ));
|
||
|
|
||
|
// support
|
||
|
add_submenu_page( 'dkpdf' . '_settings', 'Support', 'Support', 'manage_options', 'dkpdf-support', array( $this, 'dkpdf_support_screen' ));
|
||
|
|
||
|
// settings assets
|
||
|
add_action( 'admin_print_styles-' . $page, array( $this, 'settings_assets' ) );
|
||
|
|
||
|
}
|
||
|
|
||
|
public function dkpdf_support_screen() { ?>
|
||
|
|
||
|
<div class="wrap">
|
||
|
<h2 style="float:left;width:100%;">DK PDF Support</h2>
|
||
|
|
||
|
<div class="dkpdf-item">
|
||
|
<h3>Documentation</h3>
|
||
|
<p>Everything you need to know for getting DK PDF up and running.</p>
|
||
|
<p><a href="http://wp.dinamiko.com/demos/dkpdf/documentation/" target="_blank">Go to Documentation</a></p>
|
||
|
</div>
|
||
|
|
||
|
<div class="dkpdf-item">
|
||
|
<h3>Support</h3>
|
||
|
<p>Having trouble? don't worry, create a ticket in the support forum.</p>
|
||
|
<p><a href="https://wordpress.org/support/plugin/dk-pdf" target="_blank">Go to Support</a></p>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<?php do_action( 'dkpdf_after_support' );?>
|
||
|
|
||
|
<?php }
|
||
|
|
||
|
/*
|
||
|
public function dkpdf_addons_screen() { ?>
|
||
|
|
||
|
<div class="wrap">
|
||
|
<h2>DK PDF Addons</h2>
|
||
|
|
||
|
<div class="dkpdf-item">
|
||
|
<h3>DK PDF Generator</h3>
|
||
|
<p>Allows creating PDF documents with your selected WordPress content, also allows adding a Cover and a Table of contents.</p>
|
||
|
<p><a href="http://codecanyon.net/item/dk-pdf-generator/13530581" target="_blank">Go to DK PDF Generator</a></p>
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
<?php }
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Load settings JS & CSS
|
||
|
* @return void
|
||
|
*/
|
||
|
public function settings_assets () {
|
||
|
|
||
|
// We're including the farbtastic script & styles here because they're needed for the colour picker
|
||
|
// If you're not including a colour picker field then you can leave these calls out as well as the farbtastic dependency for the dkpdf-admin-js script below
|
||
|
wp_enqueue_style( 'farbtastic' );
|
||
|
wp_enqueue_script( 'farbtastic' );
|
||
|
|
||
|
// We're including the WP media scripts here because they're needed for the image upload field
|
||
|
// If you're not including an image upload then you can leave this function call out
|
||
|
wp_enqueue_media();
|
||
|
|
||
|
|
||
|
wp_register_script( 'dkpdf' . '-settings-js', plugins_url( 'dk-pdf/assets/js/settings-admin.js' ), array( 'farbtastic', 'jquery' ), '1.0.0' );
|
||
|
wp_enqueue_script( 'dkpdf' . '-settings-js' );
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add settings link to plugin list table
|
||
|
* @param array $links Existing links
|
||
|
* @return array Modified links
|
||
|
*/
|
||
|
public function add_settings_link ( $links ) {
|
||
|
$settings_link = '<a href="admin.php?page=' . 'dkpdf' . '_settings">' . __( 'Settings', 'dkpdf' ) . '</a>';
|
||
|
array_push( $links, $settings_link );
|
||
|
return $links;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Build settings fields
|
||
|
* @return array Fields to be displayed on settings page
|
||
|
*/
|
||
|
private function settings_fields () {
|
||
|
|
||
|
$post_types_arr = dkpdf_get_post_types();
|
||
|
|
||
|
// pdf button settings
|
||
|
$settings['pdfbtn'] = array(
|
||
|
'title' => __( 'PDF Button', 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'fields' => array(
|
||
|
array(
|
||
|
'id' => 'pdfbutton_text',
|
||
|
'label' => __( 'Button text' , 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'type' => 'text',
|
||
|
'default' => 'PDF Button',
|
||
|
'placeholder' => ''
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'pdfbutton_post_types',
|
||
|
'label' => __( 'Post types to apply:', 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'type' => 'checkbox_multi',
|
||
|
'options' => $post_types_arr,
|
||
|
'default' => array()
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'pdfbutton_action',
|
||
|
'label' => __( 'Action', 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'type' => 'radio',
|
||
|
'options' => array( 'open' => 'Open PDF in new Window', 'download' => 'Download PDF directly' ),
|
||
|
'default' => 'open'
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'pdfbutton_position',
|
||
|
'label' => __( 'Position', 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'type' => 'radio',
|
||
|
'options' => array( 'shortcode' => 'Use shortcode', 'before' => 'Before content', 'after' => 'After content' ),
|
||
|
'default' => 'before'
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'pdfbutton_align',
|
||
|
'label' => __( 'Align', 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'type' => 'radio',
|
||
|
'options' => array( 'left' => 'Left', 'center' => 'Center', 'right' => 'Right' ),
|
||
|
'default' => 'right'
|
||
|
),
|
||
|
)
|
||
|
);
|
||
|
|
||
|
|
||
|
// pdf setup
|
||
|
$settings['dkpdf_setup'] = array(
|
||
|
'title' => __( 'PDF Setup', 'dkpdfg' ),
|
||
|
'description' => '',
|
||
|
'fields' => array(
|
||
|
array(
|
||
|
'id' => 'page_orientation',
|
||
|
'label' => __( 'Page orientation', 'dkpdfg' ),
|
||
|
'description' => '',
|
||
|
'type' => 'radio',
|
||
|
'options' => array( 'vertical' => 'Vertical', 'horizontal' => 'Horizontal' ),
|
||
|
'default' => 'vertical'
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'font_size',
|
||
|
'label' => __( 'Font size', 'dkpdfg' ),
|
||
|
'description' => 'In points (pt)',
|
||
|
'type' => 'number',
|
||
|
'default' => '12',
|
||
|
'placeholder' => '12'
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'margin_left',
|
||
|
'label' => __( 'Margin left', 'dkpdfg' ),
|
||
|
'description' => 'In points (pt)',
|
||
|
'type' => 'number',
|
||
|
'default' => '15',
|
||
|
'placeholder' => '15'
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'margin_right',
|
||
|
'label' => __( 'Margin right', 'dkpdfg' ),
|
||
|
'description' => 'In points (pt)',
|
||
|
'type' => 'number',
|
||
|
'default' => '15',
|
||
|
'placeholder' => '15'
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'margin_top',
|
||
|
'label' => __( 'Margin top', 'dkpdfg' ),
|
||
|
'description' => 'In points (pt)',
|
||
|
'type' => 'number',
|
||
|
'default' => '50',
|
||
|
'placeholder' => '50'
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'margin_bottom',
|
||
|
'label' => __( 'Margin bottom', 'dkpdfg' ),
|
||
|
'description' => 'In points (pt)',
|
||
|
'type' => 'number',
|
||
|
'default' => '30',
|
||
|
'placeholder' => '30'
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'margin_header',
|
||
|
'label' => __( 'Margin header', 'dkpdfg' ),
|
||
|
'description' => 'In points (pt)',
|
||
|
'type' => 'number',
|
||
|
'default' => '15',
|
||
|
'placeholder' => '15'
|
||
|
),
|
||
|
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// header & footer settings
|
||
|
$settings['pdf_header_footer'] = array(
|
||
|
'title' => __( 'PDF Header & Footer', 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'fields' => array(
|
||
|
array(
|
||
|
'id' => 'pdf_header_image',
|
||
|
'label' => __( 'Header logo' , 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'type' => 'image',
|
||
|
'default' => '',
|
||
|
'placeholder' => ''
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'pdf_header_show_title',
|
||
|
'label' => __( 'Header show title', 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'type' => 'checkbox',
|
||
|
'default' => ''
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'pdf_header_show_pagination',
|
||
|
'label' => __( 'Header show pagination', 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'type' => 'checkbox',
|
||
|
'default' => ''
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'pdf_footer_text',
|
||
|
'label' => __( 'Footer text' , 'dkpdf' ),
|
||
|
'description' => __( 'HTML tags: a, br, em, strong, hr, p, h1 to h4', 'dkpdf' ),
|
||
|
'type' => 'textarea',
|
||
|
'default' => '',
|
||
|
'placeholder' => ''
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'pdf_footer_show_title',
|
||
|
'label' => __( 'Footer show title', 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'type' => 'checkbox',
|
||
|
'default' => ''
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'pdf_footer_show_pagination',
|
||
|
'label' => __( 'Footer show pagination', 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'type' => 'checkbox',
|
||
|
'default' => ''
|
||
|
),
|
||
|
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// style settings
|
||
|
$settings['pdf_css'] = array(
|
||
|
'title' => __( 'PDF CSS', 'dkpdf' ),
|
||
|
'description' => '',
|
||
|
'fields' => array(
|
||
|
array(
|
||
|
'id' => 'pdf_custom_css',
|
||
|
'label' => __( 'PDF Custom CSS' , 'dkpdf' ),
|
||
|
'description' => __( '', 'dkpdf' ),
|
||
|
'type' => 'textarea_code',
|
||
|
'default' => '',
|
||
|
'placeholder' => ''
|
||
|
),
|
||
|
array(
|
||
|
'id' => 'print_wp_head',
|
||
|
'label' => __( 'Use your enqueued theme and plugin CSS', 'dkpdf' ),
|
||
|
'description' => __( 'Adds wp_head() in PDF head', 'dkpdf' ),
|
||
|
'type' => 'checkbox',
|
||
|
'default' => ''
|
||
|
),
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$settings = apply_filters( 'dkpdf' . '_settings_fields', $settings );
|
||
|
|
||
|
return $settings;
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Register plugin settings
|
||
|
* @return void
|
||
|
*/
|
||
|
public function register_settings () {
|
||
|
if ( is_array( $this->settings ) ) {
|
||
|
|
||
|
// Check posted/selected tab
|
||
|
$current_section = '';
|
||
|
if ( isset( $_POST['tab'] ) && $_POST['tab'] ) {
|
||
|
$current_section = $_POST['tab'];
|
||
|
} else {
|
||
|
if ( isset( $_GET['tab'] ) && $_GET['tab'] ) {
|
||
|
$current_section = $_GET['tab'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
foreach ( $this->settings as $section => $data ) {
|
||
|
|
||
|
if ( $current_section && $current_section != $section ) continue;
|
||
|
|
||
|
// Add section to page
|
||
|
add_settings_section( $section, $data['title'], array( $this, 'settings_section' ), 'dkpdf' . '_settings' );
|
||
|
|
||
|
foreach ( $data['fields'] as $field ) {
|
||
|
|
||
|
// Validation callback for field
|
||
|
$validation = '';
|
||
|
if ( isset( $field['callback'] ) ) {
|
||
|
$validation = $field['callback'];
|
||
|
}
|
||
|
|
||
|
// Register field
|
||
|
$option_name = $this->base . $field['id'];
|
||
|
register_setting( 'dkpdf' . '_settings', $option_name, $validation );
|
||
|
|
||
|
// Add field to page
|
||
|
add_settings_field( $field['id'], $field['label'], array( $this->parent->admin, 'display_field' ), 'dkpdf' . '_settings', $section, array( 'field' => $field, 'prefix' => $this->base ) );
|
||
|
}
|
||
|
|
||
|
if ( ! $current_section ) break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function settings_section ( $section ) {
|
||
|
$html = '<p> ' . $this->settings[ $section['id'] ]['description'] . '</p>' . "\n";
|
||
|
echo $html;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Load settings page content
|
||
|
* @return void
|
||
|
*/
|
||
|
public function settings_page () {
|
||
|
|
||
|
if( isset( $_GET['settings-updated']) ) { ?>
|
||
|
<div id="message" class="updated">
|
||
|
<p><?php _e('Settings saved.', 'dkpdf');?></p>
|
||
|
</div>
|
||
|
<?php }
|
||
|
|
||
|
// Build page HTML
|
||
|
$html = '<div class="wrap" id="' . 'dkpdf' . '_settings">' . "\n";
|
||
|
$html .= '<h2>' . __( 'DK PDF Settings' , 'dkpdf' ) . '</h2>' . "\n";
|
||
|
|
||
|
$tab = '';
|
||
|
if ( isset( $_GET['tab'] ) && $_GET['tab'] ) {
|
||
|
$tab .= $_GET['tab'];
|
||
|
}
|
||
|
|
||
|
// Show page tabs
|
||
|
if ( is_array( $this->settings ) && 1 < count( $this->settings ) ) {
|
||
|
|
||
|
$html .= '<h2 class="nav-tab-wrapper">' . "\n";
|
||
|
|
||
|
$c = 0;
|
||
|
foreach ( $this->settings as $section => $data ) {
|
||
|
|
||
|
// Set tab class
|
||
|
$class = 'nav-tab';
|
||
|
if ( ! isset( $_GET['tab'] ) ) {
|
||
|
if ( 0 == $c ) {
|
||
|
$class .= ' nav-tab-active';
|
||
|
}
|
||
|
} else {
|
||
|
if ( isset( $_GET['tab'] ) && $section == $_GET['tab'] ) {
|
||
|
$class .= ' nav-tab-active';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Set tab link
|
||
|
$tab_link = add_query_arg( array( 'tab' => $section ) );
|
||
|
if ( isset( $_GET['settings-updated'] ) ) {
|
||
|
$tab_link = remove_query_arg( 'settings-updated', $tab_link );
|
||
|
}
|
||
|
|
||
|
// Output tab
|
||
|
$html .= '<a href="' . $tab_link . '" class="' . esc_attr( $class ) . '">' . esc_html( $data['title'] ) . '</a>' . "\n";
|
||
|
|
||
|
++$c;
|
||
|
}
|
||
|
|
||
|
$html .= '</h2>' . "\n";
|
||
|
}
|
||
|
|
||
|
$html .= '<form method="post" action="options.php" enctype="multipart/form-data">' . "\n";
|
||
|
|
||
|
// Get settings fields
|
||
|
ob_start();
|
||
|
settings_fields( 'dkpdf' . '_settings' );
|
||
|
do_settings_sections( 'dkpdf' . '_settings' );
|
||
|
$html .= ob_get_clean();
|
||
|
|
||
|
$html .= '<p class="submit">' . "\n";
|
||
|
$html .= '<input type="hidden" name="tab" value="' . esc_attr( $tab ) . '" />' . "\n";
|
||
|
$html .= '<input name="Submit" type="submit" class="button-primary" value="' . esc_attr( __( 'Save Settings' , 'dkpdf' ) ) . '" />' . "\n";
|
||
|
$html .= '</p>' . "\n";
|
||
|
$html .= '</form>' . "\n";
|
||
|
|
||
|
$html .= '</div>' . "\n";
|
||
|
|
||
|
echo $html;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Main DKPDF_Settings Instance
|
||
|
*/
|
||
|
public static function instance ( $parent ) {
|
||
|
if ( is_null( self::$_instance ) ) {
|
||
|
self::$_instance = new self( $parent );
|
||
|
}
|
||
|
return self::$_instance;
|
||
|
} // End instance()
|
||
|
|
||
|
/**
|
||
|
* Cloning is forbidden.
|
||
|
*/
|
||
|
public function __clone () {
|
||
|
_doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?' ), $this->parent->_version );
|
||
|
} // End __clone()
|
||
|
|
||
|
/**
|
||
|
* Unserializing instances of this class is forbidden.
|
||
|
*/
|
||
|
public function __wakeup () {
|
||
|
_doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?' ), $this->parent->_version );
|
||
|
} // End __wakeup()
|
||
|
|
||
|
}
|