diff options
author | Sean McGivern <sean@gitlab.com> | 2017-12-01 18:47:28 +0300 |
---|---|---|
committer | Sean McGivern <sean@gitlab.com> | 2017-12-04 14:32:36 +0300 |
commit | e7c64c9da34909c7f67b7da48771d317ef20d159 (patch) | |
tree | 2e5a4085d3242a1fa701b280b028b88501ff3f43 /app/services | |
parent | e0f84130567dc34edf1ae75fcf595e24991d2fa9 (diff) |
Fix watch level for mentions in description
For a user with the mention notification level set, the type of their
corresponding NotificationRecipient must be :mention for them to receive an
email.
We set this correctly on notes, but we weren't adding it on new issues or MRs -
perhaps because these users are also participants. But the type of the
NotificationRecipient in that case would be :participant, not mention, so we
have to add the mentioned users manually when creating an issue or MR.
When editing an issue or MR, and there are newly-mentioned users to email, we
still use the :new_issue and :new_merge_request actions, so this works for that
case as well.
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/notification_recipient_service.rb | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/app/services/notification_recipient_service.rb b/app/services/notification_recipient_service.rb index c9f07c140f7..3eb8cfcca9b 100644 --- a/app/services/notification_recipient_service.rb +++ b/app/services/notification_recipient_service.rb @@ -98,6 +98,12 @@ module NotificationRecipientService self << [target.participants(user), :participating] end + def add_mentions(user, target:) + return unless target.respond_to?(:mentioned_users) + + self << [target.mentioned_users(user), :mention] + end + # Get project/group users with CUSTOM notification level def add_custom_notifications user_ids = [] @@ -227,6 +233,11 @@ module NotificationRecipientService add_subscribed_users if [:new_issue, :new_merge_request].include?(custom_action) + # These will all be participants as well, but adding with the :mention + # type ensures that users with the mention notification level will + # receive them, too. + add_mentions(current_user, target: target) + add_labels_subscribers end end @@ -263,7 +274,7 @@ module NotificationRecipientService def build! # Add all users participating in the thread (author, assignee, comment authors) add_participants(note.author) - self << [note.mentioned_users, :mention] + add_mentions(note.author, target: note) unless note.for_personal_snippet? # Merge project watchers |