Obvody/app/Presentation/Administrace/default.latte

170 lines
8.2 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>
<section class="panel">
<h2>Hranice sboru</h2>
<p class="lista-popis" n:if="$sbor">Uloženo: {$sbor['nazev']}. Hranice má {$sbor['bodu']} bodů. Nový soubor KML tyhle body nahradí.</p>
<p class="lista-popis" n:if="!$sbor">Hranice sboru zatím nejsou nahrané. Nahrajte soubor KML.</p>
<form n:name="sborForm" class="sbor-formular">
<div class="alert alert-danger" n:if="$form->hasErrors()" n:foreach="$form->getErrors() as $error">{$error}</div>
<label n:name="soubor" class="form-label">Soubor KML</label>
<div class="formular-akce">
<input n:name="soubor">
<button n:name="send" class="tlacitko is-aktivni">{if $sbor}Nahradit{else}Nahrát{/if}</button>
</div>
</form>
</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>