1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
Description: Support symlinks for plugin directories
Origin: http://core.trac.wordpress.org/attachment/ticket/16953/16953.alternative.diff
Bug: http://core.trac.wordpress.org/ticket/16953
Bug-Debian: http://bugs.debian.org/686228
--- a/wp-includes/plugin.php
+++ b/wp-includes/plugin.php
@@ -589,11 +589,41 @@ function plugin_basename($file) {
$plugin_dir = preg_replace('|/+|','/', $plugin_dir); // remove any duplicate slash
$mu_plugin_dir = str_replace('\\','/',WPMU_PLUGIN_DIR); // sanitize for Win32 installs
$mu_plugin_dir = preg_replace('|/+|','/', $mu_plugin_dir); // remove any duplicate slash
+
+ static $plugin_links_replaces;
+ $plugin_links_replaces = plugin_links_replaces();
+ $file = preg_replace( array_keys($plugin_links_replaces), array_values($plugin_links_replaces), $file);
+
$file = preg_replace('#^' . preg_quote($plugin_dir, '#') . '/|^' . preg_quote($mu_plugin_dir, '#') . '/#','',$file); // get relative path from plugins dir
$file = trim($file, '/');
return $file;
}
+function plugin_links( $plugin_root = WP_PLUGIN_DIR ) {
+ $links = array();
+
+ $plugins_dir = @ opendir( $plugin_root );
+ while (($file = readdir( $plugins_dir ) ) !== false ) {
+ if ( substr($file, 0, 1) == '.' )
+ continue;
+
+ if ( is_link( $plugin_root.'/'.$file ) ) {
+ $links[$file] = untrailingslashit(readlink( $plugin_root.'/'.$file ));
+ }
+ }
+ @closedir( $plugins_dir );
+
+ return $links;
+}
+
+function plugin_links_replaces( $plugin_root = WP_PLUGIN_DIR ) {
+ $links = array();
+ $plugin_links = plugin_links( $plugin_root );
+ foreach ( $plugin_links as $file => $target )
+ $links['#^' . preg_quote($target, '#') . '(/|$)#'] = $file . '$1';
+ return $links;
+}
+
/**
* Gets the filesystem directory path (with trailing slash) for the plugin __FILE__ passed in
* @package WordPress
--- a/wp-admin/includes/plugin.php
+++ b/wp-admin/includes/plugin.php
@@ -248,14 +248,19 @@ function get_plugins($plugin_folder = ''
$plugin_root .= $plugin_folder;
// Files in wp-content/plugins directory
- $plugins_dir = @ opendir( $plugin_root);
+ $plugins_dir = @ opendir( $plugin_root );
$plugin_files = array();
if ( $plugins_dir ) {
while (($file = readdir( $plugins_dir ) ) !== false ) {
if ( substr($file, 0, 1) == '.' )
continue;
- if ( is_dir( $plugin_root.'/'.$file ) ) {
- $plugins_subdir = @ opendir( $plugin_root.'/'.$file );
+
+ $full_file_path = $plugin_root.'/'.$file;
+ if ( is_link( $full_file_path ) )
+ $full_file_path = readlink( $full_file_path );
+
+ if ( is_dir( $full_file_path ) ) {
+ $plugins_subdir = @ opendir( $full_file_path );
if ( $plugins_subdir ) {
while (($subfile = readdir( $plugins_subdir ) ) !== false ) {
if ( substr($subfile, 0, 1) == '.' )
|