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

71 lines
4.6 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
- 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