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;
31 private function _getGalerieTable()
33 if (!$this->_galerieTable) {
34 $sm = $this->getServiceLocator();
35 $this->_galerieTable = $sm->get('Galerie\Model\GalerieTable');
37 return $this->_galerieTable;
40 private function _getGalerieInfoTable()
42 if (!$this->_galerieInfoTable) {
43 $sm = $this->getServiceLocator();
44 $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoTable');
46 return $this->_galerieInfoTable;
49 private function _getTranslator()
51 if (!$this->_translator) {
52 $sm = $this->getServiceLocator();
53 $this->_translator = $sm->get('translator');
55 return $this->_translator;
58 private function _getGalerieForm()
60 if (!$this->_galerieForm) {
61 $sm = $this->getServiceLocator();
62 $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm');
64 return $this->_galerieForm;
67 private function _getGalerieInfoExporter()
69 if (!$this->_galerieInfoExporter) {
70 $sm = $this->getServiceLocator();
71 $this->_galerieInfoExporter = $sm->get('Galerie\Export\GalerieWorkbook');
73 return $this->_galerieInfoExporter;
76 private function _getGalerieMailSender()
78 if (!$this->_galerieMailSender) {
79 $sm = $this->getServiceLocator();
80 $this->_galerieMailSender = $sm->get('Galerie\Mail\MailSender');
82 return $this->_galerieMailSender;
85 private function _getViewResolver()
87 if (!$this->_viewResolver) {
88 $sm = $this->getServiceLocator();
89 $this->_viewResolver = $sm->get('ViewResolver');
91 return $this->_viewResolver;
94 private function _getGaleriePairTable()
96 if (!$this->_galeriePairTable) {
97 $sm = $this->getServiceLocator();
98 $this->_galeriePairTable = $sm->get('Galerie\Model\GaleriePairTable');
100 return $this->_galeriePairTable;
106 public function indexAction()
108 $session = new Container('test');
109 if ($session->offsetExists('last')) {
110 $last = $email = $session->offsetGet('last');
114 return new ViewModel(array('last' => $last));
117 public function csvAction() {
118 // Récupération des informations brutes
119 $modelManager = $this->_getGalerieInfoTable();
120 $datas = $modelManager->all();
122 // Mise en forme des résultats
123 $content = array($modelManager->csvHeader());
124 foreach($datas as $d) {
125 $content[] = $d->csvFormat();
128 // Création de la réponse
129 $response = $this->getResponse();
130 $response->setStatusCode(200);
132 // Modification des entêtes
133 $headers = $this->getResponse()->getHeaders();
134 $headers->addHeaderLine('Content-Type', 'text/csv; charset=utf-8');
135 $headers->addHeaderLine('Content-Disposition', 'attachment; filename="export_galerie.csv"');
137 $response->setContent(implode("\r\n", $content));
143 public function excelAction() {
144 // Récupération des informations brutes
145 $modelManager = $this->_getGalerieInfoTable();
146 $datas = $modelManager->all();
148 $exporter = $this->_getGalerieInfoExporter();
149 $exporter->build($datas);
151 // Renvoi d'une réponse vide pour désactiver le rendu de la vue
152 return $this->getResponse();
156 public function mailAction()
158 //Construction du courriel au format HTML.
159 $mail_viewmodel = new ViewModel(array(
162 $mail_viewmodel->setTemplate('galerie/mail/test');
163 $renderer = new PhpRenderer;
164 $renderer->setResolver($this->_getViewResolver());
165 $body_html = $renderer->render($mail_viewmodel);
168 $mailSender = $this->_getGalerieMailSender();
170 's.chazallet@gmail.com', 'Moi',//'sender@example.com', 'Moi',
171 's.chazallet@gmail.com', 'Toi',//'to@example.com', 'Toi',
172 'Test', 'Hello World 4.', $body_html
175 // Création de la réponse
176 $response = $this->getResponse();
177 $response->setStatusCode(200);
178 $response->setContent('Mail Sent.');
183 public function pieAction()
186 $modelManager = $this->_getGalerieInfoTable();
187 $datas = $modelManager->all();
189 // Mise en forme des résultats
192 foreach($datas as $d) {
197 // Construction (et envoi) du diagramme
198 $pie = new TestPie($nombres, $noms);
200 $response = $this->getResponse();
201 $response->setStatusCode(200);
202 $response->setContent('');
207 public function listAction()
209 // Récupération de l'objet requête
210 $request = $this->getRequest();
212 $start = $request->getQuery('iDisplayStart', 0);
213 $length = $request->getQuery('iDisplayLength', 10);
214 $tri = $request->getQuery('iSortCol_0');
215 $senstri = $request->getQuery('sSortDir_0', 'asc');
216 $filtre = $request->getQuery('sSearch');
218 // Preparation pour le requêtage
219 $modelManager = $this->_getGalerieInfoTable();
221 // Récupération des galeries sous la forme d'un tableau d'entités
222 $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
224 // Préparation pour la mise en forme du résultat
225 $action_template = '<a href="%s">%s</a><a href="%s">%s</a><a href="%s">%s</a>';
226 $translator = $this->_getTranslator();
227 $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie');
228 $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie');
229 $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie');
231 // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
233 foreach($galeries as $g) {
235 "<strong>{$g->name}</strong><em>{$g->description}</em>",
240 $url->fromRoute('galerie/view', array('id' => $g->id)),
242 $url->fromRoute('galerie/edit', array('id' => $g->id)),
244 $url->fromRoute('galerie/del', array('id' => $g->id)),
250 // Construction du resultat
251 return new JsonModel(array(
252 "sEcho" => $request->getQuery('sEcho', 1),
253 "iTotalRecords" => $modelManager->count_all(),
254 "iTotalDisplayRecords" => count($result),
259 public function editAction()
261 // Création du formulaire
262 $form = $this->_getGalerieForm();
264 // Récupération de l'objet de travail
265 $id = $this->params()->fromRoute('id', null);
269 $galerie = $this->_getGalerieTable()->any(array('id' => $id));
272 // Sommes-nous en ajout ou en édition ?
274 // Nous sommes en ajout
275 $form->get('submit')->setValue('Ajouter');
276 // Il faut créer un nouveau objet Galerie
277 $galerie = new Galerie;
278 // Garder cette information pour la vue
281 // Nous sommes en modification
282 $form->get('submit')->setValue('Modifier');
283 // Garder cette information pour la vue
288 // Il faut préremplir le formulaire avec les données actuelles
289 $form->bind($galerie);
291 // Récupération de l'objet requête
292 $request = $this->getRequest();
293 if ($request->isPost()) {
294 // Mise en place pour la validation du formulaire
295 $form->setInputFilter($galerie->getInputFilter());
296 $form->setData($request->getPost());
298 // Validation des données
299 if ($form->isValid()) {
300 // Sauvegarde des données
301 $galerie = $form->getData();
303 // Si l'objet n'est pas nouveau, les autres paramètres restent inchangés
304 // Si l'objet est nouveau, il faut renseigner l'id de l'utilisateur courant
305 $galerie->id_user = 1; //TODO: Mettre ici le user connecté
307 $this->_getGalerieTable()->save($galerie);
309 $translator = $this->_getTranslator();
310 $messenger = $this->flashMessenger();
311 $messenger->setNamespace('infos');
313 $messenger->addMessage($translator->translate('Galerie_added', 'galerie'));
315 $messenger->addMessage($translator->translate('Galerie_updated', 'galerie'));
317 // Redirection à l'ancienne mode
318 //return $this->redirect()->toRoute('galerie');
319 // Redirection vers le contrôleur courant
320 //return $this->postRedirectGet();
321 // Redirection vers la page Galerie/Index
322 return $this->postRedirectGet('galerie');
326 // On prépare l'affichage du formulaire
328 $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
330 $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
334 // On passe la main à la vue
335 return new ViewModel(array(
342 public function delAction()
344 return $this->redirect()->toRoute('galerie/view', array(
345 'id' => $this->params()->fromRoute('id', null),
349 public function viewAction()
351 $id = $this->params()->fromRoute('id', null);
352 $galerie = $this->_getGalerieInfoTable()->any($id);
354 $pairs = $this->_getGaleriePairTable()->all();
357 $session = new Container('test');
358 $session->offsetSet('last', $id);
360 return new ViewModel(array(
362 'galerie' => $galerie,