fix teacher submissions

This commit is contained in:
root
2026-03-30 18:46:04 -04:00
parent b2026812d5
commit b52475ff0b
8 changed files with 1012 additions and 70 deletions
+17
View File
@@ -25,6 +25,23 @@
<h3 class="mb-0">Class Progress Reports</h3>
<div class="text-muted">Filter by week, class, and status</div>
</div>
<div>
<?php
$lowProgressSectionIds = $lowProgressSectionIds ?? [];
$lowProgressQuery = implode(',', $lowProgressSectionIds);
$lowProgressUrl = base_url('administrator/teacher-submissions');
if ($lowProgressQuery !== '') {
$lowProgressUrl .= '?low_progress_sections=' . rawurlencode($lowProgressQuery);
}
?>
<a
class="btn btn-sm btn-outline-warning <?= empty($lowProgressSectionIds) ? 'disabled' : '' ?>"
href="<?= esc($lowProgressUrl) ?>"
<?= empty($lowProgressSectionIds) ? 'tabindex="-1" aria-disabled="true"' : '' ?>
>
Teachers &lt; 50%
</a>
</div>
</div>
</div>
@@ -21,6 +21,28 @@
$totalItems = max(0, (int)($summary['total_items'] ?? 0));
?>
<div class="card-body">
<?php
$termExamLabel = (isset($semester) && strtolower((string) $semester) === 'spring') ? 'Final' : 'Midterm';
?>
<?php if (session()->getFlashdata('success')): ?>
<div class="alert alert-success">
<?= esc(session()->getFlashdata('success')) ?>
</div>
<?php elseif (session()->getFlashdata('warning')): ?>
<div class="alert alert-warning">
<?= esc(session()->getFlashdata('warning')) ?>
</div>
<?php elseif (session()->getFlashdata('info')): ?>
<div class="alert alert-info">
<?= esc(session()->getFlashdata('info')) ?>
</div>
<?php endif; ?>
<?php $lowProgressSectionIds = $lowProgressSectionIds ?? []; ?>
<?php if (!empty($lowProgressSectionIds)): ?>
<div class="alert alert-warning">
Showing teachers for class sections with progress submissions below 50%.
</div>
<?php endif; ?>
<div class="border rounded-3 p-3 mb-4 bg-light">
<div class="d-flex flex-wrap gap-4 align-items-center">
<div>
@@ -56,17 +78,63 @@
>
<thead class="table-light">
<tr>
<th>Class Section</th>
<th>Teacher</th>
<th class="text-center">Midterm Score</th>
<th class="text-center">Midterm Comment</th>
<th class="text-center">Participation</th>
<th class="text-center">PTAP Comment</th>
<th>Class-Section</th>
<th>Teachers Name</th>
<th class="text-center">
<?= esc($termExamLabel) ?> Score
<div class="form-check d-inline-flex align-items-center gap-1 ms-2">
<input class="form-check-input" type="checkbox" name="notify_midterm_score" id="notifyMidtermScore" value="1">
<label class="form-check-label small" for="notifyMidtermScore">Include</label>
</div>
</th>
<th class="text-center">
<?= esc($termExamLabel) ?> Comment
<div class="form-check d-inline-flex align-items-center gap-1 ms-2">
<input class="form-check-input" type="checkbox" name="notify_midterm_comment" id="notifyMidtermComment" value="1">
<label class="form-check-label small" for="notifyMidtermComment">Include</label>
</div>
</th>
<th class="text-center">
Participation
<div class="form-check d-inline-flex align-items-center gap-1 ms-2">
<input class="form-check-input" type="checkbox" name="notify_participation" id="notifyParticipation" value="1">
<label class="form-check-label small" for="notifyParticipation">Include</label>
</div>
</th>
<th class="text-center">
PTAP Comment
<div class="form-check d-inline-flex align-items-center gap-1 ms-2">
<input class="form-check-input" type="checkbox" name="notify_ptap_comment" id="notifyPtapComment" value="1">
<label class="form-check-label small" for="notifyPtapComment">Include</label>
</div>
</th>
<th class="text-center">
Class Progress
<div class="form-check d-inline-flex align-items-center gap-1 ms-2">
<input class="form-check-input" type="checkbox" name="notify_class_progress" id="notifyClassProgress" value="1">
<label class="form-check-label small" for="notifyClassProgress">Include</label>
</div>
</th>
<th class="text-center">
Exam Draft
<div class="form-check d-inline-flex align-items-center gap-1 ms-2">
<input class="form-check-input" type="checkbox" name="notify_exam_draft" id="notifyExamDraft" value="1">
<label class="form-check-label small" for="notifyExamDraft">Include</label>
</div>
</th>
<th class="text-center">
Homework
<div class="form-check d-inline-flex align-items-center gap-1 ms-2">
<input class="form-check-input" type="checkbox" name="homework_notify_all" id="homeworkNotifyAll" value="1">
<label class="form-check-label small" for="homeworkNotifyAll">Include</label>
</div>
</th>
<th class="text-center">Notifications</th>
</tr>
</thead>
<tbody>
<?php if (!empty($rows)): ?>
<?php $homeworkToggleRendered = false; ?>
<?php foreach ($rows as $row): ?>
<tr>
<td><?= esc($row['class_section']) ?></td>
@@ -83,7 +151,9 @@
'midterm_score_status',
'midterm_comment_status',
'participation_status',
'ptap_comment_status'
'ptap_comment_status',
'class_progress_status',
'exam_draft_status',
] as $statusKey): ?>
<?php $status = $row[$statusKey] ?? ['label' => 'N/A', 'badge' => 'bg-secondary']; ?>
<td class="text-center">
@@ -95,6 +165,15 @@
<?php endif; ?>
</td>
<?php endforeach; ?>
<?php $homeworkStatus = $row['homework_status'] ?? ['label' => 'N/A', 'badge' => 'bg-secondary']; ?>
<td class="text-center">
<span class="badge <?= esc($homeworkStatus['badge'] ?? 'bg-secondary') ?>">
<?= esc($homeworkStatus['label'] ?? 'N/A') ?>
</span>
<?php if (!empty($homeworkStatus['detail'])): ?>
<div class="small text-muted"><?= esc($homeworkStatus['detail']) ?></div>
<?php endif; ?>
</td>
<td>
<?php if (!empty($row['teachers'])): ?>
<?php $missingPayload = base64_encode(json_encode($row['missing_items'] ?? [])); ?>
@@ -90,6 +90,7 @@
<td class="text-end">
<?php if ($exampleReport): ?>
<a href="<?= base_url('teacher/progress/view/' . $exampleReport['id']) ?>" class="btn btn-sm btn-outline-primary">View Weekly Details</a>
<a href="<?= base_url('teacher/progress/edit/' . $exampleReport['id']) ?>" class="btn btn-sm btn-outline-secondary ms-1">Edit</a>
<?php endif; ?>
</td>
</tr>
+127 -28
View File
@@ -1,12 +1,16 @@
<?= $this->extend('layout/main_layout') ?>
<?= $this->section('content') ?>
<?php
$isEdit = (bool) ($isEdit ?? false);
$formAction = $formAction ?? base_url('teacher/progress/store');
$submitLabel = $submitLabel ?? 'Submit Progress';
$hasClass = !empty($classSectionId);
$assignedClassName = $classSectionName ?? '';
$sundayOptions = $sundayOptions ?? [];
$defaultWeekStart = $defaultWeekStart ?? ($sundayOptions[0] ?? '');
$weekStartSelected = set_value('week_start', $defaultWeekStart);
$weekEndValue = set_value('week_end');
$weekEndValue = set_value('week_end', $existingWeekEnd ?? '');
$existingReports = $existingReports ?? [];
if (!$weekEndValue && $weekStartSelected) {
try {
$dt = new \DateTime($weekStartSelected);
@@ -31,9 +35,15 @@
<div class="d-flex flex-wrap align-items-center justify-content-between mb-3">
<div>
<h3 class="mb-0">
<?= esc($classSectionName ? "Class {$classSectionName} Progress Submission" : 'Class Progress Submission') ?>
<?php if ($isEdit): ?>
<?= esc($classSectionName ? "Edit {$classSectionName} Progress" : 'Edit Class Progress') ?>
<?php else: ?>
<?= esc($classSectionName ? "Class {$classSectionName} Progress Submission" : 'Class Progress Submission') ?>
<?php endif; ?>
</h3>
<div class="text-muted">Submit weekly progress for a single subject</div>
<div class="text-muted">
<?= $isEdit ? 'Update your weekly progress submission.' : 'Submit weekly progress for a single subject' ?>
</div>
</div>
<a href="<?= base_url('teacher/progress/history') ?>" class="btn btn-outline-secondary">My Submissions</a>
</div>
@@ -41,6 +51,10 @@
<?php if (session()->getFlashdata('success')): ?>
<div class="alert alert-success"><?= esc(session()->getFlashdata('success')) ?></div>
<?php endif; ?>
<?php $overwritePrompt = session()->getFlashdata('confirm_overwrite'); ?>
<?php if (session()->getFlashdata('warning') && ! $overwritePrompt): ?>
<div class="alert alert-warning"><?= esc(session()->getFlashdata('warning')) ?></div>
<?php endif; ?>
<?php if (session()->getFlashdata('error')): ?>
<div class="alert alert-danger"><?= esc(session()->getFlashdata('error')) ?></div>
<?php endif; ?>
@@ -54,33 +68,48 @@
</div>
<?php endif; ?>
<form action="<?= base_url('teacher/progress/store') ?>" method="post" enctype="multipart/form-data" class="needs-validation" novalidate>
<form action="<?= esc($formAction) ?>" method="post" enctype="multipart/form-data" class="needs-validation" novalidate>
<?= csrf_field() ?>
<input type="hidden" name="class_section_id" value="<?= esc($classSectionId ?? '') ?>">
<input type="hidden" name="confirm_overwrite" id="confirmOverwriteInput" value="0">
<div class="row g-3">
<div class="col">
<div class="card shadow-sm mb-3">
<div class="card-header bg-white d-flex flex-wrap align-items-center justify-content-between gap-3">
<strong class="mb-0">Date Selection</strong>
<div class="d-flex align-items-center gap-2">
<select id="weekStartSelect" name="week_start" class="form-select form-select-sm" required>
<option value="">Select week</option>
<?php foreach ($sundayOptions as $sunday): ?>
<?php
try {
$startDt = new \DateTime($sunday);
$displayStart = $startDt->format('M d, Y');
} catch (\Exception $e) {
$displayStart = $sunday;
}
?>
<option value="<?= esc($sunday) ?>" <?= $sunday === $weekStartSelected ? 'selected' : '' ?>>
<?= esc($displayStart) ?>
</option>
<?php endforeach; ?>
</select>
<div class="invalid-feedback">Week start is required.</div>
</div>
<?php if ($isEdit): ?>
<div class="text-muted small">
<?php
try {
$displayStart = (new \DateTime($weekStartSelected))->format('M d, Y');
} catch (\Exception $e) {
$displayStart = $weekStartSelected;
}
?>
Week of <?= esc($displayStart ?: 'N/A') ?>
</div>
<input type="hidden" name="week_start" value="<?= esc($weekStartSelected) ?>">
<?php else: ?>
<div class="d-flex align-items-center gap-2">
<select id="weekStartSelect" name="week_start" class="form-select form-select-sm" required>
<option value="">Select week</option>
<?php foreach ($sundayOptions as $sunday): ?>
<?php
try {
$startDt = new \DateTime($sunday);
$displayStart = $startDt->format('M d, Y');
} catch (\Exception $e) {
$displayStart = $sunday;
}
?>
<option value="<?= esc($sunday) ?>" <?= $sunday === $weekStartSelected ? 'selected' : '' ?>>
<?= esc($displayStart) ?>
</option>
<?php endforeach; ?>
</select>
<div class="invalid-feedback">Week start is required.</div>
</div>
<?php endif; ?>
</div>
<div class="card-body">
<input type="hidden" name="week_end" id="weekEndInput" value="<?= esc($weekEndValue) ?>" required>
@@ -96,8 +125,10 @@
?>
<?php foreach ($subjectSections as $slug => $section): ?>
<?php
$unitValues = old("unit_$slug") ?? [];
$chapterValues = old("chapter_$slug") ?? [];
$unitValues = old("unit_$slug") ?? ($existingReports[$slug]['unit_values'] ?? []);
$chapterValues = old("chapter_$slug") ?? ($existingReports[$slug]['chapter_values'] ?? []);
$coveredValue = old("covered_$slug", $existingReports[$slug]['covered'] ?? '');
$homeworkValue = old("homework_$slug", $existingReports[$slug]['homework'] ?? '');
$rowsCount = max(count($unitValues), count($chapterValues));
?>
<div class="col-lg-6">
@@ -188,11 +219,11 @@
</div>
<div class="mb-3">
<label class="form-label mb-1">What has been covered?</label>
<textarea name="covered_<?= esc($slug) ?>" class="form-control" rows="4" required placeholder="What was taught? Key topics, activities, memorization, etc."><?= esc(old("covered_$slug")) ?></textarea>
<textarea name="covered_<?= esc($slug) ?>" class="form-control" rows="4" required placeholder="What was taught? Key topics, activities, memorization, etc."><?= esc($coveredValue) ?></textarea>
</div>
<div class="mb-3">
<label class="form-label mb-1">Assigned homework:</label>
<textarea name="homework_<?= esc($slug) ?>" class="form-control" rows="3" placeholder="Homework, practice quizzes, review pages"><?= esc(old("homework_$slug")) ?></textarea>
<textarea name="homework_<?= esc($slug) ?>" class="form-control" rows="3" placeholder="Homework, practice quizzes, review pages"><?= esc($homeworkValue) ?></textarea>
</div>
<div class="mb-3">
<label class="form-label mb-1">Attachment (optional):</label>
@@ -207,7 +238,7 @@
<div class="col">
<div class="card shadow-sm">
<div class="card-body d-flex flex-column">
<button class="btn btn-primary w-100 mt-auto" type="submit" <?= $hasClass ? '' : 'disabled' ?>>Submit Progress</button>
<button class="btn btn-primary w-100 mt-auto" type="submit" <?= $hasClass ? '' : 'disabled' ?>><?= esc($submitLabel) ?></button>
<?php if (! $hasClass): ?>
<div class="text-muted small mt-2">
You are not assigned to a class. Contact the administrator to submit progress.
@@ -224,6 +255,51 @@
<?= $this->endSection() ?>
<?= $this->section('scripts') ?>
<?php
$submitSuccess = session()->getFlashdata('success');
$submitError = session()->getFlashdata('error');
$overwriteWarning = session()->getFlashdata('warning');
$overwritePrompt = session()->getFlashdata('confirm_overwrite');
?>
<?php if ($submitSuccess || $submitError): ?>
<div class="modal fade" id="submissionStatusModal" tabindex="-1" aria-labelledby="submissionStatusLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="submissionStatusLabel">
<?= $submitSuccess ? 'Submission Successful' : 'Submission Failed' ?>
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<?= esc($submitSuccess ?: $submitError) ?>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">OK</button>
</div>
</div>
</div>
</div>
<?php endif; ?>
<?php if ($overwritePrompt && $overwriteWarning): ?>
<div class="modal fade" id="overwriteConfirmModal" tabindex="-1" aria-labelledby="overwriteConfirmLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="overwriteConfirmLabel">Override Existing Report</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<?= esc($overwriteWarning) ?>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary" id="confirmOverwriteButton">Override</button>
</div>
</div>
</div>
</div>
<?php endif; ?>
<script>
(() => {
'use strict';
@@ -368,6 +444,29 @@
hideMenus();
});
});
const statusModalEl = document.getElementById('submissionStatusModal');
if (statusModalEl && typeof bootstrap !== 'undefined') {
const statusModal = new bootstrap.Modal(statusModalEl);
statusModal.show();
}
const overwriteModalEl = document.getElementById('overwriteConfirmModal');
if (overwriteModalEl && typeof bootstrap !== 'undefined') {
const overwriteModal = new bootstrap.Modal(overwriteModalEl);
overwriteModal.show();
const confirmButton = document.getElementById('confirmOverwriteButton');
const confirmInput = document.getElementById('confirmOverwriteInput');
if (confirmButton && confirmInput) {
confirmButton.addEventListener('click', () => {
confirmInput.value = '1';
const form = confirmButton.closest('form') || document.querySelector('form.needs-validation');
if (form) {
form.submit();
}
});
}
}
})();
</script>
<?= $this->endSection() ?>