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 98... |
Line 104... |
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 |
}
|
Line 102... |
Line -... |
102 |
|
- |
|
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
|
108 |
|
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 '.
|
- |
|
114 |
'AND photos.NumTaxon = taxons.NumTaxon '.
|
- |
|
115 |
$this->construireWhereNumNom().' '.
|
- |
|
116 |
$this->construireWhereNumTax().' '.
|
110 |
'AND photos.NumTaxon = taxons.NumTaxon '.
|
117 |
$this->construireWhereNomSci().' '.
|
- |
|
118 |
$this->construireWhereAuteur().' '.
|
111 |
'ORDER BY photos.support';
|
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;
|
Line -... |
Line 122... |
- |
|
122 |
}
|
- |
|
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;
|
114 |
}
|
149 |
}
|
115 |
|
150 |
|
116 |
private function formaterRetourJson($photographies) {
|
151 |
private function formaterRetourJson($photographies) {
|
Line 117... |
Line 152... |
117 |
$resultat = array();
|
152 |
$resultat = array();
|
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
|
- |
|
159 |
$image['station'] = $this->formaterChaineEncodeeBddPhotoflora($photo['lieu']);
|
124 |
$image['station'] = preg_replace('/^[ ]*:[ ]*/', '', $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'].']';
|
Line 127... |
Line -... |
127 |
$image['determination.nom_sci'] = $photo['Objet'];
|
- |
|
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",
|
163 |
$image['determination.nom_sci'] = $photo['Combinaison'];
|
134 |
* "determination.nom_sci.code": "bdtfx.num_nom"
|
164 |
$image['determination.nom_sci.code'] = "bdtfx.".$photo['NumNomen'];
|
Line 135... |
Line 165... |
135 |
*/
|
165 |
$image['binaire.href'] = $url;
|
136 |
|
166 |
|
Line -... |
Line 167... |
- |
|
167 |
$resultat[$id] = $image;
|
- |
|
168 |
}
|
- |
|
169 |
|
- |
|
170 |
return $resultat;
|
- |
|
171 |
}
|
- |
|
172 |
|
137 |
$resultat[$id] = $image;
|
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 |
}
|
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érique (6 éﻯgapixels)';
|
270 |
$support = 'Photographie numé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;
|