Class: NotificationService
- Inherits:
-
Object
- Object
- NotificationService
- Defined in:
- app/services/notification_service.rb
Overview
NotificationService class
Used for notifying users with emails about different events
Ex.
NotificationService.new.new_issue(issue, current_user)
When calculating the recipients of a notification is expensive (for instance, in the new issue case), `#async` will make that calculation happen in Sidekiq instead:
NotificationService.new.async.new_issue(issue, current_user)
Defined Under Namespace
Classes: Async
Instance Method Summary collapse
- #accept_group_invite(group_member) ⇒ Object
- #accept_project_invite(project_member) ⇒ Object
-
#access_token_about_to_expire(user) ⇒ Object
Notify the owner of the personal access token, when it is about to expire And mark the token with about_to_expire_delivered.
-
#access_token_expired(user) ⇒ Object
Notify the user when at least one of their personal access tokens has expired today.
- #async ⇒ Object
- #autodevops_disabled(pipeline, recipients) ⇒ Object
- #changed_milestone_issue(issue, new_milestone, current_user) ⇒ Object
- #changed_milestone_merge_request(merge_request, new_milestone, current_user) ⇒ Object
-
#changed_reviewer_of_merge_request(merge_request, current_user, previous_reviewers = []) ⇒ Object
When we change reviewer in a merge_request we should send an email to:.
-
#close_issue(issue, current_user, closed_via: nil) ⇒ Object
When we close an issue we should send an email to:.
- #close_mr(merge_request, current_user) ⇒ Object
- #decline_access_request(member) ⇒ Object
- #decline_group_invite(group_member) ⇒ Object
- #decline_project_invite(project_member) ⇒ Object
- #disabled_two_factor(user) ⇒ Object
- #group_was_exported(group, current_user) ⇒ Object
- #group_was_not_exported(group, current_user, errors) ⇒ Object
-
#invite_group_member(group_member, token) ⇒ Object
Group invite.
- #invite_member_reminder(group_member, token, reminder_index) ⇒ Object
-
#invite_project_member(project_member, token) ⇒ Object
Project invite.
- #issue_due(issue) ⇒ Object
- #issue_moved(issue, new_issue, current_user) ⇒ Object
- #merge_mr(merge_request, current_user) ⇒ Object
-
#merge_request_unmergeable(merge_request) ⇒ Object
When a merge request is found to be unmergeable, we should send an email to:.
- #merge_when_pipeline_succeeds(merge_request, current_user) ⇒ Object
-
#new_access_request(member) ⇒ Object
Members.
-
#new_gpg_key(gpg_key) ⇒ Object
Always notify the user about gpg key added.
- #new_group_member(group_member) ⇒ Object
- #new_instance_access_request(user) ⇒ Object
-
#new_issue(issue, current_user) ⇒ Object
When create an issue we should send an email to:.
-
#new_key(key) ⇒ Object
Always notify user about ssh key added only if ssh key is not deploy key.
-
#new_mentions_in_issue(issue, new_mentioned_users, current_user) ⇒ Object
When issue text is updated, we should send an email to:.
-
#new_mentions_in_merge_request(merge_request, new_mentioned_users, current_user) ⇒ Object
When merge request text is updated, we should send an email to:.
-
#new_merge_request(merge_request, current_user) ⇒ Object
When create a merge request we should send an email to:.
-
#new_note(note) ⇒ Object
Notify users on new note in system.
- #new_project_member(project_member) ⇒ Object
-
#new_review(review) ⇒ Object
Notify users on new review in system.
-
#new_user(user, token = nil) ⇒ Object
Notify new user with email after creation.
- #pages_domain_auto_ssl_failed(domain) ⇒ Object
- #pages_domain_disabled(domain) ⇒ Object
- #pages_domain_enabled(domain) ⇒ Object
- #pages_domain_verification_failed(domain) ⇒ Object
- #pages_domain_verification_succeeded(domain) ⇒ Object
- #pipeline_finished(pipeline, ref_status: nil, recipients: nil) ⇒ Object
- #project_exported(project, current_user) ⇒ Object
- #project_not_exported(project, current_user, errors) ⇒ Object
- #project_was_moved(project, old_path_with_namespace) ⇒ Object
- #prometheus_alerts_fired(project, alerts) ⇒ Object
- #push_to_merge_request(merge_request, current_user, new_commits: [], existing_commits: []) ⇒ Object
-
#reassigned_issue(issue, current_user, previous_assignees = []) ⇒ Object
When we reassign an issue we should send an email to:.
-
#reassigned_merge_request(merge_request, current_user, previous_assignees = []) ⇒ Object
When we reassign a merge_request we should send an email to:.
-
#relabeled_issue(issue, added_labels, current_user) ⇒ Object
When we add labels to an issue we should send an email to:.
-
#relabeled_merge_request(merge_request, added_labels, current_user) ⇒ Object
When we add labels to a merge request we should send an email to:.
- #remote_mirror_update_failed(remote_mirror) ⇒ Object
- #removed_milestone_issue(issue, current_user) ⇒ Object
- #removed_milestone_merge_request(merge_request, current_user) ⇒ Object
- #reopen_issue(issue, current_user) ⇒ Object
- #reopen_mr(merge_request, current_user) ⇒ Object
- #repository_cleanup_failure(project, user, error) ⇒ Object
- #repository_cleanup_success(project, user) ⇒ Object
- #resolve_all_discussions(merge_request, current_user) ⇒ Object
- #send_new_note_notifications(note) ⇒ Object
-
#send_new_release_notifications(release) ⇒ Object
Notify users when a new release is created.
- #send_service_desk_notification(note) ⇒ Object
-
#unknown_sign_in(user, ip, time) ⇒ Object
Notify a user when a previously unknown IP or device is used to sign in to their account.
- #update_group_member(group_member) ⇒ Object
- #update_project_member(project_member) ⇒ Object
Instance Method Details
#accept_group_invite(group_member) ⇒ Object
452 453 454 |
# File 'app/services/notification_service.rb', line 452 def accept_group_invite(group_member) mailer.member_invite_accepted_email(group_member.real_source_type, group_member.id).deliver_later end |
#accept_project_invite(project_member) ⇒ Object
413 414 415 416 417 |
# File 'app/services/notification_service.rb', line 413 def accept_project_invite(project_member) return true unless project_member.notifiable?(:subscription) mailer.member_invite_accepted_email(project_member.real_source_type, project_member.id).deliver_later end |
#access_token_about_to_expire(user) ⇒ Object
Notify the owner of the personal access token, when it is about to expire And mark the token with about_to_expire_delivered
69 70 71 72 73 |
# File 'app/services/notification_service.rb', line 69 def access_token_about_to_expire(user) return unless user.can?(:receive_notifications) mailer.access_token_about_to_expire_email(user).deliver_later end |
#access_token_expired(user) ⇒ Object
Notify the user when at least one of their personal access tokens has expired today
76 77 78 79 80 |
# File 'app/services/notification_service.rb', line 76 def access_token_expired(user) return unless user.can?(:receive_notifications) mailer.access_token_expired_email(user).deliver_later end |
#async ⇒ Object
34 35 36 |
# File 'app/services/notification_service.rb', line 34 def async @async ||= Async.new(self) end |
#autodevops_disabled(pipeline, recipients) ⇒ Object
538 539 540 541 542 543 544 |
# File 'app/services/notification_service.rb', line 538 def autodevops_disabled(pipeline, recipients) return if pipeline.project.emails_disabled? recipients.each do |recipient| mailer.autodevops_disabled_email(pipeline, recipient).deliver_later end end |
#changed_milestone_issue(issue, new_milestone, current_user) ⇒ Object
165 166 167 |
# File 'app/services/notification_service.rb', line 165 def changed_milestone_issue(issue, new_milestone, current_user) changed_milestone_resource_email(issue, new_milestone, current_user, :changed_milestone_issue_email) end |
#changed_milestone_merge_request(merge_request, new_milestone, current_user) ⇒ Object
280 281 282 |
# File 'app/services/notification_service.rb', line 280 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 |
#changed_reviewer_of_merge_request(merge_request, current_user, previous_reviewers = []) ⇒ Object
When we change reviewer in a merge_request we should send an email to:
* merge_request old reviewers if their notification level is not Disabled
* merge_request new reviewers if their notification level is not Disabled
* users with custom level checked with "change reviewer merge request"
247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
# File 'app/services/notification_service.rb', line 247 def changed_reviewer_of_merge_request(merge_request, current_user, previous_reviewers = []) recipients = NotificationRecipients::BuildService.build_recipients( merge_request, current_user, action: "change_reviewer", previous_assignees: previous_reviewers ) previous_reviewer_ids = previous_reviewers.map(&:id) recipients.each do |recipient| mailer.changed_reviewer_of_merge_request_email( recipient.user.id, merge_request.id, previous_reviewer_ids, current_user.id, recipient.reason ).deliver_later end end |
#close_issue(issue, current_user, closed_via: nil) ⇒ Object
When we close an issue we should send an email to:
* issue author if their notification level is not Disabled
* issue assignee if their notification level is not Disabled
* project team members with notification level higher then Participating
* users with custom level checked with "close issue"
121 122 123 |
# File 'app/services/notification_service.rb', line 121 def close_issue(issue, current_user, closed_via: nil) close_resource_email(issue, current_user, :closed_issue_email, closed_via: closed_via) end |
#close_mr(merge_request, current_user) ⇒ Object
284 285 286 |
# File 'app/services/notification_service.rb', line 284 def close_mr(merge_request, current_user) close_resource_email(merge_request, current_user, :closed_merge_request_email) end |
#decline_access_request(member) ⇒ Object
400 401 402 403 404 |
# File 'app/services/notification_service.rb', line 400 def decline_access_request(member) return true unless member.notifiable?(:subscription) mailer.member_access_denied_email(member.real_source_type, member.source_id, member.user_id).deliver_later end |
#decline_group_invite(group_member) ⇒ Object
456 457 458 459 460 461 462 463 464 465 466 |
# File 'app/services/notification_service.rb', line 456 def decline_group_invite(group_member) # Must always send, regardless of project/namespace configuration since it's a # response to the user's action. mailer.member_invite_declined_email( group_member.real_source_type, group_member.group.id, group_member.invite_email, group_member.created_by_id ).deliver_later end |
#decline_project_invite(project_member) ⇒ Object
419 420 421 422 423 424 425 426 427 428 429 |
# File 'app/services/notification_service.rb', line 419 def decline_project_invite(project_member) # Must always send, regardless of project/namespace configuration since it's a # response to the user's action. mailer.member_invite_declined_email( project_member.real_source_type, project_member.project.id, project_member.invite_email, project_member.created_by_id ).deliver_later end |
#disabled_two_factor(user) ⇒ Object
38 39 40 41 42 |
# File 'app/services/notification_service.rb', line 38 def disabled_two_factor(user) return unless user.can?(:receive_notifications) mailer.disabled_two_factor_email(user).deliver_later end |
#group_was_exported(group, current_user) ⇒ Object
618 619 620 621 622 |
# File 'app/services/notification_service.rb', line 618 def group_was_exported(group, current_user) return true unless notifiable?(current_user, :mention, group: group) mailer.group_was_exported_email(current_user, group).deliver_later end |
#group_was_not_exported(group, current_user, errors) ⇒ Object
624 625 626 627 628 |
# File 'app/services/notification_service.rb', line 624 def group_was_not_exported(group, current_user, errors) return true unless notifiable?(current_user, :mention, group: group) mailer.group_was_not_exported_email(current_user, group, errors).deliver_later end |
#invite_group_member(group_member, token) ⇒ Object
Group invite
444 445 446 |
# File 'app/services/notification_service.rb', line 444 def invite_group_member(group_member, token) mailer.member_invited_email(group_member.real_source_type, group_member.id, token).deliver_later end |
#invite_member_reminder(group_member, token, reminder_index) ⇒ Object
448 449 450 |
# File 'app/services/notification_service.rb', line 448 def invite_member_reminder(group_member, token, reminder_index) mailer.member_invited_reminder_email(group_member.real_source_type, group_member.id, token, reminder_index).deliver_later end |
#invite_project_member(project_member, token) ⇒ Object
Project invite
407 408 409 410 411 |
# File 'app/services/notification_service.rb', line 407 def invite_project_member(project_member, token) return true unless project_member.notifiable?(:subscription) mailer.member_invited_email(project_member.real_source_type, project_member.id, token).deliver_later end |
#issue_due(issue) ⇒ Object
576 577 578 579 580 581 582 583 584 585 586 587 588 |
# File 'app/services/notification_service.rb', line 576 def issue_due(issue) recipients = NotificationRecipients::BuildService.build_recipients( issue, issue., action: 'due', custom_action: :issue_due, skip_current_user: false ) recipients.each do |recipient| mailer.send(:issue_due_email, recipient.user.id, issue.id, recipient.reason).deliver_later end end |
#issue_moved(issue, new_issue, current_user) ⇒ Object
493 494 495 496 497 498 499 500 501 |
# File 'app/services/notification_service.rb', line 493 def issue_moved(issue, new_issue, current_user) recipients = NotificationRecipients::BuildService.build_recipients(issue, current_user, action: 'moved') recipients.map do |recipient| email = mailer.issue_moved_email(recipient.user, issue, new_issue, current_user, recipient.reason) email.deliver_later email end end |
#merge_mr(merge_request, current_user) ⇒ Object
292 293 294 295 296 297 298 299 |
# File 'app/services/notification_service.rb', line 292 def merge_mr(merge_request, current_user) close_resource_email( merge_request, current_user, :merged_merge_request_email, skip_current_user: !merge_request.auto_merge_enabled? ) end |
#merge_request_unmergeable(merge_request) ⇒ Object
When a merge request is found to be unmergeable, we should send an email to:
* mr author
* mr merge user if set
197 198 199 |
# File 'app/services/notification_service.rb', line 197 def merge_request_unmergeable(merge_request) merge_request_unmergeable_email(merge_request) end |
#merge_when_pipeline_succeeds(merge_request, current_user) ⇒ Object
639 640 641 642 643 644 645 |
# File 'app/services/notification_service.rb', line 639 def merge_when_pipeline_succeeds(merge_request, current_user) recipients = ::NotificationRecipients::BuildService.build_recipients(merge_request, current_user, action: 'merge_when_pipeline_succeeds') recipients.each do |recipient| mailer.merge_when_pipeline_succeeds_email(recipient.user.id, merge_request.id, current_user.id).deliver_later end end |
#new_access_request(member) ⇒ Object
Members
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 |
# File 'app/services/notification_service.rb', line 384 def new_access_request(member) return true unless member.notifiable?(:subscription) source = member.source recipients = source.access_request_approvers_to_be_notified if fallback_to_group_access_request_approvers?(recipients, source) recipients = source.group.access_request_approvers_to_be_notified end return true if recipients.empty? recipients.each { |recipient| deliver_access_request_email(recipient, member) } end |
#new_gpg_key(gpg_key) ⇒ Object
Always notify the user about gpg key added
This is a security email so it will be sent even if the user disabled notifications
61 62 63 64 65 |
# File 'app/services/notification_service.rb', line 61 def new_gpg_key(gpg_key) if gpg_key.user&.can?(:receive_notifications) mailer.new_gpg_key_email(gpg_key.id).deliver_later end end |
#new_group_member(group_member) ⇒ Object
468 469 470 471 472 |
# File 'app/services/notification_service.rb', line 468 def new_group_member(group_member) return true unless group_member.notifiable?(:mention) mailer.member_access_granted_email(group_member.real_source_type, group_member.id).deliver_later end |
#new_instance_access_request(user) ⇒ Object
373 374 375 376 377 378 379 380 381 |
# File 'app/services/notification_service.rb', line 373 def new_instance_access_request(user) recipients = User.instance_access_request_approvers_to_be_notified # https://gitlab.com/gitlab-org/gitlab/-/issues/277016 will change this return true if recipients.empty? recipients.each do |recipient| mailer.instance_access_request_email(user, recipient).deliver_later end end |
#new_issue(issue, current_user) ⇒ Object
When create an issue we should send an email to:
* issue assignee if their notification level is not Disabled
* project team members with notification level higher then Participating
* watchers of the issue's labels
* users with custom level checked with "new issue"
97 98 99 |
# File 'app/services/notification_service.rb', line 97 def new_issue(issue, current_user) new_resource_email(issue, :new_issue_email) end |
#new_key(key) ⇒ Object
Always notify user about ssh key added only if ssh key is not deploy key
This is security email so it will be sent even if user disabled notifications. However, it won't be sent to internal users like the ghost user or the EE support bot.
51 52 53 54 55 |
# File 'app/services/notification_service.rb', line 51 def new_key(key) if key.user&.can?(:receive_notifications) mailer.new_ssh_key_email(key.id).deliver_later end end |
#new_mentions_in_issue(issue, new_mentioned_users, current_user) ⇒ Object
When issue text is updated, we should send an email to:
* newly mentioned project team members with notification level higher than Participating
105 106 107 108 109 110 111 112 |
# File 'app/services/notification_service.rb', line 105 def new_mentions_in_issue(issue, new_mentioned_users, current_user) new_mentions_in_resource_email( issue, new_mentioned_users, current_user, :new_mention_in_issue_email ) end |
#new_mentions_in_merge_request(merge_request, new_mentioned_users, current_user) ⇒ Object
When merge request text is updated, we should send an email to:
* newly mentioned project team members with notification level higher than Participating
205 206 207 208 209 210 211 212 |
# File 'app/services/notification_service.rb', line 205 def new_mentions_in_merge_request(merge_request, new_mentioned_users, current_user) new_mentions_in_resource_email( merge_request, new_mentioned_users, current_user, :new_mention_in_merge_request_email ) end |
#new_merge_request(merge_request, current_user) ⇒ Object
When create a merge request we should send an email to:
* mr author
* mr assignees if their notification level is not Disabled
* project team members with notification level higher then Participating
* watchers of the mr's labels
* users with custom level checked with "new merge request"
In EE, approvers of the merge request are also included
178 179 180 |
# File 'app/services/notification_service.rb', line 178 def new_merge_request(merge_request, current_user) new_resource_email(merge_request, :new_merge_request_email) end |
#new_note(note) ⇒ Object
Notify users on new note in system
330 331 332 333 334 335 336 337 338 |
# File 'app/services/notification_service.rb', line 330 def new_note(note) return true unless note.noteable_type.present? # ignore gitlab service messages return true if note.system_note_with_references? send_new_note_notifications(note) send_service_desk_notification(note) end |
#new_project_member(project_member) ⇒ Object
431 432 433 434 435 |
# File 'app/services/notification_service.rb', line 431 def new_project_member(project_member) return true unless project_member.notifiable?(:mention, skip_read_ability: true) mailer.member_access_granted_email(project_member.real_source_type, project_member.id).deliver_later end |
#new_review(review) ⇒ Object
Notify users on new review in system
631 632 633 634 635 636 637 |
# File 'app/services/notification_service.rb', line 631 def new_review(review) recipients = NotificationRecipients::BuildService.build_new_review_recipients(review) recipients.each do |recipient| mailer.new_review_email(recipient.user.id, review.id).deliver_later end end |
#new_user(user, token = nil) ⇒ Object
Notify new user with email after creation
322 323 324 325 326 327 |
# File 'app/services/notification_service.rb', line 322 def new_user(user, token = nil) return true unless notifiable?(user, :mention) # Don't email omniauth created users mailer.new_user_email(user.id, token).deliver_later unless user.identities.any? end |
#pages_domain_auto_ssl_failed(domain) ⇒ Object
570 571 572 573 574 |
# File 'app/services/notification_service.rb', line 570 def pages_domain_auto_ssl_failed(domain) project_maintainers_recipients(domain, action: 'disabled').each do |recipient| mailer.pages_domain_auto_ssl_failed_email(domain, recipient.user).deliver_later end end |
#pages_domain_disabled(domain) ⇒ Object
564 565 566 567 568 |
# File 'app/services/notification_service.rb', line 564 def pages_domain_disabled(domain) project_maintainers_recipients(domain, action: 'disabled').each do |recipient| mailer.pages_domain_disabled_email(domain, recipient.user).deliver_later end end |
#pages_domain_enabled(domain) ⇒ Object
558 559 560 561 562 |
# File 'app/services/notification_service.rb', line 558 def pages_domain_enabled(domain) project_maintainers_recipients(domain, action: 'enabled').each do |recipient| mailer.pages_domain_enabled_email(domain, recipient.user).deliver_later end end |
#pages_domain_verification_failed(domain) ⇒ Object
552 553 554 555 556 |
# File 'app/services/notification_service.rb', line 552 def pages_domain_verification_failed(domain) project_maintainers_recipients(domain, action: 'failed').each do |recipient| mailer.pages_domain_verification_failed_email(domain, recipient.user).deliver_later end end |
#pages_domain_verification_succeeded(domain) ⇒ Object
546 547 548 549 550 |
# File 'app/services/notification_service.rb', line 546 def pages_domain_verification_succeeded(domain) project_maintainers_recipients(domain, action: 'succeeded').each do |recipient| mailer.pages_domain_verification_succeeded_email(domain, recipient.user).deliver_later end end |
#pipeline_finished(pipeline, ref_status: nil, recipients: nil) ⇒ Object
515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 |
# File 'app/services/notification_service.rb', line 515 def pipeline_finished(pipeline, ref_status: nil, recipients: nil) # Must always check project configuration since recipients could be a list of emails # from the PipelinesEmailService integration. return if pipeline.project.emails_disabled? status = pipeline_notification_status(ref_status, pipeline) email_template = "pipeline_#{status}_email" return unless mailer.respond_to?(email_template) recipients ||= notifiable_users( [pipeline.user], :watch, custom_action: :"#{status}_pipeline", target: pipeline ).map do |user| user.notification_email_for(pipeline.project.group) end if recipients.any? mailer.public_send(email_template, pipeline, recipients).deliver_later end end |
#project_exported(project, current_user) ⇒ Object
503 504 505 506 507 |
# File 'app/services/notification_service.rb', line 503 def project_exported(project, current_user) return true unless notifiable?(current_user, :mention, project: project) mailer.project_was_exported_email(current_user, project).deliver_later end |
#project_not_exported(project, current_user, errors) ⇒ Object
509 510 511 512 513 |
# File 'app/services/notification_service.rb', line 509 def project_not_exported(project, current_user, errors) return true unless notifiable?(current_user, :mention, project: project) mailer.project_was_not_exported_email(current_user, project, errors).deliver_later end |
#project_was_moved(project, old_path_with_namespace) ⇒ Object
480 481 482 483 484 485 486 487 488 489 490 491 |
# File 'app/services/notification_service.rb', line 480 def project_was_moved(project, old_path_with_namespace) recipients = project_moved_recipients(project) recipients = notifiable_users(recipients, :custom, custom_action: :moved_project, project: project) recipients.each do |recipient| mailer.project_was_moved_email( project.id, recipient.id, old_path_with_namespace ).deliver_later end end |
#prometheus_alerts_fired(project, alerts) ⇒ Object
610 611 612 613 614 615 616 |
# File 'app/services/notification_service.rb', line 610 def prometheus_alerts_fired(project, alerts) return if project.emails_disabled? owners_and_maintainers_without_invites(project).to_a.product(alerts).each do |recipient, alert| mailer.prometheus_alert_fired_email(project, recipient.user, alert).deliver_later end end |
#push_to_merge_request(merge_request, current_user, new_commits: [], existing_commits: []) ⇒ Object
182 183 184 185 186 187 188 189 190 |
# File 'app/services/notification_service.rb', line 182 def push_to_merge_request(merge_request, current_user, new_commits: [], existing_commits: []) new_commits = new_commits.map { |c| { short_id: c.short_id, title: c.title } } existing_commits = existing_commits.map { |c| { short_id: c.short_id, title: c.title } } recipients = NotificationRecipients::BuildService.build_recipients(merge_request, current_user, action: "push_to") recipients.each do |recipient| mailer.send(:push_to_merge_request_email, recipient.user.id, merge_request.id, current_user.id, recipient.reason, new_commits: new_commits, existing_commits: existing_commits).deliver_later end end |
#reassigned_issue(issue, current_user, previous_assignees = []) ⇒ Object
When we reassign an issue we should send an email to:
* issue old assignees if their notification level is not Disabled
* issue new assignees if their notification level is not Disabled
* users with custom level checked with "reassign issue"
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'app/services/notification_service.rb', line 131 def reassigned_issue(issue, current_user, previous_assignees = []) recipients = NotificationRecipients::BuildService.build_recipients( issue, current_user, action: "reassign", previous_assignees: previous_assignees ) previous_assignee_ids = previous_assignees.map(&:id) recipients.each do |recipient| mailer.send( :reassigned_issue_email, recipient.user.id, issue.id, previous_assignee_ids, current_user.id, recipient.reason ).deliver_later end end |
#reassigned_merge_request(merge_request, current_user, previous_assignees = []) ⇒ Object
When we reassign a merge_request we should send an email to:
* merge_request old assignees if their notification level is not Disabled
* merge_request new assignees if their notification level is not Disabled
* users with custom level checked with "reassign merge request"
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'app/services/notification_service.rb', line 220 def reassigned_merge_request(merge_request, current_user, previous_assignees = []) recipients = NotificationRecipients::BuildService.build_recipients( merge_request, current_user, action: "reassign", previous_assignees: previous_assignees ) previous_assignee_ids = previous_assignees.map(&:id) recipients.each do |recipient| mailer.reassigned_merge_request_email( recipient.user.id, merge_request.id, previous_assignee_ids, current_user.id, recipient.reason ).deliver_later end end |
#relabeled_issue(issue, added_labels, current_user) ⇒ Object
When we add labels to an issue we should send an email to:
* watchers of the issue's labels
157 158 159 |
# File 'app/services/notification_service.rb', line 157 def relabeled_issue(issue, added_labels, current_user) relabeled_resource_email(issue, added_labels, current_user, :relabeled_issue_email) end |
#relabeled_merge_request(merge_request, added_labels, current_user) ⇒ Object
When we add labels to a merge request we should send an email to:
* watchers of the mr's labels
272 273 274 |
# File 'app/services/notification_service.rb', line 272 def relabeled_merge_request(merge_request, added_labels, current_user) relabeled_resource_email(merge_request, added_labels, current_user, :relabeled_merge_request_email) end |
#remote_mirror_update_failed(remote_mirror) ⇒ Object
602 603 604 605 606 607 608 |
# File 'app/services/notification_service.rb', line 602 def remote_mirror_update_failed(remote_mirror) recipients = project_maintainers_recipients(remote_mirror, action: 'update_failed') recipients.each do |recipient| mailer.remote_mirror_update_failed_email(remote_mirror.id, recipient.user.id).deliver_later end end |
#removed_milestone_issue(issue, current_user) ⇒ Object
161 162 163 |
# File 'app/services/notification_service.rb', line 161 def removed_milestone_issue(issue, current_user) removed_milestone_resource_email(issue, current_user, :removed_milestone_issue_email) end |
#removed_milestone_merge_request(merge_request, current_user) ⇒ Object
276 277 278 |
# File 'app/services/notification_service.rb', line 276 def removed_milestone_merge_request(merge_request, current_user) removed_milestone_resource_email(merge_request, current_user, :removed_milestone_merge_request_email) end |
#reopen_issue(issue, current_user) ⇒ Object
288 289 290 |
# File 'app/services/notification_service.rb', line 288 def reopen_issue(issue, current_user) reopen_resource_email(issue, current_user, :issue_status_changed_email, 'reopened') end |
#reopen_mr(merge_request, current_user) ⇒ Object
301 302 303 304 305 306 307 308 |
# File 'app/services/notification_service.rb', line 301 def reopen_mr(merge_request, current_user) reopen_resource_email( merge_request, current_user, :merge_request_status_email, 'reopened' ) end |
#repository_cleanup_failure(project, user, error) ⇒ Object
596 597 598 599 600 |
# File 'app/services/notification_service.rb', line 596 def repository_cleanup_failure(project, user, error) return if project.emails_disabled? mailer.send(:repository_cleanup_failure_email, project, user, error).deliver_later end |
#repository_cleanup_success(project, user) ⇒ Object
590 591 592 593 594 |
# File 'app/services/notification_service.rb', line 590 def repository_cleanup_success(project, user) return if project.emails_disabled? mailer.send(:repository_cleanup_success_email, project, user).deliver_later end |
#resolve_all_discussions(merge_request, current_user) ⇒ Object
310 311 312 313 314 315 316 317 318 319 |
# File 'app/services/notification_service.rb', line 310 def resolve_all_discussions(merge_request, current_user) recipients = NotificationRecipients::BuildService.build_recipients( merge_request, current_user, action: "resolve_all_discussions") recipients.each do |recipient| mailer.resolved_all_discussions_email(recipient.user.id, merge_request.id, current_user.id, recipient.reason).deliver_later end end |
#send_new_note_notifications(note) ⇒ Object
340 341 342 343 344 345 346 347 |
# File 'app/services/notification_service.rb', line 340 def send_new_note_notifications(note) notify_method = "note_#{note.noteable_ability_name}_email".to_sym recipients = NotificationRecipients::BuildService.build_new_note_recipients(note) recipients.each do |recipient| mailer.send(notify_method, recipient.user.id, note.id, recipient.reason).deliver_later end end |
#send_new_release_notifications(release) ⇒ Object
Notify users when a new release is created
365 366 367 368 369 370 371 |
# File 'app/services/notification_service.rb', line 365 def send_new_release_notifications(release) recipients = NotificationRecipients::BuildService.build_new_release_recipients(release) recipients.each do |recipient| mailer.new_release_email(recipient.user.id, release, recipient.reason).deliver_later end end |
#send_service_desk_notification(note) ⇒ Object
349 350 351 352 353 354 355 356 357 358 359 360 361 362 |
# File 'app/services/notification_service.rb', line 349 def send_service_desk_notification(note) return unless Gitlab::ServiceDesk.supported? return unless note.noteable_type == 'Issue' issue = note.noteable support_bot = User.support_bot return unless issue..present? return unless issue.project.service_desk_enabled? return if note. == support_bot return unless issue.subscribed?(support_bot, issue.project) mailer.service_desk_new_note_email(issue.id, note.id).deliver_later end |
#unknown_sign_in(user, ip, time) ⇒ Object
Notify a user when a previously unknown IP or device is used to sign in to their account
84 85 86 87 88 |
# File 'app/services/notification_service.rb', line 84 def unknown_sign_in(user, ip, time) return unless user.can?(:receive_notifications) mailer.unknown_sign_in_email(user, ip, time).deliver_later end |
#update_group_member(group_member) ⇒ Object
474 475 476 477 478 |
# File 'app/services/notification_service.rb', line 474 def update_group_member(group_member) return true unless group_member.notifiable?(:mention) mailer.member_access_granted_email(group_member.real_source_type, group_member.id).deliver_later end |
#update_project_member(project_member) ⇒ Object
437 438 439 440 441 |
# File 'app/services/notification_service.rb', line 437 def update_project_member(project_member) return true unless project_member.notifiable?(:mention) mailer.member_access_granted_email(project_member.real_source_type, project_member.id).deliver_later end |