Obvody/app/Presentation/Nastaveni/NastaveniPresenter.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');
}
}