Merge pull request #3832 from evazion/feat-modqueue-metatags

Add status:<unmoderated|modqueue>, disapproval:<type> metatags
This commit is contained in:
Albert Yi
2018-08-23 13:53:33 -07:00
committed by GitHub
6 changed files with 87 additions and 4 deletions

View File

@@ -128,6 +128,7 @@ Autocomplete.initialize_tag_autocomplete = function() {
case "child":
case "parent":
case "filetype":
case "disapproval":
Autocomplete.static_metatag_source(term, resp, metatag);
return;
case "user":
@@ -398,7 +399,7 @@ Autocomplete.static_metatags = {
"custom"
].concat(<%= TagCategory.short_name_list.map {|category| [category + "tags", category + "tags_asc"]}.flatten %>),
status: [
"any", "deleted", "active", "pending", "flagged", "banned"
"any", "deleted", "active", "pending", "flagged", "banned", "modqueue", "unmoderated"
],
rating: [
"safe", "questionable", "explicit"
@@ -415,6 +416,9 @@ Autocomplete.static_metatags = {
filetype: [
"jpg", "png", "gif", "swf", "zip", "webm", "mp4"
],
disapproval: [
"any", "none", "disinterest", "poor_quality", "breaks_rules"
]
}
Autocomplete.static_metatag_source = function(term, resp, metatag) {

View File

@@ -229,8 +229,12 @@ class AnonymousUser
false
end
def post_disapprovals
PostDisapproval.none
end
def saved_searches
SavedSearch.where(false)
SavedSearch.none
end
def has_saved_searches?

View File

@@ -131,18 +131,24 @@ class PostQueryBuilder
relation = relation.where("posts.is_pending = TRUE")
elsif q[:status] == "flagged"
relation = relation.where("posts.is_flagged = TRUE")
elsif q[:status] == "modqueue"
relation = relation.where("posts.is_pending = TRUE OR posts.is_flagged = TRUE")
elsif q[:status] == "deleted"
relation = relation.where("posts.is_deleted = TRUE")
elsif q[:status] == "banned"
relation = relation.where("posts.is_banned = TRUE")
elsif q[:status] == "active"
relation = relation.where("posts.is_pending = FALSE AND posts.is_deleted = FALSE AND posts.is_banned = FALSE AND posts.is_flagged = FALSE")
elsif q[:status] == "unmoderated"
relation = relation.merge(Post.pending_or_flagged.available_for_moderation)
elsif q[:status] == "all" || q[:status] == "any"
# do nothing
elsif q[:status_neg] == "pending"
relation = relation.where("posts.is_pending = FALSE")
elsif q[:status_neg] == "flagged"
relation = relation.where("posts.is_flagged = FALSE")
elsif q[:status_neg] == "modqueue"
relation = relation.where("posts.is_pending = FALSE AND posts.is_flagged = FALSE")
elsif q[:status_neg] == "deleted"
relation = relation.where("posts.is_deleted = FALSE")
elsif q[:status_neg] == "banned"
@@ -222,6 +228,34 @@ 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)
else
relation = relation.where("posts.id": disapprovals.where(reason: disapproval))
end
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)
else
relation = relation.where.not("posts.id": disapprovals.where(reason: disapproval))
end
end
end
if q[:flagger_ids_neg]
q[:flagger_ids_neg].each do |flagger_id|
if CurrentUser.can_view_flagger?(flagger_id)

View File

@@ -1645,7 +1645,9 @@ class Post < ApplicationRecord
where("uploader_id = ?", user_id)
end
def available_for_moderation(hidden, user = CurrentUser.user)
def available_for_moderation(hidden = false, user = CurrentUser.user)
return none if user.is_anonymous?
approved_posts = user.post_approvals.select(:post_id)
disapproved_posts = user.post_disapprovals.select(:post_id)

View File

@@ -1,6 +1,6 @@
class Tag < ApplicationRecord
COSINE_SIMILARITY_RELATED_TAG_THRESHOLD = 300
METATAGS = "-user|user|-approver|approver|commenter|comm|noter|noteupdater|artcomm|-pool|pool|ordpool|-favgroup|favgroup|-fav|fav|ordfav|md5|-rating|rating|-locked|locked|width|height|mpixels|ratio|score|favcount|filesize|source|-source|id|-id|date|age|order|limit|-status|status|tagcount|parent|-parent|child|pixiv_id|pixiv|search|upvote|downvote|filetype|-filetype|flagger|-flagger|appealer|-appealer|" +
METATAGS = "-user|user|-approver|approver|commenter|comm|noter|noteupdater|artcomm|-pool|pool|ordpool|-favgroup|favgroup|-fav|fav|ordfav|md5|-rating|rating|-locked|locked|width|height|mpixels|ratio|score|favcount|filesize|source|-source|id|-id|date|age|order|limit|-status|status|tagcount|parent|-parent|child|pixiv_id|pixiv|search|upvote|downvote|filetype|-filetype|flagger|-flagger|appealer|-appealer|disapproval|-disapproval|" +
TagCategory.short_name_list.map {|x| "#{x}tags"}.join("|")
SUBQUERY_METATAGS = "commenter|comm|noter|noteupdater|artcomm|flagger|-flagger|appealer|-appealer"
has_one :wiki_page, :foreign_key => "title", :primary_key => "name"
@@ -577,6 +577,14 @@ class Tag < ApplicationRecord
user_id = User.name_to_id(g2)
q[:artcomm_ids] << user_id unless user_id.blank?
when "disapproval"
q[:disapproval] ||= []
q[:disapproval] << g2
when "-disapproval"
q[:disapproval_neg] ||= []
q[:disapproval_neg] << g2
when "-pool"
if g2.downcase == "none"
q[:pool] = "any"