debian-mirror-gitlab/app/helpers/emails_helper.rb

241 lines
6.7 KiB
Ruby
Raw Normal View History

2018-12-05 23:21:45 +05:30
# frozen_string_literal: true
2015-04-26 12:48:37 +05:30
module EmailsHelper
2017-08-17 22:00:37 +05:30
include AppearancesHelper
2015-04-26 12:48:37 +05:30
# Google Actions
# https://developers.google.com/gmail/markup/reference/go-to-action
def email_action(url)
name = action_title(url)
if name
data = {
"@context" => "http://schema.org",
"@type" => "EmailMessage",
"action" => {
"@type" => "ViewAction",
"name" => name,
2017-09-10 17:25:29 +05:30
"url" => url
2015-04-26 12:48:37 +05:30
}
}
content_tag :script, type: 'application/ld+json' do
data.to_json.html_safe
end
end
end
def action_title(url)
return unless url
2018-03-17 18:26:18 +05:30
2017-08-17 22:00:37 +05:30
%w(merge_requests issues commit).each do |action|
2015-04-26 12:48:37 +05:30
if url.split("/").include?(action)
return "View #{action.humanize.singularize}"
end
end
2015-12-23 02:04:40 +05:30
nil
2015-04-26 12:48:37 +05:30
end
2019-02-15 15:39:39 +05:30
def sanitize_name(name)
if name =~ URI::DEFAULT_PARSER.regexp[:URI_REF]
name.tr('.', '_')
else
name
end
end
2015-09-11 14:41:01 +05:30
def password_reset_token_valid_time
valid_hours = Devise.reset_password_within / 60 / 60
if valid_hours >= 24
unit = 'day'
valid_length = (valid_hours / 24).floor
else
unit = 'hour'
valid_length = valid_hours.floor
end
pluralize(valid_length, unit)
end
2017-08-17 22:00:37 +05:30
def header_logo
2018-05-09 12:01:36 +05:30
if current_appearance&.header_logo?
2017-08-17 22:00:37 +05:30
image_tag(
2019-02-15 15:39:39 +05:30
current_appearance.header_logo_path,
2017-08-17 22:00:37 +05:30
style: 'height: 50px'
)
else
image_tag(
image_url('mailers/gitlab_header_logo.gif'),
2017-09-10 17:25:29 +05:30
size: '55x50',
alt: 'GitLab'
2017-08-17 22:00:37 +05:30
)
end
end
2017-09-10 17:25:29 +05:30
def email_default_heading(text)
content_tag :h1, text, style: [
"font-family:'Helvetica Neue',Helvetica,Arial,sans-serif",
'color:#333333',
'font-size:18px',
'font-weight:400',
'line-height:1.4',
'padding:0',
'margin:0',
'text-align:center'
].join(';')
end
2018-03-17 18:26:18 +05:30
2019-09-04 21:01:54 +05:30
def closure_reason_text(closed_via, format: nil)
case closed_via
when MergeRequest
merge_request = MergeRequest.find(closed_via[:id]).present
return "" unless Ability.allowed?(@recipient, :read_merge_request, merge_request)
case format
when :html
merge_request_link = link_to(merge_request.to_reference, merge_request.web_url)
_("via merge request %{link}").html_safe % { link: merge_request_link }
else
# If it's not HTML nor text then assume it's text to be safe
_("via merge request %{link}") % { link: "#{merge_request.to_reference} (#{merge_request.web_url})" }
end
when String
# Technically speaking this should be Commit but per
2019-12-04 20:38:33 +05:30
# https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/15610#note_163812339
2019-09-04 21:01:54 +05:30
# we can't deserialize Commit without custom serializer for ActiveJob
return "" unless Ability.allowed?(@recipient, :download_code, @project)
_("via %{closed_via}") % { closed_via: closed_via }
else
""
end
end
2020-01-01 13:55:28 +05:30
# "You are receiving this email because #{reason} on #{gitlab_host}."
2018-03-17 18:26:18 +05:30
def notification_reason_text(reason)
2020-01-01 13:55:28 +05:30
gitlab_host = Gitlab.config.gitlab.host
case reason
when NotificationReason::OWN_ACTIVITY
_("You're receiving this email because of your activity on %{host}.") % { host: gitlab_host }
when NotificationReason::ASSIGNED
_("You're receiving this email because you have been assigned an item on %{host}.") % { host: gitlab_host }
when NotificationReason::MENTIONED
_("You're receiving this email because you have been mentioned on %{host}.") % { host: gitlab_host }
else
_("You're receiving this email because of your account on %{host}.") % { host: gitlab_host }
end
2018-03-17 18:26:18 +05:30
end
2019-02-15 15:39:39 +05:30
def create_list_id_string(project, list_id_max_length = 255)
project_path_as_domain = project.full_path.downcase
.split('/').reverse.join('/')
.gsub(%r{[^a-z0-9\/]}, '-')
.gsub(%r{\/+}, '.')
.gsub(/(\A\.+|\.+\z)/, '')
max_domain_length = list_id_max_length - Gitlab.config.gitlab.host.length - project.id.to_s.length - 2
if max_domain_length < 3
return project.id.to_s + "..." + Gitlab.config.gitlab.host
end
if project_path_as_domain.length > max_domain_length
project_path_as_domain = project_path_as_domain.slice(0, max_domain_length)
last_dot_index = project_path_as_domain[0..-2].rindex(".")
last_dot_index ||= max_domain_length - 2
project_path_as_domain = project_path_as_domain.slice(0, last_dot_index).concat("..")
end
project.id.to_s + "." + project_path_as_domain + "." + Gitlab.config.gitlab.host
end
2019-07-07 11:18:12 +05:30
def html_header_message
return unless show_header?
render_message(:header_message, style: '')
end
def html_footer_message
return unless show_footer?
render_message(:footer_message, style: '')
end
def text_header_message
return unless show_header?
strip_tags(render_message(:header_message, style: ''))
end
def text_footer_message
return unless show_footer?
strip_tags(render_message(:footer_message, style: ''))
end
2020-11-24 15:15:51 +05:30
def say_hi(user)
_('Hi %{username}!') % { username: sanitize_name(user.name) }
end
def say_hello(user)
_('Hello, %{username}!') % { username: sanitize_name(user.name) }
end
def two_factor_authentication_disabled_text
_('Two-factor authentication has been disabled for your GitLab account.')
end
def re_enable_two_factor_authentication_text(format: nil)
url = profile_two_factor_auth_url
case format
when :html
settings_link_to = generate_link(_('two-factor authentication settings'), url).html_safe
_("If you want to re-enable two-factor authentication, visit the %{settings_link_to} page.").html_safe % { settings_link_to: settings_link_to }
else
_('If you want to re-enable two-factor authentication, visit %{two_factor_link}') %
{ two_factor_link: url }
end
end
def admin_changed_password_text(format: nil)
url = Gitlab.config.gitlab.url
case format
when :html
link_to = generate_link(url, url).html_safe
_('An administrator changed the password for your GitLab account on %{link_to}.').html_safe % { link_to: link_to }
else
_('An administrator changed the password for your GitLab account on %{link_to}.') % { link_to: url }
end
end
def contact_your_administrator_text
_('Please contact your administrator with any questions.')
end
2019-07-07 11:18:12 +05:30
private
2020-11-24 15:15:51 +05:30
def generate_link(text, url)
link_to(text, url, target: :_blank, rel: 'noopener noreferrer')
end
2019-07-07 11:18:12 +05:30
def show_footer?
email_header_and_footer_enabled? && current_appearance&.show_footer?
end
def show_header?
email_header_and_footer_enabled? && current_appearance&.show_header?
end
def email_header_and_footer_enabled?
current_appearance&.email_header_and_footer_enabled?
end
2015-04-26 12:48:37 +05:30
end
2019-12-04 20:38:33 +05:30
EmailsHelper.prepend_if_ee('EE::EmailsHelper')