Users: Ensure that users with no role on a site are taken into consideration when listing users on Multisite.
This ensures that users who are a member of a site but have no role are correctly listed on the Users screen and can be filtered from the 'None' role filter. Props tobi823, flixos90, scottlee Fixes #36196 git-svn-id: https://develop.svn.wordpress.org/trunk@41138 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
06160eb060
commit
44491ba49f
|
@ -98,7 +98,7 @@ class WP_Users_List_Table extends WP_List_Table {
|
||||||
$args = array(
|
$args = array(
|
||||||
'number' => $users_per_page,
|
'number' => $users_per_page,
|
||||||
'offset' => ( $paged-1 ) * $users_per_page,
|
'offset' => ( $paged-1 ) * $users_per_page,
|
||||||
'include' => wp_get_users_with_no_role(),
|
'include' => wp_get_users_with_no_role( $this->site_id ),
|
||||||
'search' => $usersearch,
|
'search' => $usersearch,
|
||||||
'fields' => 'all_with_meta'
|
'fields' => 'all_with_meta'
|
||||||
);
|
);
|
||||||
|
@ -177,7 +177,7 @@ class WP_Users_List_Table extends WP_List_Table {
|
||||||
if ( $this->is_site_users ) {
|
if ( $this->is_site_users ) {
|
||||||
$url = 'site-users.php?id=' . $this->site_id;
|
$url = 'site-users.php?id=' . $this->site_id;
|
||||||
switch_to_blog( $this->site_id );
|
switch_to_blog( $this->site_id );
|
||||||
$users_of_blog = count_users();
|
$users_of_blog = count_users( 'time', $this->site_id );
|
||||||
restore_current_blog();
|
restore_current_blog();
|
||||||
} else {
|
} else {
|
||||||
$url = 'users.php';
|
$url = 'users.php';
|
||||||
|
@ -369,9 +369,6 @@ class WP_Users_List_Table extends WP_List_Table {
|
||||||
$post_counts = count_many_users_posts( array_keys( $this->items ) );
|
$post_counts = count_many_users_posts( array_keys( $this->items ) );
|
||||||
|
|
||||||
foreach ( $this->items as $userid => $user_object ) {
|
foreach ( $this->items as $userid => $user_object ) {
|
||||||
if ( is_multisite() && empty( $user_object->allcaps ) )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
echo "\n\t" . $this->single_row( $user_object, '', '', isset( $post_counts ) ? $post_counts[ $userid ] : 0 );
|
echo "\n\t" . $this->single_row( $user_object, '', '', isset( $post_counts ) ? $post_counts[ $userid ] : 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -838,18 +838,23 @@ function update_user_meta($user_id, $meta_key, $meta_value, $prev_value = '') {
|
||||||
*
|
*
|
||||||
* @since 3.0.0
|
* @since 3.0.0
|
||||||
* @since 4.4.0 The number of users with no role is now included in the `none` element.
|
* @since 4.4.0 The number of users with no role is now included in the `none` element.
|
||||||
|
* @since 4.9.0 The `$site_id` parameter was added to support multisite.
|
||||||
*
|
*
|
||||||
* @global wpdb $wpdb WordPress database abstraction object.
|
* @global wpdb $wpdb WordPress database abstraction object.
|
||||||
*
|
*
|
||||||
* @param string $strategy 'time' or 'memory'
|
* @param string $strategy Optional. The computational strategy to use when counting the users.
|
||||||
|
* Accepts either 'time' or 'memory'. Default 'time'.
|
||||||
|
* @param int|null $site_id Optional. The site ID to count users for. Defaults to the current site.
|
||||||
* @return array Includes a grand total and an array of counts indexed by role strings.
|
* @return array Includes a grand total and an array of counts indexed by role strings.
|
||||||
*/
|
*/
|
||||||
function count_users($strategy = 'time') {
|
function count_users( $strategy = 'time', $site_id = null ) {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
// Initialize
|
// Initialize
|
||||||
$id = get_current_blog_id();
|
if ( ! $site_id ) {
|
||||||
$blog_prefix = $wpdb->get_blog_prefix($id);
|
$site_id = get_current_blog_id();
|
||||||
|
}
|
||||||
|
$blog_prefix = $wpdb->get_blog_prefix( $site_id );
|
||||||
$result = array();
|
$result = array();
|
||||||
|
|
||||||
if ( 'time' == $strategy ) {
|
if ( 'time' == $strategy ) {
|
||||||
|
@ -920,10 +925,6 @@ function count_users($strategy = 'time') {
|
||||||
$result['avail_roles'] =& $avail_roles;
|
$result['avail_roles'] =& $avail_roles;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( is_multisite() ) {
|
|
||||||
$result['avail_roles']['none'] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2483,20 +2484,20 @@ function wp_destroy_all_sessions() {
|
||||||
/**
|
/**
|
||||||
* Get the user IDs of all users with no role on this site.
|
* Get the user IDs of all users with no role on this site.
|
||||||
*
|
*
|
||||||
* This function returns an empty array when used on Multisite.
|
|
||||||
*
|
|
||||||
* @since 4.4.0
|
* @since 4.4.0
|
||||||
|
* @since 4.9.0 The `$site_id` parameter was added to support multisite.
|
||||||
*
|
*
|
||||||
|
* @param int|null $site_id Optional. The site ID to get users with no role for. Defaults to the current site.
|
||||||
* @return array Array of user IDs.
|
* @return array Array of user IDs.
|
||||||
*/
|
*/
|
||||||
function wp_get_users_with_no_role() {
|
function wp_get_users_with_no_role( $site_id = null ) {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
if ( is_multisite() ) {
|
if ( ! $site_id ) {
|
||||||
return array();
|
$site_id = get_current_blog_id();
|
||||||
}
|
}
|
||||||
|
|
||||||
$prefix = $wpdb->get_blog_prefix();
|
$prefix = $wpdb->get_blog_prefix( $site_id );
|
||||||
$regex = implode( '|', array_keys( wp_roles()->get_names() ) );
|
$regex = implode( '|', array_keys( wp_roles()->get_names() ) );
|
||||||
$regex = preg_replace( '/[^a-zA-Z_\|-]/', '', $regex );
|
$regex = preg_replace( '/[^a-zA-Z_\|-]/', '', $regex );
|
||||||
$users = $wpdb->get_col( $wpdb->prepare( "
|
$users = $wpdb->get_col( $wpdb->prepare( "
|
||||||
|
|
|
@ -52,6 +52,7 @@ class Tests_User_CountUsers extends WP_UnitTestCase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ticket 22993
|
* @ticket 22993
|
||||||
|
* @ticket 36196
|
||||||
* @group multisite
|
* @group multisite
|
||||||
* @group ms-required
|
* @group ms-required
|
||||||
*
|
*
|
||||||
|
@ -103,7 +104,7 @@ class Tests_User_CountUsers extends WP_UnitTestCase {
|
||||||
'author' => 1,
|
'author' => 1,
|
||||||
'contributor' => 1,
|
'contributor' => 1,
|
||||||
'subscriber' => 1,
|
'subscriber' => 1,
|
||||||
'none' => 0,
|
'none' => 2,
|
||||||
), $count['avail_roles'] );
|
), $count['avail_roles'] );
|
||||||
|
|
||||||
// Test users counts on blog 1
|
// Test users counts on blog 1
|
||||||
|
|
|
@ -36,6 +36,7 @@ class Tests_User_GetUsersWithNoRole extends WP_UnitTestCase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ticket 22993
|
* @ticket 22993
|
||||||
|
* @ticket 36196
|
||||||
* @group multisite
|
* @group multisite
|
||||||
* @group ms-required
|
* @group ms-required
|
||||||
*/
|
*/
|
||||||
|
@ -56,21 +57,27 @@ class Tests_User_GetUsersWithNoRole extends WP_UnitTestCase {
|
||||||
'user_id' => $editor,
|
'user_id' => $editor,
|
||||||
) );
|
) );
|
||||||
|
|
||||||
// Add users to blogs
|
// Add editor to blog 1
|
||||||
add_user_to_blog( $blog_1, $editor, 'editor' );
|
add_user_to_blog( $blog_1, $editor, 'editor' );
|
||||||
|
|
||||||
// Test users on root site
|
// Test users on root site
|
||||||
$users = wp_get_users_with_no_role();
|
$users = wp_get_users_with_no_role();
|
||||||
$this->assertSame( array(), $users );
|
$this->assertSame( array(
|
||||||
|
"{$nobody}",
|
||||||
|
), $users );
|
||||||
|
|
||||||
// Test users counts on blog 1
|
// Test users counts on blog 1
|
||||||
switch_to_blog( $blog_1 );
|
$users = wp_get_users_with_no_role( $blog_1 );
|
||||||
$users = wp_get_users_with_no_role();
|
|
||||||
restore_current_blog();
|
|
||||||
|
|
||||||
// Test users on root site
|
|
||||||
$this->assertSame( array(), $users );
|
$this->assertSame( array(), $users );
|
||||||
|
|
||||||
|
// Add admin to blog 1 with no role
|
||||||
|
add_user_to_blog( $blog_1, $admin, '' );
|
||||||
|
|
||||||
|
// Re-test users counts on blog 1
|
||||||
|
$users = wp_get_users_with_no_role( $blog_1 );
|
||||||
|
$this->assertSame( array(
|
||||||
|
"{$admin}",
|
||||||
|
), $users );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue