1,26 → 1,24 |
<?php |
|
/** |
* 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 |
* @package eflore-projets |
* @author Mathilde SALTHUN-LASSALLE <mathilde@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @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-2012 Tela Botanica (accueil@tela-botanica.org) |
* |
* |
*/ |
* 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 |
* @package eflore-projets |
* @author Mathilde SALTHUN-LASSALLE <mathilde@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @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-2012 Tela Botanica (accueil@tela-botanica.org) |
* |
* |
*/ |
|
|
|
class Informations extends Commun { |
|
protected $limite_requete = array( 'depart' => 0, 'limite' => 10); |
33,28 → 31,26 |
private $masque; |
|
public function consulter($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$versionResultat = null; |
if (empty($this->ressources)){ |
$this->traiterParametres(); |
} |
$this->definirTables(array ('index' => config::get('bdd_table_index'), |
'baseflor' => config::get('bdd_table'), |
'rangSup' => config::get('bdd_table_rang_sup') |
) |
); |
$this->traiterRessources(); |
$requete = $this->assemblerLaRequete(); |
// exemple: |
// SELECT * FROM baseflor_index_v2012_12_31 WHERE `bdnt.nn` = 'bdtfx.nn:XXXXX'; |
$resultat = $this->Bdd->recupererTous($requete . ' -- ' . __FILE__ . ':' .__LINE__); |
$versionResultat = $this->renvoyerResultat($resultat); |
if ($versionResultat == null) { |
$message = 'Les données recherchées sont introuvables.'; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$versionResultat = null; |
if (empty($this->ressources)){ |
$this->traiterParametres(); |
} |
$this->definirTables(array ('index' => config::get('bdd_table_index'), |
'baseflor' => config::get('bdd_table'), |
'rangSup' => config::get('bdd_table_rang_sup') |
) |
); |
$this->traiterRessources(); |
$requete = $this->assemblerLaRequete(); |
// exemple: |
// SELECT * FROM baseflor_index_v2012_12_31 WHERE `bdnt.nn` = 'bdtfx.nn:XXXXX'; |
$resultat = $this->Bdd->recupererTous($requete . ' -- ' . __FILE__ . ':' .__LINE__); |
$versionResultat = $this->renvoyerResultat($resultat); |
if ($versionResultat === null) { |
throw new Exception('Les données recherchées sont introuvables.', RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE); |
} |
return $versionResultat; |
} |
|
64,16 → 60,19 |
} |
|
public function renvoyerResultat($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); |
if (empty($this->ressources)) return $this->retournerResultatFormate($resultat); |
if(empty($resultat[0]['baseflor'])) { |
if(@$this->parametres['categorie'] == 'description') { |
// non-supporté par InformationsTaxonsSup.php... |
return array(); |
} |
$info = new InformationsTaxonsSup(new Conteneur()); |
return $info->consulter($this->ressources, $this->parametres); |
} |
|
$info = new InformationsBaseflor(new Conteneur()); |
return $info->consulter($this->ressources, $this->parametres); |
} |
return $res_formate; |
} |
|
|
|
114,28 → 113,28 |
if (isset($this->parametres) && !empty($this->parametres) ) { |
foreach ($this->parametres as $param => $valeur) { |
switch ($param) { |
case 'navigation.depart' : |
if(!isset($this->parametres['navigation.limite'])) |
throw new Exception("indiquez également la valeur pour le paramètre navigation.limite.", |
RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
$this->definirNavigationDepart($valeur); |
break; |
case 'navigation.limite' : |
if(!isset($this->parametres['navigation.depart'])) |
throw new Exception("indiquez également la valeur pour le paramètre navigation.depart.", |
RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
$this->definirNavigationLimite($valeur); |
break; |
case 'version.projet' : |
$this->traiterVersion($valeur); |
break; |
case 'masque.cat' : |
$this->masque = 'catminat='.str_replace('-','/',$valeur); |
$this->requete_condition[] = " catminat_code = '".str_replace('-','/',$valeur)."' "; |
break; |
default : |
$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " ' |
.$param.' " n\'existe pas.'; |
case 'navigation.depart' : |
if(!isset($this->parametres['navigation.limite'])) |
throw new Exception("indiquez également la valeur pour le paramètre navigation.limite.", |
RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
$this->definirNavigationDepart($valeur); |
break; |
case 'navigation.limite' : |
if(!isset($this->parametres['navigation.depart'])) |
throw new Exception("indiquez également la valeur pour le paramètre navigation.depart.", |
RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
$this->definirNavigationLimite($valeur); |
break; |
case 'version.projet' : |
$this->traiterVersion($valeur); |
break; |
case 'masque.cat' : |
$this->masque = 'catminat='.str_replace('-','/',$valeur); |
$this->requete_condition[] = " catminat_code = '".str_replace('-','/',$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; |
} |
} |
205,7 → 204,7 |
$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); |
$this->ajouterHref('informations',$bdnt.".nn:".$nn); |
} |
} |
return $resultat_json; |
215,17 → 214,17 |
public function ajouterEnteteResultat() { |
$entete['depart'] = $this->limite_requete['depart']; |
$entete['limite'] = $this->limite_requete['limite']; |
$entete['total'] = $this->total_resultat; |
$entete['total'] = $this->total_resultat; |
if ($this->masque) { |
$entete['masque'] = $this->masque; |
} |
$entete['version'] = $this->version_projet; |
$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']; |
$entete['href.suivant'] = $url['suivant']; |
} |
return $entete; |
} |
235,54 → 234,54 |
|
|
public function assemblerLaRequete() { |
$requete = ' SELECT '.$this->champs_recherches. |
' FROM '.$this->tables['index'].' ' |
.self::retournerRequeteJointure($this->requete_jointure).' ' |
.self::retournerRequeteCondition($this->requete_condition).' ' |
.$this->delimiterResultatsRequete(); |
$requete = ' SELECT '.$this->champs_recherches. |
' FROM '.$this->tables['index'].' ' |
.self::retournerRequeteJointure($this->requete_jointure).' ' |
.self::retournerRequeteCondition($this->requete_condition).' ' |
.$this->delimiterResultatsRequete(); |
return $requete; |
} |
|
static function retournerRequeteCondition($cond) { |
return $cond ? (' WHERE '.implode(' AND ', $cond)) : ''; |
return $cond ? (' WHERE '.implode(' AND ', $cond)) : ''; |
} |
|
|
static function calculerTotalResultat($db, $table, Array $join, Array $cond) { |
$requete = sprintf( |
'SELECT count(*) as nombre FROM %s %s %s -- %s:%d', |
$table, |
$join ? implode(' ', $join) : '', |
$cond ? (' WHERE '.implode(' AND ', $cond)) : '', |
__FILE__, |
__LINE__); |
'SELECT count(*) as nombre FROM %s %s %s -- %s:%d', |
$table, |
$join ? implode(' ', $join) : '', |
$cond ? (' WHERE '.implode(' AND ', $cond)) : '', |
__FILE__, |
__LINE__); |
$res = $db->recuperer($requete); |
if ($res && $res['nombre']) return $res['nombre']; |
throw new Exception('Données introuvables dans la base', RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE); |
throw new Exception('Données introuvables dans la base', RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE); |
} |
|
public function delimiterResultatsRequete() { |
$this->total_resultat = self::calculerTotalResultat( |
$this->getBdd(), |
$this->tables['index'], |
$this->requete_jointure, |
$this->requete_condition); |
$this->getBdd(), |
$this->tables['index'], |
$this->requete_jointure, |
$this->requete_condition); |
$requete_limite = ''; |
if (($this->limite_requete['depart'] <= $this->total_resultat) ){ |
if ( $this->limite_requete['depart'] < $this->total_resultat ){ |
$requete_limite = 'LIMIT '.$this->limite_requete['depart'].', ' |
if (($this->limite_requete['depart'] <= $this->total_resultat) ){ |
if ( $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); |
} |
} |
} 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; |
} |
|
static function retournerRequeteJointure($join) { |
return $join ? implode(' ', $join) : ''; |
return $join ? implode(' ', $join) : ''; |
} |
|
} |