Reply to for email notifications (#152)
* Reply to for email notifications * Polish Code
This commit is contained in:
parent
e28d80e7da
commit
524d4db56e
|
@ -51,7 +51,7 @@ class FormSubmissionNotification extends Notification implements ShouldQueue
|
|||
->outputStringsOnly();
|
||||
|
||||
return (new MailMessage)
|
||||
->replyTo($notifiable->routes['mail'])
|
||||
->replyTo($this->getReplyToEmail($notifiable->routes['mail']))
|
||||
->from($this->getFromEmail(), config('app.name'))
|
||||
->subject('New form submission for "'.$this->event->form->title.'"')
|
||||
->markdown('mail.form.submission-notification', [
|
||||
|
@ -66,4 +66,36 @@ class FormSubmissionNotification extends Notification implements ShouldQueue
|
|||
return $originalFromAddress->first(). '+' . time() . '@' . $originalFromAddress->last();
|
||||
}
|
||||
|
||||
private function getReplyToEmail($default)
|
||||
{
|
||||
return $this->getRespondentEmail() ?? $default;
|
||||
}
|
||||
|
||||
private function getRespondentEmail()
|
||||
{
|
||||
// Make sure we only have one email field in the form
|
||||
$emailFields = collect($this->event->form->properties)->filter(function ($field) {
|
||||
$hidden = $field['hidden'] ?? false;
|
||||
|
||||
return !$hidden && $field['type'] == 'email';
|
||||
});
|
||||
if ($emailFields->count() != 1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (isset($this->event->data[$emailFields->first()['id']])) {
|
||||
$email = $this->event->data[$emailFields->first()['id']];
|
||||
if ($this->validateEmail($email)) {
|
||||
return $email;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static function validateEmail($email): bool
|
||||
{
|
||||
return (bool)filter_var($email, FILTER_VALIDATE_EMAIL);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
</h2>
|
||||
<toggle-switch-input name="notifies" :form="form" class="mt-4"
|
||||
label="Receive email notifications on submission"
|
||||
:help="notifiesHelp"
|
||||
/>
|
||||
<text-area-input v-if="form.notifies" name="notification_emails" :form="form" class="mt-4"
|
||||
label="Notification Emails" help="Add one email per line"
|
||||
|
@ -62,6 +63,19 @@ export default {
|
|||
set (value) {
|
||||
this.$store.commit('open/working_form/set', value)
|
||||
}
|
||||
},
|
||||
replayToEmailField () {
|
||||
const emailFields = this.form.properties.filter((field) => {
|
||||
return field.type === 'email' && !field.hidden
|
||||
})
|
||||
if (emailFields.length === 1) return emailFields[0]
|
||||
return null
|
||||
},
|
||||
notifiesHelp () {
|
||||
if (this.replayToEmailField) {
|
||||
return 'Reply-to for this notification will be the email filled in the field "' + this.replayToEmailField.name + '".'
|
||||
}
|
||||
return 'Reply-to for this notification will be your own email. Add a single email field to your form, and it will automatically become the reply to value.'
|
||||
}
|
||||
},
|
||||
|
||||
|
|
Loading…
Reference in New Issue