X-Git-Url: http://git.inspyration.org/?a=blobdiff_plain;f=module%2FGalerie%2Fsrc%2FGalerie%2FController%2FIndexController.php;h=1f358f35a35032a6466661c247eee7f1abb044bb;hb=12557cded4e09175aab9f520c3a27f4a194fa6b8;hp=2f28c98cb2b02f6be4da91cc10b7183d977fa710;hpb=8bd8f746674c0992e71e1a6952d0d37580291930;p=zf2.biz%2Fgalerie.git diff --git a/module/Galerie/src/Galerie/Controller/IndexController.php b/module/Galerie/src/Galerie/Controller/IndexController.php index 2f28c98..1f358f3 100644 --- a/module/Galerie/src/Galerie/Controller/IndexController.php +++ b/module/Galerie/src/Galerie/Controller/IndexController.php @@ -4,12 +4,18 @@ namespace Galerie\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; +use Zend\View\Model\JsonModel; + +use Galerie\Model\Galerie; class IndexController extends AbstractActionController { private $_galerieTable; private $_galerieInfoTable; + private $_galerieForm; + + private $_translator; private function _getGalerieTable() @@ -30,26 +36,203 @@ class IndexController extends AbstractActionController return $this->_galerieInfoTable; } + private function _getTranslator() + { + if (!$this->_translator) { + $sm = $this->getServiceLocator(); + $this->_translator = $sm->get('translator'); + } + return $this->_translator; + } + + private function _getGalerieForm() + { + if (!$this->_galerieForm) { + $sm = $this->getServiceLocator(); + $this->_galerieForm = $sm->get('Galerie\Form\GalerieForm'); + } + return $this->_galerieForm; + } + + public function indexAction() + { + return new ViewModel($this->MessageGetter()); + } + + public function csvAction() { + // Récupération des informations brutes + $modelManager = $this->_getGalerieInfoTable(); + $datas = $modelManager->all(); + + // Mise en forme des résultats + $content = array($modelManager->csvHeader()); + foreach($datas as $d) { + $content[] = $d->csvFormat(); + } + + // Création de la réponse + $response = $this->getResponse(); + $response->setStatusCode(200); + + $headers = $this->getResponse()->getHeaders(); + $headers->addHeaderLine('Content-Type', 'text/csv; charset=utf-8'); + $headers->addHeaderLine('Content-Disposition', 'attachment; filename="export_galerie.csv"'); + + + $response->setContent(implode("\r\n", $content)); + return $response; + } + + public function listAction() { - return new ViewModel(array( - 'all' => $this->_getGalerieInfoTable()->all(), - )); + // Récupération de l'objet requête + $request = $this->getRequest(); + + $start = $request->getQuery('iDisplayStart', 0); + $length = $request->getQuery('iDisplayLength', 10); + $tri = $request->getQuery('iSortCol_0'); + $senstri = $request->getQuery('sSortDir_0', 'asc'); + $filtre = $request->getQuery('sSearch'); + + // Preparation pour le requêtage + $modelManager = $this->_getGalerieInfoTable(); + + // Récupération des galeries sous la forme d'un tableau d'entités + $galeries = $modelManager->getPartial($start, $length, $tri, $senstri, $filtre); + + // Préparation pour la mise en forme du résultat + $action_template = '%s%s%s'; + $translator = $this->_getTranslator(); + $action_voir = $translator->translate('Galerie_index_table_lien_view', 'galerie'); + $action_editer = $translator->translate('Galerie_index_table_lien_edit', 'galerie'); + $action_supprimer = $translator->translate('Galerie_index_table_lien_del', 'galerie'); + $url = $this->url(); + // Mise en forme du résultat pour que cela corresponde à l'attendu, c'est à dire un tableau de tableaux + $result = array(); + foreach($galeries as $g) { + $result[] = array( + "{$g->name}{$g->description}", + $g->username, + $g->nb, + sprintf( + $action_template, + $url->fromRoute('galerie/view', array('id' => $g->id)), + $action_voir, + $url->fromRoute('galerie/edit', array('id' => $g->id)), + $action_editer, + $url->fromRoute('galerie/del', array('id' => $g->id)), + $action_supprimer + ), + ); + } + + // Construction du resultat + return new JsonModel(array( + "sEcho" => $request->getQuery('sEcho', 1), + "iTotalRecords" => $modelManager->count_all(), + "iTotalDisplayRecords" => count($result), + "aaData" => $result, + )); } public function editAction() - { - return array(); + { + // Création du formulaire + $form = $this->_getGalerieForm(); + + // Récupération de l'objet de travail + $id = $this->params()->fromRoute('id', null); + if (!$id) { + $galerie = null; + } else { + $galerie = $this->_getGalerieTable()->any(array('id' => $id)); + } + + // Sommes-nous en ajout ou en édition ? + if (!$galerie) { + // Nous sommes en ajout + $form->get('submit')->setValue('Ajouter'); + // Il faut créer un nouveau objet Galerie + $galerie = new Galerie; + // Garder cette information pour la vue + $is_new = true; + } else { + // Nous sommes en modification + $form->get('submit')->setValue('Modifier'); + // Il faut préremplir le formulaire avec les données actuelles + $form->bind($galerie); + // Garder cette information pour la vue + $is_new = false; + } + + // Récupération de l'objet requête + $request = $this->getRequest(); + if ($request->isPost()) { + // Mise en place pour la validation du formulaire + $form->setInputFilter($galerie->getInputFilter()); + $form->setData($request->getPost()); + + // Validation des données + if ($form->isValid()) { + // Sauvegarde des données + $galerie = $form->getData(); + if ($is_new) { + // Si l'objet n'est pas nouveau, les autres paramètres restent inchangés + // Si l'objet est nouveau, il faut renseigner l'id de l'utilisateur courant + $galerie->id_user = 1; //TODO: Mettre ici le user connecté + } + $this->_getGalerieTable()->save($galerie); + + $translator = $this->_getTranslator(); + $messenger = $this->flashMessenger(); + $messenger->setNamespace('infos'); + if ($is_new) { + $messenger->addMessage($translator->translate('Galerie_added', 'galerie')); + } else { + $messenger->addMessage($translator->translate('Galerie_updated', 'galerie')); + } + // Redirection à l'ancienne mode + //return $this->redirect()->toRoute('galerie'); + // Redirection vers le contrôleur courant + //return $this->postRedirectGet(); + // Redirection vers la page Galerie/Index + return $this->postRedirectGet('galerie'); + } + } + + // On prépare l'affichage du formulaire + if ($is_new) { + $form->setAttribute('action', $this->url()->fromRoute('galerie/add')); + } else { + $form->setAttribute('action', $this->url()->fromRoute('galerie/edit', array('id' => $id))); + } + $form->prepare(); + + // On passe la main à la vue + return new ViewModel(array( + 'id' => $id, + 'form' => $form, + 'is_new' => $is_new, + )); } public function delAction() { - return array(); + return $this->redirect()->toRoute('galerie/view', array( + 'id' => $this->params()->fromRoute('id', null), + )); } public function viewAction() - { - return array(); + { + $id = $this->params()->fromRoute('id', null); + $galerie = $this->_getGalerieInfoTable()->any($id); + return new ViewModel(array( + 'id' => $id, + 'galerie' => $galerie, + )); } + }