From 0b1d66087679bc0cb0bdf42c556be90babb9078d Mon Sep 17 00:00:00 2001 From: David Taylor 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. --- lib/topic_query.rb | 21 +++++++++------------ spec/components/topic_query_spec.rb | 11 +++++++++++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/lib/topic_query.rb b/lib/topic_query.rb index 1b643e400f7..e0afa11d9ef 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 + can_create_shared = guardian.can_create_shared_draft? - 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 + 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 91b97406879..a5248627929 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