| 
							
								 | 
							
							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
 |