Ensure the count for users with no role remains accurate when users with multiple roles are present.
See #34495 git-svn-id: https://develop.svn.wordpress.org/trunk@35707 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
bbe6aa01aa
commit
71c0c35c24
@ -758,6 +758,7 @@ function count_users($strategy = 'time') {
|
|||||||
foreach ( $avail_roles as $this_role => $name ) {
|
foreach ( $avail_roles as $this_role => $name ) {
|
||||||
$select_count[] = $wpdb->prepare( "COUNT(NULLIF(`meta_value` LIKE %s, false))", '%' . $wpdb->esc_like( '"' . $this_role . '"' ) . '%');
|
$select_count[] = $wpdb->prepare( "COUNT(NULLIF(`meta_value` LIKE %s, false))", '%' . $wpdb->esc_like( '"' . $this_role . '"' ) . '%');
|
||||||
}
|
}
|
||||||
|
$select_count[] = "COUNT(NULLIF(`meta_value` = 'a:0:{}', false))";
|
||||||
$select_count = implode(', ', $select_count);
|
$select_count = implode(', ', $select_count);
|
||||||
|
|
||||||
// Add the meta_value index to the selection list, then run the query.
|
// Add the meta_value index to the selection list, then run the query.
|
||||||
@ -773,11 +774,11 @@ function count_users($strategy = 'time') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$role_counts['none'] = (int) $row[$col++];
|
||||||
|
|
||||||
// Get the meta_value index from the end of the result set.
|
// Get the meta_value index from the end of the result set.
|
||||||
$total_users = (int) $row[$col];
|
$total_users = (int) $row[$col];
|
||||||
|
|
||||||
$role_counts['none'] = ( $total_users - array_sum( $role_counts ) );
|
|
||||||
|
|
||||||
$result['total_users'] = $total_users;
|
$result['total_users'] = $total_users;
|
||||||
$result['avail_roles'] =& $role_counts;
|
$result['avail_roles'] =& $role_counts;
|
||||||
} else {
|
} else {
|
||||||
|
@ -140,6 +140,41 @@ class Tests_User_CountUsers extends WP_UnitTestCase {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 34495
|
||||||
|
*
|
||||||
|
* @dataProvider data_count_users_strategies
|
||||||
|
*/
|
||||||
|
public function test_count_users_is_accurate_with_multiple_roles( $strategy ) {
|
||||||
|
|
||||||
|
// Setup users
|
||||||
|
$admin = self::factory()->user->create( array(
|
||||||
|
'role' => 'administrator',
|
||||||
|
) );
|
||||||
|
$editor = self::factory()->user->create( array(
|
||||||
|
'role' => 'editor',
|
||||||
|
) );
|
||||||
|
|
||||||
|
get_userdata( $editor )->add_role( 'author' );
|
||||||
|
|
||||||
|
$this->assertEquals( array(
|
||||||
|
'editor',
|
||||||
|
'author'
|
||||||
|
), get_userdata( $editor )->roles );
|
||||||
|
|
||||||
|
// Test user counts
|
||||||
|
$count = count_users( $strategy );
|
||||||
|
|
||||||
|
$this->assertEquals( 3, $count['total_users'] );
|
||||||
|
$this->assertEquals( array(
|
||||||
|
'administrator' => 2,
|
||||||
|
'editor' => 1,
|
||||||
|
'author' => 1,
|
||||||
|
'none' => 0,
|
||||||
|
), $count['avail_roles'] );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function data_count_users_strategies() {
|
function data_count_users_strategies() {
|
||||||
return array(
|
return array(
|
||||||
array(
|
array(
|
||||||
|
Loading…
Reference in New Issue
Block a user