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/admin.php
<?php
// ============================================
//  api/admin.php
//  Blokace termínů + statistiky (admin only)
// ============================================

// auth.php je načten routerem (index.php)
admin_required();

$sub    = $parts[1] ?? '';
$sub_id = isset($parts[2]) && is_numeric($parts[2]) ? (int)$parts[2] : null;

// ---- Blokace termínů ----
if ($sub === 'blokovane') {
    if ($method === 'GET') {
        $stmt = db()->query("SELECT * FROM blokovane_terminy ORDER BY datum_od");
        json_response(['ok' => true, 'data' => $stmt->fetchAll()]);
    }
    if ($method === 'POST') {
        $datum_od = sanitize($input['datum_od'] ?? '');
        $datum_do = sanitize($input['datum_do'] ?? $datum_od);
        $duvod    = sanitize($input['duvod'] ?? '');
        if (!valid_date($datum_od) || !valid_date($datum_do)) json_error('Neplatné datum.');
        if ($datum_do < $datum_od) json_error('Datum do musí být >= datum od.');
        db()->prepare("INSERT INTO blokovane_terminy (datum_od, datum_do, duvod) VALUES (?,?,?)")
            ->execute([$datum_od, $datum_do, $duvod]);
        json_response(['ok' => true, 'id' => db()->lastInsertId()], 201);
    }
    if ($method === 'DELETE' && $sub_id) {
        db()->prepare("DELETE FROM blokovane_terminy WHERE id = ?")->execute([$sub_id]);
        json_response(['ok' => true]);
    }
}

// ---- Statistiky ----
if ($sub === 'statistiky') {
    $rok   = (int)($_GET['rok']   ?? date('Y'));
    $mesic = (int)($_GET['mesic'] ?? date('n'));

    $datum_od = sprintf('%04d-%02d-01', $rok, $mesic);
    $datum_do = date('Y-m-t', strtotime($datum_od));

    // Celkové tržby a počty za měsíc
    $stmt = db()->prepare("
        SELECT
            COUNT(*) AS celkem,
            SUM(CASE WHEN stav != 'zrusena' THEN 1 ELSE 0 END) AS potvrzene,
            SUM(CASE WHEN stav = 'zrusena' THEN 1 ELSE 0 END) AS zrusene,
            SUM(CASE WHEN stav != 'zrusena' THEN s.cena ELSE 0 END) AS trzby
        FROM rezervace r
        JOIN sluzby s ON s.id = r.sluzba_id
        WHERE r.datum BETWEEN ? AND ?
    ");
    $stmt->execute([$datum_od, $datum_do]);
    $souhrn = $stmt->fetch();

    // Obsazenost: potvrzené / (všechny pracovní dny v měsíci * dostupné sloty)
    $pracovni_dni = 0;
    $ts = strtotime($datum_od);
    while ($ts <= strtotime($datum_do)) {
        $dow = (int)date('N', $ts);
        if ($dow !== 7) $pracovni_dni++;  // neděle = 7
        $ts = strtotime('+1 day', $ts);
    }
    $celkem_slotu = $pracovni_dni * ((PRACOVNI_DO - PRACOVNI_OD) / SLOT_MINUT);
    $obsazenost   = $celkem_slotu > 0
        ? round($souhrn['potvrzene'] / $celkem_slotu * 100)
        : 0;

    // Nejpopulárnější služby
    $stmt = db()->prepare("
        SELECT s.nazev, COUNT(*) AS pocet, SUM(s.cena) AS trzby
        FROM rezervace r
        JOIN sluzby s ON s.id = r.sluzba_id
        WHERE r.datum BETWEEN ? AND ? AND r.stav != 'zrusena'
        GROUP BY r.sluzba_id
        ORDER BY pocet DESC
        LIMIT 6
    ");
    $stmt->execute([$datum_od, $datum_do]);
    $sluzby_stat = $stmt->fetchAll();

    // Tržby po dnech (pro graf)
    $stmt = db()->prepare("
        SELECT r.datum, SUM(s.cena) AS trzby, COUNT(*) AS pocet
        FROM rezervace r
        JOIN sluzby s ON s.id = r.sluzba_id
        WHERE r.datum BETWEEN ? AND ? AND r.stav != 'zrusena'
        GROUP BY r.datum
        ORDER BY r.datum
    ");
    $stmt->execute([$datum_od, $datum_do]);
    $po_dnech = $stmt->fetchAll();

    json_response([
        'ok'          => true,
        'souhrn'      => $souhrn,
        'obsazenost'  => $obsazenost,
        'sluzby'      => $sluzby_stat,
        'po_dnech'    => $po_dnech,
    ]);
}

json_error('Neznámý admin endpoint.', 404);

Youez - 2016 - github.com/yon3zu
LinuXploit