Normally we skip doing page counts on index pages when there aren't any search filters. This is on the assumption that most index pages have more than 1000 pages (20,000 results), so it's not worth counting them exactly. This isn't always true, so here we turn on full counts on certain index pages known to be small.
60 lines
1.2 KiB
Ruby
60 lines
1.2 KiB
Ruby
class BansController < ApplicationController
|
|
before_action :moderator_only, :except => [:show, :index]
|
|
respond_to :html, :xml, :json
|
|
helper_method :search_params
|
|
|
|
def new
|
|
@ban = Ban.new(ban_params(:create))
|
|
end
|
|
|
|
def edit
|
|
@ban = Ban.find(params[:id])
|
|
end
|
|
|
|
def index
|
|
@bans = Ban.paginated_search(params, count_pages: true)
|
|
respond_with(@bans) do |fmt|
|
|
fmt.html { @bans = @bans.includes(:user, :banner) }
|
|
end
|
|
end
|
|
|
|
def show
|
|
@ban = Ban.find(params[:id])
|
|
respond_with(@ban)
|
|
end
|
|
|
|
def create
|
|
@ban = Ban.create(ban_params(:create))
|
|
|
|
if @ban.errors.any?
|
|
render :action => "new"
|
|
else
|
|
redirect_to ban_path(@ban), :notice => "Ban created"
|
|
end
|
|
end
|
|
|
|
def update
|
|
@ban = Ban.find(params[:id])
|
|
if @ban.update(ban_params(:update))
|
|
redirect_to ban_path(@ban), :notice => "Ban updated"
|
|
else
|
|
render :action => "edit"
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@ban = Ban.find(params[:id])
|
|
@ban.destroy
|
|
redirect_to bans_path, :notice => "Ban destroyed"
|
|
end
|
|
|
|
private
|
|
|
|
def ban_params(context)
|
|
permitted_params = %i[reason duration expires_at]
|
|
permitted_params += %i[user_id user_name] if context == :create
|
|
|
|
params.fetch(:ban, {}).permit(permitted_params)
|
|
end
|
|
end
|