4.7 KiB
4.7 KiB
🧠 MEMORY.md — Stato Progetto
Goal
- Correggere tutti i bug critici identificati nell'applicazione Glastree, a partire dal bug segnalato "rimuovendo un individuo da un gruppo, l'individuo perdeva tutti i contatti"
Constraints & Preferences
- Laravel 13, PHP 8.4, AdminLTE 4, MySQL/MariaDB
- Zero placeholder, zero TODO, codice funzionante
- Compatibilità cross-DB MySQL ↔ SQLite
Progress
Done
- Cancellata cache Laravel (
php artisan optimize:clear) - Fix BUG CRITICO 3 –
IndividuoController::update()(riga 216): avvolto$individuo->contatti()->delete()dentroif ($request->has('contatti')). Se il request non contiene il campocontatti(es. submit da form annidato), i contatti NON vengono eliminati. - Fix BUG CRITICO 1 –
individui/edit.blade.php: convertiti 4 form annidati in pulsantitype="button"+fetch()AJAX:- Linea 235-240: rimozione gruppo →
deleteGruppoFromEdit() - Linea 245-267: modifica gruppo inline →
submitEditGruppo() - Linea 291-319: upload documento →
submitUploadDocumentoIndividuo() - Linea 350-355: eliminazione documento →
deleteDocumentoFromEdit()
- Linea 235-240: rimozione gruppo →
- Fix BUG CRITICO 2 –
gruppi/edit.blade.php: convertiti 3 form annidati in pulsantitype="button"+fetch()AJAX:- Linea 155-180: modifica membro inline →
submitEditMembro() - Linea 204-231: upload documento →
submitUploadDocumentoGruppo() - Linea 261-266: eliminazione documento →
deleteDocumentoFromEdit()
- Linea 155-180: modifica membro inline →
- Fix BUG CRITICO 4 –
gruppi/show.blade.php: spostati i flash messages (session success/error) DENTRO@section('content')invece di essere fuori (non venivano mai visualizzati) - Fix BUG CRITICO 5 –
eventi/show.blade.php: rimossi 2 tag</div>extra alle linee 214-217 che rompevano la struttura HTML - Fix BUG CRITICO 6 –
eventi/show.blade.php: escape JS di$evento->nome_eventonellaconfirm()(riga 307) per prevenire stored XSS - Fix BUG CRITICO 7 –
ImpostazioniController.php: aggiuntouse App\Models\Documento;mancante (causava Fatal error insaveAppSettings()emigrateStoragePath()) - Fix BUG CRITICO 8 –
ImpostazioniController.php: sostituitoJSON_CONTAINS()(non supportato da SQLite) con iterazione PHP sujson_decode()— compatibile MySQL e SQLite - Fix BUG CRITICO 9 –
ReportController.php: corretto$contatto->email→$contatto->valore(riga 605, colonnaemailnon esiste) - Fix BUG CRITICO 10 –
DocumentoController.php: prevenuta morph injection inmassUpdate()sostituendo il fallback?? $data['visibilita_target_type']con unisset()check sul typeMap +return back()->with('error')se il tipo non è valido
In Progress
- (nessuno)
Blocked
- (nessuno)
Key Decisions
- Per i form annidati si è scelto l'approccio
type="button"+fetch()AJAX, già utilizzato inindividui/show.blade.phpegruppi/edit.blade.phpper funzioni esistenti (deleteMembro,submitGruppoForm,uploadAvatar, etc.) - Per documenti (upload/delete) il controller torna
redirect(), non JSON. Le funzioni AJAX eseguonowindow.location.reload()dopo il fetch per aggiornare la vista. JSON_CONTAINSsostituito con approccio PHP+json_decode per garantire compatibilità SQLite senza modificare lo schema DB.$request->has('contatti')è la guardia corretta: se il form principale non invia il campocontatti(perché il submit proviene da un form annidato), non si cancella nulla.
Next Steps
- (nessuno) - Tutti i bug critici risolti
Critical Context
- CAUSA DEL BUG SEGNALATO: I form annidati in
individui/edit.blade.phpfacevano sì che il browser ignorasse i form interni. I pulsanti "Rimuovi" inviavano il form principale →IndividuoController::update()→$individuo->contatti()->delete()incondizionato. - Tutti i 10 bug critici sono stati risolti
- I controller di rimozione membro (
GruppoMembroController::destroy()eGruppoIndividuoController::destroy()) usano giàdetach()correttamente — nessun problema lato backend
Relevant Files
app/Http/Controllers/IndividuoController.php: Fix BUG 3 – contatti condizionaleapp/Http/Controllers/ImpostazioniController.php: Fix BUG 7 (use Documento) + BUG 8 (JSON_CONTAINS → PHP)app/Http/Controllers/ReportController.php: Fix BUG 9 (email → valore)app/Http/Controllers/DocumentoController.php: Fix BUG 10 (morph injection prevention)resources/views/individui/edit.blade.php: Fix BUG 1 (4 nested forms → AJAX)resources/views/gruppi/edit.blade.php: Fix BUG 2 (3 nested forms → AJAX)resources/views/gruppi/show.blade.php: Fix BUG 4 (flash inside @section)resources/views/eventi/show.blade.php: Fix BUG 5 (extra divs) + BUG 6 (XSS escape)