slug = $slug;
$this->func = str_replace( '-', '_', $slug );
$this->default_tab = $default_tab;
// Run action and filter hooks
$this->hooks();
// Setup the Sysinfo class
if( ! class_exists( 'S214_Sysinfo' ) ) {
require_once 'modules/sysinfo/class.s214-sysinfo.php';
}
$this->sysinfo = new S214_Sysinfo( $this->slug, $this->func, $this->version );
}
/**
* Run action and filter hooks
*
* @access private
* @since 1.0.0
* @return void
*/
private function hooks() {
// Add the plugin setting page
add_action( 'admin_menu', array( $this, 'add_settings_page' ), 10 );
// Register the plugin settings
add_action( 'admin_init', array( $this, 'register_settings' ) );
add_filter( $this->func . '_settings_sanitize_text', array( $this, 'sanitize_text_field' ) );
// Add styles and scripts
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 100 );
// Process actions
add_action( 'admin_init', array( $this, 'process_actions' ) );
// Handle tooltips
add_filter( $this->func . '_after_setting_output', array( $this, 'add_setting_tooltip' ), 10, 2 );
}
/**
* Add settings pages
*
* @access public
* @since 1.0.0
* @global string ${this->func . '_settings_page'} The settings page slug
* @return void
*/
public function add_settings_page() {
global ${$this->func . '_settings_page'};
$menu = apply_filters( $this->func . '_menu', array(
'type' => 'menu',
'parent' => 'options-general.php',
'page_title' => __( 'Section214 Settings', 's214' ),
'show_title' => false,
'menu_title' => __( 'Section214 Settings', 's214' ),
'capability' => 'manage_options',
'icon' => '',
'position' => null
) );
$this->show_title = $menu['show_title'];
$this->page_title = $menu['page_title'];
if( $menu['type'] == 'submenu' ) {
${$this->func . '_settings_page'} = add_submenu_page( $menu['parent'], $menu['page_title'], $menu['menu_title'], $menu['capability'], $this->slug . '-settings', array( $this, 'render_settings_page' ) );
} else {
${$this->func . '_settings_page'} = add_menu_page( $menu['page_title'], $menu['menu_title'], $menu['capability'], $this->slug . '-settings', array( $this, 'render_settings_page' ), $menu['icon'], $menu['position'] );
}
}
/**
* Render settings page
*
* @access public
* @since 1.0.0
* @return void
*/
public function render_settings_page() {
$active_tab = isset( $_GET['tab'] ) && array_key_exists( $_GET['tab'], $this->get_settings_tabs() ) ? $_GET['tab'] : $this->default_tab;
$sections = $registered_sections = $this->get_settings_tab_sections( $active_tab );
$key = 'main';
if( is_array( $sections ) ) {
$key = key( $sections );
}
$section = isset( $_GET['section'] ) && ! empty( $registered_sections ) && array_key_exists( $_GET['section'], $registered_sections ) ? $_GET['section'] : $key;
ob_start();
?>
show_title ) { ?>
page_title; ?>
get_settings_tabs() as $tab_id => $tab_name ) {
$tab_url = add_query_arg( array(
'settings-updated' => false,
'tab' => $tab_id
) );
// Remove the section from the tabs so we always end up at the main section
$tab_url = remove_query_arg( 'section', $tab_url );
$active = $active_tab == $tab_id ? ' nav-tab-active' : '';
echo '' . esc_html( $tab_name ) . '';
}
?>
1 ) {
echo '
';
foreach( $sections as $section_id => $section_name ) {
echo '- ';
$number++;
$tab_url = add_query_arg( array(
'settings-updated' => false,
'tab' => $active_tab,
'section' => $section_id
) );
$class = '';
if( $section == $section_id ) {
$class = 'current';
}
echo '' . $section_name . '';
if( $number != $number_of_sections ) {
echo ' | ';
}
echo '
';
}
echo '
';
}
?>
func . '_settings_tabs', array() );
}
/**
* Retrieve settings tab sections
*
* @access public
* @since 1.0.1
* @param string $tab The current tab
* @return array $section The section items
*/
public function get_settings_tab_sections( $tab = false ) {
$tabs = false;
$sections = $this->get_registered_settings_sections();
if( $tab && ! empty( $sections[$tab] ) ) {
$tabs = $sections[$tab];
} elseif( $tab ) {
$tabs = false;
}
return $tabs;
}
/**
* Retrieve the plugin settings
*
* @access public
* @since 1.0.0
* @return array $settings The plugin settings
*/
public function get_registered_settings() {
return apply_filters( $this->func . '_registered_settings', array() );
}
/**
* Retrieve the plugin settings sections
*
* @access private
* @since 1.0.1
* @return array $sections The registered sections
*/
private function get_registered_settings_sections() {
global ${$this->func . '_sections'};
if ( !empty( ${$this->func . '_sections'} ) ) {
return ${$this->func . '_sections'};
}
${$this->func . '_sections'} = apply_filters( $this->func . '_registered_settings_sections', array() );
return ${$this->func . '_sections'};
}
/**
* Retrieve an option
*
* @access public
* @since 1.0.0
* @param string $key The key to retrieve
* @param mixed $default The default value if key doesn't exist
* @global array ${$this->func . '_options'} The options array
* @return mixed $value The value to return
*/
public function get_option( $key = '', $default = false ) {
global ${$this->func . '_options'};
$value = ! empty( ${$this->func . '_options'}[$key] ) ? ${$this->func . '_options'}[$key] : $default;
$value = apply_filters( $this->func . '_get_option', $value, $key, $default );
return apply_filters( $this->func . '_get_option_' . $key, $value, $key, $default );
}
/**
* Update an option
*
* @access public
* @since 1.0.0
* @param string $key The key to update
* @param mixed $value The value to set key to
* @return bool true if updated, false otherwise
*/
public function update_option( $key = '', $value = false ) {
// Bail if no key is set
if( empty( $key ) ) {
return false;
}
if( empty( $value ) ) {
$remove_option = $this->delete_option( $key );
return $remove_option;
}
// Fetch a clean copy of the options array
$options = get_option( $this->func . '_settings' );
// Allow devs to modify the value
$value = apply_filters( $this->func . '_update_option', $value, $key );
// Try to update the option
$options[$key] = $value;
$did_update = update_option( $this->func . '_settings', $options );
// Update the global
if( $did_update ) {
global ${$this->func . '_options'};
${$this->func . '_options'}[$key] = $value;
}
return $did_update;
}
/**
* Delete an option
*
* @access public
* @since 1.0.0
* @param string $key The key to delete
* @return bool true if deleted, false otherwise
*/
public function delete_option( $key = '' ) {
// Bail if no key is set
if( empty( $key ) ) {
return false;
}
// Fetch a clean copy of the options array
$options = get_option( $this->func . '_settings' );
// Try to unset the option
if( isset( $options[$key] ) ) {
unset( $options[$key] );
}
$did_update = update_option( $this->func . '_settings', $options );
// Update the global
if( $did_update ) {
global ${$this->func . '_options'};
${$this->func . '_options'} = $options;
}
return $did_update;
}
/**
* Retrieve all options
*
* @access public
* @since 1.0.0
* @return array $settings The options array
*/
public function get_settings() {
$settings = get_option( $this->func . '_settings' );
if( empty( $settings ) ) {
$settings = array();
update_option( $this->func . '_settings', $settings );
}
return apply_filters( $this->func . '_get_settings', $settings );
}
/**
* Add settings sections and fields
*
* @access public
* @since 1.0.0
* @return void
*/
function register_settings() {
if( get_option( $this->func . '_settings' ) == false ) {
add_option( $this->func . '_settings' );
}
foreach( $this->get_registered_settings() as $tab => $sections ) {
foreach( $sections as $section => $settings ) {
// Check for backwards compatibility
$section_tabs = $this->get_settings_tab_sections( $tab );
if( ! is_array( $section_tabs ) || ! array_key_exists( $section, $section_tabs ) ) {
$section = 'main';
$settings = $sections;
}
add_settings_section(
$this->func . '_settings_' . $tab . '_' . $section,
__return_null(),
'__return_false',
$this->func . '_settings_' . $tab . '_' . $section
);
foreach( $settings as $option ) {
// For backwards compatibility
if( empty( $option['id'] ) ) {
continue;
}
$name = isset( $option['name'] ) ? $option['name'] : '';
add_settings_field(
$this->func . '_settings[' . $option['id'] . ']',
$name,
function_exists( $this->func . '_' . $option['type'] . '_callback' ) ? $this->func . '_' . $option['type'] . '_callback' : ( method_exists( $this, $option['type'] . '_callback' ) ? array( $this, $option['type'] . '_callback' ) : array( $this, 'missing_callback' ) ),
$this->func . '_settings_' . $tab . '_' . $section,
$this->func . '_settings_' . $tab . '_' . $section,
array(
'section' => $section,
'id' => isset( $option['id'] ) ? $option['id'] : null,
'desc' => ! empty( $option['desc'] ) ? $option['desc'] : '',
'name' => isset( $option['name'] ) ? $option['name'] : null,
'size' => isset( $option['size'] ) ? $option['size'] : null,
'options' => isset( $option['options'] ) ? $option['options'] : '',
'std' => isset( $option['std'] ) ? $option['std'] : '',
'min' => isset( $option['min'] ) ? $option['min'] : null,
'max' => isset( $option['max'] ) ? $option['max'] : null,
'step' => isset( $option['step'] ) ? $option['step'] : null,
'select2' => isset( $option['select2'] ) ? $option['select2'] : null,
'placeholder' => isset( $option['placeholder'] ) ? $option['placeholder'] : null,
'multiple' => isset( $option['multiple'] ) ? $option['multiple'] : null,
'allow_blank' => isset( $option['allow_blank'] ) ? $option['allow_blank'] : true,
'readonly' => isset( $option['readonly'] ) ? $option['readonly'] : false,
'buttons' => isset( $option['buttons'] ) ? $option['buttons'] : null,
'wpautop' => isset( $option['wpautop'] ) ? $option['wpautop'] : null,
'teeny' => isset( $option['teeny'] ) ? $option['teeny'] : null,
'tab' => isset( $option['tab'] ) ? $option['tab'] : null,
'tooltip_title' => isset( $option['tooltip_title'] ) ? $option['tooltip_title'] : false,
'tooltip_desc' => isset( $option['tooltip_desc'] ) ? $option['tooltip_desc'] : false
)
);
}
}
}
register_setting( $this->func . '_settings', $this->func . '_settings', array( $this, 'settings_sanitize' ) );
}
/**
* Settings sanitization
*
* @access public
* @since 1.0.0
* @param array $input The value entered in the field
* @global array ${$this->func . '_options'} The options array
* @return string $input The sanitized value
*/
public function settings_sanitize( $input = array() ) {
global ${$this->func . '_options'};
$doing_section = false;
if( ! empty( $_POST['_wp_http_referer'] ) ) {
$doing_section = true;
}
$setting_types = $this->get_registered_settings_types();
$input = $input ? $input : array();
if( $doing_section ) {
parse_str( $_POST['_wp_http_referer'], $referrer );
$tab = isset( $referrer['tab'] ) ? $referrer['tab'] : $this->default_tab;
$section = isset( $referrer['section'] ) ? $referrer['section'] : 'main';
$input = apply_filters( $this->func . '_settings_' . $tab . '_sanitize', $input );
$input = apply_filters( $this->func . '_settings_' . $tab . '-' . $section . '_sanitize', $input );
}
$output = array_merge( ${$this->func . '_options'}, $input );
foreach( $setting_types as $key => $type ) {
if( empty( $type ) ) {
continue;
}
// Bypass non-setting settings
$non_setting_types = apply_filters( $this->func . '_non_setting_types', array(
'header', 'descriptive_text', 'hook'
) );
if( in_array( $type, $non_setting_types ) ) {
continue;
}
if( array_key_exists( $key, $output ) ) {
$output[$key] = apply_filters( $this->func . '_settings_sanitize_' . $type, $output[$key], $key );
$output[$key] = apply_filters( $this->func . '_settings_sanitize', $output[$key], $key );
}
if( $doing_section ) {
switch( $type ) {
case 'checkbox':
if( array_key_exists( $key, $input ) && $output[$key] === '-1' ) {
unset( $output[$key] );
}
break;
default:
if( array_key_exists( $key, $input ) && empty( $input[$key] ) ) {
unset( $output[$key] );
}
break;
}
} else {
if( empty( $input[$key] ) ) {
unset( $output[$key] );
}
}
}
if( $doing_section ) {
add_settings_error( $this->slug . '-notices', '', __( 'Your settings have been saved.', 's214-settings' ), 'updated' );
}
return $output;
}
/**
* Flattens the set of registered settings and their type so we can easily sanitize all settings
*
* @since 1.2.0
* @return array Key is the setting ID, value is the type of setting it is registered as
*/
function get_registered_settings_types() {
$settings = $this->get_registered_settings();
$setting_types = array();
foreach( $settings as $tab ) {
foreach( $tab as $section_or_setting ) {
// See if we have a setting registered at the tab level for backwards compatibility
if( is_array( $section_or_setting ) && array_key_exists( 'type', $section_or_setting ) ) {
$setting_types[$section_or_setting['id']] = $section_or_setting['type'];
continue;
}
foreach( $section_or_setting as $section => $section_settings ) {
$setting_types[$section_settings['id']] = $section_settings['type'];
}
}
}
return $setting_types;
}
/**
* Sanitize text fields
*
* @access public
* @since 1.0.0
* @param array $input The value entered in the field
* @return string $input The sanitized value
*/
public function sanitize_text_field( $input ) {
return trim( wp_strip_all_tags( $input, true ) );
}
/**
* Header callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @return void
*/
public function header_callback( $args ) {
echo '
';
}
/**
* Checkbox callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @global array ${$this->func . '_options'} The plugin options
* @return void
*/
public function checkbox_callback( $args ) {
global ${$this->func . '_options'};
$name = ' name="' . $this->func . '_settings[' . $args['id'] . ']"';
$checked = isset( ${$this->func . '_options'}[$args['id']] ) ? checked( 1, ${$this->func . '_options'}[$args['id']], false ) : '';
$html = '';
$html .= ' ';
$html .= '';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* Color callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the settings
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function color_callback( $args ) {
global ${$this->func . '_options'};
if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
$value = ${$this->func . '_options'}[$args['id']];
} else {
$value = isset( $args['std'] ) ? $args['std'] : '';
}
$default = isset( $args['std'] ) ? $args['std'] : '';
$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
$html = ' ';
$html .= '';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* Descriptive text callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @return void
*/
public function descriptive_text_callback( $args ) {
$html = wp_kses_post( $args['desc'] );
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* Editor callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function editor_callback( $args ) {
global ${$this->func . '_options'};
if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
$value = ${$this->func . '_options'}[$args['id']];
if( empty( $args['allow_blank'] ) && empty( $value ) ) {
$value = isset( $args['std'] ) ? $args['std'] : '';
}
} else {
$value = isset( $args['std'] ) ? $args['std'] : '';
}
$rows = isset( $args['size'] ) ? $args['size'] : '10';
$wpautop = isset( $args['wpautop'] ) ? $args['wpautop'] : true;
$buttons = isset( $args['buttons'] ) ? $args['buttons'] : true;
$teeny = isset( $args['teeny'] ) ? $args['teeny'] : false;
wp_editor(
$value,
$this->func . '_settings_' . $args['id'],
array(
'wpautop' => $wpautop,
'media_buttons' => $buttons,
'textarea_name' => $this->func . '_settings[' . $args['id'] . ']',
'textarea_rows' => $rows,
'teeny' => $teeny
)
);
$html = '
';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* HTML callback
*
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function html_callback( $args ) {
global ${$this->func . '_options'};
if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
$value = ${$this->func . '_options'}[$args['id']];
} else {
$value = isset( $args['std'] ) ? $args['std'] : '';
}
$html = ' ';
$html .= '';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* Multicheck callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function multicheck_callback( $args ) {
global ${$this->func . '_options'};
if( ! empty( $args['options'] ) ) {
$html = '';
foreach( $args['options'] as $key => $option ) {
if( isset( ${$this->func . '_options'}[$args['id']][$key] ) ) {
$enabled = $option;
} else {
$enabled = isset( $args['std'][$key] ) ? $args['std'][$key] : NULL;
}
$html .= ' ';
$html .= '
';
}
$html .= '' . $args['desc'] . '
';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
}
/**
* Number callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function number_callback( $args ) {
global ${$this->func . '_options'};
if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
$value = ${$this->func . '_options'}[$args['id']];
} else {
$value = isset( $args['std'] ) ? $args['std'] : '';
}
$name = ' name="' . $this->func . '_settings[' . $args['id'] . ']"';
$max = isset( $args['max'] ) ? $args['max'] : 999999;
$min = isset( $args['min'] ) ? $args['min'] : 0;
$step = isset( $args['step'] ) ? $args['step'] : 1;
$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
$readonly = $args['readonly'] === true ? ' readonly="readonly"' : '';
$html = ' ';
$html .= '';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* Password callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the settings
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function password_callback( $args ) {
global ${$this->func . '_options'};
if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
$value = ${$this->func . '_options'}[$args['id']];
} else {
$value = isset( $args['std'] ) ? $args['std'] : '';
}
$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
$html = ' ';
$html .= '';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* Radio callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function radio_callback( $args ) {
global ${$this->func . '_options'};
if( ! empty( $args['options'] ) ) {
$html = '';
foreach( $args['options'] as $key => $option ) {
$checked = false;
if( isset( ${$this->func . '_options'}[$args['id']] ) && ${$this->func . '_options'}[$args['id']] == $key ) {
$checked = true;
} elseif( isset( $args['std'] ) && $args['std'] == $key && ! isset( ${$this->func . '_options'}[$args['id']] ) ) {
$checked = true;
}
$html .= ' ';
$html .= '
';
}
$html .= '' . $args['desc'] . '
';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
}
/**
* Select callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function select_callback( $args ) {
global ${$this->func . '_options'};
if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
$value = ${$this->func . '_options'}[$args['id']];
} else {
$value = isset( $args['std'] ) ? $args['std'] : '';
}
$placeholder = isset( $args['placeholder'] ) ? $args['placeholder'] : '';
$select2 = isset( $args['select2'] ) ? ' class="s214-select2"' : '';
$width = isset( $args['size'] ) ? ' style="width: ' . $args['size'] . '"' : '';
if( isset( $args['multiple'] ) && $args['multiple'] === true ) {
$html = '';
} else {
$html = '';
}
foreach( $args['options'] as $option => $name ) {
if( isset( $args['multiple'] ) && $args['multiple'] === true ) {
if( is_array( $value ) ) {
$selected = ( in_array( $option, $value ) ? 'selected="selected"' : '' );
} else {
$selected = '';
}
} else {
if( is_string( $value ) ) {
$selected = selected( $option, $value, false );
} else {
$selected = '';
}
}
$html .= '';
}
$html .= ' ';
$html .= '';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* Sysinfo callback
*
* @since 1.1.0
* @param array $args Arguements passed by the settings
* @return void
*/
public function sysinfo_callback( $args ) {
global ${$this->func . '_options'};
if( ! isset( ${$this->func . '_options'}[$args['tab']] ) || ( isset( ${$this->func . '_options'}[$args['tab']] ) && isset( $_GET['tab'] ) && $_GET['tab'] == ${$this->func . '_options'}[$args['tab']] ) ) {
$html = '';
$html .= '';
$html .= '';
$html .= '' . __( 'Download System Info File', 's214-settings' ) . '';
$html .= '
';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
}
/**
* Text callback
*
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function text_callback( $args ) {
global ${$this->func . '_options'};
if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
$value = ${$this->func . '_options'}[$args['id']];
} else {
$value = isset( $args['std'] ) ? $args['std'] : '';
}
$name = ' name="' . $this->func . '_settings[' . $args['id'] . ']"';
$readonly = $args['readonly'] === true ? ' readonly="readonly"' : '';
$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
$html = ' ';
$html .= '';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* Textarea callback
*
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function textarea_callback( $args ) {
global ${$this->func . '_options'};
if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
$value = ${$this->func . '_options'}[$args['id']];
} else {
$value = isset( $args['std'] ) ? $args['std'] : '';
}
$html = ' ';
$html .= '';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* Upload callback
*
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function upload_callback( $args ) {
global ${$this->func . '_options'};
if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
$value = ${$this->func . '_options'}[$args['id']];
} else {
$value = isset( $args['std'] ) ? $args['std'] : '';
}
$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
$html = ' ';
$html .= ' ';
$html .= '';
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* License field callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @global array ${$this->func . '_options'} The Beacon options
* @return void
*/
public function license_key_callback( $args ) {
global ${$this->func . '_options'};
if( isset( ${$this->func . '_options'}[$args['id']] ) ) {
$value = ${$this->func . '_options'}[$args['id']];
} else {
$value = isset( $args['std'] ) ? $args['std'] : '';
}
$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
$html = ' ';
if( get_option( $args['options']['is_valid_license_option'] ) ) {
$html .= '';
}
$html .= '';
wp_nonce_field( $args['id'] . '-nonce', $args['id'] . '-nonce' );
echo apply_filters( $this->func . '_after_setting_output', $html, $args );
}
/**
* Hook callback
*
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @return void
*/
public function hook_callback( $args ) {
do_action( $this->func . '_' . $args['id'] );
}
/**
* Missing callback
*
* @access public
* @since 1.0.0
* @param array $args Arguments passed by the setting
* @return void
*/
public function missing_callback( $args ) {
printf( __( 'The callback function used for the %s setting is missing.', 's214-settings' ), $args['id'] );
}
/**
* Check if we should load admin scripts
*
* @access public
* @since 1.0.0
* @param string $hook The hook for the current page
* @return bool true if we should load scripts, false otherwise
*/
public function load_scripts( $hook ) {
global $typenow, $pagenow, ${$this->func . '_settings_page'};
$ret = false;
$pages = apply_filters( $this->func . '_admin_pages', array( ${$this->func . '_settings_page'} ) );
if( in_array( $hook, $pages ) ) {
$ret = true;
}
return (bool) apply_filters( $this->func . 'load_scripts', $ret );
}
/**
* Processes all actions sent via POST and GET by looking for the '$func-settings-action'
* request and running do_action() to call the function
*
* @since 1.1.0
* @return void
*/
function process_actions() {
if( ! isset( $_POST['submit'] ) ) {
if( isset( $_POST[$this->slug . '-settings-action'] ) ) {
do_action( $this->func . '_settings_' . $_POST[$this->slug . '-settings-action'], $_POST );
}
if( isset( $_GET[$this->slug . '-settings-action'] ) ) {
do_action( $this->func . '_settings_' . $_GET[$this->slug . '-settings-action'], $_GET );
}
}
}
/**
* Enqueue scripts
*
* @access public
* @since 1.0.0
* @param string $hook The current page hook
* @return void
*/
public function enqueue_scripts( $hook ) {
if( ! apply_filters( $this->func . '_load_admin_scripts', $this->load_scripts( $hook ), $hook ) ) {
return;
}
// Use minified libraries if SCRIPT_DEBUG is turned off
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
$ui_style = ( get_user_option( 'admin_color' ) == 'classic' ) ? 'classic' : 'fresh';
$url_path = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, dirname( __FILE__ ) );
$select2_cdn = 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2/';
$cm_cdn = 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.14.2/';
wp_enqueue_style( 'wp-color-picker' );
wp_enqueue_script( 'wp-color-picker' );
wp_enqueue_script( 'jquery-ui-tooltip' );
wp_enqueue_media();
wp_enqueue_style( 'jquery-ui-css', $url_path . '/assets/css/jquery-ui-' . $ui_style . '.min.css' );
wp_enqueue_script( 'media-upload' );
wp_enqueue_style( 'thickbox' );
wp_enqueue_script( 'thickbox' );
wp_enqueue_style( 'select2', $select2_cdn . 'css/select2.min.css', array(), '4.0.2' );
wp_enqueue_script( 'select2', $select2_cdn . 'js/select2.min.js', array( 'jquery' ), '4.0.2' );
wp_enqueue_style( $this->slug . '-cm', $cm_cdn . 'codemirror.css', array(), '5.10' );
wp_enqueue_script( $this->slug . '-cm', $cm_cdn . 'codemirror.js', array( 'jquery' ), '5.14.2' );
wp_enqueue_script( $this->slug . '-cm-html', $cm_cdn . 'mode/htmlmixed/htmlmixed.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
wp_enqueue_script( $this->slug . '-cm-xml', $cm_cdn . 'mode/xml/xml.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
wp_enqueue_script( $this->slug . '-cm-js', $cm_cdn . 'mode/javascript/javascript.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
wp_enqueue_script( $this->slug . '-cm-css', $cm_cdn . 'mode/css/css.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
wp_enqueue_script( $this->slug . '-cm-php', $cm_cdn . 'mode/php/php.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
wp_enqueue_script( $this->slug . '-cm-clike', $cm_cdn . 'mode/clike/clike.js', array( 'jquery', $this->slug . '-cm' ), '5.14.2' );
wp_enqueue_style( $this->slug . '-s214-settings', $url_path . '/assets/css/admin' . $suffix . '.css', array(), $this->version );
wp_enqueue_script( $this->slug . '-s214-settings', $url_path . '/assets/js/admin' . $suffix . '.js', array( 'jquery' ), $this->version );
wp_localize_script( $this->slug . '-s214-settings', 's214_settings_vars', apply_filters( $this->func . 'localize_script', array(
'func' => $this->func,
'image_media_button' => __( 'Insert Image', 's214-settings' ),
'image_media_title' => __( 'Select Image', 's214-settings' ),
) ) );
}
/**
* Add tooltips
*
* @access public
* @since 1.2.0
* @param string $html The current field HTML
* @param array $args Arguments passed to the field
* @return string $html The updated field HTML
*/
function add_setting_tooltip( $html, $args ) {
if( ! empty( $args['tooltip_title'] ) && ! empty( $args['tooltip_desc'] ) ) {
$tooltip = '';
$html .= $tooltip;
}
return $html;
}
}