FEATURE: Include advanced search option to include unlisted topics in the results (#27958)

---------

Co-authored-by: Régis Hanol <regis@hanol.fr>
This commit is contained in:
Sérgio Saquetim 2024-07-18 13:43:53 -03:00 committed by GitHub
parent e1f638b0a3
commit 6a3e12a39c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 1 deletions

View File

@ -935,6 +935,9 @@ class Search
@search_context = user @search_context = user
end end
nil
elsif word =~ /\Ainclude:(invisible|unlisted)\z/i
@include_invisible = true
nil nil
else else
found ? nil : word found ? nil : word
@ -1113,7 +1116,7 @@ class Search
end end
is_topic_search = @search_context.present? && @search_context.is_a?(Topic) is_topic_search = @search_context.present? && @search_context.is_a?(Topic)
posts = posts.where("topics.visible") unless is_topic_search posts = posts.where("topics.visible") unless is_topic_search || @include_invisible
if type_filter == "private_messages" || (is_topic_search && @search_context.private_message?) if type_filter == "private_messages" || (is_topic_search && @search_context.private_message?)
posts = posts =

View File

@ -2541,6 +2541,23 @@ RSpec.describe Search do
end end
end end
describe "include:invisible / include:unlisted" do
it "allows including invisible topics in the results" do
topic = Fabricate(:topic, title: "I am testing a search", visible: false)
post = Fabricate(:post, topic: topic, raw: "this is the first post", post_number: 1)
_post2 = Fabricate(:post, topic: topic, raw: "this is the second post", post_number: 2)
results = Search.execute("testing include:invisible")
expect(results.posts.map(&:id)).to eq([post.id])
results = Search.execute("testing include:unlisted")
expect(results.posts.map(&:id)).to eq([post.id])
results = Search.execute("testing")
expect(results.posts).to eq([])
end
end
describe "ignore_diacritics" do describe "ignore_diacritics" do
before { SiteSetting.search_ignore_accents = true } before { SiteSetting.search_ignore_accents = true }
let!(:post1) { Fabricate(:post, raw: "สวัสดี Rágis hello") } let!(:post1) { Fabricate(:post, raw: "สวัสดี Rágis hello") }