From 2a7e0365b895bb786885e3783415c6cc716bf75c Mon Sep 17 00:00:00 2001 From: z9hang Date: Thu, 4 Dec 2014 15:53:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/account_controller.rb | 108 ++++++++++++++------------ app/helpers/account_helper.rb | 41 ++++++++++ app/services/users_service.rb | 22 ++++-- 3 files changed, 113 insertions(+), 58 deletions(-) diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 2ca202191..3de865d6a 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -101,33 +101,22 @@ class AccountController < ApplicationController # User self-registration def register - # @root_path="/home/pdl/redmine-2.3.2-0/apache2/" -# - #@cache_identityy = params[:identity]||"" #身份 - @cache_no = params[:no]||"" #学号 - @cache_technical_title = params[:technical_title]||"" #教师职称 - @cache_province = params[:province]||"" #省份 - @cache_city = params[:city]||"" #城市 - @cache_enterprise_name = params[:enterprise_name]||"" #企业 - - firstname_code = "" - lastname_code = "" (redirect_to(home_url); return) unless Setting.self_registration? || session[:auth_source_registration] if request.get? session[:auth_source_registration] = nil @user = User.new(:language => current_language.to_s) else user_params = params[:user] || {} - @user = User.new - @user.safe_attributes = user_params - if params[:identity] == "2" # 2 企业 - firstname_code = @user.firstname - lastname_code = @user.lastname - @user.firstname = params[:enterprise_name] - @user.lastname = l(:field_enterprise) - end - @user.admin = false - @user.register + #@user = User.new + #@user.safe_attributes = user_params + #if params[:identity] == "2" # 2 企业 + # firstname_code = @user.firstname + # lastname_code = @user.lastname + # @user.firstname = params[:enterprise_name] + # @user.lastname = l(:field_enterprise) + #end + #@user.admin = false + #@user.register if session[:auth_source_registration] @user.activate @user.login = session[:auth_source_registration][:login] @@ -139,42 +128,59 @@ class AccountController < ApplicationController redirect_to my_account_path end else - @user.login = params[:user][:login] - unless user_params[:identity_url].present? && user_params[:password].blank? && user_params[:password_confirmation].blank? - @user.password, @user.password_confirmation = user_params[:password], user_params[:password_confirmation] - end - - - - case Setting.self_registration + us = UsersService.new + @user = us.register user_params.merge(:should_confirmation_password => true) + case Setting.self_registration when '1' - register_by_email_activation(@user) + #register_by_email_activation(@user) + unless @user.new_record? + render action: 'email_valid', locals: {:mail => user.mail} + end when '3' - register_automatically(@user) + #register_automatically(@user) + unless @user.new_record? + self.logged_user = user + flash[:notice] = l(:notice_account_activated) + redirect_to my_account_url + end else - register_manually_by_administrator(@user) - end - - #added by bai - if @user.id != nil - ue = @user.user_extensions ||= UserExtensions.new - #ue = UserExtensions.create(:identity => params[:identity].to_i,:technical_title => params[:technical_title], :gender => params[:gender].to_i, :user_id => @user.id, :student_id => ) - ue.identity = params[:identity].to_i - ue.technical_title = params[:technical_title] - ue.gender = params[:gender].to_i - ue.user_id = @user.id - ue.student_id = params[:no] - ue.location = params[:province] if params[:province] != nil - ue.location_city = params[:city] if params[:city] != nil - ue.save - end + #register_manually_by_administrator(@user) + unless @user.new_record? + account_pending + end + end + # @user.login = params[:user][:login] + # unless user_params[:identity_url].present? && user_params[:password].blank? && user_params[:password_confirmation].blank? + # @user.password, @user.password_confirmation = user_params[:password], user_params[:password_confirmation] + # end + # + # + # + # case Setting.self_registration + # when '1' + # register_by_email_activation(@user) + # when '3' + # register_automatically(@user) + # else + # register_manually_by_administrator(@user) + # end + # + # #added by bai + # if @user.id != nil + # ue = @user.user_extensions ||= UserExtensions.new + # #ue = UserExtensions.create(:identity => params[:identity].to_i,:technical_title => params[:technical_title], :gender => params[:gender].to_i, :user_id => @user.id, :student_id => ) + # ue.identity = params[:identity].to_i + # ue.technical_title = params[:technical_title] + # ue.gender = params[:gender].to_i + # ue.user_id = @user.id + # ue.student_id = params[:no] + # ue.location = params[:province] if params[:province] != nil + # ue.location_city = params[:city] if params[:city] != nil + # ue.save + # end end end - if params[:identity] == "2" - @user.firstname = firstname_code - @user.lastname = lastname_code - end end # Token based account activation diff --git a/app/helpers/account_helper.rb b/app/helpers/account_helper.rb index 8beeac363..3be096492 100644 --- a/app/helpers/account_helper.rb +++ b/app/helpers/account_helper.rb @@ -18,4 +18,45 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. module AccountHelper + + def email_activation_register(user, &block) + token = Token.new(:user => user, :action => "register") + if user.save and token.save + UserStatus.create(:user_id => user.id, :changsets_count => 0, :watchers_count => 0) + Mailer.register(token).deliver + flash[:notice] = l(:notice_account_register_done) + #render action: 'email_valid', locals: {:mail => user.mail} + else + yield if block_given? + end + user + end + + def automatically_register(user, &block) + # Automatic activation + user.activate + user.last_login_on = Time.now + if user.save + UserStatus.create(:user_id => user.id, :changsets_count => 0, :watchers_count => 0) + #self.logged_user = user + #flash[:notice] = l(:notice_account_activated) + #redirect_to my_account_url + else + yield if block_given? + end + user + end + + def administrator_manually__register(user, &block) + if user.save + UserStatus.create(:user_id => user.id ,:changsets_count => 0, :watchers_count => 0) + # Sends an email to the administrators + Mailer.account_activation_request(user).deliver + #account_pending + else + yield if block_given? + end + user + end + end diff --git a/app/services/users_service.rb b/app/services/users_service.rb index aa2c6bf71..f36cf3836 100644 --- a/app/services/users_service.rb +++ b/app/services/users_service.rb @@ -1,24 +1,32 @@ class UsersService - + include AccountHelper #将用户注册的功能函数写这里 #参数约定 #成功返回注册后的User实例,失败直接抛异常 + def register(params) @user = User.new @user.admin = false @user.register @user.login = params[:login] - @user.mail = params[:email] - unless password.blank? - @user.password = params[:password] + @user.mail = params[:mail] + password = params[:password] + password_confirmation = params[:password_confirmation] + should_confirmation_password = params[:should_confirmation_password] + if !password.blank? && !password_confirmation && 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' - register_by_email_activation(@user) + @user = email_activation_register(@user) when '3' - register_automatically(@user) + @user = automatically_register(@user) else - register_manully_by_administrator(@user) + @user = administrator_manually__register(@user) end if @user.id != nil ue = @user.user_extensions ||= UserExtensions.new