# 🧠 MEMORY.md — Stato Progetto ## Goal - Implementare page-length selector su liste (Individui, Eventi, Email) - Implementare CSV import per gruppi - Implementare ICS import per eventi - Creare script build-dist.sh per distribuzione ## Modifiche Effettuate (10 file + 3 nuovi) ### File modificati | File | Cosa | |------|------| | `app/Http/Controllers/IndividuoController.php` | perPage support (20 default, clamp [10,20,25,50,100]) | | `app/Http/Controllers/EventoController.php` | perPage + importIcs/importIcsStore (Sabre\VObject) | | `app/Http/Controllers/GruppoController.php` | import/importStore/downloadTemplate CSV gruppi | | `app/Http/Controllers/EmailController.php` | perPage support | | `app/Models/Evento.php` | `uid_esterno` aggiunto a $fillable (bug fix) | | `resources/views/individui/index.blade.php` | dropdown perPage in card-footer | | `resources/views/eventi/index.blade.php` | dropdown perPage + pulsante Importa ICS | | `resources/views/gruppi/index.blade.php` | pulsante Importa CSV | | `resources/views/email/index.blade.php` | dropdown perPage in card-footer | | `routes/web.php` | route gruppi/import, gruppi/template, eventi/import | ### File nuovi | File | Cosa | |------|------| | `resources/views/gruppi/import.blade.php` | form upload CSV gruppi | | `resources/views/eventi/import.blade.php` | form upload ICS eventi | | `build-dist.sh` | script build distribuzione | ## Feature ### 1. Page-length selector - **3 pagine**: Individui, Eventi, Email - **Valori**: 10, 20, 25, 50, 100 (default 20) - Dropdown nel card-footer con hidden fields per preservare altri query param ### 2. CSV Import Gruppi - Stesso pattern di `IndividuoController` (import GET, importStore POST, downloadTemplate GET) - Colonne: nome, descrizione, parent_id, diocesi_id, indirizzo_incontro, cap_incontro, città_incontro, sigla_provincia_incontro - Fault-tolerant: skip righe vuote, log errori ### 3. ICS Import Eventi - Usa `Sabre\VObject\Reader::read()` già in vendor/ - Mapping: SUMMARY→nome_evento, DESCRIPTION→descrizione, DTSTART→data_specifica+ora_inizio, DTEND→durata_minuti, LOCATION→luogo_indirizzo, UID→uid_esterno - Dedup via uid_esterno - RRULE: import come evento singolo con prima occorrenza ### 4. Script build-dist.sh - Genera `glastree-YYYYMMDD_HHMM.tar.gz` (~26MB) - Include: sorgenti, vendor (production), Dockerfile, docker-compose, install.php, install.sql - Esclude: .git, node_modules, tests, cache, storage content, vendor/docs/tests ## Installazione su server remoto ```bash # Estrarre tar xzf glastree-20260607_2052.tar.gz # Configurare cp .env.example .env php artisan key:generate php artisan storage:link # Opzione A — Docker docker compose up -d # Opzione B — Apache nativo (MySQL) php install.php ```