Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/portal/classes/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/portal/classes/AuditLog.php

<?php
/**
 * Audit Log Class
 * Tracks all system activities
 */

class AuditLog {
    private $db;
    
    public function __construct() {
        $this->db = Database::getInstance()->getConnection();
    }
    
    /**
     * Log an activity
     */
    public function log($userId, $action, $module, $recordId = null, $oldValues = null, $newValues = null) {
        try {
            $stmt = $this->db->prepare("
                INSERT INTO audit_logs (user_id, action, module, record_id, old_values, new_values, ip_address, user_agent)
                VALUES (:user_id, :action, :module, :record_id, :old_values, :new_values, :ip_address, :user_agent)
            ");
            
            $stmt->execute([
                'user_id' => $userId,
                'action' => $action,
                'module' => $module,
                'record_id' => $recordId,
                'old_values' => $oldValues ? json_encode($oldValues) : null,
                'new_values' => $newValues ? json_encode($newValues) : null,
                'ip_address' => $_SERVER['REMOTE_ADDR'] ?? null,
                'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? null
            ]);
            
            return true;
        } catch (PDOException $e) {
            // Fail silently to not disrupt application
            error_log("Audit log error: " . $e->getMessage());
            return false;
        }
    }
    
    /**
     * Get audit logs with filters
     */
    public function getLogs($filters = [], $limit = 100, $offset = 0) {
        try {
            $sql = "
                SELECT al.*, u.username, u.full_name
                FROM audit_logs al
                LEFT JOIN users u ON al.user_id = u.id
                WHERE 1=1
            ";
            
            $params = [];
            
            if (!empty($filters['user_id'])) {
                $sql .= " AND al.user_id = :user_id";
                $params['user_id'] = $filters['user_id'];
            }
            
            if (!empty($filters['module'])) {
                $sql .= " AND al.module = :module";
                $params['module'] = $filters['module'];
            }
            
            if (!empty($filters['action'])) {
                $sql .= " AND al.action = :action";
                $params['action'] = $filters['action'];
            }
            
            if (!empty($filters['date_from'])) {
                $sql .= " AND DATE(al.created_at) >= :date_from";
                $params['date_from'] = $filters['date_from'];
            }
            
            if (!empty($filters['date_to'])) {
                $sql .= " AND DATE(al.created_at) <= :date_to";
                $params['date_to'] = $filters['date_to'];
            }
            
            $sql .= " ORDER BY al.created_at DESC LIMIT :limit OFFSET :offset";
            
            $stmt = $this->db->prepare($sql);
            
            foreach ($params as $key => $value) {
                $stmt->bindValue(':' . $key, $value);
            }
            
            $stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
            $stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
            
            $stmt->execute();
            return $stmt->fetchAll();
            
        } catch (PDOException $e) {
            return [];
        }
    }
    
    /**
     * Get total count of logs
     */
    public function getCount($filters = []) {
        try {
            $sql = "SELECT COUNT(*) as total FROM audit_logs WHERE 1=1";
            $params = [];
            
            if (!empty($filters['user_id'])) {
                $sql .= " AND user_id = :user_id";
                $params['user_id'] = $filters['user_id'];
            }
            
            if (!empty($filters['module'])) {
                $sql .= " AND module = :module";
                $params['module'] = $filters['module'];
            }
            
            $stmt = $this->db->prepare($sql);
            $stmt->execute($params);
            $result = $stmt->fetch();
            
            return $result['total'];
        } catch (PDOException $e) {
            return 0;
        }
    }
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists