d2d.emegrendeles.hu/app/Models/Attachment.php
E98Developer 68b7c35bef git init
2026-02-28 06:53:05 +01:00

141 lines
4.0 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Http\UploadedFile;
/**
* @property false|mixed|string path
* @property false|mixed|string mimetype
* @property false|int|mixed size
* @property false|mixed|string original_filename
* @property mixed|string filename
* @property int id
* @property string attachType
*/
class Attachment extends BaseAuditable
{
protected $appends = ['PublicUrl'];
public function attachable(): MorphTo
{
return $this->morphTo();
}
public function addStreamedFile($stream = null, $fileName = null)
{
$temp = tmpfile();
fwrite($temp, $stream);
$acceptedMime = [
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'xlsx',
'application/pdf' => 'pdf',
];
$this->mimetype = mime_content_type($temp);
$this->size = filesize(stream_get_meta_data($temp)['uri']);
fclose($temp);
if (! array_key_exists($this->mimetype, $acceptedMime)) {
return false;
}
if ($fileName) {
$this->original_filename = $fileName;
}
$fileExt = $acceptedMime[$this->mimetype];
$this->filename = (string) \Str::orderedUuid().'.'.$fileExt;
$this->save();
$dir = sprintf('%010d', intval(floor($this->id / 1000)));
$this->path = DIRECTORY_SEPARATOR.$dir.DIRECTORY_SEPARATOR;
$fileNameWithPath = DIRECTORY_SEPARATOR.$dir.DIRECTORY_SEPARATOR.$this->filename;
\Storage::disk('attachments')->put($fileNameWithPath, $stream);
$this->save();
return $this->id;
/*
$attachment = new Attachment;
$attachment->addFile($file);
$attachment->attachable()->associate($customer);
$attachment->save();
*/
}
private function makeFilenameWithPath($fileExt = 'tmp'): string
{
return $this->getSavePath().DIRECTORY_SEPARATOR.$this->makeFileName($fileExt);
}
private function makeFileName($fileExt = 'tmp'): string
{
return (string) \Str::orderedUuid().'.'.$fileExt;
}
private function getSavePath(): string
{
return sprintf('%010d', intval(floor($this->id / 1000)));
}
public function addFile(UploadedFile $file): ?Attachment
{
if (isset($file) && $file && is_file($file)) {
$this->mimetype = $file->getMimeType();
$this->size = $file->getSize();
$this->filename = $this->makeFileName($file->extension());
$this->original_filename = $file->getClientOriginalName();
if (! $this->id) {
$this->save();
}
$this->path = $this->getSavePath();
\Storage::disk('attachments')->putFileAs($this->getSavePath(), $file, $this->filename);
$this->save();
return $this;
return $this;
$oldName = $file->getClientOriginalName();
$this->original_filename = $oldName;
$path = \Storage::disk('dev')->put('/', $file, ['name' => $oldName]);
$this->path = $path;
// \Storage::disk('dev')->download($path);
$this->filename = $file->getClientOriginalName();
}
return null;
}
public function removeFile()
{
try {
\Storage::disk('attachments')->delete($this->path.DIRECTORY_SEPARATOR.$this->filename); // false-al ter vissza sikeres torles eseten is
// var_dump('sikeres torles');
} catch (\Exception $e) {
return false;
}
return true;
}
public function delete()
{
if ($this->removeFile()) {
return parent::delete(); // TODO: Change the autogenerated stub
}
return false;
}
public function getPublicUrlAttribute(): string
{
return $this->getPublicUrl();
}
public function getPublicUrl()
{
return \Storage::disk('attachments')->url(str_replace('\\', '/', $this->path));
}
}