Post#approve!: signal errors with invalid object instead of exception.

This commit is contained in:
evazion
2017-04-03 13:45:17 -05:00
parent db0bcf08b9
commit 70a7f77a48
4 changed files with 12 additions and 9 deletions

View File

@@ -3,14 +3,13 @@ module Moderator
class ApprovalsController < ApplicationController class ApprovalsController < ApplicationController
before_filter :approver_only before_filter :approver_only
skip_before_filter :api_check skip_before_filter :api_check
respond_to :json, :xml, :js
def create def create
cookies.permanent[:moderated] = Time.now.to_i cookies.permanent[:moderated] = Time.now.to_i
@post = ::Post.find(params[:post_id]) post = ::Post.find(params[:post_id])
if @post.is_deleted? || @post.is_flagged? || @post.is_pending? @approval = post.approve!
@post.approve! respond_with(@approval)
end
rescue ::Post::ApprovalError
end end
end end
end end

View File

@@ -322,7 +322,7 @@ class Post < ActiveRecord::Base
end end
def approve!(approver = CurrentUser.user) def approve!(approver = CurrentUser.user)
approvals.create!(user: approver) approvals.create(user: approver)
end end
def approved_by?(user) def approved_by?(user)

View File

@@ -14,6 +14,10 @@ class PostApproval < ActiveRecord::Base
errors.add(:post, "is locked and cannot be approved") errors.add(:post, "is locked and cannot be approved")
end end
if post.status == "active"
errors.add(:post, "is already active and cannot be approved")
end
if post.uploader == user if post.uploader == user
errors.add(:base, "You cannot approve a post you uploaded") errors.add(:base, "You cannot approve a post you uploaded")
end end

View File

@@ -1,6 +1,6 @@
<% if @post.errors.any? %> <% if @approval.errors.any? %>
Danbooru.error("Error: " + <%= @post.errors.full_messages.join("; ").to_json.html_safe %>); Danbooru.error("Error: " + <%= @approval.errors.full_messages.join("; ").to_json.html_safe %>);
<% else %> <% else %>
@@ -10,7 +10,7 @@ $("#c-posts #flag").show();
$("#pending-approval-notice").hide(); $("#pending-approval-notice").hide();
$("#c-moderator-post-queues #post-<%= @post.id %>").hide(); $("#c-moderator-post-queues #post-<%= @approval.post.id %>").hide();
Danbooru.notice("Post was approved"); Danbooru.notice("Post was approved");
Danbooru.ModQueue.increment_processed(); Danbooru.ModQueue.increment_processed();