Files
kopalnia_2026/app/Services/EquipmentFileService.php
T
2026-09-03 12:21:17 +02:00

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);
}
}