search: change behavior of disapproval:<reason> metatag.

* Change the `disapproval:<reason>` metatag to `disapproved:<reason>`.

* Change `disapproved:<reason>` to show all posts disapproved for a
  given reason, not just those disapproved by the current user.

* Allow searching for your own disapprovals with `disapproved:<my_name>`.

* Drop the `disapproved:<any|none>` metatags. `disapproved:any` is
  equivalent to `disapproved:<my_name>` and `disapproved:none` is
  equivalent to `-disapproved:<my_name>`.

These changes are so that you can search e.g. disapproved:poor_quality
to find all posts disapproved for poor quality.
This commit is contained in:
evazion
2020-02-29 17:32:43 -06:00
parent ba66ca62c4
commit b232470248
4 changed files with 31 additions and 37 deletions

View File

@@ -266,31 +266,27 @@ class PostQueryBuilder
end
end
if q[:disapproval]
q[:disapproval].each do |disapproval|
disapprovals = CurrentUser.user.post_disapprovals.select(:post_id)
if disapproval.in?(%w[none false])
relation = relation.where.not("posts.id": disapprovals)
elsif disapproval.in?(%w[any all true])
relation = relation.where("posts.id": disapprovals)
if q[:disapproved]
q[:disapproved].each do |disapproved|
if disapproved == CurrentUser.name
disapprovals = CurrentUser.user.post_disapprovals.select(:post_id)
else
relation = relation.where("posts.id": disapprovals.where(reason: disapproval))
disapprovals = PostDisapproval.where(reason: disapproved)
end
relation = relation.where("posts.id": disapprovals.select(:post_id))
end
end
if q[:disapproval_neg]
q[:disapproval_neg].each do |disapproval|
disapprovals = CurrentUser.user.post_disapprovals.select(:post_id)
if disapproval.in?(%w[none false])
relation = relation.where("posts.id": disapprovals)
elsif disapproval.in?(%w[any all true])
relation = relation.where.not("posts.id": disapprovals)
if q[:disapproved_neg]
q[:disapproved_neg].each do |disapproved|
if disapproved == CurrentUser.name
disapprovals = CurrentUser.user.post_disapprovals.select(:post_id)
else
relation = relation.where.not("posts.id": disapprovals.where(reason: disapproval))
disapprovals = PostDisapproval.where(reason: disapproved)
end
relation = relation.where.not("posts.id": disapprovals.select(:post_id))
end
end