4.6 KiB
4.6 KiB
🧠 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()dentroif ($request->has('contatti')). - Fix BUG CRITICO 1 –
individui/edit.blade.php: convertiti 4 form annidati in pulsantitype="button"+fetch()AJAX - Fix BUG CRITICO 2 –
gruppi/edit.blade.php: convertiti 3 form annidati in pulsantitype="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()inEmailSettingsController, rottaDELETE /impostazioni/email, pulsante "Elimina Configurazione" in entrambe le viste (admin dedicata e unificata) - FIX – Doppia barra icone firma: Cambiata la guardia di
createEditor()einitSignatureEditor()dacontainer.querySelector('.ql-toolbar')(che non funziona perché Quill crea la toolbar come sibling, non child) a flagquillEditorInstancein 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
CalendarioConnessionecon 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
- Migration
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
quillEditorInstanceinvece dicontainer.querySelector('.ql-toolbar')perché Quill inserisce.ql-toolbarcome elemento sibling, non child - Per CalDAV: usato Guzzle (già in Laravel) per HTTP +
sabre/vobjectper parsing iCal - Per Google Calendar: usato
google/apiclientcon 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_esternosugli eventi traccia la corrispondenza con eventi remoti
Relevant Files
app/Http/Controllers/Admin/EmailSettingsController.php: +destroy() methodapp/Http/Controllers/CalendarioConnessioneController.php: NEW – CRUD + test + syncapp/Models/CalendarioConnessione.php: NEW – model con encrypt configapp/Services/CalDavService.php: NEW – CalDAV syncapp/Services/GoogleCalendarSyncService.php: NEW – Google Calendar syncapp/Http/Controllers/ImpostazioniController.php: +calendarioConnessioni in index()resources/views/admin/email-settings/index.blade.php: +delete button, fix Quill guardresources/views/impostazioni/index.blade.php: +delete button, fix Quill guard, +calendario tab UI, +calendario modal, +JS funcsroutes/web.php: +email destroy route, +calendario-connessioni routesdatabase/migrations/2026_06_02_000001_create_calendario_connessioni_table.php: NEWdatabase/migrations/2026_06_02_000002_add_uid_esterno_to_eventi_table.php: NEW