diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-04-15 16:31:34 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-04-15 16:31:34 +0000 |
commit | fb7ce7bd13a3114ee083a2d75ba72ea24e633cfc (patch) | |
tree | be1ff99b35674fb522dccd40515f2d350a384ed7 | |
parent | 5f78601c8a67028f246134d325cca99952ba78b6 (diff) | |
parent | b73ffbd3cb7dd89f54351b74e0cf4d1df63f0310 (diff) | |
download | gitlab-ce-fb7ce7bd13a3114ee083a2d75ba72ea24e633cfc.tar.gz |
Merge branch 'fix-mention-notification' into 'master'
Fix Mention notification level.
Fixes internal issue https://dev.gitlab.org/gitlab/gitlabhq/issues/2236.
See merge request !527
-rw-r--r-- | app/services/notification_service.rb | 39 |
1 files changed, 15 insertions, 24 deletions
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 203e654c18f..cfed7964c37 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -130,22 +130,25 @@ 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.respond_to?(:participants) + target.participants + elsif target.is_a?(Commit) + author_ids = Note.for_commit_id(target.id).pluck(:author_id).uniq + User.where(id: author_ids) + else + note.mentioned_users + 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 +219,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) |