refactored post mod queue

This commit is contained in:
albert
2011-07-22 13:35:40 -04:00
parent e06e17c4ba
commit 4828cef27d
18 changed files with 233 additions and 71 deletions

View File

@@ -917,9 +917,10 @@ div#c-wiki-pages {
/*** Post Moderation ***/
div#c-post-moderation {
div#c-moderator-post-dashboards {
article {
margin-bottom: 4em;
overflow: hidden;
}
aside {

View File

@@ -0,0 +1,10 @@
module Moderator
module Post
class ApprovalsController < ApplicationController
def create
@post = ::Post.find(params[:post_id])
@post.approve!
end
end
end
end

View File

@@ -0,0 +1,13 @@
module Moderator
module Post
class DashboardsController < ApplicationController
respond_to :html, :json
def show
@search = ::Post.order("id asc").pending_or_flagged.available_for_moderation.search(:tag_match => params[:query])
@posts = @search.paginate(params[:page])
respond_with(@posts)
end
end
end
end

View File

@@ -0,0 +1,15 @@
module Moderator
module Post
class DisapprovalsController < ApplicationController
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
end

View File

@@ -0,0 +1,15 @@
module Moderator
module Post
class PostsController < ApplicationController
def delete
@post = ::Post.find(params[:id])
@post.delete!
end
def undelete
@post = ::Post.find(params[:id])
@post.undelete!
end
end
end
end

View File

@@ -1,60 +0,0 @@
class PostModerationController < ApplicationController
# before_filter :janitor_only
# rescue_from Post::ApprovalError, :with => :approval_error
# rescue_from Post::DisapprovalError, :with => :disapproval_error
def moderate
@search = Post.order("id asc").pending_or_flagged.available_for_moderation.search(:tag_match => params[:query])
@posts = @search.paginate(:page => params[:page])
respond_to do |format|
format.html
format.json {render :json => @posts.to_json}
end
end
def approve
@post = Post.find(params[:post_id])
@post.approve!
respond_to do |format|
format.html {redirect_to(post_moderation_moderate_path, :notice => "Post approved")}
format.js
end
end
def disapprove
@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
respond_to do |format|
format.html {redirect_to(post_moderation_moderate_path, :notice => "Post disapproved")}
format.js
end
end
def delete
@post = Post.find(params[:post_id])
@post.delete!
end
def undelete
@post = Post.find(params[:post_id])
@post.undelete!
end
private
def disapproval_error(e)
respond_to do |format|
format.html {redirect_to(post_moderation_moderate_path, :notice => "You have already disapproved this post")}
format.js {render :action => "disapproval_error"}
end
end
def approval_error(e)
respond_to do |format|
format.html {redirect_to(post_moderation_moderate_path, :notice => e.message)}
format.js {@exception = e; render :action => "approval_error"}
end
end
end

View File

@@ -2,9 +2,9 @@ class PostDisapproval < ActiveRecord::Base
belongs_to :post
belongs_to :user
validates_uniqueness_of :post_id, :scope => [:user_id]
def self.prune!
joins(:post).where("posts.is_pending = FALSE AND posts.is_flagged = FALSE").select("post_disapprovals.*").each do |post_disapproval|
joins(:post).where("posts.is_pending = FALSE AND posts.is_flagged = FALSE").each do |post_disapproval|
post_disapproval.destroy
end
end

View File

@@ -0,0 +1 @@
$("#post-<%= @post.id %>").remove();

View File

@@ -0,0 +1,40 @@
<div id="c-moderator-post-dashboards">
<div id="a-show">
<div id="search">
<%= form_tag(moderator_post_dashboard_path, :method => :get) do %>
<%= text_field_tag "query", params[:query], :size => 40 %>
<%= submit_tag "Search" %>
<% end %>
</div>
<div>
<h1>Moderation Queue</h1>
<% @posts.each do |post| %>
<article id="post-<%= post.id %>">
<aside>
<%= link_to(image_tag(post.medium_file_url), post_path(post)) %>
</aside>
<section>
<ul>
<li><%= link_to "Approve", moderator_post_approval_path(:post_id => post.id), :remote => true, :method => :post %> | <%= link_to "Disapprove", moderator_post_disapproval_path(:post_id => post.id), :remote => true, :method => :post %></li>
<li>Rating: <%= post.rating %></li>
<li>Score: <%= post.score %></li>
<li>Uploader: <%= link_to(post.uploader.name, user_path(post.uploader_id)) %> <%= time_ago_in_words(post.created_at) %> ago</li>
<% if post.is_flagged? %>
<li>Flagged: <%= post_flag_reason(post) %></li>
<% end %>
<% if (post.is_flagged? || post.is_deleted?) && post.appeals.any? %>
<li>Appeals: <%= post_appeal_reason(post) %></li>
<% end %>
<li>Disapprovals: <%= post.disapprovals.count %></li>
<li>Tags: <%= post.tag_string %></li>
</ul>
</section>
</article>
<% end %>
</div>
</div>
</div>

View File

@@ -0,0 +1 @@
$("#post-<%= @post.id %>").remove();

View File

@@ -0,0 +1 @@
$("#post-<%= @post.id %>").remove();

View File

@@ -0,0 +1,5 @@
<% if @error %>
alert("<%= escape_javascript @error.to_s %>");
<% else %>
$("#score-for-post-<%= @post.id %> span").text(<%= @post.score %>);
<% end %>