Merge branch 'MDL-82132-405' of https://github.com/paulholden/moodle into MOODLE_405_STABLE
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
issueNumber: MDL-82132
|
||||
notes:
|
||||
core_user:
|
||||
- message: >-
|
||||
New method `\core_user::get_dummy_fullname(...)` for returning dummy
|
||||
user fullname comprised of configured name fields only
|
||||
type: improved
|
||||
+19
-3
@@ -1518,6 +1518,22 @@ class user {
|
||||
return $displayname;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return fullname of a dummy user comprised of configured name fields only
|
||||
*
|
||||
* @param context|null $context
|
||||
* @param array $options
|
||||
* @return string
|
||||
*/
|
||||
public static function get_dummy_fullname(?context $context = null, array $options = []): string {
|
||||
|
||||
// Create a dummy user object containing all name fields.
|
||||
$namefields = \core_user\fields::get_name_fields();
|
||||
$user = (object) array_combine($namefields, $namefields);
|
||||
|
||||
return static::get_fullname($user, $context, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return profile url depending on context.
|
||||
*
|
||||
@@ -1588,10 +1604,10 @@ class user {
|
||||
public static function get_initials(stdClass $user): string {
|
||||
// Get the available name fields.
|
||||
$namefields = \core_user\fields::get_name_fields();
|
||||
// Build a dummy user to determine the name format.
|
||||
$dummyuser = array_combine($namefields, $namefields);
|
||||
|
||||
// Determine the name format by using fullname() and passing the dummy user.
|
||||
$nameformat = fullname((object) $dummyuser);
|
||||
$nameformat = static::get_dummy_fullname();
|
||||
|
||||
// Fetch all the available username fields.
|
||||
$availablefields = order_in_string($namefields, $nameformat);
|
||||
// We only want the first and last name fields.
|
||||
|
||||
@@ -876,6 +876,32 @@ final class user_test extends \advanced_testcase {
|
||||
$this->assertEquals('John Doe', \core_user::get_fullname($user, $context, $options));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test retrieving dummy user fullname
|
||||
*
|
||||
* @covers \core_user::get_dummy_fullname
|
||||
*/
|
||||
public function test_get_dummy_fullname(): void {
|
||||
$context = \context_system::instance();
|
||||
|
||||
// Show real name as the force names config are not set.
|
||||
$this->assertEquals('firstname lastname', \core_user::get_dummy_fullname($context));
|
||||
|
||||
// With override, still show real name.
|
||||
$options = ['override' => true];
|
||||
$this->assertEquals('firstname lastname', \core_user::get_dummy_fullname($context, $options));
|
||||
|
||||
// Set the alternative names config.
|
||||
set_config('alternativefullnameformat', 'alternatename lastname firstname');
|
||||
|
||||
// Show default name format.
|
||||
$this->assertEquals('firstname lastname', \core_user::get_dummy_fullname($context));
|
||||
|
||||
// With override, show alternative name format.
|
||||
$options = ['override' => true];
|
||||
$this->assertEquals('alternatename lastname firstname', \core_user::get_dummy_fullname($context, $options));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for function to get user details.
|
||||
*
|
||||
|
||||
@@ -24,6 +24,7 @@ use context_user;
|
||||
use core\context;
|
||||
use core_component;
|
||||
use core_date;
|
||||
use core_user;
|
||||
use html_writer;
|
||||
use lang_string;
|
||||
use moodle_url;
|
||||
@@ -397,10 +398,8 @@ class user extends base {
|
||||
|
||||
$namefields = fields::get_name_fields(true);
|
||||
|
||||
// Create a dummy user object containing all name fields.
|
||||
$dummyuser = (object) array_combine($namefields, $namefields);
|
||||
$viewfullnames = has_capability('moodle/site:viewfullnames', context_system::instance());
|
||||
$dummyfullname = fullname($dummyuser, $viewfullnames);
|
||||
$dummyfullname = core_user::get_dummy_fullname(null, ['override' => $viewfullnames]);
|
||||
|
||||
// Extract any name fields from the fullname format in the order that they appear.
|
||||
$matchednames = array_values(order_in_string($namefields, $dummyfullname));
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
namespace core_user;
|
||||
|
||||
use core_text;
|
||||
use core_user;
|
||||
|
||||
/**
|
||||
* Class for retrieving information about user fields that are needed for displaying user identity.
|
||||
@@ -585,10 +586,7 @@ class fields {
|
||||
$unique = self::$uniqueidentifier++;
|
||||
|
||||
$namefields = self::get_name_fields();
|
||||
|
||||
// Create a dummy user object containing all name fields.
|
||||
$dummyuser = (object) array_combine($namefields, $namefields);
|
||||
$dummyfullname = fullname($dummyuser, $override);
|
||||
$dummyfullname = core_user::get_dummy_fullname(null, ['override' => $override]);
|
||||
|
||||
// Extract any name fields from the fullname format in the order that they appear.
|
||||
$matchednames = array_values(order_in_string($namefields, $dummyfullname));
|
||||
|
||||
+16
-11
@@ -373,23 +373,28 @@ function user_get_user_details($user, $course = null, array $userfields = array(
|
||||
return null;
|
||||
}
|
||||
|
||||
$userdetails = array();
|
||||
$userdetails['id'] = $user->id;
|
||||
// User ID and fullname are always included.
|
||||
$userdetails = [
|
||||
'id' => $user->id,
|
||||
'fullname' => fullname($user, $canviewfullnames),
|
||||
];
|
||||
|
||||
// User first/lastname included if capability check passes, or the same is present in fullname.
|
||||
$dummyusername = core_user::get_dummy_fullname($context, ['override' => $canviewfullnames]);
|
||||
if (in_array('firstname', $userfields) &&
|
||||
($canviewfullnames || core_text::strrpos($dummyusername, 'firstname') !== false)) {
|
||||
$userdetails['firstname'] = $user->firstname;
|
||||
}
|
||||
if (in_array('lastname', $userfields) &&
|
||||
($canviewfullnames || core_text::strrpos($dummyusername, 'lastname') !== false)) {
|
||||
$userdetails['lastname'] = $user->lastname;
|
||||
}
|
||||
|
||||
if (in_array('username', $userfields)) {
|
||||
if ($currentuser or has_capability('moodle/user:viewalldetails', $context)) {
|
||||
$userdetails['username'] = $user->username;
|
||||
}
|
||||
}
|
||||
if ($isadmin or $canviewfullnames) {
|
||||
if (in_array('firstname', $userfields)) {
|
||||
$userdetails['firstname'] = $user->firstname;
|
||||
}
|
||||
if (in_array('lastname', $userfields)) {
|
||||
$userdetails['lastname'] = $user->lastname;
|
||||
}
|
||||
}
|
||||
$userdetails['fullname'] = fullname($user, $canviewfullnames);
|
||||
|
||||
if (in_array('customfields', $userfields)) {
|
||||
$categories = profile_get_user_fields_with_data_by_category($user->id);
|
||||
|
||||
@@ -850,16 +850,21 @@ final class userlib_test extends \advanced_testcase {
|
||||
accesslib_clear_all_caches_for_unit_testing();
|
||||
|
||||
// Get student details as a user with super system capabilities.
|
||||
$this->setAdminUser();
|
||||
$result = user_get_user_details($student, $course1);
|
||||
$this->assertEquals($student->id, $result['id']);
|
||||
$this->assertEquals($studentfullname, $result['fullname']);
|
||||
$this->assertEquals($student->firstname, $result['firstname']);
|
||||
$this->assertEquals($student->lastname, $result['lastname']);
|
||||
$this->assertEquals($course1->id, $result['enrolledcourses'][0]['id']);
|
||||
|
||||
$this->setUser($teacher);
|
||||
// Get student details as a user who can only see this user in a course.
|
||||
$this->setUser($teacher);
|
||||
$result = user_get_user_details($student, $course1);
|
||||
$this->assertEquals($student->id, $result['id']);
|
||||
$this->assertEquals($studentfullname, $result['fullname']);
|
||||
$this->assertEquals($student->firstname, $result['firstname']);
|
||||
$this->assertEquals($student->lastname, $result['lastname']);
|
||||
$this->assertEquals($course1->id, $result['enrolledcourses'][0]['id']);
|
||||
|
||||
// Get student details with required fields.
|
||||
@@ -867,6 +872,23 @@ final class userlib_test extends \advanced_testcase {
|
||||
$this->assertCount(2, $result);
|
||||
$this->assertEquals($student->id, $result['id']);
|
||||
$this->assertEquals($studentfullname, $result['fullname']);
|
||||
$this->assertArrayNotHasKey('firstname', $result);
|
||||
$this->assertArrayNotHasKey('lastname', $result);
|
||||
$this->assertArrayNotHasKey('enrolledcourses', $result);
|
||||
|
||||
// Change fullname display format for a user with viewfullnames capability.
|
||||
set_config('fullnamedisplay', 'firstname');
|
||||
$result = user_get_user_details($student, $course1);
|
||||
$this->assertEquals($studentfullname, $result['fullname']);
|
||||
$this->assertEquals($student->firstname, $result['firstname']);
|
||||
$this->assertEquals($student->lastname, $result['lastname']);
|
||||
|
||||
// Now check for a user without viewfullnames capability.
|
||||
$this->setUser($student);
|
||||
$result = user_get_user_details($teacher, $course1);
|
||||
$this->assertEquals($teacher->firstname, $result['fullname']);
|
||||
$this->assertEquals($teacher->firstname, $result['firstname']);
|
||||
$this->assertArrayNotHasKey('lastname', $result);
|
||||
|
||||
// Get exception for invalid required fields.
|
||||
$this->expectException('moodle_exception');
|
||||
|
||||
Reference in New Issue
Block a user