diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2013-01-26 18:07:57 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2013-01-26 18:07:57 +0000 |
commit | 134b66cb290f084a06a8a4ad7a21913cf002ca85 (patch) | |
tree | ff531898cc3225f4ce6a2fcd966e77f26cd23d2e | |
parent | 9c1077841eb0747b875794eb468a3aa881f97ff5 (diff) | |
download | redmine-134b66cb290f084a06a8a4ad7a21913cf002ca85.tar.gz redmine-134b66cb290f084a06a8a4ad7a21913cf002ca85.zip |
Always notify project members about news unless they turned off all notifications (#4700).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11271 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/models/news.rb | 4 | ||||
-rw-r--r-- | app/models/user.rb | 44 | ||||
-rw-r--r-- | test/unit/user_test.rb | 10 |
3 files changed, 28 insertions, 30 deletions
diff --git a/app/models/news.rb b/app/models/news.rb index 56c166b6d..c8a4112cc 100644 --- a/app/models/news.rb +++ b/app/models/news.rb @@ -49,6 +49,10 @@ class News < ActiveRecord::Base user.allowed_to?(:comment_news, project) end + def recipients + project.users.select {|user| user.notify_about?(self)}.map(&:mail) + end + # returns latest news for projects visible by user def self.latest(user = User.current, count = 5) visible(user).includes([:author, :project]).order("#{News.table_name}.created_on DESC").limit(count).all diff --git a/app/models/user.rb b/app/models/user.rb index a4e1fe47e..361b994cc 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -563,38 +563,26 @@ class User < Principal # # TODO: only supports Issue events currently def notify_about?(object) - case mail_notification - when 'all' + if mail_notification == 'all' true - when 'selected' - # user receives notifications for created/assigned issues on unselected projects - if object.is_a?(Issue) && (object.author == self || is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was)) - true - else - false - end - when 'none' + elsif mail_notification.blank? || mail_notification == 'none' false - when 'only_my_events' - if object.is_a?(Issue) && (object.author == self || is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was)) - true - else - false - end - when 'only_assigned' - if object.is_a?(Issue) && (is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was)) - true - else - false - end - when 'only_owner' - if object.is_a?(Issue) && object.author == self + else + case object + when Issue + case mail_notification + when 'selected', 'only_my_events' + # user receives notifications for created/assigned issues on unselected projects + object.author == self || is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was) + when 'only_assigned' + is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was) + when 'only_owner' + object.author == self + end + when News + # always send to project members except when mail_notification is set to 'none' true - else - false end - else - false end end diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index c0e51d469..6aa7fe19c 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -1018,9 +1018,15 @@ class UserTest < ActiveSupport::TestCase assert ! @user.notify_about?(@issue) end end + end + + def test_notify_about_news + user = User.generate! + news = News.new - context "other events" do - should 'be added and tested' + User::MAIL_NOTIFICATION_OPTIONS.map(&:first).each do |option| + user.mail_notification = option + assert_equal (option != 'none'), user.notify_about?(news) end end |