403Webshell
Server IP : 193.86.120.172  /  Your IP : 216.73.216.67
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/kadernictvi_jservices_cz/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /volume1/web/kadernictvi_jservices_cz/zruseni-rezervace.php
<?php
require_once __DIR__ . '/includes/db.php';
require_once __DIR__ . '/includes/mailer.php';

$token  = sanitize($_GET['token'] ?? '');
$error  = '';
$rezervace = null;
$uspech = false;

if (strlen($token) !== 64) { $error = 'Neplatný odkaz.'; }

if (!$error) {
    $stmt = db()->prepare("SELECT r.*, s.nazev AS sluzba_nazev, s.cena FROM rezervace r JOIN sluzby s ON s.id = r.sluzba_id WHERE r.token_zmena = ?");
    $stmt->execute([$token]);
    $rezervace = $stmt->fetch();
    if (!$rezervace) { $error = 'Rezervace nenalezena.'; }
    elseif ($rezervace['stav'] === 'zrusena') { $error = 'Tato rezervace byla již zrušena.'; }
}

if (!$error && !$uspech) {
    $termin_ts  = strtotime($rezervace['datum'] . ' ' . $rezervace['cas_od']);
    $storno_hod = (int) nastaveni('rezervace_storno_hod', 24);
    if ($termin_ts - time() < $storno_hod * 3600) {
        $error = 'Rezervaci lze zrušit nejpozději ' . $storno_hod . ' hodin před termínem. Kontaktujte nás prosím telefonicky.';
    }
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['akce']) && $_POST['akce'] === 'zrusit' && !$error) {
    db()->prepare("UPDATE rezervace SET stav='zrusena', zruseno_kym='zakaznik' WHERE token_zmena=?")->execute([$token]);

    // Smaž událost z Outlooku
    if (!empty($rezervace['ms_event_id'])) {
        try {
            require_once __DIR__ . '/includes/calendar.php';
            graph_zrus_udalost($rezervace['ms_event_id']);
        } catch (Exception $e) {
            error_log('[Zruseni] Calendar delete: ' . $e->getMessage());
        }
    }

    $cena_fmt = ($rezervace['cena'] !== null ? number_format($rezervace['cena'], 0, ',', ' ') : 'Individuální');
    $rez_mail = [
        'jmeno'       => $rezervace['jmeno'],
        'prijmeni'    => $rezervace['prijmeni'],
        'email'       => $rezervace['email'],
        'telefon'     => $rezervace['telefon'] ?? '',
        'poznamka'    => $rezervace['poznamka'] ?? '',
        'datum'       => $rezervace['datum'],
        'cas_od'      => substr($rezervace['cas_od'], 0, 5),
        'cena'        => $cena_fmt,
        'token_zmena' => $token,
    ];
    try { email_zruseni($rez_mail, $rezervace['sluzba_nazev'], 'zakaznik'); } catch (Exception $e) {}
    try { email_notifikace_admin($rez_mail, $rezervace['sluzba_nazev'], 'zrusena'); } catch (Exception $e) {}
    $uspech = true;
}

$salon_nazev = nastaveni('salon_nazev', 'Kadeřnictví DEMO');
?>
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Zrušení rezervace – <?= htmlspecialchars($salon_nazev) ?></title>
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,sans-serif;background:#f9fafb;color:#111827;min-height:100vh}
.page{max-width:480px;margin:0 auto;padding:2rem 1rem}
.logo{text-align:center;margin-bottom:1.5rem;font-size:20px;font-weight:700;color:#7c3aed}
.card{background:#fff;border:1px solid #e5e7eb;border-radius:16px;padding:1.5rem;margin-bottom:1rem}
h2{font-size:18px;font-weight:700;margin-bottom:6px}
.sub{font-size:13px;color:#6b7280;margin-bottom:1.25rem}
.info-row{display:flex;justify-content:space-between;font-size:13px;padding:6px 0;border-bottom:1px solid #f3e8ff}
.info-row:last-child{border-bottom:none;margin-bottom:1.25rem}
.info-label{color:#6b7280}
.info-val{font-weight:600}
.btn-cancel{width:100%;background:#991b1b;color:#fff;border:none;border-radius:999px;padding:13px;font-size:15px;font-weight:600;cursor:pointer;margin-bottom:10px}
.btn-cancel:hover{background:#7f1d1d}
.btn-back{display:block;width:100%;background:none;border:2px solid #e9d5ff;border-radius:999px;padding:11px;font-size:14px;color:#7c3aed;cursor:pointer;text-align:center;text-decoration:none}
.btn-back:hover{background:#faf5ff}
.alert{border-radius:10px;padding:12px 14px;font-size:13px;margin-bottom:1rem}
.alert.error{background:#fee2e2;color:#991b1b;border:1px solid #fca5a5}
.alert.success{background:#dcfce7;color:#166534;border:1px solid #86efac}
</style>
</head>
<body>
<div class="page">
<div class="logo">✂️ <?= htmlspecialchars($salon_nazev) ?></div>

<?php if ($uspech): ?>
<div class="card">
  <div class="alert success">✅ Vaše rezervace byla úspěšně zrušena. Potvrzení jsme zaslali e-mailem.</div>
  <a href="/" class="btn-back">← Nová rezervace</a>
</div>
<?php elseif ($error && empty($rezervace)): ?>
<div class="card">
  <div class="alert error"><?= htmlspecialchars($error) ?></div>
  <a href="/" class="btn-back">← Zpět na rezervace</a>
</div>
<?php else: ?>
<div class="card">
  <h2>Zrušit rezervaci</h2>
  <div class="sub">Opravdu chcete zrušit tento termín?</div>
  <div class="info-row"><span class="info-label">Jméno</span><span class="info-val"><?= htmlspecialchars($rezervace['jmeno'] . ' ' . $rezervace['prijmeni']) ?></span></div>
  <div class="info-row"><span class="info-label">Služba</span><span class="info-val"><?= htmlspecialchars($rezervace['sluzba_nazev']) ?></span></div>
  <div class="info-row"><span class="info-label">Datum</span><span class="info-val"><?= htmlspecialchars($rezervace['datum']) ?></span></div>
  <div class="info-row"><span class="info-label">Čas</span><span class="info-val"><?= substr($rezervace['cas_od'], 0, 5) ?></span></div>
  <?php if ($error): ?>
  <div class="alert error"><?= htmlspecialchars($error) ?></div>
  <?php endif; ?>
  <?php if (!$error): ?>
  <form method="post" action="zruseni-rezervace.php?token=<?= urlencode($token) ?>">
    <input type="hidden" name="akce" value="zrusit">
    <button type="submit" class="btn-cancel">Ano, zrušit rezervaci</button>
  </form>
  <?php endif; ?>
  <a href="<?= BASE_URL ?>" class="btn-back">Ne, ponechat termín</a>
</div>
<?php endif; ?>
</div>
</body>
</html>

Youez - 2016 - github.com/yon3zu
LinuXploit