4.9 KiB
4.9 KiB
Sistema di Logging - Territory Manager
Panoramica
Il sistema di logging è stato implementato per tracciare tutte le azioni eseguite dagli utenti all'interno dell'applicazione Territory Manager.
Funzionalità Implementate
1. Database
- Tabella
activity_logs: Memorizza tutti i log delle attivitàuser_id: ID dell'utente che ha eseguito l'azioneusername: Nome utente per riferimento rapidoaction_type: Tipo di azione (login, logout, create, update, delete, assign, return, export)action_description: Descrizione dettagliata dell'azioneentity_type: Tipo di entità coinvolta (territory, assignment, user, config, auth)entity_id: ID dell'entità coinvoltaip_address: Indirizzo IP dell'utenteuser_agent: User agent del browsercreated_at: Timestamp dell'azione
2. Funzioni di Logging (functions.php)
logActivity($action_type, $action_description, $entity_type, $entity_id)
Registra un'attività nel log. Cattura automaticamente:
- Utente corrente dalla sessione
- Indirizzo IP
- User Agent del browser
getActivityLogs($filters, $page, $per_page)
Recupera i log con filtri e paginazione. Supporta filtri per:
- Utente
- Tipo di azione
- Tipo di entità
- Intervallo di date
- Ricerca testuale
3. Pagina Visualizzazione Log (logs.php)
Accesso: Solo amministratori
Funzionalità:
- Visualizzazione log con tabella paginata
- Filtri multipli:
- Ricerca testuale
- Utente
- Tipo di azione
- Tipo di entità
- Data da/a
- Paginazione (50 log per pagina)
- Badge colorati per tipo di azione
- Link per esportazione PDF
4. Esportazione PDF (export_logs_pdf.php)
Accesso: Solo amministratori
Funzionalità:
- Esporta tutti i log filtrati in formato PDF
- Include gli stessi filtri della pagina di visualizzazione
- Genera report con:
- Elenco completo dei log
- Riepilogo per tipo di azione
- Riepilogo per utente
- Timestamp di generazione
- Informazioni sui filtri applicati
5. Azioni Tracciate
Autenticazione
login: Accesso al sistemalogout: Uscita dal sistema
Territori
create: Creazione nuovo territorioupdate: Modifica territorio esistentedelete: Eliminazione territorio
Assegnazioni
assign: Assegnazione territorio a un proclamatorereturn: Riconsegna territorio
Utenti
create: Creazione nuovo utenteupdate: Modifica passworddelete: Eliminazione utente
Configurazioni
update: Modifica configurazioni di sistema
Log
export: Esportazione log in PDF
Integrazione
Il logging è stato integrato in tutte le operazioni principali:
login.php: Log di accessologout.php: Log di uscitaterritories.php: Log di creazione, modifica ed eliminazione territoriassignments.php: Log di assegnazione e riconsegnasettings.php: Log di modifiche configurazioni e gestione utentiexport_logs_pdf.php: Log di esportazione
Menu di Navigazione
Il link "Log" è stato aggiunto nel menu principale, visibile solo agli amministratori.
Utilizzo
Visualizzare i Log
- Accedere come amministratore
- Cliccare su "Log" nel menu
- Utilizzare i filtri per trovare log specifici
Esportare i Log
- Dalla pagina Log, applicare eventuali filtri
- Cliccare su "Esporta PDF"
- Si aprirà una nuova finestra con il report
- Utilizzare il pulsante "Stampa / Salva come PDF" del browser
Note Tecniche
- Il sistema cattura automaticamente IP e User Agent per tracciabilità
- I log sono legati agli utenti tramite foreign key (cascade on delete)
- La paginazione limita il carico sul database
- L'export PDF è ottimizzato per la stampa (orientamento landscape)
- I filtri sono persistenti durante la navigazione
Sicurezza
- Solo gli amministratori possono accedere ai log
- I log non possono essere modificati o eliminati dall'interfaccia
- Tutte le operazioni sensibili vengono registrate
- Gli IP vengono tracciati per audit trail
Manutenzione
Per pulire vecchi log (da eseguire manualmente nel database):
-- Elimina log più vecchi di 1 anno
DELETE FROM activity_logs WHERE created_at < DATE_SUB(NOW(), INTERVAL 1 YEAR);
Database Migration
Per applicare le modifiche al database esistente:
-- Eseguire lo script SQL aggiornato
SOURCE database.sql;
O solo la parte relativa ai log:
CREATE TABLE IF NOT EXISTS activity_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
username VARCHAR(50) NOT NULL,
action_type VARCHAR(50) NOT NULL,
action_description TEXT NOT NULL,
entity_type VARCHAR(50),
entity_id INT,
ip_address VARCHAR(45),
user_agent TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_user (user_id),
INDEX idx_action_type (action_type),
INDEX idx_created_at (created_at),
INDEX idx_entity (entity_type, entity_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;