discourse/app/jobs/regular/notify_mailing_list_subscribers.rb
Sam 227873df78 FEATURE: proper mailing list mode
once enable_mailing_list_mode is enabled any user can elect
to get every post via email unless they opt out of category or topic
2014-02-07 11:07:52 +11:00

37 lines
1.1 KiB
Ruby

module Jobs
class NotifyMailingListSubscribers < Jobs::Base
def execute(args)
post_id = args[:post_id]
post = Post.find(post_id) if post_id
raise Discourse::InvalidParameters.new(:post_id) unless post
User.not_suspended
.not_blocked
.real
.where(mailing_list_mode: true)
.where('NOT EXISTS(
SELECT 1
FROM topic_users tu
WHERE
tu.topic_id = ? AND
tu.user_id = users.id AND
tu.notification_level = ?
)', post.topic_id, TopicUser.notification_levels[:muted])
.where('NOT EXISTS(
SELECT 1
FROM category_users cu
WHERE
cu.category_id = ? AND
cu.user_id = users.id AND
cu.notification_level = ?
)', post.topic.category_id, CategoryUser.notification_levels[:muted])
.each do |user|
UserNotifications.mailing_list_notify(user, post).deliver
end
end
end
end