Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 307 | Rev 313 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 307 Rev 310
Line 1... Line 1...
1
<?php
1
<?php
2
/**
2
/**
3
* Web service particulier pour photoflora, qui ne doit être installé sur tela botanica
3
* Web service particulier pour photoflora, qui ne doitpas être installé sur tela botanica
4
* mais sur photoflora.free.fr
4
* mais sur photoflora.free.fr
5
* Une redirection htaccess est à faire, redirigeant /service:eflore:0.1/photoflora/image 
5
* Une redirection htaccess est à faire, redirigeant /service:eflore:0.1/photoflora/image 
6
* vers le site photoflora à l'adresse ou seront installé les services web et le minimum
6
* vers le site photoflora à l'adresse ou seront installé les services web et le minimum
7
* nécessaire pour les faire fonctionner (framework + base de code eflore-projet ou peut être moins) 
7
* nécessaire pour les faire fonctionner (framework + base de code eflore-projet ou peut-être moins) 
8
* 
8
* 
9
* La table des metadonnées est, elle, stockée sur Tela Botanica
9
* La table des metadonnées est, elle, stockée sur Tela Botanica
10
* Le service est dans le même dépot que les autres par souci de commodité
10
* Le service est dans le même dépot que les autres par souci de commodité
11
* 
11
* 
12
*/
12
*/
Line 15... Line 15...
15
	const MIME_JPEG = 'image/jpeg';
15
	const MIME_JPEG = 'image/jpeg';
16
	const MIME_JSON = 'application/json';
16
	const MIME_JSON = 'application/json';
17
	const MIME_XML = 'text/xml';
17
	const MIME_XML = 'text/xml';
Line 18... Line 18...
18
	
18
	
-
 
19
	//TODO déplacer ceci dans des parametres de config
19
	//TODO déplacer ceci dans des parametres de config
20
	const BDD_PF = 'photoflora';
20
	private $efph_url_photo = 'http://photoflora.free.fr/photos/٪s/max/%s';
21
	private $efph_url_photo = 'http://photoflora.free.fr/photos/%s/max/%s';
21
	private $efph_url_photo_bb = 'http://photoflorabb.free.fr/max/bb%s';
22
	private $efph_url_photo_bb = 'http://photoflorabb.free.fr/max/%s';
22
	private $efph_url_photo_jlt = 'http://photoflorajlt.free.fr/max/jlt%s';
23
	private $efph_url_photo_jlt = 'http://photoflorajlt.free.fr/max/%s';
-
 
24
	
23
	
25
	private $efph_url_photo_min = 'http://photoflora.free.fr/photos/%s/min/%s';
24
	private $efph_url_photo_bb_min = 'http://photoflora.free.fr/photos/bb/min/bb%s';
26
	private $efph_url_photo_bb_min = 'http://photoflora.free.fr/photos/bb/min/%s';
Line 25... Line 27...
25
	private $efph_url_photo_jlt_min = 'http://photoflora.free.fr/photos/jlt/min/jlt%s';
27
	private $efph_url_photo_jlt_min = 'http://photoflora.free.fr/photos/jlt/min/%s';
26
	
28
	
27
	private $parametres = array();
29
	private $parametres = array();
Line 45... Line 47...
45
		$this->definirValeurParDefautDesParametres();
47
		$this->definirValeurParDefautDesParametres();
Line 46... Line 48...
46
				
48
				
47
		$this->format = (isset($this->parametres['retour.format']) && $this->parametres['retour.format'] != '') ?  $this->parametres['retour.format'] : $this->format;
49
		$this->format = (isset($this->parametres['retour.format']) && $this->parametres['retour.format'] != '') ?  $this->parametres['retour.format'] : $this->format;
48
		$this->retour_mime = (isset($this->parametres['retour']) && $this->parametres['retour'] != '') ?  $this->parametres['retour'] : $this->retour_mime;
50
		$this->retour_mime = (isset($this->parametres['retour']) && $this->parametres['retour'] != '') ?  $this->parametres['retour'] : $this->retour_mime;
49
		// TODO: décommenter lors de la mise en prod
51
		// TODO: décommenter lors de la mise en prod
50
		//$photographies = $this->getImagesPourNumTax($ressources[0]);
52
		//$photographies = $this->obtenirImages();
