++ proclamatori senza email e telefono; il link si copia o si condivide

- Migrazione: tolte le colonne email e telefono dei proclamatori (vuote
  in produzione). Tolti da form, scheda, elenco, XML (un file vecchio si
  importa ignorandoli).
- Invio del link: solo "Copia link" e "Condividi…" (menu di condivisione
  del telefono, navigator.share): il destinatario lo sceglie chi usa
  l'app. Via WhatsApp diretto, canale email, notifica LinkTerritorio,
  componente x-whatsapp.
- Elenco assegnati: "Condividi" al posto di WhatsApp; a condivisione
  fatta il link risulta inviato.
- Informativa privacy, README, HANDOFF e test aggiornati.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Francesco Picone
2026-10-19 16:57:23 +02:00
parent 3000ca9939
commit 7384a4b39d
25 changed files with 436 additions and 674 deletions

View File

@@ -13,8 +13,6 @@ class ProclamatoreCreate extends Component
public string $nome = '';
public string $cognome = '';
public bool $attivo = true;
public string $email = '';
public string $telefono = '';
protected function rules(): array
{
@@ -22,17 +20,6 @@ class ProclamatoreCreate extends Component
'nome' => 'required|string|max:100',
'cognome' => 'required|string|max:100',
'attivo' => 'boolean',
// Facoltativi: si controlla il formato solo se compilati.
'email' => 'nullable|email|max:255',
'telefono' => ['nullable', 'string', 'max:30', 'regex:/^\+?[0-9 ().\/-]{6,25}$/'],
];
}
protected function messages(): array
{
return [
'email.email' => "L'indirizzo email non è valido (puoi anche lasciarlo vuoto).",
'telefono.regex' => 'Il numero può contenere solo cifre, spazi e un "+" iniziale (puoi anche lasciarlo vuoto).',
];
}
@@ -46,8 +33,6 @@ class ProclamatoreCreate extends Component
'nome' => $this->nome,
'cognome' => $this->cognome,
'attivo' => $this->attivo,
'email' => trim($this->email) ?: null,
'telefono' => trim($this->telefono) ?: null,
]);
activity()->causedBy(auth()->user())

View File

@@ -14,8 +14,6 @@ class ProclamatoreEdit extends Component
public string $nome = '';
public string $cognome = '';
public bool $attivo = true;
public string $email = '';
public string $telefono = '';
public function mount(Proclamatore $proclamatore)
{
@@ -23,8 +21,6 @@ class ProclamatoreEdit extends Component
$this->nome = $proclamatore->nome;
$this->cognome = $proclamatore->cognome;
$this->attivo = $proclamatore->attivo;
$this->email = (string) $proclamatore->email;
$this->telefono = (string) $proclamatore->telefono;
}
protected function rules(): array
@@ -33,17 +29,6 @@ class ProclamatoreEdit extends Component
'nome' => 'required|string|max:100',
'cognome' => 'required|string|max:100',
'attivo' => 'boolean',
// Facoltativi: si controlla il formato solo se compilati.
'email' => 'nullable|email|max:255',
'telefono' => ['nullable', 'string', 'max:30', 'regex:/^\+?[0-9 ().\/-]{6,25}$/'],
];
}
protected function messages(): array
{
return [
'email.email' => "L'indirizzo email non è valido (puoi anche lasciarlo vuoto).",
'telefono.regex' => 'Il numero può contenere solo cifre, spazi e un "+" iniziale (puoi anche lasciarlo vuoto).',
];
}
@@ -57,8 +42,6 @@ class ProclamatoreEdit extends Component
'nome' => $this->nome,
'cognome' => $this->cognome,
'attivo' => $this->attivo,
'email' => trim($this->email) ?: null,
'telefono' => trim($this->telefono) ?: null,
]);
session()->flash('success', "Proclamatore {$this->proclamatore->nome_completo} aggiornato.");