Description:
manages problems in contests
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r279:973f76ab730e - - 10 files changed: 74 inserted, 3 deleted

@@ -0,0 +1,9
1 + class AddNameToContests < ActiveRecord::Migration
2 + def self.up
3 + add_column :contests, :name, :string
4 + end
5 +
6 + def self.down
7 + remove_column :contests, :name
8 + end
9 + end
@@ -139,12 +139,14
139 139 @problems = Problem.find(:all, :order => 'date_added DESC')
140 140 end
141 141
142 142 def do_manage
143 143 if params.has_key? 'change_date_added'
144 144 change_date_added
145 + else params.has_key? 'add_to_contest'
146 + add_to_contest
145 147 end
146 148 redirect_to :action => 'manage'
147 149 end
148 150
149 151 def import
150 152 @allow_test_pair_import = allow_test_pair_import?
@@ -165,12 +167,21
165 167 if old_problem!=nil
166 168 flash[:notice] = "The test data has been replaced for problem #{@problem.name}"
167 169 end
168 170 @log = import_log
169 171 end
170 172
173 + def remove_contest
174 + problem = Problem.find(params[:id])
175 + contest = Contest.find(params[:contest_id])
176 + if problem!=nil and contest!=nil
177 + problem.contests.delete(contest)
178 + end
179 + redirect_to :action => 'manage'
180 + end
181 +
171 182 ##################################
172 183 protected
173 184
174 185 def allow_test_pair_import?
175 186 if defined? ALLOW_TEST_PAIR_IMPORT
176 187 return ALLOW_TEST_PAIR_IMPORT
@@ -188,12 +199,22
188 199 problems.each do |p|
189 200 p.date_added = date
190 201 p.save
191 202 end
192 203 end
193 204
205 + def add_to_contest
206 + problems = get_problems_from_params
207 + contest = Contest.find(params[:contest][:id])
208 + if contest!=nil and contest.enabled
209 + problems.each do |p|
210 + p.contests << contest
211 + end
212 + end
213 + end
214 +
194 215 def get_problems_from_params
195 216 problems = []
196 217 params.keys.each do |k|
197 218 if k.index('prob-')==0
198 219 name, id = k.split('-')
199 220 problems << Problem.find(id)
@@ -2,12 +2,16
2 2
3 3 <% form_for(@contest) do |f| %>
4 4 <%= f.error_messages %>
5 5
6 6 <table>
7 7 <tr>
8 + <td><%= f.label :name %></td>
9 + <td><%= f.text_field :name %></td>
10 + </tr>
11 + <tr>
8 12 <td><%= f.label :title %></td>
9 13 <td><%= f.text_field :title %></td>
10 14 </tr>
11 15 <tr>
12 16 <td></td>
13 17 <td>
@@ -7,19 +7,21
7 7 <div class="infobox">
8 8 <b>Go back to:</b> [<%= link_to 'contest management', :controller => 'contest_management', :action => 'index' %>]
9 9 </div>
10 10
11 11 <table>
12 12 <tr>
13 + <th>Name</th>
13 14 <th>Title</th>
14 15 <th>Enabled</th>
15 16 </tr>
16 17
17 18 <% @contests.each do |contest| %>
18 19 <% @contest = contest %>
19 20 <tr>
21 + <td><%= in_place_editor_field :contest, :name, {}, :rows => 1 %></td>
20 22 <td><%= in_place_editor_field :contest, :title, {}, :rows => 1 %></td>
21 23 <td><%= in_place_editor_field :contest, :enabled, {}, :rows => 1 %></td>
22 24 <td><%= link_to 'Show', contest %></td>
23 25 <td><%= link_to 'Edit', edit_contest_path(contest) %></td>
24 26 <td><%= link_to 'Destroy', contest, :confirm => 'Are you sure?', :method => :delete %></td>
25 27 </tr>
@@ -1,19 +1,23
1 1 <h1>New contest</h1>
2 2
3 3 <% form_for(@contest) do |f| %>
4 4 <%= f.error_messages %>
5 5
6 6 <p>
7 + <%= f.label :name %><br />
8 + <%= f.text_field :name %>
9 + </p>
10 + <p>
7 11 <%= f.label :title %><br />
8 12 <%= f.text_field :title %>
9 13 </p>
10 14 <p>
11 15 <%= f.label :enabled %><br />
12 16 <%= f.check_box :enabled %>
13 17 </p>
14 18 <p>
15 19 <%= f.submit 'Create' %>
16 20 </p>
17 21 <% end %>
18 22
19 - <%= link_to 'Back', contests_path %> No newline at end of file
23 + <%= link_to 'Back', contests_path %>
@@ -29,24 +29,33
29 29 <th>Name</th>
30 30 <th>Full name</th>
31 31 <th>Full score</th>
32 32 <th>Date added</th>
33 33 <th>Avail?</th>
34 34 <th>Test?</th>
35 + <% if Configuration.multicontests? %>
36 + <th>Contests</th>
37 + <% end %>
35 38 </tr>
36 39
37 40 <% for problem in @problems %>
38 41 <tr id="prob-<%= problem.id %>" name="prob-<%= problem.id %>" class="<%= (problem.available) ? "available" : "not-available" %>">
39 42 <% @problem=problem %>
40 43 <td><%= in_place_editor_field :problem, :name, {}, :rows=>1 %></td>
41 44 <td><%= in_place_editor_field :problem, :full_name, {}, :rows=>1 %></td>
42 45 <td><%= in_place_editor_field :problem, :full_score, {}, :rows=>1 %></td>
43 46 <td><%= problem.date_added %></td>
44 47 <td id="prob-<%= problem.id %>-avail"><%= problem.available %></td>
45 48 <td><%= problem.test_allowed %></td>
46 49
50 + <% if Configuration.multicontests? %>
51 + <td>
52 + <%= problem.contests.collect { |c| c.name }.join(', ') %>
53 + </td>
54 + <% end %>
55 +
47 56 <td><%= link_to_remote '[Toggle]', :url => {:action => 'toggle', :id => problem.id } %></td>
48 57 <td><%= link_to '[Stat]', :action => 'stat', :id => problem.id %></td>
49 58 <td><%= link_to '[Show]', :action => 'show', :id => problem %></td>
50 59 <td><%= link_to '[Edit]', :action => 'edit', :id => problem %></td>
51 60 <td><%= link_to '[Destroy]', { :action => 'destroy', :id => problem }, :confirm => 'Are you sure?', :method => :post %></td>
52 61 </tr>
@@ -13,20 +13,32
13 13 %ul
14 14 %li
15 15 Change date added to
16 16 = select_date Date.current, :prefix => 'date_added'
17 17 &nbsp;&nbsp;&nbsp;
18 18 = submit_tag 'Change', :name => 'change_date_added'
19 +
20 + - if Configuration.multicontests?
21 + %li
22 + Add to
23 + = select("contest","id",Contest.all.collect {|c| [c.title, c.id]})
24 + = submit_tag 'Add', :name => 'add_to_contest'
25 +
19 26 %table
20 27 %tr
21 28 %th/
22 29 %th Name
23 30 %th Full name
24 31 %th Date added
32 + - if Configuration.multicontests?
33 + %th Contests
25 34
26 35 - for problem in @problems
27 36 %tr{:id => "row-prob-#{problem.id}", :name=> "prob-#{problem.id}"}
28 37 %td= check_box_tag "prob-#{problem.id}"
29 38 %td= problem.name
30 39 %td= problem.full_name
31 40 %td= problem.date_added
32 -
41 + - if Configuration.multicontests?
42 + %td
43 + - problem.contests.each do |contest|
44 + = "(#{contest.name} [#{link_to 'x', :action => 'remove_contest', :id => problem.id, :contest_id => contest.id }])"
@@ -6,13 +6,13
6 6 # to create the application database on another system, you should be using db:schema:load, not running
7 7 # all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
8 8 # you'll amass, the slower it'll run and the greater likelihood for issues).
9 9 #
10 10 # It's strongly recommended to check this file into your version control system.
11 11
12 - ActiveRecord::Schema.define(:version => 20100219014840) do
12 + ActiveRecord::Schema.define(:version => 20100303095700) do
13 13
14 14 create_table "announcements", :force => true do |t|
15 15 t.string "author"
16 16 t.text "body"
17 17 t.boolean "published"
18 18 t.datetime "created_at"
@@ -33,12 +33,13
33 33
34 34 create_table "contests", :force => true do |t|
35 35 t.string "title"
36 36 t.boolean "enabled"
37 37 t.datetime "created_at"
38 38 t.datetime "updated_at"
39 + t.string "name"
39 40 end
40 41
41 42 create_table "contests_problems", :id => false, :force => true do |t|
42 43 t.integer "contest_id"
43 44 t.integer "problem_id"
44 45 end
@@ -92,12 +92,18
92 92 # the user will not be able to use test request at 30 minutes
93 93 # before the contest ends.
94 94 {
95 95 :key => 'contest.test_request.early_timeout',
96 96 :value_type => 'boolean',
97 97 :default_value => 'false'
98 + },
99 +
100 + {
101 + :key => 'system.multicontests',
102 + :value_type => 'boolean',
103 + :default_value => 'false'
98 104 }
99 105 ]
100 106
101 107
102 108 def create_configuration_key(key,
103 109 value_type,
@@ -1,13 +1,16
1 1 # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2 2
3 3 contest_a:
4 + name: contest_a
4 5 title: Contest A
5 6 enabled: true
6 7
7 8 contest_b:
9 + name: contest_b
8 10 title: Contest B
9 11 enabled: true
10 12
11 13 contest_c:
14 + name: contest_c
12 15 title: Contest C
13 16 enabled: false
You need to be logged in to leave comments. Login now