diff options
author | Douwe Maan <douwe@gitlab.com> | 2015-04-15 15:53:23 +0200 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2015-04-15 17:57:26 +0200 |
commit | efe962934661cd94edb1c24c6d34419cd28b82f9 (patch) | |
tree | 52a43775fe17dc4364c09d90ccadebf84a8ae731 | |
parent | 80097606f59c52ab962a3bec1e67f67d1a3cb6c7 (diff) | |
download | gitlab-ce-efe962934661cd94edb1c24c6d34419cd28b82f9.tar.gz |
Fix Mention notification level.
-rw-r--r-- | app/services/notification_service.rb | 37 |
1 files changed, 13 insertions, 24 deletions
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 203e654c18f..ab5a653d5c0 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -130,22 +130,23 @@ class NotificationService if note.commit_id.present? recipients << note.commit_author end - - # Get users who left comment in thread - recipients = recipients.concat(noteable_commenters(note)) + + # Add all users participating in the thread (author, assignee, comment authors) + participants = + if target.is_a?(Commit) + author_ids = Note.for_commit_id(target.id).pluck(:author_id).uniq + User.where(id: author_ids) + else + target.participants + end + recipients = recipients.concat(participants) # Merge project watchers recipients = recipients.concat(project_watchers(note.project)).compact.uniq - # Reject users with Mention notification level - recipients = reject_mention_users(recipients, note.project) - - # Add explicitly mentioned users - if target.respond_to?(:participants) - recipients = recipients.concat(target.participants) - else - recipients = recipients.concat(note.mentioned_users) - end + # Reject users with Mention notification level, except those mentioned in _this_ note. + recipients = reject_mention_users(recipients - note.mentioned_users, note.project) + recipients = recipients + note.mentioned_users # Reject mutes users recipients = reject_muted_users(recipients, note.project) @@ -216,18 +217,6 @@ class NotificationService protected - def noteable_commenters(note) - opts = { noteable_type: note.noteable_type, project_id: note.project_id } - - if note.commit_id.present? - opts.merge!(commit_id: note.commit_id) - else - opts.merge!(noteable_id: note.noteable_id) - end - - User.where(id: Note.where(opts).pluck(:author_id)) - end - # Get project users with WATCH notification level def project_watchers(project) project_members = project_member_notification(project) |