25,14 → 25,15 |
class InformationsBaseflor extends Commun{ |
|
protected $table = ""; |
private $requete_condition = ""; |
private $format_reponse = 'informations'; |
private $total_resultat; |
private $retour_format = 'max'; |
protected $limite_requete = array( 'depart' => 0, 'limite' => 10); |
private $champs_recherches = '*'; |
private $champs_ontologiques = array(); |
protected $serviceNom = 'informations'; |
private $Requete; |
private $Conteneur; |
private $Requete_assemblage; |
private $Bdd; |
|
|
public function consulter($ressources, $parametres) { |
$this->ressources = $ressources; |
42,10 → 43,10 |
$this->traiterRessources(); |
$resultats = null; |
foreach ($this->table_version as $version) { |
$this->table = $version; |
$requete = $this->assemblerLaRequete(); |
$resultat = $this->getBdd()->recupererTous($requete); |
$versionResultat = $this->traiterResultat($resultat, $version); |
$this->Requete->table = $version; |
$requete = $this->Requete_assemblage->assemblerLaRequete($this->Requete); |
$resultat = $this->Bdd->recupererTous($requete); |
$versionResultat = $this->analyserResultat($resultat); |
if (count($this->table_version) > 1) { |
$resultats[$version] = $versionResultat; |
} else { |
55,7 → 56,14 |
return $resultats; |
} |
|
public function traiterResultat($resultat, $version) { |
public function __construct(Conteneur $Conteneur) { |
$this->Conteneur = $Conteneur; |
$this->Requete = new Requete(); |
$this->Bdd = $Conteneur->getBdd(); |
$this->Requete_assemblage = $Conteneur->getRequetesAssemblage(); |
} |
|
public function analyserResultat($resultat) { |
$versionResultat = null; |
if ($resultat == '') { |
$message = 'La requête SQL formée comporte une erreur!'; |
62,7 → 70,7 |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} elseif ($resultat) { |
$versionResultat = $this->retournerResultatFormate($resultat, $version); |
$versionResultat = $this->retournerResultatFormate($resultat); |
} |
return $versionResultat; |
} |
72,50 → 80,23 |
if (isset($this->parametres) && !empty($this->parametres)) { |
foreach ($this->parametres as $param => $valeur) { |
switch ($param) { |
case 'navigation.depart' : |
if (isset($this->parametres['navigation.limite'])) { |
if(preg_match('/^([0-9]+)$/', $valeur)){ |
$this->limite_requete['depart'] = $valeur; |
break; |
} else { |
$e = "Erreur : valeur erronnée pour le paramètre navigation.depart."; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} else { |
$e = "indiquez également la valeur pour le paramètre navigation.limite."; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
case 'navigation.limite' : |
if (isset($this->parametres['navigation.depart'])) { |
if(preg_match('/^([0-9]+)$/', $valeur) && $valeur != 0){ |
$this->limite_requete['limite'] = $valeur; |
break; |
} else { |
$e = "Erreur : valeur erronnée pour le paramètre navigation.limite."; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
|
} else { |
$e = "indiquez également la valeur pour le paramètre navigation.depart."; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
case 'categorie' : |
if ($valeur == "description") { |
$this->champs_recherches = "num_nomen, BDNT, chorologie, inflorescence," |
$this->Requete->champs_recherches = "num_nomen, BDNT, chorologie, inflorescence," |
." sexualite, ordre_maturation, " |
."pollinisation, fruit, dissemination, couleur_fleur, macule, floraison, type_bio, " |
."form_vegetale "; |
$this->requete_condition[] = "( chorologie != '' OR inflorescence != '' ". |
$this->Requete->requete_condition[] = "( chorologie != '' OR inflorescence != '' ". |
"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") { |
$this->champs_recherches = " num_nomen, BDNT, ve_lumiere , ve_temperature," |
$this->Requete->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, " |
." vi_lumiere, vi_temperature, vi_continentalite, vi_humidite_edaph," |
." vi_reaction_sol, vi_nutriments_sol, vi_salinite "; |
$this->requete_condition[] = "( ve_lumiere != '' OR ve_temperature != '' ". |
$this->Requete->requete_condition[] = "( ve_lumiere != '' OR ve_temperature != '' ". |
"OR ve_continentalite != '' OR ve_humidite_atmos != '' ". |
"OR ve_humidite_edaph != '' OR ve_reaction_sol != '' ". |
"OR ve_nutriments_sol != '' OR ve_salinite != '' ". |
122,7 → 103,7 |
"OR ve_texture_sol != '' OR ve_mat_org_sol != '' )"; |
} else { |
$e = "Valeur de paramètre inconnue pour 'categorie'."; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
break; |
case 'retour.format' : |
131,7 → 112,7 |
break; |
} else { |
$e = "Valeur de paramètre inconnue pour 'retour.format'."; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
case 'version.projet' : |
$this->traiterVersion($valeur); |
139,7 → 120,8 |
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; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
break; |
} |
} |
} |
148,33 → 130,30 |
|
|
public function traiterRessources() { |
if (isset($this->ressources) && !empty($this->ressources[0])) { |
if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[0], $retour)==1){ |
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' "; |
$this->Requete->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDTFX' "; |
|
break; |
case 'bdafx' : |
$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDAFX' "; |
$this->Requete->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDAFX' "; |
break; |
case 'bdbfx' : |
$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDBFX' "; |
$this->Requete->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.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
break; |
} |
|
} else { |
$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
break; |
} |
} else { |
$this->champs_recherches=" cle, catminat_code, BDNT, num_taxon, num_nomen "; |
} |
} |
|
//+++------------------------------traitement des versions----------------------------------------++ |
184,13 → 163,9 |
$this->version_projet = $valeur; |
} else { |
$e = "Erreur : La version est inconnue."; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
if ($this->version_projet == '*' && $this->ressources == array()) { |
$message = "L'affichage de plusieurs versions ne fonctionne que pour les ressources de type /ressources/#id"; |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE; |
throw new Exception($message, $code); |
} |
|
} |
|
public function DefinirTables() { |
207,21 → 182,13 |
} |
} else { |
$e = "Erreur : La version est inconnue."; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} |
|
//+--------------------------formatages de resultats -------------------------------------------+ |
|
public function retournerResultatFormate($resultat) { |
if ((count($this->ressources)) == 0) { |
$table_retour_json = $this->formaterResultatsInformations($resultat); |
} else { |
$table_retour_json = $this->formaterResultatsInformationsBDNTnn($resultat); |
} |
return $table_retour_json; |
} |
|
public function formaterResultatsInformationsBDNTnn($resultat){ |
$resultat_json = $resultat[0]; |
if ($this->retour_format == 'max'){ |
if (!isset($this->parametres['categorie']) ) { |
235,7 → 202,6 |
return $resultat_json; |
} |
|
|
public function formaterResultatsTousChamps($resultat) { |
$resultat_json = $resultat; |
if ($resultat_json['type_bio'] != ""){ |
294,44 → 260,9 |
} |
|
|
public function formaterResultatsInformations($resultat) { |
$resultat_json = array(); |
$resultat_json['entete'] = $this->ajouterEnteteResultat(); |
foreach ($resultat as $tab) { |
if ($tab['BDNT'] != 'nc'){ |
$num = $tab['cle']; |
unset($tab['cle']); |
foreach ($tab as $param => $valeur) { |
$resultat_json['resultats'][$num][$param] = $valeur; |
} |
if ($tab['num_nomen'] != 0) { |
$resultat_json['resultats'][$num]['href'] = |
$this->ajouterHref('informations',strtolower($tab['BDNT']).".nn:".$tab['num_nomen']); |
} |
} |
} |
|
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; |
$url = $this->formulerUrl($this->total_resultat, '/informations'); |
if (isset($url['precedent']) && $url['precedent'] != '') { |
$entete['href.precedent'] = $url['precedent']; |
} |
if (isset($url['suivant']) && $url['suivant'] != '') { |
$entete['href.suivant'] = $url['suivant']; |
} |
return $entete; |
} |
|
|
//+--------------------------traitement ontologies -------------------------------------------+ |
|
public function recupererOntologies($valeur, $champs){ |
443,58 → 374,7 |
return $types; |
} |
|
//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+ |
|
public function assemblerLaRequete() { |
$requete = ' SELECT '.$this->champs_recherches.' FROM '.$this->table.' ' |
.$this->retournerRequeteCondition().' ' |
.$this->delimiterResultatsRequete(); |
return $requete; |
} |
|
public function retournerRequeteCondition() { |
$condition = ''; |
if ($this->requete_condition !== "") { |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition); |
} |
return $condition; |
} |
|
public function calculerTotalResultat() { |
//on récupère le nombre total de résultats de la requete |
$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(); |
$this->requete_limite = ''; |
if ((count($this->ressources)) == 0) { |
if ($this->limite_requete['depart'] < $this->total_resultat) { |
if (($this->limite_requete['limite'] |
+ $this->limite_requete['depart']) |
>= $this->total_resultat ){ |
$this->requete_limite = 'LIMIT '.$this->limite_requete['depart'].', ' |
.$this->total_resultat; |
} else { |
$this->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."; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
|
} |
return $this->requete_limite; |
} |
|
} |
?> |