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 # 自动注册功能 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 work_unit = get_user_work_unit @user location = get_user_location @user {: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 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