Make WordPress Core

Changeset 3536


Ignore:
Timestamp:
02/17/2006 12:57:10 AM (19 years ago)
Author:
ryan
Message:

Dynamic menu reparenting. fixes #2257

Location:
trunk/wp-admin
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/admin-functions.php

    r3520 r3536  
    12321232    global $menu;
    12331233    global $submenu;
     1234    global $menu_nopriv;
    12341235
    12351236    $parent = get_admin_page_parent();
     1237   
     1238    if ( isset($menu_nopriv[$pagenow]) )
     1239        return false;
     1240
     1241    if ( empty($parent) )
     1242        return true;
     1243
     1244    if (isset ($submenu[$parent])) {
     1245        foreach ($submenu[$parent] as $submenu_array) {
     1246            if ($submenu_array[2] == $pagenow) {
     1247                if (current_user_can($submenu_array[1]))
     1248                    return true;
     1249                else
     1250                    return false;
     1251            }
     1252        }
     1253    }
    12361254
    12371255    foreach ($menu as $menu_array) {
    12381256        //echo "parent array: " . $menu_array[2];
    12391257        if ($menu_array[2] == $parent) {
    1240             if (!current_user_can($menu_array[1])) {
     1258            if (current_user_can($menu_array[1]))
     1259                return true;
     1260            else
    12411261                return false;
    1242             } else {
    1243                 break;
    1244             }
    1245         }
    1246     }
    1247 
    1248     if (isset ($submenu[$parent])) {
    1249         foreach ($submenu[$parent] as $submenu_array) {
    1250             if ($submenu_array[2] == $pagenow) {
    1251                 if (!current_user_can($submenu_array[1])) {
    1252                     return false;
    1253                 } else {
    1254                     return true;
    1255                 }
    1256             }
    1257         }
    1258     }
    1259 
     1262        }
     1263    }
     1264   
    12601265    return true;
    12611266}
     
    13141319    global $pagenow;
    13151320    global $plugin_page;
    1316 
    1317     if (isset ($parent_file) && !empty ($parent_file)) {
     1321    global $real_parent_file;
     1322
     1323    if ( !empty ($parent_file) ) {
     1324        if ( isset($real_parent_file[$parent_file]) )
     1325            $parent_file = $real_parent_file[$parent_file];
     1326
    13181327        return $parent_file;
    13191328    }
     
    13231332            if ($parent_menu[2] == $plugin_page) {
    13241333                $parent_file = $plugin_page;
    1325                 return $plugin_page;
     1334                if ( isset($real_parent_file[$parent_file]) )
     1335                    $parent_file = $real_parent_file[$parent_file];
     1336                   
     1337                return $parent_file;
    13261338            }
    13271339        }
     
    13301342    foreach (array_keys($submenu) as $parent) {
    13311343        foreach ($submenu[$parent] as $submenu_array) {
     1344            if ( isset($real_parent_file[$parent]) )
     1345                $parent = $real_parent_file[$parent];
    13321346            if ($submenu_array[2] == $pagenow) {
    13331347                $parent_file = $parent;
     
    13641378    global $submenu;
    13651379    global $menu;
     1380    global $real_parent_file;
    13661381
    13671382    $parent = plugin_basename($parent);
     1383    if ( isset($real_parent_file[$parent]) )
     1384        $parent = $real_parent_file[$parent];
     1385
    13681386    $file = plugin_basename($file);
    13691387
  • trunk/wp-admin/menu-header.php

    r3517 r3536  
    1212    if (( strcmp($self, $item[2]) == 0 && empty($parent_file)) || ($parent_file && ($item[2] == $parent_file))) $class = ' class="current"';
    1313   
    14     if ( current_user_can($item[1]) ) {
     14    if ( !empty($submenu[$item[2]]) || current_user_can($item[1]) ) {
    1515        if ( file_exists(ABSPATH . "wp-content/plugins/{$item[2]}") )
    1616            echo "\n\t<li><a href='" . get_settings('siteurl') . "/wp-admin/admin.php?page={$item[2]}'$class>{$item[0]}</a></li>";
  • trunk/wp-admin/menu.php

    r3185 r3536  
    5050$submenu['themes.php'][10] = array(__('Theme Editor'), 'edit_themes', 'theme-editor.php');
    5151
     52// Loop over submenus and remove pages for which the user does not have privs.
     53foreach ($submenu as $parent => $sub) {
     54    foreach ($sub as $index => $data) {
     55        if ( ! current_user_can($data[1]) ) {
     56            $menu_nopriv[$data[2]] = true;
     57            unset($submenu[$parent][$index]);
     58        }
     59    }
     60   
     61    if ( empty($submenu[$parent]) )
     62        unset($submenu[$parent]);
     63}
     64
     65// Loop over the top-level menu.
     66// Remove menus that have no accessible submenus and require privs that the user does not have.
     67// Menus for which the original parent is not acessible due to lack of privs will have the next
     68// submenu in line be assigned as the new menu parent.
     69foreach ( $menu as $id => $data ) {
     70    // If submenu is empty...
     71    if ( empty($submenu[$data[2]]) ) {
     72        // And user doesn't have privs, remove menu.
     73        if ( ! current_user_can($data[1]) ) {
     74            $menu_nopriv[$data[2]] = true;
     75            unset($menu[$id]);
     76        }
     77    } else {
     78        $subs = $submenu[$data[2]];
     79        $first_sub = array_shift($subs);
     80        $old_parent = $data[2];
     81        $new_parent = $first_sub[2];
     82        // If the first submenu is not the same as the assigned parent,
     83        // make the first submenu the new parent.
     84        if ( $new_parent != $old_parent ) {
     85            $real_parent_file[$old_parent] = $new_parent;
     86            $menu[$id][2] = $new_parent;
     87           
     88            foreach ($submenu[$old_parent] as $index => $data) {
     89                $submenu[$new_parent][$index] = $submenu[$old_parent][$index];
     90                unset($submenu[$old_parent][$index]);
     91            }
     92            unset($submenu[$old_parent]);   
     93        }
     94    }
     95}
     96
    5297// Create list of page plugin hook names.
    5398foreach ($menu as $menu_page) {
Note: See TracChangeset for help on using the changeset viewer.