Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 6 | Rev 496 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6 jpm 1
<?php
2
 
490 mathilde 3
/**
4
* classe pour web service qui affiche les images de Coste.
5
* il n'existe qu'une seule version pour les images de Coste : 2.00
6
* retour en application/json
7
*
8
* exemple d'appel du service  :
9
* .../service:eflore:0.1/coste/images?masque.nt=1053
10
* .../service:eflore:0.1/coste/images?masque.nn=39594,39601
11
* .../service:eflore:0.1/coste/images
12
*
13
* paramètres disponibles : navigation.depart, navigation.limite, masque.nn, masque.nt
14
*
15
* @package eFlore/services
16
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
17
* @author Mathilde Salthun-Lassalle <mathilde@tela-botanica.org>
18
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
19
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
20
* @version 1.0
21
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
22
*/
6 jpm 23
 
24
class Images extends Commun {
25
 
490 mathilde 26
	protected  $table ;
27
	private $requete_condition = array(" image != '' ");
28
	private $champs_recherches = " num_nom, image, flore_bdtfx_nn, flore_bdtfx_nt ";
29
	private $total_resultat;
30
	protected $limite_requete = array('depart' => 0, 'limite' => 100);
31
	private $masque = array();
6 jpm 32
 
490 mathilde 33
 
6 jpm 34
 
35
	public function consulter($ressources, $parametres) {
490 mathilde 36
		$this->ressources = $ressources;
37
		$this->parametres = $parametres;
38
		$this->traiterRessources();
39
		$this->traiterParametres();
40
		$this->table = config::get('bdd_table').'_v2_00';
41
		$requete = $this->assemblerLaRequete();
42
		$resultat = $this->getBdd()->recupererTous($requete);
43
		$versionResultat = $this->traiterResultat($resultat, $this->table, $requete);
44
		$resultats = $versionResultat;
45
		return $resultats;
6 jpm 46
	}
47
 
490 mathilde 48
	//+-----------------------------------traitement ressources et paramètres --------------------------------+
49
 
50
 
51
	public function traiterRessources() {
52
			if (empty($this->ressources) ) {
53
				if (isset($this->parametres['masque.nn']) == false
54
				&& isset($this->parametres['masque.nt']) == false) {
55
				$this->requete_condition[] = " flore_bdtfx_nt != '' AND flore_bdtfx_nn != '' ";
56
				}
6 jpm 57
			} else {
490 mathilde 58
				$e = "La ressource {$this->ressources[0]} n'existe pas.";
59
				$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
6 jpm 60
			}
61
	}
62
 
490 mathilde 63
	public function traiterParametres() {
64
		foreach ($this->parametres as $param => $val ) {
65
			switch ($param) {
66
				case 'masque.nt' :
67
					$this->analyserMasque($val,'nt');
68
					break;
69
				case 'masque.nn' :
70
					$this->analyserMasque($val,'nn');
71
					break;
72
				case 'navigation.depart' :
73
					$this->limite_requete['depart'] = $val;
74
					break;
75
				case 'navigation.limite' :
76
					$this->limite_requete['limite'] = $val;
77
					break;
78
				default :
79
					$e = 'Erreur dans les paramètres de recherche de votre requête : </br> Le parametre " '
80
					.$param.' " n\'existe pas.';
81
					$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
82
					break;
6 jpm 83
			}
490 mathilde 84
		}
6 jpm 85
	}
86
 
490 mathilde 87
	/*private function traiterVersion() {
88
		if( isset($this->parametres['version.projet']) ) {
89
			$version = $this->parametres['version.projet'];
90
			if (preg_match('/^([0-9]+(?:[._][0-9]+|))$/', $version, $retour)) {
91
					$this->version[] = $retour[0];
92
					$this->version_projet[] = 'v'.str_replace('.', '_', $this->version[0]);
93
					$this->table_version[] = Config::get('bdd_table').''.$this->version_projet[0];
94
				} elseif ($version ==  '+')  {
95
					$this->obtenirDerniereVersion();
96
				} elseif ($version ==  '*' && empty($this->ressources) == false ) {
97
					$this->chargerVersions();
98
					$total = count($this->metadonnees);
99
					for($i = 0 ; $i < $total ; $i++) {
100
						$this->version[$i] = $this->metadonnees[$i]['version'];
101
						$this->version_projet[$i] = 'v'.str_replace('.', '_',$this->version[$i]);
102
						$this->table_version[$i] = Config::get('bdd_table').''.$this->version_projet[$i];
103
					}
104
				}else {
105
					$e = 'Erreur parametre version inconnu. ';
106
					$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
107
				}
108
		} else {
109
			$this->obtenirDerniereVersion();
6 jpm 110
		}
111
 
112
	}
113
 
490 mathilde 114
	private function obtenirDerniereVersion(){
115
		$this->chargerVersions();
116
		$this->version[] = $this->metadonnees[0]['version'];
117
		$this->version_projet[] ='v'.str_replace('.', '_',$this->metadonnees[0]['version']);
118
		$this->table_version[] = Config::get('bdd_table').''.$this->version_projet[0];
119
	}
120
 
121
	private function chargerVersions() {
122
		$requete = "SELECT version ".
123
							"FROM ".Config::get('bdd_table_meta')." ".
124
							"ORDER BY date_creation DESC ";
125
		$resultats = $this->Bdd->recupererTous($requete);
126
		if (!is_array($resultats) || count($resultats) <= 0) {
127
			$message = "Les méta-données n'ont pu être chargée pour la ressource demandée";
128
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
129
			throw new Exception($message, $code);
130
		}
131
 
132
		$this->metadonnees = $resultats;
133
	}*/
134
 
135
 
6 jpm 136
 
490 mathilde 137
	private function analyserMasque($valeur, $type_masque) {
138
		$this->masque[] = "$type_masque=$valeur";
139
		if (empty($valeur)) {
140
			$e = 'renseignez une valeur pour masque.nn';
141
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
142
		} elseif (preg_match('/^[0-9]+$/', $valeur)) {
143
			$this->requete_condition[] = " flore_bdtfx_".$type_masque." = $valeur";
144
		} elseif (preg_match('/[0-9]+/', $valeur)){
145
			$nums = explode(',', $valeur);
146
			$total = count($nums);
147
			$condition = '';
148
			for ($i = 0; $i < $total;  $i++) {
149
				$condition .= " flore_bdtfx_".$type_masque." = {$nums[$i]}";
150
				if ($i < ($total-1) ) {
151
					$condition .= " OR ";
6 jpm 152
				}
153
			}
490 mathilde 154
			$this->requete_condition[] = $condition;
155
		} else {
156
			$e = "valeur incorrecte pour masque.".$type_masque;
157
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
6 jpm 158
		}
159
	}
160
 
161
 
162
 
163
 
490 mathilde 164
	/*public function verifierFormat($format) {
165
		if (in_array($format, $this->formats_supportes)) {
166
			$this->format_retour = $format;
167
		} else {
168
			$e = "Le format $format demandé n'est pas disponible.";
169
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
170
		}
171
	}*/
6 jpm 172
 
173
 
490 mathilde 174
//+-------------------------------------------formatage résultats---------------------------------------------+
6 jpm 175
 
490 mathilde 176
	public function retournerResultatFormate($resultat, $table) {
177
		$resultat_json = array();
178
			$resultat_json['entete'] = $this->formaterEnteteResultat();
179
		foreach ($resultat as $tab) {
180
			$num_coste = $tab['num_nom'];
181
			unset($tab['num_nom']);
182
			$resultat_json['resultats'][$num_coste]['num_nomenclatural'] = $tab['flore_bdtfx_nn'];
183
			$resultat_json['resultats'][$num_coste]['num_taxonomique'] = $tab['flore_bdtfx_nt'];
184
			$resultat_json['resultats'][$num_coste]['binaire.href'] = $this->formaterUrlImage($tab['image']);
185
			$resultat_json['resultats'][$num_coste]['mime'] = "images/png";
6 jpm 186
		}
490 mathilde 187
		return $resultat_json;
6 jpm 188
	}
189
 
490 mathilde 190
	public function formaterUrlImage($fichier) {
191
		$chemin = config::get('donnees')."2.00/img/$fichier";
192
		return $chemin;
6 jpm 193
	}
194
 
490 mathilde 195
 
196
	/*public function donnerVersionDuneTable($table) {
197
		$version = strstr($table,'v');
198
		$version = str_replace('v','', $version);
199
		$version = str_replace('_','.', $version);
200
		return $version;
201
	}*/
6 jpm 202
 
490 mathilde 203
	public function formaterEnteteResultat() {
204
		$entete['depart'] = $this->limite_requete['depart'];
205
		$entete['limite'] = $this->limite_requete['limite'];
206
		$entete['total']  =  $this->total_resultat;
207
		$entete['masque']  = empty($this->masque) ? 'aucun' : implode('&', $this->masque);
208
		$url = $this->formulerUrl($this->total_resultat, '/images');
209
		if (isset($url['precedent']) && $url['precedent'] != '') {
210
			$entete['href.precedent'] = $url['precedent'];
6 jpm 211
		}
490 mathilde 212
		if (isset($url['suivant']) && $url['suivant'] != '') {
213
			$entete['href.suivant']   = $url['suivant'];
6 jpm 214
		}
490 mathilde 215
		return $entete;
6 jpm 216
	}
217
 
490 mathilde 218
	//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+
6 jpm 219
 
490 mathilde 220
	public function assemblerLaRequete() {
221
		$requete = 	' SELECT '.$this->champs_recherches.' FROM '.$this->table.' '
222
		.$this->retournerRequeteCondition().' '
223
		.$this->delimiterResultatsRequete();
224
		return $requete;
6 jpm 225
	}
226
 
490 mathilde 227
 
6 jpm 228
 
490 mathilde 229
	public  function retournerRequeteCondition() {
230
		$condition = '';
231
		if (empty($this->requete_condition) == false) {
232
			$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
233
		}
234
		return $condition;
6 jpm 235
	}
236
 
490 mathilde 237
 
6 jpm 238
 
490 mathilde 239
	public function calculerTotalResultat() {
240
		$requete = 'SELECT count(*) as nombre FROM '.$this->table.' '
241
		.$this->retournerRequeteCondition();
242
		$res = $this->getBdd()->recuperer($requete);
6 jpm 243
		if ($res) {
490 mathilde 244
			$this->total_resultat = $res['nombre'];
245
		} else {
246
			$this->total_resultat = 0;
247
			$e = 'Données introuvables dans la base';
248
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
6 jpm 249
		}
250
	}
251
 
252
 
490 mathilde 253
	public function delimiterResultatsRequete() {
254
		$this->calculerTotalResultat();
255
		$requete_limite = '';
256
		if ((count($this->ressources)) == 0)  {
257
			if (($this->limite_requete['depart'] <  $this->total_resultat) &&
258
				(($this->limite_requete['limite'] + $this->limite_requete['depart'] )
259
				 < $this->total_resultat  )) {
260
					$requete_limite = 'LIMIT '.$this->limite_requete['depart'].', '
261
					.$this->limite_requete['limite'];
6 jpm 262
			}
263
		}
490 mathilde 264
		return $requete_limite;
6 jpm 265
	}
266
 
267
}
268
?>