From 10ed306b1935834afa1aad304f1ee5c21cc807d1 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Mon, 13 May 2013 16:38:08 +0000 Subject: [PATCH] Fixed that locking and unlocking a user resets the email notification checkbox (#14020). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11839 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/my_controller.rb | 1 - app/controllers/users_controller.rb | 2 -- app/models/mailer.rb | 2 +- app/models/user_preference.rb | 3 +++ app/views/users/_mail_notifications.html.erb | 9 +++++---- test/functional/admin_controller_test.rb | 2 +- test/functional/users_controller_test.rb | 12 ++++++++++++ test/unit/mailer_test.rb | 6 +++--- 8 files changed, 25 insertions(+), 12 deletions(-) diff --git a/app/controllers/my_controller.rb b/app/controllers/my_controller.rb index 84f5b20ca..92853067b 100644 --- a/app/controllers/my_controller.rb +++ b/app/controllers/my_controller.rb @@ -53,7 +53,6 @@ class MyController < ApplicationController if request.post? @user.safe_attributes = params[:user] @user.pref.attributes = params[:pref] - @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') if @user.save @user.pref.save @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : []) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 2cc43919c..5dd154dc0 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -93,7 +93,6 @@ class UsersController < ApplicationController if @user.save @user.pref.attributes = params[:pref] - @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') @user.pref.save @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : []) @@ -139,7 +138,6 @@ class UsersController < ApplicationController was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE]) # TODO: Similar to My#account @user.pref.attributes = params[:pref] - @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') if @user.save @user.pref.save diff --git a/app/models/mailer.rb b/app/models/mailer.rb index 7166025c2..c12195a02 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -390,7 +390,7 @@ class Mailer < ActionMailer::Base # Removes the author from the recipients and cc # if he doesn't want to receive notifications about what he does - if @author && @author.logged? && @author.pref[:no_self_notified] + if @author && @author.logged? && @author.pref.no_self_notified headers[:to].delete(@author.mail) if headers[:to].is_a?(Array) headers[:cc].delete(@author.mail) if headers[:cc].is_a?(Array) end diff --git a/app/models/user_preference.rb b/app/models/user_preference.rb index 56cbe763a..37d114ab5 100644 --- a/app/models/user_preference.rb +++ b/app/models/user_preference.rb @@ -56,4 +56,7 @@ class UserPreference < ActiveRecord::Base def warn_on_leaving_unsaved; self[:warn_on_leaving_unsaved] || '1'; end def warn_on_leaving_unsaved=(value); self[:warn_on_leaving_unsaved]=value; end + + def no_self_notified; (self[:no_self_notified] == true || self[:no_self_notified] == '1'); end + def no_self_notified=(value); self[:no_self_notified]=value; end end diff --git a/app/views/users/_mail_notifications.html.erb b/app/views/users/_mail_notifications.html.erb index 179f6749a..a31f6304b 100644 --- a/app/views/users/_mail_notifications.html.erb +++ b/app/views/users/_mail_notifications.html.erb @@ -19,9 +19,10 @@ end %>

<%= l(:text_user_mail_option) %>

<% end %> + +<%= fields_for :pref, @user.pref do |pref_fields| %>

- + <%= pref_fields.check_box :no_self_notified %> +

+<% end %> diff --git a/test/functional/admin_controller_test.rb b/test/functional/admin_controller_test.rb index 48f3aad55..794775c0c 100644 --- a/test/functional/admin_controller_test.rb +++ b/test/functional/admin_controller_test.rb @@ -83,7 +83,7 @@ class AdminControllerTest < ActionController::TestCase def test_test_email user = User.find(1) - user.pref[:no_self_notified] = '1' + user.pref.no_self_notified = '1' user.pref.save! ActionMailer::Base.deliveries.clear diff --git a/test/functional/users_controller_test.rb b/test/functional/users_controller_test.rb index 65aa2d7c0..bf8f444af 100644 --- a/test/functional/users_controller_test.rb +++ b/test/functional/users_controller_test.rb @@ -380,6 +380,18 @@ class UsersControllerTest < ActionController::TestCase assert_equal [1, 2], u.notified_projects_ids.sort end + def test_update_status_should_not_update_attributes + user = User.find(2) + user.pref[:no_self_notified] = '1' + user.pref.save + + put :update, :id => 2, :user => {:status => 3} + assert_response 302 + user = User.find(2) + assert_equal 3, user.status + assert_equal '1', user.pref[:no_self_notified] + end + def test_destroy assert_difference 'User.count', -1 do delete :destroy, :id => 2 diff --git a/test/unit/mailer_test.rb b/test/unit/mailer_test.rb index 7c4406297..c1b6ba6ac 100644 --- a/test/unit/mailer_test.rb +++ b/test/unit/mailer_test.rb @@ -215,14 +215,14 @@ class MailerTest < ActiveSupport::TestCase # Remove members except news author news.project.memberships.each {|m| m.destroy unless m.user == user} - user.pref[:no_self_notified] = false + user.pref.no_self_notified = false user.pref.save User.current = user Mailer.news_added(news.reload).deliver assert_equal 1, last_email.bcc.size # nobody to notify - user.pref[:no_self_notified] = true + user.pref.no_self_notified = true user.pref.save User.current = user ActionMailer::Base.deliveries.clear @@ -296,7 +296,7 @@ class MailerTest < ActiveSupport::TestCase issue = Issue.find(1) user = User.find(9) # minimal email notification options - user.pref[:no_self_notified] = '1' + user.pref.no_self_notified = '1' user.pref.save user.mail_notification = false user.save