Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 571 Rev 611
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
	
36
	public function consulter($ressources, $parametres) {
36
	public function consulter($ressources, $parametres) {
37
		$this->ressources = $ressources;
37
		$this->ressources = $ressources;
38
		$this->parametres = $parametres;
38
		$this->parametres = $parametres;
39
		$this->traiterRessources();
39
		$this->traiterRessources();
40
		$this->traiterParametres();
40
		$this->traiterParametres();
41
		$this->table = config::get('bdd_table').'_v2_00'; 
41
		$this->table = config::get('bdd_table').'_v2_00'; 
42
		$requete = $this->assemblerLaRequete();
42
		$requete = $this->assemblerLaRequete();
43
		$resultat = $this->getBdd()->recupererTous($requete);
43
		$resultat = $this->getBdd()->recupererTous($requete);
44
		$resultats = $this->formaterResultat($resultat);
44
		$resultats = $this->formaterResultat($resultat);
45
		return $resultats;
45
		return $resultats;
46
	}
46
	}
47
	
47
	
48
	//+-----------------------------------traitement ressources et paramètres --------------------------------+
48
	//+-----------------------------------traitement ressources et paramètres --------------------------------+
49
	
49
	
50
	
50
	
51
	public function traiterRessources() {
51
	public function traiterRessources() {
52
			if (empty($this->ressources) ) {
52
			if (empty($this->ressources) ) {
53
				if (isset($this->parametres['masque.nn']) == false
53
				if (isset($this->parametres['masque.nn']) == false
54
				&& isset($this->parametres['masque.nt']) == false) {
54
				&& isset($this->parametres['masque.nt']) == false) {
55
				$this->requete_condition[] = " flore_bdtfx_nt != '' AND flore_bdtfx_nn != '' ";
55
				$this->requete_condition[] = " flore_bdtfx_nt != '' AND flore_bdtfx_nn != '' ";
56
				}
56
				}
57
			} else {
57
			} else {
58
				$e = "La ressource {$this->ressources[0]} n'existe pas.";
58
				$e = "La ressource {$this->ressources[0]} n'existe pas.";
59
				$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
59
				$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
60
			}
60
			}
61
	}
61
	}
62
	
62
	
63
	public function traiterParametres() {
63
	public function traiterParametres() {
64
		foreach ($this->parametres as $param => $val ) {
64
		foreach ($this->parametres as $param => $val ) {
65
			switch ($param) {
65
			switch ($param) {
66
				case 'masque.nt' :
66
				case 'masque.nt' :
67
					$this->analyserMasque($val,'nt');
67
					$this->analyserMasque($val,'nt');
68
					break;
68
					break;
69
				case 'masque.nn' :
69
				case 'masque.nn' :
70
					$this->analyserMasque($val,'nn');
70
					$this->analyserMasque($val,'nn');
71
					break;
71
					break;
72
				case 'navigation.depart' :
72
				case 'navigation.depart' :
73
					$this->limite_requete['depart'] = $val;
73
					$this->limite_requete['depart'] = $val;
74
					break;
74
					break;
75
				case 'navigation.limite' :
75
				case 'navigation.limite' :
76
					$this->limite_requete['limite'] = $val;
76
					$this->limite_requete['limite'] = $val;
77
					break;
77
					break;
78
				default : 
78
				default : 
79
					$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 " '
80
					.$param.' " n\'existe pas.';
80
					.$param.' " n\'existe pas.';
81
					$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
81
					$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
82
					break;
82
					break;
83
			}
83
			}
84
		}
84
		}
85
	}
85
	}
86
	
86
	
87
	
87
	
88
 
88
 
89
	
89
	
