Make wpmu_delete_blog() slightly less crappy. Prevents the entire network from being dropped in a particularly rare edge case. Removes some zombie code. fixes #19009.

git-svn-id: http://svn.automattic.com/wordpress/trunk@19038 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
nacin 2011-10-21 22:04:52 +00:00
parent 975c670f15
commit f708c5eaff

View File

@ -53,16 +53,17 @@ add_filter( 'wp_handle_upload_prefilter', 'check_upload_size' );
* @return void
*/
function wpmu_delete_blog( $blog_id, $drop = false ) {
global $wpdb;
global $wpdb, $current_site;
$switch = false;
if ( $blog_id != $wpdb->blogid ) {
$switch = true;
switch_to_blog( $blog_id );
$blog = get_blog_details( $blog_id );
} else {
$blog = $GLOBALS['current_blog'];
}
$blog_prefix = $wpdb->get_blog_prefix( $blog_id );
do_action( 'delete_blog', $blog_id, $drop );
$users = get_users( array( 'blog_id' => $blog_id, 'fields' => 'ids' ) );
@ -70,23 +71,24 @@ function wpmu_delete_blog( $blog_id, $drop = false ) {
// Remove users from this blog.
if ( ! empty( $users ) ) {
foreach ( $users as $user_id ) {
remove_user_from_blog( $user_id, $blog_id) ;
remove_user_from_blog( $user_id, $blog_id );
}
}
update_blog_status( $blog_id, 'deleted', 1 );
// Don't destroy the initial, main, or root blog.
if ( $drop && ( 1 == $blog_id || is_main_site( $blog_id ) || ( $blog->path == $current_site->path && $blog->domain == $current_site->domain ) ) )
$drop = false;
if ( $drop ) {
if ( substr( $blog_prefix, -1 ) == '_' )
$blog_prefix = substr( $blog_prefix, 0, -1 ) . '\_';
$drop_tables = $wpdb->get_results( "SHOW TABLES LIKE '{$blog_prefix}%'", ARRAY_A );
$drop_tables = apply_filters( 'wpmu_drop_tables', $drop_tables );
$drop_tables = apply_filters( 'wpmu_drop_tables', $wpdb->tables( 'blog' ) );
reset( $drop_tables );
foreach ( (array) $drop_tables as $drop_table) {
$wpdb->query( "DROP TABLE IF EXISTS ". current( $drop_table ) ."" );
foreach ( (array) $drop_tables as $table ) {
$wpdb->query( "DROP TABLE IF EXISTS `$table`" );
}
$wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->blogs WHERE blog_id = %d", $blog_id ) );
$dir = apply_filters( 'wpmu_delete_blog_upload_dir', WP_CONTENT_DIR . "/blogs.dir/{$blog_id}/files/", $blog_id );
$dir = rtrim( $dir, DIRECTORY_SEPARATOR );
@ -120,17 +122,7 @@ function wpmu_delete_blog( $blog_id, $drop = false ) {
}
}
$wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key = '{$blog_prefix}autosave_draft_ids'" );
$blogs = get_site_option( 'blog_list' );
if ( is_array( $blogs ) ) {
foreach ( $blogs as $n => $blog ) {
if ( $blog['blog_id'] == $blog_id )
unset( $blogs[$n] );
}
update_site_option( 'blog_list', $blogs );
}
if ( $switch === true )
if ( $switch )
restore_current_blog();
}