Files
cat/booking.php

139 lines
7.2 KiB
PHP

<?php
session_set_cookie_params([
'httponly' => true,
'samesite' => 'Strict',
'secure' => !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off',
'use_strict_mode' => true,
]);
session_start();
$_SESSION['registration_csrf'] ??= bin2hex(random_bytes(32));
header('Cache-Control: no-store');
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: DENY');
header('Referrer-Policy: no-referrer');
header('Permissions-Policy: camera=(), microphone=(), geolocation=()');
header("Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; base-uri 'self'; form-action 'self'; frame-ancestors 'none'");
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Gastregistrierung</title>
<link rel="stylesheet" href="./css/booking.css">
</head>
<body>
<h1>Gastregistrierung</h1>
<form action="process_registration.php" method="POST">
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['registration_csrf'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') ?>">
<!-- 1. Name und E-Mail des Gastes -->
<div class="form-group">
<label for="name">Name des Gastes:</label>
<input type="text" id="name" name="name" maxlength="255" required>
<label for="email">E-Mail-Adresse:</label>
<input type="email" id="email" name="email" maxlength="255" required>
<label class="checkbox-label" for="under_27">
<input type="checkbox" id="under_27" name="under_27" value="1">
Unter 27
</label>
</div>
<!-- 2. Gasttyp (Dropdown) -->
<div class="form-group">
<label for="guest_type">Gasttyp:</label>
<select id="guest_type" name="guest_type" required>
<option value="">Bitte auswählen</option>
<option value="day_guest">Tagesgast</option>
<option value="regular_guest">Dauergast</option>
</select>
</div>
<!-- 3. Bedingte Auswahl basierend auf Gasttyp -->
<div class="form-group" id="room_details">
<!-- Dauergast-Optionen (wird angezeigt, wenn regelmäßiger Gast gewählt wird) -->
<div id="regular_guest_options">
<label for="room_type">Zimmerart:</label>
<select id="room_type" name="room_type">
<option value="single">Einzelzimmer</option>
<option value="double">Doppelzimmer</option>
<option value="multi">Mehrbettzimmer</option>
</select>
<!-- Bedingte Felder für Doppel/Mehrbettzimmer -->
<div id="roommate_info" style="display: none;">
<label for="roommates">Mit wem möchten Sie das Zimmer teilen?</label>
<input type="text" id="roommates" name="roommates" placeholder="Name des Mitbewohners" autocomplete="off" list="roommate_suggestions">
<datalist id="roommate_suggestions"></datalist>
</div>
<label class="checkbox-label" for="early_departure_enabled">
<input type="checkbox" id="early_departure_enabled" name="early_departure_enabled" value="1">
Ich reise vorzeitig ab.
</label>
<div id="early_departure_options" style="display: none;">
<label>Abreisezeitpunkt:</label>
<div class="checkbox-group">
<label><input type="radio" name="early_departure" value="sat_breakfast"> Samstag nach dem Frühstück</label>
<label><input type="radio" name="early_departure" value="sat_lunch"> Samstag nach dem Mittagessen</label>
<label><input type="radio" name="early_departure" value="sat_coffee"> Samstag nach dem Kaffee</label>
<label><input type="radio" name="early_departure" value="sat_dinner"> Samstag nach dem Abendessen</label>
<label><input type="radio" name="early_departure" value="sun_breakfast"> Sonntag nach dem Frühstück</label>
</div>
</div>
</div>
<!-- Tagesgast-Optionen (wird angezeigt, wenn Tagesgast gewählt wird) -->
<div id="day_guest_options" style="display: none;">
<label>Anwesenheitstage (Checkboxen):</label>
<div class="checkbox-group">
<input type="checkbox" name="days[]" value="1"> Fr.
<input type="checkbox" name="days[]" value="2"> Sa.
<input type="checkbox" name="days[]" value="3"> So.
<!-- Fügen Sie hier weitere Tage hinzu -->
</div>
<label>Gewünschte Mahlzeiten je Anwesenheitstag:</label>
<?php $mealOptionsByDay = [
'1' => ['dinner' => 'Abendessen'],
'2' => ['breakfast' => 'Frühstück', 'lunch' => 'Mittagessen', 'coffee' => 'Kaffee', 'dinner' => 'Abendessen'],
'3' => ['breakfast' => 'Frühstück', 'lunch' => 'Mittagessen'],
]; ?>
<?php foreach (['1' => 'Fr.', '2' => 'Sa.', '3' => 'So.'] as $dayValue => $dayLabel): ?>
<fieldset class="meal-day">
<legend><?= htmlspecialchars($dayLabel, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') ?></legend>
<div class="checkbox-group">
<?php foreach ($mealOptionsByDay[$dayValue] as $mealValue => $mealLabel): ?>
<label><input type="checkbox" name="meals[<?= $dayValue ?>][]" value="<?= $mealValue ?>"> <?= $mealLabel ?></label>
<?php endforeach; ?>
</div>
</fieldset>
<?php endforeach; ?>
<p class="form-help">Die Getränkepauschale und die Proberaumpauschale werden für Tagesgäste automatisch pro Anwesenheitstag berechnet.</p>
</div>
</div>
<!-- 4. Allergien und Essensvorlieben (für beide Gasttypen) -->
<div class="form-group">
<label>Allergien, Essensvorlieben oder religiöse Einschränkungen:</label>
<input type="text" name="allergies" placeholder="z.B. Vegetarier, Vegan, Glutenunverträglichkeit, etc.">
</div>
<!-- 5. Sonstige Hinweise -->
<div class="form-group">
<label for="other_notes">Sonstiges:</label>
<textarea id="other_notes" name="other_notes" rows="5" maxlength="5000" placeholder="Weitere Hinweise oder Wünsche"></textarea>
</div>
<button type="submit">Registrieren</button>
</form>
<script src="./scripts/functions.js?v=20260918-2"></script>
<script src="./scripts/security.js"></script>
</body>
</html>