diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php index 0e5998af2..9c5a40c35 100644 --- a/wp-admin/admin-functions.php +++ b/wp-admin/admin-functions.php @@ -732,10 +732,14 @@ function get_admin_page_parent() { return ''; } +function plugin_basename($file) { + return preg_replace('#^.*wp-content/plugins/#', '', $file); +} + function add_menu_page($page_title, $menu_title, $access_level, $file) { global $menu; - $file = basename($file); + $file = plugin_basename($file); $menu[] = array($menu_title, $access_level, $file, $page_title); } @@ -743,7 +747,7 @@ function add_menu_page($page_title, $menu_title, $access_level, $file) { function add_submenu_page($parent, $page_title, $menu_title, $access_level, $file) { global $submenu; - $file = basename($file); + $file = plugin_basename($file); $submenu[$parent][] = array($menu_title, $access_level, $file, $page_title); } @@ -884,8 +888,22 @@ function get_plugins() { $plugins_dir = @ dir($plugin_root); if ($plugins_dir) { while(($file = $plugins_dir->read()) !== false) { - if ( !preg_match('|^\.+$|', $file) && preg_match('|\.php$|', $file) ) - $plugin_files[] = $file; + if ( preg_match('|^\.+$|', $file) ) + continue; + if (is_dir($plugin_root . '/' . $file)) { + $plugins_subdir = @ dir($plugin_root . '/' . $file); + if ($plugins_subdir) { + while(($subfile = $plugins_subdir->read()) !== false) { + if ( preg_match('|^\.+$|', $subfile) ) + continue; + if ( preg_match('|\.php$|', $subfile) ) + $plugin_files[] = "$file/$subfile"; + } + } + } else { + if ( preg_match('|\.php$|', $file) ) + $plugin_files[] = $file; + } } } @@ -902,7 +920,7 @@ function get_plugins() { continue; } - $wp_plugins[basename($plugin_file)] = $plugin_data; + $wp_plugins[plugin_basename($plugin_file)] = $plugin_data; } return $wp_plugins; diff --git a/wp-admin/admin.php b/wp-admin/admin.php index e903425c4..4286deb27 100644 --- a/wp-admin/admin.php +++ b/wp-admin/admin.php @@ -54,7 +54,7 @@ require(ABSPATH . '/wp-admin/menu.php'); // Handle plugin admin pages. if (isset($_GET['page'])) { - $plugin_page = basename($_GET['page']); + $plugin_page = plugin_basename($_GET['page']); if (! file_exists(ABSPATH . "wp-content/plugins/$plugin_page")) { die(sprintf(__('Cannot load %s.'), $plugin_page)); } diff --git a/wp-admin/plugin-editor.php b/wp-admin/plugin-editor.php index 507e4fa82..4b4181cf5 100644 --- a/wp-admin/plugin-editor.php +++ b/wp-admin/plugin-editor.php @@ -20,29 +20,15 @@ for ($i=0; $iread()) !== false) { - if ( !preg_match('|^\.+$|', $plug_file) && preg_match('|\.php$|', $plug_file) ) - $plugin_files[] = "wp-content/plugins/$plug_file"; - } -} - -if (count($plugin_files)) { - natcasesort($plugin_files); -} - -if (file_exists(ABSPATH . 'my-hacks.php')) { - $plugin_files[] = 'my-hacks.php'; -} - +$plugins = get_plugins(); +$plugin_files = array_keys($plugins); if (empty($file)) { $file = $plugin_files[0]; } $file = validate_file_to_edit($file, $plugin_files); -$real_file = get_real_file_to_edit($file); +$real_file = get_real_file_to_edit("wp-content/plugins/$file"); switch($action) { @@ -104,7 +90,7 @@ if ($plugin_files) : ?>