diff --git a/admin/settings/users.php b/admin/settings/users.php index 2e613e7122d..f8d5b74f9fd 100644 --- a/admin/settings/users.php +++ b/admin/settings/users.php @@ -190,6 +190,9 @@ if ($hassiteconfig 'institution' => new lang_string('institution'), ))); $temp->add(new admin_setting_configtext('fullnamedisplay', new lang_string('fullnamedisplay', 'admin'), new lang_string('configfullnamedisplay', 'admin'), 'language', PARAM_TEXT, 50)); + $temp->add(new admin_setting_configtext('alternativefullnameformat', new lang_string('alternativefullnameformat', 'admin'), + new lang_string('alternativefullnameformat_desc', 'admin'), + 'language', PARAM_RAW, 50)); $temp->add(new admin_setting_configtext('maxusersperpage', new lang_string('maxusersperpage','admin'), new lang_string('configmaxusersperpage','admin'), 100, PARAM_INT)); $temp->add(new admin_setting_configcheckbox('enablegravatar', new lang_string('enablegravatar', 'admin'), new lang_string('enablegravatar_help', 'admin'), 0)); $temp->add(new admin_setting_configtext('gravatardefaulturl', new lang_string('gravatardefaulturl', 'admin'), new lang_string('gravatardefaulturl_help', 'admin'), 'mm')); diff --git a/lang/en/admin.php b/lang/en/admin.php index 8176a337d2e..4503afb56f1 100644 --- a/lang/en/admin.php +++ b/lang/en/admin.php @@ -56,6 +56,8 @@ $string['allowthemechangeonurl'] = 'Allow theme changes in the URL'; $string['allowuserblockhiding'] = 'Allow users to hide blocks'; $string['allowuserswitchrolestheycantassign'] = 'Allow users without the assign roles capability to switch roles'; $string['allowuserthemes'] = 'Allow user themes'; +$string['alternativefullnameformat'] = 'Alternative full name format'; +$string['alternativefullnameformat_desc'] = 'This defines how names are shown to users with the viewfullnames capability (by default users with the role of manager, teacher or non-editing teacher). Placeholders that can be used are as for the "Full name format" setting.'; $string['antivirus'] = 'Anti-Virus'; $string['appearance'] = 'Appearance'; $string['aspellpath'] = 'Path to aspell'; diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 763d7263a30..6f92cf9d9e4 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -3602,11 +3602,22 @@ function fullname($user, $override=false) { if (isset($CFG->fullnamedisplay)) { $template = $CFG->fullnamedisplay; } - // If the template is empty, or set to language, or $override is set, return the language string. - if (empty($template) || $template == 'language' || $override) { + // If the template is empty, or set to language, return the language string. + if ((empty($template) || $template == 'language') && !$override) { return get_string('fullnamedisplay', null, $user); } + // Check to see if we are displaying according to the alternative full name format. + if ($override) { + if (empty($CFG->alternativefullnameformat) || $CFG->alternativefullnameformat == 'language') { + // Default to show just the user names according to the fullnamedisplay string. + return get_string('fullnamedisplay', null, $user); + } else { + // If the override is true, then change the template to use the complete name. + $template = $CFG->alternativefullnameformat; + } + } + $requirednames = array(); // With each name, see if it is in the display name template, and add it to the required names array if it is. foreach ($allnames as $allname) { diff --git a/lib/tests/moodlelib_test.php b/lib/tests/moodlelib_test.php index 776d1fcb60b..f875a02089e 100644 --- a/lib/tests/moodlelib_test.php +++ b/lib/tests/moodlelib_test.php @@ -2321,6 +2321,7 @@ class core_moodlelib_testcase extends advanced_testcase { // Back up config settings for restore later. $originalcfg = new stdClass(); $originalcfg->fullnamedisplay = $CFG->fullnamedisplay; + $originalcfg->alternativefullnameformat = $CFG->alternativefullnameformat; // Testing existing fullnamedisplay settings. $CFG->fullnamedisplay = 'firstname'; @@ -2348,6 +2349,25 @@ class core_moodlelib_testcase extends advanced_testcase { $testname = fullname($user, true); $this->assertSame($expectedname, $testname); + // Test alternativefullnameformat setting. + // Test alternativefullnameformat that has been set to nothing. + $CFG->alternativefullnameformat = ''; + $expectedname = "$user->firstname $user->lastname"; + $testname = fullname($user, true); + $this->assertSame($expectedname, $testname); + + // Test alternativefullnameformat that has been set to 'language'. + $CFG->alternativefullnameformat = 'language'; + $expectedname = "$user->firstname $user->lastname"; + $testname = fullname($user, true); + $this->assertSame($expectedname, $testname); + + // Test customising the alternativefullnameformat setting with all additional name fields. + $CFG->alternativefullnameformat = 'firstname lastname firstnamephonetic lastnamephonetic middlename alternatename'; + $expectedname = "$user->firstname $user->lastname $user->firstnamephonetic $user->lastnamephonetic $user->middlename $user->alternatename"; + $testname = fullname($user, true); + $this->assertSame($expectedname, $testname); + // Test additional name fields. $CFG->fullnamedisplay = 'lastname lastnamephonetic firstname firstnamephonetic'; $expectedname = "$user->lastname $user->lastnamephonetic $user->firstname $user->firstnamephonetic"; @@ -2428,6 +2448,7 @@ class core_moodlelib_testcase extends advanced_testcase { // Tidy up after we finish testing. $CFG->fullnamedisplay = $originalcfg->fullnamedisplay; + $CFG->alternativefullnameformat = $originalcfg->alternativefullnameformat; } public function test_get_all_user_name_fields() {