156 lines
7.5 KiB
Plaintext
156 lines
7.5 KiB
Plaintext
{block content}
|
|
|
|
<div class="platno">
|
|
<header class="lista">
|
|
<div>
|
|
<h1 class="lista-nadpis">Administrace</h1>
|
|
<p class="lista-popis">Účty pro přihlášení do aplikace.</p>
|
|
</div>
|
|
<button type="button" class="tlacitko is-aktivni" data-bs-toggle="modal" data-bs-target="#modalNovy">Nový uživatel</button>
|
|
</header>
|
|
|
|
<section class="panel">
|
|
<div class="filtry">
|
|
<div class="filtry-skupiny" role="group" aria-label="Filtr uživatelů">
|
|
<a n:href="default, stav: aktivni" n:class="$stav === 'aktivni' ? 'tlacitko tlacitko-filtr is-aktivni' : 'tlacitko tlacitko-filtr'">Aktivní</a>
|
|
<a n:href="default, stav: neaktivni" n:class="$stav === 'neaktivni' ? 'tlacitko tlacitko-filtr is-aktivni' : 'tlacitko tlacitko-filtr'">Neaktivní</a>
|
|
</div>
|
|
</div>
|
|
|
|
<table class="tabulka">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">Uživatel</th>
|
|
<th scope="col">Stav</th>
|
|
<th scope="col">Akce</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{foreach $uzivatele as $uzivatel}
|
|
<tr>
|
|
<td data-popisek="Uživatel">{$uzivatel->jmeno}</td>
|
|
<td data-popisek="Stav">
|
|
<span n:if="$uzivatel->aktivni" class="stav-badge" style="background: #1b9e3e; color: #fff">Aktivní</span>
|
|
<span n:if="!$uzivatel->aktivni" class="stav-badge" style="background: #b0bec5; color: #1a1a1a">Neaktivní</span>
|
|
</td>
|
|
<td class="bunka-akce" data-popisek="Akce">
|
|
<div class="akce-radek" n:if="!$uzivatel->chraneny">
|
|
<button type="button" class="tlacitko" data-bs-toggle="modal" data-bs-target="#modalHeslo" data-id="{$uzivatel->id}" data-jmeno="{$uzivatel->jmeno}">Změnit heslo</button>
|
|
{form "stav-$uzivatel->id"}
|
|
<button n:name="send" class="tlacitko">{if $uzivatel->aktivni}Zneaktivnit{else}Zaktivnit{/if}</button>
|
|
{/form}
|
|
{form "smazat-$uzivatel->id"}
|
|
<button n:name="send" class="tlacitko tlacitko-nebezpeci" onclick="return confirm('Smazat uživatele {$uzivatel->jmeno}?')">Smazat</button>
|
|
{/form}
|
|
</div>
|
|
<span n:if="$uzivatel->chraneny" class="lista-popis">Nelze upravit</span>
|
|
</td>
|
|
</tr>
|
|
{/foreach}
|
|
</tbody>
|
|
</table>
|
|
<p class="prazdno" n:if="count($uzivatele) === 0">V tomto filtru není žádný uživatel.</p>
|
|
</section>
|
|
</div>
|
|
|
|
<div class="modal fade" id="modalNovy" tabindex="-1" aria-labelledby="modalNovyLabel" aria-hidden="true" data-show-errors="{if $presenter['novyForm']->hasErrors()}1{else}0{/if}">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<form n:name="novyForm">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="modalNovyLabel">Nový uživatel</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Zavřít"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="alert alert-danger" n:if="$form->hasErrors()" n:foreach="$form->getErrors() as $error">{$error}</div>
|
|
<div class="mb-3">
|
|
<label n:name="jmeno" class="form-label">Uživatel</label>
|
|
<input n:name="jmeno" class="form-control" autocomplete="off" maxlength="50">
|
|
</div>
|
|
<div class="mb-3">
|
|
<label n:name="heslo" class="form-label">Heslo</label>
|
|
<input n:name="heslo" class="form-control" autocomplete="new-password">
|
|
</div>
|
|
<div>
|
|
<label n:name="hesloZnovu" class="form-label">Heslo znovu</label>
|
|
<input n:name="hesloZnovu" class="form-control" autocomplete="new-password">
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button n:name="send" class="tlacitko is-aktivni">Založit</button>
|
|
<button type="button" class="tlacitko tlacitko-zrusit" data-bs-dismiss="modal">Zrušit</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal fade" id="modalHeslo" tabindex="-1" aria-labelledby="modalHesloLabel" aria-hidden="true" data-show-errors="{if $presenter['hesloForm']->hasErrors()}1{else}0{/if}">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<form n:name="hesloForm">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="modalHesloLabel">Nové heslo</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Zavřít"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="alert alert-danger" n:if="$form->hasErrors()" n:foreach="$form->getErrors() as $error">{$error}</div>
|
|
<p class="lista-popis" id="heslo-jmeno"></p>
|
|
<input n:name="id">
|
|
<input n:name="jmeno">
|
|
<div class="mb-3">
|
|
<label n:name="heslo" class="form-label">Nové heslo</label>
|
|
<input n:name="heslo" class="form-control" autocomplete="new-password">
|
|
</div>
|
|
<div>
|
|
<label n:name="hesloZnovu" class="form-label">Nové heslo znovu</label>
|
|
<input n:name="hesloZnovu" class="form-control" autocomplete="new-password">
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button n:name="send" class="tlacitko is-aktivni">Uložit heslo</button>
|
|
<button type="button" class="tlacitko tlacitko-zrusit" data-bs-dismiss="modal">Zrušit</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
document.querySelectorAll('.modal[data-show-errors="1"]').forEach(function (el) {
|
|
bootstrap.Modal.getOrCreateInstance(el).show();
|
|
});
|
|
|
|
var modalHeslo = document.getElementById('modalHeslo');
|
|
if (!modalHeslo) {
|
|
return;
|
|
}
|
|
modalHeslo.addEventListener('show.bs.modal', function (event) {
|
|
var btn = event.relatedTarget;
|
|
var form = modalHeslo.querySelector('form');
|
|
if (!btn || !btn.dataset.id || !form) {
|
|
return;
|
|
}
|
|
form.querySelector('[name="id"]').value = btn.dataset.id;
|
|
form.querySelector('[name="jmeno"]').value = btn.dataset.jmeno || '';
|
|
form.querySelector('[name="heslo"]').value = '';
|
|
form.querySelector('[name="hesloZnovu"]').value = '';
|
|
ukazJmenoHesla();
|
|
});
|
|
|
|
function ukazJmenoHesla() {
|
|
var form = modalHeslo.querySelector('form');
|
|
var jmeno = document.getElementById('heslo-jmeno');
|
|
if (!form || !jmeno) {
|
|
return;
|
|
}
|
|
jmeno.textContent = form.querySelector('[name="jmeno"]').value || '';
|
|
}
|
|
|
|
if (modalHeslo.getAttribute('data-show-errors') === '1') {
|
|
ukazJmenoHesla();
|
|
}
|
|
});
|
|
</script>
|