FIX: Exclude shared drafts from digests

FIX: Exclude shared drafts from digests

diff --git a/app/models/topic.rb b/app/models/topic.rb
index eb156e6..8933848 100644
--- a/app/models/topic.rb
+++ b/app/models/topic.rb
@@ -509,14 +509,17 @@ class Topic < ActiveRecord::Base
       topics = topics.where("topics.id NOT IN (?)", category_topic_ids)
     end
 
-    # Remove muted categories
-    muted_category_ids = CategoryUser.where(user_id: user.id, notification_level: CategoryUser.notification_levels[:muted]).pluck(:category_id)
+    # Remove muted and shared draft categories
+    remove_category_ids = CategoryUser.where(user_id: user.id, notification_level: CategoryUser.notification_levels[:muted]).pluck(:category_id)
     if SiteSetting.digest_suppress_categories.present?
-      muted_category_ids += SiteSetting.digest_suppress_categories.split("|").map(&:to_i)
-      muted_category_ids = muted_category_ids.uniq
+      remove_category_ids += SiteSetting.digest_suppress_categories.split("|").map(&:to_i)
     end
-    if muted_category_ids.present?
-      topics = topics.where("topics.category_id NOT IN (?)", muted_category_ids)
+    if SiteSetting.shared_drafts_category.present?
+      remove_category_ids << SiteSetting.shared_drafts_enabled?
+    end
+    if remove_category_ids.present?
+      remove_category_ids.uniq!
+      topics = topics.where("topics.category_id NOT IN (?)", remove_category_ids)
     end
 
     # Remove muted tags
diff --git a/spec/mailers/user_notifications_spec.rb b/spec/mailers/user_notifications_spec.rb
index b438e09..c229f89 100644
--- a/spec/mailers/user_notifications_spec.rb
+++ b/spec/mailers/user_notifications_spec.rb
@@ -174,6 +174,23 @@ describe UserNotifications do
         expect(html).to_not include post.raw
       end
 
+      it "excludes shared drafts" do
+        cat = Fabricate(:category)
+        SiteSetting.shared_drafts_category = cat.id
+        topic = Fabricate(:topic, title: "This is a draft", category_id: cat.id, created_at: 1.hour.ago)
+        post = Fabricate(
+          :post,
+          topic: topic,
+          score: 100.0,
+          post_number: 2,
+          raw: "secret draft content",
+          created_at: 1.hour.ago
+        )
+        html = subject.html_part.body.to_s
+        expect(html).to_not include topic.title
+        expect(html).to_not include post.raw
+      end
+
       it "excludes whispers and other post types that don't belong" do
         t = Fabricate(:topic, user: Fabricate(:user), title: "Who likes the same stuff I like?", created_at: 1.hour.ago)
         whisper = Fabricate(:post, topic: t, score: 100.0, post_number: 2, raw: "You like weird stuff", post_type: Post.types[:whisper], created_at: 1.hour.ago)

GitHub sha: 6da7a97e

1 Like

This commit has been mentioned on Discourse Meta. There might be relevant details there:

https://meta.discourse.org/t/how-to-exclude-draft-posts-from-email-summaries/159518/5