Subversion Repositories eFlore/Applications.del

Rev

Rev 905 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
/**
 * 
 * */
class Conteneur {
        protected $parametres = array();
        protected $partages = array();
        protected $masque = array();
        protected $urlNavigation;
        protected $total;
        
        public function __construct(array $parametres = null) {
                $this->parametres = is_null($parametres) ? array() : $parametres;
                                
        }
        
        public function chargerConfiguration($chemin) {
                $cheminConfigurations = Config::get('chemin_configurations');
                Config::charger($cheminConfigurations.DS.$chemin);
                $this->chargerMasque();
                $this->chargerUrl();
        }
        
        public function getDepart() {
                return isset($this->parametres['navigation.depart']) ? $this->parametres['navigation.depart'] : 0;
        }
        
        public function getLimite() {
                return isset($this->parametres['navigation.limite']) ? $this->parametres['navigation.limite'] : 10;
        }
        
        private function chargerMasque() {
                $masques = Config::get('masques_possibles');
                $masquesPossibles = explode(',', $masques);
                
                foreach ($this->parametres as $id => $parametre) {
                        if (strpos($id, 'masque.') === 0) {
                                if (in_array(str_replace('masque.', '', $id), $masquesPossibles)) {
                                        $this->masque[$id] = $parametre;
                                } 
                        }
                }
                
        }
        
