Allow plugins to be loaded from subdirs of wp-content/plugins.
git-svn-id: http://svn.automattic.com/wordpress/trunk@1894 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
75804fd8ab
commit
bd4e71a7ba
|
@ -732,10 +732,14 @@ function get_admin_page_parent() {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function plugin_basename($file) {
|
||||||
|
return preg_replace('#^.*wp-content/plugins/#', '', $file);
|
||||||
|
}
|
||||||
|
|
||||||
function add_menu_page($page_title, $menu_title, $access_level, $file) {
|
function add_menu_page($page_title, $menu_title, $access_level, $file) {
|
||||||
global $menu;
|
global $menu;
|
||||||
|
|
||||||
$file = basename($file);
|
$file = plugin_basename($file);
|
||||||
|
|
||||||
$menu[] = array($menu_title, $access_level, $file, $page_title);
|
$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) {
|
function add_submenu_page($parent, $page_title, $menu_title, $access_level, $file) {
|
||||||
global $submenu;
|
global $submenu;
|
||||||
|
|
||||||
$file = basename($file);
|
$file = plugin_basename($file);
|
||||||
|
|
||||||
$submenu[$parent][] = array($menu_title, $access_level, $file, $page_title);
|
$submenu[$parent][] = array($menu_title, $access_level, $file, $page_title);
|
||||||
}
|
}
|
||||||
|
@ -884,10 +888,24 @@ function get_plugins() {
|
||||||
$plugins_dir = @ dir($plugin_root);
|
$plugins_dir = @ dir($plugin_root);
|
||||||
if ($plugins_dir) {
|
if ($plugins_dir) {
|
||||||
while(($file = $plugins_dir->read()) !== false) {
|
while(($file = $plugins_dir->read()) !== false) {
|
||||||
if ( !preg_match('|^\.+$|', $file) && preg_match('|\.php$|', $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;
|
$plugin_files[] = $file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!$plugins_dir || !$plugin_files) {
|
if (!$plugins_dir || !$plugin_files) {
|
||||||
return $wp_plugins;
|
return $wp_plugins;
|
||||||
|
@ -902,7 +920,7 @@ function get_plugins() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$wp_plugins[basename($plugin_file)] = $plugin_data;
|
$wp_plugins[plugin_basename($plugin_file)] = $plugin_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $wp_plugins;
|
return $wp_plugins;
|
||||||
|
|
|
@ -54,7 +54,7 @@ require(ABSPATH . '/wp-admin/menu.php');
|
||||||
|
|
||||||
// Handle plugin admin pages.
|
// Handle plugin admin pages.
|
||||||
if (isset($_GET['page'])) {
|
if (isset($_GET['page'])) {
|
||||||
$plugin_page = basename($_GET['page']);
|
$plugin_page = plugin_basename($_GET['page']);
|
||||||
if (! file_exists(ABSPATH . "wp-content/plugins/$plugin_page")) {
|
if (! file_exists(ABSPATH . "wp-content/plugins/$plugin_page")) {
|
||||||
die(sprintf(__('Cannot load %s.'), $plugin_page));
|
die(sprintf(__('Cannot load %s.'), $plugin_page));
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,29 +20,15 @@ for ($i=0; $i<count($wpvarstoreset); $i += 1) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$plugins_dir = @ dir(ABSPATH . 'wp-content/plugins');
|
$plugins = get_plugins();
|
||||||
if ($plugins_dir) {
|
$plugin_files = array_keys($plugins);
|
||||||
while(($plug_file = $plugins_dir->read()) !== 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';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (empty($file)) {
|
if (empty($file)) {
|
||||||
$file = $plugin_files[0];
|
$file = $plugin_files[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = validate_file_to_edit($file, $plugin_files);
|
$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) {
|
switch($action) {
|
||||||
|
|
||||||
|
@ -104,7 +90,7 @@ if ($plugin_files) :
|
||||||
?>
|
?>
|
||||||
<ul>
|
<ul>
|
||||||
<?php foreach($plugin_files as $plugin_file) : ?>
|
<?php foreach($plugin_files as $plugin_file) : ?>
|
||||||
<li><a href="plugin-editor.php?file=<?php echo "$plugin_file"; ?>"><?php echo get_file_description(basename($plugin_file)); ?></a></li>
|
<li><a href="plugin-editor.php?file=<?php echo "$plugin_file"; ?>"><?php echo $plugins[$plugin_file]['Name']; ?></a></li>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
</ul>
|
</ul>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
Loading…
Reference in New Issue