diff --git a/app/jobs/send_submitter_invitation_email_job.rb b/app/jobs/send_submitter_invitation_email_job.rb index d53863fa..4036df16 100644 --- a/app/jobs/send_submitter_invitation_email_job.rb +++ b/app/jobs/send_submitter_invitation_email_job.rb @@ -1,8 +1,10 @@ # frozen_string_literal: true class SendSubmitterInvitationEmailJob < ApplicationJob - def perform(submitter) - SubmitterMailer.invitation_email(submitter).deliver_now! + def perform(params = {}) + submitter = Submitter.find(params['submitter_id']) + + SubmitterMailer.invitation_email(submitter, subject: params['subject'], body: params['body']).deliver_now! SubmissionEvent.create!(submitter:, event_type: 'send_email') diff --git a/app/mailers/submitter_mailer.rb b/app/mailers/submitter_mailer.rb index 7c0eb1e9..3f40d1d4 100644 --- a/app/mailers/submitter_mailer.rb +++ b/app/mailers/submitter_mailer.rb @@ -1,18 +1,16 @@ # frozen_string_literal: true class SubmitterMailer < ApplicationMailer - DEFAULT_MESSAGE = %(You have been invited to submit the "%s" form:) - - def invitation_email(submitter, message: '') + def invitation_email(submitter, body: nil, subject: nil) @current_account = submitter.submission.template.account @submitter = submitter - @message = message.presence || format(DEFAULT_MESSAGE, name: submitter.submission.template.name) + @body = body.presence @email_config = @current_account.account_configs.find_by(key: AccountConfig::SUBMITTER_INVITATION_EMAIL_KEY) subject = - if @email_config - ReplaceEmailVariables.call(@email_config.value['subject'], submitter:) + if @email_config || subject.present? + ReplaceEmailVariables.call(subject.presence || @email_config.value['subject'], submitter:) else 'You have been invited to submit a form' end diff --git a/app/views/submissions/_send_email.html.erb b/app/views/submissions/_send_email.html.erb index a2d197fb..8d61822a 100644 --- a/app/views/submissions/_send_email.html.erb +++ b/app/views/submissions/_send_email.html.erb @@ -1,11 +1,17 @@
<% is_smtp_configured = Accounts.can_send_emails?(current_account) %> -
+
<%= f.label :send_email, for: uuid = SecureRandom.uuid, class: 'flex items-center cursor-pointer' do %> <%= f.check_box :send_email, id: uuid, class: 'base-checkbox', disabled: !is_smtp_configured, checked: is_smtp_configured %> Send emails <% end %> - <%= render 'email_stats' %> +
+ + <%= render 'email_stats' %> +
<% unless is_smtp_configured %>
@@ -21,3 +27,20 @@
<% end %>
+<% config = AccountConfigs.find_or_initialize_for_key(current_account, AccountConfig::SUBMITTER_INVITATION_EMAIL_KEY) %> + diff --git a/app/views/submitter_mailer/invitation_email.html.erb b/app/views/submitter_mailer/invitation_email.html.erb index a9ca8e26..7a3b2447 100644 --- a/app/views/submitter_mailer/invitation_email.html.erb +++ b/app/views/submitter_mailer/invitation_email.html.erb @@ -1,8 +1,8 @@ -<% if @email_config %> - <%= auto_link(simple_format(h(ReplaceEmailVariables.call(@email_config.value['body'], submitter: @submitter)))) %> +<% if @email_config || @body.present? %> + <%= auto_link(simple_format(h(ReplaceEmailVariables.call(@body.presence || @email_config.value['body'], submitter: @submitter)))) %> <% else %>

Hi there,

- <%= simple_format(@message) %> +

You have been invited to submit the "<%= @submitter.submission.template.name %>" form

<%= link_to 'Submit Form', submit_form_url(slug: @submitter.slug, t: SubmissionEvents.build_tracking_param(@submitter, 'click_email')) %>

Please contact us by replying to this email if you didn't request this.

diff --git a/lib/submitters.rb b/lib/submitters.rb index ee3b5e8d..9b04e7fe 100644 --- a/lib/submitters.rb +++ b/lib/submitters.rb @@ -35,7 +35,15 @@ module Submitters submitters.each do |submitter| next if submitter.email.blank? - SendSubmitterInvitationEmailJob.perform_later(submitter) + enqueue_invitation_email(submitter, params) end end + + def enqueue_invitation_email(submitter, params) + subject, body = params.values_at(:subject, :body) if params[:is_custom_message] == '1' + + SendSubmitterInvitationEmailJob.perform_later('submitter_id' => submitter.id, + 'body' => body, + 'subject' => subject) + end end