From 9b40016895c94fdec6b00f20088116e45de699d0 Mon Sep 17 00:00:00 2001 From: evazion Date: Fri, 24 Feb 2017 19:11:48 -0600 Subject: [PATCH 1/3] /posts/NNN, modqueue: allow dtext in disapproval reasons. --- app/views/post_disapprovals/_compact_counts.html.erb | 4 ++-- app/views/post_disapprovals/_counts.html.erb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/post_disapprovals/_compact_counts.html.erb b/app/views/post_disapprovals/_compact_counts.html.erb index 5bb3a6b12..9e08a9745 100644 --- a/app/views/post_disapprovals/_compact_counts.html.erb +++ b/app/views/post_disapprovals/_compact_counts.html.erb @@ -12,6 +12,6 @@ <% end %> <% if disapprovals.with_message.any? %> - (messages: <%= disapprovals.disinterest.with_message.map(&:message).to_sentence %>) + (messages: <%= disapprovals.map(&:message).select(&:present?).map { |msg| format_text(msg, ragel: true, inline: true) }.to_sentence.html_safe %>) <% end %> -<% end %> \ No newline at end of file +<% end %> diff --git a/app/views/post_disapprovals/_counts.html.erb b/app/views/post_disapprovals/_counts.html.erb index e6ec12ead..612e4f7e7 100644 --- a/app/views/post_disapprovals/_counts.html.erb +++ b/app/views/post_disapprovals/_counts.html.erb @@ -15,7 +15,7 @@ <% end %> <% if disapprovals.with_message.any? %> - Messages: <%= disapprovals.with_message.map(&:message).to_sentence %> + Messages: <%= disapprovals.map(&:message).select(&:present?).map { |msg| format_text(msg, ragel: true, inline: true) }.to_sentence.html_safe %>. <% end %>

-<% end %> \ No newline at end of file +<% end %> From 83915a5d468a53889f4bfd41a0f88aa56340b169 Mon Sep 17 00:00:00 2001 From: evazion Date: Fri, 24 Feb 2017 19:13:02 -0600 Subject: [PATCH 2/3] modqueue: avoid N+1 queries for disapprovals, uploaders. Fixes an N+1 queries problem in the /moderator/post/queue view by prefetching disapprovals and uploaders. Also the way disapproval messages were previously rendered triggered a bunch of sql queries for each post: SELECT COUNT(*) FROM "post_disapprovals" WHERE "post_disapprovals"."post_id" = $1 [["post_id", 52]] SELECT COUNT(*) FROM "post_disapprovals" WHERE "post_disapprovals"."post_id" = $1 AND "post_disapprovals"."reason" = $2 [["post_id", 52], ["reason", "breaks_rules"]] SELECT COUNT(*) FROM "post_disapprovals" WHERE "post_disapprovals"."post_id" = $1 AND "post_disapprovals"."reason" = $2 [["post_id", 52], ["reason", "poor_quality"]] SELECT COUNT(*) FROM "post_disapprovals" WHERE "post_disapprovals"."post_id" = $1 AND "post_disapprovals"."reason" IN ('disinterest', 'legacy') [["post_id", 52]] SELECT COUNT(*) FROM "post_disapprovals" WHERE "post_disapprovals"."post_id" = $1 AND (message is not null and message <> '') [["post_id", 52]] SELECT "post_disapprovals".* FROM "post_disapprovals" WHERE "post_disapprovals"."post_id" = $1 AND (message is not null and message <> '') [["post_id", 52]] This refactors to bring it down to one: SELECT "post_disapprovals".* FROM "post_disapprovals" WHERE "post_disapprovals"."post_id" = $1 [["post_id", 52]] --- .../moderator/post/queues_controller.rb | 4 ++-- .../post_disapprovals/_compact_counts.html.erb | 16 ++++++++-------- app/views/post_disapprovals/_counts.html.erb | 18 +++++++++--------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/controllers/moderator/post/queues_controller.rb b/app/controllers/moderator/post/queues_controller.rb index 06b80dd18..e274c19fb 100644 --- a/app/controllers/moderator/post/queues_controller.rb +++ b/app/controllers/moderator/post/queues_controller.rb @@ -15,7 +15,7 @@ module Moderator end ::Post.without_timeout do - @posts = ::Post.order("posts.id asc").pending_or_flagged.available_for_moderation(params[:hidden]).tag_match(params[:query]).paginate(params[:page], :limit => per_page) + @posts = ::Post.includes(:disapprovals, :uploader).order("posts.id asc").pending_or_flagged.available_for_moderation(params[:hidden]).tag_match(params[:query]).paginate(params[:page], :limit => per_page) @posts.each # hack to force rails to eager load end respond_with(@posts) @@ -25,7 +25,7 @@ module Moderator cookies.permanent[:moderated] = Time.now.to_i ::Post.without_timeout do - @posts = ::Post.order("posts.id asc").pending_or_flagged.available_for_moderation(false).reorder("random()").limit(RANDOM_COUNT) + @posts = ::Post.includes(:disapprovals, :uploader).order("posts.id asc").pending_or_flagged.available_for_moderation(false).reorder("random()").limit(RANDOM_COUNT) @posts.each # hack to force rails to eager load if @posts.empty? diff --git a/app/views/post_disapprovals/_compact_counts.html.erb b/app/views/post_disapprovals/_compact_counts.html.erb index 9e08a9745..78ced11bc 100644 --- a/app/views/post_disapprovals/_compact_counts.html.erb +++ b/app/views/post_disapprovals/_compact_counts.html.erb @@ -1,17 +1,17 @@ -<% if disapprovals.count > 0 && (CurrentUser.can_approve_posts? || post.created_at < 3.days.ago) %> - <% if disapprovals.breaks_rules.count > 0 %> - (breaks rules: <%= disapprovals.breaks_rules.count %>) +<% if CurrentUser.can_approve_posts? || post.created_at < 3.days.ago %> + <% if disapprovals.map(&:reason).grep("breaks_rules").count > 0 %> + (breaks rules: <%= disapprovals.map(&:reason).grep("breaks_rules").count %>) <% end %> - <% if disapprovals.poor_quality.count > 0 %> - (poor quality: <%= disapprovals.poor_quality.count %>) + <% if disapprovals.map(&:reason).grep("poor_quality").count > 0 %> + (poor quality: <%= disapprovals.map(&:reason).grep("poor_quality").count %>) <% end %> - <% if disapprovals.disinterest.count > 0 %> - (no interest: <%= disapprovals.disinterest.count %>) + <% if disapprovals.map(&:reason).grep(/disinterest|legacy/).count > 0 %> + (no interest: <%= disapprovals.map(&:reason).grep(/disinterest|legacy/).count %>) <% end %> - <% if disapprovals.with_message.any? %> + <% if disapprovals.map(&:message).any?(&:present?) %> (messages: <%= disapprovals.map(&:message).select(&:present?).map { |msg| format_text(msg, ragel: true, inline: true) }.to_sentence.html_safe %>) <% end %> <% end %> diff --git a/app/views/post_disapprovals/_counts.html.erb b/app/views/post_disapprovals/_counts.html.erb index 612e4f7e7..f858c96af 100644 --- a/app/views/post_disapprovals/_counts.html.erb +++ b/app/views/post_disapprovals/_counts.html.erb @@ -1,20 +1,20 @@ -<% if disapprovals.count > 0 && (CurrentUser.can_approve_posts? || post.created_at < 3.days.ago) %> +<% if CurrentUser.can_approve_posts? || post.created_at < 3.days.ago %>

- It has been reviewed by <%= pluralize disapprovals.count, "moderator" %>. + It has been reviewed by <%= pluralize disapprovals.length, "moderator" %>. - <% if disapprovals.breaks_rules.count > 0 %> - <%= disapprovals.breaks_rules.count %> believe it breaks the rules. + <% if disapprovals.map(&:reason).grep("breaks_rules").count > 0 %> + <%= disapprovals.map(&:reason).grep("breaks_rules").count %> believe it breaks the rules. <% end %> - <% if disapprovals.poor_quality.count > 0 %> - <%= disapprovals.poor_quality.count %> believe it has poor quality. + <% if disapprovals.map(&:reason).grep("poor_quality").count > 0 %> + <%= disapprovals.map(&:reason).grep("poor_quality").count %> believe it has poor quality. <% end %> - <% if disapprovals.disinterest.count > 0 %> - <%= disapprovals.disinterest.count %> did not like the post enough to approve it. + <% if disapprovals.map(&:reason).grep(/disinterest|legacy/).count > 0 %> + <%= disapprovals.map(&:reason).grep(/disinterest|legacy/).count %> did not like the post enough to approve it. <% end %> - <% if disapprovals.with_message.any? %> + <% if disapprovals.map(&:message).any?(&:present?) %> Messages: <%= disapprovals.map(&:message).select(&:present?).map { |msg| format_text(msg, ragel: true, inline: true) }.to_sentence.html_safe %>. <% end %>

