query('SELECT COUNT(*) FROM audit_log')->fetchColumn(); $totalPages = max(1, (int) ceil($total / $perPage)); $page = max(1, (int) ($_GET['p'] ?? 1)); $page = min($page, $totalPages); $offset = ($page - 1) * $perPage; $stmt = Database::pdo()->prepare( 'SELECT * FROM audit_log ORDER BY criado_em DESC, id DESC LIMIT :limit OFFSET :offset' ); $stmt->bindValue('limit', $perPage, PDO::PARAM_INT); $stmt->bindValue('offset', $offset, PDO::PARAM_INT); $stmt->execute(); $logs = $stmt->fetchAll(); $acaoLabels = [ 'login' => 'Login', 'login_negado' => 'Login negado (sem permissão)', 'login_falhou' => 'Login falhou (usuário/senha)', 'logout' => 'Logoff', 'habilitou_aluno' => 'Habilitou aluno', 'desabilitou_aluno' => 'Desabilitou aluno', 'alterou_senha_aluno' => 'Alterou senha de aluno', 'adicionou_admin' => 'Adicionou administrador', 'desativou_admin' => 'Desativou administrador', 'reativou_admin' => 'Reativou administrador', 'alterou_papel_admin' => 'Alterou papel de administrador', 'atualizou_settings' => 'Atualizou configurações', ]; View::header('Auditoria'); ?>
Histórico de logins (inclusive tentativas com senha incorreta), alterações em alunos, administradores e configurações.
| Data/hora | Usuário | Ação | Alvo | Detalhe | IP |
|---|---|---|---|---|---|
| = View::escape($log['criado_em']) ?> | = View::escape($log['usuario']) ?> | = View::escape($acaoLabels[$log['acao']] ?? $log['acao']) ?> | = View::escape($log['alvo'] ?? '') ?> | = View::escape($log['detalhe'] ?? '') ?> | = View::escape($log['ip'] ?? '') ?> |
| Nenhum registro ainda. | |||||