Rev 648 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/**** syntaxons/relations -> retourne toutes les relations d'un syntaxon en fonction du numéro catminat** /syntaxons/catminat:#code_catminat/relations/niveaux_sup --> retourne les niveaux supérieurs d'un syntaxon* /syntaxons/catminat:#code_catminat/relations/synonymie --> retourne tous les synonymes pour un code catminat** @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)**/class SyntaxonsRelation extends SyntaxonsCommun{public function consulter($ressources, $parametres) {$this->ressources = $ressources;$this->parametres = $parametres;$this->traiterRessources();$this->traiterParametres();$this->definirTables();$resultats = null;$requete = '';foreach ($this->table_version as $version) {$this->table = $version;$requete = $this->assemblerLaRequete();$resultat = $this->Bdd->recupererTous($requete);$versionResultat = $this->traiterResultat($resultat, $this->version_projet);if (count($this->table_version) > 1) {$resultats[$version] = $versionResultat;} else {$resultats = $versionResultat;}}return $resultats;}function __construct(Conteneur $conteneur) {parent::__construct($conteneur);$this->champs_recherches = 'cle, code_catminat, syntaxon, code_fixe_nom, code_natura_2000, niveau ';}//surchargée car le web-service est appelé par SyntaxonsRelationsToutes.//ne doit pas renvoyer une erreur mais un résultat vide.public function traiterResultat($resultat, $version) {$versionResultat = null;if ($resultat == '') {$message = 'La requête SQL formée comporte une erreur!';$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;throw new Exception($message, $code);} elseif ($resultat) {$versionResultat = $this->retournerResultatFormate($resultat);} else {$versionResultat = 'Les données recherchées sont introuvables';}return $versionResultat;}//+-------------------------------------traitement des ressources et des paramètres----------------------------------------+//public function traiterRessources() {$catminat='';if(preg_match("/catminat:(([0-9]{2}\-$)|([0-9]{2}\-[0-9]\.$)|([0-9]{2}\-(?:[0-9]\.){1,5}[0-9]$)|([0-9]{2}\-(?:[0-9]\.){4,5}[0-9]\-[0-9]+(?:bis|ter|quater){0,1}$))/",$this->ressources[0], $retour)) {$this->catminat = str_replace('-', '/',$retour[1]);$this->traiterRessourcesRelations();}elseif ($this->ressources[0]) {$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.';throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);}return $catminat;}public function traiterRessourcesRelations(){if($this->ressources[1] == 'relations') {switch($this->ressources[2]) {case 'niveaux-sup':$catminat_sup = $this->chercherCatminatSuperieurs();if (!empty($catminat_sup)) {if (count($catminat_sup)>1) {$this->requete_condition[] = ' code_catminat in ('.implode(',',$catminat_sup).')';} else {$this->requete_condition[] = ' code_catminat = '.$catminat_sup[0].' ';}} else {$e = 'Erreur dans l\'url de votre requête : le code catminat est trop court.';throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);}break;case 'synonymie' :$this->requete_condition[] = " niveau LIKE 'syn%' and code_catminat = '".$this->catminat."' " ;break;default :$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.';throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);}} else {$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.';throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);}}//ne renvoie que les supérieurs ( sans la valeur initiale )public function chercherCatminatSuperieurs() {$catminat_sup = array();$catminat_slash = explode('/',$this->catminat);$catminat_slash = $this->enleverValeursVides($catminat_slash);$taille_slash = count($catminat_slash);if ($taille_slash > 1) {$catminat_sup[0] = "'".array_shift($catminat_slash)."/'";$niveaux = array_shift($catminat_slash);$unites = explode('.',trim($niveaux)); //attention explode peut renvoyer des cases vides (voir la doc php)$unites = $this->enleverValeursVides($unites);$taille = ($taille_slash == 3) ? count($unites) : count($unites)-1 ;for ($i=0; $i< $taille ; $i++) {$sup = "'".trim($catminat_sup[$i],"'");if ($i == 0) {$sup .= $unites[$i].".'";} elseif ($i == 1) {$sup .= $unites[$i]."'";} else {$sup .= ".".$unites[$i]."'";}$catminat_sup[] = $sup;}}return $catminat_sup;}public function traiterParametres() {if (isset($this->parametres) && !empty($this->parametres) ) {foreach ($this->parametres as $param => $valeur) {switch ($param) {case 'navigation.depart' :$this->definirNavigationDepart($valeur);break;case 'navigation.limite' :$this->definirNavigationLimite($valeur);break;case 'version.projet' :$this->traiterVersion($valeur);break;case 'masque.catminat' :$this->traiterCatminat($valeur);break;case 'masque.niveau' :$this->traiterNiveau($valeur);break;case 'masque.fixe':$this->requete_condition[] = ' code_fixe_nom = \''.$valeur.'\' ';break;case 'retour.champs' :$this->champs_recherches .= ','.$valeur.' ';break;case 'masque.retenu' :$this->traiterRetenu($valeur);break;default :$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " '.$param.' " n\'existe pas.';$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); break;}}}}public function traiterRetenu($valeur) {if ($this->ressources[2] == 'niveaux-sup') {$valeur = trim($valeur);if( $valeur == 'true') {$this->requete_condition[] = ' niveau NOT LIKE \'syn%\' ';} elseif ( $valeur == 'false') {$this->requete_condition[] = ' niveau LIKE \'syn%\' ';}} else {$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " masque.retenu " n\'existe pas.';$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);}}public function traiterCatminat($valeur) {if ($this->ressources[2] == 'niveaux-sup') {$valeur = trim($valeur);$valeur = str_replace('-', '/', $valeur);$this->requete_condition[] = ' code_catminat = '.$this->getBdd()->proteger($valeur).'';} else {$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " masque.catminat " n\'existe pas.';$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); break;}}public function traiterNiveau($valeur) {if ($this->ressources[2] == 'niveaux-sup') {$valeur = strtoupper(trim($valeur));if (in_array($valeur,$this->niv)) {$this->requete_condition[] = ' niveau = '.$this->getBdd()->proteger($valeur).'';} else {$e = "Erreur : valeur inconnue pour masque.niveau."." valeurs possibles : ALL|ORD|CLA|SUBCLA|SUBORD|SUBALL|ASS|SUBASS|BC|DC|GRPT";throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);}} else {$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " masque.niveau " n\'existe pas.';$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);}}//+--------------------------formatages de resultats -------------------------------------------+//public function retournerResultatFormate($resultat) {$resultat_json = array();$resultat_json['entete'] = $this->ajouterEnteteResultat();foreach ($resultat as $cle => $res) {$resultat[$cle]['href'] = $this->ajouterHref('syntaxons','cle:'.$res['cle']);$resultat[$cle] = array_merge($resultat[$cle],$this->traiterOntologieNiveau($res['niveau']));unset($resultat[$cle]['niveau']);}$resultat_json['resultat'] = $resultat;return $resultat_json;}public function ajouterEnteteResultat() {$entete['depart'] = $this->limite_requete['depart'];$entete['limite'] = $this->limite_requete['limite'];$entete['total'] = $this->total_resultat;$entete['version'] = $this->version_projet;$ressources = (empty($this->ressources)) ? '/syntaxons' : '/syntaxons/' ;$url = $this->formulerUrl($this->total_resultat, $ressources.implode('/',$this->ressources));if (isset($url['precedent']) && $url['precedent'] != '') {$entete['href.precedent'] = $url['precedent'];}if (isset($url['suivant']) && $url['suivant'] != '') {$entete['href.suivant'] = $url['suivant'];}return $entete;}}?>