90
	private function analyserMasque($valeur, $type_masque) {
90
	private function analyserMasque($valeur, $type_masque) {
91
		$this->masque[] = "$type_masque=$valeur";
91
		$this->masque[] = "$type_masque=$valeur";
92
		if (empty($valeur)) {
92
		if (empty($valeur)) {
93
			$e = 'renseignez une valeur pour masque.nn';
93
			$e = 'renseignez une valeur pour masque.nn';
94
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
94
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
95
		} elseif (preg_match('/^[0-9]+$/', $valeur)) {
95
		} elseif (preg_match('/^[0-9]+$/', $valeur)) {
96
			$this->requete_condition[] = " flore_bdtfx_".$type_masque." = $valeur";
96
			$this->requete_condition[] = " flore_bdtfx_".$type_masque." = $valeur";
97
		} elseif (preg_match('/[0-9]+/', $valeur)){
97
		} elseif (preg_match('/[0-9]+/', $valeur)){
98
			// suppression des valeurs vides
98
			// suppression des valeurs vides
99
			while(strstr($valeur,',,')) {
99
			while(strstr($valeur,',,')) {
100
				$valeur = str_replace(',,',',',$valeur);
100
				$valeur = str_replace(',,',',',$valeur);
101
			}
101
			}
102
			$condition = " flore_bdtfx_".$type_masque." IN ($valeur)";
102
			$condition = " flore_bdtfx_".$type_masque." IN ($valeur) AND flore_bdtfx_".$type_masque." not in (0, '')";
103
			$this->requete_condition[] = $condition;
103
			$this->requete_condition[] = $condition;
104
		} else {
104
		} else {
105
			$e = "valeur incorrecte pour masque.".$type_masque;
105
			$e = "valeur incorrecte pour masque.".$type_masque;
106
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
106
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,$e);
107
		}
107
		}
108
	}
108
	}
109
	
109
	
110
	
110
	
111
	
111
	
112
	
112
	
113
 
113
 
114
//+-------------------------------------------formatage résultats---------------------------------------------+
114
//+-------------------------------------------formatage résultats---------------------------------------------+
115
 
115
 
116
	public function formaterResultat($resultat) {
116
	public function formaterResultat($resultat) {
117
		$versionResultat['entete'] = $this->formaterEnteteResultat();;
117
		$versionResultat['entete'] = $this->formaterEnteteResultat();;
118
		if ($resultat == '') {
118
		if ($resultat == '') {
119
			$message = 'La requête SQL formée comporte une erreur!';
119
			$message = 'La requête SQL formée comporte une erreur!';
120
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
120
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
121
			throw new Exception($message, $code);
121
			throw new Exception($message, $code);
122
		} elseif ($resultat) {
122
		} elseif ($resultat) {
123
			$versionResultat = $this->retournerResultatFormate($resultat);
123
			$versionResultat = $this->retournerResultatFormate($resultat);
124
		} else {
124
		} else {
125
			$versionResultat['resultats'] = array();
125
			$versionResultat['resultats'] = array();
126
		}
126
		}
127
		return $versionResultat;
127
		return $versionResultat;
128
	}
128
	}
129
	
129
	
130
	public function retournerResultatFormate($resultat) {
130
	public function retournerResultatFormate($resultat) {
131
		$resultat_json = array();
131
		$resultat_json = array();
132
			foreach ($resultat as $tab) {
132
			foreach ($resultat as $tab) {
133
				$num_coste = $tab['num_nom'];
133
				$num_coste = $tab['num_nom'];
134
				unset($tab['num_nom']);
134
				unset($tab['num_nom']);
135
				$resultat_json['resultats'][$num_coste]['num_nomenclatural'] = $tab['flore_bdtfx_nn'];
135
				$resultat_json['resultats'][$num_coste]['num_nomenclatural'] = $tab['flore_bdtfx_nn'];
136
				$resultat_json['resultats'][$num_coste]['num_taxonomique'] = $tab['flore_bdtfx_nt'];
136
				$resultat_json['resultats'][$num_coste]['num_taxonomique'] = $tab['flore_bdtfx_nt'];
137
				$resultat_json['resultats'][$num_coste]['binaire.href'] = $this->formaterUrlImage($tab['image']);
137
				$resultat_json['resultats'][$num_coste]['binaire.href'] = $this->formaterUrlImage($tab['image']);
138
				$resultat_json['resultats'][$num_coste]['mime'] = "images/png";
138
				$resultat_json['resultats'][$num_coste]['mime'] = "images/png";
139
			}
139
			}
140
		return $resultat_json;
140
		return $resultat_json;
141
	}
141
	}
142
	
142
	
143
	public function formaterUrlImage($fichier) {
143
	public function formaterUrlImage($fichier) {
144
		$chemin = config::get('donnees')."2.00/img/$fichier"; 
144
		$chemin = config::get('donnees')."2.00/img/$fichier"; 
145
		return $chemin;
145
		return $chemin;
146
	}
146
	}
147
	
147
	
148
 
148
 
149
	
149
	
150
	
150
	
