WordPress.org

Make WordPress Core

Ticket #36196: 36196.4.diff

File 36196.4.diff, 5.7 KB (added by johnbillion, 3 years ago)
  • src/wp-admin/includes/class-wp-users-list-table.php

    diff --git src/wp-admin/includes/class-wp-users-list-table.php src/wp-admin/includes/class-wp-users-list-table.php
    index f557c2b459..7637896880 100644
    class WP_Users_List_Table extends WP_List_Table { 
    9898                        $args = array(
    9999                                'number' => $users_per_page,
    100100                                'offset' => ( $paged-1 ) * $users_per_page,
    101                                 'include' => wp_get_users_with_no_role(),
     101                                'include' => wp_get_users_with_no_role( $this->site_id ),
    102102                                'search' => $usersearch,
    103103                                'fields' => 'all_with_meta'
    104104                        );
    class WP_Users_List_Table extends WP_List_Table { 
    177177                if ( $this->is_site_users ) {
    178178                        $url = 'site-users.php?id=' . $this->site_id;
    179179                        switch_to_blog( $this->site_id );
    180                         $users_of_blog = count_users();
     180                        $users_of_blog = count_users( 'time', $this->site_id );
    181181                        restore_current_blog();
    182182                } else {
    183183                        $url = 'users.php';
    class WP_Users_List_Table extends WP_List_Table { 
    369369                        $post_counts = count_many_users_posts( array_keys( $this->items ) );
    370370
    371371                foreach ( $this->items as $userid => $user_object ) {
    372                         if ( is_multisite() && empty( $user_object->allcaps ) )
    373                                 continue;
    374 
    375372                        echo "\n\t" . $this->single_row( $user_object, '', '', isset( $post_counts ) ? $post_counts[ $userid ] : 0 );
    376373                }
    377374        }
  • src/wp-includes/user.php

    diff --git src/wp-includes/user.php src/wp-includes/user.php
    index 5615650692..a0e699c2c1 100644
    function update_user_meta($user_id, $meta_key, $meta_value, $prev_value = '') { 
    838838 *
    839839 * @since 3.0.0
    840840 * @since 4.4.0 The number of users with no role is now included in the `none` element.
     841 * @since 4.9.0 The `$site_id` parameter was added to support multisite.
    841842 *
    842843 * @global wpdb $wpdb WordPress database abstraction object.
    843844 *
    844  * @param string $strategy 'time' or 'memory'
     845 * @param string   $strategy Optional. The computational strategy to use when counting the users.
     846 *                           Accepts either 'time' or 'memory'. Default 'time'.
     847 * @param int|null $site_id  Optional. The site ID to count users for. Defaults to the current site.
    845848 * @return array Includes a grand total and an array of counts indexed by role strings.
    846849 */
    847 function count_users($strategy = 'time') {
     850function count_users( $strategy = 'time', $site_id = null ) {
    848851        global $wpdb;
    849852
    850853        // Initialize
    851         $id = get_current_blog_id();
    852         $blog_prefix = $wpdb->get_blog_prefix($id);
     854        if ( ! $site_id ) {
     855                $site_id = get_current_blog_id();
     856        }
     857        $blog_prefix = $wpdb->get_blog_prefix( $site_id );
    853858        $result = array();
    854859
    855860        if ( 'time' == $strategy ) {
    function count_users($strategy = 'time') { 
    920925                $result['avail_roles'] =& $avail_roles;
    921926        }
    922927
    923         if ( is_multisite() ) {
    924                 $result['avail_roles']['none'] = 0;
    925         }
    926 
    927928        return $result;
    928929}
    929930
    function wp_destroy_all_sessions() { 
    24832484/**
    24842485 * Get the user IDs of all users with no role on this site.
    24852486 *
    2486  * This function returns an empty array when used on Multisite.
    2487  *
    24882487 * @since 4.4.0
     2488 * @since 4.9.0 The `$site_id` parameter was added to support multisite.
    24892489 *
     2490 * @param int|null $site_id Optional. The site ID to get users with no role for. Defaults to the current site.
    24902491 * @return array Array of user IDs.
    24912492 */
    2492 function wp_get_users_with_no_role() {
     2493function wp_get_users_with_no_role( $site_id = null ) {
    24932494        global $wpdb;
    24942495
    2495         if ( is_multisite() ) {
    2496                 return array();
     2496        if ( ! $site_id ) {
     2497                $site_id = get_current_blog_id();
    24972498        }
    24982499
    2499         $prefix = $wpdb->get_blog_prefix();
     2500        $prefix = $wpdb->get_blog_prefix( $site_id );
    25002501        $regex  = implode( '|', array_keys( wp_roles()->get_names() ) );
    25012502        $regex  = preg_replace( '/[^a-zA-Z_\|-]/', '', $regex );
    25022503        $users  = $wpdb->get_col( $wpdb->prepare( "
  • tests/phpunit/tests/user/countUsers.php

    diff --git tests/phpunit/tests/user/countUsers.php tests/phpunit/tests/user/countUsers.php
    index f5fa6b9356..115b4baa73 100644
    class Tests_User_CountUsers extends WP_UnitTestCase { 
    5252
    5353        /**
    5454         * @ticket 22993
     55         * @ticket 36196
    5556         * @group multisite
    5657         * @group ms-required
    5758         *
    class Tests_User_CountUsers extends WP_UnitTestCase { 
    103104                        'author'        => 1,
    104105                        'contributor'   => 1,
    105106                        'subscriber'    => 1,
    106                         'none'          => 0,
     107                        'none'          => 2,
    107108                ), $count['avail_roles'] );
    108109
    109110                // Test users counts on blog 1
  • tests/phpunit/tests/user/wpGetUsersWithNoRole.php

    diff --git tests/phpunit/tests/user/wpGetUsersWithNoRole.php tests/phpunit/tests/user/wpGetUsersWithNoRole.php
    index 82c0da73bf..10ecf2a565 100644
    class Tests_User_GetUsersWithNoRole extends WP_UnitTestCase { 
    3636
    3737        /**
    3838         * @ticket 22993
     39         * @ticket 36196
    3940         * @group multisite
    4041         * @group ms-required
    4142         */
    class Tests_User_GetUsersWithNoRole extends WP_UnitTestCase { 
    5657                        'user_id' => $editor,
    5758                ) );
    5859
    59                 // Add users to blogs
     60                // Add editor to blog 1
    6061                add_user_to_blog( $blog_1, $editor, 'editor' );
    6162
    6263                // Test users on root site
    6364                $users = wp_get_users_with_no_role();
    64                 $this->assertSame( array(), $users );
     65                $this->assertSame( array(
     66                        "{$nobody}",
     67                ), $users );
    6568
    6669                // Test users counts on blog 1
    67                 switch_to_blog( $blog_1 );
    68                 $users = wp_get_users_with_no_role();
    69                 restore_current_blog();
    70 
    71                 // Test users on root site
     70                $users = wp_get_users_with_no_role( $blog_1 );
    7271                $this->assertSame( array(), $users );
    7372
     73                // Add admin to blog 1 with no role
     74                add_user_to_blog( $blog_1, $admin, '' );
     75
     76                // Re-test users counts on blog 1
     77                $users = wp_get_users_with_no_role( $blog_1 );
     78                $this->assertSame( array(
     79                        "{$admin}",
     80                ), $users );
    7481        }
    7582
    7683        /**