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