3 namespace Galerie\Controller;
5 use Zend\Mvc\Controller\AbstractActionController;
6 use Zend\View\Model\ViewModel;
7 use Zend\View\Model\JsonModel;
9 use Galerie\Model\Galerie;
11 class IndexController extends AbstractActionController
14 private $_galerieTable;
15 private $_galerieInfoTable;
16 private $_galerieForm;
17 private $_galerieInfoExporter;
22 private function _getGalerieTable()
24 if (!$this->_galerieTable) {
25 $sm = $this->getServiceLocator();
26 $this->_galerieTable = $sm->get('Galerie\Model\GalerieTable');
28 return $this->_galerieTable;
31 private function _getGalerieInfoTable()
33 if (!$this->_galerieInfoTable) {
34 $sm = $this->getServiceLocator();
35 $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoTable');
37 return $this->_galerieInfoTable;
40 private function _getTranslator()
42 if (!$this->_translator) {
43 $sm = $this->getServiceLocator();
44 $this->_translator = $sm->get('translator');
46 return $this->_translator;
49 private function _getGalerieForm()
51 if (!$this->_galerieForm) {
52 $sm = $this->getServiceLocator();
53 $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm');
55 return $this->_galerieForm;
58 private function _getGalerieInfoExporter()
60 if (!$this->_galerieInfoExporter) {
61 $sm = $this->getServiceLocator();
62 $this->_galerieInfoExporter = $sm->get('Galerie\Export\GalerieWorkbook');
64 return $this->_galerieInfoExporter;
70 public function indexAction()
72 return new ViewModel($this->MessageGetter());
75 public function csvAction() {
76 // Récupération des informations brutes
77 $modelManager = $this->_getGalerieInfoTable();
78 $datas = $modelManager->all();
80 // Mise en forme des résultats
81 $content = array($modelManager->csvHeader());
82 foreach($datas as $d) {
83 $content[] = $d->csvFormat();
86 // Création de la réponse
87 $response = $this->getResponse();
88 $response->setStatusCode(200);
90 // Modification des entêtes
91 $headers = $this->getResponse()->getHeaders();
92 $headers->addHeaderLine('Content-Type', 'text/csv; charset=utf-8');
93 $headers->addHeaderLine('Content-Disposition', 'attachment; filename="export_galerie.csv"');
95 $response->setContent(implode("\r\n", $content));
101 public function excelAction() {
102 // Récupération des informations brutes
103 $modelManager = $this->_getGalerieInfoTable();
104 $datas = $modelManager->all();
106 $exporter = $this->_getGalerieInfoExporter();
107 $exporter->build($datas);
109 // Renvoi d'une réponse vide pour désactiver le rendu de la vue
110 return $this->getResponse();
114 public function listAction()
116 // Récupération de l'objet requête
117 $request = $this->getRequest();
119 $start = $request->getQuery('iDisplayStart', 0);
120 $length = $request->getQuery('iDisplayLength', 10);
121 $tri = $request->getQuery('iSortCol_0');
122 $senstri = $request->getQuery('sSortDir_0', 'asc');
123 $filtre = $request->getQuery('sSearch');
125 // Preparation pour le requêtage
126 $modelManager = $this->_getGalerieInfoTable();
128 // Récupération des galeries sous la forme d'un tableau d'entités
129 $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
131 // Préparation pour la mise en forme du résultat
132 $action_template = '<a href="%s">%s</a><a href="%s">%s</a><a href="%s">%s</a>';
133 $translator = $this->_getTranslator();
134 $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie');
135 $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie');
136 $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie');
138 // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
140 foreach($galeries as $g) {
142 "<strong>{$g->name}</strong><em>{$g->description}</em>",
147 $url->fromRoute('galerie/view', array('id' => $g->id)),
149 $url->fromRoute('galerie/edit', array('id' => $g->id)),
151 $url->fromRoute('galerie/del', array('id' => $g->id)),
157 // Construction du resultat
158 return new JsonModel(array(
159 "sEcho" => $request->getQuery('sEcho', 1),
160 "iTotalRecords" => $modelManager->count_all(),
161 "iTotalDisplayRecords" => count($result),
166 public function editAction()
168 // Création du formulaire
169 $form = $this->_getGalerieForm();
171 // Récupération de l'objet de travail
172 $id = $this->params()->fromRoute('id', null);
176 $galerie = $this->_getGalerieTable()->any(array('id' => $id));
179 // Sommes-nous en ajout ou en édition ?
181 // Nous sommes en ajout
182 $form->get('submit')->setValue('Ajouter');
183 // Il faut créer un nouveau objet Galerie
184 $galerie = new Galerie;
185 // Garder cette information pour la vue
188 // Nous sommes en modification
189 $form->get('submit')->setValue('Modifier');
190 // Il faut préremplir le formulaire avec les données actuelles
191 $form->bind($galerie);
192 // Garder cette information pour la vue
196 // Récupération de l'objet requête
197 $request = $this->getRequest();
198 if ($request->isPost()) {
199 // Mise en place pour la validation du formulaire
200 $form->setInputFilter($galerie->getInputFilter());
201 $form->setData($request->getPost());
203 // Validation des données
204 if ($form->isValid()) {
205 // Sauvegarde des données
206 $galerie = $form->getData();
208 // Si l'objet n'est pas nouveau, les autres paramètres restent inchangés
209 // Si l'objet est nouveau, il faut renseigner l'id de l'utilisateur courant
210 $galerie->id_user = 1; //TODO: Mettre ici le user connecté
212 $this->_getGalerieTable()->save($galerie);
214 $translator = $this->_getTranslator();
215 $messenger = $this->flashMessenger();
216 $messenger->setNamespace('infos');
218 $messenger->addMessage($translator->translate('Galerie_added', 'galerie'));
220 $messenger->addMessage($translator->translate('Galerie_updated', 'galerie'));
222 // Redirection à l'ancienne mode
223 //return $this->redirect()->toRoute('galerie');
224 // Redirection vers le contrôleur courant
225 //return $this->postRedirectGet();
226 // Redirection vers la page Galerie/Index
227 return $this->postRedirectGet('galerie');
231 // On prépare l'affichage du formulaire
233 $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
235 $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
239 // On passe la main à la vue
240 return new ViewModel(array(
247 public function delAction()
249 return $this->redirect()->toRoute('galerie/view', array(
250 'id' => $this->params()->fromRoute('id', null),
254 public function viewAction()
256 $id = $this->params()->fromRoute('id', null);
257 $galerie = $this->_getGalerieInfoTable()->any($id);
258 return new ViewModel(array(
260 'galerie' => $galerie,