37970-vm/analytics.php
Flatlogic Bot 7a517224e6 v5
2026-01-30 15:02:53 +00:00

123 lines
5.6 KiB
PHP

<?php
session_start();
require_once 'db/config.php';
if (!isset($_SESSION['user_id']) || !in_array($_SESSION['role'], ['Admin', 'Teacher', 'Super Admin'])) {
header('Location: login.php');
exit;
}
$school_id = $_SESSION['school_id'];
$role = $_SESSION['role'];
// Fetch grade-level averages
$query = "
SELECT
l.grade,
AVG((m.marks_obtained / a.total_marks) * 100) as average_percentage,
COUNT(DISTINCT l.id) as student_count,
COUNT(DISTINCT a.id) as assessment_count
FROM learners l
JOIN marks m ON l.id = m.learner_id
JOIN assessments a ON m.assessment_id = a.id
WHERE l.school_id = :school_id
GROUP BY l.grade
ORDER BY l.grade ASC
";
$stmt = db()->prepare($query);
$stmt->execute(['school_id' => $school_id]);
$grade_stats = $stmt->fetchAll();
$pageTitle = "Grade Performance Analytics";
include 'includes/header.php';
?>
<div class="container mt-5">
<div class="d-flex justify-content-between align-items-center mb-4">
<h2><i class="bi bi-bar-chart-line me-2"></i>Grade Performance Analytics</h2>
<button onclick="window.print()" class="btn btn-outline-primary d-print-none">
<i class="bi bi-printer me-2"></i>Print Report
</button>
</div>
<div class="row">
<div class="col-md-12 mb-4">
<div class="card shadow-sm border-0">
<div class="card-body">
<h5 class="card-title mb-4">Grade-Level Comparison</h5>
<?php if (empty($grade_stats)): ?>
<div class="alert alert-info">No assessment data available for comparison yet.</div>
<?php else: ?>
<div class="table-responsive">
<table class="table table-hover align-middle">
<thead class="table-light">
<tr>
<th>Grade</th>
<th>Avg. Performance</th>
<th>Students</th>
<th>Assessments</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<?php foreach ($grade_stats as $stat): ?>
<?php
$avg = round($stat['average_percentage'], 1);
$badgeClass = $avg >= 70 ? 'bg-success' : ($avg >= 50 ? 'bg-warning text-dark' : 'bg-danger');
?>
<tr>
<td class="fw-bold"><?php echo htmlspecialchars($stat['grade']); ?></td>
<td>
<div class="d-flex align-items-center">
<div class="progress flex-grow-1 me-3" style="height: 10px;">
<div class="progress-bar <?php echo $badgeClass; ?>" role="progressbar" style="width: <?php echo $avg; ?>%"></div>
</div>
<span class="fw-bold"><?php echo $avg; ?>%</span>
</div>
</td>
<td><?php echo $stat['student_count']; ?></td>
<td><?php echo $stat['assessment_count']; ?></td>
<td>
<span class="badge <?php echo $badgeClass; ?>">
<?php echo $avg >= 70 ? 'Excellent' : ($avg >= 50 ? 'Satisfactory' : 'Critical'); ?>
</span>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
<div class="row mt-4">
<div class="col-md-6 mb-4">
<div class="card h-100 shadow-sm border-0 bg-light">
<div class="card-body">
<h6><i class="bi bi-info-circle me-2"></i>Insights</h6>
<p class="text-muted small">
This data represents the average score across all subjects and assessments for each grade level in your school.
Use this to identify grades that may require additional resources or intervention.
</p>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card h-100 shadow-sm border-0 bg-light">
<div class="card-body">
<h6><i class="bi bi-lightbulb me-2"></i>Recommendations</h6>
<ul class="text-muted small">
<li>Grades below 50% should be flagged for curriculum review.</li>
<li>High-performing grades can serve as models for peer-teacher coaching.</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<?php include 'includes/footer.php'; ?>