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:
@@ -117,7 +117,7 @@ Autocomplete.initialize_tag_autocomplete = function() {
|
|||||||
case "child":
|
case "child":
|
||||||
case "parent":
|
case "parent":
|
||||||
case "filetype":
|
case "filetype":
|
||||||
case "disapproval":
|
case "disapproved":
|
||||||
case "embedded":
|
case "embedded":
|
||||||
results = Autocomplete.static_metatag_source(term, metatag);
|
results = Autocomplete.static_metatag_source(term, metatag);
|
||||||
break;
|
break;
|
||||||
@@ -286,8 +286,8 @@ Autocomplete.static_metatags = {
|
|||||||
filetype: [
|
filetype: [
|
||||||
"jpg", "png", "gif", "swf", "zip", "webm", "mp4"
|
"jpg", "png", "gif", "swf", "zip", "webm", "mp4"
|
||||||
],
|
],
|
||||||
disapproval: [
|
disapproved: [
|
||||||
"any", "none", "disinterest", "poor_quality", "breaks_rules"
|
"disinterest", "poor_quality", "breaks_rules"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -266,31 +266,27 @@ class PostQueryBuilder
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if q[:disapproval]
|
if q[:disapproved]
|
||||||
q[:disapproval].each do |disapproval|
|
q[:disapproved].each do |disapproved|
|
||||||
disapprovals = CurrentUser.user.post_disapprovals.select(:post_id)
|
if disapproved == CurrentUser.name
|
||||||
|
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)
|
|
||||||
else
|
else
|
||||||
relation = relation.where("posts.id": disapprovals.where(reason: disapproval))
|
disapprovals = PostDisapproval.where(reason: disapproved)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
relation = relation.where("posts.id": disapprovals.select(:post_id))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if q[:disapproval_neg]
|
if q[:disapproved_neg]
|
||||||
q[:disapproval_neg].each do |disapproval|
|
q[:disapproved_neg].each do |disapproved|
|
||||||
disapprovals = CurrentUser.user.post_disapprovals.select(:post_id)
|
if disapproved == CurrentUser.name
|
||||||
|
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)
|
|
||||||
else
|
else
|
||||||
relation = relation.where.not("posts.id": disapprovals.where(reason: disapproval))
|
disapprovals = PostDisapproval.where(reason: disapproved)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
relation = relation.where.not("posts.id": disapprovals.select(:post_id))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class Tag < ApplicationRecord
|
|||||||
-locked locked width height mpixels ratio score favcount filesize source
|
-locked locked width height mpixels ratio score favcount filesize source
|
||||||
-source id -id date age order limit -status status tagcount parent -parent
|
-source id -id date age order limit -status status tagcount parent -parent
|
||||||
child pixiv_id pixiv search upvote downvote filetype -filetype flagger
|
child pixiv_id pixiv search upvote downvote filetype -filetype flagger
|
||||||
-flagger appealer -appealer disapproval -disapproval embedded
|
-flagger appealer -appealer disapproved -disapproved embedded
|
||||||
] + TagCategory.short_name_list.map {|x| "#{x}tags"} + COUNT_METATAGS + COUNT_METATAG_SYNONYMS
|
] + TagCategory.short_name_list.map {|x| "#{x}tags"} + COUNT_METATAGS + COUNT_METATAG_SYNONYMS
|
||||||
|
|
||||||
SUBQUERY_METATAGS = %w[commenter comm noter noteupdater artcomm flagger -flagger appealer -appealer]
|
SUBQUERY_METATAGS = %w[commenter comm noter noteupdater artcomm flagger -flagger appealer -appealer]
|
||||||
@@ -583,13 +583,13 @@ class Tag < ApplicationRecord
|
|||||||
user_id = User.name_to_id(g2)
|
user_id = User.name_to_id(g2)
|
||||||
q[:artcomm_ids] << user_id unless user_id.blank?
|
q[:artcomm_ids] << user_id unless user_id.blank?
|
||||||
|
|
||||||
when "disapproval"
|
when "disapproved"
|
||||||
q[:disapproval] ||= []
|
q[:disapproved] ||= []
|
||||||
q[:disapproval] << g2
|
q[:disapproved] << g2
|
||||||
|
|
||||||
when "-disapproval"
|
when "-disapproved"
|
||||||
q[:disapproval_neg] ||= []
|
q[:disapproved_neg] ||= []
|
||||||
q[:disapproval_neg] << g2
|
q[:disapproved_neg] << g2
|
||||||
|
|
||||||
when "-pool"
|
when "-pool"
|
||||||
q[:pool_neg] ||= []
|
q[:pool_neg] ||= []
|
||||||
|
|||||||
@@ -2374,21 +2374,19 @@ class PostTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
should "return posts for a disapproval:<type> metatag" do
|
should "return posts for a disapproved:<type> metatag" do
|
||||||
CurrentUser.scoped(FactoryBot.create(:mod_user)) do
|
CurrentUser.scoped(FactoryBot.create(:mod_user)) do
|
||||||
pending = FactoryBot.create(:post, is_pending: true)
|
pending = FactoryBot.create(:post, is_pending: true)
|
||||||
disapproved = FactoryBot.create(:post, is_pending: true)
|
disapproved = FactoryBot.create(:post, is_pending: true)
|
||||||
disapproval = FactoryBot.create(:post_disapproval, user: CurrentUser.user, post: disapproved, reason: "disinterest")
|
disapproval = FactoryBot.create(:post_disapproval, user: CurrentUser.user, post: disapproved, reason: "disinterest")
|
||||||
|
|
||||||
assert_tag_match([pending], "disapproval:none")
|
assert_tag_match([disapproved], "disapproved:#{CurrentUser.name}")
|
||||||
assert_tag_match([disapproved], "disapproval:any")
|
assert_tag_match([disapproved], "disapproved:disinterest")
|
||||||
assert_tag_match([disapproved], "disapproval:disinterest")
|
assert_tag_match([], "disapproved:breaks_rules")
|
||||||
assert_tag_match([], "disapproval:breaks_rules")
|
|
||||||
|
|
||||||
assert_tag_match([disapproved], "-disapproval:none")
|
assert_tag_match([pending], "-disapproved:#{CurrentUser.name}")
|
||||||
assert_tag_match([pending], "-disapproval:any")
|
assert_tag_match([pending], "-disapproved:disinterest")
|
||||||
assert_tag_match([pending], "-disapproval:disinterest")
|
assert_tag_match([disapproved, pending], "-disapproved:breaks_rules")
|
||||||
assert_tag_match([disapproved, pending], "-disapproval:breaks_rules")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user