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

4.7 KiB
Raw Blame History

🧠 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)