From 5bc0eea1610a1ee6b99df6bfe42fd91ad305d243 Mon Sep 17 00:00:00 2001 From: Toks Date: Fri, 7 Aug 2015 16:54:22 -0400 Subject: [PATCH] Allow searching by negated favgroup: metatag --- app/logical/post_query_builder.rb | 8 ++++++++ app/models/tag.rb | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index e15402dde..d7d7c5da9 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -312,6 +312,14 @@ class PostQueryBuilder relation = relation.order("position(' '||posts.id||' ' in ' '||(select post_ids from pools where id = #{pool_id})||' ')") end + if q[:favgroup_neg].present? + favgroup_id = q[:favgroup_neg].to_i + favgroup = FavoriteGroup.where("favorite_groups.id = ?", favgroup_id).first + if favgroup + relation = relation.where("posts.id NOT in (?)", favgroup.post_id_array) + end + end + if q[:favgroup].present? favgroup_id = q[:favgroup].to_i favgroup = FavoriteGroup.where("favorite_groups.id = ?", favgroup_id).first diff --git a/app/models/tag.rb b/app/models/tag.rb index 78922e18a..7db928dbf 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -1,5 +1,5 @@ class Tag < ActiveRecord::Base - METATAGS = "-user|user|-approver|approver|commenter|comm|noter|noteupdater|artcomm|-pool|pool|ordpool|favgroup|-fav|fav|ordfav|sub|md5|-rating|rating|-locked|locked|width|height|mpixels|ratio|score|favcount|filesize|source|-source|id|-id|date|age|order|limit|-status|status|tagcount|gentags|arttags|chartags|copytags|parent|-parent|child|pixiv_id|pixiv" + METATAGS = "-user|user|-approver|approver|commenter|comm|noter|noteupdater|artcomm|-pool|pool|ordpool|-favgroup|favgroup|-fav|fav|ordfav|sub|md5|-rating|rating|-locked|locked|width|height|mpixels|ratio|score|favcount|filesize|source|-source|id|-id|date|age|order|limit|-status|status|tagcount|gentags|arttags|chartags|copytags|parent|-parent|child|pixiv_id|pixiv" SUBQUERY_METATAGS = "commenter|comm|noter|noteupdater|artcomm" attr_accessible :category, :as => [:moderator, :janitor, :contributor, :gold, :member, :anonymous, :default, :builder, :admin] attr_accessible :is_locked, :as => [:moderator, :admin] @@ -460,6 +460,10 @@ class Tag < ActiveRecord::Base q[:tags][:related] << "pool:#{pool_id}" q[:ordpool] = pool_id + when "-favgroup" + favgroup_id = FavoriteGroup.name_to_id($2) + q[:favgroup_neg] = favgroup_id + when "favgroup" favgroup_id = FavoriteGroup.name_to_id($2) q[:favgroup] = favgroup_id