$args )
new $class( $args[0], $args[1] );
}
// ____________MAIN METHODS____________
// Constructor
function __construct( $file = false, $options = null ) {
if ( is_a( $options, 'scbOptions' ) )
$this->options = $options;
$this->setup();
$this->check_args();
if ( isset( $this->option_name ) ) {
add_action( 'admin_init', array( $this, 'option_init' ) );
if ( function_exists( 'settings_errors' ) )
add_action( 'admin_notices', 'settings_errors' );
}
add_action( 'admin_menu', array( $this, 'page_init' ), $this->args['admin_action_priority'] );
add_filter( 'contextual_help', array( $this, '_contextual_help' ), 10, 2 );
if ( $file ) {
$this->file = $file;
$this->plugin_url = plugin_dir_url( $file );
if ( $this->args['action_link'] )
add_filter( 'plugin_action_links_' . plugin_basename( $file ), array( $this, '_action_link' ) );
}
}
// This is where all the page args can be set
function setup(){}
/**
* Called when the page is loaded, but before any rendering.
*
* Useful for calling $screen->add_help_tab() etc.
*/
function page_loaded() {}
// This is where the css and js go
// Both wp_enqueue_*() and inline code can be added
function page_head(){}
// This is where the contextual help goes
// @return string
function page_help(){}
// A generic page header
function page_header() {
echo "
\n";
screen_icon( $this->args['screen_icon'] );
echo html( "h2", $this->args['page_title'] );
}
// This is where the page content goes
abstract function page_content();
// A generic page footer
function page_footer() {
echo "
\n";
}
// This is where the form data should be validated
function validate( $new_data, $old_data ) {
return $new_data;
}
// Manually handle option saving ( use Settings API instead )
function form_handler() {
if ( empty( $_POST['action'] ) )
return false;
check_admin_referer( $this->nonce );
if ( !isset($this->options) ) {
trigger_error('options handler not set', E_USER_WARNING);
return false;
}
$new_data = wp_array_slice_assoc( $_POST, array_keys( $this->options->get_defaults() ) );
$new_data = stripslashes_deep( $new_data );
$new_data = $this->validate( $new_data, $this->options->get() );
$this->options->set( $new_data );
$this->admin_msg();
}
// Manually generate a standard admin notice ( use Settings API instead )
function admin_msg( $msg = '', $class = "updated" ) {
if ( empty( $msg ) )
$msg = __( 'Settings saved.', 'barber' );
echo scb_admin_notice( $msg, $class );
}
// ____________UTILITIES____________
// Generates a form submit button
function submit_button( $value = '', $action = 'action', $class = "button" ) {
if ( is_array( $value ) ) {
extract( wp_parse_args( $value, array(
'value' => __( 'Save Changes', 'barber' ),
'action' => 'action',
'class' => 'button',
'ajax' => true
) ) );
if ( ! $ajax )
$class .= ' no-ajax';
}
else {
if ( empty( $value ) )
$value = __( 'Save Changes', 'barber' );
}
$input_args = array(
'type' => 'submit',
'name' => $action,
'value' => $value,
'extra' => '',
'desc' => false,
'wrap' => html( 'p class="submit"', scbForms::TOKEN )
);
if ( ! empty( $class ) )
$input_args['extra'] = compact( 'class' );
return scbForms::input( $input_args );
}
/*
Mimics scbForms::form_wrap()
$this->form_wrap( $content ); // generates a form with a default submit button
$this->form_wrap( $content, false ); // generates a form with no submit button
// the second argument is sent to submit_button()
$this->form_wrap( $content, array( 'text' => 'Save changes',
'name' => 'action',
'ajax' => true,
) );
*/
function form_wrap( $content, $submit_button = true ) {
if ( is_array( $submit_button ) ) {
$content .= $this->submit_button( $submit_button );
} elseif ( true === $submit_button ) {
$content .= $this->submit_button();
} elseif ( false !== strpos( $submit_button, 'nonce );
}
// Generates a table wrapped in a form
function form_table( $rows, $formdata = false ) {
$output = '';
foreach ( $rows as $row )
$output .= $this->table_row( $row, $formdata );
$output = $this->form_table_wrap( $output );
return $output;
}
// Wraps the given content in a