32,11 → 32,14 |
private $requete_condition = ""; |
private $champs_recherches = '*'; |
private $resultat_json; |
private $nb_ressources; |
protected $limite_requete = array( 'depart' => 0, 'limite' => 10); |
|
|
public function consulter($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->nb_ressources = count($ressources); |
$this->traiterParametres(); |
$this->definirTables(); |
$this->traiterRessources(); |
43,7 → 46,7 |
$resultats = null; |
foreach ($this->table_version as $version) { |
$this->table = $version; |
$requete = $this->assemblerLaRequete(); |
$requete = $this->assemblerLaRequete($table); |
$resultat = $this->Bdd->recupererTous($requete); |
$versionResultat = $this->analyserResultat($resultat); |
if (count($this->table_version) > 1) { |
78,7 → 81,7 |
foreach ($this->parametres as $param => $valeur) { |
switch ($param) { |
case 'categorie' : |
if ($valeur == "description") { |
if ($valeur == "description" && $this->nb_ressources == 1 ) { |
$this->champs_recherches = "num_nomen, BDNT, chorologie, inflorescence," |
." sexualite, ordre_maturation, " |
."pollinisation, fruit, dissemination, couleur_fleur, macule, floraison, type_bio, " |
87,7 → 90,7 |
"OR sexualite != '' OR ordre_maturation != '' OR pollinisation != '' ". |
"OR fruit != '' OR dissemination != '' OR couleur_fleur != '' OR macule != '' ". |
"OR floraison != '' OR type_bio != '' OR form_vegetale != '' )"; |
}elseif ($valeur == "ecologie") { |
}elseif ($valeur == "ecologie" && $this->nb_ressources == 1) { |
$this->champs_recherches = " num_nomen, BDNT, ve_lumiere , ve_temperature," |
." ve_continentalite, ve_humidite_atmos, ve_humidite_edaph, ve_reaction_sol," |
." ve_nutriments_sol, ve_salinite, ve_texture_sol, ve_mat_org_sol, " |
99,18 → 102,25 |
"OR ve_nutriments_sol != '' OR ve_salinite != '' ". |
"OR ve_texture_sol != '' OR ve_mat_org_sol != '' )"; |
} else { |
$e = "Valeur de paramètre inconnue pour 'categorie'."; |
$e = "Valeur de paramètre inconnue pour 'categorie'. Ce paramètre n'est pas autorisé pour informations/#id/relations/catminat"; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
break; |
case 'retour.format' : |
if ($valeur == 'min' || $valeur == 'max') { |
if ($valeur == 'min' || $valeur == 'max' && $this->nb_ressources == 1) { |
$this->retour_format = $valeur; |
break; |
|
} else { |
$e = "Valeur de paramètre inconnue pour 'retour.format'."; |
$e = "Valeur de paramètre inconnue pour 'retour.format'. Ce paramètre n'est pas autorisé pour informations/#id/relations/catminat"; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
break; |
case 'navigation.depart' : |
$this->definirNavigationDepart($valeur); |
break; |
case 'navigation.limite' : |
$this->definirNavigationLimite($valeur); |
break; |
case 'version.projet' : |
$this->traiterVersion($valeur); |
break; |
128,21 → 138,18 |
|
public function traiterRessources() { |
if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[0], $retour)){ |
switch ($retour[1]) { |
case 'bdtfx' : |
$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDTFX' "; |
break; |
case 'bdafx' : |
$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDAFX' "; |
break; |
case 'bdbfx' : |
$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDBFX' "; |
break; |
default : |
$e = 'Erreur dans l\'url de votre requête : </br> Le référentiel " ' |
.$retour[1].' " n\'existe pas.'; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
break; |
$id = $retour[2]; |
$ref = $retour[1]; |
if ($ref == 'bdtfx' || $ref == 'bdafx' || $ref == 'bdbfx') { |
if($this->nb_ressources == 1) { |
$this->requete_condition[] = "num_nomen = ".$id." AND BDNT = '".strtoupper($ref)."' "; |
} else { |
$this->definirParametresRequeteRelations($ref, $id); |
} |
} else { |
$e = 'Erreur dans l\'url de votre requête : </br> Le référentiel " ' |
.$ref.' " n\'existe pas.'; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
|
} else { |
150,13 → 157,38 |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
break; |
} |
|
} |
|
function definirParametresRequeteRelations($ref, $id){ |
if ($this->ressources[1] == 'relations'){ |
switch ($this->ressources[2]) { |
case 'catminat' : |
$this->requete_condition[] = "catminat_code = ( SELECT catminat_code from ".$this->table_version[0]." WHERE " |
." num_nomen = ".$id." AND BDNT = '".$ref. "' ) "; |
$this->champs_recherches = " catminat_code, num_nomen, BDNT "; |
break; |
default : |
$e = 'Erreur dans l\'url de votre requête : </br> Le type de relation " ' |
.$this->ressources[2].' " n\'existe pas.'; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
break; |
} |
} else { |
$e = 'Erreur dans l\'url de votre requête : </br> Le type de ressources " ' |
.$this->ressources[1].' " n\'existe pas.'; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} |
|
|
//+++------------------------------traitement des versions----------------------------------------++ |
|
public function traiterVersion($valeur) { |
if (preg_match('/^[0-9]+(?:[._][0-9]+)*$/', $valeur) || $valeur == '*' || $valeur == '+') { |
if (preg_match('/^[0-9]+(?:[._][0-9]+)*$/', $valeur) || $valeur == '+') { |
$this->version_projet = $valeur; |
} elseif ($valeur == '*') { |
$this->version_projet = ($this->nb_ressources == 1) ? $valeur : '+' ; |
} else { |
$e = "Erreur : La version est inconnue."; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
187,12 → 219,16 |
public function retournerResultatFormate($resultat) { |
$resultat_json = $resultat[0]; |
if ($this->retour_format == 'max'){ |
if (!isset($this->parametres['categorie']) ) { |
$this->formaterResultatsTousChamps($resultat_json); |
} elseif ($this->parametres['categorie'] == 'ecologie') { |
$this->formaterResultatsChampsEcologie($resultat_json); |
} elseif ($this->parametres['categorie'] == 'description') { |
$this->formaterResultatsChampsDescription($resultat_json); |
if ($this->nb_ressources == 1) { |
if ($this->parametres['categorie'] == 'ecologie') { |
$this->formaterResultatsChampsEcologie($resultat_json); |
} elseif ($this->parametres['categorie'] == 'description') { |
$this->formaterResultatsChampsDescription($resultat_json); |
}else { |
$this->formaterResultatsTousChamps($resultat_json); |
} |
} else { |
$this->formaterResultatsRelations($resultat); |
} |
} else { |
$this->resultat_json = $resultat_json; |
199,6 → 235,31 |
} |
return $this->resultat_json; |
} |
|
public function formaterResultatsRelations($resultat) { |
$this->resultat_json['entete'] = $this->ajouterEnteteResultat(); |
$resultat_json = array(); |
foreach ($resultat as $cle => $res){ |
$resultat_json[$cle] = $res ; |
$resultat_json[$cle]['href'] = $this->ajouterHref('informations',strtolower($res['BDNT']).".nn:".$res['num_nomen']); |
} |
$this->resultat_json['resultat'] = $resultat_json; |
} |
|
public function ajouterEnteteResultat($id) { |
$entete['depart'] = $this->limite_requete['depart']; |
$entete['limite'] = $this->limite_requete['limite']; |
$entete['total'] = $this->total_resultat; |
$entete['version'] = $this->version_projet; |
$url = $this->formulerUrl($this->total_resultat, '/informations/'.$this->ressources[0].'/relations/catminat'); |
if (isset($url['precedent']) && $url['precedent'] != '') { |
$entete['href.precedent'] = $url['precedent']; |
} |
if (isset($url['suivant']) && $url['suivant'] != '') { |
$entete['href.suivant'] = $url['suivant']; |
} |
return $entete; |
} |
|
public function formaterResultatsTousChamps($resultat) { |
$this->resultat_json = $resultat; |
384,12 → 445,44 |
|
public function assemblerLaRequete() { |
$requete = ' SELECT '.$this->champs_recherches.' FROM '.$this->table.' ' |
.$this->retournerRequeteCondition(); |
.$this->retournerRequeteCondition().' '; |
if ($this->nb_ressources != 1) { |
$requete .= $this->delimiterResultatsRequete(); |
} |
return $requete; |
} |
|
public function calculerTotalResultat() { |
$requete = 'SELECT count(*) as nombre FROM '.$this->table.' '.$this->retournerRequeteCondition(); |
$res = $this->getBdd()->recuperer($requete); |
if ($res) { |
$this->total_resultat = $res['nombre']; |
} else { |
$this->total_resultat = 0; |
$e = 'Données introuvables dans la base'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e); |
} |
} |
|
public function delimiterResultatsRequete() { |
$this->calculerTotalResultat(); |
$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; |
} |
|
|
|
public function retournerRequeteCondition() { |
$condition = ''; |
if (empty($this->requete_condition) == false) { |