diff --git a/app.php b/app.php
index fb41627..1e939f0 100644
--- a/app.php
+++ b/app.php
@@ -212,6 +212,127 @@ route('', '/sklad/smazat/{id}/', function ($req, $params){
return redirect('/sklad/');
});
+// procházky
+
+$singletons['event_form'] = function () {
+ $form = new severak\forms\form(['method'=>'post']);
+ $form->field('name', ['label'=>'Název', 'required'=>true]);
+ $form->field('subtitle', ['label'=>'Upoutávka', 'type'=>'textarea']);
+ $form->field('text', ['label'=>'Popis', 'type'=>'textarea']);
+ $form->field('date', ['label'=>'Datum', 'type'=>'date', 'required'=>true]);
+ $form->field('time', ['label'=>'Čas', 'type'=>'time', 'required'=>true]);
+ $form->field('facebook_url', ['label'=>'URL události na FB']);
+ $form->field('is_future', ['label'=>'Pozvánka?', 'type'=>'checkbox']);
+ $form->field('stop_ids', ['label'=>'ID zastávek']);
+ $form->field('place_description', ['label'=>'Místo srazu']);
+ $form->field('lon', ['type'=>'hidden']);
+ $form->field('lat', ['type'=>'hidden']);
+ $form->field('_sbt', ['label'=>'Uložit?', 'type'=>'submit']);
+
+ $form->rule('lon', function ($v, $o) {
+ return !empty($o['lon']) && !empty($o['lat']);
+ }, 'Musí být vyplněny souřadnice');
+
+ return $form;
+};
+
+
+route('GET', '/event/edit/', function ($req){
+ if (!user()) return redirect('/login/');
+ /** @var severak\database\rows $rows */
+ $rows = di('rows');
+ $page = $_GET['page'] ?? 1;
+ $pois = $rows->page('events', [], ['datetime'=>'asc'], $page, 30);
+ $pages = $rows->pages;
+
+ return render('event_list', ['pois'=>$pois, 'pages'=>$pages, 'page'=>$page]);
+});
+
+
+route('', '/event/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('event_form');
+
+ if ($req->getMethod()=='POST') {
+ $form->fill($req->getParsedBody());
+ if ($form->validate()) {
+ $slug = slugify($form->values['name']);
+ $rows->insert('events', [
+ 'name'=>$form->values['name'],
+ 'text'=>$form->values['text'],
+ 'subtitle'=>$form->values['subtitle'],
+ 'place_description'=>$form->values['place_description'],
+ 'facebook_url'=>$form->values['facebook_url'],
+ 'stop_ids'=>$form->values['stop_ids'],
+ 'slug'=>$slug,
+ 'lon'=>$form->values['lon'],
+ 'lat'=>$form->values['lat'],
+ 'is_future'=>$form->values['is_future'] ?? 0,
+ 'datetime'=>strtotime($form->values['date'] . 'T' . $form->values['time'])
+ ]);
+ return redirect('/prochazka/' . $slug . '/');
+ }
+ }
+
+ return render('form', ['form'=>$form, 'title'=>'Přidat položku']);
+});
+
+route('', '/event/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('event_form');
+
+ $item = $rows->one('events', $params['id']);
+ if (!$item) return notFound();
+
+ $item['date'] = date('Y-m-d', (int) $item['datetime']);
+ $item['time'] = date('H:i', (int) $item['datetime']);
+
+ $form->fill($item);
+
+ if ($req->getMethod()=='POST') {
+ $form->fill($req->getParsedBody());
+ if ($form->validate()) {
+ $slug = slugify($form->values['name']);
+ $rows->update('events', [
+ 'name'=>$form->values['name'],
+ 'text'=>$form->values['text'],
+ 'subtitle'=>$form->values['subtitle'],
+ 'place_description'=>$form->values['place_description'],
+ 'facebook_url'=>$form->values['facebook_url'],
+ 'stop_ids'=>$form->values['stop_ids'],
+ 'slug'=>$slug,
+ 'lon'=>$form->values['lon'],
+ 'lat'=>$form->values['lat'],
+ 'is_future'=>$form->values['is_future'] ?? 0,
+ 'datetime'=>strtotime($form->values['date'] . 'T' . $form->values['time'])
+ ], $params['id']);
+ return redirect('/prochazky/' . $slug . '/');
+ }
+ }
+
+ return render('form', ['form'=>$form, 'title'=>'Upravit položku']);
+});
+
+route('', '/prochazky/{slug}/', function ($req, $params){
+ /** @var Psr\Http\Message\ServerRequestInterface $req */
+ /** @var severak\database\rows $rows */
+ $rows = di('rows');
+ $prochazka = $rows->one('events', ['slug'=>$params['slug']]);
+ $Parsedown = new Parsedown();
+ $prochazka['text'] = $Parsedown->text($prochazka['text']);
+ if (!$prochazka) return notFound();
+
+ return render('prochazka', ['prochazka'=>$prochazka]);
+
+});
// OBSLUHA
diff --git a/db/schema.sql b/db/schema.sql
index b58994b..36f5528 100644
--- a/db/schema.sql
+++ b/db/schema.sql
@@ -1,5 +1,22 @@
-- Adminer 4.7.5 SQLite 3 dump
+CREATE TABLE "events" (
+ "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
+ "name" text NOT NULL,
+ "slug" text NOT NULL,
+ "subtitle" text NULL,
+ "text" integer NULL,
+ "datetime" integer NOT NULL,
+ "facebook_url" text NULL,
+ "lon" integer NOT NULL,
+ "lat" integer NOT NULL,
+ "place_description" text NULL,
+ "stop_ids" text NULL,
+ "is_future" integer NOT NULL DEFAULT '1'
+);
+
+CREATE UNIQUE INDEX "events_slug" ON "events" ("slug");
+
CREATE TABLE "poi" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"slug" text NOT NULL,
@@ -14,12 +31,6 @@ CREATE TABLE "poi" (
CREATE UNIQUE INDEX "poi_slug" ON "poi" ("slug");
-
-CREATE TABLE sqlite_sequence(name,seq);
-
-INSERT INTO "sqlite_sequence" ("name", "seq") VALUES ('users', 1);
-INSERT INTO "sqlite_sequence" ("name", "seq") VALUES ('poi', 0);
-
CREATE TABLE "users" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"member_id" integer NULL,
diff --git a/tpl/_header.php b/tpl/_header.php
index 259f3d4..9a3b4a9 100644
--- a/tpl/_header.php
+++ b/tpl/_header.php
@@ -34,6 +34,10 @@
body zájmu
+
+ procházky
+
+
ostatní
diff --git a/tpl/_header_nomenu.php b/tpl/_header_nomenu.php
new file mode 100644
index 0000000..44b6aa5
--- /dev/null
+++ b/tpl/_header_nomenu.php
@@ -0,0 +1,27 @@
+
+
+
+
+
+ průvodce Matička Metropolis
+
+
+
+
+
+
+
+
+
+
+
+ $messages) {
+ foreach ($messages as $message) {
+ echo '
';
+ }
+ unset($_SESSION['flashes'][$flashtype]);
+ }
+ }
+ ?>
+
diff --git a/tpl/event_list.php b/tpl/event_list.php
new file mode 100644
index 0000000..7b2f32a
--- /dev/null
+++ b/tpl/event_list.php
@@ -0,0 +1,21 @@
+=render('_header', ['title'=>'Procházky']);?>
+Procházky
+
+
+ název | událost | | |
+
+
+ =$item['name']; ?> =date('j.n.Y', $item['datetime']); ?> |
+ |
+ |
+ smazat |
+
+
+
+
+ =render('_pagination', ['page'=>$page, 'pages'=>$pages]); ?>
+(nenalezeny žádné položky)
';
+} ?>
+Přidat položku
+=render('_footer');?>
diff --git a/tpl/poi.php b/tpl/poi.php
index c7df7ab..f9808c6 100644
--- a/tpl/poi.php
+++ b/tpl/poi.php
@@ -55,7 +55,7 @@
odkaz na stránku
- >upravit
+ >upravit
diff --git a/tpl/prochazka.php b/tpl/prochazka.php
new file mode 100644
index 0000000..a764493
--- /dev/null
+++ b/tpl/prochazka.php
@@ -0,0 +1,73 @@
+$prochazka['name'] ?? null]);
+?>
+=$prochazka['name'];?>
+=$prochazka['subtitle'];?>
+=$prochazka['text'];?>
+
+
+
+ }
+
+ odkaz na událost |
+ zde |
+
+
+
+ datum a čas |
+ =date('j.n.Y H:i', $prochazka['datetime']);?> |
+
+
+ místo srazu |
+ =$prochazka['place_descrition'];?> |
+
+
+
+
+
+
+
+
+
+
+
+
+
+