215 lines
7.5 KiB
Ruby
215 lines
7.5 KiB
Ruby
class UsersService
|
||
include ApplicationHelper
|
||
include AccountHelper
|
||
include AvatarHelper
|
||
include CoursesHelper
|
||
include ApiHelper
|
||
#将用户注册的功能函数写这里
|
||
#参数约定
|
||
#成功返回注册后的User实例,失败直接抛异常
|
||
|
||
def register(params)
|
||
@user = User.new
|
||
@user.admin = false
|
||
@user.register
|
||
@user.login = params[:login]
|
||
@user.mail = params[:mail]
|
||
password = params[:password]
|
||
password_confirmation = params[:password_confirmation]
|
||
should_confirmation_password = params[:should_confirmation_password]
|
||
if !password.blank? && !password_confirmation.blank? && should_confirmation_password
|
||
@user.password, @user.password_confirmation = password, password_confirmation
|
||
elsif !password.blank? && !should_confirmation_password
|
||
@user.password = password
|
||
else
|
||
@user.password = ""
|
||
end
|
||
case Setting.self_registration
|
||
when '1'
|
||
@user = email_activation_register(@user)
|
||
when '3'
|
||
@user = automatically_register(@user)
|
||
else
|
||
@user = administrator_manually__register(@user)
|
||
end
|
||
if @user.id != nil
|
||
ue = @user.user_extensions ||= UserExtensions.new
|
||
ue.user_id = @user.id
|
||
ue.save
|
||
end
|
||
@user
|
||
#img_url = url_to_avatar(@user)
|
||
#gender = @user.user_extensions.gender.nil? ? 0 : @user.user_extensions.gender
|
||
#work_unit = get_user_work_unit @user
|
||
#location = get_user_location @user
|
||
#{:id => @user.id, :img_url => img_url, :nickname => @user.login, :gender => gender, :work_unit => work_unit, :mail => @user.mail, :location => location, :brief_introduction => @user.user_extensions.brief_introduction}
|
||
end
|
||
def register_auto(login,mail,password)
|
||
@user = User.new
|
||
@user.admin = false
|
||
@user.register
|
||
@user.login = login
|
||
@user.mail =mail
|
||
password_confirmation = password
|
||
should_confirmation_password = true
|
||
if !password.blank? && !password_confirmation.blank? && should_confirmation_password
|
||
@user.password, @user.password_confirmation = password, password_confirmation
|
||
elsif !password.blank? && !should_confirmation_password
|
||
@user.password = password
|
||
else
|
||
@user.password = ""
|
||
end
|
||
|
||
@user = automatically_register(@user)
|
||
|
||
if @user.id != nil
|
||
ue = @user.user_extensions ||= UserExtensions.new
|
||
ue.user_id = @user.id
|
||
ue.save
|
||
end
|
||
@user
|
||
end
|
||
#显示用户
|
||
#id用户id
|
||
def show_user(params)
|
||
@user = User.find(params[:id])
|
||
img_url = url_to_avatar(@user)
|
||
gender = @user.user_extensions.gender.nil? ? 0 : @user.user_extensions.gender
|
||
work_unit = get_user_work_unit @user
|
||
location = get_user_location @user
|
||
{:id => @user.id, :img_url => img_url, :nickname => @user.login, :gender => gender, :work_unit => work_unit, :mail => @user.mail, :location => location, :brief_introduction => @user.user_extensions.brief_introduction}
|
||
end
|
||
|
||
#忘记密码
|
||
def lost_password params
|
||
user = ::User.find_by_mail(params[:mail].to_s)
|
||
# user not found or not active
|
||
unless user && user.active?
|
||
raise l(:notice_account_unknown_email,:locale => 'zh')
|
||
end
|
||
# user cannot change its password
|
||
unless user.change_password_allowed?
|
||
raise l(:notice_can_t_change_password,:locale => user.language)
|
||
return
|
||
end
|
||
# create a new token for password recovery
|
||
token = Token.new(:user => user, :action => "recovery")
|
||
if token.save
|
||
Mailer.run.lost_password(token)
|
||
return l(:notice_account_lost_email_sent,:locale => user.language)
|
||
end
|
||
end
|
||
|
||
#编辑用户
|
||
#gender 1:female 0:male 其他:male
|
||
def edit_user params
|
||
@user = User.find(params[:id])
|
||
fileio = params[:file]
|
||
|
||
@se = @user.extensions
|
||
if @user.user_extensions.identity == 0 || @user.user_extensions.identity == 1
|
||
@se.school_id = params[:occupation]
|
||
elsif @user.user_extensions.identity == 3
|
||
@se.occupation = params[:occupation]
|
||
elsif @user.user_extensions.identity == 2
|
||
@user.firstname = params[:occupation]
|
||
end
|
||
@se.brief_introduction = params[:brief_introduction]
|
||
@se.gender = params[:gender]
|
||
@se.location = params[:province] if params[:province]
|
||
@se.location_city = params[:city] if params[:city]
|
||
raise @se.errors.full_message unless @se.save
|
||
unless fileio.nil?
|
||
file = fileio[:tempfile]
|
||
diskfile=disk_filename(@user.class.to_s, @user.id)
|
||
@image_file = fileio[:name]
|
||
@urlfile='/' << File.join("images", "avatars", avatar_directory(@user.class.to_s), avatar_filename(@user.id, @image_file))
|
||
|
||
path = File.dirname(diskfile)
|
||
unless File.directory?(path)
|
||
FileUtils.mkdir_p(path)
|
||
end
|
||
File.rename(file.path, @urlfile)
|
||
begin
|
||
f = Magick::ImageList.new(diskfile)
|
||
# gif格式不再做大小处理
|
||
if f.format != 'GIF'
|
||
width = 300.0
|
||
proportion = (width/f[0].columns)
|
||
height = (f[0].rows*proportion)
|
||
f.resize_to_fill!(width, height)
|
||
f.write(diskfile)
|
||
end
|
||
|
||
rescue Exception => e
|
||
logger.error "[Error] avatar : users_service#edit_user ===> #{e}"
|
||
end
|
||
end
|
||
#img_url = url_to_avatar(@user)
|
||
#gender = @user.user_extensions.gender.nil? ? 0 : @user.user_extensions.gender
|
||
#work_unit = get_user_work_unit @user
|
||
#location = get_user_location @user
|
||
#{:id => @user.id, :img_url => img_url, :nickname => @user.login, :gender => gender, :work_unit => work_unit, :mail => @user.mail, :location => location, :brief_introduction => @user.user_extensions.brief_introduction}
|
||
@user
|
||
end
|
||
|
||
|
||
|
||
|
||
|
||
#关注列表
|
||
def user_watcher params
|
||
@user = User.find(params[:id])
|
||
User.watched_by(@user.id)
|
||
end
|
||
|
||
#用户课程列表
|
||
def user_courses_list params,current_user
|
||
@user = User.find(params[:id])
|
||
if !current_user.admin? && !@user.active?
|
||
raise '404'
|
||
return
|
||
end
|
||
if current_user == @user || current_user.admin?
|
||
membership = @user.coursememberships.all
|
||
else
|
||
membership = @user.coursememberships.all(:conditions => Course.visible_condition(current_user))
|
||
end
|
||
membership.sort! {|older, newer| newer.created_on <=> older.created_on }
|
||
course_list = []
|
||
membership.each do |mp|
|
||
course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:current_user_is_member => current_user.member_of_course?(mp.course),:current_user_is_teacher => is_course_teacher(current_user,mp.course)}
|
||
end
|
||
course_list
|
||
end
|
||
|
||
#修改密码
|
||
def change_password params
|
||
@current_user = User.find(params[:current_user_id])
|
||
if @current_user.check_password?(params[:password])
|
||
@current_user.password, @current_user.password_confirmation = params[:new_password], params[:new_password_confirmation]
|
||
@current_user.save
|
||
#raise @current_user.errors.full_message
|
||
#return @current_user
|
||
else
|
||
raise l(:notice_account_wrong_password,:locale => 'zh')
|
||
end
|
||
@current_user
|
||
end
|
||
|
||
#搜索用户
|
||
def search_user params
|
||
status = params[:status] || 1
|
||
has = {
|
||
"show_changesets" => true
|
||
}
|
||
scope = User.logged.status(status)
|
||
watcher = User.watched_by(params[:user_id])
|
||
watcher.push(params[:user_id])
|
||
search_by = params[:search_by] ? params[:search_by] : "0"
|
||
scope = scope.where("id not in (?)",watcher).like(params[:name],search_by) if params[:name].present?
|
||
scope
|
||
end
|
||
|
||
end
|