111 lines
3.4 KiB
PHP
111 lines
3.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Presentation\Nastaveni;
|
|
|
|
use App\Core\Konstanty;
|
|
use App\Core\MapovyPodklad;
|
|
use App\Model\LoginFacade;
|
|
use Nette\Application\UI\Form;
|
|
use Nette\Application\UI\Presenter;
|
|
use Nette\Utils\ArrayHash;
|
|
|
|
|
|
final class NastaveniPresenter extends Presenter
|
|
{
|
|
public function __construct(
|
|
private LoginFacade $uzivatele,
|
|
) {
|
|
}
|
|
|
|
public function beforeRender(): void
|
|
{
|
|
$this->template->appVersion = Konstanty::verze;
|
|
if (!$this->getUser()->isLoggedIn()) {
|
|
$this->template->navrat = $this->storeRequest();
|
|
}
|
|
}
|
|
|
|
protected function createComponentPodkladForm(): Form
|
|
{
|
|
$form = new Form;
|
|
$form->addRadioList('podklad', 'Mapové podklady', MapovyPodklad::moznosti())
|
|
->setDefaultValue($this->aktualni())
|
|
->setRequired('Vyberte mapové podklady.');
|
|
$form->addSubmit('send', 'Uložit');
|
|
$form->addProtection('Platnost formuláře vypršela, odešlete ho znovu.');
|
|
$form->onSuccess[] = $this->podkladFormSucceeded(...);
|
|
return $form;
|
|
}
|
|
|
|
private function podkladFormSucceeded(Form $form, ArrayHash $values): void
|
|
{
|
|
$this->getHttpResponse()->setCookie(
|
|
MapovyPodklad::COOKIE,
|
|
MapovyPodklad::platny((string) $values->podklad),
|
|
'+1 year',
|
|
'/',
|
|
null,
|
|
null,
|
|
false,
|
|
);
|
|
$this->flashMessage('Nastavení bylo uloženo.');
|
|
$this->redirect('default');
|
|
}
|
|
|
|
private function aktualni(): string
|
|
{
|
|
return MapovyPodklad::platny($this->getHttpRequest()->getCookie(MapovyPodklad::COOKIE));
|
|
}
|
|
|
|
protected function createComponentHesloForm(): Form
|
|
{
|
|
$form = new Form;
|
|
$form->addPassword('soucasne', 'Současné heslo')
|
|
->setRequired('Zadejte současné heslo.');
|
|
$form->addPassword('heslo', 'Nové heslo')
|
|
->setRequired('Zadejte nové heslo.')
|
|
->setMaxLength(100);
|
|
$form->addPassword('hesloZnovu', 'Nové heslo znovu')
|
|
->setRequired('Zadejte nové heslo znovu.')
|
|
->addRule(Form::Equal, 'Hesla se neshodují.', $form['heslo']);
|
|
$form->addSubmit('send', 'Změnit heslo');
|
|
$form->addProtection('Platnost formuláře vypršela, odešlete ho znovu.');
|
|
$form->onSuccess[] = $this->hesloFormSucceeded(...);
|
|
return $form;
|
|
}
|
|
|
|
private function hesloFormSucceeded(Form $form, ArrayHash $values): void
|
|
{
|
|
$user = $this->getUser();
|
|
if (!$user->isLoggedIn()) {
|
|
$form->addError('Pro změnu hesla se přihlaste.');
|
|
return;
|
|
}
|
|
|
|
$id = (int) $user->getId();
|
|
if (!$this->uzivatele->overHeslo($id, (string) $values->soucasne)) {
|
|
$form->addError('Současné heslo nesouhlasí.');
|
|
return;
|
|
}
|
|
|
|
$heslo = (string) $values->heslo;
|
|
if (mb_strlen($heslo) < 4) {
|
|
$form->addError('Heslo musí mít alespoň 4 znaky.');
|
|
return;
|
|
}
|
|
if (mb_strlen($heslo) > 100) {
|
|
$form->addError('Heslo je příliš dlouhé.');
|
|
return;
|
|
}
|
|
if (!$this->uzivatele->zmenVlastniHeslo($id, $heslo)) {
|
|
$form->addError('Heslo se nepodařilo změnit.');
|
|
return;
|
|
}
|
|
|
|
$this->flashMessage('Heslo bylo změněno.');
|
|
$this->redirect('this');
|
|
}
|
|
}
|