| 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/kadernictvidenisa_cz/api/ |
Upload File : |
<?php
// ============================================
// api/token.php
// GET /api/token?t=... – ověřit token, vrátit detail
// POST /api/token – zrušit rezervaci zákazníkem
// ============================================
require_once __DIR__ . '/../includes/mailer.php';
require_once __DIR__ . '/../includes/calendar.php';
$token = sanitize($_GET['t'] ?? ($input['token'] ?? ''));
if (strlen($token) !== 64) json_error('Neplatný token.', 400);
$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]);
$rez = $stmt->fetch();
if (!$rez) json_error('Rezervace nenalezena nebo odkaz vypršel.', 404);
if ($rez['stav'] === 'zrusena') json_error('Tato rezervace byla již zrušena.', 409);
if ($method === 'GET') {
json_response(['ok' => true, 'data' => [
'id' => $rez['id'],
'sluzba' => $rez['sluzba_nazev'],
'datum' => $rez['datum'],
'cas_od' => substr($rez['cas_od'], 0, 5),
'jmeno' => $rez['jmeno'],
'prijmeni' => $rez['prijmeni'],
'email' => $rez['email'],
'stav' => $rez['stav'],
]]);
}
if ($method === 'POST') {
$akce = sanitize($input['akce'] ?? '');
if ($akce !== 'zrusit') json_error('Neznámá akce. Povoleno: zrusit.');
// Zrušení možné nejpozději 24 hodin před termínem
$termin_ts = strtotime($rez['datum'] . ' ' . $rez['cas_od']);
if ($termin_ts - time() < 3600 * 24) {
json_error('Rezervaci lze zrušit nejpozději 24 hodin před termínem. Kontaktujte nás prosím telefonicky.');
}
db()->prepare("UPDATE rezervace SET stav = 'zrusena', zruseno_kym = 'zakaznik' WHERE id = ?")
->execute([$rez['id']]);
$rez_mail = [
'jmeno' => $rez['jmeno'],
'prijmeni' => $rez['prijmeni'],
'email' => $rez['email'],
'datum' => $rez['datum'],
'cas_od' => substr($rez['cas_od'], 0, 5),
'cena' => number_format($rez['cena'], 0, ',', ' '),
'token_zmena' => $token,
];
// Zruš událost v Microsoft Calendar
if (!empty($rez['ms_event_id'])) {
try { graph_zrus_udalost($rez['ms_event_id']); }
catch (Exception $e) { error_log('[Token] Calendar delete error: ' . $e->getMessage()); }
}
try {
email_zruseni($rez_mail, $rez['sluzba_nazev'], 'zakaznik');
} catch (Exception $e) {
error_log('[Token] E-mail zákazníkovi selhal: ' . $e->getMessage());
}
try {
email_notifikace_admin($rez_mail, $rez['sluzba_nazev'], 'zrusena');
} catch (Exception $e) {
error_log('[Token] E-mail adminu selhal: ' . $e->getMessage());
}
json_response(['ok' => true, 'zprava' => 'Rezervace byla zrušena.']);
}
json_error('Metoda není podporována.', 405);