| 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 : |
<?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];
}