Rev 1794 | Rev 1806 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Navigation gère les url de navigation en fonction d'un départ et d'une limite** @category DEL* @package Services* @subpackage Bibliotheque* @version 0.1* @author Mathias CHOUET <mathias@tela-botanica.org>* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @author Aurelien PERONNET <aurelien@tela-botanica.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>*/class Navigation {private $conteneur;private $parametresUrl;private $urlNavigation;private $total;private $sansLimite;/*** Constructeur de la classe Navigation* @param Array $parametresUrl (optionnel) la liste des paramètre issus du Conteneur*/public function __construct($conteneur, $parametresUrl = null) {$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;$this->parametresUrl = $parametresUrl;$this->urlNavigation = $this->conteneur->getUrlService();$this->urlNavigation->setOption(Url::OPTION_ENCODER_VALEURS, true);}/*** Obtenir la valeur courante de départ*/public function getDepart() {return $this->conteneur->getParametre('navigation.depart') == null ? 0 : $this->conteneur->getParametre('navigation.depart') ;}/*** Obtenir la limite courante*/public function getLimite() {$limite = 10;if ($this->conteneur->getParametre('navigation.limite') != null && is_numeric($this->conteneur->getParametre('navigation.limite'))) {$limiteParam = $this->conteneur->getParametre('navigation.limite');$limite = ($limiteParam < 1000) ? $limiteParam : 1000;// Pour éviter les abus !}return $limite;}/*** Récupérer l'url de navigation en concaténant d'éventuels paramètres* @param $depart l'entier de départ de la recherche* @param $limite le nombre de résultats à retourner* @param $parametresAdditionnels le tableau contenant les parametres => valeurs additionnels*/private function obtenirUrlNavigation($depart, $limite) {$parametres = $this->parametresUrl;$parametres['navigation.depart'] = $depart;$parametres['navigation.limite'] = $limite;$this->urlNavigation->setRequete($parametres);$url = $this->urlNavigation->getURL();return $url;}/*** Récupérer le lien pour afficher les images précédentes en fonction des paramètres*/public function recupererHrefPrecedent() {$departActuel = $this->getDepart();$limite = $this->getLimite();$departPrecedent = $departActuel - $limite;$url = null;if ($departActuel > 0) {$url = $this->obtenirUrlNavigation($departPrecedent, $limite);}return $url;}/*** Récupérer le lien pour afficher les images suivantes en fonction des paramètres*/public function recupererHrefSuivant() {$departActuel = $this->getDepart();$limite = $this->getLimite();$departSuivant = $departActuel + $limite;$url = null;if ($departSuivant < $this->total) {$url = $this->obtenirUrlNavigation($departSuivant, $limite);}return $url;}/*** Retourner le nombre total d'éléments*/public function getTotal() {return $this->total;}/*** Enregistrer le nombre total d'éléments* @param int $total le nombre d'éléments*/public function setTotal($total) {$this->total = $total;}/*** Changer la valeur de sans limite pour ne pas l'afficher dans l'entete* */public function setSansLimite() {$this->sansLimite = true;}/*** Créer l'entête en fonction des paramètres donnés*/public function getEntete() {$entete = array();$entete['masque'] = $this->conteneur->getMasque()->getChaineMasque();$entete['total'] = $this->getTotal();if ($this->sansLimite == false) {$entete['depart'] = $this->getDepart();$entete['limite'] = $this->getLimite();$lienPrecedent = $this->recupererHrefPrecedent();if ($lienPrecedent != null) {$entete['href.precedent'] = $lienPrecedent;}$lienSuivant = $this->recupererHrefSuivant();if ($lienSuivant != null) {$entete['href.suivant'] = $lienSuivant;}}return $entete;}}