bacff03c04ac09e467d24051e951b0f441716895
[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(array(
62             'messages' => $this->flashMessenger()->getMessages(),
63         )); 
64     } 
65
66     public function listAction() 
67     { 
68         // Récupération de l'objet requête
69         $request = $this->getRequest();
70
71         $start = $request->getQuery('iDisplayStart', 0);
72         $length = $request->getQuery('iDisplayLength', 10);
73         $tri = $request->getQuery('iSortCol_0');
74         $senstri = $request->getQuery('sSortDir_0', 'asc');
75         $filtre = $request->getQuery('sSearch');
76
77         // Preparation pour le requêtage
78         $modelManager = $this->_getGalerieInfoTable();
79
80         // Récupération des galeries sous la forme d'un tableau d'entités
81         $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre);
82
83         // Préparation pour la mise en forme du résultat
84         $action_template = '<a href="%s">%s</a><a href="%s">%s</a><a href="%s">%s</a>';
85         $translator = $this->_getTranslator();
86         $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie');
87         $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie');
88         $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie');
89         $url = $this->url();
90         // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux
91         $result = array();
92         foreach($galeries as $g) {
93             $result[] = array(
94                 "<strong>{$g->name}</strong><em>{$g->description}</em>",
95                 $g->username,
96                 $g->nb,
97                 sprintf(
98                     $action_template,
99                     $url->fromRoute('galerie/view', array('id' => $g->id)),
100                     $action_voir,
101                     $url->fromRoute('galerie/edit', array('id' => $g->id)),
102                     $action_editer,
103                     $url->fromRoute('galerie/del', array('id' => $g->id)),
104                     $action_supprimer
105                 ),
106             );
107         }
108
109         // Construction du resultat
110         return new JsonModel(array(
111             "sEcho" => $request->getQuery('sEcho', 1),
112             "iTotalRecords" => $modelManager->count_all(),
113             "iTotalDisplayRecords" => count($result),
114             "aaData" => $result,
115         ));
116     } 
117
118     public function editAction() 
119     {
120         // Création du formulaire
121         $form = $this->_getGalerieForm();
122
123         // Récupération de l'objet de travail
124         $id = $this->params()->fromRoute('id', null);
125         if (!$id) {
126             $galerie = null;
127         } else {
128             $galerie = $this->_getGalerieTable()->any(array('id' => $id));
129         }
130
131         // Sommes-nous en ajout ou en édition ?
132         if (!$galerie) {
133             // Nous sommes en ajout
134             $form->get('submit')->setValue('Ajouter');
135             // Il faut créer un nouveau objet Galerie
136             $galerie = new Galerie;
137             // Garder cette information pour la vue
138             $is_new = true;
139         } else {
140             // Nous sommes en modification
141             $form->get('submit')->setValue('Modifier');
142             // Il faut préremplir le formulaire avec les données actuelles
143             $form->bind($galerie);
144             // Garder cette information pour la vue
145             $is_new = false;
146         }
147
148         // Récupération de l'objet requête
149         $request = $this->getRequest();
150         if ($request->isPost()) {
151             // Mise en place pour la validation du formulaire
152             $form->setInputFilter($galerie->getInputFilter());
153             $form->setData($request->getPost());
154
155             // Validation des données
156             if ($form->isValid()) {
157                 // Sauvegarde des données
158                 $galerie = $form->getData();
159                 if ($is_new) {
160                     // Si l'objet n'est pas nouveau, les autres paramètres restent inchangés
161                     // Si l'objet est nouveau, il faut renseigner l'id de l'utilisateur courant
162                     $galerie->id_user = 1; //TODO: Mettre ici le user connecté
163                 }
164                 $this->_getGalerieTable()->save($galerie);
165
166                 $translator = $this->_getTranslator();
167                 if ($is_new) {
168                     $this->flashMessenger()->addMessage($translator->translate('Galerie_added', 'galerie'));
169                 } else {
170                     $this->flashMessenger()->addMessage($translator->translate('Galerie_updated', 'galerie'));
171                 }
172                 // Redirection à l'ancienne mode
173                 //return $this->redirect()->toRoute('galerie');
174                 // Redirection vers le contrôleur courant
175                 //return $this->postRedirectGet();
176                 // Redirection vers la page Galerie/Index
177                 return $this->postRedirectGet('galerie');
178             }
179         }
180
181         // On prépare l'affichage du formulaire
182         if ($is_new) {
183             $form->setAttribute('action', $this->url()->fromRoute('galerie/add'));
184         } else {
185             $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id)));
186         }
187         $form->prepare();
188
189         // On passe la main à la vue
190         return new ViewModel(array(
191             'id' => $id,
192             'form' => $form,
193             'is_new' => $is_new,
194         ));
195     } 
196
197     public function delAction() 
198     { 
199         return $this->redirect()->toRoute('galerie/view', array(
200             'id' => $this->params()->fromRoute('id', null),
201         ));
202     } 
203
204     public function viewAction() 
205     {
206         $id = $this->params()->fromRoute('id', null);
207         $galerie = $this->_getGalerieInfoTable()->any($id);
208         return new ViewModel(array(
209             'id' => $id,
210             'galerie' => $galerie,
211         ));
212     } 
213
214