summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2013-01-26 18:07:57 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2013-01-26 18:07:57 +0000
commit134b66cb290f084a06a8a4ad7a21913cf002ca85 (patch)
treeff531898cc3225f4ce6a2fcd966e77f26cd23d2e
parent9c1077841eb0747b875794eb468a3aa881f97ff5 (diff)
downloadredmine-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.rb4
-rw-r--r--app/models/user.rb44
-rw-r--r--test/unit/user_test.rb10
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