diff --git a/laravel_app/app/Livewire/Project/ReportRow.php b/laravel_app/app/Livewire/Project/ReportRow.php index 73acf79..111e3c8 100644 --- a/laravel_app/app/Livewire/Project/ReportRow.php +++ b/laravel_app/app/Livewire/Project/ReportRow.php @@ -35,6 +35,5 @@ public function download() public function createMailing() { $this->mailingForm->save(); $this->reset('createMailingModal'); - } } diff --git a/laravel_app/app/Mail/ReportMailer.php b/laravel_app/app/Mail/ReportMailer.php index f2c0bef..e099a10 100644 --- a/laravel_app/app/Mail/ReportMailer.php +++ b/laravel_app/app/Mail/ReportMailer.php @@ -2,23 +2,30 @@ namespace App\Mail; +use App\Models\ProjectMailing; +use App\Models\ProjectMailingAttachment; +use App\Models\ProjectMosaic; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; +use Illuminate\Mail\Mailables\Attachment; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; +use Illuminate\Support\Facades\Storage; class ReportMailer extends Mailable { use Queueable, SerializesModels; + public ProjectMailing $mailing; + /** * Create a new message instance. */ - public function __construct() + public function __construct(ProjectMailing $mailing) { - // + $this->mailing = $mailing; } /** @@ -27,7 +34,7 @@ public function __construct() public function envelope(): Envelope { return new Envelope( - subject: 'Report Mailer', + subject: $this->mailing->subject, ); } @@ -37,9 +44,15 @@ public function envelope(): Envelope public function content(): Content { return new Content( - view: 'view.name', + htmlString: $this->mailing->message, ); } + public function build(): self + { + $this->to($this->mailing->recipients()->pluck('email')->toArray()); + + return $this; + } /** * Get the attachments for the message. @@ -48,6 +61,14 @@ public function content(): Content */ public function attachments(): array { - return []; + return $this->mailing->attachments()->get()->map(function (ProjectMailingAttachment $attachment) { + $projectPath = $attachment->mailing()->project()->first()->path; + + return Attachment::fromStorage( + path: $projectPath.$attachment->path + ) + ->as($attachment->name) + ->withMime('application/pdf'); + })->toArray(); } } diff --git a/laravel_app/app/Models/ProjectMailing.php b/laravel_app/app/Models/ProjectMailing.php index 89f7e6b..161b055 100644 --- a/laravel_app/app/Models/ProjectMailing.php +++ b/laravel_app/app/Models/ProjectMailing.php @@ -17,12 +17,19 @@ class ProjectMailing extends Model 'message', ]; + protected static function booted() + { + static::created(function ($projectMailing) { + Mail::send(new \App\Mail\ReportMailer($projectMailing)); + }); + } + public function addAttachment($name, UploadedFile $file) { $prefix = Str::random(10); $originalFileName = $file->getClientOriginalName(); $extension = pathinfo($originalFileName, PATHINFO_EXTENSION); - $newFileName = $prefix . '_' . pathinfo($originalFileName, PATHINFO_FILENAME) . '.' . $extension; + $newFileName = $prefix.'_'.pathinfo($originalFileName, PATHINFO_FILENAME).'.'.$extension; $path = Storage::disk('local')->putFileAs( $this->project->attachmentPath, $file, $newFileName diff --git a/laravel_app/app/Models/ProjectMailingAttachment.php b/laravel_app/app/Models/ProjectMailingAttachment.php index 1c1e4c1..2303fdb 100644 --- a/laravel_app/app/Models/ProjectMailingAttachment.php +++ b/laravel_app/app/Models/ProjectMailingAttachment.php @@ -13,4 +13,9 @@ class ProjectMailingAttachment extends Model 'name', 'path', ]; + + public function mailing() + { + return $this->belongsTo(ProjectMailing::class); + } } diff --git a/laravel_app/resources/views/livewire/project/report-row.blade.php b/laravel_app/resources/views/livewire/project/report-row.blade.php index 15d768b..87eecf3 100644 --- a/laravel_app/resources/views/livewire/project/report-row.blade.php +++ b/laravel_app/resources/views/livewire/project/report-row.blade.php @@ -22,7 +22,6 @@ -