Files
glastree/MEMORY.md
T
2026-06-02 20:29:47 +02:00

61 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🧠 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()` dentro `if ($request->has('contatti'))`. Se il request non contiene il campo `contatti` (es. submit da form annidato), i contatti NON vengono eliminati.
- **Fix BUG CRITICO 1** `individui/edit.blade.php`: convertiti 4 form annidati in pulsanti `type="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()`
- **Fix BUG CRITICO 2** `gruppi/edit.blade.php`: convertiti 3 form annidati in pulsanti `type="button"` + `fetch()` AJAX:
- Linea 155-180: modifica membro inline → `submitEditMembro()`
- Linea 204-231: upload documento → `submitUploadDocumentoGruppo()`
- Linea 261-266: eliminazione documento → `deleteDocumentoFromEdit()`
- **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_evento` nella `confirm()` (riga 307) per prevenire stored XSS
- **Fix BUG CRITICO 7** `ImpostazioniController.php`: aggiunto `use App\Models\Documento;` mancante (causava Fatal error in `saveAppSettings()` e `migrateStoragePath()`)
- **Fix BUG CRITICO 8** `ImpostazioniController.php`: sostituito `JSON_CONTAINS()` (non supportato da SQLite) con iterazione PHP su `json_decode()` — compatibile MySQL e SQLite
- **Fix BUG CRITICO 9** `ReportController.php`: corretto `$contatto->email``$contatto->valore` (riga 605, colonna `email` non esiste)
- **Fix BUG CRITICO 10** `DocumentoController.php`: prevenuta morph injection in `massUpdate()` sostituendo il fallback `?? $data['visibilita_target_type']` con un `isset()` 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 in `individui/show.blade.php` e `gruppi/edit.blade.php` per funzioni esistenti (`deleteMembro`, `submitGruppoForm`, `uploadAvatar`, etc.)
- Per documenti (upload/delete) il controller torna `redirect()`, non JSON. Le funzioni AJAX eseguono `window.location.reload()` dopo il fetch per aggiornare la vista.
- `JSON_CONTAINS` sostituito 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 campo `contatti` (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.php` facevano 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()` e `GruppoIndividuoController::destroy()`) usano già `detach()` correttamente — nessun problema lato backend
## Relevant Files
- `app/Http/Controllers/IndividuoController.php`: Fix BUG 3 contatti condizionale
- `app/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)