Feature #2722 » 2722_new_user_notification.patch
app/controllers/account_controller.rb | ||
---|---|---|
186 | 186 |
user.activate |
187 | 187 |
if user.save |
188 | 188 |
token.destroy |
189 |
# Send notification to admins. |
|
190 |
Mailer.deliver_activated_to_admins(user) |
|
189 | 191 |
flash[:notice] = l(:notice_account_activated) |
190 | 192 |
end |
191 | 193 |
redirect_to signin_path |
... | ... | |
337 | 339 |
user.activate |
338 | 340 |
user.last_login_on = Time.now |
339 | 341 |
if user.save |
342 |
# Send notification to admins. |
|
343 |
Mailer.deliver_activated_to_admins(user) |
|
340 | 344 |
self.logged_user = user |
341 | 345 |
flash[:notice] = l(:notice_account_activated) |
342 | 346 |
redirect_to my_account_path |
app/models/mailer.rb | ||
---|---|---|
405 | 405 |
# The email will be sent to the email address specifiedby recipient if provided. |
406 | 406 |
# |
407 | 407 |
# Exemple: |
408 |
# Mailer.deliver_account_activated(user, token)
|
|
409 |
# Mailer.deliver_account_activated(user, token, 'foo@example.net')
|
|
408 |
# Mailer.deliver_lost_password(user, token)
|
|
409 |
# Mailer.deliver_lost_password(user, token, 'foo@example.net')
|
|
410 | 410 |
def self.deliver_lost_password(user, token, recipient=nil) |
411 | 411 |
lost_password(user, token, recipient).deliver_later |
412 | 412 |
end |
... | ... | |
445 | 445 |
register(user, token).deliver_later |
446 | 446 |
end |
447 | 447 | |
448 |
# Builds a mail to admin about user account has activated. |
|
449 |
def account_activated_to_admins(admin, user) |
|
450 |
@user = user |
|
451 |
@url = url_for(:controller => :users, :action => :edit, :id => user.id, :tab => :memberships) |
|
452 |
mail :to => admin, |
|
453 |
:subject => l(:mail_subject_account_activated, Setting.app_title) |
|
454 |
end |
|
455 | ||
456 |
# Sends notification to admins about user account has activated. |
|
457 |
# |
|
458 |
# Exemple: |
|
459 |
# Mailer.deliver_activated_to_admins(user) |
|
460 |
def self.deliver_activated_to_admins(user) |
|
461 |
return unless user.active? |
|
462 |
return unless Setting.send_notification_to_admins_when_activated? |
|
463 |
# Send the email to all active administrators |
|
464 |
admins = User.active.where(:admin => true) |
|
465 |
admins.each do |admin| |
|
466 |
account_activated_to_admins(admin, user).deliver_later |
|
467 |
end |
|
468 |
end |
|
469 | ||
448 | 470 |
# Build a mail to user and the additional recipients given in |
449 | 471 |
# options[:recipients] about a security related event made by sender. |
450 | 472 |
# |
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 %> |
app/views/settings/_authentication.html.erb | ||
---|---|---|
13 | 13 |
[l(:label_registration_manual_activation), "2"], |
14 | 14 |
[l(:label_registration_automatic_activation), "3"]], |
15 | 15 |
:onchange => |
16 |
"if (this.value != '0') { $('#settings_show_custom_fields_on_registration').removeAttr('disabled'); } else { $('#settings_show_custom_fields_on_registration').attr('disabled', true); }" %></p> |
|
16 |
"$('#settings_show_custom_fields_on_registration').prop('disabled', (this.value == '0')); $('#settings_send_notification_to_admins_when_activated').prop('disabled', (this.value == '0' || this.value == '2'));" |
|
17 |
%></p> |
|
17 | 18 | |
18 | 19 |
<p><%= setting_check_box :show_custom_fields_on_registration, |
19 | 20 |
:disabled => !Setting.self_registration? %></p> |
20 | 21 | |
22 |
<p><%= setting_check_box :send_notification_to_admins_when_activated, |
|
23 |
:disabled => [0, 2].include?(Setting.self_registration.to_i) %></p> |
|
24 | ||
21 | 25 |
<p><%= setting_text_field :password_min_length, :size => 6 %></p> |
22 | 26 | |
23 | 27 |
<p><%= setting_multiselect :password_required_char_classes, Setting::PASSWORD_CHAR_CLASSES.keys.collect {|c| [l("label_password_char_class_#{c}"), c]} , :inline => true %></p> |
... | ... | |
38 | 42 |
<p><%= setting_select :session_lifetime, session_lifetime_options %></p> |
39 | 43 |
<p><%= setting_select :session_timeout, session_timeout_options %></p> |
40 | 44 |
</div> |
41 |
|
|
45 | ||
42 | 46 |
<p><em class="info"><%= l(:text_session_expiration_settings) %></em></p> |
43 | 47 |
</fieldset> |
44 | 48 |
config/locales/en.yml | ||
---|---|---|
239 | 239 |
mail_body_account_information: Your account information |
240 | 240 |
mail_subject_account_activation_request: "%{value} account activation request" |
241 | 241 |
mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:" |
242 |
mail_subject_account_activated: "%{value} account activated" |
|
243 |
mail_body_account_activated: "A new user (%{value}) has been activated. Please set the roles of the projects:" |
|
242 | 244 |
mail_subject_reminder: "%{count} issue(s) due in the next %{days} days" |
243 | 245 |
mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:" |
244 | 246 |
mail_subject_wiki_content_added: "'%{id}' wiki page has been added" |
... | ... | |
396 | 398 |
setting_login_required: Authentication required |
397 | 399 |
setting_self_registration: Self-registration |
398 | 400 |
setting_show_custom_fields_on_registration: Show custom fields on registration |
401 |
setting_send_notification_to_admins_when_activated: Send notification to admins when activated |
|
399 | 402 |
setting_attachment_max_size: Maximum attachment size |
400 | 403 |
setting_issues_export_limit: Issues export limit |
401 | 404 |
setting_mail_from: Emission email address |
config/settings.yml | ||
---|---|---|
31 | 31 |
security_notifications: 1 |
32 | 32 |
show_custom_fields_on_registration: |
33 | 33 |
default: 1 |
34 |
send_notification_to_admins_when_activated: |
|
35 |
default: 0 |
|
34 | 36 |
lost_password: |
35 | 37 |
default: 1 |
36 | 38 |
security_notifications: 1 |
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 |
... | ... | |
300 | 300 |
end |
301 | 301 |
end |
302 | 302 | |
303 |
def test_get_activate_with_token_should_send_notification_to_admins |
|
304 |
with_settings :send_notification_to_admins_when_activated => '1' do |
|
305 |
user = User.generate!(:status => User::STATUS_REGISTERED) |
|
306 |
assert !user.active? |
|
307 |
token = Token.create(:user => user, :action => 'register') |
|
308 | ||
309 |
ActionMailer::Base.deliveries.clear |
|
310 |
get :activate, :params => { |
|
311 |
:token => token.value |
|
312 |
} |
|
313 |
assert_redirected_to '/login' |
|
314 |
user.reload |
|
315 |
assert user.active? |
|
316 |
assert_equal 1, ActionMailer::Base.deliveries.size |
|
317 |
mail = ActionMailer::Base.deliveries.last |
|
318 |
assert_match /\saccount\sactivated\z/, mail.subject |
|
319 |
end |
|
320 |
end |
|
321 | ||
322 |
def test_get_activate_with_token_should_not_send_notification_to_admins |
|
323 |
with_settings :send_notification_to_admins_when_activated => '0' do |
|
324 |
user = User.generate!(:status => User::STATUS_REGISTERED) |
|
325 |
assert !user.active? |
|
326 |
token = Token.create(:user => user, :action => 'register') |
|
327 | ||
328 |
ActionMailer::Base.deliveries.clear |
|
329 |
get :activate, :params => { |
|
330 |
:token => token.value |
|
331 |
} |
|
332 |
assert_redirected_to '/login' |
|
333 |
user.reload |
|
334 |
assert user.active? |
|
335 |
assert_equal 0, ActionMailer::Base.deliveries.size |
|
336 |
end |
|
337 |
end |
|
338 | ||
303 | 339 |
# See integration/account_test.rb for the full test |
304 | 340 |
def test_post_register_with_registration_on |
305 |
with_settings :self_registration => '3' do |
|
341 |
with_settings :self_registration => '3', :send_notification_to_admins_when_activated => '1' do |
|
342 |
ActionMailer::Base.deliveries.clear |
|
306 | 343 |
assert_difference 'User.count' do |
307 | 344 |
post :register, :params => { |
308 | 345 |
:user => { |
... | ... | |
312 | 349 |
:firstname => 'John', |
313 | 350 |
:lastname => 'Doe', |
314 | 351 |
:mail => 'register@example.com' |
315 | ||
316 | 352 |
} |
317 | 353 |
} |
318 | 354 |
assert_redirected_to '/my/account' |
319 | 355 |
end |
356 |
assert_equal 1, ActionMailer::Base.deliveries.size |
|
357 |
mail = ActionMailer::Base.deliveries.last |
|
358 |
assert_match /\saccount\sactivated\z/, mail.subject |
|
320 | 359 |
user = User.order('id DESC').first |
321 | 360 |
assert_equal 'register', user.login |
322 | 361 |
assert_equal 'John', user.firstname |
test/unit/mailer_test.rb | ||
---|---|---|
637 | 637 |
end |
638 | 638 |
end |
639 | 639 | |
640 |
def test_activated_account_should_send_notification_to_admins |
|
641 |
with_settings :send_notification_to_admins_when_activated => '1' do |
|
642 |
user = User.generate!(:login => 'foobar', :status => User::STATUS_ACTIVE) |
|
643 |
Mailer.deliver_activated_to_admins(user) |
|
644 | ||
645 |
assert_equal 1, ActionMailer::Base.deliveries.size |
|
646 |
mail = last_email |
|
647 |
assert_match /\saccount\sactivated\z/, mail.subject |
|
648 |
assert_equal [User.find_by_login('admin').mail], mail.bcc |
|
649 |
assert_select_email do |
|
650 |
assert_select 'p', :text => 'A new user (foobar) has been activated. Please set the roles of the projects:' |
|
651 |
url = "http://localhost:3000/users/#{user.id}/edit?tab=memberships" |
|
652 |
assert_select 'a[href=?]', url, :text => url |
|
653 |
end |
|
654 |
end |
|
655 |
end |
|
656 | ||
657 |
def test_activated_account_should_not_send_notification_to_admins |
|
658 |
with_settings :send_notification_to_admins_when_activated => '0' do |
|
659 |
user = User.generate!(:login => 'foobar', :status => User::STATUS_ACTIVE) |
|
660 |
Mailer.deliver_activated_to_admins(user) |
|
661 | ||
662 |
assert_equal 0, ActionMailer::Base.deliveries.size |
|
663 |
end |
|
664 |
end |
|
665 | ||
640 | 666 |
def test_test_email_later |
641 | 667 |
user = User.find(1) |
642 | 668 |
assert Mailer.test_email(user).deliver_later |