| 584 | mathilde | 1 | <?php
 | 
        
           |  |  | 2 | /**
 | 
        
           |  |  | 3 |  *
 | 
        
           |  |  | 4 |  *  syntaxons/relations -> retourne toutes les relations d'un syntaxon en fonction du numéro catminat
 | 
        
           |  |  | 5 |  *
 | 
        
           |  |  | 6 |  *  /syntaxons/catminat:#code_catminat/relations/niveaux_sup --> retourne les niveaux supérieurs d'un syntaxon
 | 
        
           |  |  | 7 |  *  /syntaxons/catminat:#code_catminat/relations/synonymie --> retourne tous les synonymes pour un code catminat
 | 
        
           |  |  | 8 |  *
 | 
        
           |  |  | 9 |  * @package eflore-projets
 | 
        
           |  |  | 10 | * @author mathilde Salthun-Lassalle
 | 
        
           |  |  | 11 | * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 | 
        
           |  |  | 12 | * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 | 
        
           |  |  | 13 | * @version 1.0
 | 
        
           |  |  | 14 | * @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org)
 | 
        
           |  |  | 15 |  *
 | 
        
           |  |  | 16 |  */
 | 
        
           |  |  | 17 |   | 
        
           |  |  | 18 | class SyntaxonsRelation  extends SyntaxonsCommun{
 | 
        
           |  |  | 19 |   | 
        
           |  |  | 20 | 	public function consulter($ressources, $parametres) {
 | 
        
           |  |  | 21 | 		$this->ressources = $ressources;
 | 
        
           |  |  | 22 | 		$this->parametres = $parametres;
 | 
        
           |  |  | 23 | 		$this->traiterRessources();
 | 
        
           |  |  | 24 | 		$this->traiterParametres();
 | 
        
           |  |  | 25 | 		$this->definirTables();
 | 
        
           |  |  | 26 | 		$resultats = null;
 | 
        
           |  |  | 27 | 		$requete = '';
 | 
        
           |  |  | 28 | 		foreach ($this->table_version as $version) {
 | 
        
           |  |  | 29 | 			$this->table = $version;
 | 
        
           |  |  | 30 | 			$requete = $this->assemblerLaRequete();
 | 
        
           |  |  | 31 | 			$resultat =  $this->Bdd->recupererTous($requete);
 | 
        
           |  |  | 32 | 			$versionResultat = $this->traiterResultat($resultat);
 | 
        
           |  |  | 33 | 			if (count($this->table_version) > 1) {
 | 
        
           |  |  | 34 | 				$resultats[$version] = $versionResultat;
 | 
        
           |  |  | 35 | 			} else {
 | 
        
           |  |  | 36 | 				$resultats = $versionResultat;
 | 
        
           |  |  | 37 | 			}
 | 
        
           |  |  | 38 | 		}
 | 
        
           |  |  | 39 | 		return $resultats;
 | 
        
           |  |  | 40 | 	}
 | 
        
           |  |  | 41 |   | 
        
           |  |  | 42 |   | 
        
           |  |  | 43 | 	function __construct(Conteneur $conteneur) {
 | 
        
           |  |  | 44 | 		 parent::__construct($conteneur);
 | 
        
           |  |  | 45 | 		 $this->champs_recherches = 'cle, code_catminat, syntaxon,  code_fixe_nom, code_natura_2000, niveau ';
 | 
        
           |  |  | 46 | 	}
 | 
        
           |  |  | 47 |   | 
        
           |  |  | 48 |   | 
        
           |  |  | 49 |   | 
        
           |  |  | 50 | 	//surchargée car  le web-service est appelé par SyntaxonsRelationsToutes.
 | 
        
           |  |  | 51 | 	//ne doit pas renvoyer une erreur mais un résultat vide.
 | 
        
           |  |  | 52 | 	public function traiterResultat($resultat) {
 | 
        
           |  |  | 53 | 		$versionResultat = null;
 | 
        
           |  |  | 54 | 		if ($resultat == '') {
 | 
        
           |  |  | 55 | 			$message = 'La requête SQL formée comporte une erreur!';
 | 
        
           |  |  | 56 | 			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
 | 
        
           |  |  | 57 | 			throw new Exception($message, $code);
 | 
        
           |  |  | 58 | 		} elseif ($resultat) {
 | 
        
           |  |  | 59 | 			$versionResultat = $this->retournerResultatFormate($resultat);
 | 
        
           |  |  | 60 | 		} else {
 | 
        
           |  |  | 61 | 			$versionResultat = 'Les données recherchées sont introuvables';
 | 
        
           |  |  | 62 | 		}
 | 
        
           |  |  | 63 | 		return $versionResultat;
 | 
        
           |  |  | 64 | 	}
 | 
        
           |  |  | 65 |   | 
        
           |  |  | 66 |   | 
        
           |  |  | 67 | //+-------------------------------------traitement des ressources et des paramètres----------------------------------------+//
 | 
        
           |  |  | 68 |   | 
        
           |  |  | 69 |   | 
        
           |  |  | 70 | 	public function traiterRessources() {
 | 
        
           |  |  | 71 | 		$catminat='';
 | 
        
           |  |  | 72 | 		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)) {
 | 
        
           |  |  | 73 | 			$this->catminat = str_replace('-', '/',$retour[1]);
 | 
        
           |  |  | 74 | 			$this->traiterRessourcesRelations();
 | 
        
           |  |  | 75 | 		}elseif ($this->ressources[0]) {
 | 
        
           |  |  | 76 | 			$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.';
 | 
        
           |  |  | 77 | 			throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
 | 
        
           |  |  | 78 | 		}
 | 
        
           |  |  | 79 | 		return $catminat;
 | 
        
           |  |  | 80 | 	}
 | 
        
           |  |  | 81 |   | 
        
           |  |  | 82 | 	public function traiterRessourcesRelations(){
 | 
        
           |  |  | 83 | 		if($this->ressources[1] == 'relations') {
 | 
        
           |  |  | 84 | 				switch($this->ressources[2]) {
 | 
        
           |  |  | 85 | 					case 'niveaux-sup':
 | 
        
           |  |  | 86 | 						$catminat_sup = $this->chercherCatminatSuperieurs();
 | 
        
           |  |  | 87 | 						if (!empty($catminat_sup)) {
 | 
        
           |  |  | 88 | 							if (count($catminat_sup)>1) {
 | 
        
           |  |  | 89 | 								$this->requete_condition[] = ' code_catminat in ('.implode(',',$catminat_sup).')';
 | 
        
           |  |  | 90 | 							} else {
 | 
        
           |  |  | 91 | 								$this->requete_condition[] = ' code_catminat = '.$catminat_sup[0].' ';
 | 
        
           |  |  | 92 | 							}
 | 
        
           |  |  | 93 | 						} else  {
 | 
        
           |  |  | 94 | 								$e = 'Erreur dans l\'url de votre requête : le code catminat est trop court.';
 | 
        
           |  |  | 95 | 								throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
 | 
        
           |  |  | 96 | 						}
 | 
        
           |  |  | 97 | 						break;
 | 
        
           |  |  | 98 | 					case 'synonymie' :
 | 
        
           |  |  | 99 | 						$this->requete_condition[] = " niveau LIKE 'syn%' and code_catminat = '".$this->catminat."' " ;
 | 
        
           |  |  | 100 | 						break;
 | 
        
           |  |  | 101 | 					default :
 | 
        
           |  |  | 102 | 						$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.';
 | 
        
           |  |  | 103 | 					throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
 | 
        
           |  |  | 104 | 				}
 | 
        
           |  |  | 105 | 		} else {
 | 
        
           |  |  | 106 | 			$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.';
 | 
        
           |  |  | 107 | 			throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
 | 
        
           |  |  | 108 | 		}
 | 
        
           |  |  | 109 | 	}
 | 
        
           |  |  | 110 |   | 
        
           |  |  | 111 | 	//ne renvoie que les supérieurs ( sans la valeur initiale )
 | 
        
           |  |  | 112 | 	public function chercherCatminatSuperieurs() {
 | 
        
           |  |  | 113 | 		$catminat_sup = array();
 | 
        
           |  |  | 114 | 		$catminat_slash  = explode('/',$this->catminat);
 | 
        
           |  |  | 115 | 		$catminat_slash = $this->enleverValeursVides($catminat_slash);
 | 
        
           |  |  | 116 |   | 
        
           |  |  | 117 | 		$taille_slash = count($catminat_slash);
 | 
        
           |  |  | 118 | 		if ($taille_slash > 1) {
 | 
        
           |  |  | 119 | 			$catminat_sup[0] = "'".array_shift($catminat_slash)."/'";
 | 
        
           |  |  | 120 | 			$niveaux = array_shift($catminat_slash);
 | 
        
           |  |  | 121 | 			$unites = explode('.',trim($niveaux)); //attention explode peut renvoyer des cases vides (voir la doc php)
 | 
        
           |  |  | 122 | 			$unites = $this->enleverValeursVides($unites);
 | 
        
           |  |  | 123 | 			$taille = ($taille_slash == 3) ? count($unites) : count($unites)-1 ;
 | 
        
           |  |  | 124 | 			for ($i=0; $i< $taille ; $i++) {
 | 
        
           |  |  | 125 | 				$sup = "'".trim($catminat_sup[$i],"'");
 | 
        
           |  |  | 126 | 				if ($i == 0) {
 | 
        
           |  |  | 127 | 					$sup .= $unites[$i].".'";
 | 
        
           |  |  | 128 | 				} elseif ($i == 1) {
 | 
        
           |  |  | 129 | 					$sup .= $unites[$i]."'";
 | 
        
           |  |  | 130 | 				} else {
 | 
        
           |  |  | 131 | 					$sup .= ".".$unites[$i]."'";
 | 
        
           |  |  | 132 | 				}
 | 
        
           |  |  | 133 | 				$catminat_sup[] = $sup;
 | 
        
           |  |  | 134 | 			}
 | 
        
           |  |  | 135 | 		}
 | 
        
           |  |  | 136 | 		return $catminat_sup;
 | 
        
           |  |  | 137 | 	}
 | 
        
           |  |  | 138 |   | 
        
           |  |  | 139 |   | 
        
           |  |  | 140 | 	public function traiterParametres() {
 | 
        
           |  |  | 141 | 		if (isset($this->parametres) && !empty($this->parametres) ) {
 | 
        
           |  |  | 142 | 			foreach ($this->parametres as $param => $valeur) {
 | 
        
           |  |  | 143 | 				switch ($param) {
 | 
        
           |  |  | 144 | 					case 'navigation.depart'  :
 | 
        
           |  |  | 145 | 						$this->definirNavigationDepart($valeur);
 | 
        
           |  |  | 146 | 						break;
 | 
        
           |  |  | 147 | 					case 'navigation.limite'  :
 | 
        
           |  |  | 148 | 						$this->definirNavigationLimite($valeur);
 | 
        
           |  |  | 149 | 						break;
 | 
        
           |  |  | 150 | 					case 'version.projet' :
 | 
        
           |  |  | 151 | 						$this->traiterVersion($valeur);
 | 
        
           |  |  | 152 | 						break;
 | 
        
           |  |  | 153 | 					case 'masque.catminat' :
 | 
        
           |  |  | 154 | 						$this->traiterCatminat($valeur);
 | 
        
           |  |  | 155 | 						break;
 | 
        
           |  |  | 156 | 					case 'masque.niveau' :
 | 
        
           |  |  | 157 | 						$this->traiterNiveau($valeur);
 | 
        
           |  |  | 158 | 						break;
 | 
        
           |  |  | 159 | 					case 'masque.fixe':
 | 
        
           |  |  | 160 | 						$this->requete_condition[] = ' code_fixe_nom = \''.$valeur.'\' ';
 | 
        
           |  |  | 161 | 						break;
 | 
        
           |  |  | 162 | 					case 'retour.champs' :
 | 
        
           |  |  | 163 | 						$this->champs_recherches .= ','.$valeur.' ';
 | 
        
           |  |  | 164 | 						break;
 | 
        
           |  |  | 165 | 					case 'masque.retenu' :
 | 
        
           |  |  | 166 | 						$this->traiterRetenu($valeur);
 | 
        
           |  |  | 167 | 						break;
 | 
        
           |  |  | 168 | 					default :
 | 
        
           |  |  | 169 | 						$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " '
 | 
        
           |  |  | 170 | 					.$param.' " n\'existe pas.';
 | 
        
           |  |  | 171 | 					$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);	break;
 | 
        
           |  |  | 172 | 				}
 | 
        
           |  |  | 173 | 			}
 | 
        
           |  |  | 174 |   | 
        
           |  |  | 175 | 		}
 | 
        
           |  |  | 176 |   | 
        
           |  |  | 177 | 	}
 | 
        
           |  |  | 178 |   | 
        
           |  |  | 179 | 	public function traiterRetenu($valeur) {
 | 
        
           |  |  | 180 | 		if ($this->ressources[2] == 'niveaux-sup') {
 | 
        
           |  |  | 181 | 			$valeur = trim($valeur);
 | 
        
           |  |  | 182 | 			if( $valeur == 'true') {
 | 
        
           |  |  | 183 | 				$this->requete_condition[] = ' niveau NOT LIKE \'syn%\' ';
 | 
        
           |  |  | 184 | 			} elseif ( $valeur == 'false') {
 | 
        
           |  |  | 185 | 				$this->requete_condition[] = ' niveau LIKE \'syn%\' ';
 | 
        
           |  |  | 186 | 			}
 | 
        
           |  |  | 187 | 		} else {
 | 
        
           |  |  | 188 | 			$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " masque.retenu " n\'existe pas.';
 | 
        
           |  |  | 189 | 			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);
 | 
        
           |  |  | 190 | 		}
 | 
        
           |  |  | 191 |   | 
        
           |  |  | 192 | 	}
 | 
        
           |  |  | 193 |   | 
        
           |  |  | 194 | 	public function traiterCatminat($valeur) {
 | 
        
           |  |  | 195 | 		if ($this->ressources[2] == 'niveaux-sup') {
 | 
        
           |  |  | 196 | 			$valeur = trim($valeur);
 | 
        
           |  |  | 197 | 			$valeur = str_replace('-', '/', $valeur);
 | 
        
           |  |  | 198 | 			$this->requete_condition[] = ' code_catminat = '.$this->getBdd()->proteger($valeur).'';
 | 
        
           |  |  | 199 | 		} else {
 | 
        
           |  |  | 200 | 			$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " masque.catminat " n\'existe pas.';
 | 
        
           |  |  | 201 | 			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);	break;
 | 
        
           |  |  | 202 | 		}
 | 
        
           |  |  | 203 | 	}
 | 
        
           |  |  | 204 |   | 
        
           |  |  | 205 | 	public function traiterNiveau($valeur) {
 | 
        
           |  |  | 206 | 		if ($this->ressources[2] == 'niveaux-sup') {
 | 
        
           |  |  | 207 | 			$valeur = strtoupper(trim($valeur));
 | 
        
           |  |  | 208 | 			if (in_array($valeur,$this->niv)) {
 | 
        
           |  |  | 209 | 				$this->requete_condition[] = ' niveau = '.$this->getBdd()->proteger($valeur).'';
 | 
        
           |  |  | 210 | 			} else {
 | 
        
           |  |  | 211 | 				$e = "Erreur : valeur inconnue pour masque.niveau."
 | 
        
           |  |  | 212 | 				." valeurs possibles : ALL|ORD|CLA|SUBCLA|SUBORD|SUBALL|ASS|SUBASS|BC|DC|GRPT";
 | 
        
           |  |  | 213 | 				throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
 | 
        
           |  |  | 214 | 			}
 | 
        
           |  |  | 215 | 		} else {
 | 
        
           |  |  | 216 | 			$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " masque.niveau " n\'existe pas.';
 | 
        
           |  |  | 217 | 			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);
 | 
        
           |  |  | 218 | 		}
 | 
        
           |  |  | 219 | 	}
 | 
        
           |  |  | 220 |   | 
        
           |  |  | 221 |   | 
        
           |  |  | 222 | 	//+--------------------------formatages de resultats  -------------------------------------------+//
 | 
        
           |  |  | 223 |   | 
        
           |  |  | 224 |   | 
        
           |  |  | 225 | 	public function retournerResultatFormate($resultat) {
 | 
        
           |  |  | 226 | 		$resultat_json = array();
 | 
        
           |  |  | 227 | 	$resultat_json['entete'] = $this->ajouterEnteteResultat();
 | 
        
           |  |  | 228 | 		foreach ($resultat as $cle => $res) {
 | 
        
           |  |  | 229 | 			$resultat[$cle]['href'] = $this->ajouterHref('syntaxons','cle:'.$res['cle']);
 | 
        
           |  |  | 230 | 			$resultat[$cle] = array_merge($resultat[$cle],$this->traiterOntologieNiveau($res['niveau']));
 | 
        
           |  |  | 231 | 			unset($resultat[$cle]['niveau']);
 | 
        
           |  |  | 232 | 		}
 | 
        
           |  |  | 233 | 		$resultat_json['resultat'] = $resultat;
 | 
        
           |  |  | 234 | 		return $resultat_json;
 | 
        
           |  |  | 235 | 	}
 | 
        
           |  |  | 236 |   | 
        
           |  |  | 237 | 	public function ajouterEnteteResultat() {
 | 
        
           |  |  | 238 | 		$entete['depart'] = $this->limite_requete['depart'];
 | 
        
           |  |  | 239 | 		$entete['limite'] = $this->limite_requete['limite'];
 | 
        
           |  |  | 240 | 		$entete['total']  =  $this->total_resultat;
 | 
        
           |  |  | 241 | 		$entete['version']  = $this->version_projet;
 | 
        
           |  |  | 242 | 		$ressources = (empty($this->ressources)) ? '/syntaxons' : '/syntaxons/' ;
 | 
        
           |  |  | 243 | 		$url = $this->formulerUrl($this->total_resultat, $ressources.implode('/',$this->ressources));
 | 
        
           |  |  | 244 | 		if (isset($url['precedent']) && $url['precedent'] != '') {
 | 
        
           |  |  | 245 | 			$entete['href.precedent'] = $url['precedent'];
 | 
        
           |  |  | 246 | 		}
 | 
        
           |  |  | 247 | 		if (isset($url['suivant']) && $url['suivant'] != '') {
 | 
        
           |  |  | 248 | 			$entete['href.suivant']   = $url['suivant'];
 | 
        
           |  |  | 249 | 		}
 | 
        
           |  |  | 250 | 		return $entete;
 | 
        
           |  |  | 251 | 	}
 | 
        
           |  |  | 252 |   | 
        
           |  |  | 253 |   | 
        
           |  |  | 254 | }
 | 
        
           |  |  | 255 |   | 
        
           |  |  | 256 | ?>
 |