Files
alrahma_sunday_school/app/Controllers/WinnersController.php
T
2026-02-10 22:11:06 -05:00

87 lines
3.0 KiB
PHP

<?php
namespace App\Controllers;
use App\Controllers\BaseController;
use App\Models\ClassSectionModel;
use App\Models\CompetitionClassWinnerModel;
use App\Models\CompetitionModel;
use App\Models\CompetitionWinnerModel;
class WinnersController extends BaseController
{
public function competitionIndex()
{
$competitionModel = new CompetitionModel();
$competitions = $competitionModel
->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,
]);
}
}