Show More
Commit Description:
fixed new users import bug when passwords contain extra spaces at the end
Commit Description:
fixed new users import bug when passwords contain extra spaces at the end
File last commit:
Show/Diff file:
Action:
app/controllers/user_admin_controller.rb | 413 lines | 10.5 KiB | text/x-ruby | RubyLexer |
pramook
initial commit...
r0 class UserAdminController < ApplicationController
Jittat Fakcharoenphol
sends notification emails to users after contest upgrade.
r296 include MailHelperMethods
jittat
[web] updated grader monitoring...
r105 before_filter :admin_authorization
pramook
initial commit...
r0
def index
list
render :action => 'list'
end
# GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
jittat
added random user passwords, better user creation by list....
r200 verify :method => :post, :only => [ :destroy,
:create, :create_from_list,
:update ],
pramook
initial commit...
r0 :redirect_to => { :action => :list }
def list
Jittat Fakcharoenphol
added pagination to user_admin, using will_paginate plugin
r299 @user_count = User.count
Jittat Fakcharoenphol
also shows users in all (without pagination)
r300 if params[:page] == 'all'
@users = User.all
@paginated = false
else
@users = User.paginate :page => params[:page]
@paginated = true
end
jittat
MERGED 308:HEAD from http://theory.cpe.ku.ac.th/grader/web/branches/ytopc08-2/, removed some registration info...
r162 @hidden_columns = ['hashed_password', 'salt', 'created_at', 'updated_at']
Jittat Fakcharoenphol
lists users in each contest. individual user contest management moved to each contest user list page
r297 @contests = Contest.enabled
pramook
initial commit...
r0 end
jittat
MERGED change set 372:399 from ytopc08-2 branch...
r190 def active
sessions = ActiveRecord::SessionStore::Session.find(:all, :conditions => ["updated_at >= ?", 60.minutes.ago])
@users = []
sessions.each do |session|
if session.data[:user_id]
@users << User.find(session.data[:user_id])
end
end
end
pramook
initial commit...
r0 def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(params[:user])
jittat
start working on e-mail registration...
r155 @user.activated = true
pramook
initial commit...
r0 if @user.save
flash[:notice] = 'User was successfully created.'
redirect_to :action => 'list'
else
render :action => 'new'
end
end
jittat
add adding list of users...
r4 def create_from_list
lines = params[:user_list]
jittat
added random user passwords, better user creation by list....
r200
note = []
jittat
add adding list of users...
r4 lines.split("\n").each do |line|
jittat
fixed line cut error when create list of users...
r139 items = line.chomp.split(',')
jittat
added random user passwords, better user creation by list....
r200 if items.length>=2
login = items[0]
full_name = items[1]
added_random_password = false
if items.length>=3
Jittat Fakcharoenphol
fixed new users import bug when passwords contain extra spaces at the end
r307 password = items[2].chomp(" ")
jittat
added random user passwords, better user creation by list....
r200 user_alias = (items.length>=4) ? items[3] : login
else
password = random_password
user_alias = (items.length>=4) ? items[3] : login
added_random_password = true
end
user = User.new({:login => login,
:full_name => full_name,
:password => password,
:password_confirmation => password,
:alias => user_alias})
jittat
start working on e-mail registration...
r155 user.activated = true
jittat
add adding list of users...
r4 user.save
jittat
added random user passwords, better user creation by list....
r200
if added_random_password
note << "'#{login}' (+)"
else
note << login
end
jittat
add adding list of users...
r4 end
end
jittat
added random user passwords, better user creation by list....
r200 flash[:notice] = 'User(s) ' + note.join(', ') +
' were successfully created. ' +
'( (+) - created with random passwords.)'
jittat
add adding list of users...
r4 redirect_to :action => 'list'
end
pramook
initial commit...
r0 def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:notice] = 'User was successfully updated.'
redirect_to :action => 'show', :id => @user
else
render :action => 'edit'
end
end
def destroy
User.find(params[:id]).destroy
redirect_to :action => 'list'
end
def user_stat
@problems = Problem.find_available_problems
Jittat Fakcharoenphol
shows more login/contest info on result page
r304 @users = User.find(:all, :include => [:contests, :contest_stat])
pramook
initial commit...
r0 @scorearray = Array.new
@users.each do |u|
ustat = Array.new
jittat
MERGED 308:HEAD from http://theory.cpe.ku.ac.th/grader/web/branches/ytopc08-2/, removed some registration info...
r162 ustat[0] = u
pramook
initial commit...
r0 @problems.each do |p|
jittat
added number (auto generated when submitting) to submissions...
r35 sub = Submission.find_last_by_user_and_problem(u.id,p.id)
if (sub!=nil) and (sub.points!=nil)
jittat
enable user settings, remove APIO header...
r138 ustat << [(sub.points.to_f*100/p.full_score).round, (sub.points>=p.full_score)]
pramook
initial commit...
r0 else
jittat
fixed problem edit form...
r8 ustat << [0,false]
pramook
initial commit...
r0 end
end
@scorearray << ustat
end
end
jittat
[web] import from site...
r106
def import
if params[:file]==''
flash[:notice] = 'Error importing no file'
redirect_to :action => 'list' and return
end
import_from_file(params[:file])
end
jittat
added random user passwords, better user creation by list....
r200 def random_all_passwords
users = User.find(:all)
@prefix = params[:prefix] || ''
@non_admin_users = User.find_non_admin_with_prefix(@prefix)
@changed = false
if request.request_method == :post
@non_admin_users.each do |user|
password = random_password
user.password = password
user.password_confirmation = password
user.save
end
@changed = true
end
end
Jittat Fakcharoenphol
manages users in contests
r280
# contest management
Jittat Fakcharoenphol
lists users in each contest. individual user contest management moved to each contest user list page
r297 def contests
Jittat Fakcharoenphol
assigns all users from on contest list to another
r298 @contest, @users = find_contest_and_user_from_contest_id(params[:id])
@contests = Contest.enabled
end
def assign_from_list
contest_id = params[:users_contest_id]
org_contest, users = find_contest_and_user_from_contest_id(contest_id)
contest = Contest.find(params[:new_contest][:id])
if !contest
flash[:notice] = 'Error: no contest'
redirect_to :action => 'contests', :id =>contest_id
Jittat Fakcharoenphol
lists users in each contest. individual user contest management moved to each contest user list page
r297 end
Jittat Fakcharoenphol
assigns all users from on contest list to another
r298
note = []
users.each do |u|
u.contests = [contest]
note << u.login
Jittat Fakcharoenphol
lists users in each contest. individual user contest management moved to each contest user list page
r297 end
Jittat Fakcharoenphol
assigns all users from on contest list to another
r298 flash[:notice] = 'User(s) ' + note.join(', ') +
" were successfully reassigned to #{contest.title}."
redirect_to :action => 'contests', :id =>contest.id
Jittat Fakcharoenphol
lists users in each contest. individual user contest management moved to each contest user list page
r297 end
Jittat Fakcharoenphol
manages users in contests
r280 def add_to_contest
user = User.find(params[:id])
contest = Contest.find(params[:contest_id])
if user and contest
user.contests << contest
end
redirect_to :action => 'list'
end
def remove_from_contest
user = User.find(params[:id])
contest = Contest.find(params[:contest_id])
if user and contest
user.contests.delete(contest)
end
redirect_to :action => 'list'
end
def contest_management
end
def manage_contest
contest = Contest.find(params[:contest][:id])
if !contest
flash[:notice] = 'You did not choose the contest.'
redirect_to :action => 'contest_management' and return
end
operation = params[:operation]
Jittat Fakcharoenphol
assigns users to a unique contest, small styling on contest title
r281 if not ['add','remove','assign'].include? operation
Jittat Fakcharoenphol
manages users in contests
r280 flash[:notice] = 'You did not choose the operation to perform.'
redirect_to :action => 'contest_management' and return
end
lines = params[:login_list]
if !lines or lines.blank?
flash[:notice] = 'You entered an empty list.'
redirect_to :action => 'contest_management' and return
end
note = []
Jittat Fakcharoenphol
a cleaner, testable way to log out user after contest changed
r295 users = []
Jittat Fakcharoenphol
manages users in contests
r280 lines.split("\n").each do |line|
user = User.find_by_login(line.chomp)
if user
if operation=='add'
Jittat Fakcharoenphol
logs out users after contests changed
r294 if ! user.contests.include? contest
user.contests << contest
end
Jittat Fakcharoenphol
assigns users to a unique contest, small styling on contest title
r281 elsif operation=='remove'
user.contests.delete(contest)
Jittat Fakcharoenphol
manages users in contests
r280 else
Jittat Fakcharoenphol
assigns users to a unique contest, small styling on contest title
r281 user.contests = [contest]
Jittat Fakcharoenphol
manages users in contests
r280 end
Jittat Fakcharoenphol
logs out users after contests changed
r294
Jittat Fakcharoenphol
a cleaner, testable way to log out user after contest changed
r295 if params[:reset_timer]
user.contest_stat.forced_logout = true
user.contest_stat.reset_timer_and_save
end
Jittat Fakcharoenphol
resets contest start time when changing users' contest
r289
Jittat Fakcharoenphol
sends notification emails to users after contest upgrade.
r296 if params[:notification_emails]
send_contest_update_notification_email(user, contest)
end
Jittat Fakcharoenphol
manages users in contests
r280 note << user.login
Jittat Fakcharoenphol
a cleaner, testable way to log out user after contest changed
r295 users << user
Jittat Fakcharoenphol
manages users in contests
r280 end
end
Jittat Fakcharoenphol
logs out users after contests changed
r294
if params[:reset_timer]
Jittat Fakcharoenphol
a cleaner, testable way to log out user after contest changed
r295 logout_users(users)
Jittat Fakcharoenphol
logs out users after contests changed
r294 end
Jittat Fakcharoenphol
manages users in contests
r280 flash[:notice] = 'User(s) ' + note.join(', ') +
' were successfully modified. '
redirect_to :action => 'contest_management'
end
jittat
added random user passwords, better user creation by list....
r200
Jittat Fakcharoenphol
added admin users management
r233 # admin management
def admin
@admins = User.find(:all).find_all {|user| user.admin? }
end
def grant_admin
login = params[:login]
user = User.find_by_login(login)
if user!=nil
admin_role = Role.find_by_name('admin')
user.roles << admin_role
else
flash[:notice] = 'Unknown user'
end
flash[:notice] = 'User added as admins'
redirect_to :action => 'admin'
end
def revoke_admin
user = User.find(params[:id])
if user==nil
flash[:notice] = 'Unknown user'
redirect_to :action => 'admin' and return
elsif user.login == 'root'
flash[:notice] = 'You cannot revoke admisnistrator permission from root.'
redirect_to :action => 'admin' and return
end
admin_role = Role.find_by_name('admin')
user.roles.delete(admin_role)
flash[:notice] = 'User permission revoked'
redirect_to :action => 'admin'
end
jittat
[web] import from site...
r106 protected
jittat
added random user passwords, better user creation by list....
r200 def random_password(length=5)
chars = 'abcdefghijkmnopqrstuvwxyz23456789'
newpass = ""
length.times { newpass << chars[rand(chars.size-1)] }
return newpass
end
jittat
[web] import from site...
r106 def import_from_file(f)
data_hash = YAML.load(f)
@import_log = ""
country_data = data_hash[:countries]
site_data = data_hash[:sites]
user_data = data_hash[:users]
# import country
countries = {}
country_data.each_pair do |id,country|
c = Country.find_by_name(country[:name])
if c!=nil
countries[id] = c
@import_log << "Found #{country[:name]}\n"
else
countries[id] = Country.new(:name => country[:name])
countries[id].save
@import_log << "Created #{country[:name]}\n"
end
end
# import sites
sites = {}
site_data.each_pair do |id,site|
s = Site.find_by_name(site[:name])
if s!=nil
@import_log << "Found #{site[:name]}\n"
else
s = Site.new(:name => site[:name])
@import_log << "Created #{site[:name]}\n"
end
s.password = site[:password]
s.country = countries[site[:country_id]]
s.save
sites[id] = s
end
# import users
user_data.each_pair do |id,user|
u = User.find_by_login(user[:login])
if u!=nil
@import_log << "Found #{user[:login]}\n"
else
u = User.new(:login => user[:login])
@import_log << "Created #{user[:login]}\n"
end
u.full_name = user[:name]
u.password = user[:password]
u.country = countries[user[:country_id]]
u.site = sites[user[:site_id]]
jittat
MERGED 308:HEAD from http://theory.cpe.ku.ac.th/grader/web/branches/ytopc08-2/, removed some registration info...
r162 u.activated = true
u.email = "empty-#{u.login}@none.com"
if not u.save
@import_log << "Errors\n"
u.errors.each { |attr,msg| @import_log << "#{attr} - #{msg}\n" }
end
jittat
[web] import from site...
r106 end
end
Jittat Fakcharoenphol
a cleaner, testable way to log out user after contest changed
r295 def logout_users(users)
users.each do |user|
contest_stat = user.contest_stat(true)
if contest_stat and !contest_stat.forced_logout
contest_stat.forced_logout = true
contest_stat.save
Jittat Fakcharoenphol
logs out users after contests changed
r294 end
end
end
Jittat Fakcharoenphol
sends notification emails to users after contest upgrade.
r296 def send_contest_update_notification_email(user, contest)
contest_title_name = Configuration['contest.name']
contest_name = contest.name
subject = t('contest.notification.email_subject', {
:contest_title_name => contest_title_name,
:contest_name => contest_name })
body = t('contest.notification.email_body', {
:full_name => user.full_name,
:contest_title_name => contest_title_name,
:contest_name => contest.name,
})
logger.info body
send_mail(user.email, subject, body)
end
Jittat Fakcharoenphol
assigns all users from on contest list to another
r298
def find_contest_and_user_from_contest_id(id)
if id!='none'
@contest = Contest.find(id)
else
@contest = nil
end
if @contest
@users = @contest.users
else
@users = User.find_users_with_no_contest
end
return [@contest, @users]
end
pramook
initial commit...
r0 end