Skip to content
Snippets Groups Projects
Commit d879e7e8 authored by Chantal Rollison's avatar Chantal Rollison
Browse files

Add email notification for milestone changes

parent 716a52ed
No related branches found
No related tags found
No related merge requests found
Showing
with 114 additions and 1 deletion
Loading
@@ -45,6 +45,20 @@ module Emails
Loading
@@ -45,6 +45,20 @@ module Emails
mail_answer_thread(@issue, issue_thread_options(updated_by_user_id, recipient_id, reason)) mail_answer_thread(@issue, issue_thread_options(updated_by_user_id, recipient_id, reason))
end end
   
def removed_milestone_issue_email(recipient_id, issue_id, updated_by_user_id, reason = nil)
setup_issue_mail(issue_id, recipient_id)
mail_answer_thread(@issue, issue_thread_options(updated_by_user_id, recipient_id, reason))
end
def changed_milestone_issue_email(recipient_id, issue_id, milestone, updated_by_user_id, reason = nil)
setup_issue_mail(issue_id, recipient_id)
@milestone = milestone
@milestone_url = milestone_url(@milestone)
mail_answer_thread(@issue, issue_thread_options(updated_by_user_id, recipient_id, reason))
end
def issue_status_changed_email(recipient_id, issue_id, status, updated_by_user_id, reason = nil) def issue_status_changed_email(recipient_id, issue_id, status, updated_by_user_id, reason = nil)
setup_issue_mail(issue_id, recipient_id) setup_issue_mail(issue_id, recipient_id)
   
Loading
Loading
Loading
@@ -40,6 +40,20 @@ module Emails
Loading
@@ -40,6 +40,20 @@ module Emails
mail_answer_thread(@merge_request, merge_request_thread_options(updated_by_user_id, recipient_id, reason)) mail_answer_thread(@merge_request, merge_request_thread_options(updated_by_user_id, recipient_id, reason))
end end
   
def removed_milestone_merge_request_email(recipient_id, merge_request_id, updated_by_user_id, reason = nil)
setup_merge_request_mail(merge_request_id, recipient_id)
mail_answer_thread(@merge_request, merge_request_thread_options(updated_by_user_id, recipient_id, reason))
end
def changed_milestone_merge_request_email(recipient_id, merge_request_id, milestone, updated_by_user_id, reason = nil)
setup_merge_request_mail(merge_request_id, recipient_id)
@milestone = milestone
@milestone_url = milestone_url(@milestone)
mail_answer_thread(@merge_request, merge_request_thread_options(updated_by_user_id, recipient_id, reason))
end
def closed_merge_request_email(recipient_id, merge_request_id, updated_by_user_id, reason = nil) def closed_merge_request_email(recipient_id, merge_request_id, updated_by_user_id, reason = nil)
setup_merge_request_mail(merge_request_id, recipient_id) setup_merge_request_mail(merge_request_id, recipient_id)
   
Loading
Loading
Loading
@@ -48,6 +48,8 @@ module Issues
Loading
@@ -48,6 +48,8 @@ module Issues
notification_service.async.relabeled_issue(issue, added_labels, current_user) notification_service.async.relabeled_issue(issue, added_labels, current_user)
end end
   
handle_milestone_change(issue)
added_mentions = issue.mentioned_users - old_mentioned_users added_mentions = issue.mentioned_users - old_mentioned_users
   
if added_mentions.present? if added_mentions.present?
Loading
@@ -91,6 +93,16 @@ module Issues
Loading
@@ -91,6 +93,16 @@ module Issues
   
private private
   
def handle_milestone_change(issue)
if issue.previous_changes.include?('milestone_id')
if issue.milestone.nil?
notification_service.async.removed_milestone_issue(issue, current_user)
else
notification_service.async.changed_milestone_issue(issue, issue.milestone, current_user)
end
end
end
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def get_issue_if_allowed(id, board_group_id = nil) def get_issue_if_allowed(id, board_group_id = nil)
return unless id return unless id
Loading
Loading
Loading
@@ -58,6 +58,8 @@ module MergeRequests
Loading
@@ -58,6 +58,8 @@ module MergeRequests
merge_request.mark_as_unchecked merge_request.mark_as_unchecked
end end
   
handle_milestone_change(merge_request)
added_labels = merge_request.labels - old_labels added_labels = merge_request.labels - old_labels
if added_labels.present? if added_labels.present?
notification_service.async.relabeled_merge_request( notification_service.async.relabeled_merge_request(
Loading
@@ -105,6 +107,16 @@ module MergeRequests
Loading
@@ -105,6 +107,16 @@ module MergeRequests
   
private private
   
def handle_milestone_change(merge_request)
if merge_request.previous_changes.include?('milestone_id')
if merge_request.milestone.nil?
notification_service.async.removed_milestone_merge_request(merge_request, current_user)
else
notification_service.async.changed_milestone_merge_request(merge_request, merge_request.milestone, current_user)
end
end
end
def create_branch_change_note(issuable, branch_type, old_branch, new_branch) def create_branch_change_note(issuable, branch_type, old_branch, new_branch)
SystemNoteService.change_branch( SystemNoteService.change_branch(
issuable, issuable.project, current_user, branch_type, issuable, issuable.project, current_user, branch_type,
Loading
Loading
Loading
@@ -129,6 +129,14 @@ class NotificationService
Loading
@@ -129,6 +129,14 @@ class NotificationService
relabeled_resource_email(issue, added_labels, current_user, :relabeled_issue_email) relabeled_resource_email(issue, added_labels, current_user, :relabeled_issue_email)
end end
   
def removed_milestone_issue(issue, current_user)
removed_milestone_resource_email(issue, current_user, :removed_milestone_issue_email)
end
def changed_milestone_issue(issue, new_milestone, current_user)
changed_milestone_resource_email(issue, new_milestone, current_user, :changed_milestone_issue_email)
end
# When create a merge request we should send an email to: # When create a merge request we should send an email to:
# #
# * mr author # * mr author
Loading
@@ -138,7 +146,7 @@ class NotificationService
Loading
@@ -138,7 +146,7 @@ class NotificationService
# * users with custom level checked with "new merge request" # * users with custom level checked with "new merge request"
# #
# In EE, approvers of the merge request are also included # In EE, approvers of the merge request are also included
#
def new_merge_request(merge_request, current_user) def new_merge_request(merge_request, current_user)
new_resource_email(merge_request, :new_merge_request_email) new_resource_email(merge_request, :new_merge_request_email)
end end
Loading
@@ -208,6 +216,14 @@ class NotificationService
Loading
@@ -208,6 +216,14 @@ class NotificationService
relabeled_resource_email(merge_request, added_labels, current_user, :relabeled_merge_request_email) relabeled_resource_email(merge_request, added_labels, current_user, :relabeled_merge_request_email)
end end
   
def removed_milestone_merge_request(merge_request, current_user)
removed_milestone_resource_email(merge_request, current_user, :removed_milestone_merge_request_email)
end
def changed_milestone_merge_request(merge_request, new_milestone, current_user)
changed_milestone_resource_email(merge_request, new_milestone, current_user, :changed_milestone_merge_request_email)
end
def close_mr(merge_request, current_user) def close_mr(merge_request, current_user)
close_resource_email(merge_request, current_user, :closed_merge_request_email) close_resource_email(merge_request, current_user, :closed_merge_request_email)
end end
Loading
@@ -500,6 +516,30 @@ class NotificationService
Loading
@@ -500,6 +516,30 @@ class NotificationService
end end
end end
   
def removed_milestone_resource_email(target, current_user, method)
recipients = NotificationRecipientService.build_recipients(
target,
current_user,
action: 'removed_milestone'
)
recipients.each do |recipient|
mailer.send(method, recipient.user.id, target.id, current_user.id).deliver_later
end
end
def changed_milestone_resource_email(target, milestone, current_user, method)
recipients = NotificationRecipientService.build_recipients(
target,
current_user,
action: 'changed_milestone'
)
recipients.each do |recipient|
mailer.send(method, recipient.user.id, target.id, milestone, current_user.id).deliver_later
end
end
def reopen_resource_email(target, current_user, method, status) def reopen_resource_email(target, current_user, method, status)
recipients = NotificationRecipientService.build_recipients(target, current_user, action: "reopen") recipients = NotificationRecipientService.build_recipients(target, current_user, action: "reopen")
   
Loading
Loading
%p
#{'Milestone'} changed to
%strong= link_to(@milestone.name, @milestone_url)
Milestone changed to <%= @milestone.name %> ( <%= @milestone_url %> )
%p
#{'Milestone'} changed to
%strong= link_to(@milestone.name, @milestone_url)
Milestone changed to <%= @milestone.name %> ( <%= @milestone_url %> )
%p
#{'Milestone'} removed
Milestone removed
%p
#{'Milestone'} removed
Milestone removed
= render 'changed_milestone_issue_email', issuable: @issue
<%= render 'changed_milestone_issue_email', issuable: @issue %>
= render 'changed_milestone_merge_request_email', issuable: @merge_request
<%= render 'changed_milestone_merge_request_email', issuable: @merge_request %>
= render 'removed_milestone_issue_email', issuable: @issue
<%= render 'removed_milestone_issue_email', issuable: @issue %>
= render 'removed_milestone_merge_request_email', issuable: @merge_request
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment