UX: Make shared drafts behaviour consistent for non-staff users (#6734)

UX: Make shared drafts behaviour consistent for non-staff users (#6734)

This makes it easier to diagnose the problem when a public category
is set as the ‘shared drafts category’. Doing this is not recommended.

From 0b1d66087679bc0cb0bdf42c556be90babb9078d Mon Sep 17 00:00:00 2001
From: David Taylor <david@taylorhq.com>
Date: Thu, 6 Dec 2018 18:59:29 +0000
Subject: [PATCH] UX: Make shared drafts behaviour consistent for non-staff
 users (#6734)

This makes it easier to diagnose the problem when a public category
is set as the 'shared drafts category'. Doing this is not recommended.

diff --git a/lib/topic_query.rb b/lib/topic_query.rb
index 1b643e4..e0afa11 100644
--- a/lib/topic_query.rb
+++ b/lib/topic_query.rb
@@ -554,20 +554,17 @@ class TopicQuery
   def apply_shared_drafts(result, category_id, options)
     drafts_category_id = SiteSetting.shared_drafts_category.to_i
     viewing_shared = category_id && category_id == drafts_category_id
-
-    if guardian.can_create_shared_draft?
-      if options[:destination_category_id]
-        destination_category_id = get_category_id(options[:destination_category_id])
-        topic_ids = SharedDraft.where(category_id: destination_category_id).pluck(:topic_id)
-        return result.where(id: topic_ids)
-      elsif viewing_shared
-        result = result.includes(:shared_draft).references(:shared_draft)
-      else
-        return result.where('topics.category_id != ?', drafts_category_id)
-      end
+    can_create_shared = guardian.can_create_shared_draft?
+
+    if can_create_shared && options[:destination_category_id]
+      destination_category_id = get_category_id(options[:destination_category_id])
+      topic_ids = SharedDraft.where(category_id: destination_category_id).pluck(:topic_id)
+      result.where(id: topic_ids)
+    elsif can_create_shared && viewing_shared
+      result.includes(:shared_draft).references(:shared_draft)
+    else
+      result.where('topics.category_id != ?', drafts_category_id)
     end
-
-    result
   end
 
   def apply_ordering(result, options)
diff --git a/spec/components/topic_query_spec.rb b/spec/components/topic_query_spec.rb
index 91b9740..a524862 100644
--- a/spec/components/topic_query_spec.rb
+++ b/spec/components/topic_query_spec.rb
@@ -1014,6 +1014,17 @@ describe TopicQuery do
         list = TopicQuery.new(moderator).list_latest
         expect(list.topics).not_to include(topic)
       end
+
+      it "doesn't include shared draft topics for regular users" do
+        group.add(user)
+        SiteSetting.shared_drafts_category = nil
+        list = TopicQuery.new(user).list_latest
+        expect(list.topics).to include(topic)
+
+        SiteSetting.shared_drafts_category = shared_drafts_category.id
+        list = TopicQuery.new(user).list_latest
+        expect(list.topics).not_to include(topic)
+      end
     end
   end
 end

GitHub

1 Like