diff options
author | donncha <donncha@7be80a69-a1ef-0310-a953-fb0f7c49ff36> | 2006-08-17 12:36:23 +0000 |
---|---|---|
committer | donncha <donncha@7be80a69-a1ef-0310-a953-fb0f7c49ff36> | 2006-08-17 12:36:23 +0000 |
commit | e9261c6491959b5b0efe1036ec37ff9e850bd62e (patch) | |
tree | b0ca05cf207206ab1ec85216c0d7abc4c16eca5b /wp-admin/admin-functions.php | |
parent | 62a85df302a839177400100c6a09813161440ce0 (diff) | |
download | wordpress-mu-e9261c6491959b5b0efe1036ec37ff9e850bd62e.tar.gz wordpress-mu-e9261c6491959b5b0efe1036ec37ff9e850bd62e.tar.xz wordpress-mu-e9261c6491959b5b0efe1036ec37ff9e850bd62e.zip |
WP Merge to rev 4104
git-svn-id: http://svn.automattic.com/wordpress-mu/trunk@723 7be80a69-a1ef-0310-a953-fb0f7c49ff36
Diffstat (limited to 'wp-admin/admin-functions.php')
-rw-r--r-- | wp-admin/admin-functions.php | 80 |
1 files changed, 56 insertions, 24 deletions
diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php index 84a1ab4..63e9107 100644 --- a/wp-admin/admin-functions.php +++ b/wp-admin/admin-functions.php @@ -1353,19 +1353,37 @@ function user_can_access_admin_page() { global $pagenow; global $menu; global $submenu; - global $menu_nopriv; + global $_wp_menu_nopriv; + global $_wp_submenu_nopriv; global $plugin_page; $parent = get_admin_page_parent(); - - if ( isset($menu_nopriv[$pagenow]) ) + /*echo "pa: $parent pn: $pagenow pp: $plugin_page<br/>"; + echo "<pre>"; + print_r($_wp_menu_nopriv); + print_r($_wp_submenu_nopriv); + echo "</pre>";*/ + if ( isset($_wp_submenu_nopriv[$parent][$pagenow]) ) return false; - if ( isset($plugin_page) && isset($menu_nopriv[$plugin_page]) ) + if ( isset($plugin_page) && isset($_wp_submenu_nopriv[$parent][$plugin_page]) ) return false; - if ( empty($parent) ) + if ( empty($parent) ) { + if ( isset($_wp_menu_nopriv[$pagenow]) ) + return false; + if ( isset($_wp_submenu_nopriv[$pagenow][$pagenow]) ) + return false; + if ( isset($plugin_page) && isset($_wp_submenu_nopriv[$pagenow][$plugin_page]) ) + return false; + foreach (array_keys($_wp_submenu_nopriv) as $key) { + if ( isset($_wp_submenu_nopriv[$key][$pagenow]) ) + return false; + if ( isset($plugin_page) && isset($_wp_submenu_nopriv[$key][$plugin_page]) ) + return false; + } return true; + } if (isset ($submenu[$parent])) { foreach ($submenu[$parent] as $submenu_array) { @@ -1379,7 +1397,6 @@ function user_can_access_admin_page() { } foreach ($menu as $menu_array) { - //echo "parent array: " . $menu_array[2]; if ($menu_array[2] == $parent) { if (current_user_can($menu_array[1])) return true; @@ -1444,11 +1461,13 @@ function get_admin_page_parent() { global $submenu; global $pagenow; global $plugin_page; - global $real_parent_file; + global $_wp_real_parent_file; + global $_wp_menu_nopriv; + global $_wp_submenu_nopriv; if ( !empty ($parent_file) ) { - if ( isset($real_parent_file[$parent_file]) ) - $parent_file = $real_parent_file[$parent_file]; + if ( isset($_wp_real_parent_file[$parent_file]) ) + $parent_file = $_wp_real_parent_file[$parent_file]; return $parent_file; } @@ -1457,18 +1476,30 @@ function get_admin_page_parent() { foreach ($menu as $parent_menu) { if ($parent_menu[2] == $plugin_page) { $parent_file = $plugin_page; - if ( isset($real_parent_file[$parent_file]) ) - $parent_file = $real_parent_file[$parent_file]; - + if ( isset($_wp_real_parent_file[$parent_file]) ) + $parent_file = $_wp_real_parent_file[$parent_file]; return $parent_file; } } + if ( isset($_wp_menu_nopriv[$plugin_page]) ) { + $parent_file = $plugin_page; + if ( isset($_wp_real_parent_file[$parent_file]) ) + $parent_file = $_wp_real_parent_file[$parent_file]; + return $parent_file; + } + } + + if ( isset($plugin_page) && isset($_wp_submenu_nopriv[$pagenow][$plugin_page]) ) { + $parent_file = $pagenow; + if ( isset($_wp_real_parent_file[$parent_file]) ) + $parent_file = $_wp_real_parent_file[$parent_file]; + return $parent_file; } foreach (array_keys($submenu) as $parent) { foreach ($submenu[$parent] as $submenu_array) { - if ( isset($real_parent_file[$parent]) ) - $parent = $real_parent_file[$parent]; + if ( isset($_wp_real_parent_file[$parent]) ) + $parent = $_wp_real_parent_file[$parent]; if ($submenu_array[2] == $pagenow) { $parent_file = $parent; return $parent; @@ -1503,27 +1534,28 @@ function add_menu_page($page_title, $menu_title, $access_level, $file, $function function add_submenu_page($parent, $page_title, $menu_title, $access_level, $file, $function = '') { global $submenu; global $menu; - global $real_parent_file; - global $menu_nopriv; + global $_wp_real_parent_file; + global $_wp_submenu_nopriv; + global $_wp_menu_nopriv; $file = plugin_basename($file); - //echo "Adding $parent $file $access_level<br />"; + + $parent = plugin_basename($parent); + if ( isset($_wp_real_parent_file[$parent]) ) + $parent = $_wp_real_parent_file[$parent]; + if ( !current_user_can($access_level) ) { - $menu_nopriv[$file] = true; + $_wp_submenu_nopriv[$parent][$file] = true; return false; } - $parent = plugin_basename($parent); - if ( isset($real_parent_file[$parent]) ) - $parent = $real_parent_file[$parent]; - // If the parent doesn't already have a submenu, add a link to the parent // as the first item in the submenu. If the submenu file is the same as the // parent file someone is trying to link back to the parent manually. In // this case, don't automatically add a link back to avoid duplication. - if (!isset ($submenu[$parent]) && $file != $parent) { + if (!isset ($submenu[$parent]) && $file != $parent ) { foreach ($menu as $parent_menu) { - if ($parent_menu[2] == $parent) { + if ( $parent_menu[2] == $parent && current_user_can($parent_menu[1]) ) { $submenu[$parent][] = $parent_menu; } } |