Add bookout system POC

This commit is contained in:
2025-04-15 16:21:23 +00:00
parent 94010fec01
commit 31c1172e08
2 changed files with 260 additions and 1 deletions

259
bookout.html Normal file
View File

@@ -0,0 +1,259 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Book Out</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f4f4f4;
}
.form-container {
max-width: 500px;
margin: 20px auto;
padding: 20px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.form-container h2 {
text-align: center;
margin-bottom: 20px;
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
.form-group input, .form-group select {
width: 100%;
padding: 10px;
font-size: 1rem;
border: 1px solid #ccc;
border-radius: 5px;
}
.form-group input:focus, .form-group select:focus {
border-color: #007bff;
outline: none;
box-shadow: 0 0 5px rgba(0, 123, 255, 0.5);
}
.hidden {
display: none;
}
button {
width: 100%;
padding: 10px;
font-size: 1rem;
color: #fff;
background-color: #007bff;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #0056b3;
}
@media (max-width: 768px) {
.form-container {
width: 100%; /* Ensure it fits the screen */
margin: 20px auto;
padding: 15px;
box-sizing: border-box; /* Include padding in width calculation */
}
.form-group input, .form-group select, button {
font-size: 0.9rem;
padding: 8px;
}
h2 {
font-size: 1.5rem;
}
}
@media (max-width: 480px) {
.form-container {
width: 100%; /* Ensure it fits the screen */
margin: 10px auto;
padding: 10px;
box-sizing: border-box; /* Include padding in width calculation */
}
.form-group input, .form-group select, button {
font-size: 0.8rem;
padding: 6px;
}
h2 {
font-size: 1.2rem;
}
}
.nature-button {
flex: 1;
padding: 10px;
font-size: 1rem;
color: #fff;
background-color: #007bff;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s;
}
.nature-button:hover {
background-color: #0056b3;
}
.nature-button.selected {
background-color: #28a745; /* Green for selected */
}
.pob-button {
flex: 1;
padding: 10px;
font-size: 1rem;
color: #fff;
background-color: #007bff;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s;
}
.pob-button:hover {
background-color: #0056b3;
}
.pob-button.selected {
background-color: #28a745; /* Green for selected */
}
</style>
<script>
function toggleLandawayFields(natureOfFlight) {
const landawayFields = document.getElementById("landaway-fields");
document.getElementById("nature_of_flight").value = natureOfFlight;
// Update button styles
document.querySelectorAll(".nature-button").forEach(button => {
button.classList.remove("selected");
});
document.getElementById(`nature_${natureOfFlight}`).classList.add("selected");
if (natureOfFlight === "Landaway") {
landawayFields.classList.remove("hidden");
} else {
landawayFields.classList.add("hidden");
}
}
function selectPOB(pob) {
document.getElementById("pob").value = pob;
// Update button styles
document.querySelectorAll(".pob-button").forEach(button => {
button.classList.remove("selected");
});
document.getElementById(`pob_${pob}`).classList.add("selected");
}
function setCookie(name, value, days) {
const date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
document.cookie = `${name}=${value};expires=${date.toUTCString()};path=/`;
}
function getCookie(name) {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
if (cookie.startsWith(name + '=')) {
return cookie.substring(name.length + 1);
}
}
return '';
}
function handleAircraftRegInput() {
const acRegInput = document.getElementById("ac_reg");
const acTypeInput = document.getElementById("ac_type");
const captainNameInput = document.getElementById("captain_name");
acRegInput.value = acRegInput.value.toUpperCase();
setCookie("ac_reg", acRegInput.value, 30);
setCookie("ac_type", acTypeInput.value, 30);
setCookie("captain_name", captainNameInput.value, 30);
}
function populateAircraftFields() {
const savedReg = getCookie("ac_reg");
const savedType = getCookie("ac_type");
const savedCaptainName = getCookie("captain_name");
if (savedReg) {
document.getElementById("ac_reg").value = savedReg;
}
if (savedType) {
document.getElementById("ac_type").value = savedType;
}
if (savedCaptainName) {
document.getElementById("captain_name").value = savedCaptainName;
}
}
document.addEventListener("DOMContentLoaded", populateAircraftFields);
</script>
</head>
<body>
<div class="form-container">
<h2>Log Outgoing Flight</h2>
<form action="submit_outgoing.php" method="POST">
<div class="form-group">
<label for="ac_reg">Aircraft Registration</label>
<input type="text" id="ac_reg" name="ac_reg" required maxlength="16" oninput="handleAircraftRegInput()">
</div>
<div class="form-group">
<label for="ac_type">Aircraft Type</label>
<input type="text" id="ac_type" name="ac_type" required maxlength="32" oninput="handleAircraftRegInput()">
</div>
<div class="form-group">
<label for="captain_name">Captain's Name</label>
<input type="text" id="captain_name" name="captain_name" required maxlength="64" oninput="handleAircraftRegInput()">
</div>
<div class="form-group">
<label>POB (Persons on Board)</label>
<input type="hidden" id="pob" name="pob" required>
<div style="display: flex; gap: 10px;">
<button type="button" id="pob_1" class="pob-button" onclick="selectPOB(1)">1</button>
<button type="button" id="pob_2" class="pob-button" onclick="selectPOB(2)">2</button>
<button type="button" id="pob_3" class="pob-button" onclick="selectPOB(3)">3</button>
<button type="button" id="pob_4" class="pob-button" onclick="selectPOB(4)">4</button>
<button type="button" id="pob_5" class="pob-button" onclick="selectPOB(5)">5</button>
<button type="button" id="pob_6" class="pob-button" onclick="selectPOB(6)">6</button>
</div>
</div>
<div class="form-group">
<label>Nature of Flight</label>
<input type="hidden" id="nature_of_flight" name="nature_of_flight" required>
<div style="display: flex; gap: 10px;">
<button type="button" id="nature_Local" class="nature-button" onclick="toggleLandawayFields('Local')">Local</button>
<button type="button" id="nature_Circuits" class="nature-button" onclick="toggleLandawayFields('Circuits')">Circuits</button>
<button type="button" id="nature_Landaway" class="nature-button" onclick="toggleLandawayFields('Landaway')">Landaway</button>
</div>
</div>
<div class="form-group">
<label for="departure_time">Time of Departure</label>
<input type="datetime-local" id="etd" name="etd" required>
</div>
<div id="landaway-fields" class="hidden">
<div class="form-group">
<label for="destination">Destination</label>
<input type="text" id="destination" name="destination" maxlength="64">
</div>
<div class="form-group">
<label for="return_time">Estimated Time of Return</label>
<input type="datetime-local" id="eta" name="eta">
</div>
</div>
<button type="submit">Submit</button>
</form>
</div>
</body>
</html>

View File

@@ -150,7 +150,7 @@ function generatePprEmail($entryId, $email, $ac_reg) {
global $conn, $mailHost, $mailSMTPAuth, $mailUsername, $mailPassword, $mailPort, $baseUrl, $mailFromAddress, $mailFromName;
if (!class_exists('PHPMailer\PHPMailer\PHPMailer')) {
require 'vendor/autoload.php';
require '../vendor/autoload.php';
}
$token = generateSecureToken($email, $entryId);