Ticket #19206: 19206.diff
File 19206.diff, 9.9 KB (added by , 12 years ago) |
---|
-
wp-admin/menu-header.php
36 36 function _wp_menu_output( $menu, $submenu, $submenu_as_parent = true ) { 37 37 global $self, $parent_file, $submenu_file, $plugin_page, $pagenow, $typenow; 38 38 39 $first = true; 40 // 0 = name, 1 = capability, 2 = file, 3 = class, 4 = id, 5 = icon src 39 $first_key = key( $menu ); 40 41 // 0 = title, 1 = capability, 2 = file, 3 = page title (ignore), 4 = class, 5 = id, 6 = icon src 41 42 foreach ( $menu as $key => $item ) { 42 $admin_is_parent = false;43 $class = array();44 43 45 if ( $first ) { 46 $class[] = 'wp-first-item'; 47 $first = false; 48 } 44 $item = array_pad( $item, 7, '' ); 45 list( $title, $capability, $slug, $ignore, $class, $id, $icon_src ) = $item; 49 46 50 $submenu_items = false; 51 if ( ! empty( $submenu[$item[2]] ) ) { 52 $class[] = 'wp-has-submenu'; 53 $submenu_items = $submenu[$item[2]]; 54 } 47 // @todo: Clarify whether we should texturize or not. 48 $title = wptexturize( $title ); 55 49 56 if ( ( $parent_file && $item[2] == $parent_file ) || ( empty($typenow) && $self == $item[2] ) ) 57 $class[] = ! empty( $submenu_items ) ? 'wp-has-current-submenu wp-menu-open' : 'current'; 50 $has_submenu = ! empty( $submenu[ $slug ] ); 51 $submenu_items = ( $has_submenu ) ? $submenu[ $slug ] : false; 52 53 $parent = $slug; 54 55 if ( $key == $first_key ) 56 $class .= ' wp-first-item'; 57 58 if ( $has_submenu ) 59 $class .= ' wp-has-submenu'; 60 61 if ( ( $parent_file && $slug == $parent_file ) || ( empty( $typenow ) && $self == $slug ) ) 62 $class .= ( $has_submenu ) ? ' wp-has-current-submenu wp-menu-open' : ' current'; 58 63 else 59 $class [] = 'wp-not-current-submenu';64 $class .= ' wp-not-current-submenu'; 60 65 61 if ( ! empty( $item[4] ) ) 62 $class[] = $item[4]; 66 // GENERATE MENU ITEM 67 if ( $submenu_as_parent && $has_submenu ) { 68 $submenu_items = array_values( $submenu_items ); // Re-index. 69 $item_slug = $submenu_items[0][2]; 70 $item_hook = get_plugin_page_hook( $item_slug, $slug ); 63 71 64 $class = $class ? ' class="' . join( ' ', $class ) . '"' : ''; 65 $tabindex = ' tabindex="1"'; 66 $id = ! empty( $item[5] ) ? ' id="' . preg_replace( '|[^a-zA-Z0-9_:.]|', '-', $item[5] ) . '"' : ''; 67 $img = ''; 68 if ( ! empty( $item[6] ) ) 69 $img = ( 'div' === $item[6] ) ? '<br />' : '<img src="' . $item[6] . '" alt="" />'; 70 $arrow = '<div class="wp-menu-arrow"><div></div></div>'; 72 } elseif ( ! empty( $slug ) && current_user_can( $capability ) ) { 73 $item_slug = $slug; 74 $item_hook = get_plugin_page_hook( $item_slug, 'admin.php' ); 75 } 71 76 72 $title = wptexturize( $item[0] ); 77 if ( isset( $item_slug ) ) { 78 $item_file = $item_slug; 79 if ( false !== ( $pos = strpos( $item_file, '?' ) ) ) 80 $item_file = substr( $item_file, 0, $pos ); 73 81 74 echo "\n\t<li$class$id>"; 82 $item_url = $item_slug; 83 if ( ! empty( $item_hook ) || ( ('index.php' != $item_slug ) && file_exists( WP_PLUGIN_DIR . "/$item_file" ) ) ) { 84 $parent = 'admin.php'; 85 $item_url = "admin.php?page=$item_slug"; 86 } 87 } 75 88 89 // RENDER MENU ITEM 90 echo '<li id="' . esc_attr( $id ) . '" class="' . esc_attr( $class ) . '">'; 91 76 92 if ( false !== strpos( $class, 'wp-menu-separator' ) ) { 77 93 echo '<div class="separator"></div>'; 78 } elseif ( $submenu_as_parent && ! empty( $submenu_items ) ) { 79 $submenu_items = array_values( $submenu_items ); // Re-index.80 $menu_hook = get_plugin_page_hook( $submenu_items[0][2], $item[2] );81 $menu_file = $submenu_items[0][2];82 if ( false !== ( $pos = strpos( $menu_file, '?' ) ) )83 $menu_file = substr( $menu_file, 0, $pos ); 84 if ( ! empty( $ menu_hook ) || ( ('index.php' != $submenu_items[0][2]) && file_exists( WP_PLUGIN_DIR . "/$menu_file" )) ) {85 $admin_is_parent = true;86 echo "<div class='wp-menu-image'><a href='admin.php?page={$submenu_items[0][2]}'>$img</a></div>$arrow<a href='admin.php?page={$submenu_items[0][2]}'$class$tabindex>$title</a>";87 } else {88 echo "\n\t<div class='wp-menu-image'><a href='{$submenu_items[0][2]}'>$img</a></div>$arrow<a href='{$submenu_items[0][2]}'$class$tabindex>$title</a>";94 95 } elseif ( isset( $item_slug ) ) { 96 // Menu image 97 echo '<div class="wp-menu-image">'; 98 echo '<a href="' . esc_url( $item_url ) . '">'; 99 100 if ( ! empty( $icon_src ) ) { 101 if ( 'div' === $icon_src ) 102 echo '<br />'; 103 else 104 echo '<img src="' . esc_url( $icon_src ) . '" alt="" />'; 89 105 } 90 } elseif ( ! empty( $item[2] ) && current_user_can( $item[1] ) ) { 91 $menu_hook = get_plugin_page_hook( $item[2], 'admin.php' ); 92 $menu_file = $item[2]; 106 107 echo '</a></div>'; 108 109 // Menu arrow 110 echo '<div class="wp-menu-arrow"><div></div></div>'; 111 112 // Menu title 113 echo '<a href="' . esc_url( $item_url ) . '" class="' . esc_attr( $class ) . '" tabindex="1">'; 114 echo $title; 115 echo '</a>'; 116 } 117 118 119 // HANDLE SUBMENUS 120 if ( $has_submenu ) { 121 122 // Submenu wrapper. 123 echo "<div class='wp-submenu'><div class='wp-submenu-wrap'>"; 124 echo "<div class='wp-submenu-head'>$title</div><ul>"; 125 126 $menu_file = $slug; 93 127 if ( false !== ( $pos = strpos( $menu_file, '?' ) ) ) 94 128 $menu_file = substr( $menu_file, 0, $pos ); 95 if ( ! empty( $menu_hook ) || ( ('index.php' != $item[2]) && file_exists( WP_PLUGIN_DIR . "/$menu_file" ) ) ) {96 $admin_is_parent = true;97 echo "\n\t<div class='wp-menu-image'><a href='admin.php?page={$item[2]}'>$img</a></div>$arrow<a href='admin.php?page={$item[2]}'$class$tabindex>{$item[0]}</a>";98 } else {99 echo "\n\t<div class='wp-menu-image'><a href='{$item[2]}'>$img</a></div>$arrow<a href='{$item[2]}'$class$tabindex>{$item[0]}</a>";100 }101 }102 129 103 if ( ! empty( $submenu_items ) ) { 104 echo "\n\t<div class='wp-submenu'><div class='wp-submenu-wrap'>"; 105 echo "<div class='wp-submenu-head'>{$item[0]}</div><ul>"; 106 $first = true; 130 // Clarify the location of the parent. 131 if ( ( 'admin.php' != $parent && file_exists( WP_PLUGIN_DIR . "/$menu_file" ) && ! is_dir( WP_PLUGIN_DIR . "/$slug" ) ) || file_exists( $menu_file ) ) 132 $parent = $slug; 133 else 134 $parent = 'admin.php'; 135 136 // Handle current for post_type=post|page|foo pages, which won't match $self. 137 $self_type = ! empty( $typenow ) ? $self . '?post_type=' . $typenow : 'nothing'; 138 139 $first_sub_key = key( $submenu_items ); 140 107 141 foreach ( $submenu_items as $sub_key => $sub_item ) { 108 if ( ! current_user_can( $sub_item[1] ) ) 142 // 0 = title, 1 = cap, 2 = slug, 3 = page title 143 list( $sub_title, $sub_cap, $sub_slug ) = $sub_item; 144 145 if ( ! current_user_can( $sub_cap ) ) 109 146 continue; 110 147 111 $class = array(); 112 if ( $first ) { 113 $class[] = 'wp-first-item'; 114 $first = false; 115 } 148 $sub_title = wptexturize( $sub_title ); 149 $class = ''; 116 150 117 $menu_file = $item[2]; 151 if ( $sub_key == $first_sub_key ) 152 $class .= ' wp-first-item'; 118 153 119 if ( false !== ( $pos = strpos( $menu_file, '?' ) ) ) 120 $menu_file = substr( $menu_file, 0, $pos ); 154 // Determine if we are on the current page. 155 if ( isset( $submenu_file ) ) { 156 if ( $submenu_file == $sub_slug ) 157 $class .= ' current'; 121 158 122 // Handle current for post_type=post|page|foo pages, which won't match $self.123 $self_type = ! empty( $typenow ) ? $self . '?post_type=' . $typenow : 'nothing';124 125 if ( isset( $submenu_file ) ) {126 if ( $submenu_file == $sub_item[2] )127 $class[] = 'current';128 159 // If plugin_page is set the parent must either match the current page or not physically exist. 129 160 // This allows plugin pages with the same hook to exist under different parents. 130 161 } else if ( 131 ( ! isset( $plugin_page ) && $self == $sub_item[2] ) || 132 ( isset( $plugin_page ) && $plugin_page == $sub_item[2] && ( $item[2] == $self_type || $item[2] == $self || file_exists($menu_file) === false ) ) 162 ( ! isset( $plugin_page ) && $self == $sub_slug ) || 163 ( isset( $plugin_page ) && $plugin_page == $sub_slug && 164 ( $slug == $self_type || $slug == $self || file_exists( $menu_file ) === false ) 165 ) 133 166 ) { 134 $class [] = 'current';167 $class .= ' current'; 135 168 } 136 169 137 $class = $class ? ' class="' . join( ' ', $class ) . '"' : ''; 138 139 $menu_hook = get_plugin_page_hook($sub_item[2], $item[2]); 140 $sub_file = $sub_item[2]; 170 $sub_hook = get_plugin_page_hook( $sub_slug, $slug ); 171 $sub_file = $sub_slug; 141 172 if ( false !== ( $pos = strpos( $sub_file, '?' ) ) ) 142 $sub_file = substr( $sub_file, 0, $pos);173 $sub_file = substr( $sub_file, 0, $pos ); 143 174 144 $title = wptexturize($sub_item[0]);145 175 146 if ( ! empty( $menu_hook ) || ( ('index.php' != $sub_item[2]) && file_exists( WP_PLUGIN_DIR . "/$sub_file" ) ) ) { 147 // If admin.php is the current page or if the parent exists as a file in the plugins or admin dir 148 if ( (!$admin_is_parent && file_exists(WP_PLUGIN_DIR . "/$menu_file") && !is_dir(WP_PLUGIN_DIR . "/{$item[2]}")) || file_exists($menu_file) ) 149 $sub_item_url = add_query_arg( array('page' => $sub_item[2]), $item[2] ); 150 else 151 $sub_item_url = add_query_arg( array('page' => $sub_item[2]), 'admin.php' ); 176 $sub_url = $sub_slug; 177 if ( ! empty( $sub_hook ) || ( ( 'index.php' != $sub_slug ) && file_exists( WP_PLUGIN_DIR . "/$sub_file" ) ) ) { 178 $sub_url = add_query_arg( array( 'page' => $sub_slug ), $parent ); 179 } 152 180 153 $sub_item_url = esc_url( $sub_item_url );154 echo "<li$class><a href='$sub_item_url'$class$tabindex>$title</a></li>";155 } else {156 echo "<li$class><a href='{$sub_item[2]}'$class$tabindex>$title</a></li>";157 }181 // RENDER SUBMENU ITEM 182 echo '<li class="' . esc_attr( $class ) . '">'; 183 echo '<a href="' . esc_url( $sub_url ) . '" class="' . esc_attr( $class ) . '" tabindex="1">'; 184 echo $sub_title; 185 echo '</a></li>'; 158 186 } 159 echo "</ul></div></div>"; 187 188 echo '</ul></div></div>'; 160 189 } 161 echo "</li>";190 echo '</li>'; 162 191 } 163 192 164 193 echo '<li id="collapse-menu" class="hide-if-no-js"><div id="collapse-button"><div></div></div>';