Make WordPress Core

Ticket #14379: 14379.diff

File 14379.diff, 3.9 KB (added by ryan, 14 years ago)
  • wp-includes/user.php

     
    575575}
    576576
    577577/**
    578  * Get the blogs a user belong to.
     578 * Get the blogs a user belongs to.
    579579 *
    580  * $since 3.0.0
     580 * @since 3.0.0
    581581 *
    582582 * @param int $id User Id
    583  * @param bool $all Whether to retrieve all blog details or an abbreviated set of details. Default is abbreviated.
    584  * @return array A list of the user's blogs.
     583 * @param bool $all Whether to retrieve all blogs or only blogs that are not marked as deleted, archived, or spam.
     584 * @return array A list of the user's blogs. False if the user was not found or an empty array if the user has no blogs.
    585585 */
    586586function get_blogs_of_user( $id, $all = false ) {
    587587        global $wpdb;
     
    598598                return $blogs;
    599599        }
    600600
    601         $cache_suffix = $all ? '_all' : '_short';
    602         $return = wp_cache_get( 'blogs_of_user_' . $id . $cache_suffix, 'users' );
    603         if ( $return )
    604                 return apply_filters( 'get_blogs_of_user', $return, $id, $all );
     601        $blogs = wp_cache_get( 'blogs_of_user-' . $id, 'users' );
     602        if ( false === $blogs ) {
     603                $user = get_userdata( (int) $id );
     604                if ( !$user )
     605                        return false;
    605606
    606         $user = get_userdata( (int) $id );
    607         if ( !$user )
    608                 return false;
    609 
    610         $blogs = $match = array();
    611         $prefix_length = strlen($wpdb->base_prefix);
    612         foreach ( (array) $user as $key => $value ) {
    613                 if ( $prefix_length && substr($key, 0, $prefix_length) != $wpdb->base_prefix )
    614                         continue;
    615                 if ( substr($key, -12, 12) != 'capabilities' )
    616                         continue;
    617                 if ( preg_match( '/^' . $wpdb->base_prefix . '((\d+)_)?capabilities$/', $key, $match ) ) {
    618                         if ( count( $match ) > 2 )
    619                                 $blog_id = $match[ 2 ];
    620                         else
    621                                 $blog_id = 1;
    622                         $blog = get_blog_details( $blog_id );
    623                         if ( $blog && isset( $blog->domain ) && ( $all == true || $all == false && ( $blog->archived == 0 && $blog->spam == 0 && $blog->deleted == 0 ) ) ) {
    624                                 $blogs[ $blog_id ]->userblog_id = $blog_id;
    625                                 $blogs[ $blog_id ]->blogname            = $blog->blogname;
    626                                 $blogs[ $blog_id ]->domain              = $blog->domain;
    627                                 $blogs[ $blog_id ]->path                        = $blog->path;
    628                                 $blogs[ $blog_id ]->site_id             = $blog->site_id;
    629                                 $blogs[ $blog_id ]->siteurl             = $blog->siteurl;
     607                $blogs = $match = array();
     608                $prefix_length = strlen($wpdb->base_prefix);
     609                foreach ( (array) $user as $key => $value ) {
     610                        if ( $prefix_length && substr($key, 0, $prefix_length) != $wpdb->base_prefix )
     611                                continue;
     612                        if ( substr($key, -12, 12) != 'capabilities' )
     613                                continue;
     614                        if ( preg_match( '/^' . $wpdb->base_prefix . '((\d+)_)?capabilities$/', $key, $match ) ) {
     615                                if ( count( $match ) > 2 )
     616                                        $blogs[] = (int) $match[ 2 ];
     617                                else
     618                                        $blogs[] = 1;
    630619                        }
    631620                }
     621                wp_cache_set( 'blogs_of_user-' . $id, $blogs, 'users' );
    632622        }
    633623
    634         wp_cache_add( 'blogs_of_user_' . $id . $cache_suffix, $blogs, 'users', 5 );
    635         return apply_filters( 'get_blogs_of_user', $blogs, $id, $all );
     624        $blog_deets = array();
     625        foreach ( (array) $blogs as $blog_id ) {
     626                $blog = get_blog_details( $blog_id );
     627                if ( $blog && isset( $blog->domain ) && ( $all == true || $all == false && ( $blog->archived == 0 && $blog->spam == 0 && $blog->deleted == 0 ) ) ) {
     628                        $blog_deets[ $blog_id ]->userblog_id    = $blog_id;
     629                        $blog_deets[ $blog_id ]->blogname               = $blog->blogname;
     630                        $blog_deets[ $blog_id ]->domain         = $blog->domain;
     631                        $blog_deets[ $blog_id ]->path                   = $blog->path;
     632                        $blog_deets[ $blog_id ]->site_id                = $blog->site_id;
     633                        $blog_deets[ $blog_id ]->siteurl                = $blog->siteurl;
     634                }
     635        }
     636
     637        return apply_filters( 'get_blogs_of_user', $blog_deets, $id, $all );
    636638}
    637639
    638640function get_ordered_blogs_of_user( $user_id, $visibility = true ) {
     
    12681270        wp_cache_delete($user->user_login, 'userlogins');
    12691271        wp_cache_delete($user->user_email, 'useremail');
    12701272        wp_cache_delete($user->user_nicename, 'userslugs');
     1273        wp_cache_delete('blogs_of_user-' . $id, 'users');
    12711274}
    12721275
    12731276?>