/home/techb158/workloadmatch.com/Manager/Inc
Edit: /home/techb158/workloadmatch.com/Manager/Inc/ScheduleEngine.php (5596B)
db = $db;
}
public function getGroupInfo(int $groupId): ?array {
$stmt = $this->db->prepare("
SELECT Time_Slot, Time_From, Time_To, class_days, Weekend_Class, Group_Name
FROM manager_group_name WHERE Group_ID = ?
");
$stmt->bind_param("i", $groupId);
$stmt->execute();
$result = $stmt->get_result()->fetch_assoc();
$stmt->close();
return $result ?: null;
}
public function fetchSlotTimes(array $slotLabels, DateTime $managerStart, DateTime $managerEnd): array {
$timeFrom = [];
$timeTo = [];
foreach ($slotLabels as $label) {
$label = trim($label);
$stmt = $this->db->prepare("SELECT Time_From, Time_To FROM time_slot_programs WHERE Time_Slot = ?");
$stmt->bind_param("s", $label);
$stmt->execute();
$result = $stmt->get_result();
$validSlotFound = false;
while ($row = $result->fetch_assoc()) {
$slotStart = new DateTime($row['Time_From']);
$slotEnd = new DateTime($row['Time_To']);
if ($slotStart >= $managerStart && $slotEnd <= $managerEnd) {
$timeFrom[] = $slotStart->format("H:i:s");
$timeTo[] = $slotEnd->format("H:i:s");
$validSlotFound = true;
break;
}
}
if (!$validSlotFound && count($slotLabels) === 1) {
$timeFrom[] = $managerStart->format("H:i:s");
$timeTo[] = $managerEnd->format("H:i:s");
}
$stmt->close();
}
return [$timeFrom, $timeTo];
}
public function getHolidays(string $startDate): array {
$holidays = [];
$res = $this->db->query("SELECT Event_Start, Event_End FROM Events WHERE Calendar_Year = YEAR('$startDate')");
while ($row = $res->fetch_assoc()) {
$start = new DateTime($row['Event_Start']);
$end = new DateTime($row['Event_End']);
while ($start <= $end) {
$holidays[] = $start->format('Y-m-d');
$start->modify('+1 day');
}
}
return $holidays;
}
public function getRetakeDates(int $programId, int $groupId): array {
$retakeDates = [];
$stmt = $this->db->prepare("SELECT Retake_Date FROM retake_records WHERE Program_ID = ? AND Group_ID = ?");
$stmt->bind_param("ii", $programId, $groupId);
$stmt->execute();
$res = $stmt->get_result();
while ($row = $res->fetch_assoc()) {
$retakeDates[] = $row['Retake_Date'];
}
$stmt->close();
return $retakeDates;
}
public function generateValidDates(string $startDate, ?string $endDate, array $classDays, array $holidayDates, array $retakeDates): array {
$validDates = [];
$cur = new DateTime($startDate);
$end = $endDate ? new DateTime($endDate) : null;
while (!$end || $cur <= $end) {
$day = $cur->format('l');
$dateStr = $cur->format('Y-m-d');
$month = (int)$cur->format('m');
if ($month === 7 || !in_array($day, $classDays) || in_array($dateStr, $holidayDates) || in_array($dateStr, $retakeDates)) {
$cur->modify('+1 day');
continue;
}
$validDates[] = $dateStr;
$cur->modify('+1 day');
if ($end === null && count($validDates) > 365) break;
}
return $validDates;
}
public function calculateSessionLength(array $timeFrom, array $timeTo): float {
$sessionLength = 0;
foreach ($timeFrom as $i => $from) {
$fromTime = new DateTime($from);
$toTime = new DateTime($timeTo[$i]);
$sessionLength += ($toTime->getTimestamp() - $fromTime->getTimestamp()) / 3600;
}
$slotCount = count($timeFrom);
return $slotCount > 0 ? $sessionLength / $slotCount : 3;
}
public function calculateCourseSessions(int $programId, float $sessionLength): array {
$courseSessions = [];
$res = $this->db->query("SELECT Course_ID, Course_Time FROM Courses WHERE Program_ID = $programId");
while ($row = $res->fetch_assoc()) {
$courseSessions[$row['Course_ID']] = (int)ceil($row['Course_Time'] / $sessionLength);
}
return $courseSessions;
}
public function formatTimeSlotLabel(string $slot, string $day): string {
if ($day === 'Saturday') {
if (stripos($slot, 'evening') !== false) return 'Morning (Sat)';
if (stripos($slot, 'morning') !== false) return 'Morning';
}
return $slot;
}
public function formatTimeSlotRange(string $slot, string $start, string $end, string $day): string {
if ($day === 'Saturday') {
if (stripos($slot, 'morning') !== false) return "08:30 AM - 12:30 PM";
if (stripos($slot, 'evening') !== false) return "09:00 AM - 01:00 PM";
}
return date('h:i A', strtotime($start)) . ' - ' . date('h:i A', strtotime($end));
}
public function getCourseNames(): array {
$names = [];
$res = $this->db->query("SELECT Course_ID, Course_Name FROM Courses");
while ($row = $res->fetch_assoc()) {
$names[$row['Course_ID']] = $row['Course_Name'];
}
return $names;
}
}