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;
12 use Zend\Session\Container;
14 use Galerie\Model\Galerie;
15 use Galerie\Graph\Test as TestPie;
17 class IndexController extends AbstractActionController
20 private $_galerieTable;
21 private $_galerieInfoTable;
22 private $_galerieForm;
23 private $_galerieInfoExporter;
24 private $_galerieMailSender;
25 private $_viewResolver;
26 private $_galeriePairTable;
32 private function _getGalerieTable()
34 if (!$this->_galerieTable) {
35 $sm = $this->getServiceLocator();
36 $this->_galerieTable = $sm->get('Galerie\Model\GalerieTable');
38 return $this->_galerieTable;
41 private function _getGalerieInfoTable()
43 if (!$this->_galerieInfoTable) {
44 $sm = $this->getServiceLocator();
45 $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoTable');
47 return $this->_galerieInfoTable;
50 private function _getTranslator()
52 if (!$this->_translator) {
53 $sm = $this->getServiceLocator();
54 $this->_translator = $sm->get('translator');
56 return $this->_translator;
59 private function _getGalerieForm()
61 if (!$this->_galerieForm) {
62 $sm = $this->getServiceLocator();
63 $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm');
65 return $this->_galerieForm;
68 private function _getGalerieInfoExporter()
70 if (!$this->_galerieInfoExporter) {
71 $sm = $this->getServiceLocator();
72 $this->_galerieInfoExporter = $sm->get('Galerie\Export\GalerieWorkbook');
74 return $this->_galerieInfoExporter;
77 private function _getGalerieMailSender()
79 if (!$this->_galerieMailSender) {
80 $sm = $this->getServiceLocator();
81 $this->_galerieMailSender = $sm->get('Galerie\Mail\MailSender');
83 return $this->_galerieMailSender;
86 private function _getViewResolver()
88 if (!$this->_viewResolver) {
89 $sm = $this->getServiceLocator();
90 $this->_viewResolver = $sm->get('ViewResolver');
92 return $this->_viewResolver;
95 private function _getGaleriePairTable()
97 if (!$this->_galeriePairTable) {
98 $sm = $this->getServiceLocator();
99 $this->_galeriePairTable = $sm->get('Galerie\Model\GaleriePairTable');
101 return $this->_galeriePairTable;
104 private function _getLog()
107 $sm = $this->getServiceLocator();
108 $this->_log = $sm->get('Zend\Log');
116 public function indexAction()
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');
125 return new ViewModel(array('last' => $last));
128 public function csvAction() {
129 // Récupération des informations brutes
130 $modelManager = $this->_getGalerieInfoTable();
131 $datas = $modelManager->all();
133 // Mise en forme des résultats
134 $content = array($modelManager->csvHeader());
135 foreach($datas as $d) {
136 $content[] = $d->csvFormat();
139 // Création de la réponse
140 $response = $this->getResponse();
141 $response->setStatusCode(200);
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"');
148 $response->setContent(implode("\r\n", $content));
154 public function excelAction() {
155 // Récupération des informations brutes
156 $modelManager = $this->_getGalerieInfoTable();
157 $datas = $modelManager->all();
159 $exporter = $this->_getGalerieInfoExporter();
160 $exporter->build($datas);
162 // Renvoi d'une réponse vide pour désactiver le rendu de la vue
163 return $this->getResponse();
167 public function mailAction()
169 //Construction du courriel au format HTML.
170 $mail_viewmodel = new ViewModel(array(
173 $mail_viewmodel->setTemplate('galerie/mail/test');
174 $renderer = new PhpRenderer;
175 $renderer->setResolver($this->_getViewResolver());
176 $body_html = $renderer->render($mail_viewmodel);
179 $mailSender = $this->_getGalerieMailSender();
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
186 // Création de la réponse
187 $response = $this->getResponse();
188 $response->setStatusCode(200);
189 $response->setContent('Mail Sent.');
194 public function pieAction()
197 $modelManager = $this->_getGalerieInfoTable();
198 $datas = $modelManager->all();
200 // Mise en forme des résultats
203 foreach($datas as $d) {
208 // Construction (et envoi) du diagramme
209 $pie = new TestPie($nombres, $noms);
211 $response = $this->getResponse();
212 $response->setStatusCode(200);
213 $response->setContent('');
218 public function listAction()
220 // Récupération de l'objet requête
221 $request = $this->getRequest();
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');
229 // Preparation pour le requêtage
230 $modelManager = $this->_getGalerieInfoTable();
232 // Récupération des galeries sous la forme d'un tableau d'entités
233 $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
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');
242 // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
244 foreach($galeries as $g) {
246 "<strong>{$g->name}</strong><em>{$g->description}</em>",
251 $url->fromRoute('galerie/view', array('id' => $g->id)),
253 $url->fromRoute('galerie/edit', array('id' => $g->id)),
255 $url->fromRoute('galerie/del', array('id' => $g->id)),
261 // Construction du resultat
262 return new JsonModel(array(
263 "sEcho" => $request->getQuery('sEcho', 1),
264 "iTotalRecords" => $modelManager->count_all(),
265 "iTotalDisplayRecords" => count($result),
270 public function editAction()
272 // Création du formulaire
273 $form = $this->_getGalerieForm();
275 // Récupération de l'objet de travail
276 $id = $this->params()->fromRoute('id', null);
280 $galerie = $this->_getGalerieTable()->any(array('id' => $id));
283 // Sommes-nous en ajout ou en édition ?
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
292 // Nous sommes en modification
293 $form->get('submit')->setValue('Modifier');
294 // Garder cette information pour la vue
299 // Il faut préremplir le formulaire avec les données actuelles
300 $form->bind($galerie);
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());
309 // Validation des données
310 if ($form->isValid()) {
311 // Sauvegarde des données
312 $galerie = $form->getData();
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é
318 $this->_getGalerieTable()->save($galerie);
320 $translator = $this->_getTranslator();
321 $messenger = $this->flashMessenger();
322 $messenger->setNamespace('infos');
324 $messenger->addMessage($translator->translate('Galerie_added', 'galerie'));
326 $messenger->addMessage($translator->translate('Galerie_updated', 'galerie'));
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');
337 // On prépare l'affichage du formulaire
339 $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
341 $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
345 // On passe la main à la vue
346 return new ViewModel(array(
353 public function delAction()
355 return $this->redirect()->toRoute('galerie/view', array(
356 'id' => $this->params()->fromRoute('id', null),
360 public function viewAction()
362 $id = $this->params()->fromRoute('id', null);
363 $galerie = $this->_getGalerieInfoTable()->any($id);
365 $pairs = $this->_getGaleriePairTable()->all();
368 $session = new Container('test');
369 $session->offsetSet('last', $id);
371 return new ViewModel(array(
373 'galerie' => $galerie,