Exemple utilisation de la session
[zf2.biz/galerie.git] / module / Galerie / src / Galerie / Controller / IndexController.php
1 <?php
2
3 namespace Galerie\Controller; 
4
5
6 use Zend\Mvc\Controller\AbstractActionController; 
7 use Zend\View\Model\ViewModel;
8 use Zend\View\Model\JsonModel;
9
10 use Zend\View\Renderer\PhpRenderer;
11
12 use Zend\Session\Container;
13
14 use Galerie\Model\Galerie;
15 use Galerie\Graph\Test as TestPie;
16
17 class IndexController extends AbstractActionController 
18 {
19
20     private $_galerieTable;
21     private $_galerieInfoTable;
22     private $_galerieForm;
23     private $_galerieInfoExporter;
24     private $_galerieMailSender;
25     private $_viewResolver;
26     private $_galeriePairTable;
27
28     private $_translator;
29
30
31     private function _getGalerieTable()
32     {
33         if (!$this->_galerieTable) {
34             $sm = $this->getServiceLocator();
35             $this->_galerieTable = $sm->get('Galerie\Model\GalerieTable');
36         }
37         return $this->_galerieTable;
38     }
39
40     private function _getGalerieInfoTable()
41     {
42         if (!$this->_galerieInfoTable) {
43             $sm = $this->getServiceLocator();
44             $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoTable');
45         }
46         return $this->_galerieInfoTable;
47     }
48
49     private function _getTranslator()
50     {
51         if (!$this->_translator) {
52             $sm = $this->getServiceLocator();
53             $this->_translator = $sm->get('translator');
54         }
55         return $this->_translator;
56     }
57
58     private function _getGalerieForm()
59     {
60         if (!$this->_galerieForm) {
61             $sm = $this->getServiceLocator();
62             $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm');
63         }
64         return $this->_galerieForm;
65     }
66
67     private function _getGalerieInfoExporter()
68     {
69         if (!$this->_galerieInfoExporter) {
70             $sm = $this->getServiceLocator();
71             $this->_galerieInfoExporter = $sm->get('Galerie\Export\GalerieWorkbook');
72         }
73         return $this->_galerieInfoExporter;
74     }
75
76     private function _getGalerieMailSender()
77     {
78         if (!$this->_galerieMailSender) {
79             $sm = $this->getServiceLocator();
80             $this->_galerieMailSender = $sm->get('Galerie\Mail\MailSender');
81         }
82         return $this->_galerieMailSender;
83     }
84     
85     private function _getViewResolver()
86     {
87         if (!$this->_viewResolver) {
88             $sm = $this->getServiceLocator();
89             $this->_viewResolver = $sm->get('ViewResolver');
90         }
91         return $this->_viewResolver;
92     }
93
94     private function _getGaleriePairTable()
95     {
96         if (!$this->_galeriePairTable) {
97             $sm = $this->getServiceLocator();
98             $this->_galeriePairTable = $sm->get('Galerie\Model\GaleriePairTable');
99         }
100         return $this->_galeriePairTable;
101     }
102
103
104
105
106     public function indexAction() 
107     {
108         $session = new Container('test');
109         if ($session->offsetExists('last')) {
110             $last = $email = $session->offsetGet('last');
111         } else {
112             $last = null;
113         }
114         return new ViewModel(array('last' => $last));
115     } 
116
117     public function csvAction() {
118         // Récupération des informations brutes
119         $modelManager = $this->_getGalerieInfoTable();
120         $datas = $modelManager->all();
121
122         // Mise en forme des résultats
123         $content = array($modelManager->csvHeader());
124         foreach($datas as $d) {
125             $content[] = $d->csvFormat();
126         }
127
128         // Création de la réponse
129         $response = $this->getResponse();
130         $response->setStatusCode(200);
131
132         // Modification des entêtes
133         $headers = $this->getResponse()->getHeaders();
134         $headers->addHeaderLine('Content-Type', 'text/csv; charset=utf-8');
135         $headers->addHeaderLine('Content-Disposition', 'attachment; filename="export_galerie.csv"');
136
137         $response->setContent(implode("\r\n", $content));
138
139         return $response;
140     }
141
142
143     public function excelAction() {
144         // Récupération des informations brutes
145         $modelManager = $this->_getGalerieInfoTable();
146         $datas = $modelManager->all();
147
148         $exporter = $this->_getGalerieInfoExporter();
149         $exporter->build($datas);
150
151         // Renvoi d'une réponse vide pour désactiver le rendu de la vue
152         return $this->getResponse();
153     }
154
155
156     public function mailAction()
157     {
158         //Construction du courriel au format HTML.
159         $mail_viewmodel = new ViewModel(array(
160             'who' => 'World',
161         ));
162         $mail_viewmodel->setTemplate('galerie/mail/test');
163         $renderer = new PhpRenderer;
164         $renderer->setResolver($this->_getViewResolver());
165         $body_html = $renderer->render($mail_viewmodel);
166
167         // Envoi du courriel
168         $mailSender = $this->_getGalerieMailSender();
169         $mailSender->send(
170             's.chazallet@gmail.com', 'Moi',//'sender@example.com', 'Moi',
171             's.chazallet@gmail.com', 'Toi',//'to@example.com', 'Toi',
172             'Test', 'Hello World 4.', $body_html
173         );
174
175         // Création de la réponse
176         $response = $this->getResponse();
177         $response->setStatusCode(200);
178         $response->setContent('Mail Sent.');
179
180         return $response;
181     }
182
183     public function pieAction()
184     {
185         // Accès aux modèles
186         $modelManager = $this->_getGalerieInfoTable();
187         $datas = $modelManager->all();
188
189         // Mise en forme des résultats
190         $nombres = array();
191         $noms = array();
192         foreach($datas as $d) {
193             $nombres[] = $d->nb;
194             $noms[] = $d->name;
195         }
196
197         // Construction (et envoi) du diagramme
198         $pie = new TestPie($nombres, $noms);
199
200         $response = $this->getResponse();
201         $response->setStatusCode(200);
202         $response->setContent('');
203
204         return $response;
205     }
206
207     public function listAction() 
208     { 
209         // Récupération de l'objet requête
210         $request = $this->getRequest();
211
212         $start = $request->getQuery('iDisplayStart', 0);
213         $length = $request->getQuery('iDisplayLength', 10);
214         $tri = $request->getQuery('iSortCol_0');
215         $senstri = $request->getQuery('sSortDir_0', 'asc');
216         $filtre = $request->getQuery('sSearch');
217
218         // Preparation pour le requêtage
219         $modelManager = $this->_getGalerieInfoTable();
220
221         // Récupération des galeries sous la forme d'un tableau d'entités
222         $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
223
224         // Préparation pour la mise en forme du résultat
225         $action_template = '<a href="%s">%s</a><a href="%s">%s</a><a href="%s">%s</a>';
226         $translator = $this->_getTranslator();
227         $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie');
228         $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie');
229         $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie');
230         $url = $this->url();
231         // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
232         $result = array();
233         foreach($galeries as $g) {
234             $result[] = array(
235                 "<strong>{$g->name}</strong><em>{$g->description}</em>",
236                 $g->username,
237                 $g->nb,
238                 sprintf(
239                     $action_template,
240                     $url->fromRoute('galerie/view', array('id' => $g->id)),
241                     $action_voir,
242                     $url->fromRoute('galerie/edit', array('id' => $g->id)),
243                     $action_editer,
244                     $url->fromRoute('galerie/del', array('id' => $g->id)),
245                     $action_supprimer
246                 ),
247             );
248         }
249
250         // Construction du resultat
251         return new JsonModel(array(
252             "sEcho" => $request->getQuery('sEcho', 1),
253             "iTotalRecords" => $modelManager->count_all(),
254             "iTotalDisplayRecords" => count($result),
255             "aaData" => $result,
256         ));
257     } 
258
259     public function editAction() 
260     {
261         // Création du formulaire
262         $form = $this->_getGalerieForm();
263
264         // Récupération de l'objet de travail
265         $id = $this->params()->fromRoute('id', null);
266         if (!$id) {
267             $galerie = null;
268         } else {
269             $galerie = $this->_getGalerieTable()->any(array('id' => $id));
270         }
271
272         // Sommes-nous en ajout ou en édition ?
273         if (!$galerie) {
274             // Nous sommes en ajout
275             $form->get('submit')->setValue('Ajouter');
276             // Il faut créer un nouveau objet Galerie
277             $galerie = new Galerie;
278             // Garder cette information pour la vue
279             $is_new = true;
280         } else {
281             // Nous sommes en modification
282             $form->get('submit')->setValue('Modifier');
283             // Garder cette information pour la vue
284             $is_new = false;
285         }
286
287
288             // Il faut préremplir le formulaire avec les données actuelles
289             $form->bind($galerie);
290
291         // Récupération de l'objet requête
292         $request = $this->getRequest();
293         if ($request->isPost()) {
294             // Mise en place pour la validation du formulaire
295             $form->setInputFilter($galerie->getInputFilter());
296             $form->setData($request->getPost());
297
298             // Validation des données
299             if ($form->isValid()) {
300                 // Sauvegarde des données
301                 $galerie = $form->getData();
302                 if ($is_new) {
303                     // Si l'objet n'est pas nouveau, les autres paramètres restent inchangés
304                     // Si l'objet est nouveau, il faut renseigner l'id de l'utilisateur courant
305                     $galerie->id_user = 1; //TODO: Mettre ici le user connecté
306                 }
307                 $this->_getGalerieTable()->save($galerie);
308
309                 $translator = $this->_getTranslator();
310                 $messenger = $this->flashMessenger();
311                 $messenger->setNamespace('infos');
312                 if ($is_new) {
313                     $messenger->addMessage($translator->translate('Galerie_added', 'galerie'));
314                 } else {
315                     $messenger->addMessage($translator->translate('Galerie_updated', 'galerie'));
316                 }
317                 // Redirection à l'ancienne mode
318                 //return $this->redirect()->toRoute('galerie');
319                 // Redirection vers le contrôleur courant
320                 //return $this->postRedirectGet();
321                 // Redirection vers la page Galerie/Index
322                 return $this->postRedirectGet('galerie');
323             }
324         }
325
326         // On prépare l'affichage du formulaire
327         if ($is_new) {
328             $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
329         } else {
330             $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
331         }
332         $form->prepare();
333
334         // On passe la main à la vue
335         return new ViewModel(array(
336             'id' => $id,
337             'form' => $form,
338             'is_new' => $is_new,
339         ));
340     } 
341
342     public function delAction() 
343     { 
344         return $this->redirect()->toRoute('galerie/view', array(
345             'id' => $this->params()->fromRoute('id', null),
346         ));
347     } 
348
349     public function viewAction() 
350     {
351         $id = $this->params()->fromRoute('id', null);
352         $galerie = $this->_getGalerieInfoTable()->any($id);
353
354         $pairs = $this->_getGaleriePairTable()->all();
355         unset($pairs[$id]);
356
357         $session = new Container('test');
358         $session->offsetSet('last', $id);
359
360         return new ViewModel(array(
361             'id' => $id,
362             'galerie' => $galerie,
363             'pairs' => $pairs,
364         ));
365     } 
366
367