From cda9e2c3e2c24bb7a5a31d75ee6fdce721a509a7 Mon Sep 17 00:00:00 2001 From: severak Date: Sun, 18 Jul 2021 18:00:46 +0200 Subject: [PATCH] Trasy a generovani tahaku. --- app.php | 103 ++++++++++++++++++++++++++++++++++++++++++++ db/schema.sql | 8 ++++ tpl/_header.php | 4 ++ tpl/poi_list.php | 2 +- tpl/trasa_tahak.php | 16 +++++++ tpl/trasy.php | 18 ++++++++ 6 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 tpl/trasa_tahak.php create mode 100644 tpl/trasy.php diff --git a/app.php b/app.php index 1e939f0..ef3f303 100644 --- a/app.php +++ b/app.php @@ -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 diff --git a/db/schema.sql b/db/schema.sql index 36f5528..6e58d0a 100644 --- a/db/schema.sql +++ b/db/schema.sql @@ -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 +); + + -- diff --git a/tpl/_header.php b/tpl/_header.php index 9a3b4a9..c9881a9 100644 --- a/tpl/_header.php +++ b/tpl/_header.php @@ -38,6 +38,10 @@ procházky + + trasy + +