Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 963 → Rev 964

/trunk/services/modules/0.1/baseflor/Informations.php
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) : '';
}
}