Fixed that watchers receive notifications for private comments without permission (#12286).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10789 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
7f3cc6e38b
commit
c8b722456c
|
@ -100,6 +100,14 @@ class Journal < ActiveRecord::Base
|
||||||
notified.map(&:mail)
|
notified.map(&:mail)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def watcher_recipients
|
||||||
|
notified = journalized.notified_watchers
|
||||||
|
if private_notes?
|
||||||
|
notified = notified.select {|user| user.allowed_to?(:view_private_notes, journalized.project)}
|
||||||
|
end
|
||||||
|
notified.map(&:mail)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def split_private_notes
|
def split_private_notes
|
||||||
|
|
|
@ -64,7 +64,7 @@ class Mailer < ActionMailer::Base
|
||||||
@author = journal.user
|
@author = journal.user
|
||||||
recipients = journal.recipients
|
recipients = journal.recipients
|
||||||
# Watchers in cc
|
# Watchers in cc
|
||||||
cc = issue.watcher_recipients - recipients
|
cc = journal.watcher_recipients - recipients
|
||||||
s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] "
|
s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] "
|
||||||
s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
|
s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
|
||||||
s << issue.subject
|
s << issue.subject
|
||||||
|
|
|
@ -67,15 +67,18 @@ module Redmine
|
||||||
!!(user && self.watcher_user_ids.detect {|uid| uid == user.id })
|
!!(user && self.watcher_user_ids.detect {|uid| uid == user.id })
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns an array of watchers' email addresses
|
def notified_watchers
|
||||||
def watcher_recipients
|
|
||||||
notified = watcher_users.active
|
notified = watcher_users.active
|
||||||
notified.reject! {|user| user.mail_notification == 'none'}
|
notified.reject! {|user| user.mail.blank? || user.mail_notification == 'none'}
|
||||||
|
|
||||||
if respond_to?(:visible?)
|
if respond_to?(:visible?)
|
||||||
notified.reject! {|user| !visible?(user)}
|
notified.reject! {|user| !visible?(user)}
|
||||||
end
|
end
|
||||||
notified.collect(&:mail).compact
|
notified
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns an array of watchers' email addresses
|
||||||
|
def watcher_recipients
|
||||||
|
notified_watchers.collect(&:mail)
|
||||||
end
|
end
|
||||||
|
|
||||||
module ClassMethods; end
|
module ClassMethods; end
|
||||||
|
|
|
@ -350,6 +350,21 @@ class MailerTest < ActiveSupport::TestCase
|
||||||
assert_equal %w(jsmith@somenet.foo), ActionMailer::Base.deliveries.last.bcc.sort
|
assert_equal %w(jsmith@somenet.foo), ActionMailer::Base.deliveries.last.bcc.sort
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_issue_edit_should_send_private_notes_to_watchers_with_permission_only
|
||||||
|
Issue.find(1).set_watcher(User.find_by_login('someone'))
|
||||||
|
journal = Journal.find(1)
|
||||||
|
journal.private_notes = true
|
||||||
|
journal.save!
|
||||||
|
|
||||||
|
Role.non_member.add_permission! :view_private_notes
|
||||||
|
Mailer.issue_edit(journal).deliver
|
||||||
|
assert_include 'someone@foo.bar', ActionMailer::Base.deliveries.last.bcc.sort
|
||||||
|
|
||||||
|
Role.non_member.remove_permission! :view_private_notes
|
||||||
|
Mailer.issue_edit(journal).deliver
|
||||||
|
assert_not_include 'someone@foo.bar', ActionMailer::Base.deliveries.last.bcc.sort
|
||||||
|
end
|
||||||
|
|
||||||
def test_document_added
|
def test_document_added
|
||||||
document = Document.find(1)
|
document = Document.find(1)
|
||||||
valid_languages.each do |lang|
|
valid_languages.each do |lang|
|
||||||
|
|
Loading…
Reference in New Issue