Subversion Repositories eFlore/Applications.coel-consultation

Rev

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

<?php
// declare(encoding='UTF-8');
/**
 * Classe contenant les données de l'ontologie des Collections en Ligne.
 * Elle contient un cache de l'ontologie.
 * C'est un Singleton.
 *
 * @package             Collection
 * @category    php 5.2
 * @author              Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @copyright   2010 Tela-Botanica
 * @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             SVN: $Id: Ontologie.php 22 2010-03-30 10:50:03Z jpm $
 *
 */
class Ontologie {
        public static $ontologie_liste = array();
        public static $ontologie_valeur = array(); 

        public static function chargerListe($id_liste) {
                $retour = false;
                if (!isset(self::$ontologie_liste[$id_liste])) {
                        $metadonnees = new MetadonneeDao();
                        $donnees = $metadonnees->getOntologie($id_liste);
                        $traitementValeursOk = self::traiterValeurs($donnees['valeurs']);
                        if ($traitementValeursOk) {
                                self::$ontologie_liste[$id_liste] = $donnees['valeurs'];
                                $retour = true;
                        }
                } else {
                        $retour = true;
                }
                return $retour;
        }
        
        public static function getListe($id_liste) {
                $retour = false;
                $chargementOk = self::chargerListe($id_liste);
                if ($chargementOk) {
                        $retour = self::$ontologie_liste[$id_liste];
                }
                return $retour;
        }
        
        public static function getListeFormatee($id_liste) {
                $retour = false;
                $liste = self::getListe($id_liste);
                if ($liste !== false) {
                        foreach ($liste as $cle => $valeur) {
                                $liste[$cle] = self::formaterTableauValeur($valeur);
                        }
                        $retour = $liste;
                }
                return $retour;
        }

        public static function getListeTrieeParAbreviation($id_liste) {
                $retour = false;
                $liste = self::getListe($id_liste);
                if ($liste !== false) {
                        $liste_par_abr = array();
                        foreach ($liste as $cle => $valeur) {
                                $valeur_fromatee = self::formaterTableauValeur($valeur);
                                $abreviation = $valeur_fromatee['abreviation'];
                                $liste_par_abr[$abreviation] = $valeur_fromatee;
                        }
                        $retour = $liste_par_abr;
                }
                return $retour;
        }
        
        public static function chargerValeur($id_valeur) {
                $retour = true;
                if (!isset(self::$ontologie_valeur[$id_valeur])) {
                        $metadonnees = new MetadonneeDao();
                        $donnees = $metadonnees->getOntologieValeur($id_valeur);
                        $retour = self::traiterValeurs($donnees['valeurs']);
                }
                return $retour;
        }
        
        public static function getValeur($id_valeur) {
                $retour = false;
                $chargementOk = self::chargerValeur($id_valeur);
                if ($chargementOk) {
                        $retour = self::$ontologie_valeur[$id_valeur];
                }
                return $retour;
        }
        
        public static function getValeurNom($id_valeur) {
                $retour = false;
                $valeur = self::getValeur($id_valeur);
                if ($valeur !== false) {
                        $retour = $valeur['nom'];
                }
                return $retour;
        }
        
        private static function traiterValeurs($valeurs) {
                $retour = true;
                if (is_null($valeurs)) {
                        $retour = false;
                } else {
                        if (count($valeurs) == 0) {
                                $retour = false;
                        } else {
                                foreach ($valeurs as $valeur) {
                                        self::$ontologie_valeur[$valeur['cmlv_id_valeur']] = self::formaterTableauValeur($valeur);
                                }
                        }
                }
                return $retour;
        }
        
        private static function formaterTableauValeur($valeur) {
                $valeur_formatee = array();
                if (is_array($valeur) && count($valeur) > 0) {
                        $valeur_formatee = array(
                                'id' => $valeur['cmlv_id_valeur'],
                                'parent' => $valeur['cmlv_ce_parent'],
                                'projet' => $valeur['cmlv_ce_projet'], 
                                'nom' => $valeur['cmlv_nom'],
                                'abreviation' => $valeur['cmlv_abreviation'],
                                'description' => $valeur['cmlv_description'],
                                'meta' => $valeur['cmlv_ce_meta']);
                }
                return $valeur_formatee;
        }
}
?>