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

341 lines
13 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div class="student-form border rounded p-3 mb-4 bg-light position-relative">
<button type="button" class="btn-close position-absolute end-0 top-0 m-2 js-remove-student" aria-label="Close"></button>
<h5 class="mb-3 text-primary">Student Information</h5>
<div class="col-md-12 mb-3">
<label class="form-label fw-bold mb-2 d-block">
Was your child enrolled in Al Rahma Sunday School last year? <span class="text-danger">*</span>
</label>
<div class="d-flex align-items-center flex-wrap gap-3">
<div class="form-check ps-3">
<input class="form-check-input" type="radio" name="last_year_0" value="yes" data-base-name="last_year" required autocomplete="off">
<label class="form-check-label">Yes</label>
</div>
<div class="form-check ps-3">
<input class="form-check-input" type="radio" name="last_year_0" value="no" data-base-name="last_year" required autocomplete="off">
<label class="form-check-label">No</label>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label">First Name <span class="text-danger">*</span></label>
<input
type="text"
class="form-control"
name="studentFirstName[]"
placeholder="First Name"
maxlength="30"
required
data-base-name="studentFirstName"
title="Only letters, spaces, or dashes (230 chars)">
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Last Name <span class="text-danger">*</span></label>
<input
type="text"
class="form-control"
name="studentLastName[]"
placeholder="Last Name"
maxlength="30"
required
data-base-name="studentLastName"
title="Only letters, spaces, or dashes (230 chars)">
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label">Date of Birth <span class="text-danger">*</span></label>
<input type="date" class="form-control dob-input" name="dob[]" required data-base-name="dob">
<small class="text-danger age-error d-none">Student must be between 5 and 18 years old.</small>
</div>
<div class="col-6 mb-3">
<label class="form-label grade-label">Last Year Grade <span class="text-danger">*</span></label>
<select class="form-select dynamic-grade grade-select"
name="registration_grade[]"
required data-base-name="registration_grade"
disabled>
<option value="">Select Grade</option>
</select>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label">Gender <span class="text-danger">*</span></label>
<select class="form-select" name="gender[]" required data-base-name="gender">
<option value="">Select Gender</option>
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Photo Consent <span class="text-danger">*</span></label>
<select class="form-select" name="photo_consent[]" required data-base-name="photo_consent">
<option value="">Select Answer</option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
<small>
<a href="#" class="text-nowrap" data-bs-toggle="modal" data-bs-target="#picturePolicyModal">
Read Photo Consent Agreement
</a>
</small>
</div>
</div>
<!-- NEW SECTION -->
<div class="row">
<!-- Medical Conditions -->
<div class="col-md-6 mb-3">
<label class="form-label">Medical Conditions (Select all that apply from the 33 items below) <span class="text-danger">*</span></label>
<div class="border rounded p-2 bg-white ps-3" style="max-height: 200px; overflow-y: auto;">
<?php
$medicalOptions = [
"None",
"ADHD (Attention-Deficit/Hyperactivity Disorder)",
"Anxiety or Emotional Disorders",
"Asthma",
"Autism Spectrum Disorder (ASD)",
"Behavioral or Conduct Disorders",
"Blindness / Vision Impairment",
"Celiac Disease (Gluten Intolerance)",
"Cerebral Palsy",
"Cystic Fibrosis",
"Depression",
"Diabetes (Type 1 or Type 2)",
"Down Syndrome",
"Dyslexia or Learning Disabilities",
"Eating Disorders",
"Eczema / Severe Skin Conditions",
"Epilepsy / Seizure Disorders",
"Hearing Impairments / Deafness",
"Heart Conditions (congenital or acquired)",
"Hemophilia / Bleeding Disorders",
"Kidney Disease",
"Migraines / Chronic Headaches",
"Obsessive-Compulsive Disorder (OCD)",
"Physical Disabilities / Mobility Impairments",
"PTSD (Post-Traumatic Stress Disorder)",
"Sickle Cell Anemia",
"Speech and Language Disorders",
"Thyroid Disorders",
"Tourette Syndrome",
"Traumatic Brain Injury (TBI)",
"Rheumatic diseases",
"Ulcerative Colitis / Crohns Disease",
"Other"
];
foreach ($medicalOptions as $opt): ?>
<div class="form-check">
<input class="form-check-input" type="checkbox" name="medical_conditions[][]" value="<?= esc($opt) ?>" data-base-name="medical_conditions">
<label class="form-check-label ms-1"><?= esc($opt) ?></label>
</div>
<?php endforeach; ?>
</div>
<input type="text" class="form-control mt-2 d-none medical-condition-other" name="medical_condition_other[]" placeholder="Please specify if 'Other' selected">
</div>
<!-- Allergies -->
<div class="col-md-6 mb-3">
<label class="form-label">Allergies (Select all that apply from the 24 items below) <span class="text-danger">*</span></label>
<div class="border rounded p-2 bg-white ps-3" style="max-height: 200px; overflow-y: auto; overflow-x: hidden;">
<?php
$allergyOptions = [
"None",
"Animal Dander (cats, dogs, etc.)",
"Antibiotics",
"Bee stings",
"Cockroach",
"Corn",
"Dust Mites",
"Egg",
"Fire ant stings",
"Fish",
"Fragrances / Perfumes",
"Latex",
"Milk / Dairy",
"Mold",
"Mosquito bites",
"Peanut",
"Pollen (grass, tree, weed)",
"Sesame",
"Shellfish (shrimp, crab, lobster, etc.)",
"Soy",
"Tree Nuts (almond, cashew, walnut, etc.)",
"Wasp stings",
"Wheat / Gluten",
"Other"
];
foreach ($allergyOptions as $opt): ?>
<div class="form-check">
<input class="form-check-input" type="checkbox" name="allergies[][]" value="<?= esc($opt) ?>" data-base-name="allergies">
<label class="form-check-label ms-1"><?= esc($opt) ?></label>
</div>
<?php endforeach; ?>
</div>
<input type="text" class="form-control mt-2 d-none allergy-other" name="allergy_other[]" placeholder="Please specify if 'Other' selected">
</div>
</div>
</div>
<script>
const gradeOptions = {
public: [{
value: "NA",
text: "Not enrolled in public school"
},
{
value: "KG",
text: "Pre-K / Kindergarten"
},
{
value: "1",
text: "Grade 1"
}, {
value: "2",
text: "Grade 2"
},
{
value: "3",
text: "Grade 3"
}, {
value: "4",
text: "Grade 4"
},
{
value: "5",
text: "Grade 5"
}, {
value: "6",
text: "Grade 6"
},
{
value: "7",
text: "Grade 7"
}, {
value: "8",
text: "Grade 8"
},
{
value: "9",
text: "Grade 9"
}, {
value: "10",
text: "Grade 10"
},
{
value: "11",
text: "Grade 11"
}, {
value: "12",
text: "Grade 12"
}
],
alrahma: [{
value: "KG",
text: "Pre-K / Kindergarten"
},
{
value: "1",
text: "Grade 1"
}, {
value: "2",
text: "Grade 2"
},
{
value: "3",
text: "Grade 3"
}, {
value: "4",
text: "Grade 4"
},
{
value: "5",
text: "Grade 5"
}, {
value: "6",
text: "Grade 6"
},
{
value: "7",
text: "Grade 7"
}, {
value: "8",
text: "Grade 8"
},
{
value: "9",
text: "Grade 9"
}, {
value: "10",
text: "Youth"
}
]
};
function resetGradeSelect(gradeSelect, gradeLabel) {
if (!gradeSelect || !gradeLabel) return;
gradeSelect.innerHTML = '<option value="">Select Grade</option>';
gradeSelect.value = '';
gradeSelect.disabled = true; // keep disabled until a radio is chosen
gradeLabel.innerHTML = 'Last Year Grade <span class="text-danger">*</span>';
}
function populateSelect(gradeSelect, options) {
gradeSelect.innerHTML = '<option value="">Select Grade</option>';
options.forEach(o => {
const opt = document.createElement('option');
opt.value = o.value;
opt.textContent = o.text;
gradeSelect.appendChild(opt);
});
}
function updateGradeOptions(studentForm, type) {
const gradeSelect = studentForm.querySelector('.grade-select');
const gradeLabel = studentForm.querySelector('.grade-label');
if (!gradeSelect || !gradeLabel) return;
gradeSelect.disabled = false; // enable now that a choice was made
gradeSelect.value = ''; // clear any stale selection
if (type === 'yes') {
gradeLabel.innerHTML = 'Al Rahma School Last Year Grade <span class="text-danger">*</span>';
populateSelect(gradeSelect, gradeOptions.alrahma);
} else if (type === 'no') {
gradeLabel.innerHTML = 'Public School Last Year Grade <span class="text-danger">*</span>';
populateSelect(gradeSelect, gradeOptions.public);
} else {
resetGradeSelect(gradeSelect, gradeLabel);
}
}
// Event: when a radio is chosen, update this form's select
document.addEventListener('change', function(e) {
if (e.target.matches('input[type="radio"][data-base-name="last_year"]')) {
const form = e.target.closest('.student-form');
if (form && e.target.checked) {
updateGradeOptions(form, e.target.value);
}
}
});
// On load: enforce disabled unless a radio is already checked (server repopulation)
(function initStudentForms() {
const forms = document.querySelectorAll('.student-form');
forms.forEach(form => {
const gradeSelect = form.querySelector('.grade-select');
const gradeLabel = form.querySelector('.grade-label');
// Start disabled (HTML already has disabled, but enforce from JS too)
resetGradeSelect(gradeSelect, gradeLabel);
// If a radio is already checked (e.g., after validation error), enable/populate accordingly
const checked = form.querySelector('input[type="radio"][data-base-name="last_year"]:checked');
if (checked) {
updateGradeOptions(form, checked.value);
}
});
})();
</script>