Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 496 | Rev 530 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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