summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2009-07-05 14:06:14 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2009-07-05 14:06:14 +0000
commite54d183d207270a11d7acf7eedc67eed5e719c3d (patch)
treefa36164fab020ccbad6fb79072a3b794abb9a7b0
parentad90811e4016be9504ae1e0e4846843baa41e0af (diff)
downloadredmine-e54d183d207270a11d7acf7eedc67eed5e719c3d.tar.gz
redmine-e54d183d207270a11d7acf7eedc67eed5e719c3d.zip
Ability to send an email with password when changing a user's password (#3566).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2813 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/controllers/users_controller.rb6
-rw-r--r--app/views/users/_general.rhtml3
-rw-r--r--test/functional/users_controller_test.rb53
3 files changed, 45 insertions, 17 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 72a4b6c83..e9fdfaf79 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -79,7 +79,11 @@ class UsersController < ApplicationController
# Was the account actived ? (do it before User#save clears the change)
was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE])
if @user.save
- Mailer.deliver_account_activated(@user) if was_activated
+ if was_activated
+ Mailer.deliver_account_activated(@user)
+ elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil?
+ Mailer.deliver_account_information(@user, params[:password])
+ end
flash[:notice] = l(:notice_successful_update)
# Give a string to redirect_to otherwise it would use status param as the response code
redirect_to(url_for(:action => 'list', :status => params[:status], :page => params[:page]))
diff --git a/app/views/users/_general.rhtml b/app/views/users/_general.rhtml
index 673f09a7b..9695e4f97 100644
--- a/app/views/users/_general.rhtml
+++ b/app/views/users/_general.rhtml
@@ -1,4 +1,7 @@
<% labelled_tabular_form_for :user, @user, :url => { :controller => 'users', :action => "edit", :tab => nil } do |f| %>
<%= render :partial => 'form', :locals => { :f => f } %>
<%= submit_tag l(:button_save) %>
+<% if @user.active? %>
+ <%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %>
+<% end %>
<% end %>
diff --git a/test/functional/users_controller_test.rb b/test/functional/users_controller_test.rb
index e9aad1a98..5f62b1549 100644
--- a/test/functional/users_controller_test.rb
+++ b/test/functional/users_controller_test.rb
@@ -107,6 +107,43 @@ class UsersControllerTest < Test::Unit::TestCase
)
end
+ def test_edit
+ ActionMailer::Base.deliveries.clear
+ post :edit, :id => 2, :user => {:firstname => 'Changed'}
+ assert_equal 'Changed', User.find(2).firstname
+ assert ActionMailer::Base.deliveries.empty?
+ end
+
+ def test_edit_with_activation_should_send_a_notification
+ u = User.new(:firstname => 'Foo', :lastname => 'Bar', :mail => 'foo.bar@somenet.foo', :language => 'fr')
+ u.login = 'foo'
+ u.status = User::STATUS_REGISTERED
+ u.save!
+ ActionMailer::Base.deliveries.clear
+ Setting.bcc_recipients = '1'
+
+ post :edit, :id => u.id, :user => {:status => User::STATUS_ACTIVE}
+ assert u.reload.active?
+ mail = ActionMailer::Base.deliveries.last
+ assert_not_nil mail
+ assert_equal ['foo.bar@somenet.foo'], mail.bcc
+ assert mail.body.include?(ll('fr', :notice_account_activated))
+ end
+
+ def test_edit_with_password_change_should_send_a_notification
+ ActionMailer::Base.deliveries.clear
+ Setting.bcc_recipients = '1'
+
+ u = User.find(2)
+ post :edit, :id => u.id, :user => {}, :password => 'newpass', :password_confirmation => 'newpass', :send_information => '1'
+ assert_equal User.hash_password('newpass'), u.reload.hashed_password
+
+ mail = ActionMailer::Base.deliveries.last
+ assert_not_nil mail
+ assert_equal [u.mail], mail.bcc
+ assert mail.body.include?('newpass')
+ end
+
def test_add_membership_routing
assert_routing(
{:method => :post, :path => '/users/123/memberships'},
@@ -128,22 +165,6 @@ class UsersControllerTest < Test::Unit::TestCase
assert_equal [2], Member.find(1).role_ids
end
- def test_edit_with_activation_should_send_a_notification
- u = User.new(:firstname => 'Foo', :lastname => 'Bar', :mail => 'foo.bar@somenet.foo', :language => 'fr')
- u.login = 'foo'
- u.status = User::STATUS_REGISTERED
- u.save!
- ActionMailer::Base.deliveries.clear
- Setting.bcc_recipients = '1'
-
- post :edit, :id => u.id, :user => {:status => User::STATUS_ACTIVE}
- assert u.reload.active?
- mail = ActionMailer::Base.deliveries.last
- assert_not_nil mail
- assert_equal ['foo.bar@somenet.foo'], mail.bcc
- assert mail.body.include?(ll('fr', :notice_account_activated))
- end
-
def test_destroy_membership
assert_routing(
#TODO: use DELETE method on user_membership_path, modify form