Make WordPress Core

Ticket #21459: 21459.4.diff

File 21459.4.diff, 12.7 KB (added by ryan, 12 years ago)
  • wp-includes/admin-bar.php

     
    344344        $blue_wp_logo_url = includes_url('images/wpmini-blue.png');
    345345
    346346        foreach ( (array) $wp_admin_bar->user->blogs as $blog ) {
    347                 // @todo Replace with some favicon lookup.
    348                 //$blavatar = '<img src="' . esc_url( blavatar_url( blavatar_domain( $blog->siteurl ), 'img', 16, $blue_wp_logo_url ) ) . '" alt="Blavatar" width="16" height="16" />';
     347                switch_to_blog( $blog->userblog_id );
     348
    349349                $blavatar = '<img src="' . esc_url($blue_wp_logo_url) . '" alt="' . esc_attr__( 'Blavatar' ) . '" width="16" height="16" class="blavatar"/>';
    350350
    351351                $blogname = empty( $blog->blogname ) ? $blog->domain : $blog->blogname;
     
    355355                        'parent'    => 'my-sites-list',
    356356                        'id'        => $menu_id,
    357357                        'title'     => $blavatar . $blogname,
    358                         'href'      => get_admin_url( $blog->userblog_id ),
     358                        'href'      => admin_url(),
    359359                ) );
    360360
    361361                $wp_admin_bar->add_menu( array(
    362362                        'parent' => $menu_id,
    363363                        'id'     => $menu_id . '-d',
    364364                        'title'  => __( 'Dashboard' ),
    365                         'href'   => get_admin_url( $blog->userblog_id ),
     365                        'href'   => admin_url(),
    366366                ) );
    367367
    368                 if ( current_user_can_for_blog( $blog->userblog_id, 'edit_posts' ) ) {
     368                if ( current_user_can( 'edit_posts' ) ) {
    369369                        $wp_admin_bar->add_menu( array(
    370370                                'parent' => $menu_id,
    371371                                'id'     => $menu_id . '-n',
    372372                                'title'  => __( 'New Post' ),
    373                                 'href'   => get_admin_url( $blog->userblog_id, 'post-new.php' ),
     373                                'href'   => admin_url( 'post-new.php' ),
    374374                        ) );
    375375                        $wp_admin_bar->add_menu( array(
    376376                                'parent' => $menu_id,
    377377                                'id'     => $menu_id . '-c',
    378378                                'title'  => __( 'Manage Comments' ),
    379                                 'href'   => get_admin_url( $blog->userblog_id, 'edit-comments.php' ),
     379                                'href'   => admin_url( 'edit-comments.php' ),
    380380                        ) );
    381381                }
    382382
     
    384384                        'parent' => $menu_id,
    385385                        'id'     => $menu_id . '-v',
    386386                        'title'  => __( 'Visit Site' ),
    387                         'href'   => get_home_url( $blog->userblog_id, '/' ),
     387                        'href'   => home_url( '/' ),
    388388                ) );
     389
     390                restore_current_blog();
    389391        }
    390392}
    391393
  • wp-includes/ms-blogs.php

     
    325325 * @since MU
    326326 *
    327327 * @param int $new_blog The id of the blog you want to switch to. Default: current blog
    328  * @param bool $validate Whether to check if $new_blog exists before proceeding
     328 * @param bool $deprecated Depecreated argument
    329329 * @return bool True on success, False if the validation failed
    330330 */
    331 function switch_to_blog( $new_blog, $validate = false ) {
    332         global $wpdb, $table_prefix, $blog_id, $switched, $switched_stack, $wp_roles, $wp_object_cache;
     331function switch_to_blog( $new_blog, $deprecated = null ) {
     332        global $wpdb, $wp_roles;
    333333
    334         if ( empty($new_blog) )
    335                 $new_blog = $blog_id;
     334        if ( empty( $new_blog ) )
     335                $new_blog = $GLOBALS['blog_id'];
    336336
    337         if ( $validate && ! get_blog_details( $new_blog ) )
    338                 return false;
     337        $GLOBALS['_wp_switched_stack'][] = $GLOBALS['blog_id'];
    339338
    340         if ( empty($switched_stack) )
    341                 $switched_stack = array();
    342 
    343         $switched_stack[] = $blog_id;
    344 
    345339        /* If we're switching to the same blog id that we're on,
    346340        * set the right vars, do the associated actions, but skip
    347341        * the extra unnecessary work */
    348         if ( $blog_id == $new_blog ) {
    349                 do_action( 'switch_blog', $blog_id, $blog_id );
    350                 $switched = true;
     342        if ( $new_blog == $GLOBALS['blog_id'] ) {
     343                do_action( 'switch_blog', $new_blog, $new_blog );
     344                $GLOBALS['_wp_switched'] = true;
    351345                return true;
    352346        }
    353347
    354         $wpdb->set_blog_id($new_blog);
    355         $table_prefix = $wpdb->prefix;
    356         $prev_blog_id = $blog_id;
    357         $blog_id = $new_blog;
     348        $wpdb->set_blog_id( $new_blog );
     349        $GLOBALS['table_prefix'] = $wpdb->prefix;
     350        $prev_blog_id = $GLOBALS['blog_id'];
     351        $GLOBALS['blog_id'] = $new_blog;
    358352
    359         if ( is_object( $wp_roles ) ) {
    360                 $wpdb->suppress_errors();
    361                 if ( method_exists( $wp_roles ,'_init' ) )
    362                         $wp_roles->_init();
    363                 elseif ( method_exists( $wp_roles, '__construct' ) )
    364                         $wp_roles->__construct();
    365                 $wpdb->suppress_errors( false );
    366         }
    367 
    368         if ( did_action('init') ) {
     353        if ( did_action( 'init' ) ) {
     354                $wp_roles->reinit();
    369355                $current_user = wp_get_current_user();
    370                 if ( is_object( $current_user ) )
    371                         $current_user->for_blog( $blog_id );
     356                $current_user->for_blog( $new_blog );
    372357        }
    373358
    374359        if ( function_exists( 'wp_cache_switch_to_blog' ) ) {
    375                 wp_cache_switch_to_blog( $blog_id );
     360                wp_cache_switch_to_blog( $new_blog );
    376361        } else {
     362                global $wp_object_cache;
     363
    377364                if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) )
    378365                        $global_groups = $wp_object_cache->global_groups;
    379366                else
    380367                        $global_groups = false;
    381368       
    382369                wp_cache_init();
    383                 if ( function_exists('wp_cache_add_global_groups') ) {
     370
     371                if ( function_exists( 'wp_cache_add_global_groups' ) ) {
    384372                        if ( is_array( $global_groups ) )
    385373                                wp_cache_add_global_groups( $global_groups );
    386374                        else
    387375                                wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts' ) );
    388                         wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' ));
     376                        wp_cache_add_non_persistent_groups( array( 'comment', 'counts', 'plugins' ) );
    389377                }
    390378        }
    391379
    392         do_action('switch_blog', $blog_id, $prev_blog_id);
    393         $switched = true;
     380        do_action( 'switch_blog', $new_blog, $prev_blog_id );
     381        $GLOBALS['_wp_switched'] = true;
     382
    394383        return true;
    395384}
    396385
     
    403392 * @return bool True on success, False if we're already on the current blog
    404393 */
    405394function restore_current_blog() {
    406         global $table_prefix, $wpdb, $blog_id, $switched, $switched_stack, $wp_roles, $wp_object_cache;
     395        global $wpdb, $wp_roles;
    407396
    408         if ( !$switched )
     397        if ( ! $GLOBALS['_wp_switched'] )
    409398                return false;
    410399
    411         if ( !is_array( $switched_stack ) )
    412                 return false;
     400        $blog = array_pop( $GLOBALS['_wp_switched_stack'] );
    413401
    414         $blog = array_pop( $switched_stack );
    415         if ( $blog_id == $blog ) {
     402        if ( $GLOBALS['blog_id'] == $blog ) {
    416403                do_action( 'switch_blog', $blog, $blog );
    417                 /* If we still have items in the switched stack, consider ourselves still 'switched' */
    418                 $switched = ( is_array( $switched_stack ) && count( $switched_stack ) > 0 );
     404                // If we still have items in the switched stack, consider ourselves still 'switched'
     405                $GLOBALS['_wp_switched'] = ! empty( $GLOBALS['_wp_switched_stack'] );
    419406                return true;
    420407        }
    421408
    422         $wpdb->set_blog_id($blog);
    423         $prev_blog_id = $blog_id;
    424         $blog_id = $blog;
    425         $table_prefix = $wpdb->prefix;
     409        $wpdb->set_blog_id( $blog );
     410        $prev_blog_id = $GLOBALS['blog_id'];
     411        $GLOBALS['blog_id'] = $blog;
     412        $GLOBALS['table_prefix'] = $wpdb->prefix;
    426413
    427         if ( is_object( $wp_roles ) ) {
    428                 $wpdb->suppress_errors();
    429                 if ( method_exists( $wp_roles ,'_init' ) )
    430                         $wp_roles->_init();
    431                 elseif ( method_exists( $wp_roles, '__construct' ) )
    432                         $wp_roles->__construct();
    433                 $wpdb->suppress_errors( false );
    434         }
    435 
    436         if ( did_action('init') ) {
     414        if ( did_action( 'init' ) ) {
     415                $wp_roles->reinit();
    437416                $current_user = wp_get_current_user();
    438                 if ( is_object( $current_user ) )
    439                         $current_user->for_blog( $blog_id );
     417                $current_user->for_blog( $blog );
    440418        }
    441419
    442420        if ( function_exists( 'wp_cache_switch_to_blog' ) ) {
    443                 wp_cache_switch_to_blog( $blog_id );
     421                wp_cache_switch_to_blog( $blog );
    444422        } else {
     423                global $wp_object_cache;
     424
    445425                if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) )
    446426                        $global_groups = $wp_object_cache->global_groups;
    447427                else
    448428                        $global_groups = false;
    449429       
    450430                wp_cache_init();
    451                 if ( function_exists('wp_cache_add_global_groups') ) {
     431
     432                if ( function_exists( 'wp_cache_add_global_groups' ) ) {
    452433                        if ( is_array( $global_groups ) )
    453434                                wp_cache_add_global_groups( $global_groups );
    454435                        else
    455436                                wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts' ) );
    456                         wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' ));
     437                        wp_cache_add_non_persistent_groups( array( 'comment', 'counts', 'plugins' ) );
    457438                }
    458439        }
    459440
    460         do_action('switch_blog', $blog_id, $prev_blog_id);
     441        do_action( 'switch_blog', $blog, $prev_blog_id );
    461442
    462         /* If we still have items in the switched stack, consider ourselves still 'switched' */
    463         $switched = ( is_array( $switched_stack ) && count( $switched_stack ) > 0 );
     443        // If we still have items in the switched stack, consider ourselves still 'switched'
     444        $GLOBALS['_wp_switched'] = ! empty( $GLOBALS['_wp_switched_stack'] );
     445
    464446        return true;
    465447}
    466448
  • wp-includes/class-wp-xmlrpc-server.php

     
    473473                                continue;
    474474
    475475                        $blog_id = $blog->userblog_id;
    476                         $is_admin = current_user_can_for_blog( $blog_id, 'manage_options' );
    477476
    478477                        switch_to_blog( $blog_id );
     478
     479                        $is_admin = current_user_can( 'manage_options' );
     480
    479481                        $struct[] = array(
    480482                                'isAdmin'               => $is_admin,
    481483                                'url'                   => home_url( '/' ),
     
    483485                                'blogName'              => get_option( 'blogname' ),
    484486                                'xmlrpc'                => site_url( 'xmlrpc.php' )
    485487                        );
     488
    486489                        restore_current_blog();
    487490                }
    488491
  • wp-includes/capabilities.php

     
    108108
    109109                $this->role_objects = array();
    110110                $this->role_names =  array();
    111                 foreach ( (array) $this->roles as $role => $data ) {
     111                foreach ( array_keys( $this->roles ) as $role ) {
    112112                        $this->role_objects[$role] = new WP_Role( $role, $this->roles[$role]['capabilities'] );
    113113                        $this->role_names[$role] = $this->roles[$role]['name'];
    114114                }
    115115        }
    116116
    117117        /**
     118         * Reinitialize the object
     119         *
     120         * Recreates the role objects. This is typically called only by switch_to_blog()
     121         * after switching wpdb to a new blog ID.
     122         *
     123         * @since 3.5.0
     124         * @access public
     125         */
     126        function reinit() {
     127                // There is no need to reinit if using the wp_user_roles global.
     128                if ( ! $this->use_db )
     129                        return;
     130
     131                global $wpdb, $wp_user_roles;
     132
     133                // Duplicated from _init() to avoid an extra function call.
     134                $this->role_key = $wpdb->prefix . 'user_roles';
     135                $this->roles = get_option( $this->role_key );
     136                if ( empty( $this->roles ) )
     137                        return;
     138
     139                $this->role_objects = array();
     140                $this->role_names =  array();
     141                foreach ( array_keys( $this->roles ) as $role ) {
     142                        $this->role_objects[$role] = new WP_Role( $role, $this->roles[$role]['capabilities'] );
     143                        $this->role_names[$role] = $this->roles[$role]['name'];
     144                }
     145        }
     146
     147        /**
    118148         * Add role name with capabilities to list.
    119149         *
    120150         * Updates the list of roles, if the role doesn't already exist.
     
    233263         * @param string $role Role name to look up.
    234264         * @return bool
    235265         */
    236         function is_role( $role )
    237         {
     266        function is_role( $role ) {
    238267                return isset( $this->role_names[$role] );
    239268        }
    240269}
     
    12311260 * @return bool
    12321261 */
    12331262function current_user_can_for_blog( $blog_id, $capability ) {
     1263        switch_to_blog( $blog_id );
     1264
    12341265        $current_user = wp_get_current_user();
    12351266
    12361267        if ( empty( $current_user ) )
    12371268                return false;
    12381269
    1239         // Create new object to avoid stomping the global current_user.
    1240         $user = new WP_User( $current_user->ID );
    1241 
    1242         // Set the blog id. @todo add blog id arg to WP_User constructor?
    1243         $user->for_blog( $blog_id );
    1244 
    12451270        $args = array_slice( func_get_args(), 2 );
    12461271        $args = array_merge( array( $capability ), $args );
    12471272
    1248         return call_user_func_array( array( &$user, 'has_cap' ), $args );
     1273        $can = call_user_func_array( array( $current_user, 'has_cap' ), $args );
     1274
     1275        restore_current_blog();
     1276
     1277        return $can;
    12491278}
    12501279
    12511280/**
  • wp-includes/ms-settings.php

     
    126126$wpdb->set_prefix( $table_prefix, false ); // $table_prefix can be set in sunrise.php
    127127$wpdb->set_blog_id( $current_blog->blog_id, $current_blog->site_id );
    128128$table_prefix = $wpdb->get_blog_prefix();
     129$_wp_switched_stack = array();
     130$_wp_switched = false;
    129131
    130132// need to init cache again after blog_id is set
    131133wp_start_object_cache();
  • wp-settings.php

     
    252252 */
    253253$GLOBALS['wp_widget_factory'] = new WP_Widget_Factory();
    254254
     255/**
     256 * WordPress User Roles
     257 * @global object $wp_roles
     258 * @since 2.0.0
     259 */
     260$GLOBALS['wp_roles'] = new WP_Roles();
     261
    255262do_action( 'setup_theme' );
    256263
    257264// Define the template related constants.