* @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org) * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL * @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL * @version $Id: Bdd.php 403 2012-02-22 14:35:20Z gduche $ */ class Navigation { private $parametres; private $urlNavigation; private $total; /** * Constructeur de la classe Navigation * @param Array $parametres (optionnel) la liste des paramètre issus du Conteneur * */ public function __construct($parametres = null) { $this->parametres = $parametres; } /** * Obtenir la valeur courante de départ * */ public function getDepart() { return isset($this->parametres['navigation.depart']) ? $this->parametres['navigation.depart'] : 0; } /** * Obtenir la limite courante * */ public function getLimite() { $limite = 10; if (isset($this->parametres['navigation.limite']) && is_numeric($this->parametres['navigation.limite'])) { $limite = $this->parametres['navigation.limite']; $limite = ($limite < 1000) ? $limite : 1000;// Pour éviter les abus ! } return $limite; } /** * Configurer l'Url de navigation en fonction du fichier de configuration * */ public function chargerUrl() { $this->urlNavigation = new Url(Config::get('url_service')); $this->urlNavigation->setOption(Url::OPTION_ENCODER_VALEURS, true); } /** * Obtenir l'url en fonction d'un départ et d'une limite donnée * @param int $depart l'entier de départ * @param int $limite le nombre d'éléments limite * */ public function getUrl($depart = null, $limite = null) { if ($depart == null && $limite == null) { return $this->urlNavigation; } else { return $this->obtenirUrlNavigation($depart, $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->parametres; $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->getUrl($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->getUrl($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; } } ?>