File: projects.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (134 lines) | stat: -rw-r--r-- 3,922 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# frozen_string_literal: true

module Emails
  module Projects
    def project_was_moved_email(project_id, user_id, old_path_with_namespace)
      @current_user = @user = User.find user_id
      @project = Project.find project_id
      @target_url = project_url(@project)
      @old_path_with_namespace = old_path_with_namespace
      email_with_layout(
        to: @user.notification_email_for(@project.group),
        subject: subject("Project was moved")
      )
    end

    def project_was_exported_email(current_user, project)
      @project = project
      email_with_layout(
        to: current_user.notification_email_for(project.group),
        subject: subject("Project was exported")
      )
    end

    def project_was_not_exported_email(current_user, project, errors)
      @project = project
      @errors = errors
      email_with_layout(
        to: current_user.notification_email_for(@project.group),
        subject: subject("Project export error")
      )
    end

    def repository_cleanup_success_email(project, user)
      @project = project
      @user = user

      mail_with_locale(
        to: user.notification_email_for(project.group),
        subject: subject("Project cleanup has completed")
      )
    end

    def repository_cleanup_failure_email(project, user, error)
      @project = project
      @user = user
      @error = error

      mail_with_locale(to: user.notification_email_for(project.group), subject: subject("Project cleanup failure"))
    end

    def repository_rewrite_history_success_email(project, user)
      @project = project

      email_with_layout(
        to: user.notification_email_for(project.group),
        subject: subject("Project history rewrite has completed")
      )
    end

    def repository_rewrite_history_failure_email(project, user, error)
      @project = project
      @error = error

      email_with_layout(
        to: user.notification_email_for(project.group),
        subject: subject("Project history rewrite failure")
      )
    end

    def repository_push_email(project_id, opts = {})
      @message =
        Gitlab::Email::Message::RepositoryPush.new(self, project_id, opts)

      # used in notify layout
      @target_url = @message.target_url
      @project = Project.find(project_id)
      @diff_notes_disabled = true

      add_project_headers
      headers['X-GitLab-Author'] = @message.author_username

      mail_with_locale(
        from: sender(@message.author_id, send_from_user_email: @message.send_from_committer_email?),
        reply_to: @message.reply_to,
        subject: @message.subject
      )
    end

    def prometheus_alert_fired_email(project, user, alert)
      @project = project
      @alert = alert.present
      @incident = alert.issue

      add_project_headers
      add_alert_headers

      subject_text = "Alert: #{@alert.email_title}"
      mail_with_locale(to: user.notification_email_for(@project.group), subject: subject(subject_text))
    end

    def inactive_project_deletion_warning_email(project, user, deletion_date)
      @project = project
      @user = user
      @deletion_date = deletion_date
      subject_text = "Action required: Project #{project.name} is scheduled to be deleted on " \
      "#{deletion_date} due to inactivity"

      email_with_layout(
        to: user.notification_email_for(project.group),
        subject: subject(subject_text))
    end

    private

    def add_alert_headers
      return unless @alert

      headers['X-GitLab-Alert-ID'] = @alert.id
      headers['X-GitLab-Alert-IID'] = @alert.iid
      headers['X-GitLab-NotificationReason'] = "alert_#{@alert.state}"

      add_incident_headers
    end

    def add_incident_headers
      return unless @incident

      headers['X-GitLab-Incident-ID'] = @incident.id
      headers['X-GitLab-Incident-IID'] = @incident.iid
    end
  end
end

Emails::Projects.prepend_mod_with('Emails::Projects')