<?php
session_start();
require_once 'database/db_config.php';
// Check if user has faculty privileges
require_faculty_privileges('../login.php');
// Get dashboard statistics with error handling
try {
// Get faculty-specific statistics
$user_id = $_SESSION['user_id'];
// Get faculty information
$faculty_query = "SELECT * FROM users WHERE id = ?";
$stmt = $conn->prepare($faculty_query);
$stmt->bind_param("i", $user_id);
$stmt->execute();
$faculty_result = $stmt->get_result();
$faculty = $faculty_result->fetch_assoc();
// Get courses count
$courses_query = "SELECT COUNT(*) as count FROM courses";
$stmt = $conn->prepare($courses_query);
$stmt->execute();
$courses_count = $stmt->get_result()->fetch_assoc()['count'];
// Get students count
$students_query = "SELECT COUNT(DISTINCT user_id) as count FROM enrollments
WHERE course_id IN (SELECT id FROM courses)";
$stmt = $conn->prepare($students_query);
$stmt->execute();
$students_count = $stmt->get_result()->fetch_assoc()['count'];
// Get attendance statistics
$attendance_query = "
SELECT
COUNT(DISTINCT date) as attendance_days,
COUNT(*) as total_records,
SUM(CASE WHEN status = 'present' THEN 1 ELSE 0 END) as present_count,
SUM(CASE WHEN status = 'absent' THEN 1 ELSE 0 END) as absent_count
FROM attendance
WHERE marked_by = ?
";
$stmt = $conn->prepare($attendance_query);
$stmt->bind_param("i", $user_id);
$stmt->execute();
$attendance_stats = $stmt->get_result()->fetch_assoc();
// Calculate attendance rate
$attendance_rate = 0;
if (!empty($attendance_stats['total_records'])) {
$attendance_rate = round(($attendance_stats['present_count'] / $attendance_stats['total_records']) * 100);
}
// Get latest courses
$latest_courses_query = "SELECT * FROM courses
ORDER BY created_at DESC LIMIT 5";
$stmt = $conn->prepare($latest_courses_query);
$stmt->execute();
$latest_courses_result = $stmt->get_result();
// Get recent attendance records
$recent_attendance_query = "
SELECT a.date, a.status, u.first_name, u.last_name, c.title as course_title
FROM attendance a
INNER JOIN users u ON a.student_id = u.id
INNER JOIN courses c ON a.course_id = c.id
WHERE a.marked_by = ?
ORDER BY a.date DESC, a.id DESC
LIMIT 10
";
$stmt = $conn->prepare($recent_attendance_query);
$stmt->bind_param("i", $user_id);
$stmt->execute();
$recent_attendance_result = $stmt->get_result();
} catch (Exception $e) {
// Log the error and show a user-friendly message
error_log("Dashboard statistics error: " . $e->getMessage());
// Initialize empty values if there's an error
$courses_count = 0;
$students_count = 0;
$attendance_stats = [
'attendance_days' => 0,
'total_records' => 0,
'present_count' => 0,
'absent_count' => 0
];
$attendance_rate = 0;
$latest_courses_result = false;
$recent_attendance_result = false;
}
// Include header
include_once 'includes/header.php';
?>
<!-- Begin Page Content -->
<div class="container-fluid mt-4 pt-4">
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">Faculty Dashboard</h1>
<div>
<a href="attendance.php" class="d-none d-sm-inline-block btn btn-primary shadow-sm me-2">
<i class="fas fa-clipboard-list fa-sm text-white-50"></i> Take Attendance
</a>
<a href="profile.php" class="d-none d-sm-inline-block btn btn-info shadow-sm">
<i class="fas fa-user fa-sm text-white-50"></i> View Profile
</a>
</div>
</div>
<!-- Statistics Cards -->
<div class="row">
<!-- Courses Card -->
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-primary shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-primary text-uppercase mb-1">
Courses</div>
<div class="h5 mb-0 font-weight-bold text-gray-800"><?php echo number_format($courses_count); ?></div>
</div>
<div class="col-auto">
<i class="fas fa-book fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<!-- Students Card -->
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-success shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-success text-uppercase mb-1">
Students</div>
<div class="h5 mb-0 font-weight-bold text-gray-800"><?php echo number_format($students_count); ?></div>
</div>
<div class="col-auto">
<i class="fas fa-user-graduate fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<!-- Attendance Card -->
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-info shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-info text-uppercase mb-1">Attendance Rate
</div>
<div class="row no-gutters align-items-center">
<div class="col-auto">
<div class="h5 mb-0 mr-3 font-weight-bold text-gray-800"><?php echo $attendance_rate; ?>%</div>
</div>
<div class="col">
<div class="progress progress-sm mr-2">
<div class="progress-bar bg-info" role="progressbar"
style="width: <?php echo $attendance_rate; ?>%" aria-valuenow="<?php echo $attendance_rate; ?>" aria-valuemin="0"
aria-valuemax="100"></div>
</div>
</div>
</div>
</div>
<div class="col-auto">
<i class="fas fa-clipboard-list fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<!-- Days Card -->
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-warning shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-warning text-uppercase mb-1">
Total Attendance Days</div>
<div class="h5 mb-0 font-weight-bold text-gray-800"><?php echo number_format($attendance_stats['attendance_days']); ?></div>
</div>
<div class="col-auto">
<i class="fas fa-calendar fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Content Row -->
<div class="row">
<!-- My Courses Column -->
<div class="col-lg-6 mb-4">
<!-- Courses Card -->
<div class="card shadow mb-4">
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">Courses</h6>
<a href="courses.php" class="btn btn-sm btn-primary shadow-sm">View All</a>
</div>
<div class="card-body">
<?php if ($latest_courses_result && $latest_courses_result->num_rows > 0): ?>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Course</th>
<th>Students</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php while ($course = $latest_courses_result->fetch_assoc()): ?>
<tr>
<td><?php echo htmlspecialchars($course['title']); ?></td>
<td class="text-center">
<?php
// Get enrollment count for this course
$enrollment_count_query = "SELECT COUNT(*) as count FROM enrollments WHERE course_id = ?";
$stmt = $conn->prepare($enrollment_count_query);
$stmt->bind_param("i", $course['id']);
$stmt->execute();
$enrollment_count = $stmt->get_result()->fetch_assoc()['count'];
echo number_format($enrollment_count);
?>
</td>
<td>
<span class="badge bg-<?php echo ($course['status'] == 'active') ? 'success' : (($course['status'] == 'draft') ? 'warning' : 'danger'); ?>">
<?php echo ucfirst($course['status']); ?>
</span>
</td>
<td>
<a href="../course-details.php?id=<?php echo $course['id']; ?>" class="btn btn-sm btn-info">
<i class="fas fa-eye"></i> View
</a>
</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
</div>
<?php else: ?>
<div class="alert alert-info">
<p class="mb-0">No Course Found</p>
</div>
<?php endif; ?>
</div>
</div>
</div>
<!-- Recent Attendance Column -->
<div class="col-lg-6 mb-4">
<!-- Recent Attendance Card -->
<div class="card shadow mb-4">
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">Recent Attendance Records</h6>
<a href="attendance_report.php" class="btn btn-sm btn-primary shadow-sm">View Reports</a>
</div>
<div class="card-body">
<?php if ($recent_attendance_result && $recent_attendance_result->num_rows > 0): ?>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Date</th>
<th>Student</th>
<th>Course</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<?php while ($record = $recent_attendance_result->fetch_assoc()): ?>
<tr>
<td><?php echo date('d M Y', strtotime($record['date'])); ?></td>
<td><?php echo htmlspecialchars($record['first_name'] . ' ' . $record['last_name']); ?></td>
<td><?php echo htmlspecialchars($record['course_title']); ?></td>
<td>
<span class="badge bg-<?php
echo $record['status'] === 'present' ? 'success' :
($record['status'] === 'absent' ? 'danger' :
($record['status'] === 'late' ? 'warning' : 'info'));
?> <?php echo $record['status'] === 'late' ? 'text-dark' : ''; ?>">
<?php echo ucfirst($record['status']); ?>
</span>
</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
</div>
<?php else: ?>
<div class="alert alert-info">
<p class="mb-0">No attendance records found. <a href="attendance.php">Start taking attendance</a>.</p>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
<!-- Quick Access Cards -->
<div class="row">
<div class="col-md-4 mb-4">
<div class="card shadow">
<div class="card-body text-center py-5">
<div class="mb-3">
<i class="fas fa-clipboard-list fa-4x text-primary"></i>
</div>
<h4 class="card-title">Attendance Management</h4>
<p class="card-text">Take attendance for all enrolled students in one place.</p>
<a href="attendance.php" class="btn btn-primary">Take Attendance</a>
</div>
</div>
</div>
<div class="col-md-4 mb-4">
<div class="card shadow">
<div class="card-body text-center py-5">
<div class="mb-3">
<i class="fas fa-file-download fa-4x text-success"></i>
</div>
<h4 class="card-title">Attendance Reports</h4>
<p class="card-text">Generate and download attendance reports in CSV format.</p>
<a href="attendance_report.php" class="btn btn-success">Generate Reports</a>
</div>
</div>
</div>
<div class="col-md-4 mb-4">
<div class="card shadow">
<div class="card-body text-center py-5">
<div class="mb-3">
<i class="fas fa-user fa-4x text-info"></i>
</div>
<h4 class="card-title">My Profile</h4>
<p class="card-text">View and update your profile information.</p>
<a href="profile.php" class="btn btn-info">View Profile</a>
</div>
</div>
</div>
</div>
</div>
<?php
// Include footer
include_once 'includes/footer.php';
?>