diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb
index 2ba373125..e5a2f04bd 100644
--- a/app/controllers/user_controller.rb
+++ b/app/controllers/user_controller.rb
@@ -212,8 +212,8 @@ class UserController < ApplicationController
else
redirect_to :controller => 'site', :action => 'index'
end
- elsif User.authenticate(:username => email_or_display_name, :password => pass, :pending => true)
- flash.now[:error] = t 'user.login.account not active'
+ elsif user = User.authenticate(:username => email_or_display_name, :password => pass, :pending => true)
+ flash.now[:error] = t 'user.login.account not active', :reconfirm => url_for(:action => 'confirm_resend', :display_name => user.display_name)
elsif User.authenticate(:username => email_or_display_name, :password => pass, :suspended => true)
webmaster = link_to t('user.login.webmaster'), "mailto:webmaster@openstreetmap.org"
flash.now[:error] = t 'user.login.account suspended', :webmaster => webmaster
@@ -248,29 +248,54 @@ class UserController < ApplicationController
def confirm
if request.post?
- token = UserToken.find_by_token(params[:confirm_string])
- if token and !token.user.active?
- @user = token.user
- @user.status = "active"
- @user.email_valid = true
- @user.save!
- referer = token.referer
- token.destroy
- session[:user] = @user.id
- unless referer.nil?
- flash[:notice] = t('user.confirm.success')
- redirect_to referer
+ if token = UserToken.find_by_token(params[:confirm_string])
+ if token.user.active?
+ flash[:error] = t('user.confirm.already active')
+ redirect_to :action => 'login'
else
- flash[:notice] = t('user.confirm.success') + "
" + t('user.confirm.before you start')
- redirect_to :action => 'account', :display_name => @user.display_name
+ user = token.user
+ user.status = "active"
+ user.email_valid = true
+ user.save!
+ referer = token.referer
+ token.destroy
+ session[:user] = user.id
+
+ unless referer.nil?
+ flash[:notice] = t('user.confirm.success')
+ redirect_to referer
+ else
+ flash[:notice] = t('user.confirm.success') + "
" + t('user.confirm.before you start')
+ redirect_to :action => 'account', :display_name => user.display_name
+ end
end
else
- flash[:error] = t('user.confirm.failure')
- redirect_to :action => 'login', :display_name => @user.display_name
+ user = User.find_by_display_name(params[:display_name])
+
+ if user and user.active?
+ flash[:error] = t('user.confirm.already active')
+ elsif user
+ flash[:error] = t('user.confirm.unknown token') + t('user.confirm.reconfirm', :reconfirm => url_for(:action => 'confirm_resend', :display_name => params[:display_name]))
+ else
+ flash[:error] = t('user.confirm.unknown token')
+ end
+
+ redirect_to :action => 'login'
end
end
end
+ def confirm_resend
+ if user = User.find_by_display_name(params[:display_name])
+ Notifier.deliver_signup_confirm(user, user.tokens.create)
+ flash[:notice] = t 'user.confirm_resend.success', :email => user.email
+ else
+ flash[:notice] = t 'user.confirm_resend.failure', :name => params[:display_name]
+ end
+
+ redirect_to :action => 'login'
+ end
+
def confirm_email
if request.post?
token = UserToken.find_by_token(params[:confirm_string])
diff --git a/app/models/notifier.rb b/app/models/notifier.rb
index a1fde49b3..e6058d4b7 100644
--- a/app/models/notifier.rb
+++ b/app/models/notifier.rb
@@ -4,6 +4,7 @@ class Notifier < ActionMailer::Base
subject I18n.t('notifier.signup_confirm.subject')
body :url => url_for(:host => SERVER_URL,
:controller => "user", :action => "confirm",
+ :display_name => user.display_name,
:confirm_string => token.token)
end
diff --git a/app/views/user/confirm.html.erb b/app/views/user/confirm.html.erb
index c7894380c..408ba771f 100644
--- a/app/views/user/confirm.html.erb
+++ b/app/views/user/confirm.html.erb
@@ -7,6 +7,7 @@ $("content").style.display = "none";
<%= t 'user.confirm.press confirm button' %>
diff --git a/config/locales/en.yml b/config/locales/en.yml index 573c5794b..4e633b27b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1500,7 +1500,7 @@ en: remember: "Remember me:" lost password link: "Lost your password?" login_button: "Login" - account not active: "Sorry, your account is not active yet.