# class RegistrationsController

app/controllers/registrations_controller.rb

### Public Instance Methods

create() click to toggle source

POST /resource

    # File app/controllers/registrations_controller.rb, line 6
    def create
          if sign_up_params[:accept_terms] != "1" then
            redirect_to after_sign_up_error_path_for(resource), alert: 'You must accept the terms and conditions to register.'
          else
                  existing_user = User.find_by_email(sign_up_params[:email])
                  if !existing_user.nil? then
                          if existing_user.dmponline3 && (existing_user.password == "" || existing_user.password.nil?) && existing_user.confirmed_at.nil? then
                                  @user = existing_user
                                  do_update(false, true)
                          else
                              redirect_to after_sign_up_error_path_for(resource), alert: 'That email address is already registered.'
                          end
                  else
                          build_resource(sign_up_params)
                          if resource.save
                            if resource.active_for_authentication?
                                  set_flash_message :notice, :signed_up if is_navigational_format?
                                  sign_up(resource_name, resource)
                                  respond_with resource, :location => after_sign_up_path_for(resource)
                            else
                                  set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
                                  expire_session_data_after_sign_in!
                                  respond_with resource, :location => after_inactive_sign_up_path_for(resource)
                            end
                          else
                            clean_up_passwords resource
                            redirect_to after_sign_up_error_path_for(resource), alert: 'Error processing registration. Please check that you have entered a valid email address and that your chosen password is at least 8 characters long.'
                          end
                  end
      end
    end

update() click to toggle source

    # File app/controllers/registrations_controller.rb, line 39
    def update
           if user_signed_in? then
                   @user = User.find(current_user.id)

           do_update
       else
           render(:file => File.join(Rails.root, 'public/403.html'), :status => 403, :layout => false)
       end
     end

### Private Instance Methods

do_update(require_password = true, confirm = false) click to toggle source

    # File app/controllers/registrations_controller.rb, line 59
    def do_update(require_password = true, confirm = false)

            if require_password then
                    successfully_updated = if needs_password?(@user, params)
        @user.update_with_password(params[:user])
        else
          # remove the virtual current_password attribute update_without_password

          # doesn't know how to ignore it

          params[:user].delete(:current_password)
          @user.update_without_password(params[:user])
        end
      else
          @user.update_attributes(:password => params[:user][:password], :password_confirmation => params[:user][:password_confirmation])
          successfully_updated = @user.update_without_password(params[:user])
      end

      #unlink shibboleth from user's details

      if params[:unlink_flag] == 'true' then
        @user.update_attributes(:shibboleth_id => "")
      end

      if successfully_updated
                  if confirm then
                          @user.skip_confirmation!
                          @user.save!
                  end
          set_flash_message :notice, :updated
          # Sign in the user bypassing validation in case his password changed

          sign_in @user, :bypass => true

          if params[:unlink_flag] == 'true' then
              redirect_to({:controller => "registrations", :action => "edit"}, {:notice => "Details successfully updated."})
          else
              redirect_to({:controller => "projects", :action => "index"}, {:notice => "Details successfully updated."})
          end

      else
        render "edit"
      end
    end

needs_password?(user, params) click to toggle source

check if we need password to update user data ie if password or email was changed extend this as needed

    # File app/controllers/registrations_controller.rb, line 54
    def needs_password?(user, params)
      user.email != params[:user][:email] ||
        params[:user][:password].present?
    end