X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/5aa86a9053fb0fa15846bb60aac2fb8fdfff524a..a349837896628462bf8c9bdc27d1477a10fe03eb:/wp-admin/includes/screen.php diff --git a/wp-admin/includes/screen.php b/wp-admin/includes/screen.php index a182b745..85ab7124 100644 --- a/wp-admin/includes/screen.php +++ b/wp-admin/includes/screen.php @@ -96,7 +96,7 @@ function get_hidden_meta_boxes( $screen ) { if ( $use_defaults ) { $hidden = array(); if ( 'post' == $screen->base ) { - if ( 'post' == $screen->post_type || 'page' == $screen->post_type ) + if ( 'post' == $screen->post_type || 'page' == $screen->post_type || 'attachment' == $screen->post_type ) $hidden = array('slugdiv', 'trackbacksdiv', 'postcustom', 'postexcerpt', 'commentstatusdiv', 'commentsdiv', 'authordiv', 'revisionsdiv'); else $hidden = array( 'slugdiv' ); @@ -114,7 +114,6 @@ function get_hidden_meta_boxes( $screen ) { * * @param string $option An option name. * @param mixed $args Option-dependent arguments. - * @return void */ function add_screen_option( $option, $args = array() ) { $current_screen = get_current_screen(); @@ -125,58 +124,12 @@ function add_screen_option( $option, $args = array() ) { $current_screen->add_option( $option, $args ); } -/** - * Displays a screen icon. - * - * @uses get_screen_icon() - * @since 2.7.0 - * - * @param string|WP_Screen $screen Optional. Accepts a screen object (and defaults to the current screen object) - * which it uses to determine an icon HTML ID. Or, if a string is provided, it is used to form the icon HTML ID. - */ -function screen_icon( $screen = '' ) { - echo get_screen_icon( $screen ); -} - -/** - * Gets a screen icon. - * - * @since 3.2.0 - * - * @param string|WP_Screen $screen Optional. Accepts a screen object (and defaults to the current screen object) - * which it uses to determine an icon HTML ID. Or, if a string is provided, it is used to form the icon HTML ID. - * @return string HTML for the screen icon. - */ -function get_screen_icon( $screen = '' ) { - if ( empty( $screen ) ) - $screen = get_current_screen(); - elseif ( is_string( $screen ) ) - $icon_id = $screen; - - $class = 'icon32'; - - if ( empty( $icon_id ) ) { - if ( ! empty( $screen->parent_base ) ) - $icon_id = $screen->parent_base; - else - $icon_id = $screen->base; - - if ( 'page' == $screen->post_type ) - $icon_id = 'edit-pages'; - - if ( $screen->post_type ) - $class .= ' ' . sanitize_html_class( 'icon32-posts-' . $screen->post_type ); - } - - return '

'; -} - /** * Get the current screen object * * @since 3.1.0 * - * @return object Current screen object + * @return WP_Screen Current screen object */ function get_current_screen() { global $current_screen; @@ -196,7 +149,7 @@ function get_current_screen() { * @param mixed $hook_name Optional. The hook name (also known as the hook suffix) used to determine the screen, * or an existing screen object. */ -function set_current_screen( $hook_name = '' ) { +function set_current_screen( $hook_name = '' ) { WP_Screen::get( $hook_name )->set_current_screen(); } @@ -208,7 +161,7 @@ function set_current_screen( $hook_name = '' ) { */ final class WP_Screen { /** - * Any action associated with the screen. 'add' for *-add.php and *-new.php screens. Empty otherwise. + * Any action associated with the screen. 'add' for *-add.php and *-new.php screens. Empty otherwise. * * @since 3.3.0 * @var string @@ -217,7 +170,7 @@ final class WP_Screen { public $action; /** - * The base type of the screen. This is typically the same as $id but with any post types and taxonomies stripped. + * The base type of the screen. This is typically the same as $id but with any post types and taxonomies stripped. * For example, for an $id of 'edit-post' the base is 'edit'. * * @since 3.3.0 @@ -226,6 +179,15 @@ final class WP_Screen { */ public $base; + /** + * The number of columns to display. Access with get_columns(). + * + * @since 3.4.0 + * @var int + * @access private + */ + private $columns = 0; + /** * The unique ID of the screen. * @@ -235,10 +197,22 @@ final class WP_Screen { */ public $id; + /** + * Which admin the screen is in. network | user | site | false + * + * @since 3.5.0 + * @var string + * @access protected + */ + protected $in_admin; + /** * Whether the screen is in the network admin. * + * Deprecated. Use in_admin() instead. + * * @since 3.3.0 + * @deprecated 3.5.0 * @var bool * @access public */ @@ -247,7 +221,10 @@ final class WP_Screen { /** * Whether the screen is in the user admin. * + * Deprecated. Use in_admin() instead. + * * @since 3.3.0 + * @deprecated 3.5.0 * @var bool * @access public */ @@ -296,20 +273,20 @@ final class WP_Screen { /** * The help tab data associated with the screen, if any. - * - * @since 3.3.0 - * @var array - * @access private - */ + * + * @since 3.3.0 + * @var array + * @access private + */ private $_help_tabs = array(); - /** + /** * The help sidebar data associated with screen, if any. * * @since 3.3.0 * @var string * @access private - */ + */ private $_help_sidebar = ''; /** @@ -353,23 +330,23 @@ final class WP_Screen { */ private $_screen_settings; - /** + /** * Fetches a screen object. - * - * @since 3.3.0 + * + * @since 3.3.0 * @access public - * + * * @param string $hook_name Optional. The hook name (also known as the hook suffix) used to determine the screen. * Defaults to the current $hook_suffix global. * @return WP_Screen Screen object. - */ + */ public static function get( $hook_name = '' ) { if ( is_a( $hook_name, 'WP_Screen' ) ) return $hook_name; $post_type = $taxonomy = null; - $is_network = $is_user = false; + $in_admin = false; $action = ''; if ( $hook_name ) @@ -394,30 +371,39 @@ final class WP_Screen { if ( ! $post_type && $hook_name ) { if ( '-network' == substr( $id, -8 ) ) { $id = substr( $id, 0, -8 ); - $is_network = true; + $in_admin = 'network'; } elseif ( '-user' == substr( $id, -5 ) ) { $id = substr( $id, 0, -5 ); - $is_user = true; + $in_admin = 'user'; } $id = sanitize_key( $id ); if ( 'edit-comments' != $id && 'edit-tags' != $id && 'edit-' == substr( $id, 0, 5 ) ) { $maybe = substr( $id, 5 ); if ( taxonomy_exists( $maybe ) ) { - $id = 'edit-tags'; + $id = 'edit-tags'; $taxonomy = $maybe; } elseif ( post_type_exists( $maybe ) ) { $id = 'edit'; $post_type = $maybe; } - } + } + + if ( ! $in_admin ) + $in_admin = 'site'; } else { - $is_network = is_network_admin(); - $is_user = is_user_admin(); + if ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) + $in_admin = 'network'; + elseif ( defined( 'WP_USER_ADMIN' ) && WP_USER_ADMIN ) + $in_admin = 'user'; + else + $in_admin = 'site'; } if ( 'index' == $id ) $id = 'dashboard'; + elseif ( 'front' == $id ) + $in_admin = false; $base = $id; @@ -448,7 +434,7 @@ final class WP_Screen { $post_type = 'post'; break; } - } + } switch ( $base ) { case 'post' : @@ -464,17 +450,24 @@ final class WP_Screen { case 'edit-tags' : if ( null === $taxonomy ) $taxonomy = 'post_tag'; + // The edit-tags ID does not contain the post type. Look for it in the request. + if ( null === $post_type ) { + $post_type = 'post'; + if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) ) + $post_type = $_REQUEST['post_type']; + } + $id = 'edit-' . $taxonomy; break; } - if ( $is_network ) { + if ( 'network' == $in_admin ) { $id .= '-network'; $base .= '-network'; - } elseif ( $is_user ) { + } elseif ( 'user' == $in_admin ) { $id .= '-user'; $base .= '-user'; - } + } if ( isset( self::$_registry[ $id ] ) ) { $screen = self::$_registry[ $id ]; @@ -489,13 +482,14 @@ final class WP_Screen { $screen->action = $action; $screen->post_type = (string) $post_type; $screen->taxonomy = (string) $taxonomy; - $screen->is_user = $is_user; - $screen->is_network = $is_network; + $screen->is_user = ( 'user' == $in_admin ); + $screen->is_network = ( 'network' == $in_admin ); + $screen->in_admin = $in_admin; self::$_registry[ $id ] = $screen; return $screen; - } + } /** * Makes the screen object the current screen. @@ -519,6 +513,23 @@ final class WP_Screen { */ private function __construct() {} + /** + * Indicates whether the screen is in a particular admin + * + * @since 3.5.0 + * + * @param string $admin The admin to check against (network | user | site). + * If empty any of the three admins will result in true. + * @return boolean True if the screen is in the indicated admin, false otherwise. + * + */ + public function in_admin( $admin = null ) { + if ( empty( $admin ) ) + return (bool) $this->in_admin; + + return ( $admin == $this->in_admin ); + } + /** * Sets the old string-based contextual help for the screen. * @@ -539,7 +550,7 @@ final class WP_Screen { * * @since 3.3.0 * - * @param string $parent_file The parent file of the screen. Typically the $parent_file global. + * @param string $parent_file The parent file of the screen. Typically the $parent_file global. */ function set_parentage( $parent_file ) { $this->parent_file = $parent_file; @@ -560,12 +571,44 @@ final class WP_Screen { $this->_options[ $option ] = $args; } + /** + * Remove an option from the screen. + * + * @since 3.8.0 + * + * @param string $option Option ID. + */ + public function remove_option( $option ) { + unset( $this->_options[ $option ] ); + } + + /** + * Remove all options from the screen. + * + * @since 3.8.0 + */ + public function remove_options() { + $this->_options = array(); + } + + /** + * Get the options registered for the screen. + * + * @since 3.8.0 + * + * @return array Options with arguments. + */ + public function get_options() { + return $this->_options; + } + /** * Gets the arguments for an option for the screen. * * @since 3.3.0 * - * @param string + * @param string $option Option ID. + * @param mixed $key Optional. Specific array key for when the option is an array. */ public function get_option( $option, $key = false ) { if ( ! isset( $this->_options[ $option ] ) ) @@ -578,6 +621,31 @@ final class WP_Screen { return $this->_options[ $option ]; } + /** + * Gets the help tabs registered for the screen. + * + * @since 3.4.0 + * + * @return array Help tabs with arguments. + */ + public function get_help_tabs() { + return $this->_help_tabs; + } + + /** + * Gets the arguments for a help tab. + * + * @since 3.4.0 + * + * @param string $id Help Tab ID. + * @return array Help tab arguments. + */ + public function get_help_tab( $id ) { + if ( ! isset( $this->_help_tabs[ $id ] ) ) + return null; + return $this->_help_tabs[ $id ]; + } + /** * Add a help tab to the contextual help for the screen. * Call this on the load-$pagenow hook for the relevant screen. @@ -606,7 +674,8 @@ final class WP_Screen { if ( ! $args['id'] || ! $args['title'] ) return; - $this->_help_tabs[] = $args; + // Allows for overriding an existing tab with that ID. + $this->_help_tabs[ $args['id'] ] = $args; } /** @@ -629,6 +698,17 @@ final class WP_Screen { $this->_help_tabs = array(); } + /** + * Gets the content from a contextual help sidebar. + * + * @since 3.4.0 + * + * @return string Contents of the help sidebar. + */ + public function get_help_sidebar() { + return $this->_help_sidebar; + } + /** * Add a sidebar to the contextual help for the screen. * Call this in template files after admin.php is loaded and before admin-header.php is loaded to add a sidebar to the contextual help. @@ -641,6 +721,23 @@ final class WP_Screen { $this->_help_sidebar = $content; } + /** + * Gets the number of layout columns the user has selected. + * + * The layout_columns option controls the max number and default number of + * columns. This method returns the number of columns within that range selected + * by the user via Screen Options. If no selection has been made, the default + * provisioned in layout_columns is returned. If the screen does not support + * selecting the number of layout columns, 0 is returned. + * + * @since 3.4.0 + * + * @return int Number of columns to display. + */ + public function get_columns() { + return $this->columns; + } + /** * Render the screen's help section. * @@ -657,7 +754,7 @@ final class WP_Screen { $old_help = apply_filters( 'contextual_help', $old_help, $this->id, $this ); // Default help only if there is no old-style block of text and no new-style help tabs. - if ( empty( $old_help ) && empty( $this->_help_tabs ) ) { + if ( empty( $old_help ) && ! $this->get_help_tabs() ) { $default_help = apply_filters( 'default_contextual_help', '' ); if ( $default_help ) $old_help = '

' . $default_help . '

'; @@ -671,50 +768,54 @@ final class WP_Screen { ) ); } - $has_sidebar = ! empty( $this->_help_sidebar ); + $help_sidebar = $this->get_help_sidebar(); $help_class = 'hidden'; - if ( ! $has_sidebar ) + if ( ! $help_sidebar ) $help_class .= ' no-sidebar'; // Time to render! ?>
-
+
    - _help_tabs as $i => $tab ): + get_help_tabs() as $tab ) : $link_id = "tab-link-{$tab['id']}"; $panel_id = "tab-panel-{$tab['id']}"; - $classes = ( $i == 0 ) ? 'active' : ''; ?> - - +
- +
- _help_sidebar; ?> +
- _help_tabs as $i => $tab ): + get_help_tabs() as $tab ): $panel_id = "tab-panel-{$tab['id']}"; - $classes = ( $i == 0 ) ? 'active' : ''; - $classes .= ' help-tab-content'; ?> -
+
- +
id, $this ); + + if ( ! empty( $columns ) && isset( $columns[ $this->id ] ) ) + $this->add_option( 'layout_columns', array('max' => $columns[ $this->id ] ) ); + + if ( $this->get_option( 'layout_columns' ) ) { + $this->columns = (int) get_user_option("screen_layout_$this->id"); + + if ( ! $this->columns && $this->get_option( 'layout_columns', 'default' ) ) + $this->columns = $this->get_option( 'layout_columns', 'default' ); + } + $GLOBALS[ 'screen_layout_columns' ] = $this->columns; // Set the global for back-compat. + // Add screen options if ( $this->show_screen_options() ) $this->render_screen_options(); ?>
_help_tabs && ! $this->show_screen_options() ) + if ( ! $this->get_help_tabs() && ! $this->show_screen_options() ) return; ?> @@ -763,14 +883,17 @@ final class WP_Screen { $show_screen = ! empty( $wp_meta_boxes[ $this->id ] ) || $columns || $this->get_option( 'per_page' ); - $this->_screen_settings = apply_filters( 'screen_settings', '', $this ); - switch ( $this->id ) { case 'widgets': $this->_screen_settings = '

' . __('Enable accessibility mode') . '' . __('Disable accessibility mode') . "

\n"; break; + default: + $this->_screen_settings = ''; + break; } + $this->_screen_settings = apply_filters( 'screen_settings', $this->_screen_settings, $this ); + if ( $this->_screen_settings || $this->_options ) $show_screen = true; @@ -788,18 +911,22 @@ final class WP_Screen { $columns = get_column_headers( $this ); $hidden = get_hidden_columns( $this ); + $post = get_post(); ?> -