1f358f35a35032a6466661c247eee7f1abb044bb
[zf2.biz/galerie.git] / module / Galerie / src / Galerie / Controller / IndexController.php
1 <?php
2
3 namespace Galerie\Controller; 
4
5 use Zend\Mvc\Controller\AbstractActionController; 
6 use Zend\View\Model\ViewModel;
7 use Zend\View\Model\JsonModel;
8
9 use Galerie\Model\Galerie;
10
11 class IndexController extends AbstractActionController 
12 {
13
14     private $_galerieTable;
15     private $_galerieInfoTable;
16     private $_galerieForm;
17
18     private $_translator;
19
20
21     private function _getGalerieTable()
22     {
23         if (!$this->_galerieTable) {
24             $sm = $this->getServiceLocator();
25             $this->_galerieTable = $sm->get('Galerie\Model\GalerieTable');
26         }
27         return $this->_galerieTable;
28     }
29
30     private function _getGalerieInfoTable()
31     {
32         if (!$this->_galerieInfoTable) {
33             $sm = $this->getServiceLocator();
34             $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoTable');
35         }
36         return $this->_galerieInfoTable;
37     }
38
39     private function _getTranslator()
40     {
41         if (!$this->_translator) {
42             $sm = $this->getServiceLocator();
43             $this->_translator = $sm->get('translator');
44         }
45         return $this->_translator;
46     }
47
48     private function _getGalerieForm()
49     {
50         if (!$this->_galerieForm) {
51             $sm = $this->getServiceLocator();
52             $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm');
53         }
54         return $this->_galerieForm;
55     }
56
57
58
59     public function indexAction() 
60     {
61         return new ViewModel($this->MessageGetter());
62     } 
63
64     public function csvAction() {
65         // Récupération des informations brutes
66         $modelManager = $this->_getGalerieInfoTable();
67         $datas = $modelManager->all();
68
69         // Mise en forme des résultats
70         $content = array($modelManager->csvHeader());
71         foreach($datas as $d) {
72             $content[] = $d->csvFormat();
73         }
74
75         // Création de la réponse
76         $response = $this->getResponse();
77         $response->setStatusCode(200);
78
79         $headers = $this->getResponse()->getHeaders();
80         $headers->addHeaderLine('Content-Type', 'text/csv; charset=utf-8');
81         $headers->addHeaderLine('Content-Disposition', 'attachment; filename="export_galerie.csv"');
82
83
84         $response->setContent(implode("\r\n", $content));
85         return $response;
86     }
87
88     public function listAction() 
89     { 
90         // Récupération de l'objet requête
91         $request = $this->getRequest();
92
93         $start = $request->getQuery('iDisplayStart', 0);
94         $length = $request->getQuery('iDisplayLength', 10);
95         $tri = $request->getQuery('iSortCol_0');
96         $senstri = $request->getQuery('sSortDir_0', 'asc');
97         $filtre = $request->getQuery('sSearch');
98
99         // Preparation pour le requêtage
100         $modelManager = $this->_getGalerieInfoTable();
101
102         // Récupération des galeries sous la forme d'un tableau d'entités
103         $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
104
105         // Préparation pour la mise en forme du résultat
106         $action_template = '<a href="%s">%s</a><a href="%s">%s</a><a href="%s">%s</a>';
107         $translator = $this->_getTranslator();
108         $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie');
109         $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie');
110         $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie');
111         $url = $this->url();
112         // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
113         $result = array();
114         foreach($galeries as $g) {
115             $result[] = array(
116                 "<strong>{$g->name}</strong><em>{$g->description}</em>",
117                 $g->username,
118                 $g->nb,
119                 sprintf(
120                     $action_template,
121                     $url->fromRoute('galerie/view', array('id' => $g->id)),
122                     $action_voir,
123                     $url->fromRoute('galerie/edit', array('id' => $g->id)),
124                     $action_editer,
125                     $url->fromRoute('galerie/del', array('id' => $g->id)),
126                     $action_supprimer
127                 ),
128             );
129         }
130
131         // Construction du resultat
132         return new JsonModel(array(
133             "sEcho" => $request->getQuery('sEcho', 1),
134             "iTotalRecords" => $modelManager->count_all(),
135             "iTotalDisplayRecords" => count($result),
136             "aaData" => $result,
137         ));
138     } 
139
140     public function editAction() 
141     {
142         // Création du formulaire
143         $form = $this->_getGalerieForm();
144
145         // Récupération de l'objet de travail
146         $id = $this->params()->fromRoute('id', null);
147         if (!$id) {
148             $galerie = null;
149         } else {
150             $galerie = $this->_getGalerieTable()->any(array('id' => $id));
151         }
152
153         // Sommes-nous en ajout ou en édition ?
154         if (!$galerie) {
155             // Nous sommes en ajout
156             $form->get('submit')->setValue('Ajouter');
157             // Il faut créer un nouveau objet Galerie
158             $galerie = new Galerie;
159             // Garder cette information pour la vue
160             $is_new = true;
161         } else {
162             // Nous sommes en modification
163             $form->get('submit')->setValue('Modifier');
164             // Il faut préremplir le formulaire avec les données actuelles
165             $form->bind($galerie);
166             // Garder cette information pour la vue
167             $is_new = false;
168         }
169
170         // Récupération de l'objet requête
171         $request = $this->getRequest();
172         if ($request->isPost()) {
173             // Mise en place pour la validation du formulaire
174             $form->setInputFilter($galerie->getInputFilter());
175             $form->setData($request->getPost());
176
177             // Validation des données
178             if ($form->isValid()) {
179                 // Sauvegarde des données
180                 $galerie = $form->getData();
181                 if ($is_new) {
182                     // Si l'objet n'est pas nouveau, les autres paramètres restent inchangés
183                     // Si l'objet est nouveau, il faut renseigner l'id de l'utilisateur courant
184                     $galerie->id_user = 1; //TODO: Mettre ici le user connecté
185                 }
186                 $this->_getGalerieTable()->save($galerie);
187
188                 $translator = $this->_getTranslator();
189                 $messenger = $this->flashMessenger();
190                 $messenger->setNamespace('infos');
191                 if ($is_new) {
192                     $messenger->addMessage($translator->translate('Galerie_added', 'galerie'));
193                 } else {
194                     $messenger->addMessage($translator->translate('Galerie_updated', 'galerie'));
195                 }
196                 // Redirection à l'ancienne mode
197                 //return $this->redirect()->toRoute('galerie');
198                 // Redirection vers le contrôleur courant
199                 //return $this->postRedirectGet();
200                 // Redirection vers la page Galerie/Index
201                 return $this->postRedirectGet('galerie');
202             }
203         }
204
205         // On prépare l'affichage du formulaire
206         if ($is_new) {
207             $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
208         } else {
209             $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
210         }
211         $form->prepare();
212
213         // On passe la main à la vue
214         return new ViewModel(array(
215             'id' => $id,
216             'form' => $form,
217             'is_new' => $is_new,
218         ));
219     } 
220
221     public function delAction() 
222     { 
223         return $this->redirect()->toRoute('galerie/view', array(
224             'id' => $this->params()->fromRoute('id', null),
225         ));
226     } 
227
228     public function viewAction() 
229     {
230         $id = $this->params()->fromRoute('id', null);
231         $galerie = $this->_getGalerieInfoTable()->any($id);
232         return new ViewModel(array(
233             'id' => $id,
234             'galerie' => $galerie,
235         ));
236     } 
237
238