Rev 950 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/**** fonctions et paramètres communs aux traitement des syntaxons* - traitement de l'ontologie* - fonction utiles pour les paramètres de configuration entre autres* - traitement des tables et de leur version* - traitement de la requête** @package eflore-projets* @author mathilde Salthun-Lassalle* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @version 1.0* @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org)*/require_once(dirname(__FILE__) . '/../../baseflor/Informations.php');class SyntaxonsCommun extends Commun {protected $table = "";protected $format_reponse = 'syntaxons';protected $serviceNom = 'syntaxons';protected $Bdd;protected $syn;protected $niv;protected $limite_requete = array('depart' => 0, 'limite' => 100);protected $requete_condition = array();protected $total_resultat;protected $champs_recherches = ' * ';protected $table_version;protected $version_projet = '+' ;static $cache = array();public function __construct(Conteneur $conteneur) {$this->Bdd = $conteneur->getBdd();$this->syn = $this->getParametreTableauSpe('Paramètres.synonymes');$this->niv = $this->getParametreTableauSpe('Paramètres.niveaux');}//+---------------------------------------------------outils------------------------------------------------//protected function getParametreTableauSpe($cle) {$tableau = array();$parametre = Config::get($cle);if (empty($parametre) === false) {$tableauPartiel = explode(',', $parametre);$tableauPartiel = array_map('trim', $tableauPartiel);foreach ($tableauPartiel as $champ) {$tableau[] = trim($champ,"'");// spécificité pour le = ? des synonymes}}return $tableau;}//la fonction php array_filters ne marche pas sur le serveurprotected function enleverValeursVides($tableau) {$tab = array();foreach ($tableau as $cle => $valeur) {if ($valeur != '' && is_int($cle)) {$tab[] = $valeur;} elseif ($valeur != '' && is_string($cle)) {$tab[$cle] = $valeur;}}return $tab;}//+++------------------------------traitement des versions----------------------------------------++protected function traiterVersion($valeur) {if (preg_match('/^[0-9]+(?:[._][0-9]+)*$/', $valeur) || $valeur == '+' || $valeur == '*') {$this->version_projet = $valeur;} else {$e = "Erreur : La version est inconnue.";throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);}}protected function definirTables() {$table_num_version = $this->recupererVersionDisponible();$prefixe_table = config::get('bdd_table');if ( in_array($this->version_projet,$table_num_version) ) {$this->table_version[] = $prefixe_table.'_v'.$this->version_projet;} elseif ($this->version_projet == '+') {$derniere_version = $table_num_version[count($table_num_version) - 1];$this->table_version[] = $prefixe_table.'_v'.str_replace('.', '_', $derniere_version);} elseif ($this->version_projet == '*') {foreach ($table_num_version as $num_version) {$this->table_version[] = $prefixe_table.'_v'.str_replace('.', '_', $num_version);}} else {$e = "Erreur : La version est inconnue.";throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);}}//+------------------------------------ontologies----------------------------------------------------+protected function recupererOntologiesNiveau($valeur, $code){$ontologie = array();$url = Config::get('url_service_base').Config::get('nom_projet').'/ontologies/'.$code.':'.urlencode(urlencode($valeur));if(array_key_exists($url, self::$cache)) {$val = self::$cache[$url];} else {$val = $this->consulterHref($url);self::$cache[$url] = $val;}$ontologie['niveau.code'] = $valeur;$ontologie['niveau.libelle'] = $val->nom;$ontologie['niveau.href'] = $url;return $ontologie;}protected function recupererOntologiesNiveauSyn($niveau){$ontologie = array();$synonymes = explode(' ',$niveau[1]);$libelle = array();$detail = array();foreach ($synonymes as $syn) {if ($syn == '=') {$syn = 'equi';} elseif ($syn == '= ?') {$syn = 'prob';}if ($syn != '' && $syn != '?') {$detail[] = $this->recupererOntologiesNiveau($syn, 'syn');$dernier = end($detail);$libelle[] = $dernier['niveau.libelle'].' ';}}$ontologie['niveau.code'] = $niveau[0];$ontologie['niveau.libelle'] = 'synonyme '.implode(' - ',$libelle);if (isset($niveau[2])) {$ontologie['niveau.libelle'] .= ' '.$niveau[2];}$ontologie['niveau.detail'] = $detail;return $ontologie;}protected function traiterOntologieNiveau($niveau) {$ontologie = array();if ( preg_match('/syn {0,1}(['.implode($this->syn).']*)( *\[.+\])*/',$niveau,$retour)) {$ontologie = $this->recupererOntologiesNiveauSyn($retour);} else {$ontologie = $this->recupererOntologiesNiveau($niveau, 'UP');}return $ontologie;}//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+protected function assemblerLaRequete() {$requete = ' SELECT '.$this->champs_recherches.' FROM '.$this->table.' '.Informations::retournerRequeteCondition($this->requete_condition).' '.$this->delimiterResultatsRequete();return $requete;}protected function delimiterResultatsRequete() {$this->total_resultat = Informations::calculerTotalResultat($this->getBdd(),$this->table,Array(),$this->requete_condition);$requete_limite = '';if (($this->limite_requete['depart'] <= $this->total_resultat) ){if (($this->limite_requete['limite'] + $this->limite_requete['depart'] )< $this->total_resultat ){$requete_limite = 'LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];}} else {$e = "Erreur : la valeur pour le paramètre navigation.départ est supérieure"." au nombre total de résultats.";throw new Exception($e, RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE);}return $requete_limite;}}?>