Files
glastree/MEMORY.md
T

6.3 KiB
Raw Blame History

🧠 MEMORY.md — Stato Progetto

Goal

  • Fix login after fresh install (user created via installer can't authenticate)
  • Cross-DB compatibility (MySQL ↔ SQLite) for all migrations

Constraints & Preferences

  • Laravel 13, PHP 8.4, AdminLTE 3, MySQL/MariaDB/SQLite
  • Comandi Artisan da terminale, nessun wizard web
  • Script PHP CLI per installazione interattiva
  • Zero placeholder, zero TODO, codice funzionante

Progress

Done

  • Fix RedirectResponse type error: aggiunto use Illuminate\Http\RedirectResponse; in EmailSettingsController.php
  • Fix UrlGenerationException in sender routes: sostituito route('impostazioni.sender.update', '') + id con '__ID__'.replace('__ID__', id) in admin/email-settings/index.blade.php (stessa correzione per impostazioni.sender.test)
  • Fix Messaggi email visibili dopo eliminazione configurazione: destroy() ora cancella sempre allegati su disco, cartelle email (cascata messaggi/allegati) e poi le impostazioni. Risolto bug che faceva uscire subito se EmailSetting::first() era null
  • Fix Tab guida Installazione/Backup/Docker non funzionanti: rimosso </div> di chiusura tab-content prematuro (linea 290) in help/index.blade.php — i tre tab-pane erano fuori dal container
  • Guida aggiornata rimosso wizard web installer: sostituiti tutti i riferimenti alla cartella installer/ con comandi Artisan in help/index.blade.php e help/pdf.blade.php. Passi 3-6 semplificati in un unico php install.php
  • Script install.sh rimosso, sostituito da install.php (PHP CLI interattivo): modalità Apache/Docker/Restore, preflight, .env + APP_KEY, CREATE DATABASE IF NOT EXISTS, composer, package:discover, migrate --seed, admin via tinker, asset npm, permessi. Docker build + admin nel container
  • Fix Migration app_settings mancante: creata 2026_05_15_000001_create_app_settings_table.php con tutte le colonne. Aggiornate 4 migration alter esistenti con guardie Schema::hasTable() + Schema::hasColumn(). Aggiunto Schema::hasTable() in AppSetting::getSetting() per evitare eccezioni su DB fresco
  • Fix Database non creato durante install: install.php ora esegue CREATE DATABASE IF NOT EXISTS
  • Fix Remember checkbox mancante name: aggiunto name="remember" al checkbox "Ricordami" in resources/views/auth/login.blade.php
  • Fix Admin via tinker senza is_admin/permissions: tutti e 3 i tinker script in install.php ora impostano is_admin = true, status = 'active', permissions completo (tutti i moduli a livello FULL)
  • Fix 2>/dev/null rimosso da tinker/artisan commands: install.php non sopprime più stderr su tinker --execute, package:discover, storage:link, chown, cp. Eventuali errori ora sono visibili all'utente
  • Fix Controllo permessi sessione: aggiunto check esplicito is_writable(storage/framework/sessions/) in install.php con warning su potenziale errore 419 CSRF
  • Fix Migrations non cross-DB: convertiti enum() a string(50) in tutte le migration delle tabelle documenti (create + alter) per compatibilità MySQL/SQLite. Rimossa raw SQL ALTER TABLE MODIFY COLUMN. Aggiunto dropIndex() prima di dropColumn('ruolo_id') in change_ruolo_to_multi.php per compatibilità SQLite
  • Fix ExampleTest: aggiornato per matchare comportamento reale (root / fa redirect 302 a login)
  • Nuovo test Login: tests/Feature/Auth/LoginTest.php con 5 test: seeded admin login, custom admin login, wrong password, suspended user, login page loads

In Progress

  • (nessuno)

Blocked

  • (nessuno)

Key Decisions

  • Script installazione in PHP CLI invece di bash: usa direttamente API Laravel/PDO, gestione errori con try/catch, readline per input, nessun problema di sintassi shell
  • Migrazione app_settings: unica migration Schema::create() con tutte le colonne + guardie hasColumn() nelle alter esistenti invece di modificare i timestamp
  • Cleanup email: eseguito sempre (anche se EmailSetting già cancellato) per gestire stato orfano
  • enum() rimosso a livello DB in favore di string() + validazione app-level (consistente con AGENTS.md)
  • dropIndex() esplicito prima di dropColumn() per compatibilità SQLite

Next Steps

  • (nessuno)

Critical Context

  • DatabaseSeeder crea admin admin@glastree.local / password con is_admin=true, status='active'
  • User model ha 'password' => 'hashed' cast: nessun doppio hashing con bcrypt() + save()
  • Auth::attempt() usa Hash::check() che ignora il cast hashed
  • SESSION_DRIVER=file in produzione richiede permessi di scrittura su storage/framework/sessions/
  • APP_ENV=production + APP_DEBUG=false nascondono errori 419 (CSRF) e 500
  • Test PHPUnit usano SQLite :memory: — tutte le migration devono essere cross-DB compatibili
  • SQLite non supporta: ALTER TABLE MODIFY COLUMN, ENUM type, dropColumn su colonne con indici

Relevant Files

  • install.php: installer interattivo — Apache/Docker/Restore, tinker scripts admin (3 modalità)
  • resources/views/auth/login.blade.php: fix name="remember" sul checkbox "Ricordami"
  • app/Http/Controllers/Auth/AuthController.php: login() controlla $user->status === 'suspended'
  • app/Models/User.php: cast 'password' => 'hashed', metodi isSuperAdmin/isActive
  • database/seeders/DatabaseSeeder.php: crea admin di default
  • tests/Feature/Auth/LoginTest.php: NEW — 5 test di login
  • app/Http/Controllers/Admin/EmailSettingsController.php: fix destroy cleanup
  • resources/views/admin/email-settings/index.blade.php: fix route sender update/test
  • database/migrations/2026_05_12_000002_change_ruolo_to_multi.php: fix dropIndex + dropColumn
  • database/migrations/*documenti*: fix enum → string (5 migration)
  • database/migrations/2026_05_15_000001_create_app_settings_table.php: NEW
  • database/migrations/2026_05_16_000001_add_logo_path_to_app_settings.php: guardie hasColumn
  • database/migrations/2026_05_16_000002_add_app_config_to_app_settings.php: guardie hasColumn
  • database/migrations/2026_05_27_000003_add_documenti_storage_to_app_settings.php: guardie hasColumn
  • database/migrations/2026_06_01_100155_add_backup_settings_to_app_settings.php: guardie hasColumn
  • resources/views/help/index.blade.php: fix tab-pane chiusura, rimosso wizard web installer
  • resources/views/help/pdf.blade.php: rimosso wizard web installer