Files
glastree/MEMORY.md
T
2026-06-02 22:07:16 +02:00

4.6 KiB
Raw Blame History

🧠 MEMORY.md — Stato Progetto

Goal

  • Correggere tutti i bug critici identificati nell'applicazione Glastree
  • Implementare nuove funzionalità richieste: cancellazione account email, fix firma editor, sincronizzazione calendario con Google Calendar / CalDAV

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')).
  • Fix BUG CRITICO 1 individui/edit.blade.php: convertiti 4 form annidati in pulsanti type="button" + fetch() AJAX
  • Fix BUG CRITICO 2 gruppi/edit.blade.php: convertiti 3 form annidati in pulsanti type="button" + fetch() AJAX
  • Fix BUG CRITICO 4 gruppi/show.blade.php: flash messages spostati dentro @section('content')
  • Fix BUG CRITICO 5/6 eventi/show.blade.php: rimossi div extra, XSS escape in confirm()
  • Fix BUG CRITICO 7/8 ImpostazioniController.php: use Documento + JSON_CONTAINS → PHP
  • Fix BUG CRITICO 9 ReportController.php: $contatto->email$contatto->valore
  • Fix BUG CRITICO 10 DocumentoController.php: morph injection prevention in massUpdate()
  • NUOVA FEATURE Cancellazione account email: Aggiunto metodo destroy() in EmailSettingsController, rotta DELETE /impostazioni/email, pulsante "Elimina Configurazione" in entrambe le viste (admin dedicata e unificata)
  • FIX Doppia barra icone firma: Cambiata la guardia di createEditor() e initSignatureEditor() da container.querySelector('.ql-toolbar') (che non funziona perché Quill crea la toolbar come sibling, non child) a flag quillEditorInstance in entrambe le viste
  • NUOVA FEATURE Sincronizzazione calendario: Implementata sincronizzazione con Google Calendar e CalDAV (Infomaniak/NextCloud):
    • Migration create_calendario_connessioni_table + add_uid_esterno_to_eventi_table
    • Model CalendarioConnessione con encrypt/decrypt config
    • Service CalDavService (PROPFIND, REPORT, calendar-query, PUT)
    • Service GoogleCalendarSyncService (Google Calendar API v3)
    • Controller CalendarioConnessioneController (CRUD + test + sync + reorder)
    • Routes RESTful per calendario-connessioni
    • UI nella tab "Calendario" delle impostazioni unificate con tabella, modale CRUD, pulsanti test/sync/elimina, Sortable drag&drop
    • Installati pacchetti: sabre/vobject, google/apiclient

In Progress

  • (nessuno)

Blocked

  • (nessuno)

Key Decisions

  • Per i form annidati si è scelto l'approccio type="button" + fetch() AJAX
  • Per la cancellazione account email si usa EmailSetting::first()->delete() con verifica esistenza
  • Per il fix Quill: variabile flag quillEditorInstance invece di container.querySelector('.ql-toolbar') perché Quill inserisce .ql-toolbar come elemento sibling, non child
  • Per CalDAV: usato Guzzle (già in Laravel) per HTTP + sabre/vobject per parsing iCal
  • Per Google Calendar: usato google/apiclient con OAuth 2.0 (refresh token)
  • La sync può essere bidirezionale, solo import o solo export
  • I campi sensibili delle connessioni calendario sono criptati con Crypt

Next Steps

  • (nessuno)

Critical Context

  • Le connessioni calendario supportano: Google Calendar, CalDAV (NextCloud, Infomaniak, Synology)
  • La direzione di sync è configurabile per ogni connessione
  • Le password/refresh token sono automaticamente criptati all salvataggio via encryptAndSetConfig()
  • Il campo uid_esterno sugli eventi traccia la corrispondenza con eventi remoti

Relevant Files

  • app/Http/Controllers/Admin/EmailSettingsController.php: +destroy() method
  • app/Http/Controllers/CalendarioConnessioneController.php: NEW CRUD + test + sync
  • app/Models/CalendarioConnessione.php: NEW model con encrypt config
  • app/Services/CalDavService.php: NEW CalDAV sync
  • app/Services/GoogleCalendarSyncService.php: NEW Google Calendar sync
  • app/Http/Controllers/ImpostazioniController.php: +calendarioConnessioni in index()
  • resources/views/admin/email-settings/index.blade.php: +delete button, fix Quill guard
  • resources/views/impostazioni/index.blade.php: +delete button, fix Quill guard, +calendario tab UI, +calendario modal, +JS funcs
  • routes/web.php: +email destroy route, +calendario-connessioni routes
  • database/migrations/2026_06_02_000001_create_calendario_connessioni_table.php: NEW
  • database/migrations/2026_06_02_000002_add_uid_esterno_to_eventi_table.php: NEW