Rajout d'un fil RSS
[zf2.biz/galerie.git] / module / Galerie / src / Galerie / Controller / IndexController.php
index 7bba533..fef7968 100644 (file)
@@ -9,6 +9,9 @@ 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;
@@ -25,6 +28,8 @@ class IndexController extends AbstractActionController
     private $_galeriePairTable;
 
     private $_translator;
+    private $_log;
+    private $_rss;
 
 
     private function _getGalerieTable()
@@ -45,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) {
@@ -99,13 +113,82 @@ class IndexController extends AbstractActionController
         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() 
     {
-        return new ViewModel($this->MessageGetter());
-    } 
+        $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 '<pre>'; print_r($rss->export('rss')); die('</pre>');
+
+        // 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
@@ -347,6 +430,9 @@ class IndexController extends AbstractActionController
         $pairs = $this->_getGaleriePairTable()->all();
         unset($pairs[$id]);
 
+        $session = new Container('test');
+        $session->offsetSet('last', $id);
+
         return new ViewModel(array(
             'id' => $id,
             'galerie' => $galerie,