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