        private function chargerUrl() {
                $this->UrlNavigation = new Url(Config::get('url_service'));
                $this->UrlNavigation->setOption(Url::OPTION_ENCODER_VALEURS, true);
        }
        
        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;
        }
        
        public function getTotal() {
                return $this->total;
        }
        
        public function setTotal($total) {
                $this->total = $total;
        }
        /**
        * Créer l'entête en fonction des paramètres donnés
        * */
        public function getEntete() {
                $entete = array();
                $entete['masque'] = $this->getChaineMasque();
                $entete['depart'] = $this->getDepart();
                $entete['limite'] = $this->getLimite();
                $entete['total'] = $this->getTotal();
                $lienPrecedent = $this->recupererHrefPrecedent();
        
                if ($lienPrecedent != null) {
                        $entete['entete.precedent'] = $lienPrecedent;
                }
        
                $lienSuivant = $this->recupererHrefSuivant();
                if ($lienSuivant) {
                        $entete['entete.suivant'] = $lienSuivant;
                }
                return $entete;
        }
        
        /**
        * Récupérer le lien pour afficher les images précédentes en fonction des paramètres
        * */
        private 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
         * */
        private function recupererHrefSuivant() {
                
                $departActuel = $this->getDepart();
                $limite = $this->getLimite();
                $departSuivant = $departActuel + $limite;
                $url = null;
                if ($departSuivant < $this->total) {
                        $url = $this->getUrl($departSuivant, $limite);
                }
                return $url;
        }
        
        public function getMasque($id = null) {
                if (isset($id)) {
                        return $this->masque['masque.'.$id];
                } else {
                        return $this->masque;
                }       
        }
        
        public function getChaineMasque() {
                $chaine = array();
                foreach ($this->masque as $id => $valeur) {
                        $chaine[] = $id.'='.$valeur;
                }
                return implode('&', $chaine);
        }
        
        public function getParametre($cle) {
                $valeur = isset($this->parametres[$cle]) ? $this->parametres[$cle] : Config::get($cle);
                return $valeur;
        }
        public function getParametreTableau($cle) {
                $tableau = array();
                $parametre = $this->getParametre($cle);
                if (empty($parametre) === false) {
                        $tableauPartiel = explode(',', $parametre);
                        $tableauPartiel = array_map('trim', $tableauPartiel);
                        foreach ($tableauPartiel as $champ) {
                                if (strpos($champ, '=') === false) {
                                        $tableau[] = trim($champ);
                                } else {
                                        list($cle, $val) = explode('=', $champ);
                                        $tableau[trim($cle)] = trim($val);
                                }
                        }
                }
                return $tableau;
        }

        public function setParametre($cle, $valeur) {
                $this->parametres[$cle] = $valeur;
        }

        public function getParametresUrl() {
                if (!isset($this->partages['Parametres'])){
                        $this->partages['Parametres'] = new Parametres($this->parametres['parametres'], $this->getBdd());
                }
                return $this->partages['Parametres'];
        }

        public function getParametresUrlVerificateur() {
                if (!isset($this->partages['ParametresVerificateur'])){
                        $parametres = $this->getParametresUrl();
                        $parametresAPI = $this->getParametreTableau('parametresAPI');
                        $this->partages['ParametresVerificateur'] = new ParametresVerificateur($parametres, $parametresAPI);
                }
                return $this->partages['ParametresVerificateur'];
        }

        public function getRessourcesUrl() {
                if (!isset($this->partages['Ressources'])){
                        $this->partages['Ressources'] = new Ressources($this->parametres['ressources']);
                }
                return $this->partages['Ressources'];
        }

        public function getRessourcesUrlVerificateur() {
                if (!isset($this->partages['RessourcesVerificateur'])){
                        $ressources = $this->getRessourcesUrl();
                        $projetsDispo = $this->getParametreTableau('projetsDispo');
                        $servicesDispo = $this->getParametreTableau('servicesDispo');
                        $this->partages['RessourcesVerificateur'] = new RessourcesVerificateur($ressources, $projetsDispo, $servicesDispo);
                }
                return $this->partages['RessourcesVerificateur'];
        }

        public function getVersionVerificateur() {
                if (!isset($this->partages['VersionVerificateur'])){
                        $ressources = $this->getRessourcesUrl();
                        $parametres = $this->getParametresUrl();
                        $versions = $this->getVersions();
                        $this->partages['VersionVerificateur'] = new VersionVerificateur($ressources, $parametres, $versions);
                }
                return $this->partages['VersionVerificateur'];
        }

        public function getBdd() {
                if (!isset($this->partages['Bdd'])){
                        $this->partages['Bdd'] = new Bdd();
                }
                return $this->partages['Bdd'];
        }

        public function getCacheSimple($options = array()) {
                $cache = new CacheSimple($options);
                return $cache;
        }

        public function getVersions() {
                if (!isset($this->partages['Versions'])){
                        $parametres = $this->getParametresUrl();
                        $ressources = $this->getRessourcesUrl();
                        $bdd = $this->getBdd();
                        $versions = new Versions($parametres, $ressources, $bdd);
                        $this->partages['Versions'] = $versions;
                }
                return $this->partages['Versions'];
        }

        public function getProjet() {
                if (!isset($this->partages['Projet'])){
                        $ressources = $this->getRessourcesUrl();
                        $projet = new Projet($ressources);
                        $projet->setCheminBase($this->getParametre('cheminBase'));
                        $projet->setCheminConfig($this->getParametre('chemin_configurations'));
                        $projet->setCheminBiblio($this->getParametre('chemin_bibliotheque'));
                        $projet->initialiser();
                        $projet->setParamsVerif($this->getParametresUrlVerificateur());
                        $projet->setRessourcesVerif($this->getRessourcesUrlVerificateur());
                        $projet->setVersionVerif($this->getVersionVerificateur());
                        $projet->setServiceGenerique($this->getServiceGenerique());
                        $this->partages['Projet'] = $projet;
                }
                return $this->partages['Projet'];
        }

        /**
        * Créer la chaine de limite de requête en fonction des paramètres donnés
        * */
        public function getLimitSql() {
                return ' LIMIT '.$this->getDepart().', '.$this->getLimite();
        }
        
        public function getSchemaBdd() {
                return $this->getParametre('schemaBdd');
        }
        
        public function getServiceGenerique() {
                $ressources = $this->getRessourcesUrl();
                $classe = $ressources->getServiceClasse();
                $classeGenerique = $classe.'Generique';
                if ($ressources->getServiceNom() == 'noms' || $ressources->getServiceNom() == 'taxons') {
                        $service = new $classeGenerique($this->getRessourcesUrl(), $this->getParametresUrl(), $this->getNomDao(), $this->getNomFormateur());
                        if ($classe == 'NomsListe') {
                                $service->setListeUrl($this->getParametre('listeUrl'));
                        }
                } else if ($ressources->getServiceNom() == 'ontologies') {
                        $service = new $classeGenerique($this->getRessourcesUrl(), $this->getParametresUrl(), $this->getOntologiesDao(), $this->getOntologiesFormateur());
                        if ($classe == 'OntologiesListe') {
                                $service->setListeUrl($this->getParametre('listeUrlOntologies'));
                        }
                }

                return $service;
        }
}
?>