diff --git a/message/classes/api.php b/message/classes/api.php index 4039f757a26..e21059bd882 100644 --- a/message/classes/api.php +++ b/message/classes/api.php @@ -1001,6 +1001,21 @@ class api { return []; } + /** + * Returns the contacts count. + * + * @param int $userid The user id + * @return array + */ + public static function count_contacts(int $userid) : int { + global $DB; + + $sql = "SELECT COUNT(id) + FROM {message_contacts} + WHERE userid = ? OR contactid = ?"; + return $DB->count_records_sql($sql, [$userid, $userid]); + } + /** * Returns the an array of the users the given user is in a conversation * with who are a contact and the number of unread messages. diff --git a/message/tests/api_test.php b/message/tests/api_test.php index 6efdb1b63c3..f7446ab6ce6 100644 --- a/message/tests/api_test.php +++ b/message/tests/api_test.php @@ -5833,6 +5833,35 @@ class core_message_api_testcase extends core_message_messagelib_testcase { $this->assertEquals($expected, \core_message\api::count_conversations(...$arguments)); } + /** + * Test the count_contacts() function. + */ + public function test_count_contacts() { + $user1 = self::getDataGenerator()->create_user(); + $user2 = self::getDataGenerator()->create_user(); + $user3 = self::getDataGenerator()->create_user(); + + $this->assertEquals(0, \core_message\api::count_contacts($user1->id)); + + \core_message\api::create_contact_request($user1->id, $user2->id); + + // Still zero until the request is confirmed. + $this->assertEquals(0, \core_message\api::count_contacts($user1->id)); + + \core_message\api::confirm_contact_request($user1->id, $user2->id); + + $this->assertEquals(1, \core_message\api::count_contacts($user1->id)); + + \core_message\api::create_contact_request($user3->id, $user1->id); + + // Still one until the request is confirmed. + $this->assertEquals(1, \core_message\api::count_contacts($user1->id)); + + \core_message\api::confirm_contact_request($user3->id, $user1->id); + + $this->assertEquals(2, \core_message\api::count_contacts($user1->id)); + } + /** * Comparison function for sorting contacts. *