Description:
merge
Commit status:
[Not Reviewed]
References:
merge java
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r687:0c1baca84cbc - - 1 file changed: 2 inserted, 2 deleted

@@ -227,185 +227,185
227
227
228 def contest_started?
228 def contest_started?
229 if GraderConfiguration.indv_contest_mode?
229 if GraderConfiguration.indv_contest_mode?
230 stat = self.contest_stat
230 stat = self.contest_stat
231 return ((stat != nil) and (stat.started_at != nil))
231 return ((stat != nil) and (stat.started_at != nil))
232 elsif GraderConfiguration.contest_mode?
232 elsif GraderConfiguration.contest_mode?
233 return true if site==nil
233 return true if site==nil
234 return site.started
234 return site.started
235 else
235 else
236 return true
236 return true
237 end
237 end
238 end
238 end
239
239
240 def update_start_time
240 def update_start_time
241 stat = self.contest_stat
241 stat = self.contest_stat
242 if stat.nil? or stat.started_at.nil?
242 if stat.nil? or stat.started_at.nil?
243 stat ||= UserContestStat.new(:user => self)
243 stat ||= UserContestStat.new(:user => self)
244 stat.started_at = Time.now.gmtime
244 stat.started_at = Time.now.gmtime
245 stat.save
245 stat.save
246 end
246 end
247 end
247 end
248
248
249 def problem_in_user_contests?(problem)
249 def problem_in_user_contests?(problem)
250 problem_contests = problem.contests.all
250 problem_contests = problem.contests.all
251
251
252 if problem_contests.length == 0 # this is public contest
252 if problem_contests.length == 0 # this is public contest
253 return true
253 return true
254 end
254 end
255
255
256 contests.each do |contest|
256 contests.each do |contest|
257 if problem_contests.find {|c| c.id == contest.id }
257 if problem_contests.find {|c| c.id == contest.id }
258 return true
258 return true
259 end
259 end
260 end
260 end
261 return false
261 return false
262 end
262 end
263
263
264 def available_problems_group_by_contests
264 def available_problems_group_by_contests
265 contest_problems = []
265 contest_problems = []
266 pin = {}
266 pin = {}
267 contests.enabled.each do |contest|
267 contests.enabled.each do |contest|
268 available_problems = contest.problems.available
268 available_problems = contest.problems.available
269 contest_problems << {
269 contest_problems << {
270 :contest => contest,
270 :contest => contest,
271 :problems => available_problems
271 :problems => available_problems
272 }
272 }
273 available_problems.each {|p| pin[p.id] = true}
273 available_problems.each {|p| pin[p.id] = true}
274 end
274 end
275 other_avaiable_problems = Problem.available.find_all {|p| pin[p.id]==nil and p.contests.length==0}
275 other_avaiable_problems = Problem.available.find_all {|p| pin[p.id]==nil and p.contests.length==0}
276 contest_problems << {
276 contest_problems << {
277 :contest => nil,
277 :contest => nil,
278 :problems => other_avaiable_problems
278 :problems => other_avaiable_problems
279 }
279 }
280 return contest_problems
280 return contest_problems
281 end
281 end
282
282
283 def solve_all_available_problems?
283 def solve_all_available_problems?
284 available_problems.each do |p|
284 available_problems.each do |p|
285 u = self
285 u = self
286 sub = Submission.find_last_by_user_and_problem(u.id,p.id)
286 sub = Submission.find_last_by_user_and_problem(u.id,p.id)
287 return false if !p or !sub or sub.points < p.full_score
287 return false if !p or !sub or sub.points < p.full_score
288 end
288 end
289 return true
289 return true
290 end
290 end
291
291
292 def available_problems
292 def available_problems
293 if not GraderConfiguration.multicontests?
293 if not GraderConfiguration.multicontests?
294 if GraderConfiguration.use_problem_group?
294 if GraderConfiguration.use_problem_group?
295 return available_problems_in_group
295 return available_problems_in_group
296 else
296 else
297 return Problem.available_problems
297 return Problem.available_problems
298 end
298 end
299 else
299 else
300 contest_problems = []
300 contest_problems = []
301 pin = {}
301 pin = {}
302 contests.enabled.each do |contest|
302 contests.enabled.each do |contest|
303 contest.problems.available.each do |problem|
303 contest.problems.available.each do |problem|
304 if not pin.has_key? problem.id
304 if not pin.has_key? problem.id
305 contest_problems << problem
305 contest_problems << problem
306 end
306 end
307 pin[problem.id] = true
307 pin[problem.id] = true
308 end
308 end
309 end
309 end
310 other_avaiable_problems = Problem.available.find_all {|p| pin[p.id]==nil and p.contests.length==0}
310 other_avaiable_problems = Problem.available.find_all {|p| pin[p.id]==nil and p.contests.length==0}
311 return contest_problems + other_avaiable_problems
311 return contest_problems + other_avaiable_problems
312 end
312 end
313 end
313 end
314
314
315 def available_problems_in_group
315 def available_problems_in_group
316 problem = []
316 problem = []
317 self.groups.each do |group|
317 self.groups.each do |group|
318 group.problems.where(available: true).each { |p| problem << p }
318 group.problems.where(available: true).each { |p| problem << p }
319 end
319 end
320 problem.uniq!.sort! do |a,b|
320 problem.uniq!.sort! do |a,b|
321 case
321 case
322 when a.date_added < b.date_added
322 when a.date_added < b.date_added
323 - -1
323 + 1
324 when a.date_added > b.date_added
324 when a.date_added > b.date_added
325 - 1
325 + -1
326 else
326 else
327 a.name <=> b.name
327 a.name <=> b.name
328 end
328 end
329 end
329 end
330 return problem
330 return problem
331 end
331 end
332
332
333 def can_view_problem?(problem)
333 def can_view_problem?(problem)
334 if not GraderConfiguration.multicontests?
334 if not GraderConfiguration.multicontests?
335 return problem.available
335 return problem.available
336 else
336 else
337 return problem_in_user_contests? problem
337 return problem_in_user_contests? problem
338 end
338 end
339 end
339 end
340
340
341 def self.clear_last_login
341 def self.clear_last_login
342 User.update_all(:last_ip => nil)
342 User.update_all(:last_ip => nil)
343 end
343 end
344
344
345 protected
345 protected
346 def encrypt_new_password
346 def encrypt_new_password
347 return if password.blank?
347 return if password.blank?
348 self.salt = (10+rand(90)).to_s
348 self.salt = (10+rand(90)).to_s
349 self.hashed_password = User.encrypt(self.password,self.salt)
349 self.hashed_password = User.encrypt(self.password,self.salt)
350 end
350 end
351
351
352 def assign_default_site
352 def assign_default_site
353 # have to catch error when migrating (because self.site is not available).
353 # have to catch error when migrating (because self.site is not available).
354 begin
354 begin
355 if self.site==nil
355 if self.site==nil
356 self.site = Site.find_by_name('default')
356 self.site = Site.find_by_name('default')
357 if self.site==nil
357 if self.site==nil
358 self.site = Site.find(1) # when 'default has be renamed'
358 self.site = Site.find(1) # when 'default has be renamed'
359 end
359 end
360 end
360 end
361 rescue
361 rescue
362 end
362 end
363 end
363 end
364
364
365 def assign_default_contest
365 def assign_default_contest
366 # have to catch error when migrating (because self.site is not available).
366 # have to catch error when migrating (because self.site is not available).
367 begin
367 begin
368 if self.contests.length == 0
368 if self.contests.length == 0
369 default_contest = Contest.find_by_name(GraderConfiguration['contest.default_contest_name'])
369 default_contest = Contest.find_by_name(GraderConfiguration['contest.default_contest_name'])
370 if default_contest
370 if default_contest
371 self.contests = [default_contest]
371 self.contests = [default_contest]
372 end
372 end
373 end
373 end
374 rescue
374 rescue
375 end
375 end
376 end
376 end
377
377
378 def password_required?
378 def password_required?
379 self.hashed_password.blank? || !self.password.blank?
379 self.hashed_password.blank? || !self.password.blank?
380 end
380 end
381
381
382 def self.encrypt(string,salt)
382 def self.encrypt(string,salt)
383 Digest::SHA1.hexdigest(salt + string)
383 Digest::SHA1.hexdigest(salt + string)
384 end
384 end
385
385
386 def uniqueness_of_email_from_activated_users
386 def uniqueness_of_email_from_activated_users
387 user = User.activated_users.find_by_email(self.email)
387 user = User.activated_users.find_by_email(self.email)
388 if user and (user.login != self.login)
388 if user and (user.login != self.login)
389 self.errors.add(:base,"Email has already been taken")
389 self.errors.add(:base,"Email has already been taken")
390 end
390 end
391 end
391 end
392
392
393 def enough_time_interval_between_same_email_registrations
393 def enough_time_interval_between_same_email_registrations
394 return if !self.new_record?
394 return if !self.new_record?
395 return if self.activated
395 return if self.activated
396 open_user = User.find_by_email(self.email,
396 open_user = User.find_by_email(self.email,
397 :order => 'created_at DESC')
397 :order => 'created_at DESC')
398 if open_user and open_user.created_at and
398 if open_user and open_user.created_at and
399 (open_user.created_at > Time.now.gmtime - 5.minutes)
399 (open_user.created_at > Time.now.gmtime - 5.minutes)
400 self.errors.add(:base,"There are already unactivated registrations with this e-mail address (please wait for 5 minutes)")
400 self.errors.add(:base,"There are already unactivated registrations with this e-mail address (please wait for 5 minutes)")
401 end
401 end
402 end
402 end
403
403
404 def email_validation?
404 def email_validation?
405 begin
405 begin
406 return VALIDATE_USER_EMAILS
406 return VALIDATE_USER_EMAILS
407 rescue
407 rescue
408 return false
408 return false
409 end
409 end
410 end
410 end
411 end
411 end
You need to be logged in to leave comments. Login now