FleetCart/Modules/Media/Entities/File.php
2023-06-11 13:14:03 +01:00

109 lines
2.3 KiB
PHP

<?php
namespace Modules\Media\Entities;
use Modules\Media\IconResolver;
use Modules\User\Entities\User;
use Modules\Media\Admin\MediaTable;
use Modules\Support\Eloquent\Model;
use Illuminate\Support\Facades\Storage;
class File extends Model
{
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be visible in serialization.
*
* @var array
*/
protected $visible = ['id', 'filename', 'path'];
/**
* Perform any actions required after the model boots.
*
* @return void
*/
protected static function booted()
{
static::deleting(function ($file) {
Storage::disk($file->disk)->delete($file->getRawOriginal('path'));
});
}
/**
* Get the user that uploaded the file.
*
* @return void
*/
public function uploader()
{
return $this->belongsTo(User::class);
}
/**
* Get the file's path.
*
* @param string $path
* @return string|null
*/
public function getPathAttribute($path)
{
if (! is_null($path)) {
return Storage::disk($this->disk)->url($path);
}
}
/**
* Get file's real path.
*
* @return void
*/
public function realPath()
{
if (! is_null($this->attributes['path'])) {
return Storage::disk($this->disk)->path($this->attributes['path']);
}
}
/**
* Determine if the file type is image.
*
* @return bool
*/
public function isImage()
{
return strtok($this->mime, '/') === 'image';
}
/**
* Get the file's icon.
*
* @return string
*/
public function icon()
{
return IconResolver::resolve($this->mime);
}
/**
* Get table data for the resource
*
* @return \Illuminate\Http\JsonResponse
*/
public function table($request)
{
$query = $this->newQuery()
->when(! is_null($request->type) && $request->type !== 'null', function ($query) use ($request) {
$query->where('mime', 'LIKE', "{$request->type}/%");
});
return new MediaTable($query);
}
}