diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 1330b1cd628..6226fa5cdef 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -2411,7 +2411,8 @@ en: status:openstatus:closedstatus:archivedstatus:norepliesstatus:singleuser category:foouser:foo in:likesin:postedin:watchingin:trackingin:private - in:bookmarks + in:bookmarks + posts_count:nummin_age:daysmax_age:days

diff --git a/lib/search.rb b/lib/search.rb index f014a8d3f07..7c02b5a1603 100644 --- a/lib/search.rb +++ b/lib/search.rb @@ -219,6 +219,16 @@ class Search posts.where("posts.user_id = #{user_id}") end + advanced_filter(/min_age:(\d+)/) do |posts,match| + n = match.to_i + posts.where("topics.created_at > ?", n.days.ago) + end + + advanced_filter(/max_age:(\d+)/) do |posts,match| + n = match.to_i + posts.where("topics.created_at < ?", n.days.ago) + end + private diff --git a/spec/components/search_spec.rb b/spec/components/search_spec.rb index 83798b4bce6..82638fbf36f 100644 --- a/spec/components/search_spec.rb +++ b/spec/components/search_spec.rb @@ -372,6 +372,18 @@ describe Search do end describe 'Advanced search' do + + it 'supports min_age and max_age' do + topic = Fabricate(:topic, created_at: 3.months.ago) + Fabricate(:post, raw: 'hi this is a test 123 123', topic: topic) + + expect(Search.execute('test min_age:100').posts.length).to eq(1) + expect(Search.execute('test min_age:10').posts.length).to eq(0) + expect(Search.execute('test max_age:10').posts.length).to eq(1) + expect(Search.execute('test max_age:100').posts.length).to eq(0) + + end + it 'can find by status' do post = Fabricate(:post, raw: 'hi this is a test 123 123') topic = post.topic