studentModel = new StudentModel(); $this->scheduleModel = new ScheduleModel(); } /** * Get active schedule for a student at a specific datetime * * Rules: * - Find student's class_id * - Determine day_of_week from datetime (1=Monday, 7=Sunday) * - Find schedule where start_time <= time < end_time * * @param int $studentId Student ID * @param string $datetime Datetime string (Y-m-d H:i:s format) * @return array|null Returns schedule detail or null if not found */ public function getActiveSchedule(int $studentId, string $datetime): ?array { // Find student $student = $this->studentModel->find($studentId); if (!$student) { return null; } // Get class_id from student $classId = $student->class_id; // Parse datetime to get day of week and time $timestamp = strtotime($datetime); if ($timestamp === false) { return null; } // Get day of week (1=Monday, 7=Sunday) // PHP date('N') returns 1-7 (Monday-Sunday) $dayOfWeek = (int) date('N', $timestamp); // Get time in H:i:s format $time = date('H:i:s', $timestamp); // Find active schedule (lesson_slots/users as source of truth with fallback to schedule columns) $row = $this->scheduleModel->getActiveScheduleRow($classId, $dayOfWeek, $time); if ($row === null) { return null; } return [ 'schedule_id' => $row['id'], 'class_id' => $row['class_id'], 'subject_id' => $row['subject_id'], 'teacher_name' => $row['teacher_name'], 'room' => $row['room'], 'start_time' => $row['start_time'], 'end_time' => $row['end_time'], ]; } }