allow attaching uploaded files when sending mails
This commit is contained in:
parent
ece0c27972
commit
a97248555e
@ -17,6 +17,7 @@ class CustomMail extends FormRequest
|
||||
'to' => 'required|email',
|
||||
'subject' => 'required|string',
|
||||
'body' => 'required|string',
|
||||
'attachments.*' => 'nullable|boolean',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,15 @@ class SendDocumentAsCustomMail extends Job
|
||||
$custom_mail['cc'] = user()->email;
|
||||
}
|
||||
|
||||
$attachments = collect($this->request->get('attachments', []))
|
||||
->filter(fn($value) => $value == true)
|
||||
->keys()
|
||||
->all();
|
||||
|
||||
$notification = config('type.document.' . $document->type . '.notification.class');
|
||||
|
||||
// Notify the contact
|
||||
$document->contact->notify(new $notification($document, $this->template_alias, true, $custom_mail));
|
||||
$document->contact->notify(new $notification($document, $this->template_alias, true, $custom_mail, $attachments));
|
||||
|
||||
event(new DocumentSent($document));
|
||||
}
|
||||
|
@ -35,10 +35,17 @@ class Invoice extends Notification
|
||||
*/
|
||||
public $attach_pdf;
|
||||
|
||||
/**
|
||||
* List of document attachments to attach when sending the email.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $attachments;
|
||||
|
||||
/**
|
||||
* Create a notification instance.
|
||||
*/
|
||||
public function __construct(Document $invoice = null, string $template_alias = null, bool $attach_pdf = false, array $custom_mail = [])
|
||||
public function __construct(Document $invoice = null, string $template_alias = null, bool $attach_pdf = false, array $custom_mail = [], $attachments = [])
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
@ -46,6 +53,7 @@ class Invoice extends Notification
|
||||
$this->template = EmailTemplate::alias($template_alias)->first();
|
||||
$this->attach_pdf = $attach_pdf;
|
||||
$this->custom_mail = $custom_mail;
|
||||
$this->attachments = $attachments;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -68,6 +76,17 @@ class Invoice extends Notification
|
||||
]);
|
||||
}
|
||||
|
||||
// Attach selected attachments
|
||||
if (! empty($this->invoice->attachment)) {
|
||||
foreach ($this->invoice->attachment as $attachment) {
|
||||
if (in_array($attachment->id, $this->attachments)) {
|
||||
$message->attach($attachment->getAbsolutePath(), [
|
||||
'mime' => $attachment->mime_type,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
|
@ -230,6 +230,7 @@ return [
|
||||
'go_back' => 'Go back to :type',
|
||||
'validation_error' => 'Validation error',
|
||||
'dismiss' => 'Dismiss',
|
||||
'size' => 'Size',
|
||||
|
||||
'card' => [
|
||||
'cards' => 'Card|Cards',
|
||||
|
@ -1,4 +1,19 @@
|
||||
<x-form id="form-email" :route="[$store_route, $invoice->id]">
|
||||
<x-tabs active="general" class="grid grid-cols-{{ $invoice->attachment ? '2' : '1' }}" override="class" ignore-hash>
|
||||
<x-slot name="navs">
|
||||
<x-tabs.nav id="general">
|
||||
{{ trans('general.general') }}
|
||||
</x-tabs.nav>
|
||||
|
||||
@if ($invoice->attachment)
|
||||
<x-tabs.nav id="attachments">
|
||||
{{ trans_choice('general.attachments', 2) }}
|
||||
</x-tabs.nav>
|
||||
@endif
|
||||
</x-slot>
|
||||
|
||||
<x-slot name="content">
|
||||
<x-tabs.tab id="general">
|
||||
<x-form.section>
|
||||
<x-slot name="body">
|
||||
<x-form.group.text name="to" label="{{ trans('general.to') }}" value="{{ $invoice->contact->email }}" form-group-class="sm:col-span-6" />
|
||||
@ -12,4 +27,65 @@
|
||||
<x-form.input.hidden name="document_id" :value="$invoice->id" />
|
||||
</x-slot>
|
||||
</x-form.section>
|
||||
</x-tabs.tab>
|
||||
|
||||
@if ($invoice->attachment)
|
||||
<x-tabs.tab id="attachments">
|
||||
<x-table>
|
||||
<x-table.thead>
|
||||
<x-table.tr class="flex items-center px-1">
|
||||
<x-table.th class="w-1/12">
|
||||
</x-table.th>
|
||||
|
||||
<x-table.th class="w-1/6">
|
||||
</x-table.th>
|
||||
|
||||
<x-table.th class="w-4/6">
|
||||
{{ trans('general.name') }}
|
||||
</x-table.th>
|
||||
|
||||
<x-table.th class="w-1/6">
|
||||
{{ trans('general.size') }}
|
||||
</x-table.th>
|
||||
</x-table.tr>
|
||||
</x-table.thead>
|
||||
|
||||
<x-table.tbody>
|
||||
@foreach($invoice->attachment as $attachment)
|
||||
<x-table.tr id="method-{{ $attachment->id }}">
|
||||
<x-table.td class="w-1/12">
|
||||
<input type="checkbox"
|
||||
id="attachment-{{ $attachment->id }}"
|
||||
name="{{ $attachment->id }}"
|
||||
class="rounded-sm text-purple border-gray-300 cursor-pointer disabled:bg-gray-200 focus:outline-none focus:ring-transparent"
|
||||
data-field="attachments"
|
||||
@input="e => form.attachments[e.target.name] = e.target.checked | 0">
|
||||
</x-table.td>
|
||||
<x-table.td class="w-1/6">
|
||||
@if ($attachment->aggregate_type == 'image')
|
||||
<div class="avatar-attachment">
|
||||
<img src="{{ route('uploads.get', $attachment->id) }}" alt="{{ $attachment->basename }}" class="avatar-img h-full rounded object-cover">
|
||||
</div>
|
||||
@else
|
||||
<div class="avatar-attachment">
|
||||
<span class="material-icons text-base">attach_file</span>
|
||||
</div>
|
||||
@endif
|
||||
</x-table.td>
|
||||
|
||||
<x-table.td class="w-4/6">
|
||||
{{ $attachment->basename }}
|
||||
</x-table.td>
|
||||
|
||||
<x-table.td class="w-1/6">
|
||||
{{ $attachment->readableSize() }}
|
||||
</x-table.td>
|
||||
</x-table.tr>
|
||||
@endforeach
|
||||
</x-table.tbody>
|
||||
</x-table>
|
||||
</x-tabs.tab>
|
||||
@endif
|
||||
</x-slot>
|
||||
</x-tabs>
|
||||
</x-form>
|
||||
|
Loading…
x
Reference in New Issue
Block a user