diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index e5a37c14a3d..ffce1246243 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -2782,9 +2782,9 @@ en:

Options

- + - + diff --git a/lib/search.rb b/lib/search.rb index 17547d9fa92..c4bb98ca6db 100644 --- a/lib/search.rb +++ b/lib/search.rb @@ -279,7 +279,7 @@ class Search end end - advanced_filter(/^\#([a-zA-Z0-9,\-:]+)/) do |posts,match| + advanced_filter(/^\#([a-zA-Z0-9\-:]+)/) do |posts,match| slug = match.to_s.split(":") if slug[1] # sub category @@ -315,6 +315,15 @@ class Search end end + advanced_filter(/^\@([a-zA-Z0-9_\-.]+)/) do |posts,match| + user_id = User.where(staged: false).where(username_lower: match.downcase).pluck(:id).first + if user_id + posts.where("posts.user_id = #{user_id}") + else + posts.where("1 = 0") + end + end + advanced_filter(/before:(.*)/) do |posts,match| if date = Search.word_to_date(match) posts.where("posts.created_at < ?", date) diff --git a/spec/components/search_spec.rb b/spec/components/search_spec.rb index af371932f20..f3ee6f1561d 100644 --- a/spec/components/search_spec.rb +++ b/spec/components/search_spec.rb @@ -426,7 +426,7 @@ describe Search do expect(Search.execute('boom in:unpinned', guardian: guardian).posts.length).to eq(1) end - it 'supports before and after in:first user:' do + it 'supports before and after, in:first, user:, @username' do time = Time.zone.parse('2001-05-20 2:55') freeze_time(time) @@ -449,6 +449,8 @@ describe Search do expect(Search.execute('user:nobody').posts.length).to eq(0) expect(Search.execute("user:#{_post.user.username}").posts.length).to eq(1) expect(Search.execute("user:#{_post.user_id}").posts.length).to eq(1) + + expect(Search.execute("@#{_post.user.username}").posts.length).to eq(1) end it 'supports group' do
order:viewsorder:latestorder:likes
order:viewsorder:latestorder:likes@usernameuser:foo
status:openstatus:closedstatus:archivedstatus:norepliesstatus:single_user
#category-slugcategory:foouser:foogroup:foobadge:foo
#category-slugcategory:foogroup:foobadge:foo
in:likesin:postedin:watchingin:trackingin:private
in:bookmarksin:firstin:pinnedin:unpinned
posts_count:numbefore:days or dateafter:days or date