114 lines
2.4 KiB
PHP
114 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Enums\MediaDiskEnum;
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class Medium extends Model
|
|
{
|
|
use HasFactory;
|
|
protected $fillable = [
|
|
'filename',
|
|
'disk',
|
|
'path',
|
|
'size',
|
|
'url',
|
|
'mime_type'
|
|
];
|
|
|
|
protected $casts = [
|
|
'disk' => MediaDiskEnum::class,
|
|
];
|
|
|
|
public function getFullUrlAttribute()
|
|
{
|
|
if ($this->disk === MediaDiskEnum::Public) {
|
|
return Storage::disk('public')->path($this->path);
|
|
}elseif($this->disk === MediaDiskEnum::Private){
|
|
return Storage::disk('private')->path($this->path);
|
|
}
|
|
|
|
return $this->url ?? null;
|
|
}
|
|
|
|
public function getStorageDisk()
|
|
{
|
|
return Storage::disk($this->disk?->value ?? 'public');
|
|
}
|
|
|
|
public function exists()
|
|
{
|
|
return $this->getStorageDisk()->exists($this->path);
|
|
}
|
|
|
|
public function getContents()
|
|
{
|
|
return $this->getStorageDisk()->get($this->path);
|
|
}
|
|
|
|
public function deleteFile()
|
|
{
|
|
if ($this->exists()) {
|
|
return $this->getStorageDisk()->delete($this->path);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function getHumanSizeAttribute()
|
|
{
|
|
$bytes = $this->size;
|
|
$units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
|
|
for ($i = 0; $bytes > 1024 && $i < count($units) - 1; $i++) {
|
|
$bytes /= 1024;
|
|
}
|
|
|
|
return round($bytes, 2) . ' ' . $units[$i];
|
|
}
|
|
|
|
public function isPublic()
|
|
{
|
|
return $this->disk === MediaDiskEnum::Public;
|
|
}
|
|
|
|
public function isPrivate()
|
|
{
|
|
return $this->disk === MediaDiskEnum::Private;
|
|
}
|
|
|
|
public function assignments()
|
|
{
|
|
return $this->hasMany(MediaAssignment::class , 'media_id' , 'id');
|
|
}
|
|
|
|
public function reports()
|
|
{
|
|
return $this->morphedByMany(
|
|
\App\Models\Report::class,
|
|
'mediable',
|
|
'media_assignments',
|
|
'media_id',
|
|
'mediable_id'
|
|
);
|
|
}
|
|
|
|
public function documents()
|
|
{
|
|
return $this->morphedByMany(
|
|
\App\Models\Document::class,
|
|
'mediable',
|
|
'media_assignments',
|
|
'media_id',
|
|
'mediable_id'
|
|
);
|
|
}
|
|
|
|
public function users()
|
|
{
|
|
return $this->hasMany(User::class , 'media_id' , 'id');
|
|
}
|
|
}
|