<?php
require_once '../config/database.php';
require_once '../includes/auth.php';
requireAdmin();
$database = new Database();
$db = $database->getConnection();
// Get statistics
$stats = [];
// Total appointments
$query = "SELECT COUNT(*) as total FROM appointments";
$stmt = $db->prepare($query);
$stmt->execute();
$stats['total_appointments'] = $stmt->fetch(PDO::FETCH_ASSOC)['total'];
// Pending appointments
$query = "SELECT COUNT(*) as pending FROM appointments WHERE status = 'pending'";
$stmt = $db->prepare($query);
$stmt->execute();
$stats['pending_appointments'] = $stmt->fetch(PDO::FETCH_ASSOC)['pending'];
// Total users
$query = "SELECT COUNT(*) as total FROM users WHERE role = 'user'";
$stmt = $db->prepare($query);
$stmt->execute();
$stats['total_users'] = $stmt->fetch(PDO::FETCH_ASSOC)['total'];
// Total services
$query = "SELECT COUNT(*) as total FROM services WHERE status = 'active'";
$stmt = $db->prepare($query);
$stmt->execute();
$stats['total_services'] = $stmt->fetch(PDO::FETCH_ASSOC)['total'];
// Recent appointments
$query = "SELECT a.*, u.name as user_name, s.title as service_name
FROM appointments a
JOIN users u ON a.user_id = u.id
JOIN services s ON a.service_id = s.id
ORDER BY a.created_at DESC
LIMIT 10";
$stmt = $db->prepare($query);
$stmt->execute();
$recent_appointments = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Recent users
$query = "SELECT * FROM users WHERE role = 'user' ORDER BY created_at DESC LIMIT 5";
$stmt = $db->prepare($query);
$stmt->execute();
$recent_users = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin Dashboard - Opti-Vision Eye Clinic</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
<link href="../assets/css/style.css" rel="stylesheet">
</head>
<body class="bg-light">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-dark bg-primary shadow-sm">
<div class="container-fluid">
<a class="navbar-brand fw-bold" href="../index.php">
<i class="fas fa-eye me-2"></i>Opti-Vision Admin
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link active" href="dashboard.php">Dashboard</a>
</li>
<li class="nav-item">
<a class="nav-link" href="appointments.php">Appointments</a>
</li>
<li class="nav-item">
<a class="nav-link" href="users.php">Users</a>
</li>
<li class="nav-item">
<a class="nav-link" href="services.php">Services</a>
</li>
<li class="nav-item">
<a class="nav-link" href="doctors.php">Doctors</a>
</li>
<li class="nav-item">
<a class="nav-link" href="messages.php">Messages</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../logout.php">Logout</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container-fluid py-4">
<div class="row">
<div class="col-12">
<h2 class="fw-bold mb-4">Dashboard Overview</h2>
<!-- Stats Cards -->
<div class="row g-4 mb-5">
<div class="col-lg-3 col-md-6">
<div class="card dashboard-card stat-card">
<div class="stat-number"><?php echo $stats['total_appointments']; ?></div>
<div class="stat-label">Total Appointments</div>
<div class="mt-2">
<a href="appointments.php" class="btn btn-sm btn-outline-primary">View All</a>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card dashboard-card stat-card">
<div class="stat-number text-warning"><?php echo $stats['pending_appointments']; ?></div>
<div class="stat-label">Pending Appointments</div>
<div class="mt-2">
<a href="appointments.php?status=pending" class="btn btn-sm btn-outline-warning">View Pending</a>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card dashboard-card stat-card">
<div class="stat-number text-success"><?php echo $stats['total_users']; ?></div>
<div class="stat-label">Registered Users</div>
<div class="mt-2">
<a href="users.php" class="btn btn-sm btn-outline-success">View Users</a>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card dashboard-card stat-card">
<div class="stat-number text-info"><?php echo $stats['total_services']; ?></div>
<div class="stat-label">Active Services</div>
<div class="mt-2">
<a href="services.php" class="btn btn-sm btn-outline-info">Manage Services</a>
</div>
</div>
</div>
</div>
<div class="row g-4">
<!-- Recent Appointments -->
<div class="col-lg-8">
<div class="card dashboard-card">
<div class="card-header bg-primary text-white">
<h5 class="mb-0"><i class="fas fa-calendar-alt me-2"></i>Recent Appointments</h5>
</div>
<div class="card-body">
<?php if (empty($recent_appointments)): ?>
<div class="text-center py-4">
<i class="fas fa-calendar-times fa-3x text-muted mb-3"></i>
<p class="text-muted">No appointments found</p>
</div>
<?php else: ?>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Patient</th>
<th>Service</th>
<th>Date</th>
<th>Time</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php foreach($recent_appointments as $appointment): ?>
<tr>
<td><?php echo htmlspecialchars($appointment['user_name']); ?></td>
<td><?php echo htmlspecialchars($appointment['service_name']); ?></td>
<td><?php echo date('M d, Y', strtotime($appointment['appointment_date'])); ?></td>
<td><?php echo date('h:i A', strtotime($appointment['appointment_time'])); ?></td>
<td>
<span class="badge bg-<?php
echo $appointment['status'] === 'confirmed' ? 'success' :
($appointment['status'] === 'pending' ? 'warning' :
($appointment['status'] === 'completed' ? 'info' : 'secondary'));
?>">
<?php echo ucfirst($appointment['status']); ?>
</span>
</td>
<td>
<div class="btn-group btn-group-sm">
<button class="btn btn-outline-primary"
onclick="viewAppointment(<?php echo $appointment['id']; ?>)">
<i class="fas fa-eye"></i>
</button>
<button class="btn btn-outline-success"
onclick="updateStatus(<?php echo $appointment['id']; ?>, 'confirmed')">
<i class="fas fa-check"></i>
</button>
</div>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php endif; ?>
</div>
</div>
</div>
<!-- Recent Users -->
<div class="col-lg-4">
<div class="card dashboard-card">
<div class="card-header">
<h5 class="mb-0"><i class="fas fa-users me-2"></i>Recent Users</h5>
</div>
<div class="card-body">
<?php if (empty($recent_users)): ?>
<div class="text-center py-4">
<i class="fas fa-user-slash fa-3x text-muted mb-3"></i>
<p class="text-muted">No users found</p>
</div>
<?php else: ?>
<div class="list-group list-group-flush">
<?php foreach($recent_users as $user): ?>
<div class="list-group-item d-flex justify-content-between align-items-center px-0">
<div>
<h6 class="mb-1"><?php echo htmlspecialchars($user['name']); ?></h6>
<small class="text-muted"><?php echo htmlspecialchars($user['email']); ?></small>
</div>
<small class="text-muted">
<?php echo date('M d', strtotime($user['created_at'])); ?>
</small>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
function viewAppointment(id) {
// Implement view appointment modal
alert('View appointment feature will be implemented soon.');
}
function updateStatus(id, status) {
if (confirm('Are you sure you want to update this appointment status?')) {
// Implement AJAX call to update status
alert('Status update feature will be implemented soon.');
}
}
</script>
</body>
</html>