63 lines
2.0 KiB
Ruby
63 lines
2.0 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?
|
|
return if !CategoryUser.exists?(user: key_owner, notification_level: CategoryUser.watching_levels, category_id: topic.category_id)
|
|
|
|
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
|