Blocco 2 - Esiti delle azioni Livewire come avvisi (trait Avvisa) invece di flash che comparivano alla pagina dopo. - PDF, miniature e versioni dei territori non più serviti da nginx su /storage: TerritorioFileController con login, permessi e cache privata. - Ripristino tutto o niente: verifica dell'archivio, una transazione con import, piantine, blocco account e scambio dei file annullabile. - Backup formato 2 con piantine, storico PDF e area KML. - Posto unico preso in un passo (Cache::lock) e rispettato anche da import XML e PDF. - Import PDF da cartella: abbinamento corretto (1-A, 12 B, ambigui), caricamento a lotti, file non PDF ignorati, PDF sostituito nello storico. - L'import XML elimina i file dei territori che non usa più; comando territori:file-orfani per quelli accumulati prima. Blocco 3 - Password attuale richiesta al cambio volontario; AuthenticateSession chiude le sessioni aperte altrove. - Niente nomi dei proclamatori in chiaro nel registro attività. - Export XML senza remember_token; chi riceve l'hash dal file deve cambiare password. - Campagne: ultimo giorno incluso, percentuale sui territori distinti. - Coda: retry_after 960 s, stop_grace_period 16m, Redis volatile-lru, impostazioni rilette a ogni job. - Azzeramento che cancella anche piantine, area KML e anteprime. - Pulsanti profilo e menu che non si nascondevano; icona del sito. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
82 lines
2.4 KiB
PHP
82 lines
2.4 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="it">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Link scaduto — TerManager2</title>
|
|
<link rel="icon" href="{{ asset('favicon.svg') }}" type="image/svg+xml">
|
|
<style>
|
|
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
body {
|
|
font-family: system-ui, -apple-system, sans-serif;
|
|
background: #f1f5f9;
|
|
min-height: 100dvh;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 24px;
|
|
}
|
|
.card {
|
|
background: #fff;
|
|
border-radius: 16px;
|
|
box-shadow: 0 4px 24px rgba(0,0,0,.08);
|
|
padding: 40px 32px;
|
|
max-width: 420px;
|
|
width: 100%;
|
|
text-align: center;
|
|
}
|
|
.icon {
|
|
width: 56px;
|
|
height: 56px;
|
|
background: #fef2f2;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin: 0 auto 20px;
|
|
}
|
|
h1 {
|
|
font-size: 20px;
|
|
font-weight: 700;
|
|
color: #111827;
|
|
margin-bottom: 10px;
|
|
}
|
|
p {
|
|
font-size: 14px;
|
|
color: #6b7280;
|
|
line-height: 1.6;
|
|
}
|
|
.territory {
|
|
display: inline-block;
|
|
margin-top: 16px;
|
|
background: #f3f4f6;
|
|
border-radius: 8px;
|
|
padding: 8px 16px;
|
|
font-size: 13px;
|
|
color: #374151;
|
|
font-weight: 600;
|
|
}
|
|
.footer {
|
|
margin-top: 28px;
|
|
font-size: 12px;
|
|
color: #9ca3af;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="card">
|
|
<div class="icon">
|
|
<svg width="26" height="26" fill="none" viewBox="0 0 24 24" stroke="#ef4444" stroke-width="2">
|
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
</svg>
|
|
</div>
|
|
<h1>Link scaduto</h1>
|
|
<p>Il link per questo territorio non è più valido.<br>Contatta il responsabile dei territori per ricevere un nuovo link.</p>
|
|
@if($numero)
|
|
<span class="territory">Territorio N° {{ $numero }}</span>
|
|
@endif
|
|
<p class="footer">TerManager2</p>
|
|
</div>
|
|
</body>
|
|
</html>
|