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