| Current Path : /home/users/unlimited/www/nigeria.codeskitter.site/student/ |
| Current File : /home/users/unlimited/www/nigeria.codeskitter.site/student/dashboard.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 student 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
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 enrolled courses with progress
$enrolled_courses_sql = "SELECT c.*, e.progress, e.enrolled_at
FROM enrollments e
JOIN courses c ON e.course_id = c.id
WHERE e.user_id = ?
ORDER BY e.enrolled_at DESC
LIMIT 6";
$stmt_courses = $conn->prepare($enrolled_courses_sql);
$stmt_courses->bind_param("i", $user_id);
$stmt_courses->execute();
$enrolled_courses = $stmt_courses->get_result();
// Get recent activity
$recent_activity_sql = "SELECT sp.*, cm.title as module_title, c.title as course_title, c.id as course_id
FROM student_progress sp
JOIN course_modules cm ON sp.module_id = cm.id
JOIN courses c ON sp.course_id = c.id
WHERE sp.user_id = ?
ORDER BY sp.last_accessed DESC
LIMIT 5";
$stmt_activity = $conn->prepare($recent_activity_sql);
$stmt_activity->bind_param("i", $user_id);
$stmt_activity->execute();
$recent_activity = $stmt_activity->get_result();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Student Dashboard - 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">
<style>
.dashboard-card {
border: none;
border-radius: 15px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: transform 0.3s ease;
}
.dashboard-card:hover {
transform: translateY(-5px);
}
.progress-card .progress {
height: 8px;
}
.recent-activity {
max-height: 400px;
overflow-y: auto;
}
.activity-item {
border-left: 3px solid #4e73df;
padding-left: 15px;
margin-bottom: 15px;
}
.certificate-badge {
background: linear-gradient(45deg, #FFD700, #FFA500);
color: #000;
font-weight: bold;
}
</style>
</head>
<body>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="../index.php">Gex Neural Academy</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 me-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="my-courses.php">My Courses</a>
</li>
<li class="nav-item">
<a class="nav-link" href="progress.php">Progress</a>
</li>
<li class="nav-item">
<a class="nav-link" href="certificates.php">Certificates</a>
</li>
</ul>
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown">
<i class="bi bi-person-circle"></i> <?php echo $_SESSION['user_name']; ?>
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="profile.php">Profile</a></li>
<li><a class="dropdown-item" href="settings.php">Settings</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item text-danger" href="../logout.php">Logout</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="../cart.php">
<i class="bi bi-cart3"></i>
<span class="cart-count badge bg-primary">0</span>
</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container-fluid py-4">
<div class="row">
<!-- Sidebar -->
<div class="col-lg-3 mb-4">
<div class="card dashboard-card">
<div class="card-body text-center">
<div class="mb-3">
<i class="bi bi-person-circle fs-1 text-primary"></i>
</div>
<h5><?php echo $_SESSION['user_name']; ?></h5>
<p class="text-muted">Student</p>
<div class="d-grid gap-2">
<a href="profile.php" class="btn btn-outline-primary btn-sm">Edit Profile</a>
</div>
</div>
</div>
<div class="card dashboard-card mt-4">
<div class="card-header bg-primary text-white">
<h6 class="mb-0">Quick Stats</h6>
</div>
<div class="card-body">
<div class="mb-3">
<small class="text-muted">Overall Progress</small>
<div class="progress mt-1">
<div class="progress-bar bg-success" style="width: <?php echo $stats['overall_progress'] ?? 0; ?>%"></div>
</div>
<small><?php echo round($stats['overall_progress'] ?? 0); ?>%</small>
</div>
<div class="row text-center">
<div class="col-6">
<h6 class="mb-0"><?php echo $stats['total_courses'] ?? 0; ?></h6>
<small class="text-muted">Courses</small>
</div>
<div class="col-6">
<h6 class="mb-0"><?php echo $stats['completed_courses'] ?? 0; ?></h6>
<small class="text-muted">Completed</small>
</div>
</div>
</div>
</div>
</div>
<!-- Main Content -->
<div class="col-lg-9">
<!-- Welcome Section -->
<div class="card dashboard-card mb-4">
<div class="card-body">
<div class="row align-items-center">
<div class="col-md-8">
<h3>Welcome back, <?php echo $_SESSION['user_name']; ?>! 👋</h3>
<p class="text-muted mb-0">Continue your learning journey and achieve your goals.</p>
</div>
<div class="col-md-4 text-end">
<div class="bg-primary text-white p-3 rounded">
<i class="bi bi-clock fs-4"></i>
<h5 class="mt-2 mb-0"><?php echo round(($stats['total_study_time'] ?? 0) / 60, 1); ?>h</h5>
<small>Total Study Time</small>
</div>
</div>
</div>
</div>
</div>
<!-- Statistics Cards -->
<div class="row mb-4">
<div class="col-xl-3 col-md-6 mb-4">
<div class="card dashboard-card border-left-primary">
<div class="card-body">
<div class="row align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-primary text-uppercase mb-1">
Enrolled Courses</div>
<div class="h5 mb-0 font-weight-bold text-gray-800"><?php echo $stats['total_courses'] ?? 0; ?></div>
</div>
<div class="col-auto">
<i class="bi bi-book fs-2 text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="card dashboard-card border-left-success">
<div class="card-body">
<div class="row align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-success text-uppercase mb-1">
Completed Courses</div>
<div class="h5 mb-0 font-weight-bold text-gray-800"><?php echo $stats['completed_courses'] ?? 0; ?></div>
</div>
<div class="col-auto">
<i class="bi bi-check-circle fs-2 text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="card dashboard-card border-left-info">
<div class="card-body">
<div class="row align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-info text-uppercase mb-1">
Overall Progress</div>
<div class="h5 mb-0 font-weight-bold text-gray-800"><?php echo round($stats['overall_progress'] ?? 0); ?>%</div>
</div>
<div class="col-auto">
<i class="bi bi-graph-up fs-2 text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="card dashboard-card border-left-warning">
<div class="card-body">
<div class="row align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-warning text-uppercase mb-1">
Study Time</div>
<div class="h5 mb-0 font-weight-bold text-gray-800"><?php echo round(($stats['total_study_time'] ?? 0) / 60, 1); ?>h</div>
</div>
<div class="col-auto">
<i class="bi bi-clock fs-2 text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<!-- Enrolled Courses -->
<div class="col-lg-8 mb-4">
<div class="card dashboard-card">
<div class="card-header d-flex justify-content-between align-items-center">
<h5 class="mb-0">My Courses</h5>
<a href="my-courses.php" class="btn btn-sm btn-outline-primary">View All</a>
</div>
<div class="card-body">
<div class="row">
<?php if($enrolled_courses->num_rows > 0): ?>
<?php while($course = $enrolled_courses->fetch_assoc()): ?>
<div class="col-md-6 mb-3">
<div class="card progress-card h-100">
<img src="<?php echo $course['image'] ? '../' . $course['image'] : '../assets/images/course-placeholder.jpg'; ?>"
class="card-img-top" alt="<?php echo $course['title']; ?>" style="height: 120px; object-fit: cover;">
<div class="card-body">
<h6 class="card-title"><?php echo $course['title']; ?></h6>
<div class="progress mb-2">
<div class="progress-bar bg-success" style="width: <?php echo $course['progress']; ?>%"></div>
</div>
<small class="text-muted"><?php echo $course['progress']; ?>% Complete</small>
</div>
<div class="card-footer">
<a href="course-player.php?course_id=<?php echo $course['id']; ?>" class="btn btn-primary btn-sm">Continue</a>
</div>
</div>
</div>
<?php endwhile; ?>
<?php else: ?>
<div class="col-12 text-center py-4">
<i class="bi bi-book fs-1 text-muted"></i>
<p class="text-muted mt-2">No courses enrolled yet.</p>
<a href="../courses.php" class="btn btn-primary">Browse Courses</a>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
<!-- Recent Activity -->
<div class="col-lg-4 mb-4">
<div class="card dashboard-card">
<div class="card-header">
<h5 class="mb-0">Recent Activity</h5>
</div>
<div class="card-body recent-activity">
<?php if($recent_activity->num_rows > 0): ?>
<?php while($activity = $recent_activity->fetch_assoc()): ?>
<div class="activity-item">
<h6 class="mb-1"><?php echo $activity['module_title']; ?></h6>
<p class="mb-1 small"><?php echo $activity['course_title']; ?></p>
<div class="d-flex justify-content-between">
<small class="text-muted">
<?php if($activity['is_completed']): ?>
<i class="bi bi-check-circle text-success"></i> Completed
<?php else: ?>
<i class="bi bi-play-circle text-primary"></i> In Progress
<?php endif; ?>
</small>
<small class="text-muted">
<?php echo date('M j', strtotime($activity['last_accessed'])); ?>
</small>
</div>
</div>
<?php endwhile; ?>
<?php else: ?>
<div class="text-center py-4">
<i class="bi bi-activity fs-1 text-muted"></i>
<p class="text-muted mt-2">No recent activity</p>
</div>
<?php endif; ?>
</div>
</div>
<!-- Quick Actions -->
<div class="card dashboard-card mt-4">
<div class="card-header">
<h5 class="mb-0">Quick Actions</h5>
</div>
<div class="card-body">
<div class="d-grid gap-2">
<a href="../courses.php" class="btn btn-outline-primary">
<i class="bi bi-plus-circle"></i> Browse Courses
</a>
<a href="certificates.php" class="btn btn-outline-success">
<i class="bi bi-award"></i> My Certificates
</a>
<a href="progress.php" class="btn btn-outline-info">
<i class="bi bi-graph-up"></i> View Progress
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="../assets/js/main.js"></script>
</body>
</html>