286 lines
12 KiB
PHP
Executable File
286 lines
12 KiB
PHP
Executable File
<?= $this->extend('layout/main_layout') ?>
|
|
|
|
<?= $this->section('content') ?>
|
|
|
|
<!-- Flash Messages -->
|
|
<?php if (session()->getFlashdata('success')): ?>
|
|
<div class="alert alert-success">
|
|
<?= session()->getFlashdata('success') ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?php if (session()->getFlashdata('error')): ?>
|
|
<div class="alert alert-danger">
|
|
<?= session()->getFlashdata('error') ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<div class="container mt-5">
|
|
<!-- Button to toggle the display of previously saved parent information -->
|
|
<button class="btn btn-primary mb-4" type="button" data-bs-toggle="collapse" data-bs-target="#savedInfo"
|
|
aria-expanded="false" aria-controls="savedInfo" id="viewSecondParentBtn">
|
|
View Parent/AuthorizedUser Information
|
|
</button>
|
|
<!-- Collapsible section for the previously saved parent information -->
|
|
<div class="collapse" id="savedInfo">
|
|
<div class="card card-body">
|
|
<h4>Parent/Authorized User Information</h4>
|
|
<table class="table table-bordered">
|
|
<thead>
|
|
<tr>
|
|
<th>First Name</th>
|
|
<th>Last Name</th>
|
|
<th>Email</th>
|
|
<th>Relation</th>
|
|
<th>Phone</th>
|
|
<th>Status</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="parentTable">
|
|
<!-- Rows will be dynamically populated here -->
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<form action="<?= base_url('/parent/saveSecondParent') ?>" method="post" id="parentForm">
|
|
<?= csrf_field() ?>
|
|
|
|
<!-- First Name -->
|
|
<div class="row mb-3">
|
|
<div class="col-md-6">
|
|
<label for="secondParentFirstName" class="form-label fw-bold">First Name <span
|
|
style="color: red;">*</span></label>
|
|
<input type="text" class="form-control" id="secondParentFirstName" name="secondParentFirstName"
|
|
placeholder="First Name" value="<?= old('secondParentFirstName') ?>" pattern="[A-Za-z\s]+"
|
|
title="Letters only" required>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Last Name -->
|
|
<div class="row mb-3">
|
|
<div class="col-md-6">
|
|
<label for="secondParentLastName" class="form-label fw-bold">Last Name <span
|
|
style="color: red;">*</span></label>
|
|
<input type="text" class="form-control" id="secondParentLastName" name="secondParentLastName"
|
|
placeholder="Last Name" value="<?= old('secondParentLastName') ?>" pattern="[A-Za-z\s]+"
|
|
title="Letters only" required>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Email -->
|
|
<div class="row mb-3">
|
|
<div class="col-md-6">
|
|
<label for="secondParentEmail" class="form-label fw-bold">Email Address <span
|
|
style="color: red;">*</span></label>
|
|
<input type="email" class="form-control" id="secondParentEmail" name="secondParentEmail"
|
|
placeholder="Email Address" value="<?= old('secondParentEmail') ?>" required>
|
|
<small id="emailError" class="text-danger"></small>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3">
|
|
<div class="col-md-6">
|
|
<label for="relationToStudent" class="form-label fw-bold">Relation To Student <span
|
|
style="color: red;">*</span></label>
|
|
<select id="relationToStudent" name="relationToStudent" class="form-select" required>
|
|
<option value="" disabled <?= old('relationToStudent') === null ? 'selected' : '' ?>>Select
|
|
Relation</option>
|
|
<option value="Husband" <?= old('relationToStudent') === 'Husband' ? 'selected' : '' ?>>Father
|
|
</option>
|
|
<option value="Wife" <?= old('relationToStudent') === 'Wife' ? 'selected' : '' ?>>Mother
|
|
</option>
|
|
<option value="Brother" <?= old('relationToStudent') === 'Brother' ? 'selected' : '' ?>>Brother
|
|
</option>
|
|
<option value="Sister" <?= old('relationToStudent') === 'Sister' ? 'selected' : '' ?>>Sister
|
|
</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Phone Number with Pattern Validation -->
|
|
<div class="row mb-3">
|
|
<div class="col-md-6">
|
|
<label for="secondParentCellPhone" class="form-label fw-bold">Phone Number <span
|
|
style="color: red;">*</span></label>
|
|
<input type="text" class="form-control" id="secondParentCellPhone" name="secondParentCellPhone"
|
|
placeholder="Phone Number (xxx)-xxx-xxxx" value="<?= old('secondParentCellPhone') ?>" required>
|
|
<small class="text-muted">Format: (xxx)-xxx-xxxx</small>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<!-- Submit Button -->
|
|
<div class="row">
|
|
<div class="col-md-6 d-flex justify-content-end">
|
|
<button type="submit" class="btn btn-primary">Submit</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
<br>
|
|
<?php include(__DIR__ . '/../partials/footer.php'); ?>
|
|
|
|
<!-- Bootstrap JS -->
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
|
|
|
|
<!-- JavaScript for Phone and Email Validation -->
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const phoneInput = document.getElementById('secondParentCellPhone');
|
|
const emailInput = document.getElementById('secondParentEmail');
|
|
const firstNameInput = document.getElementById('secondParentFirstName');
|
|
const lastNameInput = document.getElementById('secondParentLastName');
|
|
const emailError = document.getElementById('emailError');
|
|
const nameError = document.createElement('small');
|
|
nameError.classList.add('text-danger');
|
|
const lastNameError = document.createElement('small');
|
|
lastNameError.classList.add('text-danger');
|
|
|
|
// Comprehensive domain extension list for validation
|
|
const validExtensions = [
|
|
'com', 'net', 'edu', 'org', 'gov', 'mil', 'int',
|
|
'biz', 'info', 'name', 'pro', 'aero', 'coop', 'museum',
|
|
'io', 'tech', 'ai', 'app', 'dev', 'xyz', 'store',
|
|
'us', 'uk', 'ca', 'au', 'de', 'fr', 'it', 'es', 'nl', 'se',
|
|
'co', 'tv', 'me', 'cc', 'ly', 'in', 'jp', 'cn', 'br', 'ru'
|
|
];
|
|
|
|
// Real-time validation for first and last names (no numbers allowed)
|
|
const namePattern = /^[a-zA-Z\s]+$/;
|
|
|
|
function validateName(input, errorElement, fieldName) {
|
|
if (!namePattern.test(input.value)) {
|
|
errorElement.textContent = `Please enter a valid ${fieldName} without numbers.`;
|
|
input.insertAdjacentElement('afterend', errorElement);
|
|
} else {
|
|
errorElement.textContent = '';
|
|
}
|
|
}
|
|
|
|
firstNameInput.addEventListener('input', function() {
|
|
validateName(firstNameInput, nameError, 'first name');
|
|
});
|
|
|
|
lastNameInput.addEventListener('input', function() {
|
|
validateName(lastNameInput, lastNameError, 'last name');
|
|
});
|
|
|
|
// Phone number input formatting
|
|
phoneInput.addEventListener('input', function(e) {
|
|
let input = phoneInput.value.replace(/\D/g, ''); // Remove non-digit characters
|
|
|
|
if (input.length > 3 && input.length <= 6) {
|
|
input = `(${input.substring(0, 3)})-${input.substring(3)}`;
|
|
} else if (input.length > 6) {
|
|
input = `(${input.substring(0, 3)})-${input.substring(3, 6)}-${input.substring(6, 10)}`;
|
|
} else if (input.length > 0) {
|
|
input = `(${input}`;
|
|
}
|
|
|
|
phoneInput.value = input;
|
|
});
|
|
|
|
// Email validation
|
|
emailInput.addEventListener('input', function() {
|
|
const emailValue = emailInput.value;
|
|
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
const domainExtension = emailValue.split('.').pop(); // Get the domain extension
|
|
|
|
if (emailValue && !emailPattern.test(emailValue)) {
|
|
emailError.textContent = 'Please enter a valid email address.';
|
|
} else if (domainExtension && !validExtensions.includes(domainExtension)) {
|
|
emailError.textContent =
|
|
'Please enter an email with a valid domain extension (e.g., .com, .net, .edu).';
|
|
} else {
|
|
emailError.textContent = ''; // Clear error message if email is valid
|
|
}
|
|
});
|
|
|
|
// Form submission validation
|
|
document.getElementById('parentForm').addEventListener('submit', function(e) {
|
|
const phoneValue = phoneInput.value;
|
|
const emailValue = emailInput.value;
|
|
const domainExtension = emailValue.split('.').pop();
|
|
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
const phonePattern = /^\(\d{3}\)-\d{3}-\d{4}$/;
|
|
|
|
// Ensure no numbers in the first or last name
|
|
if (!namePattern.test(firstNameInput.value)) {
|
|
e.preventDefault();
|
|
alert('Please enter a valid first name without numbers.');
|
|
}
|
|
|
|
if (!namePattern.test(lastNameInput.value)) {
|
|
e.preventDefault();
|
|
alert('Please enter a valid last name without numbers.');
|
|
}
|
|
|
|
if (!phonePattern.test(phoneValue)) {
|
|
e.preventDefault();
|
|
alert('Please enter a valid phone number in the format (xxx)-xxx-xxxx.');
|
|
}
|
|
|
|
if (!emailPattern.test(emailValue)) {
|
|
e.preventDefault();
|
|
alert('Please enter a valid email address.');
|
|
} else if (!validExtensions.includes(domainExtension)) {
|
|
e.preventDefault();
|
|
alert('Please enter an email with a valid domain extension (e.g., .com, .net, .edu).');
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
<script>
|
|
document.getElementById('viewSecondParentBtn').addEventListener('click', function() {
|
|
const xhr = new XMLHttpRequest();
|
|
xhr.open('GET', '<?= base_url('/parent/viewSecondParent') ?>', true);
|
|
|
|
xhr.onload = function() {
|
|
console.log('Response:', xhr.responseText); // Debugging: Log the raw response
|
|
|
|
if (xhr.status === 200) {
|
|
try {
|
|
const response = JSON.parse(xhr.responseText);
|
|
|
|
if (response.error) {
|
|
alert(response.error); // Handle error messages
|
|
return;
|
|
}
|
|
|
|
const savedParent = response.savedParent;
|
|
|
|
// Clear existing rows in the table
|
|
const parentTable = document.getElementById('parentTable');
|
|
parentTable.innerHTML = ''; // Clear previous data
|
|
|
|
// Populate the table with each entry in savedParent
|
|
savedParent.forEach(parent => {
|
|
const row = `
|
|
<tr>
|
|
<td>${parent.firstName}</td>
|
|
<td>${parent.lastName}</t>
|
|
<td>${parent.email}</td>
|
|
<td>${parent.relation}</td>
|
|
<td>${parent.phone}</td>
|
|
<td>${parent.status || 'N/A'}</td> <!-- Status for authorized users -->
|
|
</tr>
|
|
`;
|
|
parentTable.innerHTML += row;
|
|
});
|
|
} catch (error) {
|
|
console.error('Error parsing JSON response:', error);
|
|
}
|
|
} else {
|
|
console.error('Failed to load parent and authorized user information. Status:', xhr.status);
|
|
}
|
|
};
|
|
|
|
xhr.onerror = function() {
|
|
console.error('An error occurred while fetching parent and authorized user information.');
|
|
};
|
|
|
|
xhr.send();
|
|
});
|
|
</script>
|
|
|
|
<?= $this->endSection() ?>
|