Rev 531 | Rev 571 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?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 '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 traiterVersion() {if( isset($this->parametres['version.projet']) ) {$version = $this->parametres['version.projet'];if (preg_match('/^([0-9]+(?:[._][0-9]+|))$/', $version, $retour)) {$this->version[] = $retour[0];$this->version_projet[] = 'v'.str_replace('.', '_', $this->version[0]);$this->table_version[] = Config::get('bdd_table').''.$this->version_projet[0];} elseif ($version == '+') {$this->obtenirDerniereVersion();} elseif ($version == '*' && empty($this->ressources) == false ) {$this->chargerVersions();$total = count($this->metadonnees);for($i = 0 ; $i < $total ; $i++) {$this->version[$i] = $this->metadonnees[$i]['version'];$this->version_projet[$i] = 'v'.str_replace('.', '_',$this->version[$i]);$this->table_version[$i] = Config::get('bdd_table').''.$this->version_projet[$i];}}else {$e = 'Erreur parametre version inconnu. ';$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);}} else {$this->obtenirDerniereVersion();}}private function obtenirDerniereVersion(){$this->chargerVersions();$this->version[] = $this->metadonnees[0]['version'];$this->version_projet[] ='v'.str_replace('.', '_',$this->metadonnees[0]['version']);$this->table_version[] = Config::get('bdd_table').''.$this->version_projet[0];}private function chargerVersions() {$requete = "SELECT version "."FROM ".Config::get('bdd_table_meta')." "."ORDER BY date_creation DESC ";$resultats = $this->Bdd->recupererTous($requete);if (!is_array($resultats) || count($resultats) <= 0) {$message = "Les méta-données n'ont pu être chargée pour la ressource demandée";$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;throw new Exception($message, $code);}$this->metadonnees = $resultats;}*/private function analyserMasque($valeur, $type_masque) {$this->masque[] = "$type_masque=$valeur";if (empty($valeur)) {$e = 'renseignez une valeur pour masque.nn';$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);} elseif (preg_match('/^[0-9]+$/', $valeur)) {$this->requete_condition[] = " flore_bdtfx_".$type_masque." = $valeur";} elseif (preg_match('/[0-9]+/', $valeur)){$nums = explode(',', $valeur);$total = count($nums);$condition = '';for ($i = 0; $i < $total; $i++) {$condition .= " flore_bdtfx_".$type_masque." = {$nums[$i]}";if ($i < ($total-1) ) {$condition .= " OR ";}}$this->requete_condition[] = $condition;} else {$e = "valeur incorrecte pour masque.".$type_masque;$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);}}/*public function verifierFormat($format) {if (in_array($format, $this->formats_supportes)) {$this->format_retour = $format;} else {$e = "Le format $format demandé n'est pas disponible.";$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);}}*///+-------------------------------------------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 donnerVersionDuneTable($table) {$version = strstr($table,'v');$version = str_replace('v','', $version);$version = str_replace('_','.', $version);return $version;}*/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;}}?>