Initial commit
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user