| [ XREF Home ] [ Index ] |
PHP Cross Reference of WordPress TrunkProvided by Yoast |
[Summary view] [Print] [Text view]
1 <?php 2 class WP_Admin_Bar { 3 var $changed_locale = false; 4 var $menu; 5 var $need_to_change_locale = false; 6 var $proto = 'http://'; 7 var $user; 8 9 function initialize() { 10 /* Set the protocol used throughout this code */ 11 if ( is_ssl() ) 12 $this->proto = 'https://'; 13 14 $this->user = new stdClass; 15 $this->menu = new stdClass; 16 17 /* Populate settings we need for the menu based on the current user. */ 18 $this->user->blogs = get_blogs_of_user( get_current_user_id() ); 19 if ( is_multisite() ) { 20 $this->user->active_blog = get_active_blog_for_user( get_current_user_id() ); 21 $this->user->domain = empty( $this->user->active_blog ) ? user_admin_url() : trailingslashit( get_home_url( $this->user->active_blog->blog_id ) ); 22 $this->user->account_domain = $this->user->domain; 23 } else { 24 $this->user->active_blog = $this->user->blogs[get_current_blog_id()]; 25 $this->user->domain = trailingslashit( home_url() ); 26 $this->user->account_domain = $this->user->domain; 27 } 28 $this->user->locale = get_locale(); 29 30 add_action( 'wp_head', 'wp_admin_bar_header' ); 31 32 add_action( 'admin_head', 'wp_admin_bar_header' ); 33 34 if ( current_theme_supports( 'admin-bar' ) ) { 35 $admin_bar_args = get_theme_support( 'admin-bar' ); // add_theme_support( 'admin-bar', array( 'callback' => '__return_false') ); 36 $header_callback = $admin_bar_args[0]['callback']; 37 } 38 39 if ( empty($header_callback) ) 40 $header_callback = '_admin_bar_bump_cb'; 41 42 add_action('wp_head', $header_callback); 43 44 wp_enqueue_script( 'admin-bar' ); 45 wp_enqueue_style( 'admin-bar' ); 46 47 do_action( 'admin_bar_init' ); 48 } 49 50 function add_menu( $args = array() ) { 51 $defaults = array( 52 'title' => false, 53 'href' => false, 54 'parent' => false, // false for a root menu, pass the ID value for a submenu of that menu. 55 'id' => false, // defaults to a sanitized title value. 56 'meta' => false // array of any of the following options: array( 'html' => '', 'class' => '', 'onclick' => '', target => '', title => '' ); 57 ); 58 59 $r = wp_parse_args( $args, $defaults ); 60 extract( $r, EXTR_SKIP ); 61 62 if ( empty( $title ) ) 63 return false; 64 65 /* Make sure we have a valid ID */ 66 if ( empty( $id ) ) 67 $id = esc_attr( sanitize_title( trim( $title ) ) ); 68 69 if ( ! empty( $parent ) ) { 70 /* Add the menu to the parent item */ 71 $child = array( 'id' => $id, 'title' => $title, 'href' => $href ); 72 73 if ( ! empty( $meta ) ) 74 $child['meta'] = $meta; 75 76 $this->add_node( $parent, $this->menu, $child ); 77 } else { 78 /* Add the menu item */ 79 $this->menu->{$id} = array( 'title' => $title, 'href' => $href ); 80 81 if ( ! empty( $meta ) ) 82 $this->menu->{$id}['meta'] = $meta; 83 } 84 } 85 86 function remove_menu( $id ) { 87 return $this->remove_node( $id, $this->menu ); 88 } 89 90 function render() { 91 ?> 92 <div id="wpadminbar"> 93 <div class="quicklinks"> 94 <ul> 95 <?php foreach ( (array) $this->menu as $id => $menu_item ) : ?> 96 <?php $this->recursive_render( $id, $menu_item ) ?> 97 <?php endforeach; ?> 98 </ul> 99 </div> 100 101 <div id="adminbarsearch-wrap"> 102 <form action="<?php echo home_url(); ?>" method="get" id="adminbarsearch"> 103 <input class="adminbar-input" name="s" id="adminbar-search" type="text" value="" maxlength="150" /> 104 <input type="submit" class="adminbar-button" value="<?php _e('Search'); ?>"/> 105 </form> 106 </div> 107 </div> 108 109 <?php 110 /* Wipe the menu, might reduce memory usage, but probably not. */ 111 $this->menu = null; 112 } 113 114 /* Helpers */ 115 function recursive_render( $id, &$menu_item ) { ?> 116 <?php 117 $is_parent = ! empty( $menu_item['children'] ); 118 119 $menuclass = $is_parent ? 'menupop' : ''; 120 if ( ! empty( $menu_item['meta']['class'] ) ) 121 $menuclass .= ' ' . $menu_item['meta']['class']; 122 ?> 123 124 <li id="<?php echo esc_attr( "wp-admin-bar-$id" ); ?>" class="<?php echo esc_attr( $menuclass ); ?>"> 125 <a href="<?php echo esc_url( $menu_item['href'] ) ?>"<?php 126 if ( ! empty( $menu_item['meta']['onclick'] ) ) : 127 ?> onclick="<?php echo esc_js( $menu_item['meta']['onclick'] ); ?>"<?php 128 endif; 129 if ( ! empty( $menu_item['meta']['target'] ) ) : 130 ?> target="<?php echo esc_attr( $menu_item['meta']['target'] ); ?>"<?php 131 endif; 132 if ( ! empty( $menu_item['meta']['title'] ) ) : 133 ?> title="<?php echo esc_attr( $menu_item['meta']['title'] ); ?>"<?php 134 endif; 135 136 ?>><?php 137 138 if ( $is_parent ) : 139 ?><span><?php 140 endif; 141 142 echo $menu_item['title']; 143 144 if ( $is_parent ) : 145 ?></span><?php 146 endif; 147 148 ?></a> 149 150 <?php if ( $is_parent ) : ?> 151 <ul> 152 <?php foreach ( $menu_item['children'] as $child_id => $child_menu_item ) : ?> 153 <?php $this->recursive_render( $child_id, $child_menu_item ); ?> 154 <?php endforeach; ?> 155 </ul> 156 <?php endif; ?> 157 158 <?php if ( ! empty( $menu_item['meta']['html'] ) ) : ?> 159 <?php echo $menu_item['meta']['html']; ?> 160 <?php endif; ?> 161 </li><?php 162 } 163 164 function add_node( $parent_id, &$menu, $child ) { 165 foreach( $menu as $id => $menu_item ) { 166 if ( $parent_id == $id ) { 167 $menu->{$parent_id}['children']->{$child['id']} = $child; 168 $child = null; 169 return true; 170 } 171 172 if ( ! empty( $menu->{$id}['children'] ) ) 173 $this->add_node( $parent_id, $menu->{$id}['children'], $child ); 174 } 175 176 $child = null; 177 178 return false; 179 } 180 181 function add_menus() { 182 add_action( 'admin_bar_menu', 'wp_admin_bar_my_account_menu', 10 ); 183 add_action( 'admin_bar_menu', 'wp_admin_bar_my_sites_menu', 20 ); 184 add_action( 'admin_bar_menu', 'wp_admin_bar_edit_menu', 30 ); 185 add_action( 'admin_bar_menu', 'wp_admin_bar_shortlink_menu', 80 ); 186 add_action( 'admin_bar_menu', 'wp_admin_bar_updates_menu', 70 ); 187 188 if ( !is_network_admin() && !is_user_admin() ) { 189 add_action( 'admin_bar_menu', 'wp_admin_bar_new_content_menu', 40 ); 190 add_action( 'admin_bar_menu', 'wp_admin_bar_comments_menu', 50 ); 191 add_action( 'admin_bar_menu', 'wp_admin_bar_appearance_menu', 60 ); 192 } 193 194 do_action( 'add_admin_bar_menus' ); 195 } 196 197 function remove_node( $id, &$menu ) { 198 if ( isset( $menu->$id ) ) { 199 unset( $menu->$id ); 200 return true; 201 } 202 203 foreach( $menu as $menu_item_id => $menu_item ) { 204 if ( ! empty( $menu->{$menu_item_id}['children'] ) ) 205 $this->remove_node( $id, $menu->{$menu_item_id}['children'] ); 206 } 207 208 return false; 209 } 210 211 // TODO: Convert to a core feature for multisite or remove 212 function load_user_locale_translations() { 213 $this->need_to_change_locale = ( get_locale() != $this->user->locale ); 214 if ( ! $this->need_to_change_locale ) 215 return; 216 /* 217 $this->previous_translations = get_translations_for_domain( 'default' ); 218 $this->adminbar_locale_filter = lambda( '$_', '$GLOBALS["wp_admin_bar"]->user->locale;' ); 219 unload_textdomain( 'default' ); 220 add_filter( 'locale', $this->adminbar_locale_filter ); 221 load_default_textdomain(); 222 $this->changed_locale = true; 223 */ 224 } 225 226 function unload_user_locale_translations() { 227 global $l10n; 228 if ( ! $this->changed_locale ) 229 return; 230 /* 231 remove_filter( 'locale', $this->adminbar_locale_filter ); 232 $l10n['default'] = &$this->previous_translations; 233 */ 234 } 235 } 236 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Wed Jun 1 08:30:02 2011 |
Cross-referenced by PHPXref 0.7 Provided by Yoast and awesome WordPress Hosting |