MDL-65313 core: delete relevant favourites when deleting a conversation

This commit is contained in:
Jake Dallimore
2019-05-06 14:13:24 +08:00
parent 0442f44049
commit daea8b596f
2 changed files with 18 additions and 0 deletions
+6
View File
@@ -572,6 +572,12 @@ function groups_delete_group($grouporid) {
// Delete the messages now.
$DB->delete_records('messages', ['conversationid' => $conversation->id]);
}
// Delete all favourite records for all users relating to this conversation.
// Whilst not ideal, we can't use the component service as it doesn't exist here, so must do this manually.
$params = ['component' => 'core_message', 'itemtype' => 'message_conversations', 'contextid' => $conversation->contextid];
$DB->delete_records_select('favourite', ' component = :component AND itemtype = :itemtype AND contextid = "contextid',
$params);
}
//group itself last
+12
View File
@@ -372,6 +372,10 @@ class core_group_lib_testcase extends advanced_testcase {
$g2m3 = \core_message\tests\helper::send_fake_message_to_conversation($user1, $groupconversation2->id);
$g2m4 = \core_message\tests\helper::send_fake_message_to_conversation($user2, $groupconversation2->id);
// Favourite the conversation for several of the users.
\core_message\api::set_favourite_conversation($groupconversation1->id, $user1->id);
\core_message\api::set_favourite_conversation($groupconversation1->id, $user2->id);
// Delete a few messages.
\core_message\api::delete_message($user1->id, $g1m1);
\core_message\api::delete_message($user1->id, $g1m2);
@@ -407,6 +411,14 @@ class core_group_lib_testcase extends advanced_testcase {
$this->assertEquals(1, $DB->count_records('messages', ['id' => $g2m2]));
$this->assertEquals(1, $DB->count_records('messages', ['id' => $g2m3]));
$this->assertEquals(1, $DB->count_records('messages', ['id' => $g2m4]));
// Confirm favourites were deleted for both users.
$user1service = \core_favourites\service_factory::get_service_for_user_context(context_user::instance($user1->id));
$this->assertFalse($user1service->favourite_exists('core_message', 'message_conversations', $groupconversation1->id,
$coursecontext1));
$user2service = \core_favourites\service_factory::get_service_for_user_context(context_user::instance($user1->id));
$this->assertFalse($user2service->favourite_exists('core_message', 'message_conversations', $groupconversation1->id,
$coursecontext1));
}
public function test_groups_delete_group_members() {