- /richiesta: modulo pubblico (nuovo territorio o riconsegna) con campo trappola, tempo minimo e limite orario; nome e note cifrati, avviso per email a chi ha richieste.gestisci (amministratore, assistente) - Home: riquadro Richieste con i proclamatori dal nome simile; porta su Assegna/Rientra già esistenti, che chiudono la richiesta; Scarta - Cartaceo sull'assegnazione (Assegna e Il mio gruppo), etichetta nell'elenco degli assegnati, pagina Cartacei, passa per l'XML - registro:invia-s13 agli amministratori l'ultima domenica del mese; richieste:pulizia dopo 90 giorni dalla gestione - Privacy, README e HANDOFF aggiornati; test in RichiesteTest Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
91 lines
4.0 KiB
PHP
91 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire;
|
|
|
|
use App\Models\Assegnazione;
|
|
use App\Models\Proclamatore;
|
|
use App\Models\Richiesta;
|
|
use App\Models\Setting;
|
|
use App\Models\User;
|
|
use App\Services\ConfigurazionePosta;
|
|
use Livewire\Component;
|
|
use Spatie\Activitylog\Models\Activity;
|
|
use Spatie\Permission\Models\Role;
|
|
|
|
/**
|
|
* Informativa privacy (solo amministratore).
|
|
*
|
|
* Tutto ciò che può cambiare si legge qui, al momento: impostazioni
|
|
* (congregazione, conservazione del log, scadenza dei link, download del
|
|
* PDF, server di posta), configurazione (indirizzo, cifratura, durata della
|
|
* sessione), ruoli con i loro permessi reali e quanti dati sono conservati.
|
|
* Il testo resta nella vista; i numeri non vanno mai scritti a mano.
|
|
*/
|
|
class Privacy extends Component
|
|
{
|
|
/** Data dell'ultima revisione del testo dell'informativa. */
|
|
public const REVISIONE = '21 ottobre 2026';
|
|
|
|
/** I permessi spiegati a chi legge l'informativa. */
|
|
public const PERMESSI = [
|
|
'settings.manage' => 'impostazioni, utenti, backup e import',
|
|
'proclamatori.manage' => 'anagrafica dei proclamatori',
|
|
'gruppo.gestisci' => 'solo il proprio gruppo di servizio: i territori del pacchetto e i membri del gruppo',
|
|
'territori.manage' => 'gestione dei territori e delle piantine',
|
|
'campagne.manage' => 'campagne',
|
|
'registro.view' => 'consultazione del registro delle assegnazioni',
|
|
'registro.export' => 'esportazione del registro',
|
|
'territori.assign' => 'assegnazione dei territori',
|
|
'territori.return' => 'rientro dei territori',
|
|
'richieste.gestisci' => 'richieste arrivate dal modulo pubblico (nuovo territorio o riconsegna)',
|
|
'audit.view' => 'consultazione del registro delle attività',
|
|
'audit.export' => 'esportazione del registro delle attività',
|
|
];
|
|
|
|
public function render()
|
|
{
|
|
$impostazioni = Setting::instance();
|
|
$posta = app(ConfigurazionePosta::class);
|
|
|
|
$hostPosta = $posta->configurataNellApp()
|
|
? (string) $impostazioni->mail_host
|
|
: (string) config('mail.mailers.smtp.host');
|
|
|
|
$indirizzo = (string) config('app.url');
|
|
|
|
return view('livewire.privacy', [
|
|
'revisione' => self::REVISIONE,
|
|
'congregazione' => $impostazioni->congregazione_nome ?: 'Congregazione',
|
|
'indirizzo' => $indirizzo,
|
|
'https' => str_starts_with($indirizzo, 'https://'),
|
|
'cifratura' => (string) config('app.cipher'),
|
|
'durataSessione' => (int) config('session.lifetime'),
|
|
'auditRetention' => (int) ($impostazioni->audit_retention_days ?: 365),
|
|
'scadenzaLink' => max(1, (int) ($impostazioni->giorni_per_smarrito ?: 120)),
|
|
'downloadPdf' => (bool) $impostazioni->pdf_viewer_show_download,
|
|
'postaAttiva' => $posta->funzionante(),
|
|
'hostPosta' => $hostPosta !== '' ? $hostPosta : null,
|
|
'ruoli' => Role::with('permissions')->orderBy('name')->get()->map(fn (Role $r) => [
|
|
'nome' => $r->name,
|
|
'permessi' => $r->permissions->pluck('name')
|
|
->map(fn ($p) => self::PERMESSI[$p] ?? $p)
|
|
->all(),
|
|
]),
|
|
// Quanti dati sono conservati adesso: solo conteggi, contati in
|
|
// SQL, senza decifrare né mostrare nomi.
|
|
'conteggi' => [
|
|
'proclamatori' => Proclamatore::count(),
|
|
'proclamatoriAttivi' => Proclamatore::where('attivo', true)->count(),
|
|
'anonimizzati' => Proclamatore::onlyTrashed()->count(),
|
|
'utenti' => User::count(),
|
|
'assegnazioni' => Assegnazione::count(),
|
|
'assegnazioniAperte' => Assegnazione::aperte()->count(),
|
|
'richieste' => Richiesta::count(),
|
|
'richiesteAperte' => Richiesta::aperte()->count(),
|
|
'attivita' => Activity::count(),
|
|
'attivitaDal' => Activity::min('created_at'),
|
|
],
|
|
]);
|
|
}
|
|
}
|