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;
29 private function _getGalerieTable()
31 if (!$this->_galerieTable) {
32 $sm = $this->getServiceLocator();
33 $this->_galerieTable = $sm->get('Galerie\Model\GalerieTable');
35 return $this->_galerieTable;
38 private function _getGalerieInfoTable()
40 if (!$this->_galerieInfoTable) {
41 $sm = $this->getServiceLocator();
42 $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoTable');
44 return $this->_galerieInfoTable;
47 private function _getTranslator()
49 if (!$this->_translator) {
50 $sm = $this->getServiceLocator();
51 $this->_translator = $sm->get('translator');
53 return $this->_translator;
56 private function _getGalerieForm()
58 if (!$this->_galerieForm) {
59 $sm = $this->getServiceLocator();
60 $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm');
62 return $this->_galerieForm;
65 private function _getGalerieInfoExporter()
67 if (!$this->_galerieInfoExporter) {
68 $sm = $this->getServiceLocator();
69 $this->_galerieInfoExporter = $sm->get('Galerie\Export\GalerieWorkbook');
71 return $this->_galerieInfoExporter;
74 private function _getGalerieMailSender()
76 if (!$this->_galerieMailSender) {
77 $sm = $this->getServiceLocator();
78 $this->_galerieMailSender = $sm->get('Galerie\Mail\MailSender');
80 return $this->_galerieMailSender;
83 private function _getViewResolver()
85 if (!$this->_viewResolver) {
86 $sm = $this->getServiceLocator();
87 $this->_viewResolver = $sm->get('ViewResolver');
89 return $this->_viewResolver;
95 public function indexAction()
97 return new ViewModel($this->MessageGetter());
100 public function csvAction() {
101 // Récupération des informations brutes
102 $modelManager = $this->_getGalerieInfoTable();
103 $datas = $modelManager->all();
105 // Mise en forme des résultats
106 $content = array($modelManager->csvHeader());
107 foreach($datas as $d) {
108 $content[] = $d->csvFormat();
111 // Création de la réponse
112 $response = $this->getResponse();
113 $response->setStatusCode(200);
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"');
120 $response->setContent(implode("\r\n", $content));
126 public function excelAction() {
127 // Récupération des informations brutes
128 $modelManager = $this->_getGalerieInfoTable();
129 $datas = $modelManager->all();
131 $exporter = $this->_getGalerieInfoExporter();
132 $exporter->build($datas);
134 // Renvoi d'une réponse vide pour désactiver le rendu de la vue
135 return $this->getResponse();
139 public function mailAction()
141 //Construction du courriel au format HTML.
142 $mail_viewmodel = new ViewModel(array(
145 $mail_viewmodel->setTemplate('galerie/mail/test');
146 $renderer = new PhpRenderer;
147 $renderer->setResolver($this->_getViewResolver());
148 $body_html = $renderer->render($mail_viewmodel);
151 $mailSender = $this->_getGalerieMailSender();
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
158 // Création de la réponse
159 $response = $this->getResponse();
160 $response->setStatusCode(200);
161 $response->setContent('Mail Sent.');
166 public function pieAction()
169 $modelManager = $this->_getGalerieInfoTable();
170 $datas = $modelManager->all();
172 // Mise en forme des résultats
175 foreach($datas as $d) {
180 // Construction (et envoi) du diagramme
181 $pie = new TestPie($nombres, $noms);
183 $response = $this->getResponse();
184 $response->setStatusCode(200);
185 $response->setContent('');
190 public function listAction()
192 // Récupération de l'objet requête
193 $request = $this->getRequest();
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');
201 // Preparation pour le requêtage
202 $modelManager = $this->_getGalerieInfoTable();
204 // Récupération des galeries sous la forme d'un tableau d'entités
205 $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
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');
214 // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
216 foreach($galeries as $g) {
218 "<strong>{$g->name}</strong><em>{$g->description}</em>",
223 $url->fromRoute('galerie/view', array('id' => $g->id)),
225 $url->fromRoute('galerie/edit', array('id' => $g->id)),
227 $url->fromRoute('galerie/del', array('id' => $g->id)),
233 // Construction du resultat
234 return new JsonModel(array(
235 "sEcho" => $request->getQuery('sEcho', 1),
236 "iTotalRecords" => $modelManager->count_all(),
237 "iTotalDisplayRecords" => count($result),
242 public function editAction()
244 // Création du formulaire
245 $form = $this->_getGalerieForm();
247 // Récupération de l'objet de travail
248 $id = $this->params()->fromRoute('id', null);
252 $galerie = $this->_getGalerieTable()->any(array('id' => $id));
255 // Sommes-nous en ajout ou en édition ?
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
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
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());
279 // Validation des données
280 if ($form->isValid()) {
281 // Sauvegarde des données
282 $galerie = $form->getData();
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é
288 $this->_getGalerieTable()->save($galerie);
290 $translator = $this->_getTranslator();
291 $messenger = $this->flashMessenger();
292 $messenger->setNamespace('infos');
294 $messenger->addMessage($translator->translate('Galerie_added', 'galerie'));
296 $messenger->addMessage($translator->translate('Galerie_updated', 'galerie'));
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');
307 // On prépare l'affichage du formulaire
309 $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
311 $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
315 // On passe la main à la vue
316 return new ViewModel(array(
323 public function delAction()
325 return $this->redirect()->toRoute('galerie/view', array(
326 'id' => $this->params()->fromRoute('id', null),
330 public function viewAction()
332 $id = $this->params()->fromRoute('id', null);
333 $galerie = $this->_getGalerieInfoTable()->any($id);
334 return new ViewModel(array(
336 'galerie' => $galerie,