mirror of
https://github.com/discourse/discourse.git
synced 2024-12-12 04:23:40 +08:00
78 lines
2.2 KiB
Ruby
78 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module EmailControllerHelper
|
|
class TopicEmailUnsubscriber < BaseEmailUnsubscriber
|
|
def prepare_unsubscribe_options(controller)
|
|
super(controller)
|
|
watching = TopicUser.notification_levels[:watching]
|
|
|
|
topic = unsubscribe_key.associated_topic
|
|
|
|
controller.instance_variable_set(:@topic, topic)
|
|
controller.instance_variable_set(
|
|
:@watching_topic,
|
|
TopicUser.exists?(user: key_owner, notification_level: watching, topic_id: topic.id),
|
|
)
|
|
|
|
return if topic.category_id.blank?
|
|
if !CategoryUser.exists?(
|
|
user: key_owner,
|
|
notification_level: CategoryUser.watching_levels,
|
|
category_id: topic.category_id,
|
|
)
|
|
return
|
|
end
|
|
|
|
controller.instance_variable_set(
|
|
:@watched_count,
|
|
TopicUser
|
|
.joins(:topic)
|
|
.where(user: key_owner, notification_level: watching)
|
|
.where(topics: { category_id: topic.category_id })
|
|
.count,
|
|
)
|
|
end
|
|
|
|
def unsubscribe(params)
|
|
updated = super(params)
|
|
|
|
topic = unsubscribe_key.associated_topic
|
|
return updated if topic.nil?
|
|
|
|
if params[:unwatch_topic]
|
|
TopicUser.where(topic_id: topic.id, user_id: key_owner.id).update_all(
|
|
notification_level: TopicUser.notification_levels[:tracking],
|
|
)
|
|
|
|
updated = true
|
|
end
|
|
|
|
if params[:unwatch_category] && topic.category_id
|
|
TopicUser
|
|
.joins(:topic)
|
|
.where(user: key_owner, notification_level: TopicUser.notification_levels[:watching])
|
|
.where(topics: { category_id: topic.category_id })
|
|
.update_all(notification_level: TopicUser.notification_levels[:tracking])
|
|
|
|
CategoryUser.where(
|
|
user_id: key_owner.id,
|
|
category_id: topic.category_id,
|
|
notification_level: CategoryUser.watching_levels,
|
|
).destroy_all
|
|
|
|
updated = true
|
|
end
|
|
|
|
if params[:mute_topic]
|
|
TopicUser.where(topic_id: topic.id, user_id: key_owner.id).update_all(
|
|
notification_level: TopicUser.notification_levels[:muted],
|
|
)
|
|
|
|
updated = true
|
|
end
|
|
|
|
updated
|
|
end
|
|
end
|
|
end
|