X-Git-Url: http://git.inspyration.org/?a=blobdiff_plain;f=module%2FGalerie%2Fsrc%2FGalerie%2FController%2FIndexController.php;h=fef7968acf41c52ef388443caa2f0810368da2af;hb=b9de62fff679629641c3b50ad3f3ff52df9abd60;hp=0219600844c46e73fab27b0c58c359198c59f8f8;hpb=7146e4cfb9136106487215e502284af689e5fe7e;p=zf2.biz%2Fgalerie.git diff --git a/module/Galerie/src/Galerie/Controller/IndexController.php b/module/Galerie/src/Galerie/Controller/IndexController.php index 0219600..fef7968 100644 --- a/module/Galerie/src/Galerie/Controller/IndexController.php +++ b/module/Galerie/src/Galerie/Controller/IndexController.php @@ -2,10 +2,19 @@ namespace Galerie\Controller; + use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; +use Zend\View\Model\JsonModel; + +use Zend\View\Renderer\PhpRenderer; + +use Zend\Session\Container; + +use Zend\Feed\Writer\FeedFactory; use Galerie\Model\Galerie; +use Galerie\Graph\Test as TestPie; class IndexController extends AbstractActionController { @@ -13,8 +22,14 @@ class IndexController extends AbstractActionController private $_galerieTable; private $_galerieInfoTable; private $_galerieForm; + private $_galerieInfoExporter; + private $_galerieMailSender; + private $_viewResolver; + private $_galeriePairTable; private $_translator; + private $_log; + private $_rss; private function _getGalerieTable() @@ -35,6 +50,15 @@ class IndexController extends AbstractActionController return $this->_galerieInfoTable; } + private function _getGalerieInfoRssTable() + { + if (!$this->_galerieInfoTable) { + $sm = $this->getServiceLocator(); + $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoRssTable'); + } + return $this->_galerieInfoTable; + } + private function _getTranslator() { if (!$this->_translator) { @@ -53,13 +77,259 @@ class IndexController extends AbstractActionController return $this->_galerieForm; } + private function _getGalerieInfoExporter() + { + if (!$this->_galerieInfoExporter) { + $sm = $this->getServiceLocator(); + $this->_galerieInfoExporter = $sm->get('Galerie\Export\GalerieWorkbook'); + } + return $this->_galerieInfoExporter; + } + + private function _getGalerieMailSender() + { + if (!$this->_galerieMailSender) { + $sm = $this->getServiceLocator(); + $this->_galerieMailSender = $sm->get('Galerie\Mail\MailSender'); + } + return $this->_galerieMailSender; + } + + private function _getViewResolver() + { + if (!$this->_viewResolver) { + $sm = $this->getServiceLocator(); + $this->_viewResolver = $sm->get('ViewResolver'); + } + return $this->_viewResolver; + } + + private function _getGaleriePairTable() + { + if (!$this->_galeriePairTable) { + $sm = $this->getServiceLocator(); + $this->_galeriePairTable = $sm->get('Galerie\Model\GaleriePairTable'); + } + return $this->_galeriePairTable; + } + + private function _getLog() + { + if (!$this->_log) { + $sm = $this->getServiceLocator(); + $this->_log = $sm->get('Zend\Log'); + } + return $this->_log; + } + + private function _getRss() + { + if (!$this->_rss) { + $sm = $this->getServiceLocator(); + $config = $sm->get('Config'); + $this->_rss = FeedFactory::factory($config['rss']); + } + return $this->_rss; + } + + public function indexAction() + { + $this->_getLog()->info('Acces à la liste des galeries'); + $session = new Container('test'); + if ($session->offsetExists('last')) { + $last = $email = $session->offsetGet('last'); + } else { + $last = null; + } + return new ViewModel(array('last' => $last)); + } + + public function rssAction() { + // Récupération des informations brutes + $modelManager = $this->_getGalerieInfoRssTable(); + $datas = $modelManager->all(); + + // Création du fil RSS + $rss = $this->_getRss(); + + foreach($datas as $d) { + $entry = $rss->createEntry(); + $entry->setTitle($d->name); + + $entry->setLink($this->url()->fromRoute('galerie/view', array('id' => $d->id))); + $entry->addAuthor(array( + 'name' => $d->username, + )); + $date = new \DateTime(); + $entry->setDateModified( + $date->setTimestamp(intval($d->updated)) + ); + $entry->setDateCreated( + $date->setTimestamp(intval($d->created)) + ); + $entry->setDescription($d->description); + $entry->setContent("{$d->nb} photos."); + $rss->addEntry($entry); + } + + //echo '
'; print_r($rss->export('rss')); die('
'); + + // Création de la réponse + $response = $this->getResponse(); + $response->setStatusCode(200); + + // Modification des entêtes + $headers = $this->getResponse()->getHeaders(); + $headers->addHeaderLine('Content-Type', 'application/rss+xml; charset=utf-8'); + + $response->setContent($rss->export('rss')); + + return $response; + } + + public function csvAction() { + // Récupération des informations brutes + $modelManager = $this->_getGalerieInfoTable(); + $datas = $modelManager->all(); + + // Mise en forme des résultats + $content = array($modelManager->csvHeader()); + foreach($datas as $d) { + $content[] = $d->csvFormat(); + } + + // Création de la réponse + $response = $this->getResponse(); + $response->setStatusCode(200); + + // Modification des entêtes + $headers = $this->getResponse()->getHeaders(); + $headers->addHeaderLine('Content-Type', 'text/csv; charset=utf-8'); + $headers->addHeaderLine('Content-Disposition', 'attachment; filename="export_galerie.csv"'); + + $response->setContent(implode("\r\n", $content)); + + return $response; + } + + + public function excelAction() { + // Récupération des informations brutes + $modelManager = $this->_getGalerieInfoTable(); + $datas = $modelManager->all(); + + $exporter = $this->_getGalerieInfoExporter(); + $exporter->build($datas); + + // Renvoi d'une réponse vide pour désactiver le rendu de la vue + return $this->getResponse(); + } + + + public function mailAction() + { + //Construction du courriel au format HTML. + $mail_viewmodel = new ViewModel(array( + 'who' => 'World', + )); + $mail_viewmodel->setTemplate('galerie/mail/test'); + $renderer = new PhpRenderer; + $renderer->setResolver($this->_getViewResolver()); + $body_html = $renderer->render($mail_viewmodel); + + // Envoi du courriel + $mailSender = $this->_getGalerieMailSender(); + $mailSender->send( + 's.chazallet@gmail.com', 'Moi',//'sender@example.com', 'Moi', + 's.chazallet@gmail.com', 'Toi',//'to@example.com', 'Toi', + 'Test', 'Hello World 4.', $body_html + ); + + // Création de la réponse + $response = $this->getResponse(); + $response->setStatusCode(200); + $response->setContent('Mail Sent.'); + + return $response; + } + + public function pieAction() + { + // Accès aux modèles + $modelManager = $this->_getGalerieInfoTable(); + $datas = $modelManager->all(); + + // Mise en forme des résultats + $nombres = array(); + $noms = array(); + foreach($datas as $d) { + $nombres[] = $d->nb; + $noms[] = $d->name; + } + + // Construction (et envoi) du diagramme + $pie = new TestPie($nombres, $noms); + + $response = $this->getResponse(); + $response->setStatusCode(200); + $response->setContent(''); + + return $response; + } + + public function listAction() { - return new ViewModel(array( - 'galeries' => $this->_getGalerieInfoTable()->all(), - )); + // Récupération de l'objet requête + $request = $this->getRequest(); + + $start = $request->getQuery('iDisplayStart', 0); + $length = $request->getQuery('iDisplayLength', 10); + $tri = $request->getQuery('iSortCol_0'); + $senstri = $request->getQuery('sSortDir_0', 'asc'); + $filtre = $request->getQuery('sSearch'); + + // Preparation pour le requêtage + $modelManager = $this->_getGalerieInfoTable(); + + // Récupération des galeries sous la forme d'un tableau d'entités + $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre); + + // Préparation pour la mise en forme du résultat + $action_template = '%s%s%s'; + $translator = $this->_getTranslator(); + $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie'); + $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie'); + $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie'); + $url = $this->url(); + // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux + $result = array(); + foreach($galeries as $g) { + $result[] = array( + "{$g->name}{$g->description}", + $g->username, + $g->nb, + sprintf( + $action_template, + $url->fromRoute('galerie/view', array('id' => $g->id)), + $action_voir, + $url->fromRoute('galerie/edit', array('id' => $g->id)), + $action_editer, + $url->fromRoute('galerie/del', array('id' => $g->id)), + $action_supprimer + ), + ); + } + + // Construction du resultat + return new JsonModel(array( + "sEcho" => $request->getQuery('sEcho', 1), + "iTotalRecords" => $modelManager->count_all(), + "iTotalDisplayRecords" => count($result), + "aaData" => $result, + )); } public function editAction() @@ -86,12 +356,14 @@ class IndexController extends AbstractActionController } else { // Nous sommes en modification $form->get('submit')->setValue('Modifier'); - // Il faut préremplir le formulaire avec les données actuelles - $form->bind($galerie); // Garder cette information pour la vue $is_new = false; } + + // Il faut préremplir le formulaire avec les données actuelles + $form->bind($galerie); + // Récupération de l'objet requête $request = $this->getRequest(); if ($request->isPost()) { @@ -110,8 +382,20 @@ class IndexController extends AbstractActionController } $this->_getGalerieTable()->save($galerie); - // Redirection - return $this->redirect()->toRoute('galerie'); + $translator = $this->_getTranslator(); + $messenger = $this->flashMessenger(); + $messenger->setNamespace('infos'); + if ($is_new) { + $messenger->addMessage($translator->translate('Galerie_added', 'galerie')); + } else { + $messenger->addMessage($translator->translate('Galerie_updated', 'galerie')); + } + // Redirection à l'ancienne mode + //return $this->redirect()->toRoute('galerie'); + // Redirection vers le contrôleur courant + //return $this->postRedirectGet(); + // Redirection vers la page Galerie/Index + return $this->postRedirectGet('galerie'); } } @@ -142,9 +426,17 @@ class IndexController extends AbstractActionController { $id = $this->params()->fromRoute('id', null); $galerie = $this->_getGalerieInfoTable()->any($id); + + $pairs = $this->_getGaleriePairTable()->all(); + unset($pairs[$id]); + + $session = new Container('test'); + $session->offsetSet('last', $id); + return new ViewModel(array( 'id' => $id, 'galerie' => $galerie, + 'pairs' => $pairs, )); }