diff --git a/message/classes/search/base_message.php b/message/classes/search/base_message.php index 435bc545cab..f6ff548bd61 100644 --- a/message/classes/search/base_message.php +++ b/message/classes/search/base_message.php @@ -51,6 +51,14 @@ abstract class base_message extends \core_search\base { * @return \core_search\document */ public function get_document($record, $options = array()) { + + // Check if user still exists, before proceeding. + $user = \core_user::get_user($options['user1id'], 'deleted'); + if ($user->deleted == 1) { + return false; + } + + // Get user context. try { $usercontext = \context_user::instance($options['user1id']); } catch (\moodle_exception $ex) { diff --git a/message/tests/search_test_received.php b/message/tests/search_test_received.php index 191850e9cf7..7bcde6948e1 100644 --- a/message/tests/search_test_received.php +++ b/message/tests/search_test_received.php @@ -226,4 +226,49 @@ class message_received_search_testcase extends advanced_testcase { $this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access($messageid)); } + + /** + * Test received deleted user. + * Tests the case where a received message for a deleted user + * is attempted to be added to the index. + * + * @return void + */ + public function test_message_received_deleted_user() { + + // Returns the instance as long as the area is supported. + $searcharea = \core_search\manager::get_search_area($this->messagereceivedareaid); + $this->assertInstanceOf('\core_message\search\message_received', $searcharea); + + $user1 = self::getDataGenerator()->create_user(); + $user2 = self::getDataGenerator()->create_user(); + + $this->preventResetByRollback(); + $sink = $this->redirectMessages(); + + $message = new \core\message\message(); + $message->courseid = SITEID; + $message->userfrom = $user1; + $message->userto = $user2; + $message->subject = "Test Subject"; + $message->smallmessage = "Test small messsage"; + $message->fullmessage = "Test full messsage"; + $message->fullmessageformat = 0; + $message->fullmessagehtml = null; + $message->notification = 0; + $message->component = "moodle"; + $message->name = "instantmessage"; + + message_send($message); + + $messages = $sink->get_messages(); + $message = $messages[0]; + + // Delete user. + delete_user($user2); + + $doc = $searcharea->get_document($message); + + $this->assertFalse($doc); + } } diff --git a/message/tests/search_test_sent.php b/message/tests/search_test_sent.php index 7e9c887ee7a..75a3735d438 100644 --- a/message/tests/search_test_sent.php +++ b/message/tests/search_test_sent.php @@ -226,4 +226,50 @@ class message_sent_search_testcase extends advanced_testcase { $this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access($messageid)); } + + /** + * Test sent deleted user. + * Tests the case where a sent message for a deleted user + * is attempted to be added to the index. + * + * @return void + */ + public function test_message_sent_deleted_user() { + + // Returns the instance as long as the area is supported. + $searcharea = \core_search\manager::get_search_area($this->messagesentareaid); + $this->assertInstanceOf('\core_message\search\message_sent', $searcharea); + + $user1 = self::getDataGenerator()->create_user(); + $user2 = self::getDataGenerator()->create_user(); + + $this->preventResetByRollback(); + $sink = $this->redirectMessages(); + + $message = new \core\message\message(); + $message->courseid = SITEID; + $message->userfrom = $user1; + $message->userto = $user2; + $message->subject = "Test Subject"; + $message->smallmessage = "Test small messsage"; + $message->fullmessage = "Test full messsage"; + $message->fullmessageformat = 0; + $message->fullmessagehtml = null; + $message->notification = 0; + $message->component = "moodle"; + $message->name = "instantmessage"; + + message_send($message); + + $messages = $sink->get_messages(); + $message = $messages[0]; + + // Delete user. + delete_user($user1); + + $doc = $searcharea->get_document($message); + + $this->assertFalse($doc); + + } } \ No newline at end of file