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;
15 use Zend\Feed\Reader\Reader as FeedReader;
17 use Galerie\Model\Galerie;
18 use Galerie\Graph\Test as TestPie;
20 class IndexController extends AbstractActionController
23 private $_galerieTable;
24 private $_galerieInfoTable;
25 private $_galerieForm;
26 private $_galerieInfoExporter;
27 private $_galerieMailSender;
28 private $_viewResolver;
29 private $_galeriePairTable;
36 private function _getGalerieTable()
38 if (!$this->_galerieTable) {
39 $sm = $this->getServiceLocator();
40 $this->_galerieTable = $sm->get('Galerie\Model\GalerieTable');
42 return $this->_galerieTable;
45 private function _getGalerieInfoTable()
47 if (!$this->_galerieInfoTable) {
48 $sm = $this->getServiceLocator();
49 $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoTable');
51 return $this->_galerieInfoTable;
54 private function _getGalerieInfoRssTable()
56 if (!$this->_galerieInfoTable) {
57 $sm = $this->getServiceLocator();
58 $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoRssTable');
60 return $this->_galerieInfoTable;
63 private function _getTranslator()
65 if (!$this->_translator) {
66 $sm = $this->getServiceLocator();
67 $this->_translator = $sm->get('translator');
69 return $this->_translator;
72 private function _getGalerieForm()
74 if (!$this->_galerieForm) {
75 $sm = $this->getServiceLocator();
76 $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm');
78 return $this->_galerieForm;
81 private function _getGalerieInfoExporter()
83 if (!$this->_galerieInfoExporter) {
84 $sm = $this->getServiceLocator();
85 $this->_galerieInfoExporter = $sm->get('Galerie\Export\GalerieWorkbook');
87 return $this->_galerieInfoExporter;
90 private function _getGalerieMailSender()
92 if (!$this->_galerieMailSender) {
93 $sm = $this->getServiceLocator();
94 $this->_galerieMailSender = $sm->get('Galerie\Mail\MailSender');
96 return $this->_galerieMailSender;
99 private function _getViewResolver()
101 if (!$this->_viewResolver) {
102 $sm = $this->getServiceLocator();
103 $this->_viewResolver = $sm->get('ViewResolver');
105 return $this->_viewResolver;
108 private function _getGaleriePairTable()
110 if (!$this->_galeriePairTable) {
111 $sm = $this->getServiceLocator();
112 $this->_galeriePairTable = $sm->get('Galerie\Model\GaleriePairTable');
114 return $this->_galeriePairTable;
117 private function _getLog()
120 $sm = $this->getServiceLocator();
121 $this->_log = $sm->get('Zend\Log');
126 private function _getRss()
129 $sm = $this->getServiceLocator();
130 $config = $sm->get('Config');
131 $this->_rss = FeedFactory::factory($config['rss']);
139 public function indexAction()
141 $this->_getLog()->info('Acces à la liste des galeries');
142 $session = new Container('test');
143 if ($session->offsetExists('last')) {
144 $last = $email = $session->offsetGet('last');
148 return new ViewModel(array('last' => $last));
151 public function rssAction() {
152 // Récupération des informations brutes
153 $modelManager = $this->_getGalerieInfoRssTable();
154 $datas = $modelManager->all();
156 // Création du fil RSS
157 $rss = $this->_getRss();
159 foreach($datas as $d) {
160 $entry = $rss->createEntry();
161 $entry->setTitle($d->name);
163 $entry->setLink($this->url()->fromRoute(
165 array('id' => $d->id))
166 array('force_canonical' => true)
169 $entry->addAuthor(array(
170 'name' => $d->username,
172 $date = new \DateTime();
173 $entry->setDateModified(
174 $date->setTimestamp(intval($d->updated))
176 $entry->setDateCreated(
177 $date->setTimestamp(intval($d->created))
179 $entry->setDescription($d->description);
180 $entry->setContent("{$d->nb} photos.");
181 $rss->addEntry($entry);
184 //echo '<pre>'; print_r($rss->export('rss')); die('</pre>');
186 // Création de la réponse
187 $response = $this->getResponse();
188 $response->setStatusCode(200);
190 // Modification des entêtes
191 $headers = $this->getResponse()->getHeaders();
192 $headers->addHeaderLine('Content-Type', 'application/rss+xml; charset=utf-8');
194 $response->setContent($rss->export('rss'));
199 public function csvAction() {
200 // Récupération des informations brutes
201 $modelManager = $this->_getGalerieInfoTable();
202 $datas = $modelManager->all();
204 // Mise en forme des résultats
205 $content = array($modelManager->csvHeader());
206 foreach($datas as $d) {
207 $content[] = $d->csvFormat();
210 // Création de la réponse
211 $response = $this->getResponse();
212 $response->setStatusCode(200);
214 // Modification des entêtes
215 $headers = $this->getResponse()->getHeaders();
216 $headers->addHeaderLine('Content-Type', 'text/csv; charset=utf-8');
217 $headers->addHeaderLine('Content-Disposition', 'attachment; filename="export_galerie.csv"');
219 $response->setContent(implode("\r\n", $content));
224 public function rsscheckAction()
226 $url = $this->url()->fromRoute('galerie/rss', array(), array('force_canonical' => true));
227 $channel = FeedReader::import($url);
228 $title = $channel->getTitle();
229 $author = $channel->getAuthor();
230 $username = $author['name'];
232 foreach ($channel as $item) {
233 $galeries[] = "{$item->getTitle()} : {$item->getDescription()}";
236 return new ViewModel(array(
238 'username' => $username,
239 'galeries' => $galeries,
244 public function excelAction() {
245 // Récupération des informations brutes
246 $modelManager = $this->_getGalerieInfoTable();
247 $datas = $modelManager->all();
249 $exporter = $this->_getGalerieInfoExporter();
250 $exporter->build($datas);
252 // Renvoi d'une réponse vide pour désactiver le rendu de la vue
253 return $this->getResponse();
257 public function mailAction()
259 //Construction du courriel au format HTML.
260 $mail_viewmodel = new ViewModel(array(
263 $mail_viewmodel->setTemplate('galerie/mail/test');
264 $renderer = new PhpRenderer;
265 $renderer->setResolver($this->_getViewResolver());
266 $body_html = $renderer->render($mail_viewmodel);
269 $mailSender = $this->_getGalerieMailSender();
271 's.chazallet@gmail.com', 'Moi',//'sender@example.com', 'Moi',
272 's.chazallet@gmail.com', 'Toi',//'to@example.com', 'Toi',
273 'Test', 'Hello World 4.', $body_html
276 // Création de la réponse
277 $response = $this->getResponse();
278 $response->setStatusCode(200);
279 $response->setContent('Mail Sent.');
284 public function pieAction()
287 $modelManager = $this->_getGalerieInfoTable();
288 $datas = $modelManager->all();
290 // Mise en forme des résultats
293 foreach($datas as $d) {
298 // Construction (et envoi) du diagramme
299 $pie = new TestPie($nombres, $noms);
301 $response = $this->getResponse();
302 $response->setStatusCode(200);
303 $response->setContent('');
308 public function listAction()
310 // Récupération de l'objet requête
311 $request = $this->getRequest();
313 $start = $request->getQuery('iDisplayStart', 0);
314 $length = $request->getQuery('iDisplayLength', 10);
315 $tri = $request->getQuery('iSortCol_0');
316 $senstri = $request->getQuery('sSortDir_0', 'asc');
317 $filtre = $request->getQuery('sSearch');
319 // Preparation pour le requêtage
320 $modelManager = $this->_getGalerieInfoTable();
322 // Récupération des galeries sous la forme d'un tableau d'entités
323 $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
325 // Préparation pour la mise en forme du résultat
326 $action_template = '<a href="%s">%s</a><a href="%s">%s</a><a href="%s">%s</a>';
327 $translator = $this->_getTranslator();
328 $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie');
329 $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie');
330 $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie');
332 // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
334 foreach($galeries as $g) {
336 "<strong>{$g->name}</strong><em>{$g->description}</em>",
341 $url->fromRoute('galerie/view', array('id' => $g->id)),
343 $url->fromRoute('galerie/edit', array('id' => $g->id)),
345 $url->fromRoute('galerie/del', array('id' => $g->id)),
351 // Construction du resultat
352 return new JsonModel(array(
353 "sEcho" => $request->getQuery('sEcho', 1),
354 "iTotalRecords" => $modelManager->count_all(),
355 "iTotalDisplayRecords" => count($result),
360 public function editAction()
362 // Création du formulaire
363 $form = $this->_getGalerieForm();
365 // Récupération de l'objet de travail
366 $id = $this->params()->fromRoute('id', null);
370 $galerie = $this->_getGalerieTable()->any(array('id' => $id));
373 // Sommes-nous en ajout ou en édition ?
375 // Nous sommes en ajout
376 $form->get('submit')->setValue('Ajouter');
377 // Il faut créer un nouveau objet Galerie
378 $galerie = new Galerie;
379 // Garder cette information pour la vue
382 // Nous sommes en modification
383 $form->get('submit')->setValue('Modifier');
384 // Garder cette information pour la vue
389 // Il faut préremplir le formulaire avec les données actuelles
390 $form->bind($galerie);
392 // Récupération de l'objet requête
393 $request = $this->getRequest();
394 if ($request->isPost()) {
395 // Mise en place pour la validation du formulaire
396 $form->setInputFilter($galerie->getInputFilter());
397 $form->setData($request->getPost());
399 // Validation des données
400 if ($form->isValid()) {
401 // Sauvegarde des données
402 $galerie = $form->getData();
404 // Si l'objet n'est pas nouveau, les autres paramètres restent inchangés
405 // Si l'objet est nouveau, il faut renseigner l'id de l'utilisateur courant
406 $galerie->id_user = 1; //TODO: Mettre ici le user connecté
408 $this->_getGalerieTable()->save($galerie);
410 $translator = $this->_getTranslator();
411 $messenger = $this->flashMessenger();
412 $messenger->setNamespace('infos');
414 $messenger->addMessage($translator->translate('Galerie_added', 'galerie'));
416 $messenger->addMessage($translator->translate('Galerie_updated', 'galerie'));
418 // Redirection à l'ancienne mode
419 //return $this->redirect()->toRoute('galerie');
420 // Redirection vers le contrôleur courant
421 //return $this->postRedirectGet();
422 // Redirection vers la page Galerie/Index
423 return $this->postRedirectGet('galerie');
427 // On prépare l'affichage du formulaire
429 $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
431 $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
435 // On passe la main à la vue
436 return new ViewModel(array(
443 public function delAction()
445 return $this->redirect()->toRoute('galerie/view', array(
446 'id' => $this->params()->fromRoute('id', null),
450 public function viewAction()
452 $id = $this->params()->fromRoute('id', null);
453 $galerie = $this->_getGalerieInfoTable()->any($id);
455 $pairs = $this->_getGaleriePairTable()->all();
458 $session = new Container('test');
459 $session->offsetSet('last', $id);
461 return new ViewModel(array(
463 'galerie' => $galerie,