3 namespace Galerie\Controller;
6 use Zend\Mvc\Controller\AbstractActionController;
7 use Zend\View\Model\ViewModel;
8 use Zend\View\Model\JsonModel;
10 use Zend\View\Renderer\PhpRenderer;
13 use Galerie\Model\Galerie;
14 use Galerie\Graph\Test as TestPie;
16 class IndexController extends AbstractActionController
19 private $_galerieTable;
20 private $_galerieInfoTable;
21 private $_galerieForm;
22 private $_galerieInfoExporter;
23 private $_galerieMailSender;
24 private $_viewResolver;
25 private $_galeriePairTable;
30 private function _getGalerieTable()
32 if (!$this->_galerieTable) {
33 $sm = $this->getServiceLocator();
34 $this->_galerieTable = $sm->get('Galerie\Model\GalerieTable');
36 return $this->_galerieTable;
39 private function _getGalerieInfoTable()
41 if (!$this->_galerieInfoTable) {
42 $sm = $this->getServiceLocator();
43 $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoTable');
45 return $this->_galerieInfoTable;
48 private function _getTranslator()
50 if (!$this->_translator) {
51 $sm = $this->getServiceLocator();
52 $this->_translator = $sm->get('translator');
54 return $this->_translator;
57 private function _getGalerieForm()
59 if (!$this->_galerieForm) {
60 $sm = $this->getServiceLocator();
61 $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm');
63 return $this->_galerieForm;
66 private function _getGalerieInfoExporter()
68 if (!$this->_galerieInfoExporter) {
69 $sm = $this->getServiceLocator();
70 $this->_galerieInfoExporter = $sm->get('Galerie\Export\GalerieWorkbook');
72 return $this->_galerieInfoExporter;
75 private function _getGalerieMailSender()
77 if (!$this->_galerieMailSender) {
78 $sm = $this->getServiceLocator();
79 $this->_galerieMailSender = $sm->get('Galerie\Mail\MailSender');
81 return $this->_galerieMailSender;
84 private function _getViewResolver()
86 if (!$this->_viewResolver) {
87 $sm = $this->getServiceLocator();
88 $this->_viewResolver = $sm->get('ViewResolver');
90 return $this->_viewResolver;
93 private function _getGaleriePairTable()
95 if (!$this->_galeriePairTable) {
96 $sm = $this->getServiceLocator();
97 $this->_galeriePairTable = $sm->get('Galerie\Model\GaleriePairTable');
99 return $this->_galeriePairTable;
105 public function indexAction()
107 return new ViewModel($this->MessageGetter());
110 public function csvAction() {
111 // Récupération des informations brutes
112 $modelManager = $this->_getGalerieInfoTable();
113 $datas = $modelManager->all();
115 // Mise en forme des résultats
116 $content = array($modelManager->csvHeader());
117 foreach($datas as $d) {
118 $content[] = $d->csvFormat();
121 // Création de la réponse
122 $response = $this->getResponse();
123 $response->setStatusCode(200);
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"');
130 $response->setContent(implode("\r\n", $content));
136 public function excelAction() {
137 // Récupération des informations brutes
138 $modelManager = $this->_getGalerieInfoTable();
139 $datas = $modelManager->all();
141 $exporter = $this->_getGalerieInfoExporter();
142 $exporter->build($datas);
144 // Renvoi d'une réponse vide pour désactiver le rendu de la vue
145 return $this->getResponse();
149 public function mailAction()
151 //Construction du courriel au format HTML.
152 $mail_viewmodel = new ViewModel(array(
155 $mail_viewmodel->setTemplate('galerie/mail/test');
156 $renderer = new PhpRenderer;
157 $renderer->setResolver($this->_getViewResolver());
158 $body_html = $renderer->render($mail_viewmodel);
161 $mailSender = $this->_getGalerieMailSender();
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
168 // Création de la réponse
169 $response = $this->getResponse();
170 $response->setStatusCode(200);
171 $response->setContent('Mail Sent.');
176 public function pieAction()
179 $modelManager = $this->_getGalerieInfoTable();
180 $datas = $modelManager->all();
182 // Mise en forme des résultats
185 foreach($datas as $d) {
190 // Construction (et envoi) du diagramme
191 $pie = new TestPie($nombres, $noms);
193 $response = $this->getResponse();
194 $response->setStatusCode(200);
195 $response->setContent('');
200 public function listAction()
202 // Récupération de l'objet requête
203 $request = $this->getRequest();
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');
211 // Preparation pour le requêtage
212 $modelManager = $this->_getGalerieInfoTable();
214 // Récupération des galeries sous la forme d'un tableau d'entités
215 $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
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');
224 // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
226 foreach($galeries as $g) {
228 "<strong>{$g->name}</strong><em>{$g->description}</em>",
233 $url->fromRoute('galerie/view', array('id' => $g->id)),
235 $url->fromRoute('galerie/edit', array('id' => $g->id)),
237 $url->fromRoute('galerie/del', array('id' => $g->id)),
243 // Construction du resultat
244 return new JsonModel(array(
245 "sEcho" => $request->getQuery('sEcho', 1),
246 "iTotalRecords" => $modelManager->count_all(),
247 "iTotalDisplayRecords" => count($result),
252 public function editAction()
254 // Création du formulaire
255 $form = $this->_getGalerieForm();
257 // Récupération de l'objet de travail
258 $id = $this->params()->fromRoute('id', null);
262 $galerie = $this->_getGalerieTable()->any(array('id' => $id));
265 // Sommes-nous en ajout ou en édition ?
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
274 // Nous sommes en modification
275 $form->get('submit')->setValue('Modifier');
276 // Garder cette information pour la vue
281 // Il faut préremplir le formulaire avec les données actuelles
282 $form->bind($galerie);
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());
291 // Validation des données
292 if ($form->isValid()) {
293 // Sauvegarde des données
294 $galerie = $form->getData();
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é
300 $this->_getGalerieTable()->save($galerie);
302 $translator = $this->_getTranslator();
303 $messenger = $this->flashMessenger();
304 $messenger->setNamespace('infos');
306 $messenger->addMessage($translator->translate('Galerie_added', 'galerie'));
308 $messenger->addMessage($translator->translate('Galerie_updated', 'galerie'));
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');
319 // On prépare l'affichage du formulaire
321 $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
323 $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
327 // On passe la main à la vue
328 return new ViewModel(array(
335 public function delAction()
337 return $this->redirect()->toRoute('galerie/view', array(
338 'id' => $this->params()->fromRoute('id', null),
342 public function viewAction()
344 $id = $this->params()->fromRoute('id', null);
345 $galerie = $this->_getGalerieInfoTable()->any($id);
347 $pairs = $this->_getGaleriePairTable()->all();
350 return new ViewModel(array(
352 'galerie' => $galerie,