allow to edit email templates

pull/105/head
Alex Turchyn 2 years ago
parent 8e6639d891
commit 6b4e7c2264

@ -18,6 +18,7 @@ class SubmitterMailer < ApplicationMailer
end end
mail(to: @submitter.email, mail(to: @submitter.email,
from: from_address_for_submitter(submitter),
subject:, subject:,
reply_to: submitter.submission.created_by_user&.friendly_name) reply_to: submitter.submission.created_by_user&.friendly_name)
end end
@ -27,8 +28,18 @@ class SubmitterMailer < ApplicationMailer
@submitter = submitter @submitter = submitter
@user = user @user = user
mail(to: user.email, @email_config = @current_account.account_configs.find_by(key: AccountConfig::SUBMITTER_COMPLETED_EMAIL_KEY)
subject: %(#{submitter.email} has completed the "#{submitter.submission.template.name}" form))
subject =
if @email_config
ReplaceEmailVariables.call(@email_config.value['subject'], submitter:)
else
%(#{submitter.email} has completed the "#{submitter.submission.template.name}" form)
end
mail(from: from_address_for_submitter(submitter),
to: user.email,
subject:)
end end
def documents_copy_email(submitter) def documents_copy_email(submitter)
@ -43,6 +54,23 @@ class SubmitterMailer < ApplicationMailer
attachments[attachment.filename.to_s] = attachment.download attachments[attachment.filename.to_s] = attachment.download
end end
mail(to: submitter.email, subject: 'Your copy of documents') @email_config = @current_account.account_configs.find_by(key: AccountConfig::SUBMITTER_DOCUMENTS_COPY_EMAIL_KEY)
subject =
if @email_config
ReplaceEmailVariables.call(@email_config.value['subject'], submitter:)
else
'Your copy of documents'
end
mail(from: from_address_for_submitter(submitter),
to: submitter.email,
subject:)
end
private
def from_address_for_submitter(submitter)
submitter.submission.created_by_user&.friendly_name || submitter.submission.template.author.friendly_name
end end
end end

@ -22,6 +22,8 @@
# #
class AccountConfig < ApplicationRecord class AccountConfig < ApplicationRecord
SUBMITTER_INVITATION_EMAIL_KEY = 'submitter_invitation_email' SUBMITTER_INVITATION_EMAIL_KEY = 'submitter_invitation_email'
SUBMITTER_COMPLETED_EMAIL_KEY = 'submitter_completed_email'
SUBMITTER_DOCUMENTS_COPY_EMAIL_KEY = 'submitter_documents_copy_email'
DEFAULT_VALUES = { DEFAULT_VALUES = {
SUBMITTER_INVITATION_EMAIL_KEY => { SUBMITTER_INVITATION_EMAIL_KEY => {
@ -32,6 +34,23 @@ class AccountConfig < ApplicationRecord
"Please contact us by replying to this email if you didn't request this.\n\n" \ "Please contact us by replying to this email if you didn't request this.\n\n" \
"Thanks,\n" \ "Thanks,\n" \
'{{account.name}}' '{{account.name}}'
},
SUBMITTER_COMPLETED_EMAIL_KEY => {
'subject' => '{{submitter.email}} has completed the "{{template.name}}" form',
'body' => "Hi,\n\n" \
"{{submitter.email}} has completed the \"{{template.name}}\" form:\n\n" \
"{{submission.link}}\n\n" \
"Thanks,\n" \
'{{account.name}}'
},
SUBMITTER_DOCUMENTS_COPY_EMAIL_KEY => {
'subject' => 'Your copy of documents',
'body' => "Hi there,\n\n" \
"Please check the copy of your \"{{template.name}}\" submission in the email attachments.\n" \
"Alternatively, you can download the copy using:\n\n" \
"{{documents.links}}\n\n" \
"Thanks,\n" \
'{{account.name}}'
} }
}.freeze }.freeze

@ -1,7 +1,15 @@
<div class="flex flex-wrap space-y-4 md:flex-nowrap md:space-y-0"> <div class="flex flex-wrap space-y-4 md:flex-nowrap md:space-y-0">
<%= render 'shared/settings_nav' %> <%= render 'shared/settings_nav' %>
<div class="flex-grow max-w-xl mx-auto"> <div class="flex-grow max-w-xl mx-auto">
<p class="text-4xl font-bold mb-4">Signature Request Email</p> <p class="text-4xl font-bold mb-4">Email Templates</p>
<div class="collapse collapse-plus bg-base-200 px-1">
<input type="checkbox">
<div class="collapse-title text-xl font-medium">
<div>
Signature Request Email
</div>
</div>
<div class="collapse-content">
<%= form_for AccountConfigs.find_or_initialize_for_key(current_account, AccountConfig::SUBMITTER_INVITATION_EMAIL_KEY), url: settings_personalization_path, method: :post, html: { autocomplete: 'off', class: 'space-y-4' } do |f| %> <%= form_for AccountConfigs.find_or_initialize_for_key(current_account, AccountConfig::SUBMITTER_INVITATION_EMAIL_KEY), url: settings_personalization_path, method: :post, html: { autocomplete: 'off', class: 'space-y-4' } do |f| %>
<%= f.hidden_field :key %> <%= f.hidden_field :key %>
<%= f.fields_for :value, Struct.new(:subject, :body).new(*f.object.value.values_at('subject', 'body')) do |ff| %> <%= f.fields_for :value, Struct.new(:subject, :body).new(*f.object.value.values_at('subject', 'body')) do |ff| %>
@ -20,6 +28,64 @@
<%= f.button button_title(title: 'Save', disabled_with: 'Saving'), class: 'base-button' %> <%= f.button button_title(title: 'Save', disabled_with: 'Saving'), class: 'base-button' %>
</div> </div>
<% end %> <% end %>
</div>
</div>
<div class="collapse collapse-plus bg-base-200 px-1 mt-4">
<input type="checkbox">
<div class="collapse-title text-xl font-medium">
<div>
Form Completed Email
</div>
</div>
<div class="collapse-content">
<%= form_for AccountConfigs.find_or_initialize_for_key(current_account, AccountConfig::SUBMITTER_COMPLETED_EMAIL_KEY), url: settings_personalization_path, method: :post, html: { autocomplete: 'off', class: 'space-y-4' } do |f| %>
<%= f.hidden_field :key %>
<%= f.fields_for :value, Struct.new(:subject, :body).new(*f.object.value.values_at('subject', 'body')) do |ff| %>
<div class="form-control">
<%= ff.label :subject, class: 'label' %>
<%= ff.text_field :subject, required: true, class: 'base-input' %>
</div>
<div class="form-control">
<%= ff.label :body, class: 'label' %>
<autoresize-textarea>
<%= ff.text_area :body, required: true, class: 'base-input w-full py-2' %>
</autoresize-textarea>
</div>
<% end %>
<div class="form-control pt-2">
<%= f.button button_title(title: 'Save', disabled_with: 'Saving'), class: 'base-button' %>
</div>
<% end %>
</div>
</div>
<div class="collapse collapse-plus bg-base-200 px-1 mt-4">
<input type="checkbox">
<div class="collapse-title text-xl font-medium">
<div>
Documents Copy Email
</div>
</div>
<div class="collapse-content">
<%= form_for AccountConfigs.find_or_initialize_for_key(current_account, AccountConfig::SUBMITTER_DOCUMENTS_COPY_EMAIL_KEY), url: settings_personalization_path, method: :post, html: { autocomplete: 'off', class: 'space-y-4' } do |f| %>
<%= f.hidden_field :key %>
<%= f.fields_for :value, Struct.new(:subject, :body).new(*f.object.value.values_at('subject', 'body')) do |ff| %>
<div class="form-control">
<%= ff.label :subject, class: 'label' %>
<%= ff.text_field :subject, required: true, class: 'base-input' %>
</div>
<div class="form-control">
<%= ff.label :body, class: 'label' %>
<autoresize-textarea>
<%= ff.text_area :body, required: true, class: 'base-input w-full py-2' %>
</autoresize-textarea>
</div>
<% end %>
<div class="form-control pt-2">
<%= f.button button_title(title: 'Save', disabled_with: 'Saving'), class: 'base-button' %>
</div>
<% end %>
</div>
</div>
<p class="text-4xl font-bold mb-4 mt-8">Company Logo</p> <p class="text-4xl font-bold mb-4 mt-8">Company Logo</p>
<%= render 'logo_form' %> <%= render 'logo_form' %>
</div> </div>

@ -1,3 +1,7 @@
<p>Hi <%= @user.first_name %>,</p> <% if @email_config %>
<p><%= @submitter.email %> has completed the "<%= @submitter.submission.template.name %>" form.</p> <%= auto_link(simple_format(h(ReplaceEmailVariables.call(@email_config.value['body'], submitter: @submitter)))) %>
<p><%= link_to 'View Submission', submission_url(@submitter.submission) %></p> <% else %>
<p>Hi <%= @user.first_name %>,</p>
<p><%= @submitter.email %> has completed the "<%= @submitter.submission.template.name %>" form.</p>
<p><%= link_to 'View Submission', submission_url(@submitter.submission) %></p>
<% end %>

@ -1,13 +1,17 @@
<p>Hi there,</p> <% if @email_config %>
<p>Please check the copy of your "<%= @submitter.submission.template.name %>" submission in the email attachments.</p> <%= auto_link(simple_format(h(ReplaceEmailVariables.call(@email_config.value['body'], submitter: @submitter)))) %>
<p>Alternatively, you can download the copy using:</p> <% else %>
<% @documents.each do |document| %> <p>Hi there,</p>
<p>Please check the copy of your "<%= @submitter.submission.template.name %>" submission in the email attachments.</p>
<p>Alternatively, you can download the copy using:</p>
<% @documents.each do |document| %>
<ul> <ul>
<li> <li>
<%= link_to document.filename.to_s, rails_blob_url(document) %> <%= link_to document.filename.to_s, rails_blob_url(document) %>
</li> </li>
</ul> </ul>
<% end %> <% end %>
<p> <p>
Thanks,<br><%= @current_account.name %> Thanks,<br><%= @current_account.name %>
</p> </p>
<% end %>

@ -4,18 +4,40 @@ module ReplaceEmailVariables
TEMAPLTE_NAME = '{{template.name}}' TEMAPLTE_NAME = '{{template.name}}'
SUBMITTER_LINK = '{{submitter.link}}' SUBMITTER_LINK = '{{submitter.link}}'
ACCOUNT_NAME = '{{account.name}}' ACCOUNT_NAME = '{{account.name}}'
SUBMITTER_EMAIL = '{{submitter.email}}'
SUBMISSION_LINK = '{{submission.link}}'
DOCUMENTS_LINKS = '{{documents.links}}'
module_function module_function
def call(text, submitter:) def call(text, submitter:)
link = submitter_link =
Rails.application.routes.url_helpers.submit_form_url( Rails.application.routes.url_helpers.submit_form_url(
slug: submitter.slug, **Docuseal.default_url_options slug: submitter.slug, **Docuseal.default_url_options
) )
submission_link =
Rails.application.routes.url_helpers.submission_url(
submitter.submission, **Docuseal.default_url_options
)
text = text.gsub(TEMAPLTE_NAME, submitter.template.name) text = text.gsub(TEMAPLTE_NAME, submitter.template.name)
text = text.gsub(SUBMITTER_LINK, link) text = text.gsub(SUBMITTER_EMAIL, submitter.email)
text = text.gsub(SUBMITTER_LINK, submitter_link)
text = text.gsub(SUBMISSION_LINK, submission_link)
text = text.gsub(DOCUMENTS_LINKS, build_documents_links_text(submitter))
text.gsub(ACCOUNT_NAME, submitter.template.account.name) text.gsub(ACCOUNT_NAME, submitter.template.account.name)
end end
def build_documents_links_text(submitter)
submitter.documents.map do |document|
link =
Rails.application.routes.url_helpers.rails_blob_url(
document, **Docuseal.default_url_options
)
"#{link}\n"
end.join
end
end end

Loading…
Cancel
Save