/home/techb158/workloadmatch.com/Manager
Edit: /home/techb158/workloadmatch.com/Manager/fetch_dashboard_charts.php (4282B)
'Unauthorized']);
exit;
}
$Manager_ID = get_effective_id();
$semesterYear = (int)($_POST['semester_year'] ?? 0);
if (!$semesterYear) {
echo json_encode(['error' => 'Missing semester year']);
exit;
}
$augustFirst = new DateTime("$semesterYear-08-01");
$dayOfWeek = (int)$augustFirst->format('N');
$daysUntilMonday = ($dayOfWeek === 1) ? 0 : (8 - $dayOfWeek) % 7;
$semesterStart = clone $augustFirst;
$semesterStart->modify("+$daysUntilMonday days");
$semesterEnd = new DateTime(($semesterYear + 1) . '-06-30');
$semStartStr = $semesterStart->format('Y-m-d');
$semEndStr = $semesterEnd->format('Y-m-d');
// Monthly assignments
$monthlyData = array_fill(1, 12, 0);
$stmt = $mysqli->prepare("
SELECT MONTH(Assigned_At) AS Month, COUNT(*) AS Count
FROM teacher_course_assignments
WHERE Teacher_ID IN (SELECT Teacher_ID FROM teacher_profile WHERE Manager_ID = ?)
AND Assigned_At IS NOT NULL
AND Assigned_At >= ? AND Assigned_At <= ?
GROUP BY MONTH(Assigned_At)
");
if ($stmt) {
$stmt->bind_param("sss", $Manager_ID, $semStartStr, $semEndStr);
$stmt->execute();
$res = $stmt->get_result();
while ($row = $res->fetch_assoc()) {
$monthlyData[(int)$row['Month']] = (int)$row['Count'];
}
$stmt->close();
}
$monthNames = ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
$monthlyChartData = [];
for ($m = 1; $m <= 12; $m++) {
$monthlyChartData[] = ['label' => $monthNames[$m], 'count' => $monthlyData[$m]];
}
// Time Slot distribution (semester-scoped via Start_Date)
$timeSlotData = ['Morning' => 0, 'Afternoon' => 0, 'Evening' => 0, 'Other' => 0];
$stmt = $mysqli->prepare("
SELECT Time_Slot, COUNT(*) AS Count
FROM teacher_course_assignments
WHERE Teacher_ID IN (SELECT Teacher_ID FROM teacher_profile WHERE Manager_ID = ?)
AND Start_Date >= ? AND End_Date <= ?
GROUP BY Time_Slot
");
if ($stmt) {
$stmt->bind_param("sss", $Manager_ID, $semStartStr, $semEndStr);
$stmt->execute();
$res = $stmt->get_result();
while ($row = $res->fetch_assoc()) {
$slot = $row['Time_Slot'];
if (isset($timeSlotData[$slot])) {
$timeSlotData[$slot] = (int)$row['Count'];
} else {
$timeSlotData['Other'] += (int)$row['Count'];
}
}
$stmt->close();
}
// Top 10 assigned courses (semester-scoped)
$topCoursesData = [];
$stmt = $mysqli->prepare("
SELECT c.Course_Name, COUNT(*) AS AssignCount
FROM teacher_course_assignments tca
JOIN Courses c ON tca.Course_ID = c.Course_ID
WHERE tca.Teacher_ID IN (SELECT Teacher_ID FROM teacher_profile WHERE Manager_ID = ?)
AND tca.Start_Date >= ? AND tca.End_Date <= ?
GROUP BY c.Course_ID
ORDER BY AssignCount DESC
LIMIT 10
");
if ($stmt) {
$stmt->bind_param("sss", $Manager_ID, $semStartStr, $semEndStr);
$stmt->execute();
$res = $stmt->get_result();
while ($row = $res->fetch_assoc()) {
$topCoursesData[] = $row;
}
$stmt->close();
}
// Program distribution (semester-scoped)
$programData = [];
$stmt = $mysqli->prepare("
SELECT p.Program_Name, COUNT(DISTINCT tca.Course_ID) AS CourseCount, COUNT(tca.Assignment_ID) AS AssignCount
FROM teacher_course_assignments tca
JOIN Programs p ON tca.Program_ID = p.Program_ID
WHERE tca.Teacher_ID IN (SELECT Teacher_ID FROM teacher_profile WHERE Manager_ID = ?)
AND tca.Start_Date >= ? AND tca.End_Date <= ?
GROUP BY p.Program_ID
ORDER BY AssignCount DESC
");
if ($stmt) {
$stmt->bind_param("sss", $Manager_ID, $semStartStr, $semEndStr);
$stmt->execute();
$res = $stmt->get_result();
while ($row = $res->fetch_assoc()) {
$programData[] = $row;
}
$stmt->close();
}
echo json_encode([
'monthlyChartData' => $monthlyChartData,
'timeSlotData' => $timeSlotData,
'topCoursesData' => $topCoursesData,
'programData' => $programData
], JSON_UNESCAPED_UNICODE);