Description:
controllers get available problems from current user
Commit status:
[Not Reviewed]
References:
Diff options:
Comments:
0 Commit comments
0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
r288:74436ad04ad0 - - 3 files changed: 42 inserted, 45 deleted
@@ -107,7 +107,7 | |||
|
107 | 107 | |
|
108 | 108 | def submission |
|
109 | 109 | @user = User.find(session[:user_id]) |
|
110 |
- @problems = |
|
|
110 | + @problems = @user.available_problems | |
|
111 | 111 | if params[:id]==nil |
|
112 | 112 | @problem = nil |
|
113 | 113 | @submissions = nil |
@@ -193,54 +193,13 | |||
|
193 | 193 | end |
|
194 | 194 | end |
|
195 | 195 | |
|
196 | - def problem_list_by_user_contests(user) | |
|
197 | - contest_problems = [] | |
|
198 | - pin = {} | |
|
199 | - user.contests.enabled.each do |contest| | |
|
200 | - available_problems = contest.problems.available | |
|
201 | - contest_problems << { | |
|
202 | - :contest => contest, | |
|
203 | - :problems => available_problems | |
|
204 | - } | |
|
205 | - available_problems.each {|p| pin[p.id] = true} | |
|
206 | - end | |
|
207 | - other_avaiable_problems = Problem.available.find_all {|p| pin[p.id]==nil and p.contests.length==0} | |
|
208 | - contest_problems << { | |
|
209 | - :contest => nil, | |
|
210 | - :problems => other_avaiable_problems | |
|
211 | - } | |
|
212 | - return contest_problems | |
|
213 | - end | |
|
214 | - | |
|
215 | - def problem_list_for_user(user, contest_problems=nil) | |
|
216 | - if not Configuration.multicontests? | |
|
217 | - return Problem.find_available_problems | |
|
218 | - else | |
|
219 | - if contest_problems==nil | |
|
220 | - contest_problems = problem_list_by_user_contests(user) | |
|
221 | - end | |
|
222 | - | |
|
223 | - problems = [] | |
|
224 | - collected = {} | |
|
225 | - contest_problems.each do |cp| | |
|
226 | - cp[:problems].each do |problem| | |
|
227 | - if not collected[problem.id] | |
|
228 | - problems << problem | |
|
229 | - collected[problem.id] = true | |
|
230 | - end | |
|
231 | - end | |
|
232 | - end | |
|
233 | - return problems | |
|
234 | - end | |
|
235 | - end | |
|
236 | - | |
|
237 | 196 | def prepare_list_information |
|
238 | 197 | @user = User.find(session[:user_id]) |
|
239 | 198 | if not Configuration.multicontests? |
|
240 | 199 | @problems = problem_list_for_user(@user) |
|
241 | 200 | else |
|
242 |
- @contest_problems = |
|
|
243 |
- @problems = |
|
|
201 | + @contest_problems = @user.available_problems_group_by_contests | |
|
202 | + @problems = @user.available_problems | |
|
244 | 203 | end |
|
245 | 204 | @prob_submissions = {} |
|
246 | 205 | @problems.each do |p| |
@@ -7,7 +7,7 | |||
|
7 | 7 | end |
|
8 | 8 | |
|
9 | 9 | def list |
|
10 |
- @problems = |
|
|
10 | + @problems = @user.available_problems | |
|
11 | 11 | end |
|
12 | 12 | |
|
13 | 13 | # this has contest-wide access control |
@@ -197,6 +197,44 | |||
|
197 | 197 | return false |
|
198 | 198 | end |
|
199 | 199 | |
|
200 | + def available_problems_group_by_contests | |
|
201 | + contest_problems = [] | |
|
202 | + pin = {} | |
|
203 | + contests.enabled.each do |contest| | |
|
204 | + available_problems = contest.problems.available | |
|
205 | + contest_problems << { | |
|
206 | + :contest => contest, | |
|
207 | + :problems => available_problems | |
|
208 | + } | |
|
209 | + available_problems.each {|p| pin[p.id] = true} | |
|
210 | + end | |
|
211 | + other_avaiable_problems = Problem.available.find_all {|p| pin[p.id]==nil and p.contests.length==0} | |
|
212 | + contest_problems << { | |
|
213 | + :contest => nil, | |
|
214 | + :problems => other_avaiable_problems | |
|
215 | + } | |
|
216 | + return contest_problems | |
|
217 | + end | |
|
218 | + | |
|
219 | + def available_problems | |
|
220 | + if not Configuration.multicontests? | |
|
221 | + return Problem.find_available_problems | |
|
222 | + else | |
|
223 | + contest_problems = [] | |
|
224 | + pin = {} | |
|
225 | + contests.enabled.each do |contest| | |
|
226 | + contest.problems.available.each do |problem| | |
|
227 | + if not pin.has_key? problem.id | |
|
228 | + contest_problems << problem | |
|
229 | + end | |
|
230 | + pin[problem.id] = true | |
|
231 | + end | |
|
232 | + end | |
|
233 | + other_avaiable_problems = Problem.available.find_all {|p| pin[p.id]==nil and p.contests.length==0} | |
|
234 | + return contest_problems + other_avaiable_problems | |
|
235 | + end | |
|
236 | + end | |
|
237 | + | |
|
200 | 238 | def can_view_problem?(problem) |
|
201 | 239 | if not Configuration.multicontests? |
|
202 | 240 | return problem.available |
You need to be logged in to leave comments.
Login now