diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 5c3e9533829..77bd81a9242 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -1896,6 +1896,9 @@ function set_user_preference($name, $value, $user = null) { // Update value in cache. $user->preference[$name] = $value; + if ($user !== $USER && $user->id == $USER->id) { + $USER->preference[$name] = $value; + } // Set reload flag for other sessions. mark_user_preferences_changed($user->id); @@ -1965,6 +1968,9 @@ function unset_user_preference($name, $user = null) { // Delete the preference from cache. unset($user->preference[$name]); + if ($user !== $USER && $user->id == $USER->id) { + unset($USER->preference[$name]); + } // Set reload flag for other sessions. mark_user_preferences_changed($user->id); diff --git a/lib/tests/moodlelib_test.php b/lib/tests/moodlelib_test.php index 2df88ce90a1..97b92f5260f 100644 --- a/lib/tests/moodlelib_test.php +++ b/lib/tests/moodlelib_test.php @@ -1170,6 +1170,26 @@ class core_moodlelib_testcase extends advanced_testcase { } } + public function test_set_user_preference_for_current_user() { + global $USER; + $this->resetAfterTest(); + $this->setAdminUser(); + + set_user_preference('test_pref', 2); + set_user_preference('test_pref', 1, $USER->id); + $this->assertEquals(1, get_user_preferences('test_pref')); + } + + public function test_unset_user_preference_for_current_user() { + global $USER; + $this->resetAfterTest(); + $this->setAdminUser(); + + set_user_preference('test_pref', 1); + unset_user_preference('test_pref', $USER->id); + $this->assertNull(get_user_preferences('test_pref')); + } + public function test_get_extra_user_fields() { global $CFG, $USER, $DB; $this->resetAfterTest();