Feature #2722 » 2722_new_user_notification-v2.patch
| app/controllers/account_controller.rb | ||
|---|---|---|
| 187 | 187 |
user.activate |
| 188 | 188 |
if user.save |
| 189 | 189 |
token.destroy |
| 190 |
# Send notification to admins. |
|
| 191 |
Mailer.deliver_activated_to_admins(user) |
|
| 190 | 192 |
flash[:notice] = l(:notice_account_activated) |
| 191 | 193 |
end |
| 192 | 194 |
redirect_to signin_path |
| ... | ... | |
| 444 | 446 |
user.activate |
| 445 | 447 |
user.last_login_on = Time.now |
| 446 | 448 |
if user.save |
| 449 |
# Send notification to admins. |
|
| 450 |
Mailer.deliver_activated_to_admins(user) |
|
| 447 | 451 |
self.logged_user = user |
| 448 | 452 |
flash[:notice] = l(:notice_account_activated) |
| 449 | 453 |
redirect_to my_account_path |
| app/models/mailer.rb | ||
|---|---|---|
| 456 | 456 |
register(user, token).deliver_later |
| 457 | 457 |
end |
| 458 | 458 | |
| 459 |
# Builds a mail to admin about user account has activated. |
|
| 460 |
def account_activated_to_admins(admin, user) |
|
| 461 |
@user = user |
|
| 462 |
@url = edit_user_url(:id => user.id, :tab => :memberships) |
|
| 463 |
mail :to => admin, |
|
| 464 |
:subject => l(:mail_subject_account_activated, Setting.app_title) |
|
| 465 |
end |
|
| 466 | ||
| 467 |
# Sends notification to admins about user account has activated. |
|
| 468 |
# |
|
| 469 |
# Exemple: |
|
| 470 |
# Mailer.deliver_activated_to_admins(user) |
|
| 471 |
def self.deliver_activated_to_admins(user) |
|
| 472 |
return unless user.active? |
|
| 473 | ||
| 474 |
if %w(sent_to_administrators new_user_self_activated).any?{|e| Setting.notified_events.include?(e)}
|
|
| 475 |
# Send the email to all active administrators |
|
| 476 |
admins = User.active.where(:admin => true) |
|
| 477 |
admins.each do |admin| |
|
| 478 |
account_activated_to_admins(admin, user).deliver_later |
|
| 479 |
end |
|
| 480 |
end |
|
| 481 |
end |
|
| 482 | ||
| 459 | 483 |
# Build a mail to user and the additional recipients given in |
| 460 | 484 |
# options[:recipients] about a security related event made by sender. |
| 461 | 485 |
# |
| app/views/mailer/account_activated_to_admins.html.erb | ||
|---|---|---|
| 1 |
<p><%= l(:mail_body_account_activated, h(@user.login)) %></p> |
|
| 2 |
<p><%= link_to @url, @url %></p> |
|
| app/views/mailer/account_activated_to_admins.text.erb | ||
|---|---|---|
| 1 |
<%= l(:mail_body_account_activated, @user.login) %> |
|
| 2 |
<%= @url %> |
|
| config/locales/en.yml | ||
|---|---|---|
| 254 | 254 |
mail_body_account_information: Your account information |
| 255 | 255 |
mail_subject_account_activation_request: "%{value} account activation request"
|
| 256 | 256 |
mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:"
|
| 257 |
mail_subject_account_activated: "%{value} account activated"
|
|
| 258 |
mail_body_account_activated: "A new user (%{value}) has been activated. Please set the roles of the projects:"
|
|
| 257 | 259 |
mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
|
| 258 | 260 |
mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
|
| 259 | 261 |
mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
|
| ... | ... | |
| 1109 | 1111 |
label_display_type_board: Board |
| 1110 | 1112 |
label_my_bookmarks: My bookmarks |
| 1111 | 1113 |
label_assign_to_me: Assign to me |
| 1114 |
label_sent_to_administrators: Sent to administrators |
|
| 1115 |
label_new_user_self_activated: New user self-activated |
|
| 1112 | 1116 | |
| 1113 | 1117 |
button_login: Login |
| 1114 | 1118 |
button_submit: Submit |
| lib/redmine/notifiable.rb | ||
|---|---|---|
| 24 | 24 |
notifications << Notifiable.new('message_posted')
|
| 25 | 25 |
notifications << Notifiable.new('wiki_content_added')
|
| 26 | 26 |
notifications << Notifiable.new('wiki_content_updated')
|
| 27 |
notifications << Notifiable.new('sent_to_administrators')
|
|
| 28 |
notifications << Notifiable.new('new_user_self_activated', 'sent_to_administrators')
|
|
| 27 | 29 |
notifications |
| 28 | 30 |
end |
| 29 | 31 |
end |
| test/functional/account_controller_test.rb | ||
|---|---|---|
| 20 | 20 |
require File.expand_path('../../test_helper', __FILE__)
|
| 21 | 21 | |
| 22 | 22 |
class AccountControllerTest < Redmine::ControllerTest |
| 23 |
fixtures :users, :email_addresses, :roles |
|
| 23 |
fixtures :users, :email_addresses, :roles, :auth_sources, :tokens
|
|
| 24 | 24 | |
| 25 | 25 |
def setup |
| 26 | 26 |
User.current = nil |
| ... | ... | |
| 327 | 327 |
end |
| 328 | 328 |
end |
| 329 | 329 | |
| 330 |
def test_get_activate_with_token_should_send_notification_to_admins |
|
| 331 |
user = User.generate!(:status => User::STATUS_REGISTERED) |
|
| 332 |
assert !user.active? |
|
| 333 |
token = Token.create(:user => user, :action => 'register') |
|
| 334 |
ActionMailer::Base.deliveries.clear |
|
| 335 |
with_settings :notified_events => %w(new_user_self_activated) do |
|
| 336 |
get :activate, :params => {
|
|
| 337 |
:token => token.value |
|
| 338 |
} |
|
| 339 |
end |
|
| 340 |
assert_redirected_to '/login' |
|
| 341 |
user.reload |
|
| 342 |
assert user.active? |
|
| 343 |
assert_equal 1, ActionMailer::Base.deliveries.size |
|
| 344 |
mail = ActionMailer::Base.deliveries.last |
|
| 345 |
assert_match /\saccount\sactivated\z/, mail.subject |
|
| 346 |
end |
|
| 347 | ||
| 348 |
def test_get_activate_with_token_should_not_send_notification_to_admins |
|
| 349 |
user = User.generate!(:status => User::STATUS_REGISTERED) |
|
| 350 |
assert !user.active? |
|
| 351 |
token = Token.create(:user => user, :action => 'register') |
|
| 352 |
ActionMailer::Base.deliveries.clear |
|
| 353 |
with_settings :notified_events => [] do |
|
| 354 |
get :activate, :params => {
|
|
| 355 |
:token => token.value |
|
| 356 |
} |
|
| 357 |
end |
|
| 358 |
assert_redirected_to '/login' |
|
| 359 |
user.reload |
|
| 360 |
assert user.active? |
|
| 361 |
assert_equal 0, ActionMailer::Base.deliveries.size |
|
| 362 |
end |
|
| 363 | ||
| 330 | 364 |
# See integration/account_test.rb for the full test |
| 331 | 365 |
def test_post_register_with_registration_on |
| 332 | 366 |
with_settings :self_registration => '3' do |
| test/unit/mailer_test.rb | ||
|---|---|---|
| 697 | 697 |
end |
| 698 | 698 |
end |
| 699 | 699 | |
| 700 |
def test_activated_account_should_send_notification_to_admins |
|
| 701 |
with_settings :notified_events => %w(new_user_self_activated) do |
|
| 702 |
user = User.generate!(:login => 'foobar', :status => User::STATUS_ACTIVE) |
|
| 703 |
Mailer.deliver_activated_to_admins(user) |
|
| 704 | ||
| 705 |
assert_equal 1, ActionMailer::Base.deliveries.size |
|
| 706 |
mail = last_email |
|
| 707 |
assert_match /\saccount\sactivated\z/, mail.subject |
|
| 708 |
assert_equal [User.find_by_login('admin').mail], mail.bcc
|
|
| 709 |
assert_select_email do |
|
| 710 |
assert_select 'p', :text => 'A new user (foobar) has been activated. Please set the roles of the projects:' |
|
| 711 |
url = "http://localhost:3000/users/#{user.id}/edit?tab=memberships"
|
|
| 712 |
assert_select 'a[href=?]', url, :text => url |
|
| 713 |
end |
|
| 714 |
end |
|
| 715 |
end |
|
| 716 | ||
| 717 |
def test_activated_account_should_not_send_notification_to_admins |
|
| 718 |
with_settings :notified_events => [] do |
|
| 719 |
user = User.generate!(:login => 'foobar', :status => User::STATUS_ACTIVE) |
|
| 720 |
Mailer.deliver_activated_to_admins(user) |
|
| 721 | ||
| 722 |
assert_equal 0, ActionMailer::Base.deliveries.size |
|
| 723 |
end |
|
| 724 |
end |
|
| 725 | ||
| 700 | 726 |
def test_test_email_later |
| 701 | 727 |
user = User.find(1) |
| 702 | 728 |
assert Mailer.test_email(user).deliver_later |