New file |
0,0 → 1,213 |
<?php |
|
/** |
* classe pour web service qui affiche les images de Coste. |
* il n'existe qu'une seule version pour les images de Coste : 2.00 |
* retour en application/json |
* |
* exemple d'appel du service : |
* .../service:eflore:0.1/coste/images?masque.nt=1053 |
* .../service:eflore:0.1/coste/images?masque.nn=39594,39601 |
* .../service:eflore:0.1/coste/images |
* |
* paramètres disponibles : navigation.depart, navigation.limite, masque.nn, masque.nt |
* |
* @package eFlore/services |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @author Mathilde Salthun-Lassalle <mathilde@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-2011 Tela Botanica (accueil@tela-botanica.org) |
*/ |
|
class Images extends Commun { |
|
protected $table ; |
private $requete_condition = array(" image != '' "); |
private $champs_recherches = " num_nom, image, flore_bdtfx_nn, flore_bdtfx_nt "; |
private $total_resultat; |
protected $limite_requete = array('depart' => 0, 'limite' => 100); |
private $masque = array(); |
|
|
|
|
public function consulter($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->traiterRessources(); |
$this->traiterParametres(); |
$this->table = config::get('bdd_table').'_v2_00'; |
$requete = $this->assemblerLaRequete(); |
$resultat = $this->getBdd()->recupererTous($requete); |
$resultats = $this->formaterResultat($resultat); |
return $resultats; |
} |
|
//+-----------------------------------traitement ressources et paramètres --------------------------------+ |
|
|
public function traiterRessources() { |
if (empty($this->ressources) ) { |
if (isset($this->parametres['masque.nn']) == false |
&& isset($this->parametres['masque.nt']) == false) { |
$this->requete_condition[] = " flore_bdtfx_nt != '' AND flore_bdtfx_nn != '' "; |
} |
} else { |
$e = "La ressource {$this->ressources[0]} n'existe pas."; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e); |
} |
} |
|
public function traiterParametres() { |
foreach ($this->parametres as $param => $val ) { |
switch ($param) { |
case 'masque.nt' : |
$this->analyserMasque($val,'nt'); |
break; |
case 'masque.nn' : |
$this->analyserMasque($val,'nn'); |
break; |
case 'referentiel' : |
// ce paramètre est ignoré dans le cas de coste |
// car seul le cel le prend en compte pour le moment |
// on l'indique ici dans le switch car ce sont les mêmes url |
// qui sont appelées pour le cel et coste (à retirer donc si ça change) |
break; |
case 'navigation.depart' : |
$this->limite_requete['depart'] = $val; |
break; |
case 'navigation.limite' : |
$this->limite_requete['limite'] = $val; |
break; |
default : |
$e = 'Erreur dans les paramètres de recherche de votre requête : </br> Le parametre " ' |
.$param.' " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e); |
break; |
} |
} |
} |
|
|
|
|
private function analyserMasque($valeur, $type_masque) { |
$this->masque[] = "$type_masque=$valeur"; |
if (!$valeur) { |
$e = 'renseignez une valeur pour masque.nn'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e); |
} |
$arr = array_filter(array_map('intval', explode(',', $valeur))); |
if(!$arr) $this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, "valeur incorrecte pour masque.".$type_masque); |
$this->requete_condition[] = sprintf(" flore_bdtfx_%s IN (%s)", $type_masque, implode(',', array_unique($arr))); |
} |
|
|
|
|
|
//+-------------------------------------------formatage résultats---------------------------------------------+ |
|
public function formaterResultat($resultat) { |
$versionResultat['entete'] = $this->formaterEnteteResultat();; |
if ($resultat == '') { |
$message = 'La requête SQL formée comporte une erreur!'; |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE; |
throw new Exception($message, $code); |
} elseif ($resultat) { |
$versionResultat = $this->retournerResultatFormate($resultat); |
} else { |
$versionResultat['resultats'] = array(); |
} |
return $versionResultat; |
} |
|
public function retournerResultatFormate($resultat) { |
$resultat_json = array(); |
foreach ($resultat as $tab) { |
$num_coste = $tab['num_nom']; |
unset($tab['num_nom']); |
$resultat_json['resultats'][$num_coste]['num_nomenclatural'] = $tab['flore_bdtfx_nn']; |
$resultat_json['resultats'][$num_coste]['num_taxonomique'] = $tab['flore_bdtfx_nt']; |
$resultat_json['resultats'][$num_coste]['binaire.href'] = $this->formaterUrlImage($tab['image']); |
$resultat_json['resultats'][$num_coste]['mime'] = "images/png"; |
} |
return $resultat_json; |
} |
|
public function formaterUrlImage($fichier) { |
$chemin = config::get('donnees')."2.00/img/$fichier"; |
return $chemin; |
} |
|
|
|
|
public function formaterEnteteResultat() { |
$entete['depart'] = $this->limite_requete['depart']; |
$entete['limite'] = $this->limite_requete['limite']; |
$entete['total'] = $this->total_resultat; |
$entete['masque'] = empty($this->masque) ? 'aucun' : implode('&', $this->masque); |
$url = $this->formulerUrl($this->total_resultat, '/images'); |
if (isset($url['precedent']) && $url['precedent'] != '') { |
$entete['href.precedent'] = $url['precedent']; |
} |
if (isset($url['suivant']) && $url['suivant'] != '') { |
$entete['href.suivant'] = $url['suivant']; |
} |
return $entete; |
} |
|
//+--------------------------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 (empty($this->requete_condition) == false) { |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition); |
} |
return $condition; |
} |
|
|
|
public function calculerTotalResultat() { |
$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(); |
$requete_limite = ''; |
if ((count($this->ressources)) == 0) { |
if (($this->limite_requete['depart'] < $this->total_resultat) && |
(($this->limite_requete['limite'] + $this->limite_requete['depart'] ) |
< $this->total_resultat )) { |
$requete_limite = 'LIMIT '.$this->limite_requete['depart'].', ' |
.$this->limite_requete['limite']; |
} |
} |
return $requete_limite; |
} |
|
} |
?> |