netgescon-day0/app/Support/ArchivioPaths.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;
}
}