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

r308:c400f7405eee - - 2 files changed: 22 inserted, 0 deleted

@@ -32,48 +32,49
32
32
33 validates_presence_of :full_name
33 validates_presence_of :full_name
34 validates_length_of :full_name, :minimum => 1
34 validates_length_of :full_name, :minimum => 1
35
35
36 validates_presence_of :password, :if => :password_required?
36 validates_presence_of :password, :if => :password_required?
37 validates_length_of :password, :within => 4..20, :if => :password_required?
37 validates_length_of :password, :within => 4..20, :if => :password_required?
38 validates_confirmation_of :password, :if => :password_required?
38 validates_confirmation_of :password, :if => :password_required?
39
39
40 validates_format_of :email,
40 validates_format_of :email,
41 :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
41 :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
42 :if => :email_validation?
42 :if => :email_validation?
43 validate :uniqueness_of_email_from_activated_users,
43 validate :uniqueness_of_email_from_activated_users,
44 :if => :email_validation?
44 :if => :email_validation?
45 validate :enough_time_interval_between_same_email_registrations,
45 validate :enough_time_interval_between_same_email_registrations,
46 :if => :email_validation?
46 :if => :email_validation?
47
47
48 # these are for ytopc
48 # these are for ytopc
49 # disable for now
49 # disable for now
50 #validates_presence_of :province
50 #validates_presence_of :province
51
51
52 attr_accessor :password
52 attr_accessor :password
53
53
54 before_save :encrypt_new_password
54 before_save :encrypt_new_password
55 before_save :assign_default_site
55 before_save :assign_default_site
56 + before_save :assign_default_contest
56
57
57 # this is for will_paginate
58 # this is for will_paginate
58 cattr_reader :per_page
59 cattr_reader :per_page
59 @@per_page = 50
60 @@per_page = 50
60
61
61 def self.authenticate(login, password)
62 def self.authenticate(login, password)
62 user = find_by_login(login)
63 user = find_by_login(login)
63 return user if user && user.authenticated?(password)
64 return user if user && user.authenticated?(password)
64 end
65 end
65
66
66 def authenticated?(password)
67 def authenticated?(password)
67 if self.activated
68 if self.activated
68 hashed_password == User.encrypt(password,self.salt)
69 hashed_password == User.encrypt(password,self.salt)
69 else
70 else
70 false
71 false
71 end
72 end
72 end
73 end
73
74
74 def admin?
75 def admin?
75 self.roles.detect {|r| r.name == 'admin' }
76 self.roles.detect {|r| r.name == 'admin' }
76 end
77 end
77
78
78 def email_for_editing
79 def email_for_editing
79 if self.email==nil
80 if self.email==nil
@@ -252,48 +253,61
252 return problem_in_user_contests? problem
253 return problem_in_user_contests? problem
253 end
254 end
254 end
255 end
255
256
256 protected
257 protected
257 def encrypt_new_password
258 def encrypt_new_password
258 return if password.blank?
259 return if password.blank?
259 self.salt = (10+rand(90)).to_s
260 self.salt = (10+rand(90)).to_s
260 self.hashed_password = User.encrypt(self.password,self.salt)
261 self.hashed_password = User.encrypt(self.password,self.salt)
261 end
262 end
262
263
263 def assign_default_site
264 def assign_default_site
264 # have to catch error when migrating (because self.site is not available).
265 # have to catch error when migrating (because self.site is not available).
265 begin
266 begin
266 if self.site==nil
267 if self.site==nil
267 self.site = Site.find_by_name('default')
268 self.site = Site.find_by_name('default')
268 if self.site==nil
269 if self.site==nil
269 self.site = Site.find(1) # when 'default has be renamed'
270 self.site = Site.find(1) # when 'default has be renamed'
270 end
271 end
271 end
272 end
272 rescue
273 rescue
273 end
274 end
274 end
275 end
275
276
277 + def assign_default_contest
278 + # have to catch error when migrating (because self.site is not available).
279 + begin
280 + if self.contests.length == 0
281 + default_contest = Contest.find_by_name(Configuration['contest.default_contest_name'])
282 + if default_contest
283 + self.contests = [default_contest]
284 + end
285 + end
286 + rescue
287 + end
288 + end
289 +
276 def password_required?
290 def password_required?
277 self.hashed_password.blank? || !self.password.blank?
291 self.hashed_password.blank? || !self.password.blank?
278 end
292 end
279
293
280 def self.encrypt(string,salt)
294 def self.encrypt(string,salt)
281 Digest::SHA1.hexdigest(salt + string)
295 Digest::SHA1.hexdigest(salt + string)
282 end
296 end
283
297
284 def uniqueness_of_email_from_activated_users
298 def uniqueness_of_email_from_activated_users
285 user = User.activated_users.find_by_email(self.email)
299 user = User.activated_users.find_by_email(self.email)
286 if user and (user.login != self.login)
300 if user and (user.login != self.login)
287 self.errors.add_to_base("Email has already been taken")
301 self.errors.add_to_base("Email has already been taken")
288 end
302 end
289 end
303 end
290
304
291 def enough_time_interval_between_same_email_registrations
305 def enough_time_interval_between_same_email_registrations
292 return if !self.new_record?
306 return if !self.new_record?
293 return if self.activated
307 return if self.activated
294 open_user = User.find_by_email(self.email,
308 open_user = User.find_by_email(self.email,
295 :order => 'created_at DESC')
309 :order => 'created_at DESC')
296 if open_user and open_user.created_at and
310 if open_user and open_user.created_at and
297 (open_user.created_at > Time.now.gmtime - 5.minutes)
311 (open_user.created_at > Time.now.gmtime - 5.minutes)
298 self.errors.add_to_base("There are already unactivated registrations with this e-mail address (please wait for 5 minutes)")
312 self.errors.add_to_base("There are already unactivated registrations with this e-mail address (please wait for 5 minutes)")
299 end
313 end
@@ -86,49 +86,57
86 :value_type => 'boolean',
86 :value_type => 'boolean',
87 :default_value => 'true',
87 :default_value => 'true',
88 :description => 'If this option is true, users can change their settings'
88 :description => 'If this option is true, users can change their settings'
89 },
89 },
90
90
91 # If Configuration['contest.test_request.early_timeout'] is true
91 # If Configuration['contest.test_request.early_timeout'] is true
92 # the user will not be able to use test request at 30 minutes
92 # the user will not be able to use test request at 30 minutes
93 # before the contest ends.
93 # before the contest ends.
94 {
94 {
95 :key => 'contest.test_request.early_timeout',
95 :key => 'contest.test_request.early_timeout',
96 :value_type => 'boolean',
96 :value_type => 'boolean',
97 :default_value => 'false'
97 :default_value => 'false'
98 },
98 },
99
99
100 {
100 {
101 :key => 'system.multicontests',
101 :key => 'system.multicontests',
102 :value_type => 'boolean',
102 :value_type => 'boolean',
103 :default_value => 'false'
103 :default_value => 'false'
104 },
104 },
105
105
106 {
106 {
107 :key => 'contest.confirm_indv_contest_start',
107 :key => 'contest.confirm_indv_contest_start',
108 :value_type => 'boolean',
108 :value_type => 'boolean',
109 :default_value => 'false'
109 :default_value => 'false'
110 + },
111 +
112 + {
113 + :key => 'contest.default_contest_name',
114 + :value_type => 'string',
115 + :default_value => 'none',
116 + :description => "New user will be assigned to this contest automatically, if it exists. Set to 'none' if there is no default contest."
110 }
117 }
118 +
111 ]
119 ]
112
120
113
121
114 def create_configuration_key(key,
122 def create_configuration_key(key,
115 value_type,
123 value_type,
116 default_value,
124 default_value,
117 description='')
125 description='')
118 conf = (Configuration.find_by_key(key) ||
126 conf = (Configuration.find_by_key(key) ||
119 Configuration.new(:key => key,
127 Configuration.new(:key => key,
120 :value_type => value_type,
128 :value_type => value_type,
121 :value => default_value))
129 :value => default_value))
122 conf.description = description
130 conf.description = description
123 conf.save
131 conf.save
124 end
132 end
125
133
126 def seed_config
134 def seed_config
127 CONFIGURATIONS.each do |conf|
135 CONFIGURATIONS.each do |conf|
128 if conf.has_key? :description
136 if conf.has_key? :description
129 desc = conf[:description]
137 desc = conf[:description]
130 else
138 else
131 desc = ''
139 desc = ''
132 end
140 end
133 create_configuration_key(conf[:key],
141 create_configuration_key(conf[:key],
134 conf[:value_type],
142 conf[:value_type],
You need to be logged in to leave comments. Login now