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

r688:b31aedc6a96e - - 1 file changed: 6 inserted, 1 deleted

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