Description:
Fixed Individual Contest confirmation
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r371:6d2e9920049d - - 2 files changed: 2 inserted, 2 deleted

@@ -99,193 +99,193
99 else
99 else
100 flash[:notice] = 'Error viewing source'
100 flash[:notice] = 'Error viewing source'
101 redirect_to :action => 'list'
101 redirect_to :action => 'list'
102 end
102 end
103 end
103 end
104
104
105 def compiler_msg
105 def compiler_msg
106 @submission = Submission.find(params[:id])
106 @submission = Submission.find(params[:id])
107 if @submission.user_id == session[:user_id]
107 if @submission.user_id == session[:user_id]
108 render :action => 'compiler_msg', :layout => 'empty'
108 render :action => 'compiler_msg', :layout => 'empty'
109 else
109 else
110 flash[:notice] = 'Error viewing source'
110 flash[:notice] = 'Error viewing source'
111 redirect_to :action => 'list'
111 redirect_to :action => 'list'
112 end
112 end
113 end
113 end
114
114
115 def submission
115 def submission
116 @user = User.find(session[:user_id])
116 @user = User.find(session[:user_id])
117 @problems = @user.available_problems
117 @problems = @user.available_problems
118 if params[:id]==nil
118 if params[:id]==nil
119 @problem = nil
119 @problem = nil
120 @submissions = nil
120 @submissions = nil
121 else
121 else
122 @problem = Problem.find_by_name(params[:id])
122 @problem = Problem.find_by_name(params[:id])
123 if not @problem.available
123 if not @problem.available
124 redirect_to :action => 'list'
124 redirect_to :action => 'list'
125 flash[:notice] = 'Error: submissions for that problem are not viewable.'
125 flash[:notice] = 'Error: submissions for that problem are not viewable.'
126 return
126 return
127 end
127 end
128 @submissions = Submission.find_all_by_user_problem(@user.id, @problem.id)
128 @submissions = Submission.find_all_by_user_problem(@user.id, @problem.id)
129 end
129 end
130 end
130 end
131
131
132 def result
132 def result
133 if !GraderConfiguration.show_grading_result
133 if !GraderConfiguration.show_grading_result
134 redirect_to :action => 'list' and return
134 redirect_to :action => 'list' and return
135 end
135 end
136 @user = User.find(session[:user_id])
136 @user = User.find(session[:user_id])
137 @submission = Submission.find(params[:id])
137 @submission = Submission.find(params[:id])
138 if @submission.user!=@user
138 if @submission.user!=@user
139 flash[:notice] = 'You are not allowed to view result of other users.'
139 flash[:notice] = 'You are not allowed to view result of other users.'
140 redirect_to :action => 'list' and return
140 redirect_to :action => 'list' and return
141 end
141 end
142 prepare_grading_result(@submission)
142 prepare_grading_result(@submission)
143 end
143 end
144
144
145 def load_output
145 def load_output
146 if !GraderConfiguration.show_grading_result or params[:num]==nil
146 if !GraderConfiguration.show_grading_result or params[:num]==nil
147 redirect_to :action => 'list' and return
147 redirect_to :action => 'list' and return
148 end
148 end
149 @user = User.find(session[:user_id])
149 @user = User.find(session[:user_id])
150 @submission = Submission.find(params[:id])
150 @submission = Submission.find(params[:id])
151 if @submission.user!=@user
151 if @submission.user!=@user
152 flash[:notice] = 'You are not allowed to view result of other users.'
152 flash[:notice] = 'You are not allowed to view result of other users.'
153 redirect_to :action => 'list' and return
153 redirect_to :action => 'list' and return
154 end
154 end
155 case_num = params[:num].to_i
155 case_num = params[:num].to_i
156 out_filename = output_filename(@user.login,
156 out_filename = output_filename(@user.login,
157 @submission.problem.name,
157 @submission.problem.name,
158 @submission.id,
158 @submission.id,
159 case_num)
159 case_num)
160 if !FileTest.exists?(out_filename)
160 if !FileTest.exists?(out_filename)
161 flash[:notice] = 'Output not found.'
161 flash[:notice] = 'Output not found.'
162 redirect_to :action => 'list' and return
162 redirect_to :action => 'list' and return
163 end
163 end
164
164
165 if defined?(USE_APACHE_XSENDFILE) and USE_APACHE_XSENDFILE
165 if defined?(USE_APACHE_XSENDFILE) and USE_APACHE_XSENDFILE
166 response.headers['Content-Type'] = "application/force-download"
166 response.headers['Content-Type'] = "application/force-download"
167 response.headers['Content-Disposition'] = "attachment; filename=\"output-#{case_num}.txt\""
167 response.headers['Content-Disposition'] = "attachment; filename=\"output-#{case_num}.txt\""
168 response.headers["X-Sendfile"] = out_filename
168 response.headers["X-Sendfile"] = out_filename
169 response.headers['Content-length'] = File.size(out_filename)
169 response.headers['Content-length'] = File.size(out_filename)
170 render :nothing => true
170 render :nothing => true
171 else
171 else
172 send_file out_filename, :stream => false, :filename => "output-#{case_num}.txt", :type => "text/plain"
172 send_file out_filename, :stream => false, :filename => "output-#{case_num}.txt", :type => "text/plain"
173 end
173 end
174 end
174 end
175
175
176 def error
176 def error
177 @user = User.find(session[:user_id])
177 @user = User.find(session[:user_id])
178 end
178 end
179
179
180 # announcement refreshing and hiding methods
180 # announcement refreshing and hiding methods
181
181
182 def announcements
182 def announcements
183 if params.has_key? 'recent'
183 if params.has_key? 'recent'
184 prepare_announcements(params[:recent])
184 prepare_announcements(params[:recent])
185 else
185 else
186 prepare_announcements
186 prepare_announcements
187 end
187 end
188 render(:partial => 'announcement',
188 render(:partial => 'announcement',
189 :collection => @announcements,
189 :collection => @announcements,
190 :locals => {:announcement_effect => true})
190 :locals => {:announcement_effect => true})
191 end
191 end
192
192
193 def confirm_contest_start
193 def confirm_contest_start
194 user = User.find(session[:user_id])
194 user = User.find(session[:user_id])
195 - if request.method == :post
195 + if request.method == 'POST'
196 user.update_start_time
196 user.update_start_time
197 redirect_to :action => 'list'
197 redirect_to :action => 'list'
198 else
198 else
199 @contests = user.contests
199 @contests = user.contests
200 @user = user
200 @user = user
201 end
201 end
202 end
202 end
203
203
204 protected
204 protected
205
205
206 def prepare_announcements(recent=nil)
206 def prepare_announcements(recent=nil)
207 if GraderConfiguration.show_tasks_to?(@user)
207 if GraderConfiguration.show_tasks_to?(@user)
208 @announcements = Announcement.find_published(true)
208 @announcements = Announcement.find_published(true)
209 else
209 else
210 @announcements = Announcement.find_published
210 @announcements = Announcement.find_published
211 end
211 end
212 if recent!=nil
212 if recent!=nil
213 recent_id = recent.to_i
213 recent_id = recent.to_i
214 @announcements = @announcements.find_all { |a| a.id > recent_id }
214 @announcements = @announcements.find_all { |a| a.id > recent_id }
215 end
215 end
216 end
216 end
217
217
218 def prepare_list_information
218 def prepare_list_information
219 @user = User.find(session[:user_id])
219 @user = User.find(session[:user_id])
220 if not GraderConfiguration.multicontests?
220 if not GraderConfiguration.multicontests?
221 @problems = @user.available_problems
221 @problems = @user.available_problems
222 else
222 else
223 @contest_problems = @user.available_problems_group_by_contests
223 @contest_problems = @user.available_problems_group_by_contests
224 @problems = @user.available_problems
224 @problems = @user.available_problems
225 end
225 end
226 @prob_submissions = {}
226 @prob_submissions = {}
227 @problems.each do |p|
227 @problems.each do |p|
228 sub = Submission.find_last_by_user_and_problem(@user.id,p.id)
228 sub = Submission.find_last_by_user_and_problem(@user.id,p.id)
229 if sub!=nil
229 if sub!=nil
230 @prob_submissions[p.id] = { :count => sub.number, :submission => sub }
230 @prob_submissions[p.id] = { :count => sub.number, :submission => sub }
231 else
231 else
232 @prob_submissions[p.id] = { :count => 0, :submission => nil }
232 @prob_submissions[p.id] = { :count => 0, :submission => nil }
233 end
233 end
234 end
234 end
235 prepare_announcements
235 prepare_announcements
236 end
236 end
237
237
238 def check_viewability
238 def check_viewability
239 @user = User.find(session[:user_id])
239 @user = User.find(session[:user_id])
240 if (!GraderConfiguration.show_tasks_to?(@user)) and
240 if (!GraderConfiguration.show_tasks_to?(@user)) and
241 ((action_name=='submission') or (action_name=='submit'))
241 ((action_name=='submission') or (action_name=='submit'))
242 redirect_to :action => 'list' and return
242 redirect_to :action => 'list' and return
243 end
243 end
244 end
244 end
245
245
246 def prepare_grading_result(submission)
246 def prepare_grading_result(submission)
247 if GraderConfiguration.task_grading_info.has_key? submission.problem.name
247 if GraderConfiguration.task_grading_info.has_key? submission.problem.name
248 grading_info = GraderConfiguration.task_grading_info[submission.problem.name]
248 grading_info = GraderConfiguration.task_grading_info[submission.problem.name]
249 else
249 else
250 # guess task info from problem.full_score
250 # guess task info from problem.full_score
251 cases = submission.problem.full_score / 10
251 cases = submission.problem.full_score / 10
252 grading_info = {
252 grading_info = {
253 'testruns' => cases,
253 'testruns' => cases,
254 'testcases' => cases
254 'testcases' => cases
255 }
255 }
256 end
256 end
257 @test_runs = []
257 @test_runs = []
258 if grading_info['testruns'].is_a? Integer
258 if grading_info['testruns'].is_a? Integer
259 trun_count = grading_info['testruns']
259 trun_count = grading_info['testruns']
260 trun_count.times do |i|
260 trun_count.times do |i|
261 @test_runs << [ read_grading_result(@user.login,
261 @test_runs << [ read_grading_result(@user.login,
262 submission.problem.name,
262 submission.problem.name,
263 submission.id,
263 submission.id,
264 i+1) ]
264 i+1) ]
265 end
265 end
266 else
266 else
267 grading_info['testruns'].keys.sort.each do |num|
267 grading_info['testruns'].keys.sort.each do |num|
268 run = []
268 run = []
269 testrun = grading_info['testruns'][num]
269 testrun = grading_info['testruns'][num]
270 testrun.each do |c|
270 testrun.each do |c|
271 run << read_grading_result(@user.login,
271 run << read_grading_result(@user.login,
272 submission.problem.name,
272 submission.problem.name,
273 submission.id,
273 submission.id,
274 c)
274 c)
275 end
275 end
276 @test_runs << run
276 @test_runs << run
277 end
277 end
278 end
278 end
279 end
279 end
280
280
281 def grading_result_dir(user_name, problem_name, submission_id, case_num)
281 def grading_result_dir(user_name, problem_name, submission_id, case_num)
282 return "#{GRADING_RESULT_DIR}/#{user_name}/#{problem_name}/#{submission_id}/test-result/#{case_num}"
282 return "#{GRADING_RESULT_DIR}/#{user_name}/#{problem_name}/#{submission_id}/test-result/#{case_num}"
283 end
283 end
284
284
285 def output_filename(user_name, problem_name, submission_id, case_num)
285 def output_filename(user_name, problem_name, submission_id, case_num)
286 dir = grading_result_dir(user_name,problem_name, submission_id, case_num)
286 dir = grading_result_dir(user_name,problem_name, submission_id, case_num)
287 return "#{dir}/output.txt"
287 return "#{dir}/output.txt"
288 end
288 end
289
289
290 def read_grading_result(user_name, problem_name, submission_id, case_num)
290 def read_grading_result(user_name, problem_name, submission_id, case_num)
291 dir = grading_result_dir(user_name,problem_name, submission_id, case_num)
291 dir = grading_result_dir(user_name,problem_name, submission_id, case_num)
@@ -1,16 +1,16
1 = user_title_bar(@user)
1 = user_title_bar(@user)
2
2
3 .announcementbox
3 .announcementbox
4 %span{:class => 'title'}
4 %span{:class => 'title'}
5 =t 'main.confirm_contest_start.box_title'
5 =t 'main.confirm_contest_start.box_title'
6 .announcement
6 .announcement
7 %center
7 %center
8 =t 'main.confirm_contest_start.contest_list'
8 =t 'main.confirm_contest_start.contest_list'
9 - @contests.each do |contest|
9 - @contests.each do |contest|
10 = contest.title
10 = contest.title
11 %br
11 %br
12
12
13 =t 'main.confirm_contest_start.timer_starts_after_click'
13 =t 'main.confirm_contest_start.timer_starts_after_click'
14
14
15 - = form_tag :action => 'confirm_contest_start', :method => 'post' do
15 + = form_tag :action => 'confirm_contest_start' do
16 = submit_tag t('main.confirm_contest_start.start_button'), :confirm => t('main.confirm_contest_start.start_button_confirm')
16 = submit_tag t('main.confirm_contest_start.start_button'), :confirm => t('main.confirm_contest_start.start_button_confirm')
You need to be logged in to leave comments. Login now