From b6d89399591f84b6d298cc7f2f7afb3f4f9ef32a Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Mon, 31 Jan 2022 19:42:36 +0000 Subject: [PATCH] MDL-72634 user: populate default city/country during user creation. --- lib/moodlelib.php | 4 ---- user/lib.php | 7 +++++++ user/tests/userlib_test.php | 30 ++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 9a1728771c9..ecaff41a17f 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -3902,10 +3902,6 @@ function create_user_record($username, $password, $auth = 'manual') { } } - if (!isset($newuser->city)) { - $newuser->city = ''; - } - $newuser->auth = $auth; $newuser->username = $username; diff --git a/user/lib.php b/user/lib.php index a819b83ec93..cd2ba14d380 100644 --- a/user/lib.php +++ b/user/lib.php @@ -94,6 +94,13 @@ function user_create_user($user, $updatepassword = true, $triggerevent = true) { if (!isset($user->lang)) { $user->lang = core_user::get_property_default('lang'); } + if (!isset($user->city)) { + $user->city = core_user::get_property_default('city'); + } + if (!isset($user->country)) { + // The default value of $CFG->country is 0, but that isn't a valid property for the user field, so switch to ''. + $user->country = core_user::get_property_default('country') ?: ''; + } $user->timecreated = time(); $user->timemodified = $user->timecreated; diff --git a/user/tests/userlib_test.php b/user/tests/userlib_test.php index b1144124d08..c024be9fa45 100644 --- a/user/tests/userlib_test.php +++ b/user/tests/userlib_test.php @@ -300,6 +300,36 @@ class core_userliblib_testcase extends advanced_testcase { $this->assertDebuggingNotCalled(); } + /** + * Test that creating users populates default values + * + * @covers ::user_create_user + */ + public function test_user_create_user_default_values(): void { + global $CFG; + + $this->resetAfterTest(); + + // Update default values for city/country (both initially empty). + set_config('defaultcity', 'Nadi'); + set_config('country', 'FJ'); + + $userid = user_create_user((object) [ + 'username' => 'newuser', + ], false, false); + + $user = core_user::get_user($userid); + $this->assertEquals($CFG->calendartype, $user->calendartype); + $this->assertEquals($CFG->defaultpreference_maildisplay, $user->maildisplay); + $this->assertEquals($CFG->defaultpreference_mailformat, $user->mailformat); + $this->assertEquals($CFG->defaultpreference_maildigest, $user->maildigest); + $this->assertEquals($CFG->defaultpreference_autosubscribe, $user->autosubscribe); + $this->assertEquals($CFG->defaultpreference_trackforums, $user->trackforums); + $this->assertEquals($CFG->lang, $user->lang); + $this->assertEquals($CFG->defaultcity, $user->city); + $this->assertEquals($CFG->country, $user->country); + } + /** * Test that {@link user_create_user()} throws exception when invalid username is provided. *