102 lines
2.8 KiB
PHP
102 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Support;
|
|
|
|
use App\Models\Amministratore;
|
|
use App\Models\Fornitore;
|
|
use App\Models\Stabile;
|
|
use App\Models\User;
|
|
|
|
class ArchivioPaths
|
|
{
|
|
private static function sanitizeFolder(string $value): string
|
|
{
|
|
$value = trim($value);
|
|
if ($value === '') {
|
|
return '';
|
|
}
|
|
|
|
$value = preg_replace('/[^A-Za-z0-9._-]+/', '-', $value) ?? '';
|
|
return trim($value, '-');
|
|
}
|
|
|
|
public static function adminBase(Amministratore|string $admin): string
|
|
{
|
|
$code = $admin instanceof Amministratore
|
|
? (string) ($admin->codice_univoco ?: $admin->codice_amministratore ?: '')
|
|
: (string) $admin;
|
|
|
|
$code = self::sanitizeFolder($code);
|
|
if ($code === '') {
|
|
$code = 'ID-0';
|
|
}
|
|
|
|
return 'amministratori/' . $code;
|
|
}
|
|
|
|
public static function stabileFolderName(Stabile $stabile, ?Amministratore $admin = null): ?string
|
|
{
|
|
$admin = $admin ?: $stabile->amministratore;
|
|
if (! $admin instanceof Amministratore) {
|
|
return null;
|
|
}
|
|
|
|
$stabileCode = self::sanitizeFolder((string) ($stabile->codice_univoco ?: $stabile->codice_stabile ?: ''));
|
|
|
|
if ($stabileCode === '') {
|
|
return null;
|
|
}
|
|
|
|
// Nota: l'archivio dello stabile è già sotto /amministratori/<ADMIN>/,
|
|
// quindi replicare <ADMIN>-<STABILE> è ridondante.
|
|
return $stabileCode;
|
|
}
|
|
|
|
public static function stabileBase(Stabile $stabile, ?Amministratore $admin = null): ?string
|
|
{
|
|
$admin = $admin ?: $stabile->amministratore;
|
|
if (! $admin instanceof Amministratore) {
|
|
return null;
|
|
}
|
|
|
|
$folder = self::stabileFolderName($stabile, $admin);
|
|
if (! is_string($folder) || $folder === '') {
|
|
return null;
|
|
}
|
|
|
|
return self::adminBase($admin) . '/stabili/' . $folder;
|
|
}
|
|
|
|
public static function fornitoreBase(Fornitore $fornitore, ?Amministratore $admin = null): ?string
|
|
{
|
|
$code = (string) ($fornitore->codice_univoco ?: '');
|
|
$code = self::sanitizeFolder($code);
|
|
if ($code === '') {
|
|
return null;
|
|
}
|
|
|
|
$admin = $admin ?: $fornitore->amministratore;
|
|
if (! $admin instanceof Amministratore) {
|
|
return null;
|
|
}
|
|
|
|
return self::adminBase($admin) . '/fornitori/' . $code;
|
|
}
|
|
|
|
public static function userBase(User $user, ?Amministratore $admin = null): ?string
|
|
{
|
|
$code = (string) ($user->codice_univoco ?: '');
|
|
$code = self::sanitizeFolder($code);
|
|
if ($code === '') {
|
|
return null;
|
|
}
|
|
|
|
$admin = $admin ?: $user->amministratoreOwner;
|
|
if (! $admin instanceof Amministratore) {
|
|
return null;
|
|
}
|
|
|
|
return self::adminBase($admin) . '/utenti/' . $code;
|
|
}
|
|
}
|