145 lines
5 KiB
Ruby
145 lines
5 KiB
Ruby
class UserBlocksController < ApplicationController
|
|
layout 'site'
|
|
|
|
before_filter :authorize_web
|
|
before_filter :set_locale
|
|
before_filter :require_user, :only => [:new, :create, :edit, :delete]
|
|
before_filter :require_moderator, :only => [:new, :create, :edit, :delete]
|
|
|
|
def index
|
|
@user_blocks_pages, @user_blocks = paginate(:user_blocks,
|
|
:include => [:user, :moderator, :revoker],
|
|
:order => "user_blocks.end_at DESC",
|
|
:per_page => 20)
|
|
end
|
|
|
|
def show
|
|
@user_block = UserBlock.find(params[:id])
|
|
|
|
if @user and @user.id == @user_block.user_id
|
|
@user_block.needs_view = false
|
|
@user_block.save!
|
|
end
|
|
end
|
|
|
|
def new
|
|
@user_block = UserBlock.new
|
|
@display_name = params[:display_name]
|
|
@this_user = User.find_by_display_name(@display_name, :conditions => {:visible => true})
|
|
end
|
|
|
|
# GET /user_blocks/1/edit
|
|
def edit
|
|
@user_block = UserBlock.find(params[:id])
|
|
params[:user_block_period] = ((@user_block.end_at - Time.now.getutc) / 1.hour).ceil.to_s
|
|
end
|
|
|
|
def create
|
|
@display_name = params[:display_name]
|
|
@this_user = User.find_by_display_name(@display_name, :conditions => {:visible => true})
|
|
block_period = [UserBlock::PERIODS.max, params[:user_block_period].to_i].min
|
|
|
|
@user_block = UserBlock.new(:user_id => @this_user.id,
|
|
:moderator_id => @user.id,
|
|
:reason => params[:user_block][:reason],
|
|
:end_at => Time.now.getutc() + block_period.hours,
|
|
:needs_view => params[:user_block][:needs_view])
|
|
|
|
if (@this_user and @user.moderator? and
|
|
params[:tried_contacting] == "yes" and
|
|
params[:tried_waiting] == "yes" and
|
|
block_period >= 0)
|
|
if @user_block.save
|
|
flash[:notice] = t('user_block.create.flash', :name => @display_name)
|
|
redirect_to @user_block
|
|
else
|
|
render :action => "new"
|
|
end
|
|
else
|
|
if !@user.moderator?
|
|
flash[:notice] = t('user_block.create.not_a_moderator')
|
|
elsif params[:tried_contacting] != "yes"
|
|
flash[:notice] = t('user_block.create.try_contacting')
|
|
elsif params[:tried_waiting] != "yes"
|
|
flash[:notice] = t('user_block.create.try_waiting')
|
|
else
|
|
flash[:notice] = t('user_block.create.bad_parameters')
|
|
end
|
|
@display_name = @this_user.nil? ? '' : @this_user.display_name
|
|
|
|
render :action => "new"
|
|
end
|
|
end
|
|
|
|
def update
|
|
@user_block = UserBlock.find(params[:id])
|
|
block_period = [72, params[:user_block_period].to_i].min
|
|
|
|
if @user_block.moderator_id != @user.id
|
|
flash[:notice] = t('user_block.update.only_creator_can_edit')
|
|
redirect_to(@user_block)
|
|
|
|
elsif !@user_block.active?
|
|
flash[:notice] = t('user_block.update.block_expired')
|
|
redirect_to(@user_block)
|
|
|
|
elsif @user_block.update_attributes({ :end_at => Time.now.getutc() + block_period.hours,
|
|
:reason => params[:user_block][:reason],
|
|
:needs_view => params[:user_block][:needs_view] })
|
|
flash[:notice] = t('user_block.update.success')
|
|
redirect_to(@user_block)
|
|
else
|
|
render :action => "edit"
|
|
end
|
|
end
|
|
|
|
##
|
|
# revokes the block, setting the end_time to now
|
|
def revoke
|
|
@user_block = UserBlock.find(params[:id])
|
|
|
|
if !@user.moderator?
|
|
flash[:notice] = t('user_block.create.not_a_moderator')
|
|
redirect_to @user_block
|
|
|
|
elsif params[:confirm]
|
|
if @user_block.revoke!
|
|
flash[:notice] = t'user_block.revoke.flash'
|
|
redirect_to(@user_block)
|
|
else
|
|
flash[:notice] = t'user_block.revoke.error'
|
|
render :action => "edit"
|
|
end
|
|
end
|
|
end
|
|
|
|
##
|
|
# shows a list of all the blocks on the given user
|
|
def blocks_on
|
|
@this_user = User.find_by_display_name(params[:display_name])
|
|
|
|
@user_blocks_pages, @user_blocks = paginate(:user_blocks,
|
|
:include => [:user, :moderator, :revoker],
|
|
:conditions => {:user_id => @this_user.id},
|
|
:order => "user_blocks.end_at DESC",
|
|
:per_page => 20)
|
|
end
|
|
|
|
##
|
|
# shows a list of all the blocks by the given user.
|
|
def blocks_by
|
|
@this_user = User.find_by_display_name(params[:display_name])
|
|
|
|
@user_blocks_pages, @user_blocks = paginate(:user_blocks,
|
|
:include => [:user, :moderator, :revoker],
|
|
:conditions => {:moderator_id => @this_user.id},
|
|
:order => "user_blocks.end_at DESC",
|
|
:per_page => 20)
|
|
end
|
|
|
|
private
|
|
def require_moderator
|
|
redirect_to "/403.html" unless @user.moderator?
|
|
end
|
|
|
|
end
|