setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $pdo->exec("CREATE TABLE IF NOT EXISTS settings ( setting_key VARCHAR(50) PRIMARY KEY, setting_value TEXT )"); $pdo->exec("CREATE TABLE IF NOT EXISTS activity_logs ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NULL, action VARCHAR(100) NOT NULL, details TEXT, ip_address VARCHAR(45), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"); } catch (PDOException $e) { die("Database Connection failed: " . $e->getMessage()); } // Helper function to get setting function getSetting($pdo, $key) { $stmt = $pdo->prepare("SELECT setting_value FROM settings WHERE setting_key = ?"); $stmt->execute([$key]); $result = $stmt->fetch(); return $result ? $result['setting_value'] : null; } // Helper function to log activity function logActivity($pdo, $action, $details = '') { $user_id = $_SESSION['user_id'] ?? null; $ip_address = $_SERVER['REMOTE_ADDR'] ?? 'Unknown'; try { $stmt = $pdo->prepare("INSERT INTO activity_logs (user_id, action, details, ip_address) VALUES (?, ?, ?, ?)"); $stmt->execute([$user_id, $action, $details, $ip_address]); } catch (PDOException $e) { // Silently ignore log insertion errors to prevent breaking the app } } // Helper function to check login function isLoggedIn() { return isset($_SESSION['user_id']); } function requireLogin() { if (!isLoggedIn()) { header('Location: index.php'); exit; } } function isAdmin() { return isset($_SESSION['role']) && $_SESSION['role'] === 'admin'; } function requireAdmin() { if (!isAdmin()) { die("Unauthorized access."); } }