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;
15 class IndexController extends AbstractActionController
18 private $_galerieTable;
19 private $_galerieInfoTable;
20 private $_galerieForm;
21 private $_galerieInfoExporter;
22 private $_galerieMailSender;
23 private $_viewResolver;
28 private function _getGalerieTable()
30 if (!$this->_galerieTable) {
31 $sm = $this->getServiceLocator();
32 $this->_galerieTable = $sm->get('Galerie\Model\GalerieTable');
34 return $this->_galerieTable;
37 private function _getGalerieInfoTable()
39 if (!$this->_galerieInfoTable) {
40 $sm = $this->getServiceLocator();
41 $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoTable');
43 return $this->_galerieInfoTable;
46 private function _getTranslator()
48 if (!$this->_translator) {
49 $sm = $this->getServiceLocator();
50 $this->_translator = $sm->get('translator');
52 return $this->_translator;
55 private function _getGalerieForm()
57 if (!$this->_galerieForm) {
58 $sm = $this->getServiceLocator();
59 $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm');
61 return $this->_galerieForm;
64 private function _getGalerieInfoExporter()
66 if (!$this->_galerieInfoExporter) {
67 $sm = $this->getServiceLocator();
68 $this->_galerieInfoExporter = $sm->get('Galerie\Export\GalerieWorkbook');
70 return $this->_galerieInfoExporter;
73 private function _getGalerieMailSender()
75 if (!$this->_galerieMailSender) {
76 $sm = $this->getServiceLocator();
77 $this->_galerieMailSender = $sm->get('Galerie\Mail\MailSender');
79 return $this->_galerieMailSender;
82 private function _getViewResolver()
84 if (!$this->_viewResolver) {
85 $sm = $this->getServiceLocator();
86 $this->_viewResolver = $sm->get('ViewResolver');
88 return $this->_viewResolver;
94 public function indexAction()
96 return new ViewModel($this->MessageGetter());
99 public function csvAction() {
100 // Récupération des informations brutes
101 $modelManager = $this->_getGalerieInfoTable();
102 $datas = $modelManager->all();
104 // Mise en forme des résultats
105 $content = array($modelManager->csvHeader());
106 foreach($datas as $d) {
107 $content[] = $d->csvFormat();
110 // Création de la réponse
111 $response = $this->getResponse();
112 $response->setStatusCode(200);
114 // Modification des entêtes
115 $headers = $this->getResponse()->getHeaders();
116 $headers->addHeaderLine('Content-Type', 'text/csv; charset=utf-8');
117 $headers->addHeaderLine('Content-Disposition', 'attachment; filename="export_galerie.csv"');
119 $response->setContent(implode("\r\n", $content));
125 public function excelAction() {
126 // Récupération des informations brutes
127 $modelManager = $this->_getGalerieInfoTable();
128 $datas = $modelManager->all();
130 $exporter = $this->_getGalerieInfoExporter();
131 $exporter->build($datas);
133 // Renvoi d'une réponse vide pour désactiver le rendu de la vue
134 return $this->getResponse();
138 public function mailAction()
140 //Construction du courriel au format HTML.
141 $mail_viewmodel = new ViewModel(array(
144 $mail_viewmodel->setTemplate('galerie/mail/test');
145 $renderer = new PhpRenderer;
146 $renderer->setResolver($this->_getViewResolver());
147 $body_html = $renderer->render($mail_viewmodel);
150 $mailSender = $this->_getGalerieMailSender();
152 's.chazallet@gmail.com', 'Moi',//'sender@example.com', 'Moi',
153 's.chazallet@gmail.com', 'Toi',//'to@example.com', 'Toi',
154 'Test', 'Hello World 4.', $body_html
157 // Création de la réponse
158 $response = $this->getResponse();
159 $response->setStatusCode(200);
160 $response->setContent('Mail Sent.');
165 public function listAction()
167 // Récupération de l'objet requête
168 $request = $this->getRequest();
170 $start = $request->getQuery('iDisplayStart', 0);
171 $length = $request->getQuery('iDisplayLength', 10);
172 $tri = $request->getQuery('iSortCol_0');
173 $senstri = $request->getQuery('sSortDir_0', 'asc');
174 $filtre = $request->getQuery('sSearch');
176 // Preparation pour le requêtage
177 $modelManager = $this->_getGalerieInfoTable();
179 // Récupération des galeries sous la forme d'un tableau d'entités
180 $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
182 // Préparation pour la mise en forme du résultat
183 $action_template = '<a href="%s">%s</a><a href="%s">%s</a><a href="%s">%s</a>';
184 $translator = $this->_getTranslator();
185 $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie');
186 $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie');
187 $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie');
189 // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
191 foreach($galeries as $g) {
193 "<strong>{$g->name}</strong><em>{$g->description}</em>",
198 $url->fromRoute('galerie/view', array('id' => $g->id)),
200 $url->fromRoute('galerie/edit', array('id' => $g->id)),
202 $url->fromRoute('galerie/del', array('id' => $g->id)),
208 // Construction du resultat
209 return new JsonModel(array(
210 "sEcho" => $request->getQuery('sEcho', 1),
211 "iTotalRecords" => $modelManager->count_all(),
212 "iTotalDisplayRecords" => count($result),
217 public function editAction()
219 // Création du formulaire
220 $form = $this->_getGalerieForm();
222 // Récupération de l'objet de travail
223 $id = $this->params()->fromRoute('id', null);
227 $galerie = $this->_getGalerieTable()->any(array('id' => $id));
230 // Sommes-nous en ajout ou en édition ?
232 // Nous sommes en ajout
233 $form->get('submit')->setValue('Ajouter');
234 // Il faut créer un nouveau objet Galerie
235 $galerie = new Galerie;
236 // Garder cette information pour la vue
239 // Nous sommes en modification
240 $form->get('submit')->setValue('Modifier');
241 // Il faut préremplir le formulaire avec les données actuelles
242 $form->bind($galerie);
243 // Garder cette information pour la vue
247 // Récupération de l'objet requête
248 $request = $this->getRequest();
249 if ($request->isPost()) {
250 // Mise en place pour la validation du formulaire
251 $form->setInputFilter($galerie->getInputFilter());
252 $form->setData($request->getPost());
254 // Validation des données
255 if ($form->isValid()) {
256 // Sauvegarde des données
257 $galerie = $form->getData();
259 // Si l'objet n'est pas nouveau, les autres paramètres restent inchangés
260 // Si l'objet est nouveau, il faut renseigner l'id de l'utilisateur courant
261 $galerie->id_user = 1; //TODO: Mettre ici le user connecté
263 $this->_getGalerieTable()->save($galerie);
265 $translator = $this->_getTranslator();
266 $messenger = $this->flashMessenger();
267 $messenger->setNamespace('infos');
269 $messenger->addMessage($translator->translate('Galerie_added', 'galerie'));
271 $messenger->addMessage($translator->translate('Galerie_updated', 'galerie'));
273 // Redirection à l'ancienne mode
274 //return $this->redirect()->toRoute('galerie');
275 // Redirection vers le contrôleur courant
276 //return $this->postRedirectGet();
277 // Redirection vers la page Galerie/Index
278 return $this->postRedirectGet('galerie');
282 // On prépare l'affichage du formulaire
284 $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
286 $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
290 // On passe la main à la vue
291 return new ViewModel(array(
298 public function delAction()
300 return $this->redirect()->toRoute('galerie/view', array(
301 'id' => $this->params()->fromRoute('id', null),
305 public function viewAction()
307 $id = $this->params()->fromRoute('id', null);
308 $galerie = $this->_getGalerieInfoTable()->any($id);
309 return new ViewModel(array(
311 'galerie' => $galerie,