args and define the page_content() method */ abstract class scbAdminPage { /** Page args * $toplevel string If not empty, will create a new top level menu * $icon string Path to an icon for the top level menu * $parent string (default: options-general.php) * $capability string (default: 'manage_options') * $page_title string (mandatory) * $menu_title string (default: $page_title) * $page_slug string (default: sanitized $page_title) * $nonce string (default: $page_slug) * $action_link string|bool Text of the action link on the Plugins page (default: 'Settings') */ protected $args; // URL to the current plugin directory. // Useful for adding css and js files protected $plugin_url; // Created at page init protected $pagehook; // scbOptions object holder // Normally, it's used for storing formdata protected $options; // l10n protected $textdomain; // Formdata used for filling the form elements protected $formdata = array(); // Registration component private static $registered = array(); static function register($class, $file, $options = null) { if ( isset(self::$registered[$class]) ) return false; self::$registered[$class] = array($file, $options); add_action('_admin_menu', array(__CLASS__, '_pages_init')); return true; } static function replace($old_class, $new_class) { if ( ! isset(self::$registered[$old_class]) ) return false; self::$registered[$new_class] = self::$registered[$old_class]; unset(self::$registered[$old_class]); return true; } static function remove($class) { if ( ! isset(self::$registered[$class]) ) return false; unset(self::$registered[$class]); return true; } static function _pages_init() { foreach ( self::$registered as $class => $args ) new $class($args[0], $args[1]); } // ____________MAIN METHODS____________ // Constructor function __construct($file, $options = NULL) { if ( $options !== NULL ) { $this->options = $options; $this->formdata = $this->options->get(); } $this->file = $file; $this->plugin_url = plugin_dir_url($file); $this->setup(); $this->check_args(); add_action('admin_menu', array($this, 'page_init')); add_filter('contextual_help', array($this, '_contextual_help'), 10, 2); 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(){} // 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" . scbForms::input($input_args) . "
\n"; return $output; } /* 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 .= call_user_func(array($this, 'submit_button'), $submit_button); } elseif ( true === $submit_button ) { $content .= $this->submit_button(); } elseif ( false !== strpos($submit_button, 'nonce); } // See scbForms::input() function input($args, $options = NULL) { if ( $options === NULL ) $options = $this->formdata; return scbForms::input($args, $options); } // See scbForms::form() function form($rows, $options = NULL) { if ( $options === NULL ) $options = $this->formdata; return scbForms::form($rows, $options, $this->nonce); } // See scbForms::table() function table($rows, $options = NULL) { if ( $options === NULL ) $options = $this->formdata; return scbForms::table($rows, $options); } // See scbForms::table_row() function table_row($row, $options = NULL) { if ( $options === NULL ) $options = $this->formdata; return scbForms::table_row($row, $options); } // Mimics scbForms::form_table() function form_table($rows, $options = NULL) { $output = $this->table($rows, $options); $args = array_slice(func_get_args(), 2); array_unshift($args, $output); return call_user_func_array(array($this, 'form_wrap'), $args); } // Mimics scbForms::form_table_wrap() function form_table_wrap($content) { $output = self::table_wrap($content); $args = array_slice(func_get_args(), 1); array_unshift($args, $output); return call_user_func_array(array($this, 'form_wrap'), $args); } // Generates a standard admin notice function admin_msg($msg = '', $class = "updated") { if ( empty($msg) ) $msg = __('Settings saved.', $this->textdomain); echo "$msg