| 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/jservices_cz/ |
Upload File : |
<?php
declare(strict_types=1);
require_once __DIR__ . '/config.php';
vyzaduj_prihlaseni();
// --- Zpracování akcí ---
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$akce = (string) ($_POST['akce'] ?? '');
if ($akce === 'pridat_recenzi') {
$stmt = $pdo->prepare(
'INSERT INTO recenze (jmeno, text, hodnoceni, datum_recenze, zdroj, viditelna) VALUES (:j, :t, :h, :d, :z, :v)'
);
$stmt->execute([
'j' => trim((string) ($_POST['jmeno'] ?? '')),
't' => trim((string) ($_POST['text'] ?? '')),
'h' => max(1, min(5, (int) ($_POST['hodnoceni'] ?? 5))),
'd' => trim((string) ($_POST['datum_recenze'] ?? '')) !== '' ? $_POST['datum_recenze'] : date('Y-m-d'),
'z' => in_array($_POST['zdroj'] ?? '', ['facebook', 'google', 'rucne'], true) ? $_POST['zdroj'] : 'rucne',
'v' => isset($_POST['viditelna']) ? 1 : 0,
]);
header('Location: admin.php?sekce=recenze');
exit;
}
if ($akce === 'upravit_recenzi') {
$stmt = $pdo->prepare(
'UPDATE recenze SET jmeno = :j, text = :t, hodnoceni = :h, datum_recenze = :d, zdroj = :z WHERE id = :id'
);
$stmt->execute([
'j' => trim((string) ($_POST['jmeno'] ?? '')),
't' => trim((string) ($_POST['text'] ?? '')),
'h' => max(1, min(5, (int) ($_POST['hodnoceni'] ?? 5))),
'd' => trim((string) ($_POST['datum_recenze'] ?? '')) !== '' ? $_POST['datum_recenze'] : date('Y-m-d'),
'z' => in_array($_POST['zdroj'] ?? '', ['facebook', 'google', 'rucne'], true) ? $_POST['zdroj'] : 'rucne',
'id' => (int) ($_POST['id'] ?? 0),
]);
header('Location: admin.php?sekce=recenze');
exit;
}
if ($akce === 'prepnout_viditelnost_recenze') {
$stmt = $pdo->prepare('UPDATE recenze SET viditelna = 1 - viditelna WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=recenze');
exit;
}
if ($akce === 'smazat_recenzi') {
$stmt = $pdo->prepare('DELETE FROM recenze WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=recenze');
exit;
}
if ($akce === 'oznacit_poptavku') {
$stmt = $pdo->prepare('UPDATE poptavky SET precteno = 1 WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=poptavky');
exit;
}
if ($akce === 'oznacit_vse_precteno') {
$pdo->exec('UPDATE poptavky SET precteno = 1 WHERE precteno = 0');
header('Location: admin.php?sekce=poptavky');
exit;
}
if ($akce === 'smazat_poptavku') {
$stmt = $pdo->prepare('DELETE FROM poptavky WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=poptavky');
exit;
}
if ($akce === 'spustit_zalohu') {
$php = '/var/packages/PHP8.2/target/usr/local/bin/php82';
$skript = __DIR__ . '/backup.php';
$log = '/volume1/web/_ADMIN/auto_backup/backup_last.log';
if (isset($_POST['stahni'])) {
// Synchronní – stáhnout ZIP (může trvat déle, ale uživatel čeká)
$zipSoubor = require __DIR__ . '/backup.php';
if ($zipSoubor && file_exists($zipSoubor)) {
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="' . basename($zipSoubor) . '"');
header('Content-Length: ' . filesize($zipSoubor));
readfile($zipSoubor);
exit;
}
} else {
// Asynchronní – spustí zálohu na pozadí, okamžitě přesměruje
$prikaz = sprintf('%s %s > %s 2>&1 &',
escapeshellarg($php),
escapeshellarg($skript),
escapeshellarg($log)
);
exec($prikaz);
}
header('Location: admin.php?sekce=nastaveni&zaloha=ok');
exit;
}
if ($akce === 'ulozit_favicon') {
if (!empty($_FILES['favicon']['name'])) {
$stara = nacti_nastaveni($pdo, 'favicon_soubor', '');
$nova = zpracuj_nahrani_obrazku($_FILES['favicon'], 'favicon', 64, 64);
if ($nova !== '') {
smaz_soubor_obrazku($stara);
ulozit_nastaveni($pdo, 'favicon_soubor', $nova);
}
}
header('Location: admin.php?sekce=nastaveni&ulozeno=1');
exit;
}
if ($akce === 'pridat_polozku_menu') {
$nadrazena = trim((string) ($_POST['nadrazena_id'] ?? ''));
$ikonaSoubor = '';
if (!empty($_FILES['ikona_soubor']['name'])) {
$ikonaSoubor = zpracuj_nahrani_obrazku($_FILES['ikona_soubor'], 'menu', 32, 32);
}
$stmt = $pdo->prepare(
'INSERT INTO menu_polozky (nadrazena_id, text, url, ikona_soubor, poradi, pozice, viditelna) VALUES (:n, :t, :u, :i, :r, :pz, :v)'
);
$stmt->execute([
'n' => $nadrazena !== '' ? (int) $nadrazena : null,
't' => trim((string) ($_POST['text'] ?? '')),
'u' => trim((string) ($_POST['url'] ?? '')) !== '' ? trim((string) $_POST['url']) : null,
'i' => $ikonaSoubor !== '' ? $ikonaSoubor : null,
'r' => (int) ($_POST['poradi'] ?? 0),
'pz' => $_POST['pozice'] ?? 'hlavni',
'v' => isset($_POST['viditelna']) ? 1 : 0,
]);
header('Location: admin.php?sekce=menu');
exit;
}
if ($akce === 'upravit_polozku_menu') {
$nadrazena = trim((string) ($_POST['nadrazena_id'] ?? ''));
$id = (int) ($_POST['id'] ?? 0);
$stmtStar = $pdo->prepare('SELECT ikona_soubor FROM menu_polozky WHERE id = :id');
$stmtStar->execute(['id' => $id]);
$staraIkona = (string) ($stmtStar->fetchColumn() ?? '');
$ikonaSoubor = $staraIkona;
if (!empty($_FILES['ikona_soubor']['name'])) {
$nova = zpracuj_nahrani_obrazku($_FILES['ikona_soubor'], 'menu', 32, 32);
if ($nova !== '') {
smaz_soubor_obrazku($staraIkona);
$ikonaSoubor = $nova;
}
}
if (isset($_POST['smazat_ikonu']) && $_POST['smazat_ikonu'] === '1') {
smaz_soubor_obrazku($staraIkona);
$ikonaSoubor = '';
}
$stmt = $pdo->prepare(
'UPDATE menu_polozky SET nadrazena_id = :n, text = :t, url = :u, ikona_soubor = :i, poradi = :r, pozice = :pz WHERE id = :id'
);
$stmt->execute([
'n' => $nadrazena !== '' ? (int) $nadrazena : null,
't' => trim((string) ($_POST['text'] ?? '')),
'u' => trim((string) ($_POST['url'] ?? '')) !== '' ? trim((string) $_POST['url']) : null,
'i' => $ikonaSoubor !== '' ? $ikonaSoubor : null,
'r' => (int) ($_POST['poradi'] ?? 0),
'pz' => $_POST['pozice'] ?? 'hlavni',
'id' => $id,
]);
header('Location: admin.php?sekce=menu');
exit;
}
if ($akce === 'prepnout_viditelnost_menu') {
$stmt = $pdo->prepare('UPDATE menu_polozky SET viditelna = 1 - viditelna WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=menu');
exit;
}
if ($akce === 'smazat_polozku_menu') {
$id = (int) ($_POST['id'] ?? 0);
// smaže i případné podpoložky (např. Windows/Mac pod AnyDesk)
$stmtDeti = $pdo->prepare('DELETE FROM menu_polozky WHERE nadrazena_id = :id');
$stmtDeti->execute(['id' => $id]);
$stmt = $pdo->prepare('DELETE FROM menu_polozky WHERE id = :id');
$stmt->execute(['id' => $id]);
header('Location: admin.php?sekce=menu');
exit;
}
if ($akce === 'pridat_fakturacni_kontakt') {
$stmt = $pdo->prepare(
'INSERT INTO fakturacni_kontakty (jmeno, prijmeni, adresa, ico, dic, telefon, email, platce_dph, poznamka, poradi, viditelny)
VALUES (:jm, :pr, :ad, :ic, :di, :te, :em, :pd, :pz, :po, :vi)'
);
$stmt->execute([
'jm' => trim((string) ($_POST['jmeno'] ?? '')),
'pr' => trim((string) ($_POST['prijmeni'] ?? '')),
'ad' => trim((string) ($_POST['adresa'] ?? '')),
'ic' => trim((string) ($_POST['ico'] ?? '')),
'di' => trim((string) ($_POST['dic'] ?? '')),
'te' => trim((string) ($_POST['telefon'] ?? '')),
'em' => trim((string) ($_POST['email'] ?? '')),
'pd' => isset($_POST['platce_dph']) ? 1 : 0,
'pz' => trim((string) ($_POST['poznamka'] ?? '')),
'po' => (int) ($_POST['poradi'] ?? 0),
'vi' => isset($_POST['viditelny']) ? 1 : 0,
]);
header('Location: admin.php?sekce=kontakty');
exit;
}
if ($akce === 'upravit_fakturacni_kontakt') {
$stmt = $pdo->prepare(
'UPDATE fakturacni_kontakty SET jmeno = :jm, prijmeni = :pr, adresa = :ad, ico = :ic,
dic = :di, telefon = :te, email = :em, platce_dph = :pd, poznamka = :pz, poradi = :po WHERE id = :id'
);
$stmt->execute([
'jm' => trim((string) ($_POST['jmeno'] ?? '')),
'pr' => trim((string) ($_POST['prijmeni'] ?? '')),
'ad' => trim((string) ($_POST['adresa'] ?? '')),
'ic' => trim((string) ($_POST['ico'] ?? '')),
'di' => trim((string) ($_POST['dic'] ?? '')),
'te' => trim((string) ($_POST['telefon'] ?? '')),
'em' => trim((string) ($_POST['email'] ?? '')),
'pd' => isset($_POST['platce_dph']) ? 1 : 0,
'pz' => trim((string) ($_POST['poznamka'] ?? '')),
'po' => (int) ($_POST['poradi'] ?? 0),
'id' => (int) ($_POST['id'] ?? 0),
]);
header('Location: admin.php?sekce=kontakty');
exit;
}
if ($akce === 'prepnout_viditelnost_kontaktu') {
$stmt = $pdo->prepare('UPDATE fakturacni_kontakty SET viditelny = 1 - viditelny WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=kontakty');
exit;
}
if ($akce === 'smazat_fakturacni_kontakt') {
$stmt = $pdo->prepare('DELETE FROM fakturacni_kontakty WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=kontakty');
exit;
}
if ($akce === 'pridat_spotlight') {
$stmt = $pdo->prepare(
'INSERT INTO spotlight (nadpis, popis, vyhoda1, vyhoda2, vyhoda3, stitek, poradi, viditelna)
VALUES (:na, :po, :v1, :v2, :v3, :st, :pr, :vi)'
);
$stmt->execute([
'na' => trim((string) ($_POST['nadpis'] ?? '')),
'po' => trim((string) ($_POST['popis'] ?? '')),
'v1' => trim((string) ($_POST['vyhoda1'] ?? '')),
'v2' => trim((string) ($_POST['vyhoda2'] ?? '')),
'v3' => trim((string) ($_POST['vyhoda3'] ?? '')),
'st' => trim((string) ($_POST['stitek'] ?? '')),
'pr' => (int) ($_POST['poradi'] ?? 0),
'vi' => isset($_POST['viditelna']) ? 1 : 0,
]);
header('Location: admin.php?sekce=spotlight');
exit;
}
if ($akce === 'upravit_spotlight') {
$stmt = $pdo->prepare(
'UPDATE spotlight SET nadpis = :na, popis = :po, vyhoda1 = :v1, vyhoda2 = :v2,
vyhoda3 = :v3, stitek = :st, poradi = :pr WHERE id = :id'
);
$stmt->execute([
'na' => trim((string) ($_POST['nadpis'] ?? '')),
'po' => trim((string) ($_POST['popis'] ?? '')),
'v1' => trim((string) ($_POST['vyhoda1'] ?? '')),
'v2' => trim((string) ($_POST['vyhoda2'] ?? '')),
'v3' => trim((string) ($_POST['vyhoda3'] ?? '')),
'st' => trim((string) ($_POST['stitek'] ?? '')),
'pr' => (int) ($_POST['poradi'] ?? 0),
'id' => (int) ($_POST['id'] ?? 0),
]);
header('Location: admin.php?sekce=spotlight');
exit;
}
if ($akce === 'prepnout_viditelnost_spotlight') {
$stmt = $pdo->prepare('UPDATE spotlight SET viditelna = 1 - viditelna WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=spotlight');
exit;
}
if ($akce === 'smazat_spotlight') {
$stmt = $pdo->prepare('DELETE FROM spotlight WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=spotlight');
exit;
}
if ($akce === 'pridat_statistiku') {
$stmt = $pdo->prepare(
'INSERT INTO statistiky (popisek, hodnota, poradi, viditelna) VALUES (:p, :h, :r, :v)'
);
$stmt->execute([
'p' => trim((string) ($_POST['popisek'] ?? '')),
'h' => trim((string) ($_POST['hodnota'] ?? '')),
'r' => (int) ($_POST['poradi'] ?? 0),
'v' => isset($_POST['viditelna']) ? 1 : 0,
]);
header('Location: admin.php?sekce=statistiky');
exit;
}
if ($akce === 'upravit_statistiku') {
$stmt = $pdo->prepare(
'UPDATE statistiky SET popisek = :p, hodnota = :h, poradi = :r WHERE id = :id'
);
$stmt->execute([
'p' => trim((string) ($_POST['popisek'] ?? '')),
'h' => trim((string) ($_POST['hodnota'] ?? '')),
'r' => (int) ($_POST['poradi'] ?? 0),
'id' => (int) ($_POST['id'] ?? 0),
]);
header('Location: admin.php?sekce=statistiky');
exit;
}
if ($akce === 'prepnout_viditelnost_statistiky') {
$stmt = $pdo->prepare('UPDATE statistiky SET viditelna = 1 - viditelna WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=statistiky');
exit;
}
if ($akce === 'smazat_statistiku') {
$stmt = $pdo->prepare('DELETE FROM statistiky WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=statistiky');
exit;
}
if ($akce === 'pridat_proc_my') {
$stmt = $pdo->prepare(
'INSERT INTO proc_my (tucna_cast, zbytek_vety, ikona, poradi, viditelna) VALUES (:t, :z, :i, :p, :v)'
);
$stmt->execute([
't' => trim((string) ($_POST['tucna_cast'] ?? '')),
'z' => trim((string) ($_POST['zbytek_vety'] ?? '')),
'i' => array_key_exists($_POST['ikona'] ?? '', seznam_ikon_sluzeb()) ? $_POST['ikona'] : 'check',
'p' => (int) ($_POST['poradi'] ?? 0),
'v' => isset($_POST['viditelna']) ? 1 : 0,
]);
header('Location: admin.php?sekce=procmy');
exit;
}
if ($akce === 'upravit_proc_my') {
$stmt = $pdo->prepare(
'UPDATE proc_my SET tucna_cast = :t, zbytek_vety = :z, ikona = :i, poradi = :p WHERE id = :id'
);
$stmt->execute([
't' => trim((string) ($_POST['tucna_cast'] ?? '')),
'z' => trim((string) ($_POST['zbytek_vety'] ?? '')),
'i' => array_key_exists($_POST['ikona'] ?? '', seznam_ikon_sluzeb()) ? $_POST['ikona'] : 'check',
'p' => (int) ($_POST['poradi'] ?? 0),
'id' => (int) ($_POST['id'] ?? 0),
]);
header('Location: admin.php?sekce=procmy');
exit;
}
if ($akce === 'prepnout_viditelnost_proc_my') {
$stmt = $pdo->prepare('UPDATE proc_my SET viditelna = 1 - viditelna WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=procmy');
exit;
}
if ($akce === 'smazat_proc_my') {
$stmt = $pdo->prepare('DELETE FROM proc_my WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=procmy');
exit;
}
if ($akce === 'ulozit_obsah') {
$platneKlice = array_keys(definice_obsahu());
foreach ($platneKlice as $klic) {
if (array_key_exists($klic, $_POST)) {
ulozit_nastaveni($pdo, $klic, trim((string) $_POST[$klic]));
}
}
$cast = (string) ($_POST['cast'] ?? '');
header('Location: admin.php?sekce=obsah&cast=' . urlencode($cast) . '&ulozeno=1');
exit;
}
if ($akce === 'pridat_sluzbu') {
$stmt = $pdo->prepare(
'INSERT INTO sluzby (nazev, popis, ikona, poradi, viditelna) VALUES (:n, :p, :i, :r, :v)'
);
$stmt->execute([
'n' => trim((string) ($_POST['nazev'] ?? '')),
'p' => trim((string) ($_POST['popis'] ?? '')),
'i' => array_key_exists($_POST['ikona'] ?? '', seznam_ikon_sluzeb()) ? $_POST['ikona'] : 'code',
'r' => (int) ($_POST['poradi'] ?? 0),
'v' => isset($_POST['viditelna']) ? 1 : 0,
]);
header('Location: admin.php?sekce=sluzby');
exit;
}
if ($akce === 'upravit_sluzbu') {
$stmt = $pdo->prepare(
'UPDATE sluzby SET nazev = :n, popis = :p, ikona = :i, poradi = :r WHERE id = :id'
);
$stmt->execute([
'n' => trim((string) ($_POST['nazev'] ?? '')),
'p' => trim((string) ($_POST['popis'] ?? '')),
'i' => array_key_exists($_POST['ikona'] ?? '', seznam_ikon_sluzeb()) ? $_POST['ikona'] : 'code',
'r' => (int) ($_POST['poradi'] ?? 0),
'id' => (int) ($_POST['id'] ?? 0),
]);
header('Location: admin.php?sekce=sluzby');
exit;
}
if ($akce === 'prepnout_viditelnost_sluzby') {
$stmt = $pdo->prepare('UPDATE sluzby SET viditelna = 1 - viditelna WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=sluzby');
exit;
}
if ($akce === 'smazat_sluzbu') {
$stmt = $pdo->prepare('DELETE FROM sluzby WHERE id = :id');
$stmt->execute(['id' => (int) ($_POST['id'] ?? 0)]);
header('Location: admin.php?sekce=sluzby');
exit;
}
if ($akce === 'ulozit_nastaveni') {
ulozit_nastaveni($pdo, 'telefon', trim((string) ($_POST['telefon'] ?? '')));
ulozit_nastaveni($pdo, 'email', trim((string) ($_POST['email'] ?? '')));
ulozit_nastaveni($pdo, 'adresa', trim((string) ($_POST['adresa'] ?? '')));
ulozit_nastaveni($pdo, 'facebook_url', trim((string) ($_POST['facebook_url'] ?? '')));
ulozit_nastaveni($pdo, 'instagram_url', trim((string) ($_POST['instagram_url'] ?? '')));
ulozit_nastaveni($pdo, 'udrzba_aktivni', isset($_POST['udrzba_aktivni']) ? '1' : '0');
$noveHeslo = trim((string) ($_POST['udrzba_heslo'] ?? ''));
if ($noveHeslo !== '') {
ulozit_nastaveni($pdo, 'udrzba_heslo_hash', password_hash($noveHeslo, PASSWORD_DEFAULT));
}
header('Location: admin.php?sekce=nastaveni&ulozeno=1');
exit;
}
}
$sekce = in_array($_GET['sekce'] ?? '', ['recenze', 'poptavky', 'nastaveni', 'obsah', 'sluzby', 'menu', 'kontakty', 'procmy', 'statistiky', 'spotlight'], true)
? $_GET['sekce']
: 'obsah';
$vsechnyRecenze = $pdo->query('SELECT * FROM recenze ORDER BY datum_recenze DESC, poradi ASC')->fetchAll();
$vsechnyPoptavky = $pdo->query('SELECT * FROM poptavky ORDER BY vytvoreno DESC')->fetchAll();
$vsechnySluzby = $pdo->query('SELECT * FROM sluzby ORDER BY poradi ASC, id ASC')->fetchAll();
$vsechnyPolozkyMenu = $pdo->query('SELECT * FROM menu_polozky ORDER BY poradi ASC, id ASC')->fetchAll();
$vsechnyKontakty = $pdo->query('SELECT * FROM fakturacni_kontakty ORDER BY poradi ASC, id ASC')->fetchAll();
$vsechnyProcMy = $pdo->query('SELECT * FROM proc_my ORDER BY poradi ASC, id ASC')->fetchAll();
$vsechnyStatistiky = $pdo->query('SELECT * FROM statistiky ORDER BY poradi ASC, id ASC')->fetchAll();
$vsechnySpotlight = $pdo->query('SELECT * FROM spotlight ORDER BY poradi ASC, id ASC')->fetchAll();
$nastaveni = nacti_vsechna_nastaveni($pdo);
$upravovanySpotlight = null;
if (isset($_GET['upravit_spotlight'])) {
$idUpravy = (int) $_GET['upravit_spotlight'];
foreach ($vsechnySpotlight as $sp) {
if ((int) $sp['id'] === $idUpravy) {
$upravovanySpotlight = $sp;
break;
}
}
}
$upravovanaStatistika = null;
if (isset($_GET['upravit_statistiku'])) {
$idUpravy = (int) $_GET['upravit_statistiku'];
foreach ($vsechnyStatistiky as $s) {
if ((int) $s['id'] === $idUpravy) {
$upravovanaStatistika = $s;
break;
}
}
}
$upravovanyProcMy = null;
if (isset($_GET['upravit_proc_my'])) {
$idUpravy = (int) $_GET['upravit_proc_my'];
foreach ($vsechnyProcMy as $pm) {
if ((int) $pm['id'] === $idUpravy) {
$upravovanyProcMy = $pm;
break;
}
}
}
$hlavniPolozkyMenu = array_filter($vsechnyPolozkyMenu, fn($p) => $p['nadrazena_id'] === null);
$upravovanaPolozkaMenu = null;
if (isset($_GET['upravit_polozku'])) {
$idUpravy = (int) $_GET['upravit_polozku'];
foreach ($vsechnyPolozkyMenu as $p) {
if ((int) $p['id'] === $idUpravy) {
$upravovanaPolozkaMenu = $p;
break;
}
}
}
$upravovanyKontakt = null;
if (isset($_GET['upravit_kontakt'])) {
$idUpravy = (int) $_GET['upravit_kontakt'];
foreach ($vsechnyKontakty as $k) {
if ((int) $k['id'] === $idUpravy) {
$upravovanyKontakt = $k;
break;
}
}
}
$upravovanaSluzba = null;
if (isset($_GET['upravit_sluzbu'])) {
$idUpravy = (int) $_GET['upravit_sluzbu'];
foreach ($vsechnySluzby as $s) {
if ((int) $s['id'] === $idUpravy) {
$upravovanaSluzba = $s;
break;
}
}
}
$pocetNeprectenych = 0;
foreach ($vsechnyPoptavky as $p) {
if ((int) $p['precteno'] === 0) {
$pocetNeprectenych++;
}
}
// Recenze v editaci (pokud je v URL ?upravit=ID)
$upravovanaRecenze = null;
if (isset($_GET['upravit'])) {
$idUpravy = (int) $_GET['upravit'];
foreach ($vsechnyRecenze as $r) {
if ((int) $r['id'] === $idUpravy) {
$upravovanaRecenze = $r;
break;
}
}
}
$nazvyZdroju = ['facebook' => 'Facebook', 'google' => 'Google', 'rucne' => 'Ručně'];
?>
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="robots" content="noindex, nofollow">
<title>Administrace | J Services</title>
<link rel="stylesheet" href="assets/css/admin.css">
<script>
function initIkonaSelect(selectId, hodnotaId, dropdownId) {
var select = document.getElementById(selectId);
if (!select) return;
var hodnota = document.getElementById('ikona-select-hodnota-' + hodnotaId);
var dropdown = document.getElementById('ikona-select-dropdown-' + dropdownId);
var hidden = document.getElementById('ikona-hidden-' + hodnotaId);
hodnota.addEventListener('click', function (e) {
e.stopPropagation();
dropdown.style.display = dropdown.style.display === 'none' ? 'block' : 'none';
});
dropdown.querySelectorAll('.ikona-select-polozka').forEach(function (polozka) {
polozka.addEventListener('click', function () {
var val = polozka.dataset.value;
var ikSvg = polozka.querySelector('.ikona-select-ikona').innerHTML;
var text = polozka.querySelectorAll('span')[1].textContent;
hidden.value = val;
hodnota.querySelector('.ikona-select-ikona').innerHTML = ikSvg;
hodnota.querySelector('.ikona-select-text').textContent = text;
dropdown.querySelectorAll('.ikona-select-polozka').forEach(function (p) { p.classList.remove('aktivni'); });
polozka.classList.add('aktivni');
dropdown.style.display = 'none';
});
});
document.addEventListener('click', function () { dropdown.style.display = 'none'; });
}
document.addEventListener('DOMContentLoaded', function () {
initIkonaSelect('ikona-select', '', '');
initIkonaSelect('ikona-select-pm', 'pm', 'pm');
});
</script>
</head>
<body>
<header class="admin-hlavicka">
<div class="logo">J Services – administrace</div>
<div>
<a href="index.php" target="_blank" class="btn btn-sm">Zobrazit web</a>
<a href="logout.php" class="btn btn-sm">Odhlásit se</a>
</div>
</header>
<nav class="admin-taby">
<a href="admin.php?sekce=obsah" class="<?= $sekce === 'obsah' ? 'aktivni' : '' ?>">Obsah webu</a>
<a href="admin.php?sekce=statistiky" class="<?= $sekce === 'statistiky' ? 'aktivni' : '' ?>">Statistiky</a>
<a href="admin.php?sekce=spotlight" class="<?= $sekce === 'spotlight' ? 'aktivni' : '' ?>">Novinky</a>
<a href="admin.php?sekce=sluzby" class="<?= $sekce === 'sluzby' ? 'aktivni' : '' ?>">Služby</a>
<a href="admin.php?sekce=procmy" class="<?= $sekce === 'procmy' ? 'aktivni' : '' ?>">Proč my</a>
<a href="admin.php?sekce=recenze" class="<?= $sekce === 'recenze' ? 'aktivni' : '' ?>">Reference</a>
<a href="admin.php?sekce=poptavky" class="<?= $sekce === 'poptavky' ? 'aktivni' : '' ?>">
Poptávky<?php if ($pocetNeprectenych > 0): ?><span class="znacka"><?= $pocetNeprectenych ?></span><?php endif; ?>
</a>
<a href="admin.php?sekce=kontakty" class="<?= $sekce === 'kontakty' ? 'aktivni' : '' ?>">Fakt. kontakty</a>
<a href="admin.php?sekce=nastaveni" class="<?= $sekce === 'nastaveni' ? 'aktivni' : '' ?>">Nastavení</a>
<a href="admin.php?sekce=menu" class="<?= $sekce === 'menu' ? 'aktivni' : '' ?>">Menu</a>
</nav>
<div class="admin-obsah">
<?php if ($sekce === 'recenze'): ?>
<div class="karta">
<h2 style="margin-bottom:16px;"><?= $upravovanaRecenze ? 'Upravit recenzi' : 'Přidat recenzi' ?></h2>
<form method="post">
<input type="hidden" name="akce" value="<?= $upravovanaRecenze ? 'upravit_recenzi' : 'pridat_recenzi' ?>">
<?php if ($upravovanaRecenze): ?>
<input type="hidden" name="id" value="<?= (int) $upravovanaRecenze['id'] ?>">
<?php endif; ?>
<label for="jmeno">Jméno</label>
<input type="text" id="jmeno" name="jmeno" required value="<?= e($upravovanaRecenze['jmeno'] ?? '') ?>">
<label for="text">Text recenze</label>
<textarea id="text" name="text" required><?= e($upravovanaRecenze['text'] ?? '') ?></textarea>
<label for="hodnoceni">Hodnocení (1–5)</label>
<input type="number" id="hodnoceni" name="hodnoceni" min="1" max="5" value="<?= (int) ($upravovanaRecenze['hodnoceni'] ?? 5) ?>">
<label for="datum_recenze">Datum reference</label>
<input type="date" id="datum_recenze" name="datum_recenze" value="<?= e($upravovanaRecenze['datum_recenze'] ?? date('Y-m-d')) ?>">
<label for="zdroj">Zdroj</label>
<select id="zdroj" name="zdroj">
<?php foreach ($nazvyZdroju as $klic => $nazev): ?>
<option value="<?= e($klic) ?>" <?= ($upravovanaRecenze['zdroj'] ?? 'rucne') === $klic ? 'selected' : '' ?>><?= e($nazev) ?></option>
<?php endforeach; ?>
</select>
<?php if (!$upravovanaRecenze): ?>
<div class="checkbox-radek">
<input type="checkbox" id="viditelna" name="viditelna" checked>
<label for="viditelna">Zobrazit na webu hned</label>
</div>
<?php endif; ?>
<button type="submit" class="btn btn-primary"><?= $upravovanaRecenze ? 'Uložit změny' : 'Přidat recenzi' ?></button>
<?php if ($upravovanaRecenze): ?>
<a href="admin.php?sekce=recenze" class="btn">Zrušit</a>
<?php endif; ?>
</form>
</div>
<div class="karta">
<h2 style="margin-bottom:16px;">Všechny recenze (<?= count($vsechnyRecenze) ?>)</h2>
<?php if (count($vsechnyRecenze) === 0): ?>
<p style="color:var(--text-secondary);">Zatím žádné recenze.</p>
<?php else: ?>
<table>
<thead>
<tr><th>Jméno</th><th>Text</th><th>Hodn.</th><th>Datum</th><th>Zdroj</th><th>Stav</th><th>Akce</th></tr>
</thead>
<tbody>
<?php foreach ($vsechnyRecenze as $r): ?>
<tr>
<td><?= e($r['jmeno']) ?></td>
<td class="text-zkraceny"><?= e($r['text']) ?></td>
<td><?= (int) $r['hodnoceni'] ?>/5</td>
<td><?= e(date('j. n. Y', strtotime((string) $r['datum_recenze']))) ?></td>
<td><?= e($nazvyZdroju[$r['zdroj']] ?? $r['zdroj']) ?></td>
<td>
<?php if ((int) $r['viditelna'] === 1): ?>
<span class="stitek stitek-viditelna">viditelná</span>
<?php else: ?>
<span class="stitek stitek-skryta">skrytá</span>
<?php endif; ?>
</td>
<td class="akce-bunka">
<a href="admin.php?sekce=recenze&upravit=<?= (int) $r['id'] ?>" class="btn btn-sm">Upravit</a>
<form method="post" style="display:inline;">
<input type="hidden" name="akce" value="prepnout_viditelnost_recenze">
<input type="hidden" name="id" value="<?= (int) $r['id'] ?>">
<button type="submit" class="btn btn-sm"><?= (int) $r['viditelna'] === 1 ? 'Skrýt' : 'Zobrazit' ?></button>
</form>
<form method="post" style="display:inline;" onsubmit="return confirm('Opravdu smazat tuto recenzi?');">
<input type="hidden" name="akce" value="smazat_recenzi">
<input type="hidden" name="id" value="<?= (int) $r['id'] ?>">
<button type="submit" class="btn btn-sm btn-danger">Smazat</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<?php elseif ($sekce === 'sluzby'): ?>
<div class="karta">
<h2 style="margin-bottom:16px;"><?= $upravovanaSluzba ? 'Upravit službu' : 'Přidat službu' ?></h2>
<form method="post">
<input type="hidden" name="akce" value="<?= $upravovanaSluzba ? 'upravit_sluzbu' : 'pridat_sluzbu' ?>">
<?php if ($upravovanaSluzba): ?>
<input type="hidden" name="id" value="<?= (int) $upravovanaSluzba['id'] ?>">
<?php endif; ?>
<label for="nazev">Název</label>
<input type="text" id="nazev" name="nazev" required value="<?= e($upravovanaSluzba['nazev'] ?? '') ?>">
<label for="popis">Krátký popis</label>
<input type="text" id="popis" name="popis" required value="<?= e($upravovanaSluzba['popis'] ?? '') ?>">
<label>Ikona</label>
<?php $aktIkonaSluzby = $upravovanaSluzba['ikona'] ?? 'code'; ?>
<div class="ikona-select" id="ikona-select">
<div class="ikona-select-hodnota" id="ikona-select-hodnota">
<span class="ikona-select-ikona"><?= icon($aktIkonaSluzby, 18) ?></span>
<span class="ikona-select-text"><?= e(seznam_ikon_sluzeb()[$aktIkonaSluzby] ?? $aktIkonaSluzby) ?></span>
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" style="margin-left:auto;" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</div>
<div class="ikona-select-dropdown" id="ikona-select-dropdown" style="display:none;">
<?php foreach (seznam_ikon_sluzeb() as $klicIkony => $popisekIkony): ?>
<div class="ikona-select-polozka <?= $aktIkonaSluzby === $klicIkony ? 'aktivni' : '' ?>" data-value="<?= e($klicIkony) ?>">
<span class="ikona-select-ikona"><?= icon($klicIkony, 18) ?></span>
<span><?= e($popisekIkony) ?></span>
</div>
<?php endforeach; ?>
</div>
</div>
<input type="hidden" name="ikona" id="ikona-hidden" value="<?= e($aktIkonaSluzby) ?>">
<label for="poradi">Pořadí (menší číslo = výš)</label>
<input type="number" id="poradi" name="poradi" min="0" value="<?= (int) ($upravovanaSluzba['poradi'] ?? (count($vsechnySluzby) + 1)) ?>">
<?php if (!$upravovanaSluzba): ?>
<div class="checkbox-radek">
<input type="checkbox" id="viditelna_sluzba" name="viditelna" checked>
<label for="viditelna_sluzba">Zobrazit na webu hned</label>
</div>
<?php endif; ?>
<button type="submit" class="btn btn-primary"><?= $upravovanaSluzba ? 'Uložit změny' : 'Přidat službu' ?></button>
<?php if ($upravovanaSluzba): ?>
<a href="admin.php?sekce=sluzby" class="btn">Zrušit</a>
<?php endif; ?>
</form>
</div>
<div class="karta">
<h2 style="margin-bottom:16px;">Všechny služby (<?= count($vsechnySluzby) ?>)</h2>
<?php if (count($vsechnySluzby) === 0): ?>
<p style="color:var(--text-secondary);">Zatím žádné služby.</p>
<?php else: ?>
<table>
<thead>
<tr><th>Pořadí</th><th>Název</th><th>Popis</th><th>Stav</th><th>Akce</th></tr>
</thead>
<tbody>
<?php foreach ($vsechnySluzby as $s): ?>
<tr>
<td><?= (int) $s['poradi'] ?></td>
<td><?= e($s['nazev']) ?></td>
<td class="text-zkraceny"><?= e($s['popis']) ?></td>
<td>
<?php if ((int) $s['viditelna'] === 1): ?>
<span class="stitek stitek-viditelna">viditelná</span>
<?php else: ?>
<span class="stitek stitek-skryta">skrytá</span>
<?php endif; ?>
</td>
<td class="akce-bunka">
<a href="admin.php?sekce=sluzby&upravit_sluzbu=<?= (int) $s['id'] ?>" class="btn btn-sm">Upravit</a>
<form method="post" style="display:inline;">
<input type="hidden" name="akce" value="prepnout_viditelnost_sluzby">
<input type="hidden" name="id" value="<?= (int) $s['id'] ?>">
<button type="submit" class="btn btn-sm"><?= (int) $s['viditelna'] === 1 ? 'Skrýt' : 'Zobrazit' ?></button>
</form>
<form method="post" style="display:inline;" onsubmit="return confirm('Opravdu smazat tuto službu?');">
<input type="hidden" name="akce" value="smazat_sluzbu">
<input type="hidden" name="id" value="<?= (int) $s['id'] ?>">
<button type="submit" class="btn btn-sm btn-danger">Smazat</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<?php elseif ($sekce === 'poptavky'): ?>
<div class="karta">
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:10px;">
<h2>Poptávky z kontaktního formuláře (<?= count($vsechnyPoptavky) ?>)</h2>
<?php if ($pocetNeprectenych > 0): ?>
<form method="post">
<input type="hidden" name="akce" value="oznacit_vse_precteno">
<button type="submit" class="btn btn-sm">Označit vše jako přečtené (<?= $pocetNeprectenych ?>)</button>
</form>
<?php endif; ?>
</div>
<?php if (count($vsechnyPoptavky) === 0): ?>
<p style="color:var(--text-secondary);">Zatím žádné poptávky.</p>
<?php else: ?>
<table>
<thead>
<tr><th>Datum</th><th>Jméno</th><th>Kontakt</th><th>Zpráva</th><th>Stav</th><th>Akce</th></tr>
</thead>
<tbody>
<?php foreach ($vsechnyPoptavky as $p): ?>
<tr>
<td><?= e(date('j. n. Y H:i', strtotime((string) $p['vytvoreno']))) ?></td>
<td><?= e($p['jmeno']) ?></td>
<td>
<a href="mailto:<?= e($p['email']) ?>"><?= e($p['email']) ?></a>
<?php if (!empty($p['telefon'])): ?><br><?= e($p['telefon']) ?><?php endif; ?>
</td>
<td class="text-zkraceny"><?= e($p['zprava']) ?></td>
<td>
<?php if ((int) $p['precteno'] === 0): ?>
<span class="stitek stitek-nove">nové</span>
<?php else: ?>
<span class="stitek stitek-skryta">přečteno</span>
<?php endif; ?>
</td>
<td class="akce-bunka">
<?php if ((int) $p['precteno'] === 0): ?>
<form method="post" style="display:inline;">
<input type="hidden" name="akce" value="oznacit_poptavku">
<input type="hidden" name="id" value="<?= (int) $p['id'] ?>">
<button type="submit" class="btn btn-sm">Označit přečtené</button>
</form>
<?php endif; ?>
<form method="post" style="display:inline;" onsubmit="return confirm('Opravdu smazat tuto poptávku?');">
<input type="hidden" name="akce" value="smazat_poptavku">
<input type="hidden" name="id" value="<?= (int) $p['id'] ?>">
<button type="submit" class="btn btn-sm btn-danger">Smazat</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<?php elseif ($sekce === 'nastaveni'): ?>
<div class="karta">
<h2 style="margin-bottom:16px;">Sociální sítě</h2>
<?php if (isset($_GET['ulozeno'])): ?>
<div class="zprava-uspech">Nastavení bylo uloženo.</div>
<?php endif; ?>
<form method="post">
<input type="hidden" name="akce" value="ulozit_nastaveni">
<label for="facebook_url">Odkaz na Facebook</label>
<input type="text" id="facebook_url" name="facebook_url" value="<?= e($nastaveni['facebook_url'] ?? '') ?>">
<label for="instagram_url">Odkaz na Instagram</label>
<input type="text" id="instagram_url" name="instagram_url" value="<?= e($nastaveni['instagram_url'] ?? '') ?>">
<hr style="border:none;border-top:0.5px solid var(--border-tertiary);margin:20px 0;">
<h2 style="margin-bottom:14px;">Zaheslovaný náhled webu</h2>
<div class="checkbox-radek">
<input type="checkbox" id="udrzba_aktivni" name="udrzba_aktivni" <?= ($nastaveni['udrzba_aktivni'] ?? '0') === '1' ? 'checked' : '' ?>>
<label for="udrzba_aktivni">Aktivní (návštěvníci uvidí "stránky se připravují" a musí zadat heslo)</label>
</div>
<label for="udrzba_heslo">Heslo pro náhled</label>
<input type="text" id="udrzba_heslo" name="udrzba_heslo" placeholder="Ponechte prázdné pro zachování stávajícího hesla">
<button type="submit" class="btn btn-primary">Uložit nastavení</button>
</form>
</div>
<div class="karta">
<h2 style="margin-bottom:16px;">Favicon (ikonka v záložce prohlížeče)</h2>
<?php $favicon = nacti_nastaveni($pdo, 'favicon_soubor', ''); ?>
<?php if ($favicon !== ''): ?>
<div style="display:flex;align-items:center;gap:12px;margin-bottom:14px;">
<img src="<?= e($favicon) ?>" alt="Favicon" style="width:32px;height:32px;object-fit:contain;border:0.5px solid var(--border-tertiary);border-radius:4px;padding:4px;">
<span style="font-size:13px;color:var(--text-secondary);">Aktuální favicon</span>
</div>
<?php endif; ?>
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="akce" value="ulozit_favicon">
<label for="favicon">Nahrát nový favicon <span style="color:var(--text-tertiary);font-weight:400;">(PNG, JPG nebo SVG, doporučeno 64×64 px – zmenší se automaticky)</span></label>
<input type="file" id="favicon" name="favicon" accept="image/*" style="margin-bottom:14px;">
<button type="submit" class="btn btn-primary">Nahrát favicon</button>
</form>
</div>
<div class="karta">
<h2 style="margin-bottom:6px;">Záloha webu</h2>
<p style="font-size:13px;color:var(--text-secondary);margin-bottom:16px;">
Záloha obsahuje kompletní dump databáze + všechny soubory webu. Uloží se do <code>/volume1/backup/jservices_cz/</code>, ponechá se max. 30 záloh.
</p>
<?php if (isset($_GET['zaloha']) && $_GET['zaloha'] === 'ok'): ?>
<div class="zprava-uspech">Záloha byla spuštěna na pozadí – za chvíli se objeví v seznamu níže.</div>
<?php endif; ?>
<?php
$log = '/volume1/web/_ADMIN/auto_backup/backup_last.log';
if (file_exists($log) && filesize($log) > 0): ?>
<div style="background:var(--bg-tertiary);border:0.5px solid var(--border-tertiary);border-radius:var(--radius-md);padding:10px 14px;margin-bottom:16px;">
<p style="font-size:12px;font-weight:500;margin-bottom:6px;">Log poslední zálohy:</p>
<pre style="font-size:11.5px;margin:0;white-space:pre-wrap;color:var(--text-secondary);"><?= e(file_get_contents($log)) ?></pre>
</div>
<?php endif; ?>
<?php
$existujiciZalohy = glob('/volume1/web/_ADMIN/auto_backup/J Services/jservices-*.zip') ?: [];
rsort($existujiciZalohy);
?>
<div style="display:flex;gap:10px;flex-wrap:wrap;margin-bottom:20px;">
<form method="post">
<input type="hidden" name="akce" value="spustit_zalohu">
<button type="submit" class="btn btn-primary">Vytvořit zálohu nyní</button>
</form>
<form method="post">
<input type="hidden" name="akce" value="spustit_zalohu">
<input type="hidden" name="stahni" value="1">
<button type="submit" class="btn">Vytvořit a stáhnout ZIP</button>
</form>
</div>
<?php if (count($existujiciZalohy) > 0): ?>
<h2 style="margin-bottom:10px;font-size:14px;">Existující zálohy (<?= count($existujiciZalohy) ?>)</h2>
<table>
<thead>
<tr><th>Soubor</th><th>Datum</th><th>Velikost</th><th>Stáhnout</th></tr>
</thead>
<tbody>
<?php foreach (array_slice($existujiciZalohy, 0, 10) as $z): ?>
<tr>
<td style="font-size:12.5px;"><?= e(basename($z)) ?></td>
<td style="font-size:12.5px;"><?= e(date('j. n. Y H:i', filemtime($z))) ?></td>
<td style="font-size:12.5px;"><?= round(filesize($z) / 1024 / 1024, 1) ?> MB</td>
<td><a href="admin_download.php?soubor=<?= urlencode(basename($z)) ?>" class="btn btn-sm">⬇ Stáhnout</a></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php if (count($existujiciZalohy) > 10): ?>
<p style="font-size:12px;color:var(--text-tertiary);margin-top:8px;">Zobrazeno 10 z <?= count($existujiciZalohy) ?> záloh.</p>
<?php endif; ?>
<?php else: ?>
<p style="color:var(--text-secondary);font-size:13px;">Zatím žádné zálohy.</p>
<?php endif; ?>
</div>
<?php elseif ($sekce === 'menu'): ?>
<div class="karta">
<h2 style="margin-bottom:4px;"><?= $upravovanaPolozkaMenu ? 'Upravit položku' : 'Přidat položku menu' ?></h2>
<p style="color:var(--text-secondary);font-size:13px;margin-bottom:16px;">Chcete-li rozbalovací skupinu (např. AnyDesk → Windows / Mac), nejdřív přidejte nadřazenou položku <em>bez URL</em>, pak k ní přidejte podpoložky s URL a vyberte ji jako nadřazenou.</p>
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="akce" value="<?= $upravovanaPolozkaMenu ? 'upravit_polozku_menu' : 'pridat_polozku_menu' ?>">
<?php if ($upravovanaPolozkaMenu): ?>
<input type="hidden" name="id" value="<?= (int) $upravovanaPolozkaMenu['id'] ?>">
<?php endif; ?>
<label for="menu_text">Text</label>
<input type="text" id="menu_text" name="text" required value="<?= e($upravovanaPolozkaMenu['text'] ?? '') ?>">
<label for="menu_url">URL <span style="color:var(--text-tertiary);font-weight:400;">(nechte prázdné pro nadřazenou rozbalovací položku)</span></label>
<input type="text" id="menu_url" name="url" placeholder="https://... nebo #sekce" value="<?= e($upravovanaPolozkaMenu['url'] ?? '') ?>">
<label for="menu_ikona">Ikona <span style="color:var(--text-tertiary);font-weight:400;">(nepovinné – malý obrázek vedle textu, PNG/SVG, max 32×32 px)</span></label>
<?php $aktIkona = $upravovanaPolozkaMenu['ikona_soubor'] ?? ''; ?>
<?php if ($aktIkona !== '' && $aktIkona !== null): ?>
<div style="display:flex;align-items:center;gap:10px;margin-bottom:10px;">
<img src="<?= e($aktIkona) ?>" alt="" style="width:24px;height:24px;object-fit:contain;">
<span style="font-size:13px;color:var(--text-secondary);">Aktuální ikona</span>
<label style="display:flex;align-items:center;gap:6px;font-weight:400;cursor:pointer;">
<input type="checkbox" name="smazat_ikonu" value="1"> Smazat ikonu
</label>
</div>
<?php endif; ?>
<input type="file" id="menu_ikona" name="ikona_soubor" accept="image/*" style="margin-bottom:14px;">
<label for="menu_nadrazena">Nadřazená položka <span style="color:var(--text-tertiary);font-weight:400;">(jen pro podpoložky rozbalovacího menu)</span></label>
<select id="menu_nadrazena" name="nadrazena_id">
<option value="">– žádná (hlavní úroveň) –</option>
<?php foreach ($hlavniPolozkyMenu as $hp): ?>
<?php if ($upravovanaPolozkaMenu && (int) $hp['id'] === (int) $upravovanaPolozkaMenu['id']) continue; ?>
<option value="<?= (int) $hp['id'] ?>" <?= ((string) ($upravovanaPolozkaMenu['nadrazena_id'] ?? '')) === ((string) $hp['id']) ? 'selected' : '' ?>><?= e($hp['text']) ?></option>
<?php endforeach; ?>
</select>
<label for="menu_poradi">Pořadí</label>
<input type="number" id="menu_poradi" name="poradi" min="0" value="<?= (int) ($upravovanaPolozkaMenu['poradi'] ?? (count($vsechnyPolozkyMenu) + 1)) ?>">
<label>Pozice v navigaci</label>
<div style="display:flex;gap:12px;margin-bottom:14px;">
<label style="display:flex;align-items:center;gap:6px;font-weight:400;cursor:pointer;">
<input type="radio" name="pozice" value="hlavni" <?= ($upravovanaPolozkaMenu['pozice'] ?? 'hlavni') !== 'pravy' ? 'checked' : '' ?>>
Hlavní menu (vlevo)
</label>
<label style="display:flex;align-items:center;gap:6px;font-weight:400;cursor:pointer;">
<input type="radio" name="pozice" value="pravy" <?= ($upravovanaPolozkaMenu['pozice'] ?? '') === 'pravy' ? 'checked' : '' ?>>
Pravý panel (vedle Helpdesk IT)
</label>
</div>
<?php if (!$upravovanaPolozkaMenu): ?>
<div class="checkbox-radek">
<input type="checkbox" id="menu_viditelna" name="viditelna" checked>
<label for="menu_viditelna">Zobrazit v menu hned</label>
</div>
<?php endif; ?>
<button type="submit" class="btn btn-primary"><?= $upravovanaPolozkaMenu ? 'Uložit změny' : 'Přidat položku' ?></button>
<?php if ($upravovanaPolozkaMenu): ?>
<a href="admin.php?sekce=menu" class="btn">Zrušit</a>
<?php endif; ?>
</form>
</div>
<div class="karta">
<h2 style="margin-bottom:16px;">Aktuální menu (<?= count($vsechnyPolozkyMenu) ?> položek)</h2>
<?php if (count($vsechnyPolozkyMenu) === 0): ?>
<p style="color:var(--text-secondary);">Zatím žádné položky.</p>
<?php else: ?>
<table>
<thead>
<tr><th>Pořadí</th><th>Text</th><th>URL</th><th>Pozice</th><th>Typ</th><th>Stav</th><th>Akce</th></tr>
</thead>
<tbody>
<?php foreach ($vsechnyPolozkyMenu as $mp):
$jeNadrazena = ($mp['nadrazena_id'] === null);
$nadrazenaText = '';
if (!$jeNadrazena) {
foreach ($vsechnyPolozkyMenu as $hledej) {
if ((int) $hledej['id'] === (int) $mp['nadrazena_id']) {
$nadrazenaText = $hledej['text'];
break;
}
}
}
?>
<tr style="<?= !$jeNadrazena ? 'background:var(--bg-tertiary);' : '' ?>">
<td><?= (int) $mp['poradi'] ?></td>
<td><?= !$jeNadrazena ? '<span style="color:var(--text-tertiary);margin-right:4px;">↳</span>' : '' ?><?= e($mp['text']) ?></td>
<td style="font-size:12px;color:var(--text-secondary);"><?= $mp['url'] ? e($mp['url']) : '<em>rozbalovací</em>' ?></td>
<td>
<?php if (($mp['pozice'] ?? 'hlavni') === 'pravy'): ?>
<span class="stitek" style="background:#F0E8FA;color:#6B3FA0;">pravý panel</span>
<?php else: ?>
<span class="stitek" style="background:var(--bg-secondary);color:var(--text-secondary);">hlavní</span>
<?php endif; ?>
</td>
<td>
<?php if (!$jeNadrazena): ?>
<span class="stitek stitek-nove" style="background:#F0E8FA;color:#6B3FA0;">podpoložka</span>
<span style="font-size:11px;color:var(--text-tertiary);">↑ <?= e($nadrazenaText) ?></span>
<?php else: ?>
<span class="stitek" style="background:var(--bg-secondary);color:var(--text-secondary);">hlavní</span>
<?php endif; ?>
</td>
<td>
<?php if ((int) $mp['viditelna'] === 1): ?>
<span class="stitek stitek-viditelna">viditelná</span>
<?php else: ?>
<span class="stitek stitek-skryta">skrytá</span>
<?php endif; ?>
</td>
<td class="akce-bunka">
<a href="admin.php?sekce=menu&upravit_polozku=<?= (int) $mp['id'] ?>" class="btn btn-sm">Upravit</a>
<form method="post" style="display:inline;">
<input type="hidden" name="akce" value="prepnout_viditelnost_menu">
<input type="hidden" name="id" value="<?= (int) $mp['id'] ?>">
<button type="submit" class="btn btn-sm"><?= (int) $mp['viditelna'] === 1 ? 'Skrýt' : 'Zobrazit' ?></button>
</form>
<form method="post" style="display:inline;" onsubmit="return confirm('Smazat položku<?= !$jeNadrazena ? '' : ' a všechny její podpoložky' ?>?');">
<input type="hidden" name="akce" value="smazat_polozku_menu">
<input type="hidden" name="id" value="<?= (int) $mp['id'] ?>">
<button type="submit" class="btn btn-sm btn-danger">Smazat</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<?php elseif ($sekce === 'kontakty'): ?>
<div class="karta">
<h2 style="margin-bottom:8px;"><?= $upravovanyKontakt ? 'Upravit kontakt' : 'Přidat fakturační kontakt' ?></h2>
<p style="font-size:13px;color:var(--text-secondary);margin-bottom:16px;">Prázdná pole se na webu nezobrazí.</p>
<form method="post">
<input type="hidden" name="akce" value="<?= $upravovanyKontakt ? 'upravit_fakturacni_kontakt' : 'pridat_fakturacni_kontakt' ?>">
<?php if ($upravovanyKontakt): ?>
<input type="hidden" name="id" value="<?= (int) $upravovanyKontakt['id'] ?>">
<?php endif; ?>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:0 16px;">
<div>
<label for="fk_jmeno">Jméno</label>
<input type="text" id="fk_jmeno" name="jmeno" value="<?= e($upravovanyKontakt['jmeno'] ?? '') ?>">
</div>
<div>
<label for="fk_prijmeni">Příjmení</label>
<input type="text" id="fk_prijmeni" name="prijmeni" value="<?= e($upravovanyKontakt['prijmeni'] ?? '') ?>">
</div>
</div>
<label for="fk_adresa">Adresa</label>
<input type="text" id="fk_adresa" name="adresa" value="<?= e($upravovanyKontakt['adresa'] ?? '') ?>">
<div style="display:grid;grid-template-columns:1fr 1fr;gap:0 16px;">
<div>
<label for="fk_ico">IČ</label>
<input type="text" id="fk_ico" name="ico" value="<?= e($upravovanyKontakt['ico'] ?? '') ?>">
</div>
<div>
<label for="fk_dic">DIČ</label>
<input type="text" id="fk_dic" name="dic" value="<?= e($upravovanyKontakt['dic'] ?? '') ?>">
</div>
</div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:0 16px;">
<div>
<label for="fk_telefon">Telefon</label>
<input type="text" id="fk_telefon" name="telefon" value="<?= e($upravovanyKontakt['telefon'] ?? '') ?>">
</div>
<div>
<label for="fk_email">E-mail</label>
<input type="email" id="fk_email" name="email" value="<?= e($upravovanyKontakt['email'] ?? '') ?>">
</div>
</div>
<label for="fk_poradi">Pořadí</label>
<input type="number" id="fk_poradi" name="poradi" min="0" value="<?= (int) ($upravovanyKontakt['poradi'] ?? (count($vsechnyKontakty) + 1)) ?>">
<div class="checkbox-radek">
<input type="checkbox" id="fk_platce_dph" name="platce_dph" <?= !empty($upravovanyKontakt['platce_dph']) ? 'checked' : '' ?>>
<label for="fk_platce_dph">Plátce DPH</label>
</div>
<label for="fk_poznamka">Poznámka <span style="color:var(--text-tertiary);font-weight:400;">(zobrazí se na webu pod ostatními údaji)</span></label>
<textarea id="fk_poznamka" name="poznamka"><?= e($upravovanyKontakt['poznamka'] ?? '') ?></textarea>
<?php if (!$upravovanyKontakt): ?>
<div class="checkbox-radek">
<input type="checkbox" id="fk_viditelny" name="viditelny" checked>
<label for="fk_viditelny">Zobrazit na webu hned</label>
</div>
<?php endif; ?>
<button type="submit" class="btn btn-primary"><?= $upravovanyKontakt ? 'Uložit změny' : 'Přidat kontakt' ?></button>
<?php if ($upravovanyKontakt): ?>
<a href="admin.php?sekce=kontakty" class="btn">Zrušit</a>
<?php endif; ?>
</form>
</div>
<div class="karta">
<h2 style="margin-bottom:16px;">Fakturační kontakty (<?= count($vsechnyKontakty) ?>)</h2>
<?php if (count($vsechnyKontakty) === 0): ?>
<p style="color:var(--text-secondary);">Zatím žádné kontakty.</p>
<?php else: ?>
<table>
<thead>
<tr><th>Jméno</th><th>IČ</th><th>Telefon</th><th>E-mail</th><th>Stav</th><th>Akce</th></tr>
</thead>
<tbody>
<?php foreach ($vsechnyKontakty as $k): ?>
<tr>
<td><?= e(trim($k['jmeno'] . ' ' . $k['prijmeni'])) ?></td>
<td><?= e($k['ico']) ?></td>
<td><?= e($k['telefon']) ?></td>
<td><?= $k['email'] ? '<a href="mailto:' . e($k['email']) . '">' . e($k['email']) . '</a>' : '' ?></td>
<td>
<?php if ((int) $k['viditelny'] === 1): ?>
<span class="stitek stitek-viditelna">viditelný</span>
<?php else: ?>
<span class="stitek stitek-skryta">skrytý</span>
<?php endif; ?>
</td>
<td class="akce-bunka">
<a href="admin.php?sekce=kontakty&upravit_kontakt=<?= (int) $k['id'] ?>" class="btn btn-sm">Upravit</a>
<form method="post" style="display:inline;">
<input type="hidden" name="akce" value="prepnout_viditelnost_kontaktu">
<input type="hidden" name="id" value="<?= (int) $k['id'] ?>">
<button type="submit" class="btn btn-sm"><?= (int) $k['viditelny'] === 1 ? 'Skrýt' : 'Zobrazit' ?></button>
</form>
<form method="post" style="display:inline;" onsubmit="return confirm('Opravdu smazat tento kontakt?');">
<input type="hidden" name="akce" value="smazat_fakturacni_kontakt">
<input type="hidden" name="id" value="<?= (int) $k['id'] ?>">
<button type="submit" class="btn btn-sm btn-danger">Smazat</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<?php elseif ($sekce === 'spotlight'): ?>
<div class="karta">
<h2 style="margin-bottom:6px;"><?= $upravovanySpotlight ? 'Upravit novinku' : 'Přidat novinku' ?></h2>
<p style="font-size:13px;color:var(--text-secondary);margin-bottom:16px;">Zvýrazněná karta pod hero sekcí. Štítek nechte prázdný, pokud nechcete zobrazovat "novinka" apod.</p>
<form method="post">
<input type="hidden" name="akce" value="<?= $upravovanySpotlight ? 'upravit_spotlight' : 'pridat_spotlight' ?>">
<?php if ($upravovanySpotlight): ?>
<input type="hidden" name="id" value="<?= (int) $upravovanySpotlight['id'] ?>">
<?php endif; ?>
<label for="sp_nadpis">Nadpis</label>
<input type="text" id="sp_nadpis" name="nadpis" required value="<?= e($upravovanySpotlight['nadpis'] ?? '') ?>">
<label for="sp_popis">Popis</label>
<textarea id="sp_popis" name="popis"><?= e($upravovanySpotlight['popis'] ?? '') ?></textarea>
<div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:0 14px;">
<div>
<label for="sp_v1">Výhoda 1</label>
<input type="text" id="sp_v1" name="vyhoda1" value="<?= e($upravovanySpotlight['vyhoda1'] ?? '') ?>">
</div>
<div>
<label for="sp_v2">Výhoda 2</label>
<input type="text" id="sp_v2" name="vyhoda2" value="<?= e($upravovanySpotlight['vyhoda2'] ?? '') ?>">
</div>
<div>
<label for="sp_v3">Výhoda 3</label>
<input type="text" id="sp_v3" name="vyhoda3" value="<?= e($upravovanySpotlight['vyhoda3'] ?? '') ?>">
</div>
</div>
<label for="sp_stitek">Štítek <span style="color:var(--text-tertiary);font-weight:400;">(nechte prázdné pro skrytí)</span></label>
<input type="text" id="sp_stitek" name="stitek" value="<?= e($upravovanySpotlight['stitek'] ?? '') ?>" placeholder="např. novinka">
<label for="sp_poradi">Pořadí</label>
<input type="number" id="sp_poradi" name="poradi" min="0" value="<?= (int) ($upravovanySpotlight['poradi'] ?? (count($vsechnySpotlight) + 1)) ?>">
<?php if (!$upravovanySpotlight): ?>
<div class="checkbox-radek">
<input type="checkbox" id="sp_viditelna" name="viditelna" checked>
<label for="sp_viditelna">Zobrazit na webu hned</label>
</div>
<?php endif; ?>
<button type="submit" class="btn btn-primary"><?= $upravovanySpotlight ? 'Uložit změny' : 'Přidat novinku' ?></button>
<?php if ($upravovanySpotlight): ?>
<a href="admin.php?sekce=spotlight" class="btn">Zrušit</a>
<?php endif; ?>
</form>
</div>
<div class="karta">
<h2 style="margin-bottom:16px;">Všechny novinky (<?= count($vsechnySpotlight) ?>)</h2>
<?php if (count($vsechnySpotlight) === 0): ?>
<p style="color:var(--text-secondary);">Zatím žádné.</p>
<?php else: ?>
<table>
<thead>
<tr><th>Pořadí</th><th>Nadpis</th><th>Štítek</th><th>Stav</th><th>Akce</th></tr>
</thead>
<tbody>
<?php foreach ($vsechnySpotlight as $sp): ?>
<tr>
<td><?= (int) $sp['poradi'] ?></td>
<td><?= e($sp['nadpis']) ?></td>
<td><?= $sp['stitek'] !== '' ? '<span class="stitek stitek-nove">' . e($sp['stitek']) . '</span>' : '<span style="color:var(--text-tertiary);">–</span>' ?></td>
<td>
<?php if ((int) $sp['viditelna'] === 1): ?>
<span class="stitek stitek-viditelna">viditelný</span>
<?php else: ?>
<span class="stitek stitek-skryta">skrytý</span>
<?php endif; ?>
</td>
<td class="akce-bunka">
<a href="admin.php?sekce=spotlight&upravit_spotlight=<?= (int) $sp['id'] ?>" class="btn btn-sm">Upravit</a>
<form method="post" style="display:inline;">
<input type="hidden" name="akce" value="prepnout_viditelnost_spotlight">
<input type="hidden" name="id" value="<?= (int) $sp['id'] ?>">
<button type="submit" class="btn btn-sm"><?= (int) $sp['viditelna'] === 1 ? 'Skrýt' : 'Zobrazit' ?></button>
</form>
<form method="post" style="display:inline;" onsubmit="return confirm('Opravdu smazat?');">
<input type="hidden" name="akce" value="smazat_spotlight">
<input type="hidden" name="id" value="<?= (int) $sp['id'] ?>">
<button type="submit" class="btn btn-sm btn-danger">Smazat</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<?php elseif ($sekce === 'statistiky'): ?>
<div class="karta">
<h2 style="margin-bottom:16px;"><?= $upravovanaStatistika ? 'Upravit statistiku' : 'Přidat statistiku' ?></h2>
<form method="post">
<input type="hidden" name="akce" value="<?= $upravovanaStatistika ? 'upravit_statistiku' : 'pridat_statistiku' ?>">
<?php if ($upravovanaStatistika): ?>
<input type="hidden" name="id" value="<?= (int) $upravovanaStatistika['id'] ?>">
<?php endif; ?>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:0 16px;">
<div>
<label for="stat_popisek">Popisek <span style="color:var(--text-tertiary);font-weight:400;">(malý text nahoře)</span></label>
<input type="text" id="stat_popisek" name="popisek" required value="<?= e($upravovanaStatistika['popisek'] ?? '') ?>" placeholder="např. Tým">
</div>
<div>
<label for="stat_hodnota">Hodnota <span style="color:var(--text-tertiary);font-weight:400;">(velký text dole)</span></label>
<input type="text" id="stat_hodnota" name="hodnota" required value="<?= e($upravovanaStatistika['hodnota'] ?? '') ?>" placeholder="např. 2 specialisté">
</div>
</div>
<label for="stat_poradi">Pořadí</label>
<input type="number" id="stat_poradi" name="poradi" min="0" value="<?= (int) ($upravovanaStatistika['poradi'] ?? (count($vsechnyStatistiky) + 1)) ?>">
<?php if (!$upravovanaStatistika): ?>
<div class="checkbox-radek">
<input type="checkbox" id="stat_viditelna" name="viditelna" checked>
<label for="stat_viditelna">Zobrazit na webu hned</label>
</div>
<?php endif; ?>
<button type="submit" class="btn btn-primary"><?= $upravovanaStatistika ? 'Uložit změny' : 'Přidat statistiku' ?></button>
<?php if ($upravovanaStatistika): ?>
<a href="admin.php?sekce=statistiky" class="btn">Zrušit</a>
<?php endif; ?>
</form>
</div>
<div class="karta">
<h2 style="margin-bottom:16px;">Všechny statistiky (<?= count($vsechnyStatistiky) ?>)</h2>
<?php if (count($vsechnyStatistiky) === 0): ?>
<p style="color:var(--text-secondary);">Zatím žádné statistiky.</p>
<?php else: ?>
<table>
<thead>
<tr><th>Pořadí</th><th>Popisek</th><th>Hodnota</th><th>Stav</th><th>Akce</th></tr>
</thead>
<tbody>
<?php foreach ($vsechnyStatistiky as $st): ?>
<tr>
<td><?= (int) $st['poradi'] ?></td>
<td style="color:var(--text-secondary);font-size:12px;"><?= e($st['popisek']) ?></td>
<td><strong><?= e($st['hodnota']) ?></strong></td>
<td>
<?php if ((int) $st['viditelna'] === 1): ?>
<span class="stitek stitek-viditelna">viditelná</span>
<?php else: ?>
<span class="stitek stitek-skryta">skrytá</span>
<?php endif; ?>
</td>
<td class="akce-bunka">
<a href="admin.php?sekce=statistiky&upravit_statistiku=<?= (int) $st['id'] ?>" class="btn btn-sm">Upravit</a>
<form method="post" style="display:inline;">
<input type="hidden" name="akce" value="prepnout_viditelnost_statistiky">
<input type="hidden" name="id" value="<?= (int) $st['id'] ?>">
<button type="submit" class="btn btn-sm"><?= (int) $st['viditelna'] === 1 ? 'Skrýt' : 'Zobrazit' ?></button>
</form>
<form method="post" style="display:inline;" onsubmit="return confirm('Opravdu smazat?');">
<input type="hidden" name="akce" value="smazat_statistiku">
<input type="hidden" name="id" value="<?= (int) $st['id'] ?>">
<button type="submit" class="btn btn-sm btn-danger">Smazat</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<?php elseif ($sekce === 'procmy'): ?>
<div class="karta">
<h2 style="margin-bottom:16px;"><?= $upravovanyProcMy ? 'Upravit řádek' : 'Přidat řádek' ?></h2>
<form method="post">
<input type="hidden" name="akce" value="<?= $upravovanyProcMy ? 'upravit_proc_my' : 'pridat_proc_my' ?>">
<?php if ($upravovanyProcMy): ?>
<input type="hidden" name="id" value="<?= (int) $upravovanyProcMy['id'] ?>">
<?php endif; ?>
<label for="pm_tucna">Tučná část</label>
<input type="text" id="pm_tucna" name="tucna_cast" required value="<?= e($upravovanyProcMy['tucna_cast'] ?? '') ?>">
<label for="pm_zbytek">Zbytek věty</label>
<input type="text" id="pm_zbytek" name="zbytek_vety" value="<?= e($upravovanyProcMy['zbytek_vety'] ?? '') ?>" placeholder="např. – žádné call centrum">
<label>Ikona</label>
<?php $aktIkonaPM = $upravovanyProcMy['ikona'] ?? 'check'; ?>
<div class="ikona-select" id="ikona-select-pm">
<div class="ikona-select-hodnota" id="ikona-select-hodnota-pm">
<span class="ikona-select-ikona"><?= icon($aktIkonaPM, 18) ?></span>
<span class="ikona-select-text"><?= e(seznam_ikon_sluzeb()[$aktIkonaPM] ?? $aktIkonaPM) ?></span>
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" style="margin-left:auto;" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</div>
<div class="ikona-select-dropdown" id="ikona-select-dropdown-pm" style="display:none;">
<?php foreach (seznam_ikon_sluzeb() as $klicIkony => $popisekIkony): ?>
<div class="ikona-select-polozka <?= $aktIkonaPM === $klicIkony ? 'aktivni' : '' ?>" data-value="<?= e($klicIkony) ?>">
<span class="ikona-select-ikona"><?= icon($klicIkony, 18) ?></span>
<span><?= e($popisekIkony) ?></span>
</div>
<?php endforeach; ?>
</div>
</div>
<input type="hidden" name="ikona" id="ikona-hidden-pm" value="<?= e($aktIkonaPM) ?>">
<label for="pm_poradi">Pořadí</label>
<input type="number" id="pm_poradi" name="poradi" min="0" value="<?= (int) ($upravovanyProcMy['poradi'] ?? (count($vsechnyProcMy) + 1)) ?>">
<?php if (!$upravovanyProcMy): ?>
<div class="checkbox-radek">
<input type="checkbox" id="pm_viditelna" name="viditelna" checked>
<label for="pm_viditelna">Zobrazit na webu hned</label>
</div>
<?php endif; ?>
<button type="submit" class="btn btn-primary"><?= $upravovanyProcMy ? 'Uložit změny' : 'Přidat řádek' ?></button>
<?php if ($upravovanyProcMy): ?>
<a href="admin.php?sekce=procmy" class="btn">Zrušit</a>
<?php endif; ?>
</form>
</div>
<div class="karta">
<h2 style="margin-bottom:16px;">Všechny řádky (<?= count($vsechnyProcMy) ?>)</h2>
<?php if (count($vsechnyProcMy) === 0): ?>
<p style="color:var(--text-secondary);">Zatím žádné řádky.</p>
<?php else: ?>
<table>
<thead>
<tr><th>Pořadí</th><th>Tučná část</th><th>Zbytek věty</th><th>Stav</th><th>Akce</th></tr>
</thead>
<tbody>
<?php foreach ($vsechnyProcMy as $pm): ?>
<tr>
<td><?= (int) $pm['poradi'] ?></td>
<td><strong><?= e($pm['tucna_cast']) ?></strong></td>
<td style="color:var(--text-secondary);"><?= e($pm['zbytek_vety']) ?></td>
<td>
<?php if ((int) $pm['viditelna'] === 1): ?>
<span class="stitek stitek-viditelna">viditelný</span>
<?php else: ?>
<span class="stitek stitek-skryta">skrytý</span>
<?php endif; ?>
</td>
<td class="akce-bunka">
<a href="admin.php?sekce=procmy&upravit_proc_my=<?= (int) $pm['id'] ?>" class="btn btn-sm">Upravit</a>
<form method="post" style="display:inline;">
<input type="hidden" name="akce" value="prepnout_viditelnost_proc_my">
<input type="hidden" name="id" value="<?= (int) $pm['id'] ?>">
<button type="submit" class="btn btn-sm"><?= (int) $pm['viditelna'] === 1 ? 'Skrýt' : 'Zobrazit' ?></button>
</form>
<form method="post" style="display:inline;" onsubmit="return confirm('Opravdu smazat?');">
<input type="hidden" name="akce" value="smazat_proc_my">
<input type="hidden" name="id" value="<?= (int) $pm['id'] ?>">
<button type="submit" class="btn btn-sm btn-danger">Smazat</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<?php elseif ($sekce === 'obsah'):
$obsahHodnoty = nacti_obsah($pdo);
$definice = definice_obsahu();
$skupiny = [];
foreach ($definice as $klic => $info) {
$skupiny[$info['skupina']][$klic] = $info;
}
$nazvySkupin = array_keys($skupiny);
$aktivniCast = in_array($_GET['cast'] ?? '', $nazvySkupin, true) ? $_GET['cast'] : $nazvySkupin[0];
?>
<?php if (isset($_GET['ulozeno'])): ?>
<div class="zprava-uspech">Uloženo.</div>
<?php endif; ?>
<div class="podtaby">
<?php foreach ($nazvySkupin as $nazevSkupiny): ?>
<a href="admin.php?sekce=obsah&cast=<?= urlencode($nazevSkupiny) ?>" class="<?= $aktivniCast === $nazevSkupiny ? 'aktivni' : '' ?>"><?= e($nazevSkupiny) ?></a>
<?php endforeach; ?>
</div>
<div class="karta">
<h2 style="margin-bottom:16px;"><?= e($aktivniCast) ?></h2>
<form method="post">
<input type="hidden" name="akce" value="ulozit_obsah">
<input type="hidden" name="cast" value="<?= e($aktivniCast) ?>">
<?php foreach ($skupiny[$aktivniCast] as $klic => $info): ?>
<label for="<?= e($klic) ?>"><?= e($info['label']) ?></label>
<?php if ($info['typ'] === 'textarea'): ?>
<textarea id="<?= e($klic) ?>" name="<?= e($klic) ?>"><?= e($obsahHodnoty[$klic]) ?></textarea>
<?php else: ?>
<input type="text" id="<?= e($klic) ?>" name="<?= e($klic) ?>" value="<?= e($obsahHodnoty[$klic]) ?>">
<?php endif; ?>
<?php endforeach; ?>
<button type="submit" class="btn btn-primary">Uložit</button>
</form>
</div>
<?php endif; ?>
</div>
</body>
</html>