| Server IP : 193.86.120.172 / Your IP : 216.73.216.215 Web Server : Apache/2.4.63 (Unix) System : Linux JServices 3.10.108 #86003 SMP Wed Oct 22 13:20:46 CST 2025 x86_64 User : kubec ( 1026) PHP Version : 8.2.28 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /volume1/web/hotel_jservices_cz/ |
Upload File : |
<?php
// ============================================================
// Hotel DEMO — zruseni-rezervace.php
// Zákazník klikne na odkaz v e-mailu a zruší rezervaci
// ============================================================
require_once __DIR__ . '/includes/config.php';
require_once __DIR__ . '/includes/db.php';
require_once __DIR__ . '/includes/mailer.php';
$token = trim($_GET['token'] ?? '');
$chyba = '';
$rez = null;
$hotovo = false;
if (!$token) {
$chyba = 'Neplatný odkaz.';
} else {
$rez = db_row(
"SELECT r.*, p.cislo AS pokoj_cislo,
COALESCE(p.nazev, CONCAT('Pokoj ', p.cislo)) AS pokoj_nazev
FROM rezervace r
JOIN pokoje p ON p.id = r.pokoj_id
WHERE r.token_zmena = ?",
[$token]
);
if (!$rez) $chyba = 'Rezervace nenalezena nebo odkaz vypršel.';
elseif ($rez['stav'] === 'zrusena') $chyba = 'Tato rezervace již byla zrušena.';
}
// Zpracování formuláře
if (!$chyba && $_SERVER['REQUEST_METHOD'] === 'POST') {
$storno_dni = (int)nastaveni('rezervace_storno_dni', '3');
$dnes = new DateTime();
$prijezd = new DateTime($rez['datum_prijezdu']);
$dnu_do = (int)$dnes->diff($prijezd)->days;
if ($dnu_do < $storno_dni && $prijezd > $dnes) {
$chyba = 'Rezervaci lze zrušit nejpozději ' . $storno_dni . ' dny před příjezdem. '
. 'Pro zrušení kontaktujte recepci na ' . nastaveni('hotel_telefon') . '.';
} else {
db_query(
"UPDATE rezervace SET stav='zrusena', duvod_zruseni=? WHERE id=?",
['Zrušeno zákazníkem přes e-mailový odkaz', $rez['id']]
);
try { odeslat_storno($rez['id']); } catch (\Exception $e) {}
$hotovo = true;
}
}
$hotel = nastaveni('hotel_nazev', 'Hotel DEMO');
?>
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Zrušení rezervace — <?= htmlspecialchars($hotel) ?></title>
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:Arial,sans-serif;background:#f8fafc;color:#1e293b;min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px}
.card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:32px;max-width:480px;width:100%;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.logo{font-size:15px;font-weight:600;color:#2563eb;margin-bottom:24px}
h1{font-size:20px;font-weight:600;margin-bottom:8px}
p{font-size:14px;color:#64748b;line-height:1.6;margin-bottom:16px}
.detail{background:#f8fafc;border-radius:8px;padding:14px;margin-bottom:20px}
.radek{display:flex;justify-content:space-between;font-size:13px;padding:4px 0;color:#64748b}
.radek strong{color:#1e293b}
.alert-error{background:#fee2e2;color:#991b1b;border:1px solid #fecaca;border-radius:8px;padding:12px 14px;font-size:13px;margin-bottom:16px}
.alert-ok{background:#dcfce7;color:#166534;border:1px solid #bbf7d0;border-radius:8px;padding:12px 14px;font-size:13px;margin-bottom:16px}
.btn{display:block;width:100%;padding:11px;border-radius:8px;font-size:14px;font-weight:500;border:none;cursor:pointer;text-align:center;text-decoration:none}
.btn-red{background:#dc2626;color:#fff}
.btn-red:hover{background:#b91c1c}
.btn-gray{background:#f1f5f9;color:#475569;margin-top:8px}
.btn-gray:hover{background:#e2e8f0}
</style>
</head>
<body>
<div class="card">
<div class="logo"><?= htmlspecialchars($hotel) ?></div>
<?php if ($hotovo): ?>
<h1>Rezervace zrušena</h1>
<p>Vaše rezervace byla úspěšně zrušena. Potvrzení Vám přijde e-mailem.</p>
<div class="alert-ok">Těšíme se na Vás při příštím pobytu.</div>
<a href="<?= BASE_URL ?>" class="btn btn-gray">Nová rezervace</a>
<?php elseif ($chyba): ?>
<h1>Něco se pokazilo</h1>
<div class="alert-error"><?= htmlspecialchars($chyba) ?></div>
<a href="<?= BASE_URL ?>" class="btn btn-gray">Zpět na hlavní stránku</a>
<?php else: ?>
<h1>Zrušení rezervace</h1>
<p>Opravdu chcete zrušit tuto rezervaci?</p>
<div class="detail">
<div class="radek"><span>Host</span><strong><?= htmlspecialchars($rez['jmeno'] . ' ' . $rez['prijmeni']) ?></strong></div>
<div class="radek"><span>Příjezd</span><strong><?= datum_cs($rez['datum_prijezdu']) ?></strong></div>
<div class="radek"><span>Odjezd</span><strong><?= datum_cs($rez['datum_odjezdu']) ?></strong></div>
<div class="radek"><span>Pokoj</span><strong><?= htmlspecialchars($rez['pokoj_nazev']) ?></strong></div>
</div>
<?php
$storno_dni = (int)nastaveni('rezervace_storno_dni', '3');
$prijezd = new DateTime($rez['datum_prijezdu']);
$dnes = new DateTime();
$dnu_do = max(0, (int)$dnes->diff($prijezd)->days);
if ($dnu_do < $storno_dni && $prijezd > $dnes):
?>
<div class="alert-error">
Bezplatné storno je možné nejpozději <?= $storno_dni ?> dny před příjezdem.
Do Vašeho příjezdu zbývá <?= $dnu_do ?> dní.
Pro zrušení kontaktujte recepci na <?= htmlspecialchars(nastaveni('hotel_telefon')) ?>.
</div>
<?php else: ?>
<form method="POST">
<button type="submit" class="btn btn-red">Ano, zrušit rezervaci</button>
<a href="<?= BASE_URL ?>" class="btn btn-gray">Ne, ponechat rezervaci</a>
</form>
<?php endif; ?>
<?php endif; ?>
</div>
</body>
</html>