Sindbad~EG File Manager
<?php
/**
* System Status Checker
* Comprehensive check of all system components
*/
require_once 'config/config.php';
checkLogin();
$pageTitle = "System Status - " . APP_NAME;
// Initialize status array
$status = [
'database' => ['status' => 'unknown', 'message' => '', 'details' => []],
'sessions' => ['status' => 'unknown', 'message' => '', 'details' => []],
'modules' => ['status' => 'unknown', 'message' => '', 'details' => []],
'classes' => ['status' => 'unknown', 'message' => '', 'details' => []]
];
try {
$db = Database::getInstance()->getConnection();
// Check database connection
$status['database']['status'] = 'success';
$status['database']['message'] = 'Database connection successful';
// Check if membershipcard_id column exists
$checkStmt = $db->query("SHOW COLUMNS FROM members LIKE 'membershipcard_id'");
$columnExists = $checkStmt->fetch() !== false;
$status['database']['details']['membershipcard_id_column'] = $columnExists ? 'EXISTS' : 'MISSING';
// Check table counts
$tables = ['users', 'members', 'areas', 'districts', 'assemblies', 'membership_cards'];
foreach ($tables as $table) {
try {
$stmt = $db->query("SELECT COUNT(*) as count FROM {$table}");
$result = $stmt->fetch();
$status['database']['details'][$table . '_count'] = $result['count'];
} catch (PDOException $e) {
$status['database']['details'][$table . '_count'] = 'ERROR: ' . $e->getMessage();
}
}
} catch (Exception $e) {
$status['database']['status'] = 'error';
$status['database']['message'] = 'Database error: ' . $e->getMessage();
}
// Check session variables
$sessionVars = ['user_id', 'username', 'full_name', 'access_level', 'area_id', 'district_id', 'assembly_id'];
$missingVars = [];
foreach ($sessionVars as $var) {
if (!isset($_SESSION[$var])) {
$missingVars[] = $var;
}
}
if (empty($missingVars)) {
$status['sessions']['status'] = 'success';
$status['sessions']['message'] = 'All required session variables are set';
} else {
$status['sessions']['status'] = 'warning';
$status['sessions']['message'] = 'Some session variables are missing: ' . implode(', ', $missingVars);
}
$status['sessions']['details'] = [
'user_id' => $_SESSION['user_id'] ?? 'NOT SET',
'username' => $_SESSION['username'] ?? 'NOT SET',
'full_name' => $_SESSION['full_name'] ?? 'NOT SET',
'access_level' => $_SESSION['access_level'] ?? 'NOT SET'
];
// Check required classes
$requiredClasses = ['Auth', 'Database', 'AuditLog', 'MembershipCard', 'Notification'];
$missingClasses = [];
foreach ($requiredClasses as $class) {
if (!class_exists($class)) {
$missingClasses[] = $class;
}
}
if (empty($missingClasses)) {
$status['classes']['status'] = 'success';
$status['classes']['message'] = 'All required classes are available';
} else {
$status['classes']['status'] = 'error';
$status['classes']['message'] = 'Missing classes: ' . implode(', ', $missingClasses);
}
// Check module accessibility
$modules = [
'membership' => 'modules/membership/index.php',
'users' => 'modules/users/index.php',
'settings' => 'modules/settings/index.php',
'audit' => 'modules/audit/index.php'
];
$moduleStatus = [];
foreach ($modules as $name => $path) {
$moduleStatus[$name] = file_exists($path) ? 'EXISTS' : 'MISSING';
}
$status['modules']['status'] = in_array('MISSING', $moduleStatus) ? 'error' : 'success';
$status['modules']['message'] = $status['modules']['status'] === 'success' ? 'All modules exist' : 'Some modules are missing';
$status['modules']['details'] = $moduleStatus;
include 'includes/header.php';
?>
<?php include 'includes/sidebar.php'; ?>
<!-- Main Content -->
<main class="flex-1 md:ml-64 mt-16">
<div class="container mx-auto px-4 py-8">
<div class="mb-6">
<h1 class="text-3xl font-bold text-gray-800">
<i class="fas fa-heartbeat mr-2 text-green-500"></i>System Status
</h1>
<p class="text-gray-600 mt-2">Comprehensive system health check</p>
</div>
<!-- Status Cards -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
<?php foreach ($status as $component => $info): ?>
<div class="bg-white rounded-xl shadow-lg p-6 border-l-4 <?php
echo $info['status'] === 'success' ? 'border-green-500' :
($info['status'] === 'warning' ? 'border-yellow-500' : 'border-red-500');
?>">
<div class="flex items-center justify-between mb-4">
<h3 class="text-lg font-semibold text-gray-800 capitalize"><?php echo $component; ?></h3>
<i class="fas fa-<?php
echo $info['status'] === 'success' ? 'check-circle text-green-500' :
($info['status'] === 'warning' ? 'exclamation-triangle text-yellow-500' : 'times-circle text-red-500');
?>"></i>
</div>
<p class="text-sm text-gray-600 mb-3"><?php echo htmlspecialchars($info['message']); ?></p>
<?php if (!empty($info['details'])): ?>
<div class="text-xs">
<strong>Details:</strong>
<ul class="mt-1 space-y-1">
<?php foreach ($info['details'] as $key => $value): ?>
<li class="flex justify-between">
<span class="text-gray-500"><?php echo htmlspecialchars($key); ?>:</span>
<span class="font-mono <?php echo strpos($value, 'ERROR') !== false ? 'text-red-600' : 'text-gray-700'; ?>">
<?php echo htmlspecialchars($value); ?>
</span>
</li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
<!-- Actions -->
<div class="bg-white rounded-xl shadow-lg p-6">
<h2 class="text-xl font-bold text-gray-800 mb-4">System Actions</h2>
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<a href="database/check_schema.php" class="bg-blue-500 text-white px-4 py-3 rounded-lg hover:bg-blue-600 transition text-center">
<i class="fas fa-database mr-2"></i>Check Database Schema
</a>
<a href="database/run_migration.php" class="bg-green-500 text-white px-4 py-3 rounded-lg hover:bg-green-600 transition text-center">
<i class="fas fa-tools mr-2"></i>Run Migration
</a>
<a href="dashboard.php" class="bg-gray-500 text-white px-4 py-3 rounded-lg hover:bg-gray-600 transition text-center">
<i class="fas fa-home mr-2"></i>Back to Dashboard
</a>
</div>
</div>
</div>
</main>
<?php include 'includes/footer.php'; ?>
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists