diff --git a/app/controllers/post_approvals_controller.rb b/app/controllers/post_approvals_controller.rb new file mode 100644 index 000000000..ed2262e24 --- /dev/null +++ b/app/controllers/post_approvals_controller.rb @@ -0,0 +1,8 @@ +class PostApprovalsController < ApplicationController + respond_to :html, :xml, :json + + def index + @post_approvals = PostApproval.includes(:post, :user).search(search_params).paginate(params[:page], limit: params[:limit]) + respond_with(@post_approvals) + end +end diff --git a/app/models/post_approval.rb b/app/models/post_approval.rb index e93c99077..ce1e5d7f5 100644 --- a/app/models/post_approval.rb +++ b/app/models/post_approval.rb @@ -5,10 +5,6 @@ class PostApproval < ApplicationRecord validate :validate_approval after_create :approve_post - def self.prune! - where("created_at < ?", 1.month.ago).delete_all - end - def validate_approval if post.is_status_locked? errors.add(:post, "is locked and cannot be approved") @@ -33,4 +29,26 @@ class PostApproval < ApplicationRecord post.flags.each(&:resolve!) post.update(approver: user, is_flagged: false, is_pending: false, is_deleted: false) end + + concerning :SearchMethods do + class_methods do + def post_tags_match(query) + PostQueryBuilder.new(query).build(self.joins(:post)) + end + + def search(params) + q = super + params[:user_id] = User.name_to_id(params[:user_name]) if params[:user_name] + + if params[:post_tags_match].present? + q = q.post_tags_match(params[:post_tags_match]) + end + + q = q.attribute_matches(:user_id, params[:user_id]) + q = q.attribute_matches(:post_id, params[:post_id]) + + q.apply_default_order(params) + end + end + end end diff --git a/app/models/post_event.rb b/app/models/post_event.rb index 8c57bb8ab..26a8cd1af 100644 --- a/app/models/post_event.rb +++ b/app/models/post_event.rb @@ -4,11 +4,11 @@ class PostEvent include ActiveModel::Serializers::Xml attr_accessor :event - delegate :creator, :creator_id, :reason, :is_resolved, :created_at, to: :event + delegate :created_at, to: :event def self.find_for_post(post_id) post = Post.find(post_id) - (post.appeals + post.flags).sort_by(&:created_at).reverse.map { |e| new(event: e) } + (post.appeals + post.flags + post.approvals).sort_by(&:created_at).reverse.map { |e| new(event: e) } end def type_name @@ -17,6 +17,8 @@ class PostEvent "flag" when PostAppeal "appeal" + when PostApproval + "approval" end end @@ -24,9 +26,25 @@ class PostEvent type_name.first end + def reason + event.try(:reason) || "" + end + + def is_resolved + event.try(:is_resolved) || false + end + + def creator_id + event.try(:creator_id) || event.try(:user_id) + end + + def creator + event.try(:creator) || event.try(:user) + end + def is_creator_visible?(user = CurrentUser.user) case event - when PostAppeal + when PostAppeal, PostApproval true when PostFlag flag = event diff --git a/app/views/post_approvals/index.html.erb b/app/views/post_approvals/index.html.erb new file mode 100644 index 000000000..1c7d2e13b --- /dev/null +++ b/app/views/post_approvals/index.html.erb @@ -0,0 +1,42 @@ +
+
+

Approvals

+ <%= render "posts/partials/common/inline_blacklist" %> + + <%= simple_form_for(:search, url: post_approvals_path, method: :get, defaults: { required: false }, html: { class: "inline-form" }) do |f| %> + <%= f.input :user_name, label: "Approver", input_html: { value: params[:search][:user_name] } %> + <%= f.input :post_tags_match, label: "Tags", input_html: { value: params[:search][:post_tags_match], data: { autocomplete: "tag-query" } } %> + <%= f.submit "Search" %> + <% end %> + + + + + + + + + + <% @post_approvals.each do |post_approval| %> + + + + + + <% end %> + +
PostApprover
+ <%= PostPresenter.preview(post_approval.post, :tags => "status:any") %> + + <%= link_to_user post_approval.user %> + <%= link_to "ยป", post_approvals_path(search: params[:search].merge(user_name: post_approval.user.name)) %> +
<%= time_ago_in_words_tagged post_approval.created_at %> +
+ + <%= numbered_paginator(@post_approvals) %> +
+
+ +<% content_for(:page_title) do %> + Approvals - <%= Danbooru.config.app_name %> +<% end %> diff --git a/app/views/post_events/index.html.erb b/app/views/post_events/index.html.erb index c04d46fd6..8ea0685d8 100644 --- a/app/views/post_events/index.html.erb +++ b/app/views/post_events/index.html.erb @@ -1,15 +1,14 @@
-

Flags & Appeals

+

Post Events

- +
- - - - - + + + + @@ -22,16 +21,10 @@ <% else %> hidden <% end %> +
<%= time_ago_in_words_tagged event.created_at %> - - - + + <% end %> diff --git a/app/views/static/site_map.html.erb b/app/views/static/site_map.html.erb index 3dbeb4168..731ac92c7 100644 --- a/app/views/static/site_map.html.erb +++ b/app/views/static/site_map.html.erb @@ -6,12 +6,8 @@
  • Posts

  • <%= link_to("Help", wiki_pages_path(:title => "help:posts")) %>
  • <%= link_to("Listing", posts_path) %>
  • -
  • <%= link_to("Changes", post_versions_path) %>
  • <%= link_to("Upload", new_upload_path) %>
  • <%= link_to("Upload Listing", uploads_path) %>
  • -
  • <%= link_to("Appeals", post_appeals_path) %>
  • -
  • <%= link_to("Flags", post_flags_path) %>
  • -
  • <%= link_to("Replacements", post_replacements_path) %>
  • <%= link_to("Popular", popular_explore_posts_path) %>
  • <%= link_to("Most Viewed", viewed_explore_posts_path) %>
  • <% if CurrentUser.can_approve_posts? %> @@ -21,6 +17,14 @@
  • <%= link_to("Mass Edit", edit_moderator_tag_path) %>
  • <% end %> +
    TypeCreatorReasonResolved?DateTypeUserDescriptionResolved?
    <%= format_text event.reason %> - <% if event.is_resolved %> - yes - <% else %> - no - <% end %> - <%= compact_time event.created_at %><%= format_text event.reason %><%= event.is_resolved %>