forked from moodle/moodle
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDL-45242 Admin: User list supports custom profile fields
- Loading branch information
1 parent
558cc1b
commit dbc09f7
Showing
4 changed files
with
144 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -746,4 +746,100 @@ public function test_debug_max_courses_in_category() { | |
"Please also make sure \$CFG->maxcoursesincategory * MAX_COURSE_CATEGORIES less than max integer. " . | ||
"See tracker issues: MDL-25669 and MDL-69573"); | ||
} | ||
|
||
/** | ||
* Tests the get_users_listing function. | ||
*/ | ||
public function test_get_users_listing(): void { | ||
global $DB; | ||
|
||
$this->resetAfterTest(); | ||
|
||
$generator = $this->getDataGenerator(); | ||
|
||
// Set up profile field. | ||
$generator->create_custom_profile_field(['datatype' => 'text', | ||
'shortname' => 'specialid', 'name' => 'Special user id']); | ||
|
||
// Set up the show user identity option. | ||
set_config('showuseridentity', 'department,profile_field_specialid'); | ||
|
||
// Get all the existing user ids (we're going to remove these from test results). | ||
$existingids = array_fill_keys($DB->get_fieldset_select('user', 'id', '1 = 1'), true); | ||
|
||
// Create some test user accounts. | ||
$userids = []; | ||
foreach (['a', 'b', 'c', 'd'] as $key) { | ||
$record = [ | ||
'username' => 'user_' . $key, | ||
'firstname' => $key . '_first', | ||
'lastname' => 'last_' . $key, | ||
'department' => 'department_' . $key, | ||
'profile_field_specialid' => 'special_' . $key, | ||
'lastaccess' => ord($key) | ||
]; | ||
$user = $generator->create_user($record); | ||
$userids[] = $user->id; | ||
} | ||
|
||
// Check default result with no parameters. | ||
$results = get_users_listing(); | ||
$results = array_diff_key($results, $existingids); | ||
|
||
// It should return all the results in order. | ||
$this->assertEquals($userids, array_keys($results)); | ||
|
||
// Results should have some general fields and name fields, check some samples. | ||
$this->assertEquals('user_a', $results[$userids[0]]->username); | ||
$this->assertEquals('[email protected]', $results[$userids[0]]->email); | ||
$this->assertEquals(1, $results[$userids[0]]->confirmed); | ||
$this->assertEquals('a_first', $results[$userids[0]]->firstname); | ||
$this->assertObjectHasAttribute('firstnamephonetic', $results[$userids[0]]); | ||
|
||
// Should not have the custom field or department because no context specified. | ||
$this->assertObjectNotHasAttribute('department', $results[$userids[0]]); | ||
$this->assertObjectNotHasAttribute('profile_field_specialid', $results[$userids[0]]); | ||
|
||
// Check sorting. | ||
$results = get_users_listing('username', 'DESC'); | ||
$results = array_diff_key($results, $existingids); | ||
$this->assertEquals([$userids[3], $userids[2], $userids[1], $userids[0]], array_keys($results)); | ||
|
||
// Add the options to showuseridentity and check it returns those fields but only if you | ||
// specify a context AND have permissions. | ||
$results = get_users_listing('lastaccess', 'asc', 0, 0, '', '', '', '', null, | ||
\context_system::instance()); | ||
$this->assertObjectNotHasAttribute('department', $results[$userids[0]]); | ||
$this->assertObjectNotHasAttribute('profile_field_specialid', $results[$userids[0]]); | ||
$this->setAdminUser(); | ||
$results = get_users_listing('lastaccess', 'asc', 0, 0, '', '', '', '', null, | ||
\context_system::instance()); | ||
$this->assertEquals('department_a', $results[$userids[0]]->department); | ||
$this->assertEquals('special_a', $results[$userids[0]]->profile_field_specialid); | ||
|
||
// Check search (full name, email, username). | ||
$results = get_users_listing('lastaccess', 'asc', 0, 0, 'b_first last_b'); | ||
$this->assertEquals([$userids[1]], array_keys($results)); | ||
$results = get_users_listing('lastaccess', 'asc', 0, 0, 'c@example'); | ||
$this->assertEquals([$userids[2]], array_keys($results)); | ||
$results = get_users_listing('lastaccess', 'asc', 0, 0, 'user_d'); | ||
$this->assertEquals([$userids[3]], array_keys($results)); | ||
|
||
// Check first and last initial restriction (all the test ones have same last initial). | ||
$results = get_users_listing('lastaccess', 'asc', 0, 0, '', 'C'); | ||
$this->assertEquals([$userids[2]], array_keys($results)); | ||
$results = get_users_listing('lastaccess', 'asc', 0, 0, '', '', 'L'); | ||
$results = array_diff_key($results, $existingids); | ||
$this->assertEquals($userids, array_keys($results)); | ||
|
||
// Check the extra where clause, either with the 'u.' prefix or not. | ||
$results = get_users_listing('lastaccess', 'asc', 0, 0, '', '', '', 'id IN (:x,:y)', | ||
['x' => $userids[1], 'y' => $userids[3]]); | ||
$results = array_diff_key($results, $existingids); | ||
$this->assertEquals([$userids[1], $userids[3]], array_keys($results)); | ||
$results = get_users_listing('lastaccess', 'asc', 0, 0, '', '', '', 'u.id IN (:x,:y)', | ||
['x' => $userids[1], 'y' => $userids[3]]); | ||
$results = array_diff_key($results, $existingids); | ||
$this->assertEquals([$userids[1], $userids[3]], array_keys($results)); | ||
} | ||
} |