FEATURE: auto archive group message if topic is closed. (#9046)

Co-Authored-By: Régis Hanol <regis@hanol.fr>
This commit is contained in:
Vinoth Kannan 2020-02-27 11:09:37 +05:30 committed by GitHub
parent 5774107a2d
commit acf337d583
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 0 deletions

View File

@ -502,6 +502,17 @@ class Topic < ActiveRecord::Base
def update_status(status, enabled, user, opts = {})
TopicStatusUpdater.new(self, user).update!(status, enabled, opts)
DiscourseEvent.trigger(:topic_status_updated, self, status, enabled)
if enabled && private_message? && status.to_s["closed"]
group_ids = user.groups.pluck(:id)
if group_ids.present?
allowed_group_ids = self.allowed_groups
.where('topic_allowed_groups.group_id IN (?)', group_ids).pluck(:id)
allowed_group_ids.each do |id|
GroupArchivedMessage.archive!(id, self)
end
end
end
end
# Atomically creates the next post number

View File

@ -1114,6 +1114,14 @@ describe Topic do
context 'closed' do
let(:status) { 'closed' }
it_should_behave_like 'a status that closes a topic'
it 'should archive group message' do
group = Fabricate(:group)
group.add(@user)
topic = Fabricate(:private_message_topic, allowed_groups: [group])
expect { topic.update_status(status, true, @user) }.to change(topic.group_archived_messages, :count).by(1)
end
end
context 'autoclosed' do