2020-01-23 12:10:33 +00:00
|
|
|
<?php
|
2020-01-27 15:07:44 +00:00
|
|
|
// DEPENDENCIES
|
2020-01-27 15:39:57 +00:00
|
|
|
use severak\forms\form;
|
|
|
|
|
2020-01-27 15:07:44 +00:00
|
|
|
$dependencies['config'] = $config;
|
|
|
|
$singletons['pdo'] = function() {
|
|
|
|
$config = di('config');
|
|
|
|
return new PDO('sqlite:' . __DIR__ . '/' . $config['database']);
|
|
|
|
};
|
|
|
|
$singletons['rows'] = function(){
|
|
|
|
return new severak\database\rows(di('pdo'));
|
|
|
|
};
|
|
|
|
|
|
|
|
// ROUTY
|
2020-01-23 12:10:33 +00:00
|
|
|
|
2020-01-27 15:39:57 +00:00
|
|
|
// HP & LOGIN
|
2020-01-23 12:10:33 +00:00
|
|
|
route('', '/', function (){
|
2020-01-27 15:39:57 +00:00
|
|
|
if (!user()) return redirect('/login/');
|
|
|
|
return render('home');
|
|
|
|
});
|
|
|
|
|
|
|
|
route('', '/login/', function ($req){
|
|
|
|
/** @var Psr\Http\Message\ServerRequestInterface $req */
|
|
|
|
/** @var severak\database\rows $rows */
|
|
|
|
$rows = di('rows');
|
|
|
|
$form = new form(['method'=>'POST']);
|
|
|
|
$form->field('username', ['required'=>true, 'label'=>'Jméno']);
|
|
|
|
$form->field('password', ['type'=>'password', 'required'=>true, 'label'=>'Heslo']);
|
|
|
|
$form->field('_login', ['type'=>'submit', 'label'=>'Přihlásit se']);
|
|
|
|
|
|
|
|
if ($req->getMethod()=='POST') {
|
|
|
|
$form->fill($req->getParsedBody());
|
|
|
|
if ($form->validate()) {
|
|
|
|
$uz = $rows->one('users', ['username'=>$form->values['username']]);
|
|
|
|
if (!$uz) {
|
|
|
|
$form->error('username', 'Uživatel nenalezen');
|
|
|
|
} elseif (password_verify($form->values['password'], $uz['password'])) {
|
|
|
|
unset($uz['password']);
|
|
|
|
$_SESSION['user'] = $uz;
|
|
|
|
return redirect('/');
|
|
|
|
} else {
|
|
|
|
$form->error('password', 'Špatné heslo.');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return render('form', ['form'=>$form]);
|
2020-01-23 12:10:33 +00:00
|
|
|
});
|
|
|
|
|
2020-01-27 15:39:57 +00:00
|
|
|
route('', '/logout/', function ($req){
|
|
|
|
unset($_SESSION['user']);
|
|
|
|
unset($_SESSION['flashes']);
|
|
|
|
return redirect('/');
|
|
|
|
});
|
|
|
|
|
|
|
|
route('', '/heslo/', function (){
|
|
|
|
return '123 - ' . password_hash('123', PASSWORD_BCRYPT);
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// NABÍDKA
|
|
|
|
|
2020-01-27 16:07:05 +00:00
|
|
|
route('GET', '/nabidka/', function ($req){
|
2020-02-04 13:03:43 +00:00
|
|
|
if (!user()) return redirect('/login/');
|
2020-01-23 15:09:58 +00:00
|
|
|
/** @var severak\database\rows $rows */
|
|
|
|
$rows = di('rows');
|
|
|
|
$items = $rows->page('items', [], ['ord'=>'asc']);
|
|
|
|
|
|
|
|
return render('items', ['items'=>$items]);
|
|
|
|
});
|
|
|
|
|
2020-02-04 13:03:43 +00:00
|
|
|
$singletons['nabidka_form'] = function (){
|
2020-01-23 15:09:58 +00:00
|
|
|
$form = new severak\forms\form(['method'=>'POST']);
|
|
|
|
$form->field('name', ['required'=>true, 'label'=>'Název']);
|
|
|
|
$form->field('price', ['type'=>'number', 'label'=>'Cena']);
|
|
|
|
$form->field('note', ['type'=>'textarea', 'label'=>'Poznámka']);
|
|
|
|
$form->field('ord', ['type'=>'number', 'label'=>'Pořadí']);
|
|
|
|
$form->field('_save', ['type'=>'submit', 'label'=>'Přidat']);
|
|
|
|
|
|
|
|
$form->rule('price', function ($f){
|
|
|
|
return $f > 0 || $f < 0;
|
|
|
|
}, 'Cena nemůže být nulová.');
|
|
|
|
|
2020-02-04 13:03:43 +00:00
|
|
|
return $form;
|
|
|
|
};
|
|
|
|
|
|
|
|
route('', '/nabidka/pridat/', 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('nabidka_form');
|
|
|
|
|
2020-01-23 15:09:58 +00:00
|
|
|
if ($req->getMethod()=='POST') {
|
|
|
|
$form->fill($req->getParsedBody());
|
|
|
|
if ($form->validate()) {
|
|
|
|
$rows->insert('items', [
|
|
|
|
'name'=>$form->values['name'],
|
|
|
|
'price'=>$form->values['price'],
|
|
|
|
'note'=>$form->values['note'],
|
|
|
|
'ord'=>$form->values['ord'],
|
|
|
|
]);
|
2020-01-27 16:07:05 +00:00
|
|
|
return redirect('/nabidka/');
|
2020-01-23 15:09:58 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-27 16:07:05 +00:00
|
|
|
return render('form', ['form'=>$form, 'title'=>'Přidat položku']);
|
|
|
|
});
|
|
|
|
|
2020-02-04 13:03:43 +00:00
|
|
|
route('', '/nabidka/upravit/{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('nabidka_form');
|
|
|
|
|
|
|
|
$item = $rows->one('items', $params['id']);
|
|
|
|
if (!$item) return notFound();
|
|
|
|
$form->fill($item);
|
|
|
|
|
|
|
|
if ($req->getMethod()=='POST') {
|
|
|
|
$form->fill($req->getParsedBody());
|
|
|
|
if ($form->validate()) {
|
|
|
|
$rows->update('items', [
|
|
|
|
'name'=>$form->values['name'],
|
|
|
|
'price'=>$form->values['price'],
|
|
|
|
'note'=>$form->values['note'],
|
|
|
|
'ord'=>$form->values['ord'],
|
|
|
|
], $params['id']);
|
|
|
|
return redirect('/nabidka/');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return render('form', ['form'=>$form, 'title'=>'Upravit položku']);
|
|
|
|
});
|
|
|
|
|
2020-01-27 16:07:05 +00:00
|
|
|
// TODO - tohle nechceme přes GET
|
2020-02-04 13:03:43 +00:00
|
|
|
route('', '/nabidka/smazat/{id}/', function ($req, $params){
|
|
|
|
if (!user()) return redirect('/login/');
|
2020-01-27 16:07:05 +00:00
|
|
|
/** @var severak\database\rows $rows */
|
|
|
|
$rows = di('rows');
|
|
|
|
$rows->delete('items', (int) $params['id']);
|
|
|
|
return redirect('/nabidka/');
|
2020-01-28 14:03:07 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
// ČLENOVÉ
|
2020-02-04 13:32:32 +00:00
|
|
|
route('', '/clenove/', function ($req){
|
|
|
|
if (!user()) return redirect('/login/');
|
|
|
|
|
|
|
|
/** @var Psr\Http\Message\ServerRequestInterface $req */
|
|
|
|
/** @var severak\database\rows $rows */
|
|
|
|
$rows = di('rows');
|
|
|
|
|
|
|
|
$searchFor = $_GET['searchFor'] ?? null;
|
2020-02-05 10:54:01 +00:00
|
|
|
$page = $_GET['page'] ?? 1;
|
|
|
|
|
|
|
|
if ($searchFor) {
|
|
|
|
$searchSql = '%' . $searchFor . '%';
|
|
|
|
$members = $rows->more('members', $rows->fragment('name LIKE ? OR email LIKE ? OR phone LIKE ?', [$searchSql, $searchSql, $searchSql]));
|
|
|
|
$pages = 1;
|
|
|
|
} else {
|
|
|
|
$members = $rows->page('members', [], ['name'=>'asc'], $page, 30);
|
|
|
|
$pages = $rows->pages;
|
|
|
|
}
|
2020-02-04 13:32:32 +00:00
|
|
|
|
2020-02-05 10:54:01 +00:00
|
|
|
return render('members', ['members'=>$members, 'page'=>$page, 'pages'=>$pages, 'searchFor'=>$searchFor]);
|
2020-02-04 13:32:32 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
2020-01-28 14:03:07 +00:00
|
|
|
route('', '/clenove/pridat/', function ($req){
|
|
|
|
if (!user()) return redirect('/login/');
|
|
|
|
$user = user();
|
|
|
|
|
|
|
|
/** @var Psr\Http\Message\ServerRequestInterface $req */
|
|
|
|
/** @var severak\database\rows $rows */
|
|
|
|
$rows = di('rows');
|
|
|
|
|
|
|
|
$form = new severak\forms\form(['method'=>'POST']);
|
|
|
|
$form->field('card_id', ['required'=>true, 'type'=>'number', 'label'=>'Číslo karty']);
|
|
|
|
$form->field('name', ['required'=>true, 'label'=>'Jméno']);
|
|
|
|
$form->field('email', ['type'=>'email', 'label'=>'E-mail']);
|
|
|
|
$form->field('phone', ['type'=>'phone', 'label'=>'Telefon']);
|
|
|
|
$form->field('date_of_birth', ['type'=>'date', 'label'=>'Datum narození']);
|
|
|
|
|
|
|
|
$form->field('_save', ['type'=>'submit', 'label'=>'Přidat']);
|
|
|
|
|
|
|
|
if ($req->getMethod()=='POST' && $form->fill($req->getParsedBody()) && $form->validate()) {
|
|
|
|
|
|
|
|
$card = $rows->one('cards', $form->values['card_id']);
|
|
|
|
if ($card) {
|
|
|
|
$form->error('card_id', 'Karta již je registrovaná v systému!');
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO - tyhle duplikáty řešit jinak
|
|
|
|
if ($rows->one('members', ['name'=>$form->values['name']])) {
|
|
|
|
$form->error('name', 'Tento člen již kartičku má!');
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!empty($form->values['email']) && $rows->one('members', ['email'=>$form->values['email']])) {
|
|
|
|
$form->error('email', 'Tento email již má některý člen.');
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!empty($form->values['phone']) && $rows->one('members', ['phone'=>$form->values['phone']])) {
|
|
|
|
$form->error('phone', 'Tento telefon již má některý člen.!');
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($form->isValid) {
|
|
|
|
$memberId = $rows->insert('members', [
|
|
|
|
'name'=>$form->values['name'],
|
|
|
|
'email'=>$form->values['email'],
|
|
|
|
'phone'=>$form->values['phone'],
|
|
|
|
'date_of_birth'=>$form->values['date_of_birth'],
|
|
|
|
]);
|
|
|
|
|
|
|
|
$rows->insert('cards', [
|
|
|
|
'id'=>$form->values['card_id'],
|
|
|
|
'member_id'=>$memberId,
|
|
|
|
'issued_by'=>$user['id'],
|
|
|
|
'issued_at'=>time(),
|
|
|
|
'is_active'=>1
|
|
|
|
]);
|
|
|
|
|
|
|
|
flash('Člen byl úspěšně registrován.');
|
|
|
|
return redirect('/');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return render('form', ['form'=>$form, 'title'=>'Přidat člena']);
|
2020-02-04 13:32:32 +00:00
|
|
|
});
|
|
|
|
|
2020-02-05 11:05:30 +00:00
|
|
|
// TODO - editace a deaktivace členů
|