Subversion Repositories eFlore/Applications.del

Rev

Rev 1293 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
/**
* Navigation gère les url de navigation en fonction d'un départ et d'une limite

* @category php 5.2
* @package del
* @author Grégoire Duché <gregoire@tela-botanica.org>
* @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;
        }

}
?>