WordPress.org

Make WordPress Core

Ticket #37538: 37538.diff

File 37538.diff, 3.0 KB (added by imath, 4 years ago)
  • src/wp-admin/network/users.php

     
    7575                                                                $userfunction = 'all_spam';
    7676                                                                $blogs = get_blogs_of_user( $user_id, true );
    7777                                                                foreach ( (array) $blogs as $details ) {
    78                                                                         if ( $details->userblog_id != $current_site->blog_id ) // main blog not a spam !
     78                                                                        // main blog not a spam !
     79                                                                        if ( (int) $details->userblog_id === (int) $current_site->blog_id ) {
     80                                                                                continue;
     81                                                                        }
     82
     83                                                                        /**
     84                                                                         * Do not punish an entire site if one of its subscriber
     85                                                                         * has been marked as spam.
     86                                                                         */
     87                                                                        if ( 'subscriber' !== $details->user_role ) {
    7988                                                                                update_blog_status( $details->userblog_id, 'spam', '1' );
     89                                                                        }
    8090                                                                }
    8191                                                                update_user_status( $user_id, 'spam', '1' );
    8292                                                        break;
  • src/wp-includes/user.php

     
    621621        $blogs = array();
    622622
    623623        if ( isset( $keys[ $wpdb->base_prefix . 'capabilities' ] ) && defined( 'MULTISITE' ) ) {
    624                 $blog = get_blog_details( 1 );
     624                $blog       = get_blog_details( 1 );
     625                $user_roles = get_user_meta( $user_id, $wpdb->base_prefix . 'capabilities', true );
     626                $user_role  = '';
     627                if ( is_array( $user_roles ) ) {
     628                        $user_role = key( $user_roles );
     629                }
    625630                if ( $blog && isset( $blog->domain ) && ( $all || ( ! $blog->archived && ! $blog->spam && ! $blog->deleted ) ) ) {
    626631                        $blogs[ 1 ] = (object) array(
    627632                                'userblog_id' => 1,
     
    634639                                'mature'      => $blog->mature,
    635640                                'spam'        => $blog->spam,
    636641                                'deleted'     => $blog->deleted,
     642                                'user_role'   => $user_role,
    637643                        );
    638644                }
    639645                unset( $keys[ $wpdb->base_prefix . 'capabilities' ] );
    640646        }
    641647
    642         $keys = array_keys( $keys );
    643 
    644         foreach ( $keys as $key ) {
     648        foreach ( $keys as $key => $value ) {
    645649                if ( 'capabilities' !== substr( $key, -12 ) )
    646650                        continue;
    647651                if ( $wpdb->base_prefix && 0 !== strpos( $key, $wpdb->base_prefix ) )
     
    650654                if ( ! is_numeric( $blog_id ) )
    651655                        continue;
    652656
     657                // Reset the user role at each loop.
     658                $user_role = '';
     659
     660                // Unserialize meta value
     661                if ( is_array( $value ) ) {
     662                        $value = array_map( 'maybe_unserialize', $value );
     663                } else {
     664                        $value = maybe_unserialize( $value );
     665                }
     666
     667                if ( is_array( $value ) ) {
     668                        // Only take the first meta_id.
     669                        $user_roles = reset( $value );
     670
     671                        // Only take the first role.
     672                        if ( is_array( $user_roles ) ) {
     673                                $user_role = key( $user_roles );
     674                        }
     675                }
     676
    653677                $blog_id = (int) $blog_id;
    654678                $blog = get_blog_details( $blog_id );
    655679                if ( $blog && isset( $blog->domain ) && ( $all || ( ! $blog->archived && ! $blog->spam && ! $blog->deleted ) ) ) {
     
    664688                                'mature'      => $blog->mature,
    665689                                'spam'        => $blog->spam,
    666690                                'deleted'     => $blog->deleted,
     691                                'user_role'   => $user_role,
    667692                        );
    668693                }
    669694        }