/trunk/services/modules/0.1/baseflor/Ontologies.php |
---|
32,7 → 32,7 |
$requete = $this->assemblerLaRequete(); |
$resultat = $this->getBdd()->recupererTous($requete); |
$versionResultat = $this->traiterResultat($resultat, '', $requete); |
$versionResultat = $this->traiterResultat($resultat, ''); |
$resultats = $versionResultat; |
return $resultats; |
47,11 → 47,8 |
case 'masque.nom' : $this->ajouterLeFiltreMasque('nom', $valeur); break; |
case 'masque.description' : $this->ajouterLeFiltreMasque('description', $valeur); break; |
case 'retour.format' : $this->retour_format = $valeur; break; |
case 'retour.champs' : break; |
case 'navigation.depart' : $this->limite_requete['depart'] = $valeur; break; |
case 'navigation.limite' : $this->limite_requete['limite'] = $valeur; break; |
case 'recherche' : break; |
case 'version.projet' : break; |
default : |
$e = 'Erreur dans les parametres de recherche de votre requête : </br> Le paramètre " ' |
.$param.' " n\'existe pas.'; |
/trunk/services/modules/0.1/baseflor/InformationsBaseflor.php |
---|
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; |
} |
} |
?> |
/trunk/services/modules/0.1/baseflor/Informations.php |
---|
12,33 → 12,214 |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org) |
* |
* to do : éliminer l'heritage (tratement version et url.suivant url.precedent) |
*/ |
class Informations extends Commun{ |
class Informations extends Commun { |
private $info_tables = array('InformationsBaseflor', 'InformationsTaxonsSup'); |
protected $limite_requete = array( 'depart' => 0, 'limite' => 10); |
private $table = ""; |
private $champs_recherches = '*'; |
private $requete_condition = ""; |
private $requete_jointure = ""; |
protected $serviceNom = 'informations'; |
public function consulter($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$versionResultat = null; |
foreach ($this->info_tables as $info_tab) { |
$info = new $info_tab(); |
$versionResultat = $info->consulter($ressources, $parametres); |
if($versionResultat != null) { |
break; |
} |
if (empty($this->ressources)){ |
$this->traiterParametres(); |
} |
$this->traiterRessources(); |
$requete = $this->Requete_assemblage->assemblerLaRequete($this->Requete); |
$resultat = $this->Bdd->recupererTous($requete); |
$versionResultat = $this->analyserResultat($resultat); |
if ($versionResultat == null) { |
$message = 'Les données recherchées sont introuvables.'; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} |
return $versionResultat; |
} |
public function __construct() { |
$this->Conteneur = new Conteneur(); |
$this->Bdd = $this->Conteneur ->getBdd(); |
$this->Requete = new Requete(); |
$this->Requete_assemblage = $this->Conteneur->getRequetesAssemblage(); |
} |
public function analyserResultat($resultat) { |
$res_formate = array(); |
if (empty($this->ressources)) { |
$res_formate = $this->retournerResultatFormate($resultat); |
} else { |
$classe = empty($resultat[0]['baseflor']) ? 'InformationsTaxonsSup' : 'InformationsBaseflor'; |
$info = new $classe(new Conteneur()); |
$res_formate = $info->consulter($this->ressources, $this->parametres); |
} |
return $res_formate; |
} |
//+--------------------------traitement ressources ou paramètres -------------------------------------+ |
//spécifiques à /informations |
public function traiterRessources() { |
$prefixe_table = array ('index' => config::get('bdd_table_index'), |
'baseflor' => config::get('bdd_table'), |
'rangSup' => config::get('bdd_table_rang_sup')); |
$tables = $this->definirTables($prefixe_table); |
if (empty($this->ressources)) { |
$this->Requete->limite_besoin = true; |
$this->Requete->table = $tables['index']; |
$baseflor = $tables['baseflor']; |
$rangSup = $tables['rangSup']; |
$this->Requete->requete_jointure = array( |
array('type' => 'LEFT JOIN', 'table' => $baseflor, |
'on' => array("{$baseflor}.cle = {$this->Requete->table}.baseflor")), |
array('type' => 'LEFT JOIN', 'table' => $rangSup , |
'on' => array("{$rangSup}.cle = {$this->Requete->table}.RangSup")) |
); |
$this->Requete->champs_recherches = " {$baseflor}.num_nomen as 'baseflor.nn', |
{$baseflor}.BDNT as 'baseflor.bdnt', {$baseflor}.catminat_code, {$baseflor}.num_taxon , |
{$rangSup}.num_nomen as 'rangSup.nn', {$rangSup}.bdnt as 'rangSup.bdnt', |
{$this->Requete->table}.cle as 'index.cle' "; |
} else { |
if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[0], $retour)){ |
$this->Requete->table = $tables['index']; |
$this->Requete->champs_recherches = " baseflor, rangSup "; |
$this->Requete->requete_condition[] = " `bdnt.nn` = '{$retour[0]}' "; |
} 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); |
break; |
} |
} |
} |
//paramètres spécifiques à /informations |
public function traiterParametres() { |
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->Requete->limite_requete['depart'] = $valeur; |
$this->limite_requete['depart'] = $valeur; |
break; |
} else { |
$e = "Erreur : valeur erronnée pour le paramètre navigation.depart."; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} else { |
$e = "indiquez également la valeur pour le paramètre navigation.limite."; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
case 'navigation.limite' : |
if (isset($this->parametres['navigation.depart'])) { |
if(preg_match('/^([0-9]+)$/', $valeur) && $valeur != 0){ |
$this->Requete->limite_requete['limite'] = $valeur; |
$this->limite_requete['limite'] = $valeur; |
break; |
} else { |
$e = "Erreur : valeur erronnée pour le paramètre navigation.limite."; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} else { |
$e = "indiquez également la valeur pour le paramètre navigation.depart."; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
case 'version.projet' : |
$this->traiterVersion($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; |
} |
} |
} |
} |
//+++------------------------------traitement des versions----------------------------------------++ |
public 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); |
} |
if ($this->version_projet == '*' && empty($this->ressources)) { |
$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($prefixe_table) { |
$table_num_version = $this->recupererVersionDisponible(); |
foreach ($prefixe_table as $nom => $prefixe ) { |
if ( in_array($this->version_projet,$table_num_version) ) { |
$tables[$nom] = $prefixe.'_v'.$this->version_projet; |
} elseif ($this->version_projet == '+') { |
$derniere_version = $table_num_version[count($table_num_version) - 1]; |
$tables[$nom] = $prefixe.'_v'.str_replace('.', '_', $derniere_version); |
} else { |
$e = "Erreur : La version est inconnue."; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} |
return $tables; |
} |
//+--------------------------formatages de resultats -------------------------------------------+ |
public function retournerResultatFormate($resultat) { |
$resultat_json = array(); |
$resultat_json['entete'] = $this->ajouterEnteteResultat(); |
foreach ($resultat as $ligne => $tab) { |
$num = $tab['index.cle']; |
$resultat_json['resultats'][$num]['num_nomen'] = |
(empty ($tab['baseflor.nn'])) ? $tab['rangSup.nn'] : $tab['baseflor.nn']; |
$resultat_json['resultats'][$num]['bdnt'] = |
(empty ($tab['baseflor.bdnt'])) ? $tab['rangSup.bdnt'] : $tab['baseflor.bdnt']; |
$resultat_json['resultats'][$num]['catminat_code'] = |
(empty ($tab['catminat_code'])) ? '' : $tab['catminat_code']; |
$resultat_json['resultats'][$num]['num_taxon'] = |
(empty ($tab['num_taxon'])) ? '' : $tab['num_taxon']; |
if ($resultat_json['resultats'][$num]['num_nomen'] != 0) { |
$bdnt = strtolower($resultat_json['resultats'][$num]['bdnt']); |
$nn = $resultat_json['resultats'][$num]['num_nomen']; |
$resultat_json['resultats'][$num]['href'] = |
$this->ajouterHref('informations',$bdnt.".nn:".$nn); |
} |
} |
return $resultat_json; |
} |
public function ajouterEnteteResultat() { |
$entete['depart'] = $this->Requete->limite_requete['depart']; |
$entete['limite'] = $this->Requete->limite_requete['limite']; |
$entete['total'] = $this->Requete_assemblage->getTotal_resultat(); |
$entete['version'] = $this->version_projet; |
$url = $this->formulerUrl($this->Requete_assemblage->getTotal_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; |
} |
} |
/trunk/services/modules/0.1/baseflor/InformationsTaxonsSup.php |
---|
24,11 → 24,13 |
protected $table = ""; |
private $champs_ontologiques = array(); |
private $requete_condition = ""; |
private $format_reponse = 'informations'; |
private $champs_recherches = '*'; |
protected $serviceNom = 'informations'; |
private $retour_format = 'max'; |
private $Requete; |
private $Conteneur; |
private $Requete_assemblage; |
private $Bdd; |
public function consulter($ressources, $parametres) { |
$this->ressources = $ressources; |
38,10 → 40,10 |
$this->traiterRessources(); |
$resultats = ''; |
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 { |
51,36 → 53,53 |
return $versionResultat; |
} |
public function analyserResultat($resultat) { |
$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); |
} |
return $versionResultat; |
} |
public function __construct(Conteneur $Conteneur) { |
$this->Conteneur = $Conteneur; |
$this->Bdd = $Conteneur->getBdd(); |
$this->Requete = new Requete(); |
$this->Requete_assemblage = $Conteneur->getRequetesAssemblage(); |
} |
//+--------------------------traitement ressources ou paramètres -------------------------------------------+ |
public function traiterRessources() { |
if (isset($this->ressources) && !empty($this->ressources[0])) { |
if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[0], $retour)==1){ |
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; |
default : |
$e = 'Erreur dans l\'url de votre requête : </br> La ressource " ' |
$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; |
} |
} |
} |
} |
//+---- paramètres ----+ |
public function traiterParametres() { |
if (isset($this->parametres) && !empty($this->parametres)) { |
if (isset($this->parametres) && !empty($this->parametres) ) { |
foreach ($this->parametres as $param => $valeur) { |
switch ($param) { |
case 'categorie' : |
if ($valeur == "ecologie"){ |
$this->champs_recherches = ' num_nomen, bdnt, ve_lumiere_min , ve_lumiere_max,' |
$this->Requete->champs_recherches = ' num_nomen, bdnt, ve_lumiere_min , ve_lumiere_max,' |
.' ve_temperature_min, ve_temperature_max, ve_continentalite_min,' |
.' ve_continentalite_max, ve_humidite_atmos_min, ve_humidite_atmos_max,' |
.' ve_humidite_edaph_min, ve_humidite_edaph_max, ve_reaction_sol_min,' |
89,7 → 108,7 |
.' ve_mat_org_sol_min, ve_mat_org_sol_max '; |
} 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' : |
98,7 → 117,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); |
106,7 → 125,7 |
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; |
} |
} |
} |
119,7 → 138,7 |
$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"; |
142,7 → 161,7 |
} |
} else { |
$e = "Erreur : La version est inconnue."; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} |
193,23 → 212,7 |
} |
//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+ |
public function assemblerLaRequete() { |
$requete = ' SELECT '.$this->champs_recherches.' FROM '.$this->table.' ' |
.$this->retournerRequeteCondition(); |
return $requete; |
} |
public function retournerRequeteCondition() { |
$condition = ''; |
if ($this->requete_condition !== "") { |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition); |
} |
return $condition; |
} |
} |
?> |