mirror of
https://github.com/ENSL/ensl.org.git
synced 2024-12-27 04:51:14 +00:00
121 lines
3.1 KiB
Ruby
121 lines
3.1 KiB
Ruby
class ContestsController < ApplicationController
|
|
before_action :get_contest, only: [:show, :edit, :update, :destroy, :del_map, :scores, :recalc, :confirmed_matches]
|
|
|
|
def index
|
|
# @contests = Contest.all
|
|
@contests_active = Contest.active
|
|
@contests_inactive = Contest.inactive
|
|
end
|
|
|
|
def historical
|
|
case params[:id]
|
|
when "NS1"
|
|
@contests = Contest.all.ordered.includes(:contesters).where("name LIKE ? OR name LIKE ?", "S%:%", "%Night%")
|
|
else
|
|
@contests = Contest.all.ordered.includes(:contesters).where("id > ?", "113")
|
|
end
|
|
end
|
|
|
|
def current
|
|
@contests = Contest.active
|
|
end
|
|
|
|
|
|
def show
|
|
# TODO
|
|
# @friendly = cuser.active_contesters.of_contest(@contest).active.first if cuser
|
|
end
|
|
|
|
def scores
|
|
raise AccessError unless @contest.contest_type == Contest::TYPE_LADDER
|
|
@friendly = params[:friendly] ? @contest.contesters.find(params[:friendly]) : @contest.contesters.first
|
|
@rounds = [@contest.modulus_even, @contest.modulus_3to1, @contest.modulus_4to0]
|
|
@rounds.each_index do |key|
|
|
if params["rounds"] and params["rounds"]["#{key}"]
|
|
@rounds[key] = params["rounds"]["#{key}"].to_f
|
|
end
|
|
end
|
|
@weight = params[:weight] ? params[:weight].to_f : @contest.weight
|
|
end
|
|
|
|
def recalc
|
|
raise AccessError unless @contest.can_update? cuser
|
|
@contest.recalculate
|
|
flash[:notice] = "Contest points recalculated."
|
|
redirect_to_back
|
|
end
|
|
|
|
def new
|
|
@contest = Contest.new
|
|
raise AccessError unless @contest.can_create? cuser
|
|
end
|
|
|
|
def edit
|
|
raise AccessError unless @contest.can_update? cuser
|
|
end
|
|
|
|
def create
|
|
@contest = Contest.new(Contest.params(params, cuser))
|
|
raise AccessError unless @contest.can_create? cuser
|
|
|
|
if @contest.save
|
|
flash[:notice] = t(:contests_create)
|
|
redirect_to @contest
|
|
else
|
|
render :new
|
|
end
|
|
end
|
|
|
|
# FIXME: don't use this kind of update
|
|
def update
|
|
raise AccessError unless @contest.can_update? cuser
|
|
if update_type == "contest"
|
|
if @contest.update_attributes(Contest.params(params, cuser))
|
|
flash[:notice] = t(:contests_update)
|
|
redirect_to @contest
|
|
else
|
|
render :edit
|
|
end
|
|
elsif update_type == "map"
|
|
@contest.maps << Map.find(params[:map])
|
|
render :edit
|
|
elsif update_type == "team"
|
|
contester = Contester.new
|
|
contester.team = Team.find params[:team]
|
|
contester.contest = @contest
|
|
contester.active = true
|
|
if contester.valid?
|
|
contester.save(false)
|
|
else
|
|
@contest.errors.add_to_base contester.errors.full_messages.to_s
|
|
end
|
|
render :edit
|
|
end
|
|
end
|
|
|
|
def del_map
|
|
raise AccessError unless @contest.can_update? cuser
|
|
@contest.maps.delete(Map.find(params[:id2]))
|
|
render :edit
|
|
end
|
|
|
|
def destroy
|
|
raise AccessError unless @contest.can_destroy? cuser
|
|
@contest.destroy
|
|
redirect_to contests_url
|
|
end
|
|
|
|
def confirmed_matches
|
|
@match_props = MatchProposal.confirmed_for_contest(@contest)
|
|
end
|
|
|
|
private
|
|
|
|
def get_contest
|
|
@contest = Contest.find params[:id]
|
|
end
|
|
|
|
def update_type
|
|
params[:type]
|
|
end
|
|
end
|