From b91ddd160e29013a41a0d6b1efd22724c42ab9e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Massart?= Date: Fri, 20 Oct 2017 17:24:08 +0800 Subject: [PATCH] MDL-60518 core_user: A user with ID 0 is never a real user --- lib/classes/user.php | 7 +++---- lib/tests/user_test.php | 40 ++++++++++++++++++++++++++++++++++++++++ lib/upgrade.txt | 4 ++++ 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/lib/classes/user.php b/lib/classes/user.php index 09a8053b891..f95b1a25d05 100644 --- a/lib/classes/user.php +++ b/lib/classes/user.php @@ -524,18 +524,17 @@ class core_user { } /** - * Return true is user id is greater than self::NOREPLY_USER and - * alternatively check db. + * Return true if user id is greater than 0 and alternatively check db. * * @param int $userid user id. * @param bool $checkdb if true userid will be checked in db. By default it's false, and - * userid is compared with NOREPLY_USER for performance. + * userid is compared with 0 for performance. * @return bool true is real user else false. */ public static function is_real_user($userid, $checkdb = false) { global $DB; - if ($userid < 0) { + if ($userid <= 0) { return false; } if ($checkdb) { diff --git a/lib/tests/user_test.php b/lib/tests/user_test.php index a36d2e674af..155719da33f 100644 --- a/lib/tests/user_test.php +++ b/lib/tests/user_test.php @@ -732,4 +732,44 @@ class core_user_testcase extends advanced_testcase { $this->assertNotEquals($enuser, $xxuser); } + /** + * Test is_real_user method. + */ + public function test_is_real_user() { + global $CFG, $USER; + + // Real users are real users. + $auser = $this->getDataGenerator()->create_user(); + $guest = guest_user(); + $this->assertTrue(\core_user::is_real_user($auser->id)); + $this->assertTrue(\core_user::is_real_user($auser->id, true)); + $this->assertTrue(\core_user::is_real_user($guest->id)); + $this->assertTrue(\core_user::is_real_user($guest->id, true)); + + // Non-logged in users are not real users. + $this->assertSame(0, $USER->id, 'The non-logged in user should have an ID of 0.'); + $this->assertFalse(\core_user::is_real_user($USER->id)); + $this->assertFalse(\core_user::is_real_user($USER->id, true)); + + // Other types of logged in users are real users. + $this->setAdminUser(); + $this->assertTrue(\core_user::is_real_user($USER->id)); + $this->assertTrue(\core_user::is_real_user($USER->id, true)); + $this->setGuestUser(); + $this->assertTrue(\core_user::is_real_user($USER->id)); + $this->assertTrue(\core_user::is_real_user($USER->id, true)); + $this->setUser($auser); + $this->assertTrue(\core_user::is_real_user($USER->id)); + $this->assertTrue(\core_user::is_real_user($USER->id, true)); + + // Fake accounts are not real users. + $CFG->noreplyuserid = null; + $this->assertFalse(\core_user::is_real_user(core_user::get_noreply_user()->id)); + $this->assertFalse(\core_user::is_real_user(core_user::get_noreply_user()->id, true)); + $CFG->supportuserid = null; + $CFG->supportemail = 'test@example.com'; + $this->assertFalse(\core_user::is_real_user(core_user::get_support_user()->id)); + $this->assertFalse(\core_user::is_real_user(core_user::get_support_user()->id, true)); + } + } diff --git a/lib/upgrade.txt b/lib/upgrade.txt index 023fab1f398..1c2f473b55a 100644 --- a/lib/upgrade.txt +++ b/lib/upgrade.txt @@ -1,6 +1,10 @@ This files describes API changes in core libraries and APIs, information provided here is intended especially for developers. +=== 3.7 === + +* The method core_user::is_real_user() now returns false for userid = 0 parameter + === 3.6 === * A new token-based version of pluginfile.php has been added which can be used for out-of-session file serving by