Description:
+ new list of user with remark
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r633:49e05926711f - - 1 file changed: 17 inserted, 5 deleted

@@ -1,481 +1,493
1 require 'csv'
1 require 'csv'
2
2
3 class UserAdminController < ApplicationController
3 class UserAdminController < ApplicationController
4
4
5 include MailHelperMethods
5 include MailHelperMethods
6
6
7 before_filter :admin_authorization
7 before_filter :admin_authorization
8
8
9 # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
9 # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
10 verify :method => :post, :only => [
10 verify :method => :post, :only => [
11 :create, :create_from_list,
11 :create, :create_from_list,
12 :update,
12 :update,
13 :manage_contest,
13 :manage_contest,
14 :bulk_mail
14 :bulk_mail
15 ],
15 ],
16 :redirect_to => { :action => :list }
16 :redirect_to => { :action => :list }
17
17
18 def index
18 def index
19 @user_count = User.count
19 @user_count = User.count
20 if params[:page] == 'all'
20 if params[:page] == 'all'
21 @users = User.all
21 @users = User.all
22 @paginated = false
22 @paginated = false
23 else
23 else
24 @users = User.paginate :page => params[:page]
24 @users = User.paginate :page => params[:page]
25 @paginated = true
25 @paginated = true
26 end
26 end
27 @hidden_columns = ['hashed_password', 'salt', 'created_at', 'updated_at']
27 @hidden_columns = ['hashed_password', 'salt', 'created_at', 'updated_at']
28 @contests = Contest.enabled
28 @contests = Contest.enabled
29 end
29 end
30
30
31 def active
31 def active
32 sessions = ActiveRecord::SessionStore::Session.where("updated_at >= ?", 60.minutes.ago)
32 sessions = ActiveRecord::SessionStore::Session.where("updated_at >= ?", 60.minutes.ago)
33 @users = []
33 @users = []
34 sessions.each do |session|
34 sessions.each do |session|
35 if session.data[:user_id]
35 if session.data[:user_id]
36 @users << User.find(session.data[:user_id])
36 @users << User.find(session.data[:user_id])
37 end
37 end
38 end
38 end
39 end
39 end
40
40
41 def show
41 def show
42 @user = User.find(params[:id])
42 @user = User.find(params[:id])
43 end
43 end
44
44
45 def new
45 def new
46 @user = User.new
46 @user = User.new
47 end
47 end
48
48
49 def create
49 def create
50 @user = User.new(params[:user])
50 @user = User.new(params[:user])
51 @user.activated = true
51 @user.activated = true
52 if @user.save
52 if @user.save
53 flash[:notice] = 'User was successfully created.'
53 flash[:notice] = 'User was successfully created.'
54 redirect_to :action => 'index'
54 redirect_to :action => 'index'
55 else
55 else
56 render :action => 'new'
56 render :action => 'new'
57 end
57 end
58 end
58 end
59
59
60 def clear_last_ip
60 def clear_last_ip
61 @user = User.find(params[:id])
61 @user = User.find(params[:id])
62 @user.last_ip = nil
62 @user.last_ip = nil
63 @user.save
63 @user.save
64 redirect_to action: 'index', page: params[:page]
64 redirect_to action: 'index', page: params[:page]
65 end
65 end
66
66
67 def create_from_list
67 def create_from_list
68 lines = params[:user_list]
68 lines = params[:user_list]
69
69
70 note = []
70 note = []
71
71
72 lines.split("\n").each do |line|
72 lines.split("\n").each do |line|
73 items = line.chomp.split(',')
73 items = line.chomp.split(',')
74 if items.length>=2
74 if items.length>=2
75 login = items[0]
75 login = items[0]
76 full_name = items[1]
76 full_name = items[1]
77 + remark =''
78 + user_alias = ''
77
79
78 added_random_password = false
80 added_random_password = false
79 - if items.length>=3
81 + if items.length >= 3 and items[2].chomp(" ").length > 0;
80 password = items[2].chomp(" ")
82 password = items[2].chomp(" ")
81 - user_alias = (items.length>=4) ? items[3] : login
82 else
83 else
83 password = random_password
84 password = random_password
84 - user_alias = (items.length>=4) ? items[3] : login
85 + add_random_password=true;
85 - added_random_password = true
86 + end
87 +
88 + if items.length>= 4 and items[3].chomp(" ").length > 0;
89 + user_alias = items[3].chomp(" ")
90 + else
91 + user_alias = login
92 + end
93 +
94 + if items.length>=5
95 + remark = items[4].strip;
86 end
96 end
87
97
88 user = User.find_by_login(login)
98 user = User.find_by_login(login)
89 if (user)
99 if (user)
90 user.full_name = full_name
100 user.full_name = full_name
91 user.password = password
101 user.password = password
102 + user.remark = remark
92 else
103 else
93 user = User.new({:login => login,
104 user = User.new({:login => login,
94 :full_name => full_name,
105 :full_name => full_name,
95 :password => password,
106 :password => password,
96 :password_confirmation => password,
107 :password_confirmation => password,
97 - :alias => user_alias})
108 + :alias => user_alias,
109 + :remark => remark})
98 end
110 end
99 user.activated = true
111 user.activated = true
100 user.save
112 user.save
101
113
102 if added_random_password
114 if added_random_password
103 note << "'#{login}' (+)"
115 note << "'#{login}' (+)"
104 else
116 else
105 note << login
117 note << login
106 end
118 end
107 end
119 end
108 end
120 end
109 flash[:notice] = 'User(s) ' + note.join(', ') +
121 flash[:notice] = 'User(s) ' + note.join(', ') +
110 ' were successfully created. ' +
122 ' were successfully created. ' +
111 '( (+) - created with random passwords.)'
123 '( (+) - created with random passwords.)'
112 redirect_to :action => 'index'
124 redirect_to :action => 'index'
113 end
125 end
114
126
115 def edit
127 def edit
116 @user = User.find(params[:id])
128 @user = User.find(params[:id])
117 end
129 end
118
130
119 def update
131 def update
120 @user = User.find(params[:id])
132 @user = User.find(params[:id])
121 if @user.update_attributes(user_params)
133 if @user.update_attributes(user_params)
122 flash[:notice] = 'User was successfully updated.'
134 flash[:notice] = 'User was successfully updated.'
123 redirect_to :action => 'show', :id => @user
135 redirect_to :action => 'show', :id => @user
124 else
136 else
125 render :action => 'edit'
137 render :action => 'edit'
126 end
138 end
127 end
139 end
128
140
129 def destroy
141 def destroy
130 User.find(params[:id]).destroy
142 User.find(params[:id]).destroy
131 redirect_to :action => 'index'
143 redirect_to :action => 'index'
132 end
144 end
133
145
134 def user_stat
146 def user_stat
135 if params[:commit] == 'download csv'
147 if params[:commit] == 'download csv'
136 @problems = Problem.all
148 @problems = Problem.all
137 else
149 else
138 @problems = Problem.available_problems
150 @problems = Problem.available_problems
139 end
151 end
140 @users = User.includes(:contests, :contest_stat).where(enabled: true)
152 @users = User.includes(:contests, :contest_stat).where(enabled: true)
141 @scorearray = Array.new
153 @scorearray = Array.new
142 @users.each do |u|
154 @users.each do |u|
143 ustat = Array.new
155 ustat = Array.new
144 ustat[0] = u
156 ustat[0] = u
145 @problems.each do |p|
157 @problems.each do |p|
146 sub = Submission.find_last_by_user_and_problem(u.id,p.id)
158 sub = Submission.find_last_by_user_and_problem(u.id,p.id)
147 if (sub!=nil) and (sub.points!=nil) and p and p.full_score
159 if (sub!=nil) and (sub.points!=nil) and p and p.full_score
148 ustat << [(sub.points.to_f*100/p.full_score).round, (sub.points>=p.full_score)]
160 ustat << [(sub.points.to_f*100/p.full_score).round, (sub.points>=p.full_score)]
149 else
161 else
150 ustat << [0,false]
162 ustat << [0,false]
151 end
163 end
152 end
164 end
153 @scorearray << ustat
165 @scorearray << ustat
154 end
166 end
155 if params[:commit] == 'download csv' then
167 if params[:commit] == 'download csv' then
156 csv = gen_csv_from_scorearray(@scorearray,@problems)
168 csv = gen_csv_from_scorearray(@scorearray,@problems)
157 send_data csv, filename: 'last_score.csv'
169 send_data csv, filename: 'last_score.csv'
158 else
170 else
159 render template: 'user_admin/user_stat'
171 render template: 'user_admin/user_stat'
160 end
172 end
161 end
173 end
162
174
163 def user_stat_max
175 def user_stat_max
164 if params[:commit] == 'download csv'
176 if params[:commit] == 'download csv'
165 @problems = Problem.all
177 @problems = Problem.all
166 else
178 else
167 @problems = Problem.available_problems
179 @problems = Problem.available_problems
168 end
180 end
169 @users = User.includes(:contests).includes(:contest_stat).all
181 @users = User.includes(:contests).includes(:contest_stat).all
170 @scorearray = Array.new
182 @scorearray = Array.new
171 #set up range from param
183 #set up range from param
172 since_id = params.fetch(:since_id, 0).to_i
184 since_id = params.fetch(:since_id, 0).to_i
173 until_id = params.fetch(:until_id, 0).to_i
185 until_id = params.fetch(:until_id, 0).to_i
174 @users.each do |u|
186 @users.each do |u|
175 ustat = Array.new
187 ustat = Array.new
176 ustat[0] = u
188 ustat[0] = u
177 @problems.each do |p|
189 @problems.each do |p|
178 max_points = 0
190 max_points = 0
179 Submission.find_in_range_by_user_and_problem(u.id,p.id,since_id,until_id).each do |sub|
191 Submission.find_in_range_by_user_and_problem(u.id,p.id,since_id,until_id).each do |sub|
180 max_points = sub.points if sub and sub.points and (sub.points > max_points)
192 max_points = sub.points if sub and sub.points and (sub.points > max_points)
181 end
193 end
182 ustat << [(max_points.to_f*100/p.full_score).round, (max_points>=p.full_score)]
194 ustat << [(max_points.to_f*100/p.full_score).round, (max_points>=p.full_score)]
183 end
195 end
184 @scorearray << ustat
196 @scorearray << ustat
185 end
197 end
186
198
187 if params[:commit] == 'download csv' then
199 if params[:commit] == 'download csv' then
188 csv = gen_csv_from_scorearray(@scorearray,@problems)
200 csv = gen_csv_from_scorearray(@scorearray,@problems)
189 send_data csv, filename: 'max_score.csv'
201 send_data csv, filename: 'max_score.csv'
190 else
202 else
191 render template: 'user_admin/user_stat'
203 render template: 'user_admin/user_stat'
192 end
204 end
193 end
205 end
194
206
195 def import
207 def import
196 if params[:file]==''
208 if params[:file]==''
197 flash[:notice] = 'Error importing no file'
209 flash[:notice] = 'Error importing no file'
198 redirect_to :action => 'index' and return
210 redirect_to :action => 'index' and return
199 end
211 end
200 import_from_file(params[:file])
212 import_from_file(params[:file])
201 end
213 end
202
214
203 def random_all_passwords
215 def random_all_passwords
204 users = User.all
216 users = User.all
205 @prefix = params[:prefix] || ''
217 @prefix = params[:prefix] || ''
206 @non_admin_users = User.find_non_admin_with_prefix(@prefix)
218 @non_admin_users = User.find_non_admin_with_prefix(@prefix)
207 @changed = false
219 @changed = false
208 if request.request_method == 'POST'
220 if request.request_method == 'POST'
209 @non_admin_users.each do |user|
221 @non_admin_users.each do |user|
210 password = random_password
222 password = random_password
211 user.password = password
223 user.password = password
212 user.password_confirmation = password
224 user.password_confirmation = password
213 user.save
225 user.save
214 end
226 end
215 @changed = true
227 @changed = true
216 end
228 end
217 end
229 end
218
230
219 # contest management
231 # contest management
220
232
221 def contests
233 def contests
222 @contest, @users = find_contest_and_user_from_contest_id(params[:id])
234 @contest, @users = find_contest_and_user_from_contest_id(params[:id])
223 @contests = Contest.enabled
235 @contests = Contest.enabled
224 end
236 end
225
237
226 def assign_from_list
238 def assign_from_list
227 contest_id = params[:users_contest_id]
239 contest_id = params[:users_contest_id]
228 org_contest, users = find_contest_and_user_from_contest_id(contest_id)
240 org_contest, users = find_contest_and_user_from_contest_id(contest_id)
229 contest = Contest.find(params[:new_contest][:id])
241 contest = Contest.find(params[:new_contest][:id])
230 if !contest
242 if !contest
231 flash[:notice] = 'Error: no contest'
243 flash[:notice] = 'Error: no contest'
232 redirect_to :action => 'contests', :id =>contest_id
244 redirect_to :action => 'contests', :id =>contest_id
233 end
245 end
234
246
235 note = []
247 note = []
236 users.each do |u|
248 users.each do |u|
237 u.contests = [contest]
249 u.contests = [contest]
238 note << u.login
250 note << u.login
239 end
251 end
240 flash[:notice] = 'User(s) ' + note.join(', ') +
252 flash[:notice] = 'User(s) ' + note.join(', ') +
241 " were successfully reassigned to #{contest.title}."
253 " were successfully reassigned to #{contest.title}."
242 redirect_to :action => 'contests', :id =>contest.id
254 redirect_to :action => 'contests', :id =>contest.id
243 end
255 end
244
256
245 def add_to_contest
257 def add_to_contest
246 user = User.find(params[:id])
258 user = User.find(params[:id])
247 contest = Contest.find(params[:contest_id])
259 contest = Contest.find(params[:contest_id])
248 if user and contest
260 if user and contest
249 user.contests << contest
261 user.contests << contest
250 end
262 end
251 redirect_to :action => 'index'
263 redirect_to :action => 'index'
252 end
264 end
253
265
254 def remove_from_contest
266 def remove_from_contest
255 user = User.find(params[:id])
267 user = User.find(params[:id])
256 contest = Contest.find(params[:contest_id])
268 contest = Contest.find(params[:contest_id])
257 if user and contest
269 if user and contest
258 user.contests.delete(contest)
270 user.contests.delete(contest)
259 end
271 end
260 redirect_to :action => 'index'
272 redirect_to :action => 'index'
261 end
273 end
262
274
263 def contest_management
275 def contest_management
264 end
276 end
265
277
266 def manage_contest
278 def manage_contest
267 contest = Contest.find(params[:contest][:id])
279 contest = Contest.find(params[:contest][:id])
268 if !contest
280 if !contest
269 flash[:notice] = 'You did not choose the contest.'
281 flash[:notice] = 'You did not choose the contest.'
270 redirect_to :action => 'contest_management' and return
282 redirect_to :action => 'contest_management' and return
271 end
283 end
272
284
273 operation = params[:operation]
285 operation = params[:operation]
274
286
275 if not ['add','remove','assign'].include? operation
287 if not ['add','remove','assign'].include? operation
276 flash[:notice] = 'You did not choose the operation to perform.'
288 flash[:notice] = 'You did not choose the operation to perform.'
277 redirect_to :action => 'contest_management' and return
289 redirect_to :action => 'contest_management' and return
278 end
290 end
279
291
280 lines = params[:login_list]
292 lines = params[:login_list]
281 if !lines or lines.blank?
293 if !lines or lines.blank?
282 flash[:notice] = 'You entered an empty list.'
294 flash[:notice] = 'You entered an empty list.'
283 redirect_to :action => 'contest_management' and return
295 redirect_to :action => 'contest_management' and return
284 end
296 end
285
297
286 note = []
298 note = []
287 users = []
299 users = []
288 lines.split("\n").each do |line|
300 lines.split("\n").each do |line|
289 user = User.find_by_login(line.chomp)
301 user = User.find_by_login(line.chomp)
290 if user
302 if user
291 if operation=='add'
303 if operation=='add'
292 if ! user.contests.include? contest
304 if ! user.contests.include? contest
293 user.contests << contest
305 user.contests << contest
294 end
306 end
295 elsif operation=='remove'
307 elsif operation=='remove'
296 user.contests.delete(contest)
308 user.contests.delete(contest)
297 else
309 else
298 user.contests = [contest]
310 user.contests = [contest]
299 end
311 end
300
312
301 if params[:reset_timer]
313 if params[:reset_timer]
302 user.contest_stat.forced_logout = true
314 user.contest_stat.forced_logout = true
303 user.contest_stat.reset_timer_and_save
315 user.contest_stat.reset_timer_and_save
304 end
316 end
305
317
306 if params[:notification_emails]
318 if params[:notification_emails]
307 send_contest_update_notification_email(user, contest)
319 send_contest_update_notification_email(user, contest)
308 end
320 end
309
321
310 note << user.login
322 note << user.login
311 users << user
323 users << user
312 end
324 end
313 end
325 end
314
326
315 if params[:reset_timer]
327 if params[:reset_timer]
316 logout_users(users)
328 logout_users(users)
317 end
329 end
318
330
319 flash[:notice] = 'User(s) ' + note.join(', ') +
331 flash[:notice] = 'User(s) ' + note.join(', ') +
320 ' were successfully modified. '
332 ' were successfully modified. '
321 redirect_to :action => 'contest_management'
333 redirect_to :action => 'contest_management'
322 end
334 end
323
335
324 # admin management
336 # admin management
325
337
326 def admin
338 def admin
327 @admins = User.all.find_all {|user| user.admin? }
339 @admins = User.all.find_all {|user| user.admin? }
328 end
340 end
329
341
330 def grant_admin
342 def grant_admin
331 login = params[:login]
343 login = params[:login]
332 user = User.find_by_login(login)
344 user = User.find_by_login(login)
333 if user!=nil
345 if user!=nil
334 admin_role = Role.find_by_name('admin')
346 admin_role = Role.find_by_name('admin')
335 user.roles << admin_role
347 user.roles << admin_role
336 else
348 else
337 flash[:notice] = 'Unknown user'
349 flash[:notice] = 'Unknown user'
338 end
350 end
339 flash[:notice] = 'User added as admins'
351 flash[:notice] = 'User added as admins'
340 redirect_to :action => 'admin'
352 redirect_to :action => 'admin'
341 end
353 end
342
354
343 def revoke_admin
355 def revoke_admin
344 user = User.find(params[:id])
356 user = User.find(params[:id])
345 if user==nil
357 if user==nil
346 flash[:notice] = 'Unknown user'
358 flash[:notice] = 'Unknown user'
347 redirect_to :action => 'admin' and return
359 redirect_to :action => 'admin' and return
348 elsif user.login == 'root'
360 elsif user.login == 'root'
349 flash[:notice] = 'You cannot revoke admisnistrator permission from root.'
361 flash[:notice] = 'You cannot revoke admisnistrator permission from root.'
350 redirect_to :action => 'admin' and return
362 redirect_to :action => 'admin' and return
351 end
363 end
352
364
353 admin_role = Role.find_by_name('admin')
365 admin_role = Role.find_by_name('admin')
354 user.roles.delete(admin_role)
366 user.roles.delete(admin_role)
355 flash[:notice] = 'User permission revoked'
367 flash[:notice] = 'User permission revoked'
356 redirect_to :action => 'admin'
368 redirect_to :action => 'admin'
357 end
369 end
358
370
359 # mass mailing
371 # mass mailing
360
372
361 def mass_mailing
373 def mass_mailing
362 end
374 end
363
375
364 def bulk_mail
376 def bulk_mail
365 lines = params[:login_list]
377 lines = params[:login_list]
366 if !lines or lines.blank?
378 if !lines or lines.blank?
367 flash[:notice] = 'You entered an empty list.'
379 flash[:notice] = 'You entered an empty list.'
368 redirect_to :action => 'mass_mailing' and return
380 redirect_to :action => 'mass_mailing' and return
369 end
381 end
370
382
371 mail_subject = params[:subject]
383 mail_subject = params[:subject]
372 if !mail_subject or mail_subject.blank?
384 if !mail_subject or mail_subject.blank?
373 flash[:notice] = 'You entered an empty mail subject.'
385 flash[:notice] = 'You entered an empty mail subject.'
374 redirect_to :action => 'mass_mailing' and return
386 redirect_to :action => 'mass_mailing' and return
375 end
387 end
376
388
377 mail_body = params[:email_body]
389 mail_body = params[:email_body]
378 if !mail_body or mail_body.blank?
390 if !mail_body or mail_body.blank?
379 flash[:notice] = 'You entered an empty mail body.'
391 flash[:notice] = 'You entered an empty mail body.'
380 redirect_to :action => 'mass_mailing' and return
392 redirect_to :action => 'mass_mailing' and return
381 end
393 end
382
394
383 note = []
395 note = []
384 users = []
396 users = []
385 lines.split("\n").each do |line|
397 lines.split("\n").each do |line|
386 user = User.find_by_login(line.chomp)
398 user = User.find_by_login(line.chomp)
387 if user
399 if user
388 send_mail(user.email, mail_subject, mail_body)
400 send_mail(user.email, mail_subject, mail_body)
389 note << user.login
401 note << user.login
390 end
402 end
391 end
403 end
392
404
393 flash[:notice] = 'User(s) ' + note.join(', ') +
405 flash[:notice] = 'User(s) ' + note.join(', ') +
394 ' were successfully modified. '
406 ' were successfully modified. '
395 redirect_to :action => 'mass_mailing'
407 redirect_to :action => 'mass_mailing'
396 end
408 end
397
409
398 protected
410 protected
399
411
400 def random_password(length=5)
412 def random_password(length=5)
401 chars = 'abcdefghijkmnopqrstuvwxyz23456789'
413 chars = 'abcdefghijkmnopqrstuvwxyz23456789'
402 newpass = ""
414 newpass = ""
403 length.times { newpass << chars[rand(chars.size-1)] }
415 length.times { newpass << chars[rand(chars.size-1)] }
404 return newpass
416 return newpass
405 end
417 end
406
418
407 def import_from_file(f)
419 def import_from_file(f)
408 data_hash = YAML.load(f)
420 data_hash = YAML.load(f)
409 @import_log = ""
421 @import_log = ""
410
422
411 country_data = data_hash[:countries]
423 country_data = data_hash[:countries]
412 site_data = data_hash[:sites]
424 site_data = data_hash[:sites]
413 user_data = data_hash[:users]
425 user_data = data_hash[:users]
414
426
415 # import country
427 # import country
416 countries = {}
428 countries = {}
417 country_data.each_pair do |id,country|
429 country_data.each_pair do |id,country|
418 c = Country.find_by_name(country[:name])
430 c = Country.find_by_name(country[:name])
419 if c!=nil
431 if c!=nil
420 countries[id] = c
432 countries[id] = c
421 @import_log << "Found #{country[:name]}\n"
433 @import_log << "Found #{country[:name]}\n"
422 else
434 else
423 countries[id] = Country.new(:name => country[:name])
435 countries[id] = Country.new(:name => country[:name])
424 countries[id].save
436 countries[id].save
425 @import_log << "Created #{country[:name]}\n"
437 @import_log << "Created #{country[:name]}\n"
426 end
438 end
427 end
439 end
428
440
429 # import sites
441 # import sites
430 sites = {}
442 sites = {}
431 site_data.each_pair do |id,site|
443 site_data.each_pair do |id,site|
432 s = Site.find_by_name(site[:name])
444 s = Site.find_by_name(site[:name])
433 if s!=nil
445 if s!=nil
434 @import_log << "Found #{site[:name]}\n"
446 @import_log << "Found #{site[:name]}\n"
435 else
447 else
436 s = Site.new(:name => site[:name])
448 s = Site.new(:name => site[:name])
437 @import_log << "Created #{site[:name]}\n"
449 @import_log << "Created #{site[:name]}\n"
438 end
450 end
439 s.password = site[:password]
451 s.password = site[:password]
440 s.country = countries[site[:country_id]]
452 s.country = countries[site[:country_id]]
441 s.save
453 s.save
442 sites[id] = s
454 sites[id] = s
443 end
455 end
444
456
445 # import users
457 # import users
446 user_data.each_pair do |id,user|
458 user_data.each_pair do |id,user|
447 u = User.find_by_login(user[:login])
459 u = User.find_by_login(user[:login])
448 if u!=nil
460 if u!=nil
449 @import_log << "Found #{user[:login]}\n"
461 @import_log << "Found #{user[:login]}\n"
450 else
462 else
451 u = User.new(:login => user[:login])
463 u = User.new(:login => user[:login])
452 @import_log << "Created #{user[:login]}\n"
464 @import_log << "Created #{user[:login]}\n"
453 end
465 end
454 u.full_name = user[:name]
466 u.full_name = user[:name]
455 u.password = user[:password]
467 u.password = user[:password]
456 u.country = countries[user[:country_id]]
468 u.country = countries[user[:country_id]]
457 u.site = sites[user[:site_id]]
469 u.site = sites[user[:site_id]]
458 u.activated = true
470 u.activated = true
459 u.email = "empty-#{u.login}@none.com"
471 u.email = "empty-#{u.login}@none.com"
460 if not u.save
472 if not u.save
461 @import_log << "Errors\n"
473 @import_log << "Errors\n"
462 u.errors.each { |attr,msg| @import_log << "#{attr} - #{msg}\n" }
474 u.errors.each { |attr,msg| @import_log << "#{attr} - #{msg}\n" }
463 end
475 end
464 end
476 end
465
477
466 end
478 end
467
479
468 def logout_users(users)
480 def logout_users(users)
469 users.each do |user|
481 users.each do |user|
470 contest_stat = user.contest_stat(true)
482 contest_stat = user.contest_stat(true)
471 if contest_stat and !contest_stat.forced_logout
483 if contest_stat and !contest_stat.forced_logout
472 contest_stat.forced_logout = true
484 contest_stat.forced_logout = true
473 contest_stat.save
485 contest_stat.save
474 end
486 end
475 end
487 end
476 end
488 end
477
489
478 def send_contest_update_notification_email(user, contest)
490 def send_contest_update_notification_email(user, contest)
479 contest_title_name = GraderConfiguration['contest.name']
491 contest_title_name = GraderConfiguration['contest.name']
480 contest_name = contest.name
492 contest_name = contest.name
481 mail_subject = t('contest.notification.email_subject', {
493 mail_subject = t('contest.notification.email_subject', {
You need to be logged in to leave comments. Login now