﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
11998	switch_to_blog and wp_upload_dir, with wpmu 2.8.4a	wpmuguru		"MU Trac Ticket: http://trac.mu.wordpress.org/ticket/1154

When you use the switch_to_blog, wp_upload_dir doesn't take care of the blog_id you switch to.

Here is an example, the action is running on blog id 4, but the target is blog id 14

{{{
array(6) {
  [""path""]=>
  string(74) ""/data/web/srvph1/zeclic.fr/www/htdocs/wp-content/blogs.dir/4/files/2009/11""
  [""url""]=>
  string(62) ""http://fandebd.zeclic.fr/wp-content/blogs.dir/14/files/2009/11""
  [""subdir""]=>
  string(8) ""/2009/11""
  [""basedir""]=>
  string(67) ""/data/web/srvph1/zeclic.fr/www/htdocs/wp-content/blogs.dir/4/files""
  [""baseurl""]=>
  string(54) ""http://fandebd.zeclic.fr/wp-content/blogs.dir/14/files""
  [""error""]=>
  bool(false)
}
}}}

Cause is /wp-includes/functions.php Line 2057 to 2060:

{{{
	if ( defined('UPLOADS')) {
		$dir = ABSPATH . UPLOADS;
		$url = trailingslashit( $siteurl ) . UPLOADS;
	}
}}}

Correction for 'basedir' is :

{{{
        global $switched;
        if ( defined('UPLOADS') && $switched === false) {
		$dir = ABSPATH . UPLOADS;
		$url = trailingslashit( $siteurl ) . UPLOADS;
	}
}}}

But 'path' key doesn't change. It's modified by another filter /wp-includes/wpmu-functions.php :

{{{
function mu_upload_dir( $uploads ) {
	$dir = $uploads[ 'basedir' ];
	if( defined( 'BLOGUPLOADDIR' ) )
		$dir = constant( 'BLOGUPLOADDIR' );
	$dir = untrailingslashit( $dir ) . $uploads[ 'subdir' ];
	$uploads[ 'path' ] = $dir;

	return $uploads;
}
add_filter( 'upload_dir', 'mu_upload_dir' );
}}}

Patch is :

{{{
function mu_upload_dir( $uploads ) {
        global $switched;
	$dir = $uploads[ 'basedir' ];
	if( defined( 'BLOGUPLOADDIR' ) && switched === false )
		$dir = constant( 'BLOGUPLOADDIR' );
	$dir = untrailingslashit( $dir ) . $uploads[ 'subdir' ];
	$uploads[ 'path' ] = $dir;

	return $uploads;
}
add_filter( 'upload_dir', 'mu_upload_dir' );
}}}

perhaps we can put the two patch only on wpmu-functions.php ....

my wpmu_version = '2.8.4a';
"	defect (bug)	closed	normal	3.0	Multisite		normal	fixed	has-patch	
