# 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