Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 367 Rev 408
1
<?php
1
<?php
2
/**
2
/**
3
* Web service particulier pour photoflora, qui ne doitpas ê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
*/
13
class Images {
13
class Images {
14
	
14
 
15
	const MIME_JPEG = 'image/jpeg';
15
	const MIME_JPEG = 'image/jpeg';
-
 
16
	const MIME_PNG = 'image/png';
16
	const MIME_JSON = 'application/json';
17
	const MIME_JSON = 'application/json';
17
	const MIME_XML = 'text/xml';
18
	const MIME_XML = 'text/xml';
18
	
19
 
19
	//TODO déplacer ceci dans des parametres de config
20
	//TODO déplacer ceci dans des parametres de config
20
	const BDD_PF = 'photoflora';
21
	const BDD_PF = 'photoflora';
21
	private $efph_url_photo = 'http://photoflora.free.fr/photos/%s/max/%s';
22
	private $efph_url_photo = 'http://photoflora.free.fr/photos/%s/max/%s';
22
	private $efph_url_photo_bb = 'http://photoflorabb.free.fr/max/%s';
23
	private $efph_url_photo_bb = 'http://photoflorabb.free.fr/max/%s';
23
	private $efph_url_photo_jlt = 'http://photoflorajlt.free.fr/max/%s';
24
	private $efph_url_photo_jlt = 'http://photoflorajlt.free.fr/max/%s';
24
	
25
 
25
	private $efph_url_photo_min = 'http://photoflora.free.fr/photos/%s/min/%s';
26
	private $efph_url_photo_min = 'http://photoflora.free.fr/photos/%s/min/%s';
26
	private $efph_url_photo_bb_min = 'http://photoflora.free.fr/photos/bb/min/%s';
27
	private $efph_url_photo_bb_min = 'http://photoflora.free.fr/photos/bb/min/%s';
27
	private $efph_url_photo_jlt_min = 'http://photoflora.free.fr/photos/jlt/min/%s';
28
	private $efph_url_photo_jlt_min = 'http://photoflora.free.fr/photos/jlt/min/%s';
28
	
29
 
29
	private $parametres = array();
30
	private $parametres = array();
30
	private $ressources = array();
31
	private $ressources = array();
31
	private $Bdd;
32
	private $Bdd;
32
	
33
 
33
	private $format = 'min';
34
	private $format = 'min';
34
	private $retour_mime = 'application/json';
35
	private $retour_mime = 'application/json';
35
	private $nbreImages = '0';
36
	private $nbreImages = '0';
36
 
37
 
37
	public function __construct(Bdd $bdd = null, Array $config = null) {
38
	public function __construct(Bdd $bdd = null, Array $config = null) {
38
		$this->config = is_null($config) ? Config::get('Images') : $config;
39
		$this->config = is_null($config) ? Config::get('Images') : $config;
39
		$this->Bdd = is_null($bdd) ? new Bdd() : $bdd;
40
		$this->Bdd = is_null($bdd) ? new Bdd() : $bdd;
40
	}
41
	}
41
	
42
 
42
	public function consulter($ressources, $parametres) {
43
	public function consulter($ressources, $parametres) {
43
		
44
 
44
		$this->parametres = $parametres;
45
		$this->parametres = $parametres;
45
		$this->ressources = $ressources;
46
		$this->ressources = $ressources;
46
		
47
 
47
		$this->definirValeurParDefautDesParametres();
48
		$this->definirValeurParDefautDesParametres();
48
				
49
 
49
		$this->format = (isset($this->parametres['retour.format']) && $this->parametres['retour.format'] != '') ?  $this->parametres['retour.format'] : $this->format;
50
		$this->format = (isset($this->parametres['retour.format']) && $this->parametres['retour.format'] != '') ?  $this->parametres['retour.format'] : $this->format;
50
		$this->retour_mime = (isset($this->parametres['retour']) && $this->parametres['retour'] != '') ?  $this->parametres['retour'] : $this->retour_mime;
51
		$this->retour_mime = (isset($this->parametres['retour']) && $this->parametres['retour'] != '') ?  $this->parametres['retour'] : $this->retour_mime;
51
		$photographies = $this->getResultatTest();
52
		$photographies = $this->getResultatTest();
52
		if($this->retour_mime == self::MIME_JPEG) {
53
		if($this->retour_mime == self::MIME_JPEG) {
53
			$photo = $this->obtenirPremiereImage();
54
			$photo = $this->obtenirPremiereImage();
54
			$retour = $this->formaterRetourImageBinaire($photo);
55
			$retour = $this->formaterRetourImageBinaire($photo);
55
			echo $retour;
56
			echo $retour;
56
		} elseif($this->retour_mime == self::MIME_JSON) {
57
		} elseif($this->retour_mime == self::MIME_JSON) {
57
			$photographies = $this->obtenirImages();
58
			$photographies = $this->obtenirImages();
58
			$this->nbreImages = count($photographies);
59
			$this->nbreImages = count($photographies);
59
			$photographies_formatees = $this->formaterRetourJson($photographies);
60
			$photographies_formatees = $this->formaterRetourJson($photographies);
60
			$resultat = $photographies_formatees;
61
			$resultat = $photographies_formatees;
61
			$entete = $this->construireEntete();
62
			$entete = $this->construireEntete();
62
			return array('entete' => $entete, 'resultats' => $resultat);
63
			return array('entete' => $entete, 'resultats' => $resultat);
63
		} elseif ($this->retour_mime == self::MIME_XML) {
64
		} elseif ($this->retour_mime == self::MIME_XML) {
64
			$photographies = $this->obtenirImages();
65
			$photographies = $this->obtenirImages();
65
			$this->nbreImages = count($photographies);
66
			$this->nbreImages = count($photographies);
66
			$photographies_formatees = $this->formaterRetourXml($photographies);
67
			$photographies_formatees = $this->formaterRetourXml($photographies);
67
			header('Content-Type: '.self::MIME_XML);
68
			header('Content-Type: '.self::MIME_XML);
68
			echo $photographies_formatees;
69
			echo $photographies_formatees;
69
			exit;
70
			exit;
70
		}
71
		}
71
	}
72
	}
72
	
73
 
73
	private function construireEntete() {
74
	private function construireEntete() {
74
		$entete = array('masque' => '', 'depart' => 0, 'limite' => 100, 'total' => 0);
75
		$entete = array('masque' => '', 'depart' => 0, 'limite' => 100, 'total' => 0);
75
	
76
 
76
		$entete['masque'] = $this->recupererMasque();
77
		$entete['masque'] = $this->recupererMasque();
77
		$entete['depart'] = (int) $this->parametres['navigation.depart'];
78
		$entete['depart'] = (int) $this->parametres['navigation.depart'];
78
		$entete['limite'] = (int) $this->parametres['navigation.limite'];
79
		$entete['limite'] = (int) $this->parametres['navigation.limite'];
79
		$entete['total'] = $this->nbreImages;
80
		$entete['total'] = $this->nbreImages;
80
		
81
 
81
		return $entete;
82
		return $entete;
82
	}
83
	}
83
	
84
 
84
	private function recupererMasque() {
85
	private function recupererMasque() {
85
		$masqueEntete = '';
86
		$masqueEntete = '';
86
		foreach ($this->parametres as $param => $cle) {
87
		foreach ($this->parametres as $param => $cle) {
87
			if ($param == 'masque') {
88
			if ($param == 'masque') {
88
				$masqueEntete = 'masque='.$cle.',';
89
				$masqueEntete = 'masque='.$cle.',';
89
			} elseif (substr($param, 0, 7) == 'masque.') {
90
			} elseif (substr($param, 0, 7) == 'masque.') {
90
				$masqueEntete .= substr($param, 7).'='.$cle.',';
91
				$masqueEntete .= substr($param, 7).'='.$cle.',';
91
			}
92
			}
92
		}
93
		}
93
		$masqueEntete = rtrim($masqueEntete,',');
94
		$masqueEntete = rtrim($masqueEntete,',');
94
		return $masqueEntete;
95
		return $masqueEntete;
95
	}
96
	}
96
	
97
 
97
	private function definirValeurParDefautDesParametres() {
98
	private function definirValeurParDefautDesParametres() {
98
		if (isset($this->parametres['retour']) == false) {
99
		if (isset($this->parametres['retour']) == false) {
99
			$this->parametres['retour'] = self::MIME_JSON;
100
			$this->parametres['retour'] = self::MIME_JSON;
100
		}
101
		}
101
		if (isset($this->parametres['retour.format']) == false) {
102
		if (isset($this->parametres['retour.format']) == false) {
102
			$this->parametres['retour.format'] = 'min';
103
			$this->parametres['retour.format'] = 'min';
103
		}
104
		}
104
		if (isset($this->parametres['navigation.depart']) == false) {
105
		if (isset($this->parametres['navigation.depart']) == false) {
105
			$this->parametres['navigation.depart'] = 0;
106
			$this->parametres['navigation.depart'] = 0;
106
		}
107
		}
107
		if (isset($this->parametres['navigation.limite']) == false) {
108
		if (isset($this->parametres['navigation.limite']) == false) {
108
			$this->parametres['navigation.limite'] = 100;
109
			$this->parametres['navigation.limite'] = 100;
109
		}
110
		}
110
	}
111
	}
111
	
112
 
112
	public function obtenirPremiereImage() {
113
	public function obtenirPremiereImage() {
113
		$this->parametres['navigation.depart'] = 0;
114
		$this->parametres['navigation.depart'] = 0;
114
		$this->parametres['navigation.limite'] = 1;
115
		$this->parametres['navigation.limite'] = 1;
115
		$images = $this->obtenirImages();
116
		$images = $this->obtenirImages();
116
		if (!is_array($images) || count($images) <= 0) {
117
		if (!is_array($images) || count($images) <= 0) {
117
			$message = "Aucune image ne correspond au numéro numenclatural $refTax:$numNom";
118
			$message = "Aucune image ne correspond au numéro numenclatural $refTax:$numNom";
118
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
119
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
119
			throw new Exception($message, $code);
120
			throw new Exception($message, $code);
120
		} else {
121
		} else {
121
			return $images[0];
122
			return $images[0];
122
		}		
123
		}
123
	}
124
	}
124
 
125
 
125
	public function obtenirImages() {
126
	public function obtenirImages() {
126
		//TODO: tri par date, mais les dates dans la bdd photoflora sont des chaines en entités HTML
127
		//TODO: tri par date, mais les dates dans la bdd photoflora sont des chaines en entités HTML
127
		// donc un tri dessus n'a pas de sens
128
		// donc un tri dessus n'a pas de sens
128
		$requete = 	'SELECT photos.*,taxons.NumTaxon, taxons.NumNomen, taxons.Combinaison, photographes.Nom, photographes.Prenom, photographes.Initiales, photographes.Mail '.
129
		$requete = 	'SELECT photos.*, taxons.NumTaxon, taxons.NumNomen, taxons.Combinaison, photographes.Nom, '.
-
 
130
			'	photographes.Prenom, photographes.Initiales, photographes.Mail '.
129
								'FROM '.self::BDD_PF.'.photos, '.self::BDD_PF.'.photographes, '.self::BDD_PF.'.taxons '.
131
			'FROM '.self::BDD_PF.'.photos, '.self::BDD_PF.'.photographes, '.self::BDD_PF.'.taxons '.
130
								'WHERE '.
132
			'WHERE '.
131
								'photos.Auteur = photographes.ID '.
133
			'photos.Auteur = photographes.ID '.
132
								'AND photos.NumTaxon = taxons.NumTaxon '.
134
			'AND photos.NumTaxon = taxons.NumTaxon '.
133
								$this->construireWhereNumNom().' '.
135
			$this->construireWhereNumNom().' '.
134
								$this->construireWhereNumTax().' '.
136
			$this->construireWhereNumTax().' '.
135
								$this->construireWhereNomSci().' '.
137
			$this->construireWhereNomSci().' '.
136
								$this->construireWhereAuteur().' '.								
138
			$this->construireWhereAuteur().' '.
137
								'ORDER BY photos.support LIMIT '.$this->parametres['navigation.depart'].','.$this->parametres['navigation.limite'];
139
			'ORDER BY photos.support LIMIT '.$this->parametres['navigation.depart'].','.$this->parametres['navigation.limite'];
138
		$resultat = $this->Bdd->recupererTous($requete);		
140
		$resultat = $this->Bdd->recupererTous($requete);
139
		return $resultat;
141
		return $resultat;
140
	}
142
	}
141
	
143
 
142
	private function construireWhereNumNom() {
144
	private function construireWhereNumNom() {
143
		return (isset($this->parametres['masque.nn'])) ? 'AND taxons.NumNomen = '.$this->Bdd->proteger($this->parametres['masque.nn']).' ' : '';
145
		return (isset($this->parametres['masque.nn'])) ? 'AND taxons.NumNomen = '.$this->Bdd->proteger($this->parametres['masque.nn']).' ' : '';
144
	}
146
	}
145
	
147
 
146
	private function construireWhereNumTax() {
148
	private function construireWhereNumTax() {
147
		return (isset($this->parametres['masque.nt'])) ? 'AND taxons.NumTaxon = '.$this->Bdd->proteger($this->parametres['masque.nt']).' ' : '';
149
		return (isset($this->parametres['masque.nt'])) ? 'AND taxons.NumTaxon = '.$this->Bdd->proteger($this->parametres['masque.nt']).' ' : '';
148
	}
150
	}
149
	
151
 
150
	private function construireWhereNomSci() {
152
	private function construireWhereNomSci() {
151
		return (isset($this->parametres['masque.ns'])) ? 'AND taxons.Combinaison LIKE '.$this->Bdd->proteger($this->parametres['masque.ns'].'%').' ' : '';
153
		return (isset($this->parametres['masque.ns'])) ? 'AND taxons.Combinaison LIKE '.$this->Bdd->proteger($this->parametres['masque.ns'].'%').' ' : '';
152
	}
154
	}
153
	
155
 
154
	private function construireWhereAuteur() {
156
	private function construireWhereAuteur() {
155
		$requete_auteur = '';
157
		$requete_auteur = '';
156
		if (isset($this->parametres['masque.auteur'])) {
158
		if (isset($this->parametres['masque.auteur'])) {
157
			$auteur_like = $this->Bdd->proteger($this->parametres['masque.auteur'].'%');
159
			$auteur_like = $this->Bdd->proteger($this->parametres['masque.auteur'].'%');
158
			$requete_auteur = 'AND photos.auteur = '.
160
			$requete_auteur = 'AND photos.auteur = '.
159
			                    '(SELECT id FROM '.self::BDD_PF.'.photographes '.
161
				'(SELECT id FROM '.self::BDD_PF.'.photographes '.
160
			                    'WHERE '.
162
				'WHERE '.
161
			                    'Nom LIKE '.$auteur_like.' OR '.
163
				'Nom LIKE '.$auteur_like.' OR '.
162
			                    'Prenom LIKE '.$auteur_like.' OR '.
164
				'Prenom LIKE '.$auteur_like.' OR '.
163
								'Initiales LIKE '.$auteur_like.' OR '.
165
				'Initiales LIKE '.$auteur_like.' OR '.
164
								'Mail LIKE '.$auteur_like.') ';	
166
				'Mail LIKE '.$auteur_like.') ';
165
		}			 	 	
167
		}
166
		return $requete_auteur;
168
		return $requete_auteur;
167
	}
169
	}
168
	
170
 
169
	private function formaterRetourImageBinaire($photo) {
171
	private function formaterRetourImageBinaire($photo) {
170
		$image = '';
172
		$image = '';
171
		$chemin = $url = $this->getUrlPhotoPourInitiales($photo['Initiales'], $photo['NumPhoto'], $this->format);
173
		$chemin = $url = $this->getUrlPhotoPourInitiales($photo['Initiales'], $photo['NumPhoto'], $this->format);
172
		$image = file_get_contents($chemin);
174
		$image = file_get_contents($chemin);
173
		if ($image === false) {
175
		if ($image === false) {
174
			$message = "L'image demandée est introuvable sur le serveur : $chemin";
176
			$message = "L'image demandée est introuvable sur le serveur : $chemin";
175
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
177
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
176
			throw new Exception($message, $code);
178
			throw new Exception($message, $code);
177
		}
179
		}
178
		return $image;
180
		return $image;
179
	}
181
	}
180
	
182
 
181
	private function formaterRetourJson($photographies) {	
183
	private function formaterRetourJson($photographies) {
182
		$resultat = array();
184
		$resultat = array();
183
		if(is_array($photographies)) {
185
		if (is_array($photographies)) {
184
			foreach ($photographies as $photo) {
186
			foreach ($photographies as $photo) {
185
 
-
 
186
				$image = array();
187
				$image = array();
187
				$url = $this->getUrlPhotoPourInitiales($photo['Initiales'], $photo['NumPhoto'], $this->format);
188
				$url = $this->getUrlPhotoPourInitiales($photo['Initiales'], $photo['NumPhoto'], $this->format);
188
				$urlmax = $this->getUrlPhotoPourInitiales($photo['Initiales'], $photo['NumPhoto'], 'max');
189
				$urlmax = $this->getUrlPhotoPourInitiales($photo['Initiales'], $photo['NumPhoto'], 'max');
189
				$id = str_replace(array('.jpg','.jpeg'),'',$photo['NumPhoto']);
190
				$id = str_replace(array('.jpg','.jpeg', '.png'), '', $photo['NumPhoto']);
-
 
191
 
190
				// Post-traitement des valeurs
192
				// Post-traitement des valeurs
191
				$image['station'] = $this->formaterChaineEncodeeBddPhotoflora($photo['lieu']);
-
 
192
				$image['date'] = $this->donnerDate($this->formaterChaineEncodeeBddPhotoflora($photo['Date']));
193
				$image['date'] = $this->donnerDate($this->formaterChaineEncodeeBddPhotoflora($photo['Date']));
193
				$image['auteur'] = $this->formaterChaineEncodeeBddPhotoflora($photo['Prenom'].' '.$photo['Nom']);
194
				$image['mime'] = $this->extraireMime($photo['NumPhoto']);
194
				$image['determination'] = $photo['Combinaison'].' ['.$photo['Prenom'].' '.$photo['Nom'].']';
195
				$image['auteur.libelle'] = $this->formaterChaineEncodeeBddPhotoflora($photo['Prenom'].' '.$photo['Nom']);
195
				$image['determination.nom_sci'] = $photo['Combinaison'];
-
 
196
				$image['determination.nom_sci.code'] = "bdtfx.".$photo['NumNomen'];
-
 
197
				$image['binaire.href'] = $url;
196
				$image['binaire.href'] = $url;
198
				$image['binaire.hrefmax'] = $urlmax;
197
				$image['binaire.hrefmax'] = $urlmax;
-
 
198
				$image['determination.libelle'] = $photo['Combinaison'].' ['.$photo['Prenom'].' '.$photo['Nom'].']';
-
 
199
				$image['determination.nom_sci.libelle'] = $photo['Combinaison'];
-
 
200
				$image['determination.nom_sci.code'] = "bdtfx.".$photo['NumNomen'];
-
 
201
				$image['station.libelle'] = $this->formaterStation($photo['lieu']);
199
				
202
 
200
				$resultat[$id] = $image;
203
				$resultat[$id] = $image;
201
			}
204
			}
202
		}
205
		}
203
		
-
 
204
		return $resultat;
206
		return $resultat;
205
	}
207
	}
206
	
208
 
-
 
209
	private function extraireMime($fichierImg) {
-
 
210
		$mime = '';
-
 
211
		if (strpos($fichierImg, '.jpg') || strpos($fichierImg, '.jpeg')) {
-
 
212
			$mime = self::MIME_JPEG;
-
 
213
		} else if (strpos($fichierImg, '.png')) {
-
 
214
			$mime = self::MIME_PNG;
-
 
215
		}
-
 
216
		return $mime;
-
 
217
	}
-
 
218
 
-
 
219
	private function formaterStation($station) {
-
 
220
		$station = $this->formaterChaineEncodeeBddPhotoflora($station);
-
 
221
		$station = preg_replace('/^ : /', '', $station);
-
 
222
		return $station;
-
 
223
	}
-
 
224
 
207
	private function callBackReplace($m) {
225
	private function callBackReplace($m) {
208
		return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES");
226
		return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES");
209
	}
227
	}
210
	
228
 
211
	private function formaterChaineEncodeeBddPhotoflora($chaine) {
229
	private function formaterChaineEncodeeBddPhotoflora($chaine) {
212
		return $chaine = preg_replace_callback("/(&#[0-9]+;)/", array($this, 'callBackReplace')
230
		return $chaine = preg_replace_callback("/(&#[0-9]+;)/", array($this, 'callBackReplace'), $chaine);
213
		, $chaine);
-
 
214
	}
231
	}
215
	
232
 
216
	// TODO: garder ancien web service pour retour xml ou bien fusionner les deux ?
233
	// TODO: garder ancien web service pour retour xml ou bien fusionner les deux ?
217
	private function formaterRetourXml($photographies) {
234
	private function formaterRetourXml($photographies) {
218
		// Formatage du xml
235
		// Formatage du xml
219
		$xml = '<?xml version="1.0" encoding="utf-8"?>'."\n";
236
		$xml = '<?xml version="1.0" encoding="utf-8"?>'."\n";
220
		$xml .= '<rdf:RDF'."\n";
237
		$xml .= '<rdf:RDF'."\n";
221
		$xml .= '	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'."\n";
238
		$xml .= '	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'."\n";
222
		$xml .= '	xmlns:dc="http://purl.org/dc/elements/1.1/"'."\n";
239
		$xml .= '	xmlns:dc="http://purl.org/dc/elements/1.1/"'."\n";
223
		$xml .= '	xmlns:dcterms="http://purl.org/dc/terms">'."\n";
240
		$xml .= '	xmlns:dcterms="http://purl.org/dc/terms">'."\n";
224
		foreach ($photographies as $photo) {
241
		foreach ($photographies as $photo) {
225
			
242
 
226
			$url = $this->getUrlPhotoPourInitiales($photo['Initiales'], $photo['NumPhoto'], $this->format);
243
			$url = $this->getUrlPhotoPourInitiales($photo['Initiales'], $photo['NumPhoto'], $this->format);
227
		
244
 
228
			// Post-traitement des valeurs
245
			// Post-traitement des valeurs
229
			$photo['lieu'] = preg_replace('/^[ ]*:[ ]*/', '', $photo['lieu']);
246
			$photo['lieu'] = preg_replace('/^[ ]*:[ ]*/', '', $photo['lieu']);
230
		
247
 
231
			// Gestion du XML
248
			// Gestion du XML
232
			$xml .= '	<rdf:Description about="'.$url.'"'."\n";
249
			$xml .= '	<rdf:Description about="'.$url.'"'."\n";
233
			$xml .= '		dc:identifier="'.preg_replace('/\.\w+$/', '', $photo['NumPhoto']).'"'."\n";
250
			$xml .= '		dc:identifier="'.preg_replace('/\.\w+$/', '', $photo['NumPhoto']).'"'."\n";
234
			$xml .= '		dc:title="'.$photo['Combinaison'].'"'."\n";
251
			$xml .= '		dc:title="'.$photo['Combinaison'].'"'."\n";
235
			$xml .= '		dc:description="'.$photo['Objet'].'"'."\n";
252
			$xml .= '		dc:description="'.$photo['Objet'].'"'."\n";
236
			$xml .= '		dc:creator="'.$photo['Prenom'].' '.$photo['Nom'].'"'."\n";
253
			$xml .= '		dc:creator="'.$photo['Prenom'].' '.$photo['Nom'].'"'."\n";
237
			//	$xml .= '		dc:contributor="Daniel MATHIEU (Détermination)"'."\n";
254
			//	$xml .= '		dc:contributor="Daniel MATHIEU (Détermination)"'."\n";
238
			$xml .= '		dc:publisher="Photoflora"'."\n";
255
			$xml .= '		dc:publisher="Photoflora"'."\n";
239
			$xml .= '		dc:type="'.$this->donnerTxtSupport($photo['Support']).'"'."\n";
256
			$xml .= '		dc:type="'.$this->donnerTxtSupport($photo['Support']).'"'."\n";
240
			$xml .= '		dc:format="'.$this->donnerTypeMime($photo['NumPhoto']).'"'."\n";
257
			$xml .= '		dc:format="'.$this->donnerTypeMime($photo['NumPhoto']).'"'."\n";
241
			$xml .= '		dcterms:spatial="'.$photo['lieu'].'"'."\n";
258
			$xml .= '		dcterms:spatial="'.$photo['lieu'].'"'."\n";
242
			$xml .= '		dcterms:created="'.$photo['Date'].'"'."\n";
259
			$xml .= '		dcterms:created="'.$photo['Date'].'"'."\n";
243
			//	$xml .= '		dcterms:dateSubmitted="2006-10-18 08:32:00"'."\n";
260
			//	$xml .= '		dcterms:dateSubmitted="2006-10-18 08:32:00"'."\n";
244
			$xml .= '		dcterms:licence="Utilisation des photos non autorisée sans accord avec le gestionnaire du site et sous certaines conditions - Tous droits réservés - All rights reserved"/>'."\n";
261
			$xml .= '		dcterms:licence="Utilisation des photos non autorisée sans accord avec le gestionnaire du site et sous certaines conditions - Tous droits réservés - All rights reserved"/>'."\n";
245
		}
262
		}
246
		$xml .= '</rdf:RDF>'."\n";
263
		$xml .= '</rdf:RDF>'."\n";
247
		
264
 
248
		return $xml;
265
		return $xml;
249
	}
266
	}
250
	
267
 
251
	private function getUrlPhotoPourInitiales($initiales, $num_photo, $format) {
268
	private function getUrlPhotoPourInitiales($initiales, $num_photo, $format) {
252
		// Gestion des urls des photos
269
		// Gestion des urls des photos
253
		$url = '';
270
		$url = '';
254
		if ($initiales == 'bb') {
271
		if ($initiales == 'bb') {
255
			$base_url = ($format == 'max') ? $this->efph_url_photo_bb : $this->efph_url_photo_bb_min;
272
			$base_url = ($format == 'max') ? $this->efph_url_photo_bb : $this->efph_url_photo_bb_min;
256
			$url = sprintf($base_url, $num_photo);
273
			$url = sprintf($base_url, $num_photo);
257
		} else if ($initiales == 'jlt') {
274
		} else if ($initiales == 'jlt') {
258
			$base_url = ($format == 'max') ? $this->efph_url_photo_jlt : $this->efph_url_photo_jlt_min;
275
			$base_url = ($format == 'max') ? $this->efph_url_photo_jlt : $this->efph_url_photo_jlt_min;
259
			$url = sprintf($base_url, $num_photo);
276
			$url = sprintf($base_url, $num_photo);
260
		} else {
277
		} else {
261
			$base_url = ($format == 'max') ? $this->efph_url_photo : $this->efph_url_photo_min;
278
			$base_url = ($format == 'max') ? $this->efph_url_photo : $this->efph_url_photo_min;
262
			$url = sprintf($base_url, $initiales, $num_photo);
279
			$url = sprintf($base_url, $initiales, $num_photo);
263
		}
280
		}
264
		
281
 
265
		return $url;
282
		return $url;
266
	}
283
	}
267
	
284
 
268
	private function getResultatTest() {
285
	private function getResultatTest() {
269
		$photographies = array();
286
		$photographies = array();
270
		$photographies[] = array('Initiales' => 'bb',
287
		$photographies[] = array('Initiales' => 'bb',
271
				'NumPhoto' => 'bb047230.jpg', 
288
				'NumPhoto' => 'bb047230.jpg',
272
				'NumNomen' => '182',
289
				'NumNomen' => '182',
273
				'lieu' => 'Ristolas - Hautes Alpes (05) [France]',
290
				'lieu' => 'Ristolas - Hautes Alpes (05) [France]',
274
				'Combinaison' => '',
291
				'Combinaison' => '',
275
				'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.',
292
				'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.',
276
				'Prenom' => 'Benoit',
293
				'Prenom' => 'Benoit',
277
				'Nom' => 'BOCK',
294
				'Nom' => 'BOCK',
278
				'Support' => 'Photographie numérique',
295
				'Support' => 'Photographie numérique',
279
				'Date' => 'Mai 2006');
296
				'Date' => 'Mai 2006');
280
		
297
 
281
		return $photographies;
298
		return $photographies;
282
	}
299
	}
283
		
300
 
284
	/**
301
	/**
285
	* Fonction remplaçant les caractères posant problème dans le xml
302
	* Fonction remplaçant les caractères posant problème dans le xml
286
	*
303
	*
287
	* @param string le texte à nettoyer
304
	* @param string le texte à nettoyer
288
	* @return string le texte nettoyé
305
	* @return string le texte nettoyé
289
	*/
306
	*/
290
	function nettoyerXml($xml) {
307
	function nettoyerXml($xml) {
291
		// Remplacement des esperluettes
308
		// Remplacement des esperluettes
292
		$xml = str_replace(' & ', ' &#38; ', $xml);
309
		$xml = str_replace(' & ', ' &#38; ', $xml);
293
		// Remplacement du caractère spécial de fin de ligne : VT
310
		// Remplacement du caractère spécial de fin de ligne : VT
294
		$xml = preg_replace('//', "\n", $xml);
311
		$xml = preg_replace('//', "\n", $xml);
295
		return $xml;
312
		return $xml;
296
	}
313
	}
297
	
314
 
298
	/**
315
	/**
299
	 * Fonction fournissant les intitulés des types de support des images
316
	 * Fonction fournissant les intitulés des types de support des images
300
	 *
317
	 *
301
	 * @param integer identifiant du support
318
	 * @param integer identifiant du support
302
	 * @return string le texte correspondant au type de support
319
	 * @return string le texte correspondant au type de support
303
	 */
320
	 */
304
	function donnerTxtSupport($support) {
321
	function donnerTxtSupport($support) {
305
		switch ($support) {
322
		switch ($support) {
306
			case '0':
323
			case '0':
307
				$support = 'Photographie num&#233;rique (6 mégapixels)';
324
				$support = 'Photographie num&#233;rique (6 mégapixels)';
308
				break;
325
				break;
309
			case '1':
326
			case '1':
310
				$support = 'Diapositive';
327
				$support = 'Diapositive';
311
				break;
328
				break;
312
			case '10':
329
			case '10':
313
				$support = 'Scan de la flore de Coste';
330
				$support = 'Scan de la flore de Coste';
314
				break;
331
				break;
315
			case '11':
332
			case '11':
316
				$support = 'Scan de plante fraiche';
333
				$support = 'Scan de plante fraiche';
317
				break;
334
				break;
318
			default:
335
			default:
319
				$support = 'Erreur code support : pr&#233;venir eflore_remarques@tela-botanica.org';
336
				$support = 'Erreur code support : pr&#233;venir eflore_remarques@tela-botanica.org';
320
		}
337
		}
321
		return $support;
338
		return $support;
322
	}
339
	}
323
	
340
 
324
	/**
341
	/**
325
	 * Fonction fournissant les types MIME des fichiers images
342
	 * Fonction fournissant les types MIME des fichiers images
326
	 *
343
	 *
327
	 * @param string le nom du fichier
344
	 * @param string le nom du fichier
328
	 * @return string le texte du type MIME du fichier
345
	 * @return string le texte du type MIME du fichier
329
	 */
346
	 */
330
	function donnerTypeMime($fichier) {
347
	function donnerTypeMime($fichier) {
331
		if (preg_match('/\.(\w+)$/', $fichier, $match)) {
348
		if (preg_match('/\.(\w+)$/', $fichier, $match)) {
332
			switch (strtolower($match[1])) {
349
			switch (strtolower($match[1])) {
333
				case 'jpeg':
350
				case 'jpeg':
334
				case 'jpg':
351
				case 'jpg':
335
					$type = 'image/jpeg';
352
					$type = 'image/jpeg';
336
					break;
353
					break;
337
				case 'png':
354
				case 'png':
338
					$type = 'image/png';
355
					$type = 'image/png';
339
					break;
356
					break;
340
				default:
357
				default:
341
					$type = 'Erreur Mime : prévenir eflore_remarques@tela-botanica.org';
358
					$type = 'Erreur Mime : prévenir eflore_remarques@tela-botanica.org';
342
			}
359
			}
343
		} else {
360
		} else {
344
			$type = 'Erreur Mime : prévenir eflore_remarques@tela-botanica.org';
361
			$type = 'Erreur Mime : prévenir eflore_remarques@tela-botanica.org';
345
		}
362
		}
346
		return $type;
363
		return $type;
347
	}
364
	}
348
	
365
 
349
	/**
366
	/**
350
	 * Fonction fournissant une date au format Mysql
367
	 * Fonction fournissant une date au format Mysql
351
	 *
368
	 *
352
	 * @param string la date composé du nom du mois en français et de l'année sous 4 chiffres
369
	 * @param string la date composé du nom du mois en français et de l'année sous 4 chiffres
353
	 * @return string la date dans le format Mysql
370
	 * @return string la date dans le format Mysql
354
	 */
371
	 */
355
	function donnerDate($chaine) {
372
	function donnerDate($chaine) {
356
		if (preg_match('/^(\w+) (\d{4})$/',$chaine, $match)) {
373
		if (preg_match('/^(\w+) (\d{4})$/',$chaine, $match)) {
357
			$mois = $match[1];
374
			$mois = $match[1];
358
			$annee = $match[2];
375
			$annee = $match[2];
359
			switch (strtolower($mois)) {
376
			switch (strtolower($mois)) {
360
				case 'janvier' :
377
				case 'janvier' :
361
					$mois_sortie = '01';
378
					$mois_sortie = '01';
362
					break;
379
					break;
363
				case 'février' :
380
				case 'février' :
364
					$mois_sortie = '02';
381
					$mois_sortie = '02';
365
					break;
382
					break;
366
				case 'mars' :
383
				case 'mars' :
367
					$mois_sortie = '03';
384
					$mois_sortie = '03';
368
					break;
385
					break;
369
				case 'avril' :
386
				case 'avril' :
370
					$mois_sortie = '04';
387
					$mois_sortie = '04';
371
					break;
388
					break;
372
				case 'mai' :
389
				case 'mai' :
373
					$mois_sortie = '05';
390
					$mois_sortie = '05';
374
					break;
391
					break;
375
				case 'juin' :
392
				case 'juin' :
376
					$mois_sortie = '06';
393
					$mois_sortie = '06';
377
					break;
394
					break;
378
				case 'juillet' :
395
				case 'juillet' :
379
					$mois_sortie = '07';
396
					$mois_sortie = '07';
380
					break;
397
					break;
381
				case 'aout' :
398
				case 'aout' :
382
				case 'août' :
399
				case 'août' :
383
					$mois_sortie = '08';
400
					$mois_sortie = '08';
384
					break;
401
					break;
385
				case 'septembre' :
402
				case 'septembre' :
386
					$mois_sortie = '09';
403
					$mois_sortie = '09';
387
					break;
404
					break;
388
				case 'octobre' :
405
				case 'octobre' :
389
					$mois_sortie = '10';
406
					$mois_sortie = '10';
390
					break;
407
					break;
391
				case 'novembre' :
408
				case 'novembre' :
392
					$mois_sortie = '11';
409
					$mois_sortie = '11';
393
					break;
410
					break;
394
				case 'decembre' :
411
				case 'decembre' :
395
					$mois_sortie = '12';
412
					$mois_sortie = '12';
396
					break;
413
					break;
397
			}
414
			}
398
			return $annee.'-'.$mois_sortie.'-01 01:01:01';
415
			return $annee.'-'.$mois_sortie.'-01 01:01:01';
399
		} else {
416
		} else {
400
			return '1970-01-01 01:01:01';
417
			return '1970-01-01 01:01:01';
401
		}
418
		}
402
	}
419
	}
403
}
420
}
404
?>
421
?>