2010-09-27 16:26:36 -04:00
< ? php
class WP_Admin_Bar {
2011-11-02 16:34:54 -04:00
private $nodes = array ();
public $user ;
2010-09-27 16:26:36 -04:00
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
public function __get ( $name ) {
switch ( $name ) {
case 'proto' :
return is_ssl () ? 'https://' : 'http://' ;
break ;
case 'menu' :
_deprecated_argument ( 'WP_Admin_Bar' , '3.3' , 'Modify admin bar nodes with WP_Admin_Bar::get_node(), WP_Admin_Bar::add_node(), and WP_Admin_Bar::remove_node(), not the <code>menu</code> property.' );
return array (); // Sorry, folks.
break ;
}
}
2010-09-27 16:26:36 -04:00
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
public function initialize () {
2010-09-27 16:26:36 -04:00
$this -> user = new stdClass ;
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
$this -> add_node ( array (
2011-11-23 16:46:47 -05:00
'id' => 'root' ,
'group' => false ,
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
) );
2010-09-27 16:26:36 -04:00
2011-09-16 06:56:06 -04:00
if ( is_user_logged_in () ) {
/* Populate settings we need for the menu based on the current user. */
$this -> user -> blogs = get_blogs_of_user ( get_current_user_id () );
if ( is_multisite () ) {
$this -> user -> active_blog = get_active_blog_for_user ( get_current_user_id () );
$this -> user -> domain = empty ( $this -> user -> active_blog ) ? user_admin_url () : trailingslashit ( get_home_url ( $this -> user -> active_blog -> blog_id ) );
$this -> user -> account_domain = $this -> user -> domain ;
} else {
$this -> user -> active_blog = $this -> user -> blogs [ get_current_blog_id ()];
$this -> user -> domain = trailingslashit ( home_url () );
$this -> user -> account_domain = $this -> user -> domain ;
}
2010-09-27 16:26:36 -04:00
}
2010-10-28 04:31:36 -04:00
add_action ( 'wp_head' , 'wp_admin_bar_header' );
2010-10-29 03:25:58 -04:00
2010-10-28 04:31:36 -04:00
add_action ( 'admin_head' , 'wp_admin_bar_header' );
2010-11-30 16:50:57 -05:00
if ( current_theme_supports ( 'admin-bar' ) ) {
$admin_bar_args = get_theme_support ( 'admin-bar' ); // add_theme_support( 'admin-bar', array( 'callback' => '__return_false') );
$header_callback = $admin_bar_args [ 0 ][ 'callback' ];
}
if ( empty ( $header_callback ) )
$header_callback = '_admin_bar_bump_cb' ;
add_action ( 'wp_head' , $header_callback );
2010-10-29 03:25:58 -04:00
wp_enqueue_script ( 'admin-bar' );
2010-10-28 04:31:36 -04:00
wp_enqueue_style ( 'admin-bar' );
do_action ( 'admin_bar_init' );
2010-09-27 16:26:36 -04:00
}
2011-11-02 16:34:54 -04:00
public function add_menu ( $node ) {
$this -> add_node ( $node );
}
2010-09-27 16:26:36 -04:00
2011-11-02 16:34:54 -04:00
public function remove_menu ( $id ) {
$this -> remove_node ( $id );
}
2010-09-27 16:26:36 -04:00
2011-11-02 16:34:54 -04:00
/**
* Add a node to the menu .
*
* @ param array $args - The arguments for each node .
2011-11-09 14:12:48 -05:00
* - id - string - The ID of the item .
* - title - string - The title of the node .
* - parent - string - The ID of the parent node . Optional .
* - href - string - The link for the item . Optional .
2011-11-23 16:46:47 -05:00
* - group - boolean - If the node is a group . Optional . Default false .
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
* - meta - array - Meta data including the following keys : html , class , onclick , target , title , tabindex .
2011-11-02 16:34:54 -04:00
*/
public function add_node ( $args ) {
// Shim for old method signature: add_node( $parent_id, $menu_obj, $args )
if ( func_num_args () >= 3 && is_string ( func_get_arg ( 0 ) ) )
$args = array_merge ( array ( 'parent' => func_get_arg ( 0 ) ), func_get_arg ( 2 ) );
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
if ( is_object ( $args ) )
$args = get_object_vars ( $args );
2011-11-04 13:41:38 -04:00
// Ensure we have a valid title.
if ( empty ( $args [ 'id' ] ) ) {
2011-11-23 16:46:47 -05:00
if ( empty ( $args [ 'title' ] ) )
return ;
2011-11-04 13:41:38 -04:00
_doing_it_wrong ( __METHOD__ , __ ( 'The menu ID should not be empty.' ), '3.3' );
2011-11-23 16:46:47 -05:00
// Deprecated: Generate an ID from the title.
2011-11-04 13:41:38 -04:00
$args [ 'id' ] = esc_attr ( sanitize_title ( trim ( $args [ 'title' ] ) ) );
}
2011-11-02 16:34:54 -04:00
$defaults = array (
2011-11-23 16:46:47 -05:00
'id' => false ,
'title' => false ,
'parent' => false ,
'href' => false ,
'group' => false ,
'meta' => array (),
2011-11-02 16:34:54 -04:00
);
2010-09-27 16:26:36 -04:00
2011-11-02 16:34:54 -04:00
// If the node already exists, keep any data that isn't provided.
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
if ( $this -> get_node ( $args [ 'id' ] ) )
$defaults = get_object_vars ( $this -> get_node ( $args [ 'id' ] ) );
// Do the same for 'meta' items.
if ( ! empty ( $defaults [ 'meta' ] ) && empty ( $args [ 'meta' ] ) )
$args [ 'meta' ] = wp_parse_args ( $args [ 'meta' ], $defaults [ 'meta' ] );
2010-09-27 16:26:36 -04:00
2011-11-02 16:34:54 -04:00
$args = wp_parse_args ( $args , $defaults );
2010-09-27 16:26:36 -04:00
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
$this -> _set_node ( $args );
}
final protected function _set_node ( $args ) {
2011-11-02 16:34:54 -04:00
$this -> nodes [ $args [ 'id' ] ] = ( object ) $args ;
2010-09-27 16:26:36 -04:00
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
/**
* Gets a node .
*
* @ return object Node .
*/
final public function get_node ( $id ) {
if ( isset ( $this -> nodes [ $id ] ) )
return $this -> nodes [ $id ];
}
final protected function _get_nodes () {
return $this -> nodes ;
}
2011-11-23 16:46:47 -05:00
/**
* Add a group to a menu node .
*
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
* @ since 3.3 . 0
*
2011-11-23 16:46:47 -05:00
* @ param array $args - The arguments for each node .
* - id - string - The ID of the item .
* - parent - string - The ID of the parent node . Optional . Default root .
* - meta - array - Meta data including the following keys : class , onclick , target , title .
*/
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
final public function add_group ( $args ) {
2011-11-23 16:46:47 -05:00
$args [ 'group' ] = true ;
$this -> add_node ( $args );
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
/**
* Remove a node .
*
* @ return object The removed node .
*/
2011-11-02 16:34:54 -04:00
public function remove_node ( $id ) {
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
$this -> _unset_node ( $id );
}
final protected function _unset_node ( $id ) {
2011-11-02 16:34:54 -04:00
unset ( $this -> nodes [ $id ] );
2010-09-27 16:26:36 -04:00
}
2010-10-28 11:46:11 -04:00
2011-11-02 16:34:54 -04:00
public function render () {
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
$this -> _bind ();
$this -> _render ();
}
2011-11-20 13:39:54 -05:00
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
final protected function _bind () {
foreach ( $this -> _get_nodes () as $node ) {
if ( 'root' == $node -> id )
continue ;
2011-11-02 16:34:54 -04:00
// Handle root menu items
if ( empty ( $node -> parent ) ) {
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
$parent = $this -> get_node ( 'root' );
} elseif ( ! $parent = $this -> get_node ( $node -> parent ) ) {
// If the parent node isn't registered, ignore the node.
2011-11-02 16:34:54 -04:00
continue ;
2011-11-09 14:12:48 -05:00
}
2011-11-02 16:34:54 -04:00
2011-11-23 16:46:47 -05:00
// Ensure that our tree is of the form "item -> group -> item -> group -> ..."
if ( ! $parent -> group && ! $node -> group ) { // Both are items.
// The default group is added here to allow groups that are
// added before standard menu items to render first.
if ( ! isset ( $parent -> children [ 'default' ] ) ) {
$parent -> children [ 'default' ] = ( object ) array (
'id' => " { $parent -> id } -default " ,
'parent' => $parent -> id ,
'group' => true ,
'children' => array (),
);
}
$parent = $parent -> children [ 'default' ];
}
// Update the parent ID (it might have changed).
$node -> parent = $parent -> id ;
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
if ( ! isset ( $parent -> children ) )
$parent -> children = array ();
2011-11-23 16:46:47 -05:00
// Add the node to the tree.
$parent -> children [] = $node ;
2011-11-02 16:34:54 -04:00
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
}
final protected function _render () {
global $is_IE , $is_iphone ;
2011-11-02 16:34:54 -04:00
2011-11-21 18:07:54 -05:00
// Add browser classes.
// We have to do this here since admin bar shows on the front end.
$class = 'nojq nojs' ;
if ( $is_IE ) {
if ( strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], 'MSIE 7' ) )
$class .= ' ie7' ;
elseif ( strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], 'MSIE 8' ) )
$class .= ' ie8' ;
2011-11-22 16:35:08 -05:00
elseif ( strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], 'MSIE 9' ) )
$class .= ' ie9' ;
2011-11-21 18:07:54 -05:00
} elseif ( $is_iphone ) {
$class .= ' mobile' ;
}
2010-10-28 04:31:36 -04:00
?>
2011-11-29 20:27:33 -05:00
< div id = " wpadminbar " class = " <?php echo $class ; ?> " role = " navigation " >
< div class = " quicklinks " role = " menubar " >
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
< ? php foreach ( $this -> get_node ( 'root' ) -> children as $group ) {
$this -> _render_group ( $group , 'ab-top-menu' );
2011-11-23 16:46:47 -05:00
} ?>
2010-09-27 16:26:36 -04:00
</ div >
</ div >
< ? php
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
final protected function _render_group ( $node , $class = '' ) {
2011-11-23 16:46:47 -05:00
if ( ! $node -> group )
return ;
// Check for groups within groups.
$groups = array ();
foreach ( $node -> children as $child ) {
if ( $child -> group ) {
$groups [] = $child ;
} else {
if ( ! isset ( $default ) ) {
// Create a default proxy item to be used in the case of nested groups.
$default = ( object ) wp_parse_args ( array ( 'children' => array () ), ( array ) $node );
$groups [] = $default ;
}
$default -> children [] = $child ;
}
2011-11-09 19:42:39 -05:00
}
2011-11-23 16:46:47 -05:00
$is_single_group = count ( $groups ) === 1 ;
// If we don't have any subgroups, render the group.
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
if ( $is_single_group && ! empty ( $node -> children ) ) :
2011-11-23 16:46:47 -05:00
if ( ! empty ( $node -> meta [ 'class' ] ) )
$class .= ' ' . $node -> meta [ 'class' ];
2011-11-29 20:27:33 -05:00
?> <ul id="<?php echo esc_attr( "wp-admin-bar-{$node->id}" ); ?>" class="<?php echo esc_attr( $class ); ?>" role="menu"><?php
2011-11-23 16:46:47 -05:00
foreach ( $node -> children as $item ) {
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
$this -> _render_item ( $item );
2011-11-23 16:46:47 -05:00
}
?> </ul><?php
// Wrap the subgroups in a div and render each individual subgroup.
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
elseif ( ! $is_single_group ) :
2011-11-29 20:27:33 -05:00
?> <div id="<?php echo esc_attr( "wp-admin-bar-{$node->id}-container" ); ?>" class="ab-group-container" role="menu"><?php
2011-11-23 16:46:47 -05:00
foreach ( $groups as $group ) {
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
$this -> _render_group ( $group , $class );
2011-11-23 16:46:47 -05:00
}
?> </div><?php
endif ;
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
final protected function _render_item ( $node ) {
2011-11-23 16:46:47 -05:00
if ( $node -> group )
return ;
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
$is_parent = ! empty ( $node -> children );
$has_link = ! empty ( $node -> href );
$tabindex = isset ( $node -> meta [ 'tabindex' ] ) ? ( int ) $node -> meta [ 'tabindex' ] : 10 ;
2011-11-29 20:27:33 -05:00
$menuclass = '' ;
$aria_attributes = 'tabindex="' . $tabindex . '" role="menuitem"' ;
if ( $is_parent ) {
$menuclass = 'menupop' ;
$aria_attributes .= ' aria-haspopup="true"' ;
}
2011-02-09 12:35:36 -05:00
2011-11-02 16:34:54 -04:00
if ( ! empty ( $node -> meta [ 'class' ] ) )
$menuclass .= ' ' . $node -> meta [ 'class' ];
2011-11-07 15:38:38 -05:00
2011-01-12 20:34:15 -05:00
?>
2010-10-28 04:31:36 -04:00
2011-11-17 19:12:57 -05:00
< li id = " <?php echo esc_attr( " wp - admin - bar - { $node -> id } " ); ?> " class = " <?php echo esc_attr( $menuclass ); ?> " >< ? php
if ( $has_link ) :
2011-11-29 20:27:33 -05:00
?> <a class="ab-item" <?php echo $aria_attributes; ?> href="<?php echo esc_url( $node->href ) ?>"<?php
2011-11-17 19:12:57 -05:00
if ( ! empty ( $node -> meta [ 'onclick' ] ) ) :
?> onclick="<?php echo esc_js( $node->meta['onclick'] ); ?>"<?php
endif ;
if ( ! empty ( $node -> meta [ 'target' ] ) ) :
?> target="<?php echo esc_attr( $node->meta['target'] ); ?>"<?php
2010-10-28 04:31:36 -04:00
endif ;
2011-11-17 19:12:57 -05:00
if ( ! empty ( $node -> meta [ 'title' ] ) ) :
?> title="<?php echo esc_attr( $node->meta['title'] ); ?>"<?php
endif ;
?> ><?php
else :
2011-11-30 18:59:10 -05:00
?> <div class="ab-item ab-empty-item" <?php echo $aria_attributes;
if ( ! empty ( $node -> meta [ 'title' ] ) ) :
?> title="<?php echo esc_attr( $node->meta['title'] ); ?>"<?php
endif ;
?> ><?php
2010-11-17 13:47:34 -05:00
endif ;
2011-11-02 16:34:54 -04:00
echo $node -> title ;
2010-11-17 13:47:34 -05:00
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
if ( $has_link ) :
2011-11-17 19:12:57 -05:00
?> </a><?php
else :
?> </div><?php
endif ;
2010-10-28 04:31:36 -04:00
2011-11-09 14:12:48 -05:00
if ( $is_parent ) :
2011-11-14 06:05:37 -05:00
?> <div class="ab-sub-wrapper"><?php
2011-11-23 16:46:47 -05:00
foreach ( $node -> children as $group ) {
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
$this -> _render_group ( $group , 'ab-submenu' );
2011-11-09 14:12:48 -05:00
}
2011-11-14 06:05:37 -05:00
?> </div><?php
2011-11-09 14:12:48 -05:00
endif ;
2010-11-17 13:47:34 -05:00
2011-11-02 16:34:54 -04:00
if ( ! empty ( $node -> meta [ 'html' ] ) )
echo $node -> meta [ 'html' ];
?>
</ li >< ? php
2011-11-23 16:46:47 -05:00
}
2010-09-27 16:26:36 -04:00
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
public function recursive_render ( $id , $node ) {
_deprecated_function ( __METHOD__ , '3.3' , 'WP_Admin_bar::render(), WP_Admin_Bar::_render_item()' );
$this -> _render_item ( $node );
2010-09-27 16:26:36 -04:00
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-11-30 19:25:04 -05:00
public function add_menus () {
2011-10-05 20:02:18 -04:00
// User related, aligned right.
2011-11-30 22:03:12 -05:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_search_menu' , 10 );
add_action ( 'admin_bar_menu' , 'wp_admin_bar_my_account_menu' , 20 );
2011-10-05 20:02:18 -04:00
// Site related.
add_action ( 'admin_bar_menu' , 'wp_admin_bar_wp_menu' , 10 );
2011-10-05 14:45:32 -04:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_my_sites_menu' , 20 );
2011-10-07 15:52:26 -04:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_site_menu' , 30 );
2011-10-05 20:02:18 -04:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_updates_menu' , 40 );
// Content related.
2011-11-22 11:19:05 -05:00
if ( ! is_network_admin () && ! is_user_admin () ) {
add_action ( 'admin_bar_menu' , 'wp_admin_bar_comments_menu' , 60 );
add_action ( 'admin_bar_menu' , 'wp_admin_bar_new_content_menu' , 70 );
}
2011-10-10 14:40:00 -04:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_edit_menu' , 80 );
2010-12-13 16:21:50 -05:00
2011-11-23 16:46:47 -05:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_add_secondary_groups' , 200 );
2010-12-09 11:55:09 -05:00
do_action ( 'add_admin_bar_menus' );
2010-10-28 04:31:36 -04:00
}
2010-09-27 16:26:36 -04:00
}
2011-11-03 13:08:12 -04:00
?>