From 4d2bd9a054ae167967ee0dadbc34dc87077169ba Mon Sep 17 00:00:00 2001 From: Daniel Thee Roperto Date: Wed, 1 Feb 2017 14:52:17 +1100 Subject: [PATCH] MDL-57840 libraries: Fixed missing fields in get_users_by_field(). --- user/lib.php | 9 +++++++++ user/tests/userlib_test.php | 30 ++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/user/lib.php b/user/lib.php index bc600ad832e..5e14d5e09fb 100644 --- a/user/lib.php +++ b/user/lib.php @@ -551,6 +551,15 @@ function user_get_user_details($user, $course = null, array $userfields = array( $userdetails['preferences'] = $preferences; } + if ($currentuser or has_capability('moodle/user:viewalldetails', $context)) { + $extrafields = ['auth', 'confirmed', 'lang', 'theme', 'timezone', 'mailformat']; + foreach ($extrafields as $extrafield) { + if (in_array($extrafield, $userfields) && isset($user->$extrafield)) { + $userdetails[$extrafield] = $user->$extrafield; + } + } + } + return $userdetails; } diff --git a/user/tests/userlib_test.php b/user/tests/userlib_test.php index 1b99301f7ca..3f805540fca 100644 --- a/user/tests/userlib_test.php +++ b/user/tests/userlib_test.php @@ -623,4 +623,34 @@ class core_userliblib_testcase extends advanced_testcase { $this->setExpectedException('moodle_exception'); $result = user_get_user_details($student, $course1, array('wrongrequiredfield')); } + + /** + * Regression test for MDL-57840. + * + * Ensure the fields "auth, confirmed, idnumber, lang, theme, timezone and mailformat" are present when + * calling user_get_user_details() function. + */ + public function test_user_get_user_details_missing_fields() { + $this->resetAfterTest(true); + $this->setAdminUser(); // We need capabilities to view the data. + $user = self::getDataGenerator()->create_user([ + 'auth' => 'auth_something', + 'confirmed' => '0', + 'idnumber' => 'someidnumber', + 'lang' => 'en_ar', + 'theme' => 'mytheme', + 'timezone' => '50', + 'mailformat' => '0', + ]); + + // Fields that should get by default. + $got = user_get_user_details($user); + self::assertSame('auth_something', $got['auth']); + self::assertSame('0', $got['confirmed']); + self::assertSame('someidnumber', $got['idnumber']); + self::assertSame('en_ar', $got['lang']); + self::assertSame('mytheme', $got['theme']); + self::assertSame('50', $got['timezone']); + self::assertSame('0', $got['mailformat']); + } }