mirror of https://github.com/vtrois/kratos
308 lines
8.5 KiB
PHP
Executable File
308 lines
8.5 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* @package Options_Framework
|
|
* @author Devin Price <devin@wptheming.com>
|
|
* @license GPL-2.0+
|
|
* @link http://wptheming.com
|
|
* @copyright 2010-2014 WP Theming
|
|
*/
|
|
|
|
class Options_Framework_Admin {
|
|
|
|
/**
|
|
* Page hook for the options screen
|
|
*
|
|
* @since 1.7.0
|
|
* @type string
|
|
*/
|
|
protected $options_screen = null;
|
|
|
|
/**
|
|
* Hook in the scripts and styles
|
|
*
|
|
* @since 1.7.0
|
|
*/
|
|
public function init() {
|
|
|
|
// Gets options to load
|
|
$options = & Options_Framework::_optionsframework_options();
|
|
|
|
// Checks if options are available
|
|
if ( $options ) {
|
|
|
|
// Add the options page and menu item.
|
|
add_action('admin_menu', array($this, 'add_top_options_page'));
|
|
add_action('admin_menu', array($this, 'add_sub_options_page'));
|
|
|
|
// Add the required scripts and styles
|
|
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
|
|
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
|
|
|
|
// Settings need to be registered after admin_init
|
|
add_action( 'admin_init', array( $this, 'settings_init' ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Registers the settings
|
|
*
|
|
* @since 1.7.0
|
|
*/
|
|
function settings_init() {
|
|
|
|
// Get the option name
|
|
$options_framework = new Options_Framework;
|
|
$name = $options_framework->get_option_name();
|
|
|
|
// Registers the settings fields and callback
|
|
register_setting( 'optionsframework', $name, array ( $this, 'validate_options' ) );
|
|
|
|
// Displays notice after options save
|
|
add_action( 'optionsframework_after_validate', array( $this, 'save_options_notice' ) );
|
|
|
|
add_action( 'optionsframework_after_sendmail', array( $this, 'send_mail_notice' ) );
|
|
}
|
|
|
|
public function add_top_options_page()
|
|
{
|
|
add_menu_page(
|
|
__('主题设置', 'kratos'),
|
|
__('主题设置', 'kratos'),
|
|
'manage_options',
|
|
'kratos_options',
|
|
'',
|
|
'dashicons-admin-generic',
|
|
99
|
|
);
|
|
}
|
|
|
|
public static function menu_settings()
|
|
{
|
|
$menu = array(
|
|
'parent_slug' => 'kratos_options',
|
|
'page_title' => __('主题设置', 'kratos'),
|
|
'menu_title' => __('主题设置', 'kratos'),
|
|
'capability' => 'manage_options',
|
|
'menu_slug' => 'kratos_options',
|
|
);
|
|
|
|
return $menu;
|
|
}
|
|
|
|
public function add_sub_options_page()
|
|
{
|
|
$menu = $this->menu_settings();
|
|
|
|
$this->options_screen = add_submenu_page(
|
|
$menu['parent_slug'],
|
|
$menu['page_title'],
|
|
$menu['menu_title'],
|
|
$menu['capability'],
|
|
$menu['menu_slug'],
|
|
array($this, 'options_page')
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Loads the required stylesheets
|
|
*
|
|
* @since 1.7.0
|
|
*/
|
|
|
|
function enqueue_admin_styles( $hook ) {
|
|
|
|
if ( $this->options_screen != $hook )
|
|
return;
|
|
|
|
wp_enqueue_style( 'optionsframework', get_stylesheet_directory_uri() . '/inc/options-framework/css/optionsframework.css', array(), Options_Framework::VERSION );
|
|
wp_enqueue_style( 'wp-color-picker' );
|
|
}
|
|
|
|
/**
|
|
* Loads the required javascript
|
|
*
|
|
* @since 1.7.0
|
|
*/
|
|
function enqueue_admin_scripts( $hook ) {
|
|
|
|
if ( $this->options_screen != $hook )
|
|
return;
|
|
|
|
// Enqueue custom option panel JS
|
|
wp_enqueue_script(
|
|
'options-custom',
|
|
get_stylesheet_directory_uri() . '/inc/options-framework/js/options-custom.js',
|
|
array( 'jquery','wp-color-picker' ),
|
|
Options_Framework::VERSION
|
|
);
|
|
|
|
// Inline scripts from options-interface.php
|
|
add_action( 'admin_head', array( $this, 'of_admin_head' ) );
|
|
}
|
|
|
|
function of_admin_head() {
|
|
// Hook to add custom scripts
|
|
do_action( 'optionsframework_custom_scripts' );
|
|
}
|
|
|
|
/**
|
|
* Builds out the options panel.
|
|
*
|
|
* If we were using the Settings API as it was intended we would use
|
|
* do_settings_sections here. But as we don't want the settings wrapped in a table,
|
|
* we'll call our own custom optionsframework_fields. See options-interface.php
|
|
* for specifics on how each individual field is generated.
|
|
*
|
|
* Nonces are provided using the settings_fields()
|
|
*
|
|
* @since 1.7.0
|
|
*/
|
|
function options_page() { ?>
|
|
|
|
<div id="optionsframework-wrap" class="wrap">
|
|
|
|
<?php $menu = $this->menu_settings(); ?>
|
|
<h2><?php echo esc_html( $menu['page_title'] ); ?></h2>
|
|
|
|
<h2 class="nav-tab-wrapper">
|
|
<?php echo Options_Framework_Interface::optionsframework_tabs(); ?>
|
|
</h2>
|
|
|
|
<?php settings_errors( 'options-framework' ); ?>
|
|
|
|
<div id="optionsframework-metabox" class="metabox-holder">
|
|
<div id="optionsframework" class="postbox">
|
|
<form action="options.php" method="post">
|
|
<?php settings_fields( 'optionsframework' ); ?>
|
|
<?php Options_Framework_Interface::optionsframework_fields(); /* Settings */ ?>
|
|
<div id="optionsframework-submit">
|
|
<input type="submit" class="button-primary" name="update" value="<?php esc_attr_e( '保存配置', 'kratos' ); ?>" />
|
|
<input type="submit" class="reset-button button-secondary" name="reset" value="<?php esc_attr_e( '恢复默认', 'kratos' ); ?>" onclick="return confirm( '<?php print esc_js( __( '单击「确定」进行恢复,但所有的配置都将丢失!', 'kratos' ) ); ?>' );" />
|
|
<div class="clear"></div>
|
|
</div>
|
|
</form>
|
|
</div> <!-- / #container -->
|
|
</div>
|
|
<?php do_action( 'optionsframework_after' ); ?>
|
|
</div> <!-- / .wrap -->
|
|
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Validate Options.
|
|
*
|
|
* This runs after the submit/reset button has been clicked and
|
|
* validates the inputs.
|
|
*
|
|
* @uses $_POST['reset'] to restore default options
|
|
*/
|
|
function validate_options( $input ) {
|
|
|
|
/*
|
|
* Restore Defaults.
|
|
*
|
|
* In the event that the user clicked the "Restore Defaults"
|
|
* button, the options defined in the theme's options.php
|
|
* file will be added to the option for the active theme.
|
|
*/
|
|
|
|
if ( isset( $_POST['reset'] ) ) {
|
|
add_settings_error( 'options-framework', 'restore_defaults', __( '恢复完成', 'kratos' ), 'updated fade' );
|
|
return $this->get_default_values();
|
|
}
|
|
|
|
/*
|
|
* Update Settings
|
|
*
|
|
* This used to check for $_POST['update'], but has been updated
|
|
* to be compatible with the theme customizer introduced in WordPress 3.4
|
|
*/
|
|
|
|
$clean = array();
|
|
$options = & Options_Framework::_optionsframework_options();
|
|
foreach ( $options as $option ) {
|
|
|
|
if ( ! isset( $option['id'] ) ) {
|
|
continue;
|
|
}
|
|
|
|
if ( ! isset( $option['type'] ) ) {
|
|
continue;
|
|
}
|
|
|
|
$id = preg_replace( '/[^a-zA-Z0-9._\-]/', '', strtolower( $option['id'] ) );
|
|
|
|
// Set checkbox to false if it wasn't sent in the $_POST
|
|
if ( 'checkbox' == $option['type'] && ! isset( $input[$id] ) ) {
|
|
$input[$id] = false;
|
|
}
|
|
|
|
// Set each item in the multicheck to false if it wasn't sent in the $_POST
|
|
if ( 'multicheck' == $option['type'] && ! isset( $input[$id] ) ) {
|
|
foreach ( $option['options'] as $key => $value ) {
|
|
$input[$id][$key] = false;
|
|
}
|
|
}
|
|
|
|
// For a value to be submitted to database it must pass through a sanitization filter
|
|
if ( has_filter( 'of_sanitize_' . $option['type'] ) ) {
|
|
$clean[$id] = apply_filters( 'of_sanitize_' . $option['type'], $input[$id], $option );
|
|
}
|
|
}
|
|
|
|
if ( isset( $_POST['sendmail'] ) ) {
|
|
wp_mail( get_bloginfo( 'admin_email' ) ,__('[测试]邮件服务配置成功', 'kratos'),__('恭喜您 SMTP 邮件服务配置成功!', 'kratos'));
|
|
do_action( 'optionsframework_after_sendmail', $clean );
|
|
return $clean;
|
|
} else {
|
|
do_action( 'optionsframework_after_validate', $clean );
|
|
return $clean;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Display message when options have been saved
|
|
*/
|
|
function save_options_notice() {
|
|
add_settings_error( 'options-framework', 'save_options', __( '保存成功', 'kratos' ), 'updated fade' );
|
|
}
|
|
|
|
function send_mail_notice() {
|
|
add_settings_error( 'options-framework', 'send_mail', __( '发送完成,请留意邮箱:' . get_bloginfo( 'admin_email' ), 'kratos' ), 'updated fade' );
|
|
}
|
|
|
|
/**
|
|
* Get the default values for all the theme options
|
|
*
|
|
* Get an array of all default values as set in
|
|
* options.php. The 'id','std' and 'type' keys need
|
|
* to be defined in the configuration array. In the
|
|
* event that these keys are not present the option
|
|
* will not be included in this function's output.
|
|
*
|
|
* @return array Re-keyed options configuration array.
|
|
*
|
|
*/
|
|
function get_default_values() {
|
|
$output = array();
|
|
$config = & Options_Framework::_optionsframework_options();
|
|
foreach ( (array) $config as $option ) {
|
|
if ( ! isset( $option['id'] ) ) {
|
|
continue;
|
|
}
|
|
if ( ! isset( $option['std'] ) ) {
|
|
continue;
|
|
}
|
|
if ( ! isset( $option['type'] ) ) {
|
|
continue;
|
|
}
|
|
if ( has_filter( 'of_sanitize_' . $option['type'] ) ) {
|
|
$output[$option['id']] = apply_filters( 'of_sanitize_' . $option['type'], $option['std'], $option );
|
|
}
|
|
}
|
|
return $output;
|
|
}
|
|
}
|