| 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/nastaveni.php
// Čtení a zápis nastavení hotelu
// Veřejný subset (název, hodnocení) dostupný bez přihlášení
// ============================================================
$action = $_GET['action'] ?? 'seznam';
$input = json_decode(file_get_contents('php://input'), true) ?? [];
match ($action) {
'verejne' => nas_verejne(),
'seznam' => nas_seznam(),
'ulozit' => nas_ulozit($input),
default => api_response(false, null, 'Neznámá akce', 400),
};
// ------------------------------------------------------------
// VEŘEJNÝ SUBSET — bez přihlášení (pro rezervační formulář)
// ------------------------------------------------------------
function nas_verejne(): never {
$klice = [
'hotel_nazev', 'hotel_telefon', 'hotel_email', 'hotel_adresa', 'hotel_web',
'hotel_iban', 'hotel_vs_prefix',
'uvodni_text', 'uvodni_text_en', 'uvodni_text_de',
'checkin_cas', 'checkout_cas', 'uvodni_text',
'rezervace_min_predem_dni', 'rezervace_storno_dni',
'hodnoceni_verejne',
];
$data = [];
foreach ($klice as $k) {
$data[$k] = nastaveni($k);
}
// Agregát hodnocení (pokud je veřejné zapnuto)
if ($data['hodnoceni_verejne'] === '1') {
$agg = db_row(
'SELECT ROUND(AVG(hvezdicky), 1) AS prumer, COUNT(*) AS pocet FROM hodnoceni'
);
$data['hodnoceni_prumer'] = $agg['prumer'];
$data['hodnoceni_pocet'] = $agg['pocet'];
}
api_response(true, $data);
}
// ------------------------------------------------------------
// PLNÝ SEZNAM — vyžaduje přihlášení admin/manažer
// ------------------------------------------------------------
function nas_seznam(): never {
$user = auth_check();
auth_require_role($user, ['admin', 'manazer']);
$nastaveni = db_rows('SELECT klic, hodnota, popis FROM nastaveni ORDER BY klic ASC');
api_response(true, $nastaveni);
}
// ------------------------------------------------------------
// ULOŽENÍ — vyžaduje přihlášení admin/manažer
// ------------------------------------------------------------
function nas_ulozit(array $input): never {
$user = auth_check();
auth_require_role($user, ['admin', 'manazer']);
// Klíče které nesmí být prázdné
$povinne = ['hotel_nazev', 'checkin_cas', 'checkout_cas'];
// Klíče pouze pro admina
$pouze_admin = [];
$povolene = [
'hotel_nazev', 'hotel_telefon', 'hotel_email', 'hotel_adresa', 'hotel_web',
'hotel_iban', 'hotel_vs_prefix',
'uvodni_text', 'uvodni_text_en', 'uvodni_text_de',
'checkin_cas', 'checkout_cas',
'rezervace_min_predem_dni', 'rezervace_storno_dni', 'min_pobyt_noci',
'parkovani_kapacita', 'dobijeni_kapacita',
'pripominka_zapnuta', 'pripominka_hodin',
'hodnoceni_zapnuto', 'hodnoceni_hodin_po', 'hodnoceni_verejne',
'uvodni_text', 'cislo_uctu',
];
$chyby = [];
foreach ($input as $klic => $hodnota) {
if (!in_array($klic, $povolene, true)) continue;
if (in_array($klic, $pouze_admin, true) && $user['role'] !== 'admin') {
$chyby[] = 'Klíč "' . $klic . '" může měnit pouze admin.';
continue;
}
$hodnota = trim((string)$hodnota);
if (in_array($klic, $povinne, true) && $hodnota === '') {
$chyby[] = 'Hodnota "' . $klic . '" nesmí být prázdná.';
continue;
}
// Specifické validace
if ($klic === 'hotel_email' && $hodnota && !filter_var($hodnota, FILTER_VALIDATE_EMAIL)) {
$chyby[] = 'Neplatný formát e-mailu hotelu.';
continue;
}
if (in_array($klic, ['checkin_cas', 'checkout_cas'], true)) {
if (!preg_match('/^\d{2}:\d{2}$/', $hodnota)) {
$chyby[] = 'Neplatný formát času pro "' . $klic . '" (očekáváno HH:MM).';
continue;
}
}
if (in_array($klic, [
'rezervace_min_predem_dni', 'rezervace_storno_dni', 'min_pobyt_noci',
'parkovani_kapacita', 'dobijeni_kapacita',
'pripominka_hodin', 'hodnoceni_hodin_po',
], true)) {
if (!ctype_digit($hodnota) || (int)$hodnota < 0) {
$chyby[] = '"' . $klic . '" musí být kladné celé číslo.';
continue;
}
}
db_query(
'INSERT INTO nastaveni (klic, hodnota) VALUES (?, ?)
ON DUPLICATE KEY UPDATE hodnota = VALUES(hodnota)',
[$klic, $hodnota]
);
}
if ($chyby) {
api_response(false, ['chyby' => $chyby], implode(' ', $chyby), 400);
}
// Vymazat cache nastavení (statická proměnná v db.php)
// Při příštím volání nastaveni() se načte čerstvě z DB
api_response(true, null);
}