where('is_published', 1) ->orderBy('published_at', 'DESC') ->findAll(); return view('winners/competitions/index', [ 'competitions' => $competitions, ]); } public function competitionShow($id) { $competitionModel = new CompetitionModel(); $winnerModel = new CompetitionWinnerModel(); $classSectionModel = new ClassSectionModel(); $classWinnerModel = new CompetitionClassWinnerModel(); $competition = $competitionModel->where('is_published', 1)->find($id); if (!$competition) { return redirect()->to('/winners/competitions'); } $winners = $winnerModel ->select('competition_winners.*, s.firstname, s.lastname, cs.class_section_name') ->join('students s', 's.id = competition_winners.student_id', 'left') ->join('classSection cs', 'cs.class_section_id = competition_winners.class_section_id', 'left') ->where('competition_id', $id) ->orderBy('competition_winners.class_section_id', 'ASC') ->orderBy('rank', 'ASC') ->findAll(); $sectionMap = []; $classSections = $classSectionModel ->select('class_section_id, class_section_name') ->findAll(); foreach ($classSections as $section) { $sid = (int) ($section['class_section_id'] ?? 0); if ($sid > 0) { $sectionMap[$sid] = $section['class_section_name'] ?? (string) $sid; } } $winnersByClass = []; foreach ($winners as $w) { $classId = (int) ($w['class_section_id'] ?? 0); $name = trim(($w['firstname'] ?? '') . ' ' . ($w['lastname'] ?? '')); $w['name'] = $name !== '' ? $name : ('Student #' . $w['student_id']); $winnersByClass[$classId][] = $w; } $questionCounts = []; $qRows = $classWinnerModel ->select('class_section_id, question_count') ->where('competition_id', $id) ->findAll(); foreach ($qRows as $row) { $classId = (int) ($row['class_section_id'] ?? 0); if ($classId > 0 && $row['question_count'] !== null) { $questionCounts[$classId] = (int) $row['question_count']; } } return view('winners/competitions/show', [ 'competition' => $competition, 'winnersByClass' => $winnersByClass, 'sectionMap' => $sectionMap, 'questionCounts' => $questionCounts, ]); } }