Description:
fixed codejom stutus update to ignore disabled problems
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r246:180b30450ef3 - - 1 file changed: 2 inserted, 2 deleted

@@ -1,49 +1,49
1 - # -*- coding: undecided -*-
1 + # -*- coding: utf-8 -*-
2 2 require 'digest/sha1'
3 3
4 4 class User < ActiveRecord::Base
5 5
6 6 has_and_belongs_to_many :roles
7 7
8 8 has_many :test_requests, :order => "submitted_at DESC"
9 9
10 10 has_many :messages,
11 11 :class_name => "Message",
12 12 :foreign_key => "sender_id",
13 13 :order => 'created_at DESC'
14 14
15 15 has_many :replied_messages,
16 16 :class_name => "Message",
17 17 :foreign_key => "receiver_id",
18 18 :order => 'created_at DESC'
19 19
20 20 has_many :test_pair_assignments, :dependent => :delete_all
21 21 has_many :submission_statuses
22 22
23 23 has_one :contest_stat, :class_name => "UserContestStat"
24 24
25 25 belongs_to :site
26 26 belongs_to :country
27 27
28 28 # For Code Jom
29 29 has_one :codejom_status
30 30
31 31 named_scope :activated_users, :conditions => {:activated => true}
32 32
33 33 validates_presence_of :login
34 34 validates_uniqueness_of :login
35 35 validates_format_of :login, :with => /^[\_A-Za-z0-9]+$/
36 36 validates_length_of :login, :within => 3..20
37 37
38 38 validates_presence_of :full_name
39 39 validates_length_of :full_name, :minimum => 1
40 40
41 41 validates_presence_of :member1_full_name
42 42 validates_length_of :member1_full_name, :minimum => 1
43 43
44 44 validates_presence_of :password, :if => :password_required?
45 45 validates_length_of :password, :within => 4..20, :if => :password_required?
46 46 validates_confirmation_of :password, :if => :password_required?
47 47
48 48 validates_format_of :email,
49 49 :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
@@ -189,97 +189,97
189 189 return nil if site==nil
190 190 return site.time_left
191 191 elsif Configuration.indv_contest_mode?
192 192 time_limit = Configuration.contest_time_limit
193 193 if contest_stat==nil
194 194 return (Time.now.gmtime + time_limit) - Time.now.gmtime
195 195 else
196 196 finish_time = contest_stat.started_at + time_limit
197 197 current_time = Time.now.gmtime
198 198 if current_time > finish_time
199 199 return 0
200 200 else
201 201 return finish_time - current_time
202 202 end
203 203 end
204 204 else
205 205 return nil
206 206 end
207 207 end
208 208
209 209 def contest_finished?
210 210 if Configuration.contest_mode?
211 211 return false if site==nil
212 212 return site.finished?
213 213 elsif Configuration.indv_contest_mode?
214 214 time_limit = Configuration.contest_time_limit
215 215
216 216 return false if contest_stat==nil
217 217
218 218 return contest_time_left == 0
219 219 else
220 220 return false
221 221 end
222 222 end
223 223
224 224 def contest_started?
225 225 if Configuration.contest_mode?
226 226 return true if site==nil
227 227 return site.started
228 228 else
229 229 return true
230 230 end
231 231 end
232 232
233 233 # For Code Jom
234 234 def update_codejom_status
235 235 status = codejom_status || CodejomStatus.new(:user => self)
236 236 problem_count = Problem.available_problem_count
237 - status.num_problems_passed = (self.submission_statuses.find_all {|s| s.passed}).length
237 + status.num_problems_passed = (self.submission_statuses.find_all {|s| s.passed and s.problem.available }).length
238 238 status.alive = (problem_count - (status.num_problems_passed)) <= CODEJOM_MAX_ALIVE_LEVEL
239 239 status.save
240 240 end
241 241
242 242 def codejom_level
243 243 problem_count = Problem.available_problem_count
244 244 if codejom_status!=nil
245 245 return problem_count - codejom_status.num_problems_passed
246 246 else
247 247 return problem_count
248 248 end
249 249 end
250 250
251 251 protected
252 252 def encrypt_new_password
253 253 return if password.blank?
254 254 self.salt = (10+rand(90)).to_s
255 255 self.hashed_password = User.encrypt(self.password,self.salt)
256 256 end
257 257
258 258 def assign_default_site
259 259 # have to catch error when migrating (because self.site is not available).
260 260 begin
261 261 if self.site==nil
262 262 self.site = Site.find_by_name('default')
263 263 if self.site==nil
264 264 self.site = Site.find(1) # when 'default has be renamed'
265 265 end
266 266 end
267 267 rescue
268 268 end
269 269 end
270 270
271 271 def password_required?
272 272 self.hashed_password.blank? || !self.password.blank?
273 273 end
274 274
275 275 def self.encrypt(string,salt)
276 276 Digest::SHA1.hexdigest(salt + string)
277 277 end
278 278
279 279 def uniqueness_of_email_from_activated_users
280 280 user = User.activated_users.find_by_email(self.email)
281 281 if user and (user.login != self.login)
282 282 self.errors.add_to_base("Email has already been taken")
283 283 end
284 284 end
285 285
You need to be logged in to leave comments. Login now