openstreetmap-website/app/controllers/concerns/user_methods.rb

67 lines
1.8 KiB
Ruby

module UserMethods
extend ActiveSupport::Concern
private
##
# ensure that there is a "user" instance variable
def lookup_user
@user = User.active.find_by!(:display_name => params[:display_name])
rescue ActiveRecord::RecordNotFound
render_unknown_user params[:display_name]
end
##
# render a "no such user" page
def render_unknown_user(name)
@title = t "users.no_such_user.title"
@not_found_user = name
respond_to do |format|
format.html { render :template => "users/no_such_user", :status => :not_found, :layout => "site" }
format.all { head :not_found }
end
end
##
# update a user's details
def update_user(user, params)
user.display_name = params[:display_name]
user.new_email = params[:new_email]
unless params[:pass_crypt].empty? && params[:pass_crypt_confirmation].empty?
user.pass_crypt = params[:pass_crypt]
user.pass_crypt_confirmation = params[:pass_crypt_confirmation]
end
if params[:auth_provider].nil? || params[:auth_provider].blank?
user.auth_provider = nil
user.auth_uid = nil
end
if user.save
session[:fingerprint] = user.fingerprint
if user.new_email.blank? || user.new_email == user.email
flash[:notice] = t "accounts.update.success"
else
user.email = user.new_email
if user.valid?
flash[:notice] = t "accounts.update.success_confirm_needed"
begin
UserMailer.email_confirm(user, user.tokens.create).deliver_later
rescue StandardError
# Ignore errors sending email
end
else
current_user.errors.add(:new_email, current_user.errors[:email])
current_user.errors.add(:email, [])
end
user.restore_email!
end
end
end
end