diff --git a/app/controllers/moderator/post/approvals_controller.rb b/app/controllers/moderator/post/approvals_controller.rb
index dfaa783cb..e813eaf93 100644
--- a/app/controllers/moderator/post/approvals_controller.rb
+++ b/app/controllers/moderator/post/approvals_controller.rb
@@ -1,6 +1,8 @@
module Moderator
module Post
class ApprovalsController < ApplicationController
+ before_filter :janitor_only
+
def create
@post = ::Post.find(params[:post_id])
@post.approve!
diff --git a/app/controllers/moderator/post/disapprovals_controller.rb b/app/controllers/moderator/post/disapprovals_controller.rb
index d1421cec2..830fd7d09 100644
--- a/app/controllers/moderator/post/disapprovals_controller.rb
+++ b/app/controllers/moderator/post/disapprovals_controller.rb
@@ -1,14 +1,11 @@
module Moderator
module Post
class DisapprovalsController < ApplicationController
+ before_filter :janitor_only
+
def create
@post = ::Post.find(params[:post_id])
@post_disapproval = PostDisapproval.create(:post => @post, :user => CurrentUser.user)
- if @post_disapproval.errors.any?
- raise ::Post::DisapprovalError.new(@post_disapproval.errors.full_messages)
- end
-
- # js: redirect to dashboard
end
end
end
diff --git a/app/controllers/moderator/post/posts_controller.rb b/app/controllers/moderator/post/posts_controller.rb
index 914347e83..7cca91dd2 100644
--- a/app/controllers/moderator/post/posts_controller.rb
+++ b/app/controllers/moderator/post/posts_controller.rb
@@ -1,6 +1,9 @@
module Moderator
module Post
class PostsController < ApplicationController
+ before_filter :janitor_only, :only => [:delete, :undelete]
+ before_filter :admin_only, :only => [:annihilate]
+
def delete
@post = ::Post.find(params[:id])
@post.delete!
@@ -10,6 +13,11 @@ module Moderator
@post = ::Post.find(params[:id])
@post.undelete!
end
+
+ def annihilate
+ @post = ::Post.find(params[:id])
+ @post.annihilate!
+ end
end
end
end
diff --git a/app/models/post.rb b/app/models/post.rb
index a13c5b7f3..41b446ce9 100644
--- a/app/models/post.rb
+++ b/app/models/post.rb
@@ -893,6 +893,11 @@ class Post < ActiveRecord::Base
end
module DeletionMethods
+ def annihilate!
+ delete!
+ destroy
+ end
+
def delete!
Post.transaction do
give_favorites_to_parent
diff --git a/app/views/moderator/post/approvals/create.js.erb b/app/views/moderator/post/approvals/create.js.erb
index 9593aaab1..b8b15779a 100644
--- a/app/views/moderator/post/approvals/create.js.erb
+++ b/app/views/moderator/post/approvals/create.js.erb
@@ -1 +1,6 @@
-$("#post-<%= @post.id %>").remove();
+$("#c-posts #approve").hide();
+$("#c-posts #disapprove").hide();
+$("#c-posts #flag").show();
+
+$("#c-post-moderation #post-<%= @post.id %>").hide();
+Danbooru.notice("Post was approved");
\ No newline at end of file
diff --git a/app/views/moderator/post/disapprovals/create.js.erb b/app/views/moderator/post/disapprovals/create.js.erb
index 9593aaab1..344022e77 100644
--- a/app/views/moderator/post/disapprovals/create.js.erb
+++ b/app/views/moderator/post/disapprovals/create.js.erb
@@ -1 +1,13 @@
-$("#post-<%= @post.id %>").remove();
+<% if @post_disapproval.errors.any? %>
+
+Danbooru.j_error("Error: " + "<%= j @post_disapproval.errors.full_messages.join("; ") %>");
+
+<% else %>
+
+$("#c-posts #approve").hide();
+$("#c-posts #disapprove").hide();
+
+$("#c-post-moderation #post-<%= @post.id %>").hide();
+Danbooru.notice("Post was disapproved");
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/moderator/post/posts/annihilate.js.erb b/app/views/moderator/post/posts/annihilate.js.erb
new file mode 100644
index 000000000..85bb8da47
--- /dev/null
+++ b/app/views/moderator/post/posts/annihilate.js.erb
@@ -0,0 +1 @@
+Danbooru.notice("Post was annihilated");
\ No newline at end of file
diff --git a/app/views/moderator/post/posts/delete.js.erb b/app/views/moderator/post/posts/delete.js.erb
index 9593aaab1..00c67338c 100644
--- a/app/views/moderator/post/posts/delete.js.erb
+++ b/app/views/moderator/post/posts/delete.js.erb
@@ -1 +1,4 @@
-$("#post-<%= @post.id %>").remove();
+$("#c-posts #delete").hide();
+$("#c-posts #undelete").show();
+$("#c-post-moderation #post-<%= @post.id %>").remove();
+Danbooru.notice("Post was deleted");
\ No newline at end of file
diff --git a/app/views/moderator/post/posts/undelete.js.erb b/app/views/moderator/post/posts/undelete.js.erb
index e69de29bb..cffae23a1 100644
--- a/app/views/moderator/post/posts/undelete.js.erb
+++ b/app/views/moderator/post/posts/undelete.js.erb
@@ -0,0 +1,3 @@
+$("#c-posts #delete").show();
+$("#c-posts #undelete").hide();
+Danbooru.notice("Post was undeleted");
\ No newline at end of file
diff --git a/app/views/post_moderation/approval_error.js.erb b/app/views/post_moderation/approval_error.js.erb
deleted file mode 100644
index 2879b7389..000000000
--- a/app/views/post_moderation/approval_error.js.erb
+++ /dev/null
@@ -1 +0,0 @@
-Danbooru.j_error(<%= @exception.message.to_json.html_safe %>);
diff --git a/app/views/post_moderation/approve.js.erb b/app/views/post_moderation/approve.js.erb
deleted file mode 100644
index 91aa2446a..000000000
--- a/app/views/post_moderation/approve.js.erb
+++ /dev/null
@@ -1,5 +0,0 @@
-$("#c-posts a#approve").hide();
-$("#c-posts a#disapprove").hide();
-$("#c-posts a#flag").show();
-
-$("#c-post-moderation #post-<%= @post.id %>").hide();
diff --git a/app/views/post_moderation/delete.js.erb b/app/views/post_moderation/delete.js.erb
deleted file mode 100644
index ee0172f86..000000000
--- a/app/views/post_moderation/delete.js.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-$("a#delete").hide();
-$("a#undelete").show();
diff --git a/app/views/post_moderation/disapproval_error.js.erb b/app/views/post_moderation/disapproval_error.js.erb
deleted file mode 100644
index e96e2214d..000000000
--- a/app/views/post_moderation/disapproval_error.js.erb
+++ /dev/null
@@ -1 +0,0 @@
-Danbooru.j_error("You have already disapproved this post");
diff --git a/app/views/post_moderation/disapprove.js b/app/views/post_moderation/disapprove.js
deleted file mode 100644
index 2abed7c20..000000000
--- a/app/views/post_moderation/disapprove.js
+++ /dev/null
@@ -1,4 +0,0 @@
-$("#c-posts a#approve").hide();
-$("#c-posts a#disapprove").hide();
-
-$("#c-post-moderation #post-<%= @post.id %>").hide();
diff --git a/app/views/post_moderation/moderate.html.erb b/app/views/post_moderation/moderate.html.erb
deleted file mode 100644
index c79cfa205..000000000
--- a/app/views/post_moderation/moderate.html.erb
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
- <%= form_tag(post_moderation_moderate_path, :method => :get) do %>
- <%= text_field_tag "query", params[:query], :size => 40 %>
- <%= submit_tag "Search" %>
- <% end %>
-
-
-
-
Moderation Queue
-
- <% @posts.each do |post| %>
-
-
- <%= link_to(image_tag(post.medium_file_url), post_path(post)) %>
-
-
-
-
- <%= link_to "Approve", post_moderation_approve_path(:post_id => post.id), :remote => true, :method => :put %> | <%= link_to "Disapprove", post_moderation_disapprove_path(:post_id => post.id), :remote => true, :method => :put %>
- Rating: <%= post.pretty_rating %>
- Score: <%= post.score %>
- Uploader: <%= link_to(post.uploader.name, user_path(post.uploader_id)) %> <%= time_ago_in_words(post.created_at) %> ago
- <% if post.is_flagged? %>
- Flagged: <%= post_flag_reason(post) %>
- <% end %>
- <% if (post.is_flagged? || post.is_deleted?) && post.appeals.any? %>
- Appeals: <%= post_appeal_reason(post) %>
- <% end %>
- Disapprovals: <%= post.disapprovals.count %>
- Tags: <%= post.tag_string %>
-
-
-
-
-
- <% end %>
-
-
-
-
diff --git a/app/views/post_moderation/undelete.js.erb b/app/views/post_moderation/undelete.js.erb
deleted file mode 100644
index 0f7628fc9..000000000
--- a/app/views/post_moderation/undelete.js.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-$("a#delete").show();
-$("a#undelete").hide();
-$("img#undelete-wait").hide();
diff --git a/app/views/posts/partials/show/_options.html.erb b/app/views/posts/partials/show/_options.html.erb
index c6a4690b7..5021b786b 100644
--- a/app/views/posts/partials/show/_options.html.erb
+++ b/app/views/posts/partials/show/_options.html.erb
@@ -16,5 +16,10 @@
<%= link_to "Undelete", undelete_moderator_post_post_path(:post_id => post.id), :remote => true, :method => :post, :id => "undelete" %>
<%= link_to "Delete", delete_moderator_post_post_path(:post_id => post.id), :remote => true, :method => :post, :id => "delete" %>
<% end %>
+
+ <% if CurrentUser.is_admin? %>
+ <%= link_to "Annihilate", annihilate_moderator_post_post_path(:post_id => post.id), :remote => true, :method => :post, :id => "annihilate", :confirm => "This will permanently delete this post (meaning the file will be deleted). Are you sure you want to annihilate this post?" %>
+ <% end %>
+
<%= link_to "Pool", "#", :id => "pool" %>
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index b87bed740..13b9892c3 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -17,6 +17,7 @@ Danbooru::Application.routes.draw do
resource :disapproval, :only => [:create]
resources :posts, :only => [:delete, :undelete] do
member do
+ post :annihilate
post :delete
post :undelete
end