ACC SHELL
<?php
/**
* Akce presenter.
*/
class AkcePresenter extends BasePresenter
{
private $name = 'akce';
private $presenter = 'Akce';
private $table = 'akce';
private $resource = 'akce';
private $userFormPrefix = 'user';
public function renderDefault()
{
if ($this->user->isAllowed($this->resource, 'view'))
{
$this->template->akce = $this->db->table($this->table)->order('datum DESC');
$this->template->users = $this->db->table('uzivatele');
}
else
{
$this->flashMessage("K prohlížení sekce " . ucfirst($this->name) . " nemáš oprávnění!", 'error');
$this->redirectToLogin($this->getName(), $this->request->parameters);
}
}
public function renderSmazat($id)
{
if ($this->user->isAllowed($this->resource, 'edit', @$this->user->identity->id, $id))
{
$this->db->table($this->table)->get($id)->delete();
$this->flashMessage(ucfirst($this->name) . ' byla smazána!', 'success');
$this->redirect("$this->presenter:");
}
else
{
$this->flashMessage("Ke smazání této $this->name nemáš oprávnění!", 'error');
$this->redirect("$this->presenter:");
}
}
public function renderUpravit($id)
{
if (!$this->user->isAllowed($this->resource, 'edit', @$this->user->identity->id, $id))
{
$this->flashMessage("K editaci této $this->name nemáš oprávnění!", 'error');
$this->redirect("$this->presenter:");
}
}
protected function createComponentEditForm()
{
$form = new Nette\Application\UI\Form;
$form->addHidden('id');
$form->addDateTimePicker('datum', 'Čas konání:', 30)
->setRequired('Vyplň čas konání.');
$form->addText('nazev', 'Název:', 40)
->setRequired('Název nesmí být prázdný.');
$form->addTextArea('popis', 'Popis:')
->setRequired('Zadej alespoň stručný popis akce.');
if (in_array('administrator', $this->getUser()->identity->roles))
{
$users = array();
$users[$this->user->identity->id] = 'já';
foreach ($this->template->uzivatele as $uzivatel)
{
if ($uzivatel->id != $this->user->identity->id)
$users[$uzivatel->id] = "$uzivatel->prijmeni, $uzivatel->jmeno";
}
$form->addSelect('vlozil', 'Majitel:', $users);
}
$defaults = $this->db->table($this->table)->get($this->getParam('id'))->toArray();
$defaults["datum"] = $defaults["datum"]->format('d. m. Y H:i');
$form->setDefaults($defaults);
$form->addHidden('upravil', $this->user->identity->id);
$form->addSubmit('edit', 'Uložit')
->onClick[] = callback($this, 'editFormSubmitted');
$presenter = $this;
$form->addSubmit('cancel', 'Zrušit')
->setValidationScope(FALSE)
->onClick[] = function() use ($presenter) {$presenter->redirect("Akce:");};
return $form;
}
public function editFormSubmitted(Nette\Forms\Controls\SubmitButton $submitButton)
{
$values = $submitButton->getForm()->getValues();
$values["datum"] = DateTime::createFromFormat('d. m. Y H:i', $values["datum"])->format('Y-m-d H:i');
if ($this->user->isAllowed($this->resource, 'edit', @$this->user->identity->id, $values->id))
{
$this->db->table($this->table)->get($values->id)->update($values);
$this->flashMessage(ucfirst($this->name) . ' byla upravena!', 'success');
$this->redirect("$this->presenter:");
}
else
{
$this->flashMessage("K editaci této $this->name nemáš oprávnění!", 'error');
$this->redirect("$this->presenter:");
}
}
public function renderVytvorit()
{
if (!$this->user->isAllowed($this->resource, 'add'))
{
$this->flashMessage("K vytvoření $this->name nemáš oprávnění!", 'error');
$this->redirect("$this->presenter:");
}
}
protected function createComponentAddForm()
{
$form = new Nette\Application\UI\Form;
$form->addHidden('upravil', $this->user->identity->id);
$form->addDateTimePicker('datum', 'Čas konání:', 30)
->setRequired('Vyplň čas konání.')
->setDefaultValue(date('d. m. Y') . ' 12:00');
$form->addText('nazev', 'Název:', 40)
->setRequired('Název nesmí být prázdný.');
$form->addTextArea('popis', 'Popis:')
->setRequired('Zadej alespoň stručný popis.');
if (in_array('administrator', $this->getUser()->identity->roles))
{
$users = array();
$users[$this->user->identity->id] = 'já';
foreach ($this->template->uzivatele as $uzivatel)
{
if ($uzivatel->id != $this->user->identity->id)
$users[$uzivatel->id] = "$uzivatel->prijmeni, $uzivatel->jmeno";
}
$form->addSelect('vlozil', 'Majitel:', $users);
}
else
{
$form->addHidden('vlozil', $this->user->identity->id);
}
$form->addSubmit('add', 'Vytvořit')
->onClick[] = callback($this, 'addFormSubmitted');
$presenter = $this;
$form->addSubmit('cancel', 'Zrušit')
->setValidationScope(FALSE)
->onClick[] = function() use ($presenter) {$presenter->redirect("Akce:");};
return $form;
}
public function addFormSubmitted(Nette\Forms\Controls\SubmitButton $submitButton)
{
if ($this->user->isAllowed($this->resource, 'add'))
{
$values = $submitButton->getForm()->getValues();
$values["datum"] = DateTime::createFromFormat('d. m. Y H:i', $values["datum"])->format('Y-m-d H:i');
$this->db->table($this->table)->insert($values);
$this->flashMessage(ucfirst($this->name) . ' byla vytvořena!');
$this->redirect("$this->presenter:");
}
else
{
$this->flashMessage("K vytvoření $this->name nemáš oprávnění!", 'error');
$this->redirect("$this->presenter:");
}
}
public function renderRozeslat($id)
{
if (!$this->user->isAllowed($this->resource, 'send', @$this->user->identity->id, $id))
{
$this->flashMessage("K rozeslání této $this->name emailem nemáš oprávnění!", 'error');
$this->redirect("$this->presenter:");
}
else
{
$this->template->akce = $this->db->table('akce')->get($id);
}
}
protected function createComponentSendForm()
{
$akce = $this->db->table('akce')->get($this->getParam('id'));
$users = $this->db->table('uzivatele')->order('prijmeni, jmeno');
$form = new Nette\Application\UI\Form;
foreach ($users as $user)
{
$form->addCheckbox("$this->userFormPrefix$user->id", " $user->prijmeni, $user->jmeno")
->setAttribute('title', $user->email)
->setDefaultValue($user->aktivni);
}
$form->addText('subject', 'Předmět:', 40)
->setAttribute('readonly')
->setDefaultValue($akce->nazev . ', ' . $akce->datum->format('G:i j. n. Y'));
$form->addTextArea('body', 'Popis:')
->setAttribute('readonly')
->setDefaultValue($akce->popis);
$form->addTextArea('notes', 'Poznámky:');
$form->addSubmit('send', 'Rozeslat')
->onClick[] = callback($this, 'sendFormSubmitted');
return $form;
}
public function sendFormSubmitted(Nette\Forms\Controls\SubmitButton $submitButton)
{
$values = $submitButton->getForm()->getValues();
$mail = new Nette\Mail\Message();
$mail->setFrom("Dukla Vyščo <do-not-reply@duklavysco.cz>")
->setSubject("Dukla Vyščo - $values->subject")
->setBody("$values->body\n\n$values->notes");
try {
foreach ($values as $key => $value)
{
if (substr($key, 0, strlen($this->userFormPrefix)) == $this->userFormPrefix)
{
$userId = substr($key, strlen($this->userFormPrefix));
$user = $this->db->table('uzivatele')->get($userId);
if ($user)
{
$mail->addTo($user->email);
}
}
}
$mail->send();
$this->flashMessage(ucfirst($this->name) . " '$values->subject' byla rozeslána!", 'success');
$this->redirect('Homepage:');
} catch(Nette\InvalidStateException $e) {
$this->flashMessage(ucfirst($this->name) . " '$values->subject' nemohla být rozeslána! " . $e->getMessage(), 'error');
}
}
}
ACC SHELL 2018