51
		//TODO commenter lors de la mise en prod
53
		//TODO commenter lors de la mise en prod
52
		$photographies = $this->getResultatTest();
54
		$photographies = $this->getResultatTest();
Line 53... Line 55...
53
		$this->nbreImages = count($photographies);
55
		$this->nbreImages = count($photographies);
Line 76... Line 78...
76
		return $entete;
78
		return $entete;
77
	}
79
	}
Line 78... Line 80...
78
	
80
	
79
	private function recupererMasque() {
81
	private function recupererMasque() {
80
		$masqueEntete = '';
82
		$masqueEntete = '';
81
		// on récupère un num tax en fait
83
		foreach ($this->parametres as $param => $cle) {
82
		if ($masqueNn = $this->parametres['masque.nn']) {
84
			if ($param == 'masque') {
-
 
85
				$masqueEntete = 'masque='.$cle.',';
-
 
86
			} elseif (substr($param, 0, 7) == 'masque.') {
-
 
87
				$masqueEntete .= substr($param, 7).'='.$cle.',';
83
			$masqueEntete = "nn=$masqueNn";
88
			}
-
 
89
		}
84
		}
90
		$masqueEntete = rtrim($masqueEntete,',');
85
		return $masqueEntete;
91
		return $masqueEntete;
Line 86... Line 92...
86
	}
92
	}
87
	
93
	
Line 97... Line 103...
97
		}
103
		}
98
		if (isset($this->parametres['navigation.limite']) == false) {
104
		if (isset($this->parametres['navigation.limite']) == false) {
99
			$this->parametres['navigation.limite'] = 100;
105
			$this->parametres['navigation.limite'] = 100;
100
		}
106
		}
101
	}
107
	}
102
	
108
 
103
	//TODO utiliser le num nom ?
-
 
104
	// en attendant on triche sur le paramètre du service, à changer lorsque l'on connaitra le format de la bdd
-
 
105
	public function getImagesPourNumTax($nt) {
109
	public function obtenirImages() {
106
		$requetes_taxon = 	'SELECT photos.*, taxons.Combinaison, photographes.Nom, photographes.Prenom, photographes.Initiales, photographes.Mail '.
110
		$requete = 	'SELECT photos.*,taxons.NumTaxon, taxons.NumNomen, taxons.Combinaison, photographes.Nom, photographes.Prenom, photographes.Initiales, photographes.Mail '.
107
								'FROM photos, photographes, taxons '.
111
								'FROM '.self::BDD_PF.'.photos, '.self::BDD_PF.'.photographes, '.self::BDD_PF.'.taxons '.
108
								'WHERE photos.NumTaxon = '.$this->Bdd->proteger($nt).' '.
112
								'WHERE '.
109
								'AND photos.Auteur = photographes.ID '.
113
								'photos.Auteur = photographes.ID '.
110
								'AND photos.NumTaxon = taxons.NumTaxon '.
114
								'AND photos.NumTaxon = taxons.NumTaxon '.
-
 
115
								$this->construireWhereNumNom().' '.
-
 
116
								$this->construireWhereNumTax().' '.
-
 
117
								$this->construireWhereNomSci().' '.
111
								'ORDER BY photos.support';
118
								$this->construireWhereAuteur().' '.								
-
 
119
								'ORDER BY photos.support LIMIT '.$this->parametres['navigation.depart'].','.$this->parametres['navigation.limite'];
112
		$resultat = $this->Bdd->recupererTous($requetes_taxon);
120
		$resultat = $this->Bdd->recupererTous($requete);		
113
		return $resultat;
121
		return $resultat;
114
	}
122
	}
Line -... Line 123...
-
 
123
	
-
 
124
	private function construireWhereNumNom() {
-
 
125
		return (isset($this->parametres['masque.nn'])) ? 'AND taxons.NumNomen = '.$this->Bdd->proteger($this->parametres['masque.nn']).' ' : '';
-
 
126
	}
-
 
127
	
-
 
128
	private function construireWhereNumTax() {
-
 
129
		return (isset($this->parametres['masque.nt'])) ? 'AND taxons.NumTaxon = '.$this->Bdd->proteger($this->parametres['masque.nt']).' ' : '';
-
 
130
	}
-
 
131
	
-
 
