Files
alrahma_sunday_school/app/Views/parent/register_student.php
T
2026-02-10 22:11:06 -05:00

351 lines
15 KiB
PHP

<?php
$disableStudentBtn = count($existingKids) >= $maxChilds;
$disableEmergencyBtn = count($emergencies) >= $maxEmergency;
?>
<?= $this->extend('layout/main_layout') ?>
<?= $this->section('content') ?>
<div class="container my-5">
<h3 class="text-center text-success mb-3" style="font-family: Arial, sans-serif;">Student Registration</h3>
<?php if ($disableStudentBtn): ?>
<div class="alert alert-info mt-2">You've reached the maximum number of students (<?= $maxChilds ?>).</div>
<?php endif; ?>
<?php if ($disableEmergencyBtn): ?>
<!--div class="alert alert-info mt-2">You've reached the maximum number of emergency contacts (<--?= $maxEmergency ?>).</div-->
<?php endif; ?>
<?php if (session()->getFlashdata('error')): ?>
<div class="alert alert-danger">
<?= esc(session()->getFlashdata('error')) ?>
</div>
<?php endif; ?>
<?php if (session('errors')): ?>
<div class="alert alert-danger">
<ul>
<?php foreach (session('errors') as $error): ?>
<li><?= esc($error) ?></li>
<?php endforeach ?>
</ul>
</div>
<?php endif; ?>
<?php
// Check if at least one student is not enrolled
$hasUnenrolled = false;
foreach ($existingKids as $kid) {
if ($kid['enrollment'] == 0) {
$hasUnenrolled = true;
break;
}
}
?>
<?php if ($hasUnenrolled): ?>
<div class="p-3 mb-4 border border-danger rounded bg-light text-center">
<h5 class="text-danger mb-2">
⚠ Please ensure that all of your students are enrolled.
</h5>
<p class="mb-3">
Please complete their enrollment using the button below to ensure they are able to attend classes.
</p>
<a href="<?= base_url('/parent/enroll_classes') ?>"
class="btn btn-lg btn-success bi bi-pencil-square"
data-bs-toggle="tooltip"
data-bs-placement="bottom"
title="Enroll registered students in their appropriate grade level or course.">
Enroll in Classes
</a>
</div>
<?php endif; ?>
<?php if (!empty($existingKids)): ?>
<h5>Student Information</h5>
<table class="table table-bordered">
<thead class="table-light">
<tr>
<th>School ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>DOB</th>
<th>Grade</th>
<th>Medical Conditions</th>
<th>Allergies</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php foreach ($existingKids as $kid): ?>
<tr>
<td><?= esc($kid['school_id']) ?></td>
<td><?= esc($kid['firstname']) ?></td>
<td><?= esc($kid['lastname']) ?></td>
<td><?= esc((new DateTime($kid['dob']))->format('m-d-Y')) ?></td>
<td><?= esc($kid['registration_grade']) ?></td>
<td>
<?php
$mc = is_array($kid['medical_conditions'] ?? null)
? $kid['medical_conditions']
: (strlen($kid['medical_conditions'] ?? '') > 0
? array_map('trim', explode(',', $kid['medical_conditions']))
: ['N/A']);
// Escape each item, then join with real <br> (not escaped)
echo implode('<br>', array_map('esc', $mc));
?>
</td>
<td>
<?php
$al = is_array($kid['allergies'] ?? null)
? $kid['allergies']
: (strlen($kid['alalergies'] ?? '') > 0
? array_map('trim', explode(',', $kid['allergies']))
: ['N/A']);
echo implode('<br>', array_map('esc', $al));
?>
</td>
<td class="text-center">
<?php if ($kid['enrollment'] == 0): ?>
<form action="<?= base_url('/parent/delete_student/' . $kid['id']) ?>"
method="post"
style="display:inline">
<?= csrf_field() ?>
<button
type="button"
class="btn btn-sm btn-outline-danger"
aria-label="Delete this student"
title="Delete this student"
onclick="if (confirm('Are you sure you want to delete this student?')) { this.closest('form').submit(); }">
<i class="fas fa-trash" aria-hidden="true"></i>
<span class="ms-1">Delete</span>
</button>
</form>
<?php else: ?>
<button type="button" class="btn btn-sm btn-outline-secondary" disabled title="Student is already enrolled">
<i class="fas fa-ban"></i> Delete
</button>
<?php endif; ?>
</td>
</tr>
<?php $student = $kid; ?>
<?php include(APPPATH . 'Views/parent/edit_student_modal.php'); ?>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
<?php if (!empty($emergencies)): ?>
<h5 class="mt-4">Emergency Contacts</h5>
<table class="table table-bordered">
<thead class="table-light">
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Phone</th>
<th>Relation</th>
</tr>
</thead>
<tbody>
<?php foreach ($emergencies as $contact): ?>
<?php
$fullName = $contact['emergency_contact_name'] ?? '';
$nameParts = explode(' ', trim($fullName), 2);
$firstName = $nameParts[0] ?? '';
$lastName = $nameParts[1] ?? '';
?>
<tr>
<td><?= esc($firstName) ?></td>
<td><?= esc($lastName) ?></td>
<td><?= esc($contact['cellphone']) ?></td>
<td><?= esc($contact['relation']) ?></td>
</tr>
<?php include(APPPATH . 'Views/parent/edit_emergency_contact.php'); ?>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
<?php
$today = local_date(utc_now(), 'Y-m-d');
$disableDueToDate = ($today >= $lastDayOfRegistration);
$disableAll = $disableStudentBtn || $disableDueToDate;
?>
<form action="<?= base_url('/parent/register_student/save') ?>"
method="post"
id="studentRegistrationForm"
data-max-students="<?= $maxChilds ?>"
data-existing-students="<?= count($existingKids) ?>"
data-max-emergency="<?= $maxEmergency ?>"
data-existing-emergencies="<?= count($emergencies) ?>">
<?= csrf_field() ?>
<div id="studentFormsContainer"></div>
<div id="emergencyFormsContainer"></div>
<div class="text-center mb-3" id="initialButtons">
<button type="button"
class="btn btn-outline-primary me-2 <?= $disableAll ? 'disabled' : '' ?>"
id="addStudentBtn"
title="<?php
if ($disableStudentBtn) {
echo "Maximum of $maxChilds students reached.";
} elseif ($disableDueToDate) {
echo "Registration is closed after $lastDayOfRegistration.";
}
?>"
<?= $disableAll ? 'disabled' : '' ?>>
<i class="fas fa-user-plus"></i> Add Student
</button>
</div>
<div class="text-center mb-3 d-none" id="formActionButtons">
<button type="button"
class="btn btn-outline-primary me-2 <?= $disableAll ? 'disabled' : '' ?>"
id="addAnotherStudentBtn"
title="<?php
if ($disableStudentBtn) {
echo "Maximum of $maxChilds students reached.";
} elseif ($disableDueToDate) {
echo "Registration is closed after $lastDayOfRegistration.";
}
?>"
<?= $disableAll ? 'disabled' : '' ?>>
<i class="fas fa-user-plus"></i> Add Another Student
</button>
<button type="button"
class="btn btn-outline-primary me-2"
id="doneWithStudentBtn">
<i class="fas fa-check"></i> Done With Student(s)
</button>
<button type="submit" class="btn btn-success d-none" id="saveFormBtn">
<i class="fas fa-save"></i> Save
</button>
</div>
</form>
<!-- Picture Policy Modal -->
<div class="modal fade" id="picturePolicyModal" tabindex="-1" aria-labelledby="picturePolicyModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title text-success" id="picturePolicyModalLabel">Picture & Media Agreement</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" style="white-space: pre-wrap;">
<?php
$picturePolicy = include(APPPATH . 'Views/policy/picture_policy_partial.php');
$sections = $picturePolicy['sections'] ?? [];
$title = $picturePolicy['title'] ?? '';
?>
<h3 class="text-success"><?= esc($title) ?></h3>
<?php if (!empty($sections)): ?>
<?php foreach ($sections as $section): ?>
<h4 class="mt-4"><?= esc($section['heading']) ?></h4>
<?php if (isset($section['subsections'][0])): ?>
<?php foreach ($section['subsections'] as $sub): ?>
<?php if (!empty($sub['title'])): ?>
<h5><?= esc($sub['title']) ?></h5>
<?php endif; ?>
<p><?= nl2br(esc($sub['body'] ?? '')) ?></p>
<?php endforeach; ?>
<?php elseif (isset($section['subsections']['body'])): ?>
<p><?= nl2br(esc($section['subsections']['body'])) ?></p>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="button" class="btn btn-outline-primary" onclick="window.print()">Print</button>
</div>
</div>
</div>
</div>
</div>
<!-- Hidden Templates -->
<div id="studentFormTemplate" class="d-none">
<?= view('partials/student_form') ?>
</div>
<div id="emergencyFormTemplate" class="d-none">
<?= view('partials/emergencycontact_form') ?>
</div>
<?php
$tz = new DateTimeZone((string) (config('School')->attendance['timezone'] ?? user_timezone()));
$now = new DateTime('now', $tz);
$closeAt = new DateTime($lastDayOfRegistration . ' 00:00:00', $tz);
// Closed at the start of the close date
$disableDueToDate = ($now >= $closeAt);
// Last usable calendar day (date - 1)
$lastDayFmt = (clone $closeAt)->modify('-1 day')->format('m-d-Y');
// Also prepare a precise closing moment string
$closeAtFmt24 = $closeAt->format('m-d-Y H:i T'); // e.g., 10-01-2025 00:00 EDT
$closeAtFmt12 = $closeAt->format('m-d-Y g:i A T'); // e.g., 10-01-2025 12:00 AM EDT
?>
<?php if ($disableDueToDate): ?>
<!-- Registration Closed Modal -->
<div class="modal fade" id="regClosedModal" tabindex="-1" aria-labelledby="regClosedModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content border-danger">
<div class="modal-header">
<h5 class="modal-title text-danger" id="regClosedModalLabel">Registration & Enrollment Closed</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Registration/enrollment is over for this school year.<br>
<strong>Last day:</strong> <?= esc($lastDayFmt) ?> (until 11:59 PM)<br>
<strong>Closed at:</strong> <?= esc($closeAtFmt24) ?> <!-- or <?= esc($closeAtFmt12) ?> -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">OK</button>
</div>
</div>
</div>
</div>
<!-- Optional inline banner as well -->
<div class="alert alert-danger d-flex align-items-center my-3" role="alert">
<i class="bi bi-exclamation-triangle-fill me-2"></i>
<div>
Registration/enrollment is closed.<br>
Last day to register was <strong><?= esc($lastDayFmt) ?></strong> (until <strong>11:59 PM</strong>).<br>
It closed at <strong><?= esc($closeAtFmt24) ?></strong> <!-- or <?= esc($closeAtFmt12) ?> -->
</div>
</div>
<?php endif; ?>
<?= $this->endSection() ?>
<?= $this->section('scripts') ?>
<?php if ($disableDueToDate): ?>
<script>
document.addEventListener('DOMContentLoaded', function() {
var modalEl = document.getElementById('regClosedModal');
if (modalEl && window.bootstrap) {
var m = new bootstrap.Modal(modalEl);
m.show();
}
});
</script>
<?php endif; ?>
<script>
window.appConfig = {
registrationAgeDeadline: "<?= esc($registrationAgeDeadline) ?>"
};
</script>
<!-- Only keep the script imports -->
<script type="module" src="/assets/js/name_validation.js"></script>
<script type="module" src="/assets/js/age_validation.js"></script>
<script type="module" src="/assets/js/phone_validation.js"></script>
<script type="module" src="/assets/js/validate_student.js"></script>
<?= $this->endSection() ?>