git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8695 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/1.4.0
blocked? ? statuses.reject {|s| s.is_closed?} : statuses | blocked? ? statuses.reject {|s| s.is_closed?} : statuses | ||||
end | end | ||||
def assigned_to_was | |||||
if assigned_to_id_changed? && assigned_to_id_was.present? | |||||
@assigned_to_was ||= User.find_by_id(assigned_to_id_was) | |||||
end | |||||
end | |||||
# Returns the mail adresses of users that should be notified | # Returns the mail adresses of users that should be notified | ||||
def recipients | def recipients | ||||
notified = project.notified_users | |||||
notified = [] | |||||
# Author and assignee are always notified unless they have been | # Author and assignee are always notified unless they have been | ||||
# locked or don't want to be notified | # locked or don't want to be notified | ||||
notified << author if author && author.active? && author.notify_about?(self) | |||||
notified << author if author | |||||
if assigned_to | if assigned_to | ||||
if assigned_to.is_a?(Group) | |||||
notified += assigned_to.users.select {|u| u.active? && u.notify_about?(self)} | |||||
else | |||||
notified << assigned_to if assigned_to.active? && assigned_to.notify_about?(self) | |||||
end | |||||
notified += (assigned_to.is_a?(Group) ? assigned_to.users : [assigned_to]) | |||||
end | |||||
if assigned_to_was | |||||
notified += (assigned_to_was.is_a?(Group) ? assigned_to_was.users : [assigned_to_was]) | |||||
end | end | ||||
notified = notified.select {|u| u.active? && u.notify_about?(self)} | |||||
notified += project.notified_users | |||||
notified.uniq! | notified.uniq! | ||||
# Remove users that can not view the issue | # Remove users that can not view the issue | ||||
notified.reject! {|user| !visible?(user)} | notified.reject! {|user| !visible?(user)} |
true | true | ||||
when 'selected' | when 'selected' | ||||
# user receives notifications for created/assigned issues on unselected projects | # 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)) | |||||
if object.is_a?(Issue) && (object.author == self || is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was)) | |||||
true | true | ||||
else | else | ||||
false | false | ||||
when 'none' | when 'none' | ||||
false | false | ||||
when 'only_my_events' | when 'only_my_events' | ||||
if object.is_a?(Issue) && (object.author == self || is_or_belongs_to?(object.assigned_to)) | |||||
if object.is_a?(Issue) && (object.author == self || is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was)) | |||||
true | true | ||||
else | else | ||||
false | false | ||||
end | end | ||||
when 'only_assigned' | when 'only_assigned' | ||||
if object.is_a?(Issue) && is_or_belongs_to?(object.assigned_to) | |||||
if object.is_a?(Issue) && (is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was)) | |||||
true | true | ||||
else | else | ||||
false | false |
end | end | ||||
end | end | ||||
def test_recipients_should_include_previous_assignee | |||||
user = User.find(3) | |||||
user.members.update_all ["mail_notification = ?", false] | |||||
user.update_attribute :mail_notification, 'only_assigned' | |||||
issue = Issue.find(2) | |||||
issue.assigned_to = nil | |||||
assert_include user.mail, issue.recipients | |||||
issue.save! | |||||
assert !issue.recipients.include?(user.mail) | |||||
end | |||||
def test_recipients_should_not_include_users_that_cannot_view_the_issue | def test_recipients_should_not_include_users_that_cannot_view_the_issue | ||||
issue = Issue.find(12) | issue = Issue.find(12) | ||||
assert issue.recipients.include?(issue.author.mail) | assert issue.recipients.include?(issue.author.mail) |