132
	private function construireWhereNomSci() {
-
 
133
		return (isset($this->parametres['masque.ns'])) ? 'AND taxons.Combinaison LIKE '.$this->Bdd->proteger($this->parametres['masque.ns'].'%').' ' : '';
-
 
134
	}
-
 
135
	
-
 
136
	private function construireWhereAuteur() {
-
 
137
		$requete_auteur = '';
-
 
138
		if (isset($this->parametres['masque.auteur'])) {
-
 
139
			$auteur_like = $this->Bdd->proteger($this->parametres['masque.auteur'].'%');
-
 
140
			$requete_auteur = 'AND photos.auteur = '.
-
 
141
			                    '(SELECT id FROM '.self::BDD_PF.'.photographes '.
-
 
142
			                    'WHERE '.
-
 
143
			                    'Nom LIKE '.$auteur_like.' OR '.
-
 
144
			                    'Prenom LIKE '.$auteur_like.' OR '.
-
 
145
								'Initiales LIKE '.$auteur_like.' OR '.
-
 
146
								'Mail LIKE '.$auteur_like.') ';	
-
 
147
		}			 	 	
-
 
148
		return $requete_auteur;
-
 
149
	}
115
	
150
	
116
	private function formaterRetourJson($photographies) {	
151
	private function formaterRetourJson($photographies) {	
117
		$resultat = array();
152
		$resultat = array();
Line 118... Line 153...
118
		foreach ($photographies as $photo) {
153
		foreach ($photographies as $photo) {
119
 
154
 
120
			$image = array();
155
			$image = array();
121
			$url = $this->getUrlPhotoPourInitiales($photo['Initiales'], $photo['NumPhoto']);
156
			$url = $this->getUrlPhotoPourInitiales($photo['Initiales'], $photo['NumPhoto']);
122
			$id = str_replace(array('.jpg','.jpeg'),'',$photo['NumPhoto']);
157
			$id = str_replace(array('.jpg','.jpeg'),'',$photo['NumPhoto']);
123
			// Post-traitement des valeurs
158
			// Post-traitement des valeurs
124
			$image['station'] = preg_replace('/^[ ]*:[ ]*/', '', $photo['lieu']);
159
			$image['station'] = $this->formaterChaineEncodeeBddPhotoflora($photo['lieu']);
-
 
160
			$image['date'] = $this->donnerDate($this->formaterChaineEncodeeBddPhotoflora($photo['Date']));
125
			$image['date'] = $photo['Date'];
161
			$image['auteur'] = $this->formaterChaineEncodeeBddPhotoflora($photo['Prenom'].' '.$photo['Nom']);
126
			$image['auteur'] = $photo['Prenom'].' '.$photo['Nom'];
162
			$image['determination'] = $photo['Combinaison'].' ['.$photo['Prenom'].' '.$photo['Nom'].']';
127
			$image['determination.nom_sci'] = $photo['Objet'];
163
			$image['determination.nom_sci'] = $photo['Combinaison'];
Line 128... Line -...
128
			$image['determination.nom_sci.code'] = "bdtfx.".$this->parametres['masque.nn'];
-
 
129
			$image['binaire.href'] = $url;
-
 
130
			
-
 
131
			// TODO: comment remplir ces champs ci ? voir la base de données
-
 
132
			/**    "determination": "nom_sci [Dét. : auteur]",
-
 
133
			 *     "determination.nom_sci": "nom_sci",
-
 
134
			 *     "determination.nom_sci.code": "bdtfx.num_nom"
164
			$image['determination.nom_sci.code'] = "bdtfx.".$photo['NumNomen'];
135
			*/
165
			$image['binaire.href'] = $url;
Line 136... Line 166...
136
			
166
			
137
			$resultat[$id] = $image;
167
			$resultat[$id] = $image;
Line -... Line 168...
-
 
168
		}
-
 
169
		
-
 
170
		return $resultat;
-
 
171
	}
-
 
172
	
-
 
173
	private function formaterChaineEncodeeBddPhotoflora($chaine) {
138
		}
174
		return $chaine = preg_replace_callback("/(&#[0-9]+;)/", function($m) {
139
		
175
			return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES");
140
		return $resultat;
176
		}, $chaine);
141
	}
177
	}
142
	
178
	
Line 183... Line 219...
183
			$url = sprintf($base_url, $num_photo);
