Files
docuseal/lib/replace_email_variables.rb
T

98 lines
4.1 KiB
Ruby
Raw Normal View History

2023-08-16 22:57:59 +03:00
# frozen_string_literal: true
module ReplaceEmailVariables
2024-08-09 14:12:42 +03:00
TEMPLATE_NAME = /\{+template\.name\}+/i
TEMPLATE_ID = /\{+template\.id\}+/i
SUBMITTER_LINK = /\{+submitter\.link\}+/i
ACCOUNT_NAME = /\{+account\.name\}+/i
SENDER_NAME = /\{+sender\.name\}+/i
2024-09-01 20:38:49 +03:00
SENDER_FIRST_NAME = /\{+sender\.first_name\}+/i
2024-08-09 14:12:42 +03:00
SENDER_EMAIL = /\{+sender\.email\}+/i
SUBMITTER_EMAIL = /\{+submitter\.email\}+/i
SUBMITTER_NAME = /\{+submitter\.name\}+/i
2024-09-01 20:38:49 +03:00
SUBMITTER_FIRST_NAME = /\{+submitter\.first_name\}+/i
2024-08-09 14:12:42 +03:00
SUBMITTER_ID = /\{+submitter\.id\}+/i
SUBMITTER_SLUG = /\{+submitter\.slug\}+/i
SUBMISSION_LINK = /\{+submission\.link\}+/i
SUBMISSION_ID = /\{+submission\.id\}+/i
SUBMISSION_SUBMITTERS = /\{+submission\.submitters\}+/i
DOCUMENTS_LINKS = /\{+documents\.links\}+/i
DOCUMENTS_LINK = /\{+documents\.link\}+/i
2023-08-16 22:57:59 +03:00
2024-11-13 17:53:55 +02:00
EMAIL_HOST = ENV.fetch('EMAIL_HOST', nil)
2023-08-16 22:57:59 +03:00
module_function
2023-12-15 02:44:10 +02:00
# rubocop:disable Metrics
2024-03-12 23:47:58 +02:00
def call(text, submitter:, tracking_event_type: 'click_email', html_escape: false, sig: nil)
2024-10-02 23:40:58 +03:00
text = replace(text, TEMPLATE_NAME, html_escape:) { (submitter.template || submitter.submission.template).name }
2024-03-12 23:47:58 +02:00
text = replace(text, TEMPLATE_ID, html_escape:) { submitter.template.id }
text = replace(text, SUBMITTER_ID, html_escape:) { submitter.id }
text = replace(text, SUBMITTER_SLUG, html_escape:) { submitter.slug }
text = replace(text, SUBMISSION_ID, html_escape:) { submitter.submission.id }
text = replace(text, SUBMITTER_EMAIL, html_escape:) { submitter.email }
text = replace(text, SUBMITTER_NAME, html_escape:) { submitter.name || submitter.email || submitter.phone }
2024-09-01 20:38:49 +03:00
text = replace(text, SUBMITTER_FIRST_NAME, html_escape:) { submitter.first_name }
2024-03-12 23:47:58 +02:00
text = replace(text, SUBMITTER_LINK, html_escape:) { build_submitter_link(submitter, tracking_event_type) }
text = replace(text, SUBMISSION_LINK, html_escape:) do
2024-03-06 00:09:23 +02:00
submitter.submission ? build_submission_link(submitter.submission) : ''
end
2024-03-12 23:47:58 +02:00
text = replace(text, SUBMISSION_SUBMITTERS, html_escape:) { build_submission_submitters(submitter.submission) }
text = replace(text, DOCUMENTS_LINKS, html_escape:) { build_documents_links_text(submitter, sig) }
text = replace(text, DOCUMENTS_LINK, html_escape:) { build_documents_links_text(submitter, sig) }
text = replace(text, ACCOUNT_NAME, html_escape:) { submitter.submission.account.name }
text = replace(text, SENDER_NAME, html_escape:) { submitter.submission.created_by_user&.full_name }
2024-09-01 20:38:49 +03:00
text = replace(text, SENDER_FIRST_NAME, html_escape:) { submitter.submission.created_by_user&.first_name }
2023-09-03 14:05:31 +03:00
2024-03-12 23:47:58 +02:00
replace(text, SENDER_EMAIL, html_escape:) { submitter.submission.created_by_user&.email.to_s.sub(/\+\w+@/, '@') }
2023-08-16 22:57:59 +03:00
end
2023-12-15 02:44:10 +02:00
# rubocop:enable Metrics
2023-08-20 00:10:54 +03:00
2024-02-25 02:00:18 +02:00
def build_documents_links_text(submitter, sig = nil)
Rails.application.routes.url_helpers.submissions_preview_url(
2024-02-25 02:00:18 +02:00
submitter.submission.slug, { sig:, **Docuseal.default_url_options }.compact
)
2023-08-20 00:10:54 +03:00
end
2024-03-12 23:47:58 +02:00
def replace(text, var, html_escape: false)
text.gsub(var) do
if html_escape
ERB::Util.html_escape(yield)
else
yield
end
end
end
2023-09-27 23:28:33 +03:00
def build_submitter_link(submitter, tracking_event_type)
if tracking_event_type == 'click_email'
2024-11-13 17:53:55 +02:00
url_options =
if EMAIL_HOST.present?
{ host: EMAIL_HOST, protocol: ENV['FORCE_SSL'].present? ? 'https' : 'http' }
else
Docuseal.default_url_options
end
2023-09-27 23:28:33 +03:00
Rails.application.routes.url_helpers.submit_form_url(
slug: submitter.slug,
t: SubmissionEvents.build_tracking_param(submitter, 'click_email'),
2024-11-13 17:53:55 +02:00
**url_options
2023-09-27 23:28:33 +03:00
)
else
Rails.application.routes.url_helpers.submit_form_url(
slug: submitter.slug,
c: SubmissionEvents.build_tracking_param(submitter, 'click_sms'),
**Docuseal.default_url_options
)
end
end
def build_submission_link(submission)
Rails.application.routes.url_helpers.submission_url(submission, **Docuseal.default_url_options)
end
def build_submission_submitters(submission)
2024-12-05 19:20:17 +02:00
submission.submitters.order(:completed_at).map { |e| e.name || e.email || e.phone }.uniq.join(', ')
end
2023-08-16 22:57:59 +03:00
end