Project

General

Profile

Feature #2722 » 2722_new_user_notification.patch

Yuichi HARADA, 2019-10-25 07:25

View differences:

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
(3-3/5)