++ Modulo pubblico: nella riconsegna il territorio si sceglie con il completamento automatico

Elenco con solo numero e zona (territori attivi e quelli ancora fuori),
mostrato solo per la riconsegna; il server accetta solo un numero
dell'elenco. Privacy, README e HANDOFF aggiornati.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Francesco Picone
2026-10-21 17:49:08 +02:00
parent 2e1da51080
commit d198ad0b54
6 changed files with 96 additions and 15 deletions

View File

@@ -56,7 +56,7 @@ hanno dati da convertire.
| Sviluppo locale | ✅ stesso compose, profilo `dev` |
| Backup / ripristino / azzeramento | ✅ verificati end-to-end |
| Ripristino da browser in linea | ⚠️ **limitato a 100 MB da Cloudflare** — vedi [Cosa resta aperto](#cosa-resta-aperto) |
| Test automatici | ✅ **612 test PHP + 13 JavaScript, verdi** (21/10/2026); copertura ancora parziale |
| Test automatici | ✅ **613 test PHP + 13 JavaScript, verdi** (21/10/2026); copertura ancora parziale |
| Prove nel browser | ⚠️ le funzioni del 19-21 ottobre sono verificate dai test e sul server; nel browser le usa l'utente sulla demo (richieste, cartacei e S-13 non ancora provati da lui) |
La storia precedente (luglio-agosto: backup e ripristino, sotto-app Piantine,
@@ -76,8 +76,14 @@ Dal documento `_ARCHIVE/ATTIVITA sviluppo Territori Manager 2.0.docx`
- **Modulo pubblico** `/richiesta` (rotta `richiesta`, fuori dal login,
`throttle:60,1`; componente `Richieste\ModuloRichiesta`, layout guest):
nome e cognome, *nuovo territorio* o *riconsegna* (con numero), nota. Non
mostra dati esistenti. Anti-spam: campo trappola `sito` (classe
nome e cognome, *nuovo territorio* o *riconsegna* (con numero), nota.
Nella riconsegna il numero si sceglie con `<x-scelta>` (richiesta
dell'utente del 21/10: "il territorio fallo inserire con completamento
automatico"): opzioni con solo numero e zona, valore = numero; i territori
attivi più quelli disattivati ma ancora fuori; l'elenco va nella pagina
solo con *riconsegna* scelta. Il server accetta solo un numero di
quell'elenco (confronto senza maiuscole). Nessun altro dato esistente: né
nomi né stato delle assegnazioni. Anti-spam: campo trappola `sito` (classe
`.tm-trappola`), tempo minimo `SECONDI_MINIMI` = 3 s (in questi due casi
risponde "inviata" senza salvare), `MASSIMO_ORA` = 5 per IP (chiave del
RateLimiter con lo sha1 dell'IP). Il tempo si legge con `now()`, così i
@@ -1754,7 +1760,7 @@ blocchi che impedivano di scrivere il primo test sono stati rimossi: stage
docker compose --profile test run --build --rm test
```
**Coperto oggi — 612 test PHP e 13 JavaScript, tutti verdi (21/10/2026).**
**Coperto oggi — 613 test PHP e 13 JavaScript, tutti verdi (21/10/2026).**
Senza Docker in locale si fanno girare sul server: vedi [Dove gira
davvero](#dove-gira-davvero). I file storici, con cosa proteggono: