exam draft fix
This commit is contained in:
@@ -6,6 +6,7 @@ use App\Controllers\BaseController;
|
||||
use App\Models\ClassSectionModel;
|
||||
use App\Models\ConfigurationModel;
|
||||
use App\Models\ExamDraftModel;
|
||||
use App\Models\StudentClassModel;
|
||||
use App\Models\TeacherClassModel;
|
||||
use App\Models\UserModel;
|
||||
use CodeIgniter\HTTP\Files\UploadedFile;
|
||||
@@ -16,6 +17,7 @@ class ExamDraftController extends BaseController
|
||||
protected ExamDraftModel $examDraftModel;
|
||||
protected TeacherClassModel $teacherClassModel;
|
||||
protected ClassSectionModel $classSectionModel;
|
||||
protected StudentClassModel $studentClassModel;
|
||||
protected UserModel $userModel;
|
||||
protected ConfigurationModel $configModel;
|
||||
|
||||
@@ -57,6 +59,7 @@ class ExamDraftController extends BaseController
|
||||
$this->examDraftModel = new ExamDraftModel();
|
||||
$this->teacherClassModel = new TeacherClassModel();
|
||||
$this->classSectionModel = new ClassSectionModel();
|
||||
$this->studentClassModel = new StudentClassModel();
|
||||
$this->userModel = new UserModel();
|
||||
$this->configModel = new ConfigurationModel();
|
||||
$this->db = Database::connect();
|
||||
@@ -419,6 +422,52 @@ class ExamDraftController extends BaseController
|
||||
}
|
||||
unset($group);
|
||||
|
||||
$classSectionsById = [];
|
||||
foreach ($classSections as $cs) {
|
||||
$csId = (int) ($cs['class_section_id'] ?? 0);
|
||||
if ($csId <= 0) {
|
||||
continue;
|
||||
}
|
||||
$classSectionsById[$csId] = $cs;
|
||||
}
|
||||
|
||||
$studentCounts = $this->studentClassModel->getStudentCountsBySection($this->schoolYear);
|
||||
$visibleClasses = [];
|
||||
foreach ($studentCounts as $csId => $count) {
|
||||
$csId = (int) $csId;
|
||||
if ($csId <= 0 || $count <= 0) {
|
||||
continue;
|
||||
}
|
||||
$classData = $classSectionsById[$csId] ?? $this->classSectionModel->where('class_section_id', $csId)->first();
|
||||
if ($classData === null) {
|
||||
$classData = [
|
||||
'class_section_id' => $csId,
|
||||
'class_section_name' => 'Class ' . $csId,
|
||||
];
|
||||
}
|
||||
$classData['student_count'] = $count;
|
||||
$visibleClasses[$csId] = $classData;
|
||||
}
|
||||
uasort($visibleClasses, static fn ($a, $b): int => strcasecmp($a['class_section_name'] ?? '', $b['class_section_name'] ?? ''));
|
||||
|
||||
$classDraftGroups = [];
|
||||
foreach ($drafts as $draft) {
|
||||
$cid = (int) ($draft['class_section_id'] ?? 0);
|
||||
if ($cid <= 0) {
|
||||
continue;
|
||||
}
|
||||
$classDraftGroups[$cid][] = $draft;
|
||||
}
|
||||
$newSubmissionClasses = [];
|
||||
foreach ($classDraftGroups as $cid => $group) {
|
||||
foreach ($group as $draft) {
|
||||
if (strtolower((string) ($draft['status'] ?? '')) === 'submitted') {
|
||||
$newSubmissionClasses[$cid] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return view('administrator/exam_drafts', [
|
||||
'drafts' => $drafts,
|
||||
'statusBadges' => $this->statusBadgeMap(),
|
||||
@@ -430,6 +479,9 @@ class ExamDraftController extends BaseController
|
||||
'classSections' => $classSections,
|
||||
'legacyByClass' => $legacyByClass,
|
||||
'printableDraftIds' => $printableIds,
|
||||
'visibleClasses' => $visibleClasses,
|
||||
'classDraftGroups' => $classDraftGroups,
|
||||
'newSubmissionClasses' => $newSubmissionClasses,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -657,6 +709,9 @@ class ExamDraftController extends BaseController
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($status === 'legacy') {
|
||||
$this->prepareLegacyPdfVersion($update, $draft);
|
||||
}
|
||||
if ($this->hasIsLegacyColumn) {
|
||||
$update['is_legacy'] = strtolower($status) === 'legacy' ? 1 : 0;
|
||||
}
|
||||
@@ -875,7 +930,7 @@ class ExamDraftController extends BaseController
|
||||
$teacherName = 'Teacher #' . $teacherId;
|
||||
}
|
||||
|
||||
$class = $this->classSectionModel->find($classSectionId) ?? [];
|
||||
$class = $this->classSectionModel->where('class_section_id', (int) $classSectionId)->first() ?? [];
|
||||
$className = $class['class_section_name'] ?? ('Class ' . $classSectionId);
|
||||
|
||||
$subject = 'Exam draft submitted: ' . $className;
|
||||
@@ -1321,4 +1376,44 @@ class ExamDraftController extends BaseController
|
||||
}
|
||||
return $destName;
|
||||
}
|
||||
|
||||
private function prepareLegacyPdfVersion(array &$update, array $draft): void
|
||||
{
|
||||
$finalFile = $update['final_file'] ?? $draft['final_file'] ?? null;
|
||||
if (empty($finalFile)) {
|
||||
$teacherFile = $this->draftTeacherFile($draft);
|
||||
if (!empty($teacherFile)) {
|
||||
$copied = $this->copyDraftToFinal($teacherFile);
|
||||
if ($copied !== null) {
|
||||
$finalFile = $copied;
|
||||
$update['final_file'] = $copied;
|
||||
$update['final_filename'] = $this->draftTeacherFilename($draft) ?? $teacherFile;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (empty($finalFile)) {
|
||||
return;
|
||||
}
|
||||
$ext = strtolower(pathinfo($finalFile, PATHINFO_EXTENSION));
|
||||
$pdfName = $this->ensurePdfExists($finalFile, $ext);
|
||||
if ($pdfName === null) {
|
||||
return;
|
||||
}
|
||||
$filename = $update['final_filename'] ?? $draft['final_filename'] ?? '';
|
||||
$baseName = '';
|
||||
if ($filename !== '') {
|
||||
$baseName = pathinfo($filename, PATHINFO_FILENAME);
|
||||
}
|
||||
if ($baseName === '') {
|
||||
$baseName = pathinfo($pdfName, PATHINFO_FILENAME);
|
||||
}
|
||||
if ($baseName === '') {
|
||||
$baseName = 'exam';
|
||||
}
|
||||
$update['final_file'] = $pdfName;
|
||||
$update['final_filename'] = $baseName . '.pdf';
|
||||
if ($this->hasFinalPdfColumn) {
|
||||
$update['final_pdf_file'] = $pdfName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user