59 lines
2.3 KiB
PHP
59 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\EquipmentFile;
|
|
use Illuminate\Http\UploadedFile;
|
|
use Illuminate\Support\Carbon;
|
|
|
|
/**
|
|
* Zapis załączników wyposażenia jako BLOB w seg_equipments_files (legacy site206).
|
|
* Na jedno wyposażenie przypada max jeden plik danej roli (pierwszy człon MIME):
|
|
* 'application' = dokumentacja katalogowa, 'image' = zdjęcie. Wgranie nowego
|
|
* pliku tej samej roli zastępuje poprzedni - jak legacy.
|
|
*/
|
|
class EquipmentFileService
|
|
{
|
|
/** Zapisuje (zastępując plik tej samej roli) załącznik wyposażenia. */
|
|
public function store(int $equId, UploadedFile $file, string $user): void
|
|
{
|
|
$mime = $file->getMimeType() ?: ($file->getClientMimeType() ?: 'application/octet-stream');
|
|
$role = strtolower(strtok($mime, '/')); // 'application' | 'image' | ...
|
|
|
|
// Usuń dotychczasowy plik tej roli (legacy trzymał 1 kartę + 1 zdjęcie).
|
|
EquipmentFile::on('softspm')
|
|
->where('EQF_EQU_ID', $equId)
|
|
->whereRaw("lower(substring_index(EQF_FILE_TYPE, '/', 1)) = ?", [$role])
|
|
->delete();
|
|
|
|
EquipmentFile::create([
|
|
'EQF_EQU_ID' => $equId,
|
|
'EQF_FILE' => $file->getContent(),
|
|
'EQF_FILE_TYPE' => $mime,
|
|
'EQF_FILE_SIZE' => (string) $file->getSize(),
|
|
'EQF_FILE_NAME' => $this->sanitize($file->getClientOriginalName()),
|
|
'EQF_STATUS' => '1',
|
|
'EQF_AUDIT_CU' => $user,
|
|
'EQF_AUDIT_CD' => Carbon::now()->toDateTimeString(),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Czyszczenie nazwy pliku jak legacy delPolishAndBlankCharactersFromFileName:
|
|
* polskie znaki -> ASCII, spacje/myślniki -> '_', usunięcie znaków
|
|
* specjalnych, małe litery. Zachowuje kropkę (rozszerzenie). Limit 128 zn.
|
|
*/
|
|
public function sanitize(string $name): string
|
|
{
|
|
$map = [
|
|
'ą'=>'a','ż'=>'z','ź'=>'z','ć'=>'c','ś'=>'s','ę'=>'e','ó'=>'o','ł'=>'l','ń'=>'n',
|
|
'Ą'=>'a','Ż'=>'z','Ź'=>'z','Ć'=>'c','Ś'=>'s','Ę'=>'e','Ó'=>'o','Ł'=>'l','Ń'=>'n',
|
|
];
|
|
$val = strtr($name, $map);
|
|
$val = str_replace([' ', '-'], '_', $val);
|
|
$val = preg_replace('/[^A-Za-z0-9._]/', '', $val);
|
|
|
|
return substr(strtolower($val), 0, 128);
|
|
}
|
|
}
|