FEATURE: in:likes and in:posted search filters
This commit is contained in:
parent
cbc132eca9
commit
8afd7a7f21
|
@ -2131,5 +2131,8 @@ en:
|
|||
`status:archived` Only show archived topics
|
||||
`status:noreplies` Show posts with a single participant
|
||||
`category:foo` Only show topics in the category `foo`
|
||||
`user:foo` Only show posts by the user `foo`
|
||||
`in:likes` Only show posts you liked
|
||||
`in:posted` Only show posts you created
|
||||
|
||||
Example: `bears category:test status:open order:latest` will search for topics in the category bears that are not closed or archived ordered by last post date.
|
||||
|
|
|
@ -162,6 +162,15 @@ class Search
|
|||
elsif word =~ /category:(.+)/
|
||||
@category_id = Category.find_by('name ilike ?', $1).try(:id)
|
||||
nil
|
||||
elsif word =~ /user:(.+)/
|
||||
@user_id = User.find_by('username_lower = ?', $1.downcase).try(:id)
|
||||
nil
|
||||
elsif word == 'in:likes'
|
||||
@liked_only = true
|
||||
nil
|
||||
elsif word == 'in:posted'
|
||||
@posted_only = true
|
||||
nil
|
||||
else
|
||||
word
|
||||
end
|
||||
|
@ -280,6 +289,25 @@ class Search
|
|||
posts = posts.where("topics.featured_user1_id IS NULL AND topics.last_post_user_id = topics.user_id")
|
||||
end
|
||||
|
||||
if @user_id
|
||||
posts = posts.where("posts.user_id = #{@user_id}")
|
||||
end
|
||||
|
||||
if @guardian.user
|
||||
if @liked_only
|
||||
posts = posts.where("posts.id IN (
|
||||
SELECT pa.post_id FROM post_actions pa
|
||||
WHERE pa.user_id = #{@guardian.user.id} AND
|
||||
pa.post_action_type_id = #{PostActionType.types[:like]}
|
||||
)")
|
||||
end
|
||||
|
||||
if @posted_only
|
||||
posts = posts.where("posts.user_id = #{@guardian.user.id}")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
# If we have a search context, prioritize those posts first
|
||||
if @search_context.present?
|
||||
|
||||
|
|
|
@ -170,7 +170,7 @@ describe Search do
|
|||
context 'security' do
|
||||
|
||||
def result(current_user)
|
||||
Search.execute('hello', guardian: current_user)
|
||||
Search.execute('hello', guardian: Guardian.new(current_user))
|
||||
end
|
||||
|
||||
it 'secures results correctly' do
|
||||
|
@ -324,6 +324,10 @@ describe Search do
|
|||
|
||||
Search.execute('test status:noreplies').posts.length.should == 1
|
||||
|
||||
Search.execute('test in:likes', guardian: Guardian.new(topic.user)).posts.length.should == 0
|
||||
|
||||
Search.execute('test in:posted', guardian: Guardian.new(topic.user)).posts.length.should == 1
|
||||
|
||||
end
|
||||
|
||||
it 'can find by latest' do
|
||||
|
|
Loading…
Reference in New Issue