Show More
Commit Description:
added test_pair model
Commit Description:
added test_pair model
References:
File last commit:
Show/Diff file:
Action:
app/controllers/problems_controller.rb
| 197 lines
| 4.8 KiB
| text/x-ruby
| RubyLexer
|
|
r0 | class ProblemsController < ApplicationController | ||
before_filter :authenticate, :authorization | ||||
|
r21 | in_place_edit_for :problem, :name | ||
in_place_edit_for :problem, :full_name | ||||
in_place_edit_for :problem, :full_score | ||||
|
r0 | def index | ||
list | ||||
render :action => 'list' | ||||
end | ||||
# GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) | ||||
|
r201 | verify :method => :post, :only => [ :destroy, | ||
:create, :quick_create, | ||||
:do_manage, | ||||
|
r204 | :do_import, | ||
|
r201 | :update ], | ||
|
r0 | :redirect_to => { :action => :list } | ||
def list | ||||
|
r1 | @problems = Problem.find(:all, :order => 'date_added DESC') | ||
|
r0 | end | ||
def show | ||||
@problem = Problem.find(params[:id]) | ||||
end | ||||
def new | ||||
@problem = Problem.new | ||||
|
r92 | @description = nil | ||
|
r0 | end | ||
def create | ||||
@problem = Problem.new(params[:problem]) | ||||
|
r92 | @description = Description.new(params[:description]) | ||
if @description.body!='' | ||||
if !@description.save | ||||
render :action => new and return | ||||
end | ||||
else | ||||
@description = nil | ||||
end | ||||
@problem.description = @description | ||||
|
r0 | if @problem.save | ||
flash[:notice] = 'Problem was successfully created.' | ||||
redirect_to :action => 'list' | ||||
else | ||||
render :action => 'new' | ||||
end | ||||
end | ||||
|
r171 | def quick_create | ||
@problem = Problem.new(params[:problem]) | ||||
@problem.full_name = @problem.name if @problem.full_name == '' | ||||
@problem.full_score = 100 | ||||
@problem.available = false | ||||
@problem.test_allowed = true | ||||
@problem.output_only = false | ||||
@problem.date_added = Time.new | ||||
if @problem.save | ||||
flash[:notice] = 'Problem was successfully created.' | ||||
redirect_to :action => 'list' | ||||
else | ||||
flash[:notice] = 'Error saving problem' | ||||
redirect_to :action => 'list' | ||||
end | ||||
end | ||||
|
r0 | def edit | ||
@problem = Problem.find(params[:id]) | ||||
|
r92 | @description = @problem.description | ||
|
r0 | end | ||
def update | ||||
@problem = Problem.find(params[:id]) | ||||
|
r92 | @description = @problem.description | ||
if @description == nil and params[:description][:body]!='' | ||||
@description = Description.new(params[:description]) | ||||
if !@description.save | ||||
flash[:notice] = 'Error saving description' | ||||
render :action => 'edit' and return | ||||
end | ||||
@problem.description = @description | ||||
elsif @description!=nil | ||||
if !@description.update_attributes(params[:description]) | ||||
flash[:notice] = 'Error saving description' | ||||
render :action => 'edit' and return | ||||
end | ||||
end | ||||
|
r0 | if @problem.update_attributes(params[:problem]) | ||
flash[:notice] = 'Problem was successfully updated.' | ||||
redirect_to :action => 'show', :id => @problem | ||||
else | ||||
render :action => 'edit' | ||||
end | ||||
end | ||||
def destroy | ||||
Problem.find(params[:id]).destroy | ||||
redirect_to :action => 'list' | ||||
end | ||||
|
r147 | def toggle | ||
|
r149 | @problem = Problem.find(params[:id]) | ||
@problem.available = !(@problem.available) | ||||
@problem.save | ||||
|
r0 | end | ||
|
r56 | def turn_all_off | ||
Problem.find(:all, | ||||
:conditions => "available = 1").each do |problem| | ||||
problem.available = false | ||||
problem.save | ||||
end | ||||
redirect_to :action => 'list' | ||||
end | ||||
|
r101 | def turn_all_on | ||
Problem.find(:all, | ||||
:conditions => "available = 0").each do |problem| | ||||
problem.available = true | ||||
problem.save | ||||
end | ||||
redirect_to :action => 'list' | ||||
end | ||||
|
r0 | def stat | ||
@problem = Problem.find(params[:id]) | ||||
|
r100 | if !@problem.available | ||
redirect_to :controller => 'main', :action => 'list' | ||||
else | ||||
@submissions = Submission.find_all_last_by_problem(params[:id]) | ||||
end | ||||
|
r0 | end | ||
|
r201 | |||
def manage | ||||
@problems = Problem.find(:all, :order => 'date_added DESC') | ||||
end | ||||
def do_manage | ||||
if params.has_key? 'change_date_added' | ||||
change_date_added | ||||
end | ||||
redirect_to :action => 'manage' | ||||
end | ||||
|
r204 | def import | ||
end | ||||
def do_import | ||||
@problem, import_log = Problem.new_from_import_form_params(params) | ||||
if @problem.errors.length != 0 | ||||
render :action => 'import' and return | ||||
end | ||||
|
r205 | old_problem = Problem.find_by_name(@problem.name) | ||
if old_problem!=nil | ||||
old_problem.full_name = @problem.full_name | ||||
@problem = old_problem | ||||
flash[:notice] = "The test data has been replaced for problem #{@problem.name}" | ||||
end | ||||
|
r204 | @problem.save | ||
@log = import_log | ||||
end | ||||
|
r201 | ################################## | ||
protected | ||||
def change_date_added | ||||
problems = get_problems_from_params | ||||
year = params[:date_added][:year].to_i | ||||
month = params[:date_added][:month].to_i | ||||
day = params[:date_added][:day].to_i | ||||
date = Date.new(year,month,day) | ||||
problems.each do |p| | ||||
p.date_added = date | ||||
p.save | ||||
end | ||||
end | ||||
def get_problems_from_params | ||||
problems = [] | ||||
params.keys.each do |k| | ||||
if k.index('prob-')==0 | ||||
name, id = k.split('-') | ||||
problems << Problem.find(id) | ||||
end | ||||
end | ||||
problems | ||||
end | ||||
|
r0 | end | ||