Make WordPress Core


Ignore:
Timestamp:
08/09/2012 04:28:15 PM (12 years ago)
Author:
ryan
Message:

switch_to_blog() and restore_current_blog() housekeeping.

wp-includes/admin-bar.php:

  • Replace get_admin_url() and get_home_url() with admin_url() and home_url() and place them inside a switch/restore. Likewise replace current_user_can_for_blog() with current_user_can(). This avoids doing multiple switch restores.

wp-includes/ms-blogs.php:

  • Deprecate the $validate argument to switch_to_blog(). This avoids a not very necessary call to get_blog_details(), possibly saving a few queries.
  • Use $_wp_switched and $_wp_switched_stack instead of $switched and $switched_stack to make it less likely these globals will be stomped.
  • Use GLOBALS to access blog_id and other globals. I've preferred this style lately since it makes it obvious a global is being used and avoids global blog_id being stomped by a local variable.
  • Lose some is_object() checks. wp_get_current_user() always returns an object, for example.
  • Call the new WP_Roles::reinit() method.

wp-includes/class-wp-xmlrpc-server.php:

  • Replace current_user_can_for_blog() with current_user_can() and move it inside the switch/restore pair. This eliminates a switch/restore.

wp-includes/capabilities.php:

  • Use array_keys() instead of $role => $data since $data is unused. I *think* this is a bit faster.
  • Introduce WP_Roles::reinit(). This reinitializes WP_Roles and is used after switch_to_blog() has already update the blog ID in the wpdb object. If a global roles array is being used instead of the db, reinit is skipped.
  • current_user_can_for_blog() now does a switch/restore. It didn't before meaning it could be reinitializing the user with the wrong role information for the current blog.

wp-includes/ms-settings.php:

  • Define $_wp_switched_stack and $_wp_switched. This way switch_to_blog() and restore_current_blog() can rely on it being set.

wp-settings.php:

  • Instantiate the WP_Roles global. This was it is always defined during init. To remove the WP_Roles checks from WP_Role and WP_User this would probably have to move before plugins are loaded, which might not be a good thing.

wp-includes/functions.php:

  • Update wp_upload_dir() to reference _wp_switched.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/functions.php

    r21373 r21485  
    14331433 */
    14341434function wp_upload_dir( $time = null ) {
    1435     global $switched;
     1435    global $_wp_switched;
    14361436    $siteurl = get_option( 'siteurl' );
    14371437    $upload_path = get_option( 'upload_path' );
     
    14571457    }
    14581458
    1459     if ( defined('UPLOADS') && !$main_override && ( !isset( $switched ) || $switched === false ) ) {
     1459    if ( defined('UPLOADS') && ! $main_override && ! $_wp_switched ) {
    14601460        $dir = ABSPATH . UPLOADS;
    14611461        $url = trailingslashit( $siteurl ) . UPLOADS;
    14621462    }
    14631463
    1464     if ( is_multisite() && !$main_override && ( !isset( $switched ) || $switched === false ) ) {
     1464    if ( is_multisite() && ! $main_override && ! $_wp_switched ) {
    14651465        if ( defined( 'BLOGUPLOADDIR' ) )
    14661466            $dir = untrailingslashit(BLOGUPLOADDIR);
Note: See TracChangeset for help on using the changeset viewer.