219
			$url = sprintf($base_url, $num_photo);
184
		} else if ($initiales == 'jlt') {
220
		} else if ($initiales == 'jlt') {
185
			$base_url = ($this->format == 'max') ? $this->efph_url_photo_jlt : $this->efph_url_photo_jlt_min;
221
			$base_url = ($this->format == 'max') ? $this->efph_url_photo_jlt : $this->efph_url_photo_jlt_min;
186
			$url = sprintf($base_url, $num_photo);
222
			$url = sprintf($base_url, $num_photo);
187
		} else {
223
		} else {
-
 
224
			$base_url = ($this->format == 'max') ? $this->efph_url_photo : $this->efph_url_photo_min;
188
			$url = sprintf($this->efph_url_photo, $initiales, $num_photo);
225
			$url = sprintf($base_url, $initiales, $num_photo);
189
		}
226
		}
Line 190... Line 227...
190
		
227
		
191
		return $url;
228
		return $url;
Line 192... Line 229...
192
	}
229
	}
193
	
230
	
194
	private function getResultatTest() {
231
	private function getResultatTest() {
195
		$photographies = array();
232
		$photographies = array();
-
 
233
		$photographies[] = array('Initiales' => 'bb',
196
		$photographies[] = array('Initiales' => 'bb',
234
				'NumPhoto' => 'bb047230.jpg', 
197
				'NumPhoto' => '047230.jpg', 
235
				'NumNomen' => '182',
198
				'lieu' => 'Ristolas - Hautes Alpes (05) [France]',
236
				'lieu' => 'Ristolas - Hautes Alpes (05) [France]',
199
				'Combinaison' => '',
237
				'Combinaison' => '',
200
				'Objet' => 'Vue générale, en fleur cv Musik - Canon EOS 350D DIGITAL - Expo : 1/160 sec. - Ouv. : f8 - ISO : 100 - flash : non - foc. : 60 - pix. : 8 Mp.',
238
				'Objet' => 'Vue générale, en fleur cv Musik - Canon EOS 350D DIGITAL - Expo : 1/160 sec. - Ouv. : f8 - ISO : 100 - flash : non - foc. : 60 - pix. : 8 Mp.',
Line 227... Line 265...
227
	 * @return string le texte correspondant au type de support
265
	 * @return string le texte correspondant au type de support
228
	 */
266
	 */
229
	function donnerTxtSupport($support) {
267
	function donnerTxtSupport($support) {
230
		switch ($support) {
268
		switch ($support) {
231
			case '0':
269
			case '0':
232
				$support = 'Photographie num&#233;rique (6 éﻯgapixels)';
270
				$support = 'Photographie num&#233;rique (6 mégapixels)';
233
				break;
271
				break;
234
			case '1':
272
			case '1':
235
				$support = 'Diapositive';
273
				$support = 'Diapositive';
236
				break;
274
				break;
237
			case '10':
275
			case '10':
Line 261... Line 299...
261
					break;
299
					break;
262
				case 'png':
300
				case 'png':
263
					$type = 'image/png';
301
					$type = 'image/png';
264
					break;
302
					break;
265
				default:
303
				default:
266
					$type = 'Erreur Mime : péﻯvenir eflore_remarques@tela-botanica.org';
304
					$type = 'Erreur Mime : prévenir eflore_remarques@tela-botanica.org';
267
			}
305
			}
268
		} else {
306
		} else {
269
			$type = 'Erreur Mime : prévenir eflore_remarques@tela-botanica.org';
307
			$type = 'Erreur Mime : prévenir eflore_remarques@tela-botanica.org';
270
		}
308
		}
271
		return $type;
309
		return $type;
Line 302... Line 340...
302
					break;
340
					break;
303
				case 'juillet' :
341
				case 'juillet' :
304
					$mois_sortie = '07';
342
					$mois_sortie = '07';
305
					break;
343
					break;
306
				case 'aout' :
344
				case 'aout' :
307
				case 'aoﻝt' :
345
				case 'août' :
308
					$mois_sortie = '08';
346
					$mois_sortie = '08';
309
					break;
347
					break;
310
				case 'septembre' :
348
				case 'septembre' :
311
					$mois_sortie = '09';
349
					$mois_sortie = '09';
312
					break;
350
					break;