ACC SHELL

Path : /srv/www/vhosts/duklavysco/app/presenters/
File Upload :
Current File : //srv/www/vhosts/duklavysco/app/presenters/AkcePresenter.php

<?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