Advertisement
Guest User

Untitled

a guest
May 25th, 2015
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.94 KB | None | 0 0
  1. <?php
  2.  
  3. namespace AdminModule;
  4. use \Nette\Application\UI\Form;
  5. use \Nette\Utils\Strings;
  6.  
  7. /**
  8.  * Presenter pro novinky
  9.  */
  10. class NovinkyPresenter extends BasePresenter
  11. {
  12.     private $postRepository;
  13.     private $commentsRepository;
  14.     private $data;
  15.     private $paginator;
  16.  
  17.     /**
  18.      * Načtení repozitáře pro práci s databází
  19.      * @param  \PostsRepository    $postRepository     repozitář pro novinky
  20.      * @param  \CommentsRepository $commentsRepository repozitář pro komentáře
  21.      */
  22.     public function inject(\PostsRepository $postRepository, \CommentsRepository $commentsRepository)
  23.     {
  24.         $this->postRepository = $postRepository;
  25.         $this->commentsRepository = $commentsRepository;
  26.     }
  27.  
  28.     /**
  29.      * Vytvoření stránky pro vypsání všech novinek a předání proměnných do šablony
  30.      */
  31.     public function renderDefault()
  32.     {
  33.         $this->template->news = $this->postRepository->fetchAll()
  34.             ->limit($this->paginator->getLength(), $this->paginator->getOffset())
  35.             ->where('ostatni_akce', 0);
  36.         $this->template->page = $this->paginator;
  37.     }
  38.    
  39.     /**
  40.      * Akce pro vytvoření stránkovýní
  41.      * @param  $id ID stránky
  42.      */
  43.     public function actionDefault($id)
  44.     {
  45.         $paginator = new \Nette\Utils\Paginator;
  46.         $paginator->setItemCount($this->postRepository->fetchAll()->where('ostatni_akce', 0)->count()); // celkový počet položek (např. článků)
  47.         $paginator->setItemsPerPage(12); // počet položek na stránce
  48.         $paginator->setPage($this->getParam('id')); // číslo aktuální stránky, číslováno od 1
  49.         $this->paginator = $paginator;
  50.     }
  51.  
  52.     /**
  53.      * Vytvoření stránky pro přidání novinky
  54.      * @return [type] [description]
  55.      */
  56.     public function renderPridat()
  57.     {
  58.     }
  59.  
  60.     /**
  61.      * Akce pro editování novinky
  62.      * @param  $id ID novinky
  63.      */
  64.     public function actionEditovat($id)
  65.     {
  66.         $this->data = $this->postRepository->fetchSingleId($id);
  67.         if (!$this->data) { // kontrola existence záznamu
  68.             return $this->error('Novinka nebyla nalezena');
  69.         }
  70.         $this["editFormArticle"]->setDefaults($this->data); // nastavení výchozích hodnot
  71.     }
  72.  
  73.     /**
  74.      * Vytvoření stránky Komentáře a předání proměnných do šablony
  75.      * @param  $id ID novinky
  76.      */
  77.     public function renderKomentare($id)
  78.     {
  79.         $this->template->comments = $this->commentsRepository->fetchArticleComments($id);
  80.     }
  81.  
  82.     /**
  83.      * Signál pro smazání novinky
  84.      * @param  $id ID novinky
  85.      */
  86.     public function handleDeleteNews($id)
  87.     {
  88.         $this->postRepository->deleteArticle($id);
  89.         $this->flashMessage('Článek byl smazán', 'success');
  90.         $this->redirect('Novinky:');
  91.     }
  92.  
  93.     /**
  94.      * Signál pro smazání komentáře
  95.      * @param  $id ID komentáře
  96.      */
  97.     public function handleDeleteComment($id)
  98.     {
  99.         $this->commentsRepository->deleteComment($id);
  100.         $this->flashMessage('Komentář byl smazán', 'success');
  101.         $this->redirect('Novinky:');
  102.     }
  103.    
  104.     /**
  105.      * Vytvoření formuláře pro přidání novinky
  106.      */
  107.     protected function createComponentNewsForm()
  108.     {
  109.         $form = new Form();
  110.  
  111.         $form->addText('nazev', 'Název:', 40)
  112.             ->addRule(Form::FILLED, 'Vyplňte název článku');
  113.         $form->addTextArea('uvodnik', 'Úvodník:')
  114.             ->setAttribute('class', 'mceEditor')
  115.             ->addRule(Form::FILLED, 'Vyplňte úvodník');
  116.         $form->addTextArea('text', 'Text:')
  117.             ->setAttribute('class', 'mceEditor')
  118.             ->addRule(Form::FILLED, 'Napište článek');
  119.         $form->addSubmit('send', 'Vytvořit');
  120.         $form->onSuccess[] = $this->newsFormSubmitted;
  121.         return $form;
  122.     }
  123.  
  124.     /**
  125.      * Zpracování formuláře pro přidání novinky
  126.      * @param  Form   $form formulář
  127.      */
  128.     public function newsFormSubmitted(Form $form)
  129.     {
  130.         $values = $form->getValues();
  131.  
  132.         $values['datum'] = new \Nette\DateTime();
  133.         $values['seo'] = $this->articleSeoDuplicate($values['nazev']);
  134.         $values['uzivatele_id'] = $this->getUser()->id;
  135.         $values['ostatni_akce'] = 0;
  136.         $values['zobrazit_novinky'] = 1;
  137.         $this->postRepository->insertArticle($values);
  138.         $this->flashMessage('Článek byl vložen', 'success');
  139.         $this->redirect('Novinky:');
  140.     }
  141.  
  142.     /**
  143.      * Ošetření duplicity názvu novinek
  144.      * @param  string $title název novinky
  145.      */
  146.     private function articleSeoDuplicate($title)
  147.     {
  148.             $seo = $this->postRepository->fetchAll()->where('nazev = ?',$title)->count();
  149.             if($seo === 0)
  150.                 return Strings::webalize($title);
  151.             else
  152.                 return Strings::webalize($title)."-".$seo;
  153.     }
  154.  
  155.     /**
  156.      * Zabránění duplicity při editaci novinky
  157.      * @param  string $title_old starý název
  158.      * @param  string $title_new nový název
  159.      * @param  string $seo       starý SEO tvar
  160.      */
  161.     private function editTitleSeo($title_old, $title_new, $seo)
  162.     {
  163.         if ($title_new !== $title_old) {
  164.             return $this->articleSeoDuplicate($title_new);
  165.         }
  166.         else {
  167.             return $seo;
  168.         }
  169.     }
  170.  
  171.     /**
  172.      * Vytvoření formuláře pro editaci novinky
  173.      */
  174.     protected function createComponentEditFormArticle()
  175.     {
  176.         $form = new Form();
  177.         $form->addText('nazev', 'Název:', 50)
  178.             ->addRule(Form::FILLED, 'Vyplňte název článku');
  179.         $form->addTextArea('uvodnik', 'Úvodník:')
  180.             ->setAttribute('class', 'mceEditor')
  181.             ->addRule(Form::FILLED, 'Vyplňte úvodník');
  182.         $form->addTextArea('text', 'Text:', 40, 30)
  183.             ->setAttribute('class', 'mceEditor')
  184.             ->addRule(Form::FILLED, 'Napište článek');
  185.         $form->addSubmit('send', 'Editovat');
  186.         $form->onSuccess[] = $this->editFormSubmitted;
  187.         return $form;
  188.     }
  189.  
  190.     /**
  191.      * Zpracování formuláře pro editaci novinky
  192.      * @param  Form   $form formulář
  193.      */
  194.     public function editFormSubmitted(Form $form)
  195.     {
  196.         $values = $form->getValues();
  197.         $data = $this->data;
  198.         $values['seo'] = $this->editTitleSeo($data['nazev'], $values['nazev'], $data['seo']);
  199.  
  200.         $this->postRepository->editArticle($data['id'], $values);
  201.         $this->flashMessage('Novinka byla editována', 'success');
  202.         $this->redirect('Novinky:');
  203.     }
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement