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/hotellesnizatisi_cz/new/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /volume1/web/hotellesnizatisi_cz/new/uzivatele-upravit.php
<?php
require_once __DIR__ . '/includes/auth.php';
$user = require_role(['admin', 'manazer']);
require_once __DIR__ . '/includes/layout.php';

$id = isset($_GET['id']) ? (int)$_GET['id'] : null;

$u = [
    'jmeno' => '', 'prijmeni' => '', 'email' => '', 'uzivatelske_jmeno' => '',
    'role' => 'zamestnanec', 'aktivni' => 1,
];
$vybranaOpravneni = [];

if ($id) {
    $stmt = db()->prepare('SELECT * FROM uzivatele WHERE id = ?');
    $stmt->execute([$id]);
    $row = $stmt->fetch();
    if (!$row) {
        set_flash('error', 'Uživatel nebyl nalezen.');
        header('Location: uzivatele.php');
        exit;
    }
    if ($user['role'] === 'manazer' && $row['role'] !== 'zamestnanec') {
        http_response_code(403);
        die('Nemáte oprávnění upravovat tento účet.');
    }
    $u = $row;
    if ($u['role'] === 'zamestnanec') {
        $vybranaOpravneni = ziskej_opravneni_zamestnance($id);
    }
}

$errors = [];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $jmeno = trim($_POST['jmeno'] ?? '');
    $prijmeni = trim($_POST['prijmeni'] ?? '');
    $email = trim($_POST['email'] ?? '');
    $uzivatelskeJmeno = trim($_POST['uzivatelske_jmeno'] ?? '');
    $aktivni = isset($_POST['aktivni']) ? 1 : 0;

    if ($user['role'] === 'manazer') {
        $role = 'zamestnanec';
    } else {
        $role = in_array($_POST['role'] ?? '', ['admin', 'manazer', 'zamestnanec'], true) ? $_POST['role'] : 'zamestnanec';
    }

    $vybranaOpravneni = array_values(array_intersect(
        $_POST['opravneni'] ?? [],
        DELEGOVATELNE_SEKCE
    ));

    if ($jmeno === '' || $prijmeni === '' || $uzivatelskeJmeno === '') {
        $errors[] = 'Vyplňte jméno, příjmení a uživatelské jméno.';
    }

    if (!$errors) {
        try {
            if ($id) {
                db()->prepare('
                    UPDATE uzivatele SET jmeno=?, prijmeni=?, email=?, uzivatelske_jmeno=?, role=?, aktivni=?
                    WHERE id=?
                ')->execute([$jmeno, $prijmeni, $email ?: null, $uzivatelskeJmeno, $role, $aktivni, $id]);
                $cilovyId = $id;
                set_flash('success', 'Uživatel byl uložen.');
            } else {
                $tempPassword = generate_temp_password();
                $hash = password_hash($tempPassword, PASSWORD_DEFAULT);
                db()->prepare('
                    INSERT INTO uzivatele (jmeno, prijmeni, email, uzivatelske_jmeno, heslo_hash, role, aktivni, vyzaduje_zmenu_hesla)
                    VALUES (?,?,?,?,?,?,?,1)
                ')->execute([$jmeno, $prijmeni, $email ?: null, $uzivatelskeJmeno, $hash, $role, $aktivni]);
                $cilovyId = (int) db()->lastInsertId();
                set_flash('success', 'Uživatel „' . $uzivatelskeJmeno . '“ byl vytvořen. Dočasné heslo: ' . $tempPassword . ' — uložte si ho, znovu se nezobrazí. Předejte ho uživateli, při prvním přihlášení si nastaví vlastní.');
            }

            // Oprávnění po sekcích — ukládáme jen pro roli zaměstnanec,
            // u admin/manažer tabulka uzivatele_opravneni nemá smysl (mají přístup vždy).
            db()->prepare('DELETE FROM uzivatele_opravneni WHERE uzivatel_id = ?')->execute([$cilovyId]);
            if ($role === 'zamestnanec' && $vybranaOpravneni) {
                $insertOpravneni = db()->prepare('INSERT INTO uzivatele_opravneni (uzivatel_id, sekce) VALUES (?, ?)');
                foreach ($vybranaOpravneni as $sekce) {
                    $insertOpravneni->execute([$cilovyId, $sekce]);
                }
            }

            header('Location: uzivatele.php');
            exit;
        } catch (PDOException $e) {
            $errors[] = ($e->getCode() === '23000')
                ? 'Uživatelské jméno „' . $uzivatelskeJmeno . '“ už existuje, zvolte jiné.'
                : 'Nastala chyba při ukládání.';
        }
    }
}

admin_layout_start('uzivatele', $id ? 'Upravit uživatele' : 'Přidat uživatele', '', $user);

foreach ($errors as $err) {
    echo '<div class="flash flash-error">' . htmlspecialchars($err) . '</div>';
}
?>

<form method="post" class="card" style="padding:26px 28px;max-width:560px;">

  <div class="field-row">
    <div class="field"><label for="jmeno">Jméno</label><input type="text" id="jmeno" name="jmeno" value="<?= htmlspecialchars($u['jmeno']) ?>"></div>
    <div class="field"><label for="prijmeni">Příjmení</label><input type="text" id="prijmeni" name="prijmeni" value="<?= htmlspecialchars($u['prijmeni']) ?>"></div>
  </div>

  <div class="field">
    <label for="uzivatelske_jmeno">Uživatelské jméno</label>
    <input type="text" id="uzivatelske_jmeno" name="uzivatelske_jmeno" value="<?= htmlspecialchars($u['uzivatelske_jmeno']) ?>">
  </div>

  <div class="field">
    <label for="email">E-mail (nepovinné)</label>
    <input type="email" id="email" name="email" value="<?= htmlspecialchars($u['email'] ?? '') ?>">
  </div>

  <?php if ($user['role'] === 'admin'): ?>
  <div class="field">
    <label for="role">Role</label>
    <select id="role" name="role" onchange="document.getElementById('opravneniBox').style.display = this.value === 'zamestnanec' ? 'block' : 'none';">
      <option value="zamestnanec" <?= $u['role'] === 'zamestnanec' ? 'selected' : '' ?>>Zaměstnanec</option>
      <option value="manazer" <?= $u['role'] === 'manazer' ? 'selected' : '' ?>>Manažer</option>
      <option value="admin" <?= $u['role'] === 'admin' ? 'selected' : '' ?>>Admin</option>
    </select>
  </div>
  <?php else: ?>
    <input type="hidden" name="role" value="zamestnanec">
    <p style="font-size:.78rem;color:var(--ink-soft);margin-bottom:16px;">Jako manažer můžete zakládat jen účty s rolí Zaměstnanec.</p>
  <?php endif; ?>

  <div id="opravneniBox" style="<?= $u['role'] === 'zamestnanec' ? '' : 'display:none;' ?>margin-bottom:18px;">
    <label style="display:block;margin-bottom:8px;">Přístup k sekcím</label>
    <p style="font-size:.78rem;color:var(--ink-soft);margin-bottom:10px;">Zaškrtněte, ke kterým sekcím má tento zaměstnanec přístup. Nastavení a Uživatelé nejsou delegovatelné.</p>
    <div style="display:flex;flex-direction:column;gap:8px;">
      <?php foreach (DELEGOVATELNE_SEKCE as $sekce): ?>
      <label style="display:flex;align-items:center;gap:8px;font-size:.88rem;font-weight:400;">
        <input type="checkbox" name="opravneni[]" value="<?= htmlspecialchars($sekce) ?>" <?= in_array($sekce, $vybranaOpravneni, true) ? 'checked' : '' ?>>
        <?= htmlspecialchars(SEKCE_NAZEV[$sekce]) ?>
      </label>
      <?php endforeach; ?>
    </div>
  </div>

  <div class="toggle-row">
    <label for="aktivni">Účet aktivní</label>
    <input type="checkbox" id="aktivni" name="aktivni" <?= $u['aktivni'] ? 'checked' : '' ?>>
    <label class="switch" for="aktivni"></label>
  </div>

  <?php if (!$id): ?>
    <p style="font-size:.78rem;color:var(--ink-soft);margin-top:14px;">Po uložení se vygeneruje dočasné heslo a zobrazí se jednorázově — předejte ho uživateli, při prvním přihlášení si nastaví vlastní.</p>
  <?php endif; ?>

  <div style="display:flex;gap:10px;margin-top:24px;">
    <button type="submit" class="btn btn-primary">Uložit</button>
    <a href="uzivatele.php" class="btn btn-secondary">Zrušit</a>
  </div>
</form>

<?php admin_layout_end(); ?>

Youez - 2016 - github.com/yon3zu
LinuXploit