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