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(' & ', ' & ', $xml);
|
309 |
$xml = str_replace(' & ', ' & ', $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érique (6 mégapixels)';
|
324 |
$support = 'Photographie numé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évenir eflore_remarques@tela-botanica.org';
|
336 |
$support = 'Erreur code support : pré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 |
?>
|