mirror of
https://github.com/codeninjasllc/discourse.git
synced 2025-05-02 00:44:47 -04:00
FEATURE: automatically sync "move to inbox" / "archive" state on messages
This commit is contained in:
parent
d456150bb2
commit
b0567f9c62
6 changed files with 48 additions and 12 deletions
app
assets/javascripts/discourse/controllers
controllers
models
lib
|
@ -632,6 +632,14 @@ export default Ember.Controller.extend(SelectedPostsCount, BufferedContent, {
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
case "move_to_inbox": {
|
||||||
|
topic.set("message_archived",false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
case "archived": {
|
||||||
|
topic.set("message_archived",true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
Em.Logger.warn("unknown topic bus message type", data);
|
Em.Logger.warn("unknown topic bus message type", data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -289,20 +289,20 @@ class TopicsController < ApplicationController
|
||||||
allowed_groups = topic.allowed_groups
|
allowed_groups = topic.allowed_groups
|
||||||
.where('topic_allowed_groups.group_id IN (?)', group_ids).pluck(:id)
|
.where('topic_allowed_groups.group_id IN (?)', group_ids).pluck(:id)
|
||||||
allowed_groups.each do |id|
|
allowed_groups.each do |id|
|
||||||
GroupArchivedMessage.where(group_id: id, topic_id: topic.id).destroy_all
|
|
||||||
|
|
||||||
if archive
|
if archive
|
||||||
|
GroupArchivedMessage.archive!(id, topic.id)
|
||||||
group_id = id
|
group_id = id
|
||||||
GroupArchivedMessage.create!(group_id: id, topic_id: topic.id)
|
else
|
||||||
|
GroupArchivedMessage.move_to_inbox!(id, topic.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if topic.allowed_users.include?(current_user)
|
if topic.allowed_users.include?(current_user)
|
||||||
UserArchivedMessage.where(user_id: current_user.id, topic_id: topic.id).destroy_all
|
|
||||||
|
|
||||||
if archive
|
if archive
|
||||||
UserArchivedMessage.create!(user_id: current_user.id, topic_id: topic.id)
|
UserArchivedMessage.archive!(current_user.id, topic.id)
|
||||||
|
else
|
||||||
|
UserArchivedMessage.move_to_inbox!(current_user.id, topic.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,18 @@
|
||||||
class GroupArchivedMessage < ActiveRecord::Base
|
class GroupArchivedMessage < ActiveRecord::Base
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
belongs_to :topic
|
belongs_to :topic
|
||||||
|
|
||||||
|
def self.move_to_inbox!(group_id, topic_id)
|
||||||
|
GroupArchivedMessage.where(group_id: group_id, topic_id: topic_id).destroy_all
|
||||||
|
MessageBus.publish("/topic/#{topic_id}", {type: "move_to_inbox"}, group_ids: [group_id])
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.archive!(group_id, topic_id)
|
||||||
|
GroupArchivedMessage.where(group_id: group_id, topic_id: topic_id).destroy_all
|
||||||
|
GroupArchivedMessage.create!(group_id: group_id, topic_id: topic_id)
|
||||||
|
MessageBus.publish("/topic/#{topic_id}", {type: "archived"}, group_ids: [group_id])
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# == Schema Information
|
# == Schema Information
|
||||||
|
|
|
@ -1,6 +1,17 @@
|
||||||
class UserArchivedMessage < ActiveRecord::Base
|
class UserArchivedMessage < ActiveRecord::Base
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
belongs_to :topic
|
belongs_to :topic
|
||||||
|
|
||||||
|
def self.move_to_inbox!(user_id, topic_id)
|
||||||
|
UserArchivedMessage.where(user_id: user_id, topic_id: topic_id).destroy_all
|
||||||
|
MessageBus.publish("/topic/#{topic_id}", {type: "move_to_inbox"}, user_ids: [user_id])
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.archive!(user_id, topic_id)
|
||||||
|
UserArchivedMessage.where(user_id: user_id, topic_id: topic_id).destroy_all
|
||||||
|
UserArchivedMessage.create!(user_id: user_id, topic_id: topic_id)
|
||||||
|
MessageBus.publish("/topic/#{topic_id}", {type: "archived"}, user_ids: [user_id])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# == Schema Information
|
# == Schema Information
|
||||||
|
|
|
@ -276,8 +276,13 @@ class PostCreator
|
||||||
def unarchive_message
|
def unarchive_message
|
||||||
return unless @topic.private_message? && @topic.id
|
return unless @topic.private_message? && @topic.id
|
||||||
|
|
||||||
UserArchivedMessage.where(topic_id: @topic.id).destroy_all
|
UserArchivedMessage.where(topic_id: @topic.id).pluck(:user_id).each do |user_id|
|
||||||
GroupArchivedMessage.where(topic_id: @topic.id).destroy_all
|
UserArchivedMessage.move_to_inbox!(user_id, @topic.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
GroupArchivedMessage.where(topic_id: @topic.id).pluck(:group_id).each do |group_id|
|
||||||
|
GroupArchivedMessage.move_to_inbox!(group_id, @topic.id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -43,9 +43,9 @@ class TopicsBulkAction
|
||||||
topics.each do |t|
|
topics.each do |t|
|
||||||
if guardian.can_see?(t) && t.private_message?
|
if guardian.can_see?(t) && t.private_message?
|
||||||
if group
|
if group
|
||||||
GroupArchivedMessage.where(group_id: group.id, topic_id: t.id).destroy_all
|
GroupArchivedMessage.move_to_inbox!(group.id, t.id)
|
||||||
else
|
else
|
||||||
UserArchivedMessage.where(user_id: @user.id, topic_id: t.id).destroy_all
|
UserArchivedMessage.move_to_inbox!(@user.id,t.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -56,9 +56,9 @@ class TopicsBulkAction
|
||||||
topics.each do |t|
|
topics.each do |t|
|
||||||
if guardian.can_see?(t) && t.private_message?
|
if guardian.can_see?(t) && t.private_message?
|
||||||
if group
|
if group
|
||||||
GroupArchivedMessage.create!(group_id: group.id, topic_id: t.id)
|
GroupArchivedMessage.archive!(group.id, t.id)
|
||||||
else
|
else
|
||||||
UserArchivedMessage.create!(user_id: @user.id, topic_id: t.id)
|
UserArchivedMessage.archive!(@user.id, t.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue