SmartCane/laravel_app/app/Models/ProjectMailing.php

67 lines
1.6 KiB
PHP

<?php
namespace App\Models;
use App\Traits\HasStatus;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;
use Str;
class ProjectMailing extends Model
{
use HasFactory;
use HasStatus;
protected $fillable = [
'subject',
'message',
];
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;
$path = Storage::disk('local')->putFileAs(
$this->project->attachmentPath, $file, $newFileName
);
$this->attachments()->save(new ProjectMailingAttachment([
'name' => $name,
'path' => $path
]));
}
public function project()
{
return $this->belongsTo(Project::class, 'project_id', 'id');
}
public function recipients()
{
return $this->hasMany(ProjectMailingRecipient::class);
}
public function attachments()
{
return $this->hasMany(ProjectMailingAttachment::class);
}
protected function subject(): Attribute
{
return Attribute::make(
set: function ($value) {
return str_replace(['{date}'], [now()->toDateString()], $value);
}
);
}
}