posts/index: fix several "This tag is under discussion" issues.
Several fixes for the "This tag is under discussion" notice on the post index page: * Fix the notice appearing for BURs that aren't pending. * Fix the notice never going away because of the cache never expiring. * List all topics when a tag is involved in multiple BURs. * Link to the forum post instead of the forum topic (fix #4421). * Optimization: don't check for BURs when the search isn't a simple single tag search. * Add a `tags` field to the bulk update requests table for tracking all tags involved in the request (excluding tags in mass updates that are negated/optional/wildcards). Known issue: doesn't handle tag type prefixes in mass updates correctly (e.g. `mass update foo -> artist:bar` doesn't detect the tag `bar`). * Allow searching the /bulk_update_requests page by tags. We don't really need to cache the notice here, but we do it anyway to reduce queries on the post index page.
This commit is contained in:
@@ -79,27 +79,17 @@ class AliasAndImplicationImporter
|
||||
end
|
||||
|
||||
def affected_tags
|
||||
tokens = self.class.tokenize(text)
|
||||
tokens.inject([]) do |all, token|
|
||||
case token[0]
|
||||
AliasAndImplicationImporter.tokenize(text).flat_map do |type, *args|
|
||||
case type
|
||||
when :create_alias, :remove_alias, :create_implication, :remove_implication
|
||||
all << token[1]
|
||||
all << token[2]
|
||||
all
|
||||
|
||||
[args[0], args[1]]
|
||||
when :mass_update
|
||||
all += PostQueryBuilder.new(token[1]).split_query
|
||||
all += PostQueryBuilder.new(token[2]).parse_tag_edit
|
||||
all
|
||||
|
||||
tags = PostQueryBuilder.new(args[0]).tags + PostQueryBuilder.new(args[1]).tags
|
||||
tags.reject(&:negated).reject(&:optional).reject(&:wildcard).map(&:name)
|
||||
when :change_category
|
||||
all << token[1]
|
||||
all
|
||||
|
||||
else
|
||||
all
|
||||
args[0]
|
||||
end
|
||||
end
|
||||
end.sort.uniq
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -131,5 +131,10 @@ module PostSets
|
||||
# be smarter about this in the future
|
||||
posts.reject(&:is_deleted).select(&:visible?).max_by(&:fav_count)
|
||||
end
|
||||
|
||||
def pending_bulk_update_requests
|
||||
return BulkUpdateRequest.none unless query.is_simple_tag?
|
||||
@pending_bulk_update_requests ||= BulkUpdateRequest.pending.where_array_includes_any(:tags, query.tags.first.name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
module TagChangeNoticeService
|
||||
module_function
|
||||
|
||||
def get_forum_topic_id(tag)
|
||||
Cache.get("tcn:#{tag}")
|
||||
end
|
||||
|
||||
def update_cache(affected_tags, forum_topic_id)
|
||||
affected_tags.each do |tag|
|
||||
Cache.put("tcn:#{tag}", forum_topic_id, 1.week)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user