From b80976bce716f05b616ce5d10218bc1a98ff0b31 Mon Sep 17 00:00:00 2001 From: evazion Date: Fri, 24 Feb 2017 20:59:21 -0600 Subject: [PATCH 3/3] modqueue: link tags, like they are in /comments. --- app/presenters/post_presenter.rb | 14 ++++++++++---- app/presenters/tag_set_presenter.rb | 11 +++++++++++ app/views/comments/partials/index/_header.html.erb | 6 +----- app/views/moderator/post/queues/show.html.erb | 2 +- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/app/presenters/post_presenter.rb b/app/presenters/post_presenter.rb index adf3a1b9a..9cfa5e712 100644 --- a/app/presenters/post_presenter.rb +++ b/app/presenters/post_presenter.rb @@ -95,6 +95,10 @@ class PostPresenter < Presenter @post = post end + def tag_set_presenter + @tag_set_presenter ||= TagSetPresenter.new(@post.tag_array) + end + def preview_html PostPresenter.preview(@post) end @@ -170,13 +174,15 @@ class PostPresenter < Presenter end def tag_list_html(template, options = {}) - @tag_set_presenter ||= TagSetPresenter.new(@post.tag_array) - @tag_set_presenter.tag_list_html(template, options.merge(:show_extra_links => CurrentUser.user.is_gold?)) + tag_set_presenter.tag_list_html(template, options.merge(:show_extra_links => CurrentUser.user.is_gold?)) end def split_tag_list_html(template, options = {}) - @tag_set_presenter ||= TagSetPresenter.new(@post.tag_array) - @tag_set_presenter.split_tag_list_html(template, options.merge(:show_extra_links => CurrentUser.user.is_gold?)) + tag_set_presenter.split_tag_list_html(template, options.merge(:show_extra_links => CurrentUser.user.is_gold?)) + end + + def inline_tag_list_html(template) + tag_set_presenter.inline_tag_list(template) end def has_nav_links?(template) diff --git a/app/presenters/tag_set_presenter.rb b/app/presenters/tag_set_presenter.rb index 2321bc03f..a09d3e586 100644 --- a/app/presenters/tag_set_presenter.rb +++ b/app/presenters/tag_set_presenter.rb @@ -64,6 +64,17 @@ class TagSetPresenter < Presenter html.html_safe end + # compact (horizontal) list, as seen in the /comments index. + def inline_tag_list(template) + @tags.map do |tag_name| + <<-EOS + + #{template.link_to(tag_name.tr("_", " "), template.posts_path(tags: tag_name))} + + EOS + end.join.html_safe + end + private def general_tags @general_tags ||= categories.select {|k, v| v == Tag.categories.general} diff --git a/app/views/comments/partials/index/_header.html.erb b/app/views/comments/partials/index/_header.html.erb index 0e0e1ce02..1815dc23b 100644 --- a/app/views/comments/partials/index/_header.html.erb +++ b/app/views/comments/partials/index/_header.html.erb @@ -24,11 +24,7 @@
Tags - <% post.tag_array.each do |tag_name| %> - - <%= link_to(tag_name.tr("_", " "), posts_path(:tags => tag_name)) %> - - <% end %> + <%= post.presenter.inline_tag_list_html(self) %>
diff --git a/app/views/moderator/post/queues/show.html.erb b/app/views/moderator/post/queues/show.html.erb index 1b9fe1aba..f23b1714b 100644 --- a/app/views/moderator/post/queues/show.html.erb +++ b/app/views/moderator/post/queues/show.html.erb @@ -60,7 +60,7 @@ Hidden: <%= render "post_disapprovals/compact_counts", :disapprovals => post.disapprovals, :post => post %>
  • Source: <%= post.source %>
  • -
  • Tags: <%= post.tag_string %>
  • +
  • Tags: <%= post.presenter.inline_tag_list_html(self) %>