Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace AdminModule;
- use \Nette\Application\UI\Form;
- use \Nette\Utils\Strings;
- /**
- * Presenter pro novinky
- */
- class NovinkyPresenter extends BasePresenter
- {
- private $postRepository;
- private $commentsRepository;
- private $data;
- private $paginator;
- /**
- * Načtení repozitáře pro práci s databází
- * @param \PostsRepository $postRepository repozitář pro novinky
- * @param \CommentsRepository $commentsRepository repozitář pro komentáře
- */
- public function inject(\PostsRepository $postRepository, \CommentsRepository $commentsRepository)
- {
- $this->postRepository = $postRepository;
- $this->commentsRepository = $commentsRepository;
- }
- /**
- * Vytvoření stránky pro vypsání všech novinek a předání proměnných do šablony
- */
- public function renderDefault()
- {
- $this->template->news = $this->postRepository->fetchAll()
- ->limit($this->paginator->getLength(), $this->paginator->getOffset())
- ->where('ostatni_akce', 0);
- $this->template->page = $this->paginator;
- }
- /**
- * Akce pro vytvoření stránkovýní
- * @param $id ID stránky
- */
- public function actionDefault($id)
- {
- $paginator = new \Nette\Utils\Paginator;
- $paginator->setItemCount($this->postRepository->fetchAll()->where('ostatni_akce', 0)->count()); // celkový počet položek (např. článků)
- $paginator->setItemsPerPage(12); // počet položek na stránce
- $paginator->setPage($this->getParam('id')); // číslo aktuální stránky, číslováno od 1
- $this->paginator = $paginator;
- }
- /**
- * Vytvoření stránky pro přidání novinky
- * @return [type] [description]
- */
- public function renderPridat()
- {
- }
- /**
- * Akce pro editování novinky
- * @param $id ID novinky
- */
- public function actionEditovat($id)
- {
- $this->data = $this->postRepository->fetchSingleId($id);
- if (!$this->data) { // kontrola existence záznamu
- return $this->error('Novinka nebyla nalezena');
- }
- $this["editFormArticle"]->setDefaults($this->data); // nastavení výchozích hodnot
- }
- /**
- * Vytvoření stránky Komentáře a předání proměnných do šablony
- * @param $id ID novinky
- */
- public function renderKomentare($id)
- {
- $this->template->comments = $this->commentsRepository->fetchArticleComments($id);
- }
- /**
- * Signál pro smazání novinky
- * @param $id ID novinky
- */
- public function handleDeleteNews($id)
- {
- $this->postRepository->deleteArticle($id);
- $this->flashMessage('Článek byl smazán', 'success');
- $this->redirect('Novinky:');
- }
- /**
- * Signál pro smazání komentáře
- * @param $id ID komentáře
- */
- public function handleDeleteComment($id)
- {
- $this->commentsRepository->deleteComment($id);
- $this->flashMessage('Komentář byl smazán', 'success');
- $this->redirect('Novinky:');
- }
- /**
- * Vytvoření formuláře pro přidání novinky
- */
- protected function createComponentNewsForm()
- {
- $form = new Form();
- $form->addText('nazev', 'Název:', 40)
- ->addRule(Form::FILLED, 'Vyplňte název článku');
- $form->addTextArea('uvodnik', 'Úvodník:')
- ->setAttribute('class', 'mceEditor')
- ->addRule(Form::FILLED, 'Vyplňte úvodník');
- $form->addTextArea('text', 'Text:')
- ->setAttribute('class', 'mceEditor')
- ->addRule(Form::FILLED, 'Napište článek');
- $form->addSubmit('send', 'Vytvořit');
- $form->onSuccess[] = $this->newsFormSubmitted;
- return $form;
- }
- /**
- * Zpracování formuláře pro přidání novinky
- * @param Form $form formulář
- */
- public function newsFormSubmitted(Form $form)
- {
- $values = $form->getValues();
- $values['datum'] = new \Nette\DateTime();
- $values['seo'] = $this->articleSeoDuplicate($values['nazev']);
- $values['uzivatele_id'] = $this->getUser()->id;
- $values['ostatni_akce'] = 0;
- $values['zobrazit_novinky'] = 1;
- $this->postRepository->insertArticle($values);
- $this->flashMessage('Článek byl vložen', 'success');
- $this->redirect('Novinky:');
- }
- /**
- * Ošetření duplicity názvu novinek
- * @param string $title název novinky
- */
- private function articleSeoDuplicate($title)
- {
- $seo = $this->postRepository->fetchAll()->where('nazev = ?',$title)->count();
- if($seo === 0)
- return Strings::webalize($title);
- else
- return Strings::webalize($title)."-".$seo;
- }
- /**
- * Zabránění duplicity při editaci novinky
- * @param string $title_old starý název
- * @param string $title_new nový název
- * @param string $seo starý SEO tvar
- */
- private function editTitleSeo($title_old, $title_new, $seo)
- {
- if ($title_new !== $title_old) {
- return $this->articleSeoDuplicate($title_new);
- }
- else {
- return $seo;
- }
- }
- /**
- * Vytvoření formuláře pro editaci novinky
- */
- protected function createComponentEditFormArticle()
- {
- $form = new Form();
- $form->addText('nazev', 'Název:', 50)
- ->addRule(Form::FILLED, 'Vyplňte název článku');
- $form->addTextArea('uvodnik', 'Úvodník:')
- ->setAttribute('class', 'mceEditor')
- ->addRule(Form::FILLED, 'Vyplňte úvodník');
- $form->addTextArea('text', 'Text:', 40, 30)
- ->setAttribute('class', 'mceEditor')
- ->addRule(Form::FILLED, 'Napište článek');
- $form->addSubmit('send', 'Editovat');
- $form->onSuccess[] = $this->editFormSubmitted;
- return $form;
- }
- /**
- * Zpracování formuláře pro editaci novinky
- * @param Form $form formulář
- */
- public function editFormSubmitted(Form $form)
- {
- $values = $form->getValues();
- $data = $this->data;
- $values['seo'] = $this->editTitleSeo($data['nazev'], $values['nazev'], $data['seo']);
- $this->postRepository->editArticle($data['id'], $values);
- $this->flashMessage('Novinka byla editována', 'success');
- $this->redirect('Novinky:');
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement