Trasy a generovani tahaku.

This commit is contained in:
severak 2021-07-18 18:00:46 +02:00
parent 8dfe927deb
commit cda9e2c3e2
6 changed files with 150 additions and 1 deletions

103
app.php
View File

@ -334,6 +334,109 @@ route('', '/prochazky/{slug}/', function ($req, $params){
});
// TRASY
$singletons['trasy_form'] = function () {
$form = new severak\forms\form(['method'=>'post']);
$form->field('name', ['label'=>'Název', 'required'=>true]);
$form->field('cheatsheet', ['label'=>'Tahák', 'type'=>'textarea']);
$form->field('stop_ids', ['label'=>'ID zastávek']);
$form->field('_sbt', ['type'=>'submit', 'label'=>'Uložit']);
return $form;
};
route('', '/trasy/', function (){
return redirect('/trasy/edit/');
});
route('GET', '/trasy/edit/', function ($req){
if (!user()) return redirect('/login/');
/** @var severak\database\rows $rows */
$rows = di('rows');
$trasy = $rows->more('trasy', [], ['name'=>'asc'], 999);
return render('trasy', ['trasy'=>$trasy ]);
});
route('', '/trasy/add/', function ($req){
if (!user()) return redirect('/login/');
/** @var Psr\Http\Message\ServerRequestInterface $req */
/** @var severak\database\rows $rows */
$rows = di('rows');
/** @var severak\forms\form $form */
$form = di('trasy_form');
if ($req->getMethod()=='POST') {
$form->fill($req->getParsedBody());
if ($form->validate()) {
$slug = slugify($form->values['name']);
$rows->insert('trasy', [
'name'=>$form->values['name'],
'cheatsheet'=>$form->values['cheatsheet'],
'stop_ids'=>$form->values['stop_ids'],
]);
return redirect('/trasy/edit/');
}
}
return render('form', ['form'=>$form, 'title'=>'Přidat položku']);
});
route('', '/trasy/edit/{id}/', function ($req, $params){
if (!user()) return redirect('/login/');
/** @var Psr\Http\Message\ServerRequestInterface $req */
/** @var severak\database\rows $rows */
$rows = di('rows');
/** @var severak\forms\form $form */
$form = di('trasy_form');
$item = $rows->one('trasy', $params['id']);
if (!$item) return notFound();
$form->fill($item);
if ($req->getMethod()=='POST') {
$form->fill($req->getParsedBody());
if ($form->validate()) {
$rows->update('trasy', [
'name'=>$form->values['name'],
'cheatsheet'=>$form->values['cheatsheet'],
'stop_ids'=>$form->values['stop_ids'],
], $params['id']);
return redirect('/trasy/edit/');
}
}
return render('form', ['form'=>$form, 'title'=>'Upravit položku']);
});
route('', '/trasy/tahak/{id}/', function ($req, $params){
if (!user()) return redirect('/login/');
/** @var Psr\Http\Message\ServerRequestInterface $req */
/** @var severak\database\rows $rows */
$rows = di('rows');
$Parsedown = new Parsedown();
$trasa = $rows->one('trasy', $params['id']);
if (!$trasa) return notFound();
$trasa['cheatsheet'] = $Parsedown->text($trasa['cheatsheet']);
$ids = explode(' ', $trasa['stop_ids']);
$zastavky = $rows->more('poi', ['id'=>$ids], [], 999);
$zastavky = array_map(function ($zastavka) use ($Parsedown) {
$zastavka['cheatsheet'] = $Parsedown->text($zastavka['cheatsheet']);
return $zastavka;
}, $zastavky);
return render('trasa_tahak', ['trasa'=>$trasa, 'zastavky'=>$zastavky]);
});
// OBSLUHA

View File

@ -46,4 +46,12 @@ CREATE UNIQUE INDEX "users_usename" ON "users" ("username");
INSERT INTO "users" ("id", "member_id", "username", "password", "name", "note", "is_active", "is_superuser") VALUES (1, NULL, 'severak', '$2y$10$G//hwvWHJYNHFk6JNr3GG.kuzM/dI9UTtU2bxr9EvTTEg0YOc8mj.', 'Severák', '(testovací účet)', 1, 1);
CREATE TABLE "trasy" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" integer NOT NULL,
"cheatsheet" text NULL,
"stop_ids" integer NULL
);
--

View File

@ -38,6 +38,10 @@
procházky
</a>
<a class="navbar-item" href="/trasy/edit/">
trasy
</a>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">
ostatní

View File

@ -5,7 +5,7 @@
<tr><th>název</th><th>napsán text</th><th>zveřejněno</th><th></th><th></th></tr>
<?php foreach ($pois as $item) { ?>
<tr>
<td><?=$item['name']; ?><br><small><?=$item['note']; ?></small></td>
<td><small>#<?=$item['id']; ?></small> <?=$item['name']; ?></td>
<td><small><?=empty($item['description']) ? 'NE' : 'ANO'; ?></small></td>
<td><small><?=empty($item['is_public']) ? 'NE' : 'ANO'; ?></small></td>
<td><a href="/pois/edit/<?=$item['id']; ?>/" class=""><span class="icon"><i class="fas fa-edit"></i></span></a> </td>

16
tpl/trasa_tahak.php Normal file
View File

@ -0,0 +1,16 @@
<?=render('_header_nomenu', ['title'=>'Procházky']);?>
<h1 class="title"><?=$trasa['name'];?></h1>
<div class="content">
<?=$trasa['cheatsheet'];?>
</div>
<?php foreach ($zastavky as $zastavka) { ?>
<h2 class="subtitle"><?=$zastavka['name'];?></h2>
<div class="content">
<?=$zastavka['cheatsheet'];?>
</div>
<?php } ?>;
<?=render('_footer');?>

18
tpl/trasy.php Normal file
View File

@ -0,0 +1,18 @@
<?=render('_header', ['title'=>'Procházky']);?>
<h1>Trasy</h1>
<?php if (count($trasy)) { ?>
<table class="table">
<tr><th>název</th><th></th></th></tr>
<?php foreach ($trasy as $item) { ?>
<tr>
<td><?=$item['name']; ?></td>
<td><a href="/trasy/tahak/<?=$item['id']; ?>/" class="">tahák</a> </td>
<td><a href="/trasy/edit/<?=$item['id']; ?>/" class=""><span class="icon"><i class="fas fa-edit"></i></span></a> </td>
</tr>
<?php } ?>
</table>
<?php } else {
echo '<p>(nenalezeny žádné položky)</p><br>';
} ?>
<a href="/trasy/add/" class="button is-primary">Přidat položku</a>
<?=render('_footer');?>