Skip to content

Commit

Permalink
UX: Make shared drafts behaviour consistent for non-staff users
Browse files Browse the repository at this point in the history
This makes it easier to diagnose the problem when a public category
is set as the 'shared drafts category'. Doing this is not recommended.
  • Loading branch information
davidtaylorhq committed Dec 6, 2018
1 parent ded3639 commit 91efc52
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
23 changes: 10 additions & 13 deletions lib/topic_query.rb
Original file line number Diff line number Diff line change
Expand Up @@ -554,20 +554,17 @@ def private_messages_for(user, type)
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)
Expand Down
11 changes: 11 additions & 0 deletions spec/components/topic_query_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1014,6 +1014,17 @@ def clear_cache!
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

0 comments on commit 91efc52

Please sign in to comment.