diff --git a/app/controllers/codejom_controller.rb b/app/controllers/codejom_controller.rb --- a/app/controllers/codejom_controller.rb +++ b/app/controllers/codejom_controller.rb @@ -1,13 +1,37 @@ class CodejomController < ApplicationController before_filter :admin_authorization - before_filter :authenticate def index @user = User.find(session[:user_id]) @problems = Problem.find(:all) - @available_problems = @problems.find_all {|p| not p.available } + @levels = @problems.collect {|p| p.level}.uniq.sort + @available_problems = {} + @levels.each do |level| + @available_problems[level] = [] + end + @problems.find_all {|p| not p.available }.each do |problem| + @available_problems[problem.level] << problem + end @activated_problems = @problems.find_all {|p| p.available } end + def random_problem + level = params[:id].to_i + + problems = Problem.unavailable.level(level).all + puts problems + if problems.length!=0 + if problems.length != 1 + problem = problems[rand(problems.length)] + else + problem = problems[0] + end + problem.available = true + problem.save + end + + redirect_to :action => 'index' + end + end diff --git a/app/controllers/problems_controller.rb b/app/controllers/problems_controller.rb --- a/app/controllers/problems_controller.rb +++ b/app/controllers/problems_controller.rb @@ -6,6 +6,9 @@ in_place_edit_for :problem, :full_name in_place_edit_for :problem, :full_score + # for codejom + in_place_edit_for :problem, :level + def index list render :action => 'list' diff --git a/app/models/problem.rb b/app/models/problem.rb --- a/app/models/problem.rb +++ b/app/models/problem.rb @@ -3,6 +3,13 @@ belongs_to :description has_many :test_pairs, :dependent => :delete_all + named_scope :level, lambda { |level| + { :conditions => { :level => level }} + } + + named_scope :unavailable, { :conditions => { :available => false }} + + validates_presence_of :name validates_format_of :name, :with => /^\w+$/ validates_presence_of :full_name diff --git a/app/views/codejom/index.html.haml b/app/views/codejom/index.html.haml --- a/app/views/codejom/index.html.haml +++ b/app/views/codejom/index.html.haml @@ -1,9 +1,21 @@ %h1 Code Jom Control Panel -%h2= "Available problems (#{@available_problems.length})" -%ul - - @available_problems.each do |problem| - %li= problem.name +%h2 Available problems +%table{:class => "codejom-problems"} + %tr + - @levels.each do |level| + %th= "Level #{level} (#{@available_problems[level].length})" + %tr + - @levels.each do |level| + %td + - @available_problems[level].each do |problem| + = problem.name + %br/ + %tr + - @levels.each do |level| + %td{:class => 'random-button'} + - form_tag :action => 'random_problem', :id => level do + = submit_tag 'Random' %h2= "Activated problems (#{@activated_problems.length})" - @activated_problems.each do |problem| diff --git a/app/views/problems/list.rhtml b/app/views/problems/list.rhtml --- a/app/views/problems/list.rhtml +++ b/app/views/problems/list.rhtml @@ -28,6 +28,7 @@