151
	public function formaterEnteteResultat() {
151
	public function formaterEnteteResultat() {
152
		$entete['depart'] = $this->limite_requete['depart'];
152
		$entete['depart'] = $this->limite_requete['depart'];
153
		$entete['limite'] = $this->limite_requete['limite'];
153
		$entete['limite'] = $this->limite_requete['limite'];
154
		$entete['total']  =  $this->total_resultat;
154
		$entete['total']  =  $this->total_resultat;
155
		$entete['masque']  = empty($this->masque) ? 'aucun' : implode('&', $this->masque);
155
		$entete['masque']  = empty($this->masque) ? 'aucun' : implode('&', $this->masque);
156
		$url = $this->formulerUrl($this->total_resultat, '/images');
156
		$url = $this->formulerUrl($this->total_resultat, '/images');
157
		if (isset($url['precedent']) && $url['precedent'] != '') {
157
		if (isset($url['precedent']) && $url['precedent'] != '') {
158
			$entete['href.precedent'] = $url['precedent'];
158
			$entete['href.precedent'] = $url['precedent'];
159
		}
159
		}
160
		if (isset($url['suivant']) && $url['suivant'] != '') {
160
		if (isset($url['suivant']) && $url['suivant'] != '') {
161
			$entete['href.suivant']   = $url['suivant'];
161
			$entete['href.suivant']   = $url['suivant'];
162
		}
162
		}
163
		return $entete;
163
		return $entete;
164
	}
164
	}
165
	
165
	
166
	//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+
166
	//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+
167
	
167
	
168
	public function assemblerLaRequete() {
168
	public function assemblerLaRequete() {
169
		$requete = 	' SELECT '.$this->champs_recherches.' FROM '.$this->table.' '
169
		$requete = 	' SELECT '.$this->champs_recherches.' FROM '.$this->table.' '
170
		.$this->retournerRequeteCondition().' '
170
		.$this->retournerRequeteCondition().' '
171
		.$this->delimiterResultatsRequete();
171
		.$this->delimiterResultatsRequete();
172
		return $requete;
172
		return $requete;
173
	}
173
	}
174
	
174
	
175
 
175
 
176
	
176
	
177
	public  function retournerRequeteCondition() {
177
	public  function retournerRequeteCondition() {
178
		$condition = '';
178
		$condition = '';
179
		if (empty($this->requete_condition) == false) {
179
		if (empty($this->requete_condition) == false) {
180
			$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
180
			$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
181
		}
181
		}
182
		return $condition;
182
		return $condition;
183
	}
183
	}
184
	
184
	
185
 
185
 
186
	
186
	
187
	public function calculerTotalResultat() {
187
	public function calculerTotalResultat() {
188
		$requete = 'SELECT count(*) as nombre FROM '.$this->table.' '
188
		$requete = 'SELECT count(*) as nombre FROM '.$this->table.' '
189
		.$this->retournerRequeteCondition();
189
		.$this->retournerRequeteCondition();
190
		$res = $this->getBdd()->recuperer($requete);
190
		$res = $this->getBdd()->recuperer($requete);
191
		if ($res) {
191
		if ($res) {
192
			$this->total_resultat = $res['nombre'];
192
			$this->total_resultat = $res['nombre'];
193
		} else { 
193
		} else { 
194
			$this->total_resultat = 0;
194
			$this->total_resultat = 0;
195
			$e = 'Données introuvables dans la base';
195
			$e = 'Données introuvables dans la base';
196
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
196
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
197
		}
197
		}
198
	}
198
	}
199
	
199
	
200
	
200
	
201
	public function delimiterResultatsRequete() {
201
	public function delimiterResultatsRequete() {
202
		$this->calculerTotalResultat();
202
		$this->calculerTotalResultat();
203
		$requete_limite = '';
203
		$requete_limite = '';
204
		if ((count($this->ressources)) == 0)  {
204
		if ((count($this->ressources)) == 0)  {
205
			if (($this->limite_requete['depart'] <  $this->total_resultat) && 
205
			if (($this->limite_requete['depart'] <  $this->total_resultat) && 
206
				(($this->limite_requete['limite'] + $this->limite_requete['depart'] )
206
				(($this->limite_requete['limite'] + $this->limite_requete['depart'] )
207
				 < $this->total_resultat  )) {  
207
				 < $this->total_resultat  )) {  
208
					$requete_limite = 'LIMIT '.$this->limite_requete['depart'].', '
208
					$requete_limite = 'LIMIT '.$this->limite_requete['depart'].', '
209
					.$this->limite_requete['limite'];
209
					.$this->limite_requete['limite'];
210
			} 
210
			} 
211
		}
211
		}
212
		return $requete_limite;
212
		return $requete_limite;
213
	}
213
	}
214
	
214
	
215
}
215
}
216
?>
216
?>