Rajout d'un export Excel
[zf2.biz/galerie.git] / module / Galerie / src / Galerie / Controller / IndexController.php
index 0219600..551d046 100644 (file)
@@ -4,6 +4,7 @@ namespace Galerie\Controller;
 
 use Zend\Mvc\Controller\AbstractActionController; 
 use Zend\View\Model\ViewModel;
+use Zend\View\Model\JsonModel;
 
 use Galerie\Model\Galerie;
 
@@ -13,6 +14,7 @@ class IndexController extends AbstractActionController
     private $_galerieTable;
     private $_galerieInfoTable;
     private $_galerieForm;
+    private $_galerieInfoExporter;
 
     private $_translator;
 
@@ -53,13 +55,112 @@ 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;
+    }
+
+
 
 
     public function indexAction() 
+    {
+        return new ViewModel($this->MessageGetter());
+    } 
+
+    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 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 = '<a href="%s">%s</a><a href="%s">%s</a><a href="%s">%s</a>';
+        $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(
+                "<strong>{$g->name}</strong><em>{$g->description}</em>",
+                $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() 
@@ -110,8 +211,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');
             }
         }