Rajout d'un export Excel
[zf2.biz/galerie.git] / module / Galerie / src / Galerie / Controller / IndexController.php
1 <?php
2
3 namespace Galerie\Controller; 
4
5 use Zend\Mvc\Controller\AbstractActionController; 
6 use Zend\View\Model\ViewModel;
7 use Zend\View\Model\JsonModel;
8
9 use Galerie\Model\Galerie;
10
11 class IndexController extends AbstractActionController 
12 {
13
14     private $_galerieTable;
15     private $_galerieInfoTable;
16     private $_galerieForm;
17     private $_galerieInfoExporter;
18
19     private $_translator;
20
21
22     private function _getGalerieTable()
23     {
24         if (!$this->_galerieTable) {
25             $sm = $this->getServiceLocator();
26             $this->_galerieTable = $sm->get('Galerie\Model\GalerieTable');
27         }
28         return $this->_galerieTable;
29     }
30
31     private function _getGalerieInfoTable()
32     {
33         if (!$this->_galerieInfoTable) {
34             $sm = $this->getServiceLocator();
35             $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoTable');
36         }
37         return $this->_galerieInfoTable;
38     }
39
40     private function _getTranslator()
41     {
42         if (!$this->_translator) {
43             $sm = $this->getServiceLocator();
44             $this->_translator = $sm->get('translator');
45         }
46         return $this->_translator;
47     }
48
49     private function _getGalerieForm()
50     {
51         if (!$this->_galerieForm) {
52             $sm = $this->getServiceLocator();
53             $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm');
54         }
55         return $this->_galerieForm;
56     }
57
58     private function _getGalerieInfoExporter()
59     {
60         if (!$this->_galerieInfoExporter) {
61             $sm = $this->getServiceLocator();
62             $this->_galerieInfoExporter = $sm->get('Galerie\Export\GalerieWorkbook');
63         }
64         return $this->_galerieInfoExporter;
65     }
66
67
68
69
70     public function indexAction() 
71     {
72         return new ViewModel($this->MessageGetter());
73     } 
74
75     public function csvAction() {
76         // Récupération des informations brutes
77         $modelManager = $this->_getGalerieInfoTable();
78         $datas = $modelManager->all();
79
80         // Mise en forme des résultats
81         $content = array($modelManager->csvHeader());
82         foreach($datas as $d) {
83             $content[] = $d->csvFormat();
84         }
85
86         // Création de la réponse
87         $response = $this->getResponse();
88         $response->setStatusCode(200);
89
90         // Modification des entêtes
91         $headers = $this->getResponse()->getHeaders();
92         $headers->addHeaderLine('Content-Type', 'text/csv; charset=utf-8');
93         $headers->addHeaderLine('Content-Disposition', 'attachment; filename="export_galerie.csv"');
94
95         $response->setContent(implode("\r\n", $content));
96
97         return $response;
98     }
99
100
101     public function excelAction() {
102         // Récupération des informations brutes
103         $modelManager = $this->_getGalerieInfoTable();
104         $datas = $modelManager->all();
105
106         $exporter = $this->_getGalerieInfoExporter();
107         $exporter->build($datas);
108
109         // Renvoi d'une réponse vide pour désactiver le rendu de la vue
110         return $this->getResponse();
111     }
112
113
114     public function listAction() 
115     { 
116         // Récupération de l'objet requête
117         $request = $this->getRequest();
118
119         $start = $request->getQuery('iDisplayStart', 0);
120         $length = $request->getQuery('iDisplayLength', 10);
121         $tri = $request->getQuery('iSortCol_0');
122         $senstri = $request->getQuery('sSortDir_0', 'asc');
123         $filtre = $request->getQuery('sSearch');
124
125         // Preparation pour le requêtage
126         $modelManager = $this->_getGalerieInfoTable();
127
128         // Récupération des galeries sous la forme d'un tableau d'entités
129         $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
130
131         // Préparation pour la mise en forme du résultat
132         $action_template = '<a href="%s">%s</a><a href="%s">%s</a><a href="%s">%s</a>';
133         $translator = $this->_getTranslator();
134         $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie');
135         $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie');
136         $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie');
137         $url = $this->url();
138         // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
139         $result = array();
140         foreach($galeries as $g) {
141             $result[] = array(
142                 "<strong>{$g->name}</strong><em>{$g->description}</em>",
143                 $g->username,
144                 $g->nb,
145                 sprintf(
146                     $action_template,
147                     $url->fromRoute('galerie/view', array('id' => $g->id)),
148                     $action_voir,
149                     $url->fromRoute('galerie/edit', array('id' => $g->id)),
150                     $action_editer,
151                     $url->fromRoute('galerie/del', array('id' => $g->id)),
152                     $action_supprimer
153                 ),
154             );
155         }
156
157         // Construction du resultat
158         return new JsonModel(array(
159             "sEcho" => $request->getQuery('sEcho', 1),
160             "iTotalRecords" => $modelManager->count_all(),
161             "iTotalDisplayRecords" => count($result),
162             "aaData" => $result,
163         ));
164     } 
165
166     public function editAction() 
167     {
168         // Création du formulaire
169         $form = $this->_getGalerieForm();
170
171         // Récupération de l'objet de travail
172         $id = $this->params()->fromRoute('id', null);
173         if (!$id) {
174             $galerie = null;
175         } else {
176             $galerie = $this->_getGalerieTable()->any(array('id' => $id));
177         }
178
179         // Sommes-nous en ajout ou en édition ?
180         if (!$galerie) {
181             // Nous sommes en ajout
182             $form->get('submit')->setValue('Ajouter');
183             // Il faut créer un nouveau objet Galerie
184             $galerie = new Galerie;
185             // Garder cette information pour la vue
186             $is_new = true;
187         } else {
188             // Nous sommes en modification
189             $form->get('submit')->setValue('Modifier');
190             // Il faut préremplir le formulaire avec les données actuelles
191             $form->bind($galerie);
192             // Garder cette information pour la vue
193             $is_new = false;
194         }
195
196         // Récupération de l'objet requête
197         $request = $this->getRequest();
198         if ($request->isPost()) {
199             // Mise en place pour la validation du formulaire
200             $form->setInputFilter($galerie->getInputFilter());
201             $form->setData($request->getPost());
202
203             // Validation des données
204             if ($form->isValid()) {
205                 // Sauvegarde des données
206                 $galerie = $form->getData();
207                 if ($is_new) {
208                     // Si l'objet n'est pas nouveau, les autres paramètres restent inchangés
209                     // Si l'objet est nouveau, il faut renseigner l'id de l'utilisateur courant
210                     $galerie->id_user = 1; //TODO: Mettre ici le user connecté
211                 }
212                 $this->_getGalerieTable()->save($galerie);
213
214                 $translator = $this->_getTranslator();
215                 $messenger = $this->flashMessenger();
216                 $messenger->setNamespace('infos');
217                 if ($is_new) {
218                     $messenger->addMessage($translator->translate('Galerie_added', 'galerie'));
219                 } else {
220                     $messenger->addMessage($translator->translate('Galerie_updated', 'galerie'));
221                 }
222                 // Redirection à l'ancienne mode
223                 //return $this->redirect()->toRoute('galerie');
224                 // Redirection vers le contrôleur courant
225                 //return $this->postRedirectGet();
226                 // Redirection vers la page Galerie/Index
227                 return $this->postRedirectGet('galerie');
228             }
229         }
230
231         // On prépare l'affichage du formulaire
232         if ($is_new) {
233             $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
234         } else {
235             $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
236         }
237         $form->prepare();
238
239         // On passe la main à la vue
240         return new ViewModel(array(
241             'id' => $id,
242             'form' => $form,
243             'is_new' => $is_new,
244         ));
245     } 
246
247     public function delAction() 
248     { 
249         return $this->redirect()->toRoute('galerie/view', array(
250             'id' => $this->params()->fromRoute('id', null),
251         ));
252     } 
253
254     public function viewAction() 
255     {
256         $id = $this->params()->fromRoute('id', null);
257         $galerie = $this->_getGalerieInfoTable()->any($id);
258         return new ViewModel(array(
259             'id' => $id,
260             'galerie' => $galerie,
261         ));
262     } 
263
264