diaspora/app/controllers/post_report_controller.rb
Lukas Matt 5c9a3aaf3e Added post report feature
You can report a single post by clicking the correct icon in the controler section

Workflow:
* Report a post as offensive
* Trigger alerts to every pod-admin
* Pod-admin can review it in the admin interface
* Delete the post or mark it as reviewed
2014-01-14 15:00:55 -05:00

61 lines
1.5 KiB
Ruby

class PostReportController < ApplicationController
before_filter :authenticate_user!
before_filter :redirect_unless_admin, :except => [:create]
def index
@post_report = PostReport.where(reviewed: false).all
end
def update
if PostReport.exists?(post_id: params[:id])
mark_as_reviewed
end
redirect_to :action => :index and return
end
def destroy
if Post.exists?(params[:id])
delete_post
mark_as_reviewed
end
redirect_to :action => :index and return
end
def create
username = current_user.username
unless PostReport.where(post_id: params[:post_id]).exists?(user_id: username)
post = PostReport.new(
:post_id => params[:post_id],
:user_id => username,
:text => params[:text])
result = post.save
status(( 200 if result ) || ( 422 if !result ))
else
status(409)
end
end
private
def delete_post
post = Post.find(params[:id])
current_user.retract(post)
flash[:notice] = I18n.t 'post_report.status.destroyed'
end
def mark_as_reviewed id = params[:id]
posts = PostReport.where(post_id: id)
posts.each do |post|
post.update_attributes(reviewed: true)
end
flash[:notice] = I18n.t 'post_report.status.marked'
end
def status(code)
if code == 200
flash[:notice] = I18n.t 'post_report.status.created'
else
flash[:error] = I18n.t 'post_report.status.failed'
end
render :nothing => true, :status => code
end
end