Description:
added test assignment time out
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r222:2b6293a64dbb - - 8 files changed: 42 inserted, 2 deleted

@@ -194,24 +194,29
194 end
194 end
195 end
195 end
196
196
197 def submit_solution
197 def submit_solution
198 problem = Problem.find(params[:id])
198 problem = Problem.find(params[:id])
199 user = User.find(session[:user_id])
199 user = User.find(session[:user_id])
200 recent_assignment = user.get_recent_test_pair_assignment_for problem
200 recent_assignment = user.get_recent_test_pair_assignment_for problem
201 if recent_assignment == nil
201 if recent_assignment == nil
202 flash[:notice] = 'You have not requested for any input data for this problem. Please download an input first.'
202 flash[:notice] = 'You have not requested for any input data for this problem. Please download an input first.'
203 redirect_to :action => 'list' and return
203 redirect_to :action => 'list' and return
204 end
204 end
205
205
206 + if recent_assignment.expired?
207 + flash[:notice] = 'The current input is expired. Please download a new input data.'
208 + redirect_to :action => 'list' and return
209 + end
210 +
206 if recent_assignment.submitted
211 if recent_assignment.submitted
207 flash[:notice] = 'You have already submitted an incorrect solution for this input. Please download a new input data.'
212 flash[:notice] = 'You have already submitted an incorrect solution for this input. Please download a new input data.'
208 redirect_to :action => 'list' and return
213 redirect_to :action => 'list' and return
209 end
214 end
210
215
211 if params[:file] == nil
216 if params[:file] == nil
212 flash[:notice] = 'You have not submitted any output.'
217 flash[:notice] = 'You have not submitted any output.'
213 redirect_to :action => 'list' and return
218 redirect_to :action => 'list' and return
214 end
219 end
215
220
216 submitted_solution = params[:file].read
221 submitted_solution = params[:file].read
217 test_pair = recent_assignment.test_pair
222 test_pair = recent_assignment.test_pair
@@ -1,5 +1,11
1 class TestPairAssignment < ActiveRecord::Base
1 class TestPairAssignment < ActiveRecord::Base
2 +
2 belongs_to :user
3 belongs_to :user
3 belongs_to :test_pair
4 belongs_to :test_pair
4 belongs_to :problem
5 belongs_to :problem
6 +
7 + def expired?
8 + return created_at + TEST_ASSIGNMENT_EXPIRATION_DURATION < Time.new.gmtime
5 end
9 end
10 +
11 + end
@@ -87,25 +87,25
87 return nil
87 return nil
88 else
88 else
89 recent = assignments[0]
89 recent = assignments[0]
90 assignments.each do |a|
90 assignments.each do |a|
91 recent = a if a.request_number > recent.request_number
91 recent = a if a.request_number > recent.request_number
92 end
92 end
93 return recent
93 return recent
94 end
94 end
95 end
95 end
96
96
97 def can_request_new_test_pair_for?(problem)
97 def can_request_new_test_pair_for?(problem)
98 recent = get_recent_test_pair_assignment_for problem
98 recent = get_recent_test_pair_assignment_for problem
99 - return (recent == nil or recent.submitted)
99 + return (recent == nil or recent.submitted or recent.expired?)
100 end
100 end
101
101
102 def get_new_test_pair_assignment_for(problem)
102 def get_new_test_pair_assignment_for(problem)
103 previous_assignment_numbers =
103 previous_assignment_numbers =
104 get_test_pair_assignments_for(problem).collect {|a| a.test_pair_number }
104 get_test_pair_assignments_for(problem).collect {|a| a.test_pair_number }
105 test_pair = problem.random_test_pair(previous_assignment_numbers)
105 test_pair = problem.random_test_pair(previous_assignment_numbers)
106 if test_pair
106 if test_pair
107 assignment = TestPairAssignment.new(:user => self,
107 assignment = TestPairAssignment.new(:user => self,
108 :problem => problem,
108 :problem => problem,
109 :test_pair => test_pair,
109 :test_pair => test_pair,
110 :test_pair_number => test_pair.number,
110 :test_pair_number => test_pair.number,
111 :request_number =>
111 :request_number =>
@@ -5,18 +5,18
5 <head>
5 <head>
6 <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
6 <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
7 <title><%= Configuration['contest.name'] %></title>
7 <title><%= Configuration['contest.name'] %></title>
8 <%= stylesheet_link_tag 'application' %>
8 <%= stylesheet_link_tag 'application' %>
9 <%= yield :head %>
9 <%= yield :head %>
10 </head>
10 </head>
11 <body>
11 <body>
12
12
13 <div class="userbar">
13 <div class="userbar">
14 <%= user_header %>
14 <%= user_header %>
15 </div>
15 </div>
16
16
17 - <%= content_tag(:p,flash[:notice],:style => "color:green") if flash[:notice]!=nil %>
17 + <% if flash[:notice]!=nil %><div class="notice-bar"><span class="notice"><%= flash[:notice] %></span></div><% end %>
18
18
19 <%= yield %>
19 <%= yield %>
20
20
21 </body>
21 </body>
22 </html>
22 </html>
@@ -1,17 +1,18
1 .problem-panel{:id => "problem-panel-#{problem.id}", :style => "display:none"}
1 .problem-panel{:id => "problem-panel-#{problem.id}", :style => "display:none"}
2 .problem-form{:id => "problem-form-#{problem.id}"}
2 .problem-form{:id => "problem-form-#{problem.id}"}
3 - form_tag({ :action => 'download_input', :id => problem.id }, :method => :post) do
3 - form_tag({ :action => 'download_input', :id => problem.id }, :method => :post) do
4 %b Input:
4 %b Input:
5 %input{:type => "submit", :value => "Download input"}
5 %input{:type => "submit", :value => "Download input"}
6 + = "After downloading, you have #{TEST_ASSIGNMENT_EXPIRATION_DURATION/60} minutes to submit."
6 - form_tag({ :action => 'submit_solution', :id => problem.id }, :method => :post, :multipart => true) do
7 - form_tag({ :action => 'submit_solution', :id => problem.id }, :method => :post, :multipart => true) do
7 %b Submit output:
8 %b Submit output:
8 %input{:type => "file", :name => "file"}
9 %input{:type => "file", :name => "file"}
9 %input{:type => "submit", :value => "Submit solution"}
10 %input{:type => "submit", :value => "Submit solution"}
10
11
11 .problem-description
12 .problem-description
12 - if problem.description!=nil
13 - if problem.description!=nil
13 - if problem.description.markdowned
14 - if problem.description.markdowned
14 = markdown(problem.description.body)
15 = markdown(problem.description.body)
15 - else
16 - else
16 = problem.description.body
17 = problem.description.body
17 - else
18 - else
@@ -98,12 +98,13
98 # VALIDATE_USER_EMAILS = true
98 # VALIDATE_USER_EMAILS = true
99
99
100 # Uncomment so that Apache X-Sendfile is used when delivering files
100 # Uncomment so that Apache X-Sendfile is used when delivering files
101 # (e.g., in /tasks/view).
101 # (e.g., in /tasks/view).
102 # USE_APACHE_XSENDFILE = true
102 # USE_APACHE_XSENDFILE = true
103
103
104 # Uncomment so that configuration is read only once when the server is loaded
104 # Uncomment so that configuration is read only once when the server is loaded
105 # Configuration.enable_caching
105 # Configuration.enable_caching
106
106
107 # OPTIONS FOR CODE JOM
107 # OPTIONS FOR CODE JOM
108 # --------------------
108 # --------------------
109 CODEJOM_MAX_ALIVE_LEVEL = 10
109 CODEJOM_MAX_ALIVE_LEVEL = 10
110 + TEST_ASSIGNMENT_EXPIRATION_DURATION = 5.minute
@@ -255,12 +255,25
255
255
256 .problem-content {
256 .problem-content {
257 float: left;
257 float: left;
258 margin-left: 10px;
258 margin-left: 10px;
259 width: 700px; }
259 width: 700px; }
260
260
261 .problem-panel {
261 .problem-panel {
262 border: 1px black solid;
262 border: 1px black solid;
263 padding: 5px; }
263 padding: 5px; }
264 .problem-panel .problem-form {
264 .problem-panel .problem-form {
265 border: 1px dotted #99aaee;
265 border: 1px dotted #99aaee;
266 background: #eeeeff; }
266 background: #eeeeff; }
267 +
268 + .notice-bar {
269 + margin-top: 3px;
270 + margin-bottom: 3px;
271 + text-align: center; }
272 + .notice-bar span.notice {
273 + color: white;
274 + font-weight: bold;
275 + background: #000070;
276 + padding: 3px 20px 3px 20px;
277 + -moz-border-radius: 2px;
278 + -webkit-border-radius: 5px;
279 + border-radius: 5px; }
@@ -301,12 +301,26
301 .problem-content
301 .problem-content
302 float: left
302 float: left
303 margin-left: 10px
303 margin-left: 10px
304 width: 700px
304 width: 700px
305
305
306 .problem-panel
306 .problem-panel
307 border: 1px black solid
307 border: 1px black solid
308 padding: 5px
308 padding: 5px
309
309
310 .problem-form
310 .problem-form
311 border: 1px dotted #99aaee
311 border: 1px dotted #99aaee
312 background: #eeeeff
312 background: #eeeeff
313 +
314 + .notice-bar
315 + margin-top: 3px
316 + margin-bottom: 3px
317 + text-align: center
318 +
319 + span.notice
320 + color: white
321 + font-weight: bold
322 + background: #000070
323 + padding: 3px 20px 3px 20px
324 + -moz-border-radius: 2px
325 + -webkit-border-radius: 5px
326 + border-radius: 5px
You need to be logged in to leave comments. Login now