Description:
controllers get available problems from current user
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

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 = Problem.find_available_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 = problem_list_by_user_contests(@user)
243 - @problems = problem_list_for_user(@user, @contest_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 = Problem.find_available_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