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 Zend\Feed\Writer\FeedFactory;
16 use Galerie\Model\Galerie;
17 use Galerie\Graph\Test as TestPie;
19 class IndexController extends AbstractActionController
22 private $_galerieTable;
23 private $_galerieInfoTable;
24 private $_galerieForm;
25 private $_galerieInfoExporter;
26 private $_galerieMailSender;
27 private $_viewResolver;
28 private $_galeriePairTable;
35 private function _getGalerieTable()
37 if (!$this->_galerieTable) {
38 $sm = $this->getServiceLocator();
39 $this->_galerieTable = $sm->get('Galerie\Model\GalerieTable');
41 return $this->_galerieTable;
44 private function _getGalerieInfoTable()
46 if (!$this->_galerieInfoTable) {
47 $sm = $this->getServiceLocator();
48 $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoTable');
50 return $this->_galerieInfoTable;
53 private function _getGalerieInfoRssTable()
55 if (!$this->_galerieInfoTable) {
56 $sm = $this->getServiceLocator();
57 $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoRssTable');
59 return $this->_galerieInfoTable;
62 private function _getTranslator()
64 if (!$this->_translator) {
65 $sm = $this->getServiceLocator();
66 $this->_translator = $sm->get('translator');
68 return $this->_translator;
71 private function _getGalerieForm()
73 if (!$this->_galerieForm) {
74 $sm = $this->getServiceLocator();
75 $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm');
77 return $this->_galerieForm;
80 private function _getGalerieInfoExporter()
82 if (!$this->_galerieInfoExporter) {
83 $sm = $this->getServiceLocator();
84 $this->_galerieInfoExporter = $sm->get('Galerie\Export\GalerieWorkbook');
86 return $this->_galerieInfoExporter;
89 private function _getGalerieMailSender()
91 if (!$this->_galerieMailSender) {
92 $sm = $this->getServiceLocator();
93 $this->_galerieMailSender = $sm->get('Galerie\Mail\MailSender');
95 return $this->_galerieMailSender;
98 private function _getViewResolver()
100 if (!$this->_viewResolver) {
101 $sm = $this->getServiceLocator();
102 $this->_viewResolver = $sm->get('ViewResolver');
104 return $this->_viewResolver;
107 private function _getGaleriePairTable()
109 if (!$this->_galeriePairTable) {
110 $sm = $this->getServiceLocator();
111 $this->_galeriePairTable = $sm->get('Galerie\Model\GaleriePairTable');
113 return $this->_galeriePairTable;
116 private function _getLog()
119 $sm = $this->getServiceLocator();
120 $this->_log = $sm->get('Zend\Log');
125 private function _getRss()
128 $sm = $this->getServiceLocator();
129 $config = $sm->get('Config');
130 $this->_rss = FeedFactory::factory($config['rss']);
138 public function indexAction()
140 $this->_getLog()->info('Acces à la liste des galeries');
141 $session = new Container('test');
142 if ($session->offsetExists('last')) {
143 $last = $email = $session->offsetGet('last');
147 return new ViewModel(array('last' => $last));
150 public function rssAction() {
151 // Récupération des informations brutes
152 $modelManager = $this->_getGalerieInfoRssTable();
153 $datas = $modelManager->all();
155 // Création du fil RSS
156 $rss = $this->_getRss();
158 foreach($datas as $d) {
159 $entry = $rss->createEntry();
160 $entry->setTitle($d->name);
162 $entry->setLink($this->url()->fromRoute('galerie/view', array('id' => $d->id)));
163 $entry->addAuthor(array(
164 'name' => $d->username,
166 $date = new \DateTime();
167 $entry->setDateModified(
168 $date->setTimestamp(intval($d->updated))
170 $entry->setDateCreated(
171 $date->setTimestamp(intval($d->created))
173 $entry->setDescription($d->description);
174 $entry->setContent("{$d->nb} photos.");
175 $rss->addEntry($entry);
178 //echo '<pre>'; print_r($rss->export('rss')); die('</pre>');
180 // Création de la réponse
181 $response = $this->getResponse();
182 $response->setStatusCode(200);
184 // Modification des entêtes
185 $headers = $this->getResponse()->getHeaders();
186 $headers->addHeaderLine('Content-Type', 'application/rss+xml; charset=utf-8');
188 $response->setContent($rss->export('rss'));
193 public function csvAction() {
194 // Récupération des informations brutes
195 $modelManager = $this->_getGalerieInfoTable();
196 $datas = $modelManager->all();
198 // Mise en forme des résultats
199 $content = array($modelManager->csvHeader());
200 foreach($datas as $d) {
201 $content[] = $d->csvFormat();
204 // Création de la réponse
205 $response = $this->getResponse();
206 $response->setStatusCode(200);
208 // Modification des entêtes
209 $headers = $this->getResponse()->getHeaders();
210 $headers->addHeaderLine('Content-Type', 'text/csv; charset=utf-8');
211 $headers->addHeaderLine('Content-Disposition', 'attachment; filename="export_galerie.csv"');
213 $response->setContent(implode("\r\n", $content));
219 public function excelAction() {
220 // Récupération des informations brutes
221 $modelManager = $this->_getGalerieInfoTable();
222 $datas = $modelManager->all();
224 $exporter = $this->_getGalerieInfoExporter();
225 $exporter->build($datas);
227 // Renvoi d'une réponse vide pour désactiver le rendu de la vue
228 return $this->getResponse();
232 public function mailAction()
234 //Construction du courriel au format HTML.
235 $mail_viewmodel = new ViewModel(array(
238 $mail_viewmodel->setTemplate('galerie/mail/test');
239 $renderer = new PhpRenderer;
240 $renderer->setResolver($this->_getViewResolver());
241 $body_html = $renderer->render($mail_viewmodel);
244 $mailSender = $this->_getGalerieMailSender();
246 's.chazallet@gmail.com', 'Moi',//'sender@example.com', 'Moi',
247 's.chazallet@gmail.com', 'Toi',//'to@example.com', 'Toi',
248 'Test', 'Hello World 4.', $body_html
251 // Création de la réponse
252 $response = $this->getResponse();
253 $response->setStatusCode(200);
254 $response->setContent('Mail Sent.');
259 public function pieAction()
262 $modelManager = $this->_getGalerieInfoTable();
263 $datas = $modelManager->all();
265 // Mise en forme des résultats
268 foreach($datas as $d) {
273 // Construction (et envoi) du diagramme
274 $pie = new TestPie($nombres, $noms);
276 $response = $this->getResponse();
277 $response->setStatusCode(200);
278 $response->setContent('');
283 public function listAction()
285 // Récupération de l'objet requête
286 $request = $this->getRequest();
288 $start = $request->getQuery('iDisplayStart', 0);
289 $length = $request->getQuery('iDisplayLength', 10);
290 $tri = $request->getQuery('iSortCol_0');
291 $senstri = $request->getQuery('sSortDir_0', 'asc');
292 $filtre = $request->getQuery('sSearch');
294 // Preparation pour le requêtage
295 $modelManager = $this->_getGalerieInfoTable();
297 // Récupération des galeries sous la forme d'un tableau d'entités
298 $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
300 // Préparation pour la mise en forme du résultat
301 $action_template = '<a href="%s">%s</a><a href="%s">%s</a><a href="%s">%s</a>';
302 $translator = $this->_getTranslator();
303 $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie');
304 $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie');
305 $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie');
307 // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
309 foreach($galeries as $g) {
311 "<strong>{$g->name}</strong><em>{$g->description}</em>",
316 $url->fromRoute('galerie/view', array('id' => $g->id)),
318 $url->fromRoute('galerie/edit', array('id' => $g->id)),
320 $url->fromRoute('galerie/del', array('id' => $g->id)),
326 // Construction du resultat
327 return new JsonModel(array(
328 "sEcho" => $request->getQuery('sEcho', 1),
329 "iTotalRecords" => $modelManager->count_all(),
330 "iTotalDisplayRecords" => count($result),
335 public function editAction()
337 // Création du formulaire
338 $form = $this->_getGalerieForm();
340 // Récupération de l'objet de travail
341 $id = $this->params()->fromRoute('id', null);
345 $galerie = $this->_getGalerieTable()->any(array('id' => $id));
348 // Sommes-nous en ajout ou en édition ?
350 // Nous sommes en ajout
351 $form->get('submit')->setValue('Ajouter');
352 // Il faut créer un nouveau objet Galerie
353 $galerie = new Galerie;
354 // Garder cette information pour la vue
357 // Nous sommes en modification
358 $form->get('submit')->setValue('Modifier');
359 // Garder cette information pour la vue
364 // Il faut préremplir le formulaire avec les données actuelles
365 $form->bind($galerie);
367 // Récupération de l'objet requête
368 $request = $this->getRequest();
369 if ($request->isPost()) {
370 // Mise en place pour la validation du formulaire
371 $form->setInputFilter($galerie->getInputFilter());
372 $form->setData($request->getPost());
374 // Validation des données
375 if ($form->isValid()) {
376 // Sauvegarde des données
377 $galerie = $form->getData();
379 // Si l'objet n'est pas nouveau, les autres paramètres restent inchangés
380 // Si l'objet est nouveau, il faut renseigner l'id de l'utilisateur courant
381 $galerie->id_user = 1; //TODO: Mettre ici le user connecté
383 $this->_getGalerieTable()->save($galerie);
385 $translator = $this->_getTranslator();
386 $messenger = $this->flashMessenger();
387 $messenger->setNamespace('infos');
389 $messenger->addMessage($translator->translate('Galerie_added', 'galerie'));
391 $messenger->addMessage($translator->translate('Galerie_updated', 'galerie'));
393 // Redirection à l'ancienne mode
394 //return $this->redirect()->toRoute('galerie');
395 // Redirection vers le contrôleur courant
396 //return $this->postRedirectGet();
397 // Redirection vers la page Galerie/Index
398 return $this->postRedirectGet('galerie');
402 // On prépare l'affichage du formulaire
404 $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
406 $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
410 // On passe la main à la vue
411 return new ViewModel(array(
418 public function delAction()
420 return $this->redirect()->toRoute('galerie/view', array(
421 'id' => $this->params()->fromRoute('id', null),
425 public function viewAction()
427 $id = $this->params()->fromRoute('id', null);
428 $galerie = $this->_getGalerieInfoTable()->any($id);
430 $pairs = $this->_getGaleriePairTable()->all();
433 $session = new Container('test');
434 $session->offsetSet('last', $id);
436 return new ViewModel(array(
438 'galerie' => $galerie,