/home/techb158/workloadmatch.com/workloadmatch.com/Manager
Edit: /home/techb158/workloadmatch.com/workloadmatch.com/Manager/Create_Group_Schedule_Algorithm.php (3828B)
prepare("SELECT Time_Slot, Time_From, Time_To, class_days, Weekend_Class FROM Manager_Group_Name WHERE Group_ID = ?");
$groupQuery->bind_param("i", $Group_ID);
$groupQuery->execute();
$groupResult = $groupQuery->get_result()->fetch_assoc();
$timeSlots = intval($groupResult['Time_Slot']);
$timeFrom = explode(',', $groupResult['Time_From']);
$timeTo = explode(',', $groupResult['Time_To']);
$classDays = explode(',', $groupResult['class_days']); // e.g., Mon,Tue,Wed
$weekend = $groupResult['Weekend_Class'];
// Get holidays
$holidays = [];
$events = $mysqli->query("SELECT Event_Start FROM Events WHERE Calendar_Year = YEAR('$Start_Date')");
while ($row = $events->fetch_assoc()) {
$holidays[] = $row['Event_Start'];
}
// Get retake days
$retakeDays = [];
$retakes = $mysqli->prepare("SELECT Retake_Date FROM Retake_Records WHERE Program_ID = ? AND Group_ID = ?");
$retakes->bind_param("ii", $Program_ID, $Group_ID);
$retakes->execute();
$retakeRes = $retakes->get_result();
while ($row = $retakeRes->fetch_assoc()) {
$retakeDays[] = $row['Retake_Date'];
}
// Generate valid dates between start and end
$current = new DateTime($Start_Date);
$end = new DateTime($End_Date);
$calendar = [];
while ($current <= $end) {
$dayName = $current->format('D');
$dateStr = $current->format('Y-m-d');
if (in_array($dayName, $classDays) && !in_array($dateStr, $holidays) && !in_array($dateStr, $retakeDays)) {
$calendar[] = $dateStr;
}
$current->modify('+1 day');
}
// Sort courses by priority
usort($selectedCourses, function($a, $b) use ($priorityCourses) {
return (in_array($a, $priorityCourses) ? 0 : 1) - (in_array($b, $priorityCourses) ? 0 : 1);
});
// Prepare schedule slots
$schedule = [];
$dateIndex = 0;
foreach ($selectedCourses as $Course_ID) {
$sessions = intval($courseSessions[$Course_ID] ?? 1);
for ($i = 0; $i < $sessions; $i++) {
if (!isset($calendar[$dateIndex])) break;
$date = $calendar[$dateIndex];
for ($slot = 0; $slot < $timeSlots && $i < $sessions; $slot++, $i++) {
if (!isset($timeFrom[$slot]) || !isset($timeTo[$slot])) continue;
$schedule[] = [
'Course_ID' => $Course_ID,
'Date' => $date,
'Time_Slot' => $slot + 1,
'Time_From' => $timeFrom[$slot],
'Time_To' => $timeTo[$slot]
];
}
$dateIndex++;
$i--; // Compensate for loop increment if only one slot per day
}
}
// Display the results
echo "
Generated Schedule
";
echo "
| Date | Slot | Time | Course ID |
";
foreach ($schedule as $row) {
echo "
| {$row['Date']} |
Slot {$row['Time_Slot']} |
{$row['Time_From']} - {$row['Time_To']} |
{$row['Course_ID']} |
";
}
echo "
";
}
?>