diff --git a/app/controllers/modqueue_controller.rb b/app/controllers/modqueue_controller.rb index b77b9d083..787429b35 100644 --- a/app/controllers/modqueue_controller.rb +++ b/app/controllers/modqueue_controller.rb @@ -1,9 +1,22 @@ class ModqueueController < ApplicationController respond_to :html, :json, :xml before_action :approver_only + layout "sidebar" def index - @posts = Post.includes(:appeals, :disapprovals, :uploader, flags: [:creator]).reorder(id: :asc).pending_or_flagged.available_for_moderation(search_params[:hidden]).tag_match(search_params[:tags]).paginated_search(params, count_pages: true) + @posts = Post.includes(:appeals, :disapprovals, :uploader, flags: [:creator]).pending_or_flagged.available_for_moderation(search_params[:hidden]).tag_match(search_params[:tags]) + + @pending_post_count = @posts.pending.count + @flagged_post_count = @posts.flagged.count + @disapproval_reasons = PostDisapproval.where(post: @posts).where.not(reason: "disinterest").group(:reason).order(count: :desc).distinct.count(:post_id) + @uploaders = @posts.reorder(nil).group(:uploader).order(count: :desc).limit(20).count + + @tags = RelatedTagCalculator.frequent_tags_for_post_relation(@posts) + @artist_tags = @tags.select { |tag| tag.category == Tag.categories.artist }.sort_by(&:overlap_count).reverse.take(10) + @copyright_tags = @tags.select { |tag| tag.category == Tag.categories.copyright }.sort_by(&:overlap_count).reverse.take(10) + @character_tags = @tags.select { |tag| tag.category == Tag.categories.character }.sort_by(&:overlap_count).reverse.take(10) + + @posts = @posts.reorder(id: :asc).paginated_search(params, count_pages: true) respond_with(@posts) end end diff --git a/app/logical/related_tag_calculator.rb b/app/logical/related_tag_calculator.rb index e375fd567..898a2b308 100644 --- a/app/logical/related_tag_calculator.rb +++ b/app/logical/related_tag_calculator.rb @@ -17,7 +17,11 @@ module RelatedTagCalculator def self.frequent_tags_for_search(tag_query, search_sample_size: 1000, category: nil) sample_posts = Post.tag_match(tag_query).reorder(:md5).limit(search_sample_size) - tag_counts = Post.from(sample_posts).with_unflattened_tags.group("tag").select("tag, COUNT(*) AS overlap_count") + frequent_tags_for_post_relation(sample_posts, category: category) + end + + def self.frequent_tags_for_post_relation(posts, category: nil) + tag_counts = Post.from(posts).with_unflattened_tags.group("tag").select("tag, COUNT(*) AS overlap_count") tags = Tag.from(tag_counts).joins("JOIN tags ON tags.name = tag") tags = tags.select("tags.*, overlap_count") @@ -27,7 +31,7 @@ module RelatedTagCalculator tags end - def self.frequent_tags_for_posts(posts) + def self.frequent_tags_for_post_array(posts) tags_with_counts = posts.flat_map(&:tag_array).group_by(&:itself).transform_values(&:size) tags_with_counts.sort_by { |tag_name, count| [-count, tag_name] }.map(&:first) end diff --git a/app/presenters/post_set_presenters/post.rb b/app/presenters/post_set_presenters/post.rb index b6406348c..f34763267 100644 --- a/app/presenters/post_set_presenters/post.rb +++ b/app/presenters/post_set_presenters/post.rb @@ -44,7 +44,7 @@ module PostSetPresenters end def frequent_tags - RelatedTagCalculator.frequent_tags_for_posts(post_set.posts).take(MAX_TAGS) + RelatedTagCalculator.frequent_tags_for_post_array(post_set.posts).take(MAX_TAGS) end def pattern_tags diff --git a/app/views/layouts/sidebar.html.erb b/app/views/layouts/sidebar.html.erb index 97861a3b7..2e62247ff 100644 --- a/app/views/layouts/sidebar.html.erb +++ b/app/views/layouts/sidebar.html.erb @@ -1,13 +1,21 @@ <% content_for(:layout) do %>
+ <% if params.dig(:search, :hidden) %> + <%= link_to "View pending posts", modqueue_index_path(search: { tags: params.dig(:search, :tags), hidden: nil }) %>. + <% else %> + <%= link_to "View hidden posts", modqueue_index_path(search: { tags: params.dig(:search, :tags), hidden: true, }) %>. <% end %> - -
- <% if params.dig(:search, :hidden) %> - <%= link_to "View pending posts", modqueue_index_path(search: { tags: params.dig(:search, :tags), hidden: nil }) %>. - <% else %> - <%= link_to "View hidden posts", modqueue_index_path(search: { tags: params.dig(:search, :tags), hidden: true, }) %>. - <% end %> -
-