From d0259791bf0fcf8dea4ad79e836ab8c996482e95 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Wed, 16 Apr 2025 21:14:59 +0300 Subject: [PATCH] add field value email variable --- lib/replace_email_variables.rb | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/replace_email_variables.rb b/lib/replace_email_variables.rb index a78cedf9..894c355c 100644 --- a/lib/replace_email_variables.rb +++ b/lib/replace_email_variables.rb @@ -19,6 +19,7 @@ module ReplaceEmailVariables SUBMITTERS_N_EMAIL = /\{+submitters\[(?\d+)\]\.email\}+/i SUBMITTERS_N_NAME = /\{+submitters\[(?\d+)\]\.name\}+/i SUBMITTERS_N_FIRST_NAME = /\{+submitters\[(?\d+)\]\.first_name\}+/i + SUBMITTERS_N_FIELD_VALUE = /\{+submitters\[(?\d+)\]\.(?[^}]+)\}+/i DOCUMENTS_LINKS = /\{+documents\.links\}+/i DOCUMENTS_LINK = /\{+documents\.link\}+/i @@ -59,6 +60,10 @@ module ReplaceEmailVariables build_submitters_n_field(submitter.submission, match[:index].to_i - 1, :first_name) end + text = replace(text, SUBMITTERS_N_FIELD_VALUE, html_escape:) do |match| + build_submitters_n_field(submitter.submission, match[:index].to_i - 1, :values, match[:field_name].to_s.strip) + end + replace(text, SENDER_EMAIL, html_escape:) { submitter.submission.created_by_user&.email.to_s.sub(/\+\w+@/, '@') } end # rubocop:enable Metrics @@ -69,10 +74,33 @@ module ReplaceEmailVariables ) end - def build_submitters_n_field(submission, index, field_name) + def build_submitters_n_field(submission, index, field_name, value_name = nil) uuid = (submission.template_submitters || submission.template.submitters).dig(index, 'uuid') - submission.submitters.find { |s| s.uuid == uuid }.try(field_name) + submitter = submission.submitters.find { |s| s.uuid == uuid } + + return unless submitter + + value = submitter.try(field_name) + + if value_name + field = submission.template_fields.find { |e| e['name'] == value_name } + + return unless field + + value = + if field['type'].in?(%w[image signature initials stamp payment file]) + attachment_uuid = Array.wrap(value[field['uuid']]).first + + attachment = submitter.attachments.find { |e| e.uuid == attachment_uuid } + + ActiveStorage::Blob.proxy_url(attachment.blob) if attachment + else + value[field&.dig('uuid')] + end + end + + value end def replace(text, var, html_escape: false)