socialforge/app/services/users_service.rb

258 lines
9.3 KiB
Ruby
Raw Normal View History

class UsersService
include ApplicationHelper
include AccountHelper
include AvatarHelper
include CoursesHelper
2015-01-20 17:42:18 +08:00
include ApiHelper
include WordsHelper
#将用户注册的功能函数写这里
#参数约定
#成功返回注册后的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
2015-01-20 17:42:18 +08:00
@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
# 自动注册功能 FOR邮件邀请
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
2014-12-23 17:43:53 +08:00
work_unit = get_user_work_unit @user
location = get_user_location @user
2015-04-16 15:48:34 +08:00
{:id => @user.id, :img_url => img_url,:realname => @user.realname, :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
2015-03-31 11:42:36 +08:00
Mailer.run.lost_password(token)
return l(:notice_account_lost_email_sent,:locale => user.language)
end
end
#编辑用户
#gender 1female 0male 其他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
2015-01-20 17:42:18 +08:00
#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
2014-12-23 17:43:53 +08:00
end
# 获取某个用户的所有留言信息
def get_all_messages params
user = User.find(params[:user_id])
jours = user.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')
jours.update_all(:is_readed => true, :status => false)
jours.each do |journal|
fetch_user_leaveWord_reply(journal).update_all(:is_readed => true, :status => false)
end
jours
end
2015-05-21 15:57:35 +08:00
# 回复用户
def reply_user_messages params,current_user
user = User.find(params[:user_id])
2015-05-21 15:57:35 +08:00
parent_id = params[:parent_id]
author_id = current_user.id
reply_user_id = params[:ref_user_id]
reply_id = params[:ref_message_id]
content = params[:content]
options = {:user_id => author_id,
:status => true,
:m_parent_id => parent_id,
:m_reply_id => reply_id,
:reply_id => reply_user_id,
:notes => content,
:is_readed => false}
user.add_jour(nil, nil,nil,options)
end
2014-12-23 17:43:53 +08:00
2015-01-20 17:42:18 +08:00
#关注列表
def user_watcher params
@user = User.find(params[:id])
User.watched_by(@user.id)
end
#用户课程列表
2014-12-23 15:38:45 +08:00
def user_courses_list params,current_user
@user = User.find(params[:id])
if !current_user.admin? && !@user.active?
raise '404'
return
end
2014-12-23 15:38:45 +08:00
if current_user == @user || current_user.admin?
membership = @user.coursememberships.all
else
2015-01-21 11:28:09 +08:00
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
2015-04-08 18:20:27 +08:00
raise l(:notice_account_wrong_password,:locale => 'zh')
end
@current_user
end
#搜索用户
def search_user params
2015-04-10 16:43:42 +08:00
status = params[:status] || 1
has = {
"show_changesets" => true
}
2015-04-10 16:43:42 +08:00
scope = User.logged.status(status)
if params[:is_search_assitant].nil?
#modify by yutao 2015/5/18 没有params[:user_id]参数时去掉"id not in (?)"条件(bug:#2270) start
#say by yutao: params[:user_id]这个是指谁发起的搜索么? 如果是 这个值貌似应该从session获取 怪怪的赶脚-_-!
search_by = params[:search_by] ? params[:search_by] : "0"
if params[:name].present?
if !params[:user_id].nil?
watcher = User.watched_by(params[:user_id])
watcher.push(params[:user_id])
scope = scope.where("id not in (?)",watcher)
end
scope = scope.like(params[:name],search_by)
end
#modify by yutao 2015/5/18 没有params[:user_id]参数时去掉"id not in (?)"条件 end
else
teachers = searchTeacherAndAssistant(Course.find(params[:course_id]))
scope = scope.where("id not in (?)",teachers.map{|t| t.user_id}).like(params[:name],search_by) if params[:name].present?
end
scope
end
end