From 7dcc1e721cced887d1bc6f4eace4de792db9efc4 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 | 1 + 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/lib/classes/user.php b/lib/classes/user.php index 89ba7b5d81c..6a778c28b79 100644 --- a/lib/classes/user.php +++ b/lib/classes/user.php @@ -517,18 +517,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 f2468daed0b..5863f74018a 100644 --- a/lib/upgrade.txt +++ b/lib/upgrade.txt @@ -6,6 +6,7 @@ information provided here is intended especially for developers. * New optional parameter $context for the groups_get_members_join() function and ability to filter users that are not members of any group. Besides, groups_get_members_ids_sql, get_enrolled_sql and get_enrolled_users now accepts -1 (USERSWITHOUTGROUP) for the groupid field. +* The method core_user::is_real_user() now returns false for userid = 0 parameter === 3.5.2 ===