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 - - 3 files changed: 23 inserted, 1 deleted

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