Permalink
Browse files

Notify previous assignee when assignee changes (#2694).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8695 e93f8b46-1217-0410-a6f0-8f06a7374b81
  • Loading branch information...
1 parent f2e7aa5 commit 22317105f99ef444dc6262c041bc464adc845933 @jplang jplang committed Jan 23, 2012
Showing with 30 additions and 10 deletions.
  1. +15 −7 app/models/issue.rb
  2. +3 −3 app/models/user.rb
  3. +12 −0 test/unit/issue_test.rb
View
@@ -514,19 +514,27 @@ def new_statuses_allowed_to(user, include_default=false)
blocked? ? statuses.reject {|s| s.is_closed?} : statuses
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
def recipients
- notified = project.notified_users
+ notified = []
# Author and assignee are always notified unless they have been
# 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.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
+ notified = notified.select {|u| u.active? && u.notify_about?(self)}
+
+ notified += project.notified_users
notified.uniq!
# Remove users that can not view the issue
notified.reject! {|user| !visible?(user)}
View
@@ -509,21 +509,21 @@ def notify_about?(object)
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))
+ 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'
false
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
else
false
end
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
else
false
@@ -678,6 +678,18 @@ def test_copy_to_another_project_and_tracker
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
issue = Issue.find(12)
assert issue.recipients.include?(issue.author.mail)

0 comments on commit 2231710

Please sign in to comment.