| Current Path : /home/users/unlimited/www/nigeria.codeskitter.site/student/ |
| Current File : /home/users/unlimited/www/nigeria.codeskitter.site/student/progress.php |
<?php
include '../includes/config.php';
if(!isset($_SESSION['user_id']) || $_SESSION['user_role'] != 'student') {
header("Location: ../login.php");
exit();
}
$user_id = $_SESSION['user_id'];
// Get overall progress statistics
$stats_sql = "SELECT
COUNT(DISTINCT e.course_id) as total_courses,
COUNT(DISTINCT CASE WHEN e.progress = 100 THEN e.course_id END) as completed_courses,
AVG(e.progress) as overall_progress,
SUM(sp.time_spent) as total_study_time,
COUNT(DISTINCT sp.module_id) as total_modules,
COUNT(DISTINCT CASE WHEN sp.is_completed = 1 THEN sp.module_id END) as completed_modules
FROM enrollments e
LEFT JOIN student_progress sp ON e.user_id = sp.user_id AND e.course_id = sp.course_id
WHERE e.user_id = ?";
$stmt = $conn->prepare($stats_sql);
$stmt->bind_param("i", $user_id);
$stmt->execute();
$stats = $stmt->get_result()->fetch_assoc();
// Get course-wise progress
$course_progress_sql = "SELECT c.*, e.progress, e.enrolled_at,
COUNT(DISTINCT cm.id) as total_modules,
COUNT(DISTINCT CASE WHEN sp.is_completed = 1 THEN sp.module_id END) as completed_modules
FROM enrollments e
JOIN courses c ON e.course_id = c.id
LEFT JOIN course_modules cm ON c.id = cm.course_id
LEFT JOIN student_progress sp ON cm.id = sp.module_id AND sp.user_id = e.user_id
WHERE e.user_id = ?
GROUP BY c.id
ORDER BY e.progress DESC";
$stmt_courses = $conn->prepare($course_progress_sql);
$stmt_courses->bind_param("i", $user_id);
$stmt_courses->execute();
$course_progress = $stmt_courses->get_result();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Progress - eLearning</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css">
<link rel="stylesheet" href="../assets/css/style.css">
</head>
<body>
<?php include 'navigation.php'; ?>
<div class="container-fluid py-4">
<div class="row">
<div class="col-12">
<h1 class="mb-4">My Learning Progress</h1>
<!-- Progress Overview -->
<div class="row mb-5">
<div class="col-md-3 mb-3">
<div class="card text-center">
<div class="card-body">
<i class="bi bi-book fs-1 text-primary mb-3"></i>
<h3><?php echo $stats['total_courses'] ?? 0; ?></h3>
<p class="text-muted mb-0">Total Courses</p>
</div>
</div>
</div>
<div class="col-md-3 mb-3">
<div class="card text-center">
<div class="card-body">
<i class="bi bi-check-circle fs-1 text-success mb-3"></i>
<h3><?php echo $stats['completed_courses'] ?? 0; ?></h3>
<p class="text-muted mb-0">Completed Courses</p>
</div>
</div>
</div>
<div class="col-md-3 mb-3">
<div class="card text-center">
<div class="card-body">
<i class="bi bi-graph-up fs-1 text-info mb-3"></i>
<h3><?php echo round($stats['overall_progress'] ?? 0); ?>%</h3>
<p class="text-muted mb-0">Overall Progress</p>
</div>
</div>
</div>
<div class="col-md-3 mb-3">
<div class="card text-center">
<div class="card-body">
<i class="bi bi-clock fs-1 text-warning mb-3"></i>
<h3><?php echo round(($stats['total_study_time'] ?? 0) / 60, 1); ?>h</h3>
<p class="text-muted mb-0">Study Time</p>
</div>
</div>
</div>
</div>
<!-- Course Progress -->
<div class="card">
<div class="card-header">
<h5 class="mb-0">Course Progress</h5>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Course</th>
<th>Enrollment Date</th>
<th>Modules Completed</th>
<th>Overall Progress</th>
<th>Study Time</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php while($course = $course_progress->fetch_assoc()):
$completion_rate = $course['total_modules'] > 0 ?
round(($course['completed_modules'] / $course['total_modules']) * 100) : 0;
?>
<tr>
<td>
<strong><?php echo $course['title']; ?></strong>
</td>
<td><?php echo date('M j, Y', strtotime($course['enrolled_at'])); ?></td>
<td>
<?php echo $course['completed_modules']; ?>/<?php echo $course['total_modules']; ?>
<small class="text-muted">(<?php echo $completion_rate; ?>%)</small>
</td>
<td>
<div class="progress" style="height: 8px;">
<div class="progress-bar bg-success" style="width: <?php echo $course['progress']; ?>%"></div>
</div>
<small class="text-muted"><?php echo $course['progress']; ?>%</small>
</td>
<td>
<?php
$course_time_sql = "SELECT SUM(time_spent) as course_time
FROM student_progress
WHERE user_id = ? AND course_id = ?";
$stmt_time = $conn->prepare($course_time_sql);
$stmt_time->bind_param("ii", $user_id, $course['id']);
$stmt_time->execute();
$course_time = $stmt_time->get_result()->fetch_assoc();
echo round(($course_time['course_time'] ?? 0) / 60, 1) . 'h';
?>
</td>
<td>
<?php if($course['progress'] == 100): ?>
<span class="badge bg-success">Completed</span>
<?php elseif($course['progress'] > 0): ?>
<span class="badge bg-warning">In Progress</span>
<?php else: ?>
<span class="badge bg-secondary">Not Started</span>
<?php endif; ?>
</td>
<td>
<a href="course-player.php?course_id=<?php echo $course['id']; ?>" class="btn btn-sm btn-primary">
Continue
</a>
</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- Progress Chart Placeholder -->
<div class="card mt-4">
<div class="card-header">
<h5 class="mb-0">Progress Over Time</h5>
</div>
<div class="card-body">
<div class="text-center py-5">
<i class="bi bi-bar-chart fs-1 text-muted"></i>
<p class="text-muted mt-2">Progress chart will be displayed here</p>
<small class="text-muted">(This would typically show a line chart of your progress over time)</small>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>