1,7 → 1,10 |
<?php |
|
/** |
* Classe Informations.php redirige vers le web service pour baseflor ou pour les rangs supérieurs |
* Classe Informations.php interroge la table Index |
* et redirige vers une autre classe si besoin |
* d'interroger une autre table (comme baseflor ou baseflor_rang_sup) |
* elle traite également le retour du web service : /informations |
* |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
11,20 → 14,21 |
* @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-2011 Tela Botanica (accueil@tela-botanica.org) |
* @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org) |
* |
* |
*/ |
|
//to do : éliminer l'heritage (->traitement version et commun::formulerUrl (oblige à utiliser this->limite_requete )) |
|
|
class Informations extends Commun { |
|
protected $limite_requete = array( 'depart' => 0, 'limite' => 10); |
private $table = ""; |
private $champs_recherches = '*'; |
private $requete_jointure = ""; |
private $requete_condition = ""; |
private $requete_jointure = ""; |
private $total_resultat; |
protected $serviceNom = 'informations'; |
|
public function consulter($ressources, $parametres) { |
35,9 → 39,9 |
$this->traiterParametres(); |
} |
$this->traiterRessources(); |
$requete = $this->Requete_assemblage->assemblerLaRequete($this->Requete); |
$requete = $this->assemblerLaRequete(); |
$resultat = $this->Bdd->recupererTous($requete); |
$versionResultat = $this->analyserResultat($resultat); |
$versionResultat = $this->renvoyerResultat($resultat); |
if ($versionResultat == null) { |
$message = 'Les données recherchées sont introuvables.'; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
45,15 → 49,18 |
} |
return $versionResultat; |
} |
|
|
public function __construct() { |
$this->Conteneur = new Conteneur(); |
$this->Bdd = $this->Conteneur ->getBdd(); |
$this->Requete = new Requete(); |
$this->Requete_assemblage = $this->Conteneur->getRequetesAssemblage(); |
$Conteneur = new Conteneur(); |
$this->Bdd = $Conteneur ->getBdd(); |
$prefixe_table = array ('index' => config::get('bdd_table_index'), |
'baseflor' => config::get('bdd_table'), |
'rangSup' => config::get('bdd_table_rang_sup')); |
$this->tables = $this->definirTables($prefixe_table); |
$this->table = $this->tables['index']; |
} |
|
public function analyserResultat($resultat) { |
public function renvoyerResultat($resultat) { |
$res_formate = array(); |
if (empty($this->ressources)) { |
$res_formate = $this->retournerResultatFormate($resultat); |
69,32 → 76,27 |
|
//+--------------------------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' "; |
if (empty($this->ressources)) { |
|
$this->requete_jointure = array( |
'LEFT JOIN '. $this->tables['baseflor'].' ON ' |
.$this->tables['baseflor'].".cle =".$this->table.".baseflor", |
'LEFT JOIN '. $this->tables['rangSup'].' ON ' |
.$this->tables['rangSup'].".cle = ".$this->table.".RangSup"); |
|
$this->champs_recherches = " {$this->tables['baseflor']}.num_nomen as 'baseflor.nn', |
{$this->tables['baseflor']}.BDNT as 'baseflor.bdnt', |
{$this->tables['baseflor']}.catminat_code, |
{$this->tables['baseflor']}.num_taxon , |
{$this->tables['rangSup']}.num_nomen as 'rangSup.nn', |
{$this->tables['rangSup']}.bdnt as 'rangSup.bdnt', |
{$this->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]}' "; |
$this->champs_recherches = " baseflor, rangSup "; |
$this->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); |
103,39 → 105,18 |
} |
} |
|
//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); |
} |
$this->definirNavigationDepart($valeur); |
break; |
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); |
} |
$this->definirNavigationLimite($valeur); |
break; |
case 'version.projet' : |
$this->traiterVersion($valeur); |
break; |
148,6 → 129,34 |
} |
} |
|
public function definirNavigationLimite($valeur){ |
if (isset($this->parametres['navigation.depart'])) { |
if(preg_match('/^([0-9]+)$/', $valeur) && $valeur != 0){ |
$this->limite_requete['limite'] = $valeur; |
} 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); |
} |
} |
|
public function definirNavigationDepart($valeur){ |
if (isset($this->parametres['navigation.limite'])) { |
if(preg_match('/^([0-9]+)$/', $valeur)){ |
$this->limite_requete['depart'] = $valeur; |
} 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); |
} |
} |
|
//+++------------------------------traitement des versions----------------------------------------++ |
|
public function traiterVersion($valeur) { |
188,20 → 197,24 |
$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']; |
(empty ($tab['baseflor.bdnt'])) ? $tab['rangSup.bdnt'] : $tab['baseflor.bdnt']; |
|
$resultat_json['resultats'][$num]['catminat_code'] = |
(empty ($tab['catminat_code'])) ? '' : $tab['catminat_code']; |
(empty ($tab['catminat_code'])) ? '' : $tab['catminat_code']; |
|
$resultat_json['resultats'][$num]['num_taxon'] = |
(empty ($tab['num_taxon'])) ? '' : $tab['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); |
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; |
209,11 → 222,11 |
|
|
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['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->Requete_assemblage->getTotal_resultat(), '/informations'); |
$url = $this->formulerUrl($this->total_resultat, '/informations'); |
if (isset($url['precedent']) && $url['precedent'] != '') { |
$entete['href.precedent'] = $url['precedent']; |
} |
222,6 → 235,62 |
} |
return $entete; |
} |
|
|
|
//+-------------------------------------assemblage de requête------------------------------------// |
|
|
public function assemblerLaRequete() { |
$requete = ' SELECT '.$this->champs_recherches.' FROM '.$this->table.' ' |
.$this->retournerRequeteJointure().' '.$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() { |
$requete = 'SELECT count(*) as nombre FROM '.$this->table; |
$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 retournerRequeteJointure() { |
$jointure = ''; |
if ($this->requete_jointure !== "") { |
$jointure = implode(' ', $this->requete_jointure); |
} |
return $jointure; |
} |
|
} |