Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 309 → Rev 310

/trunk/services/modules/0.1/photoflora/Images.php
1,10 → 1,10
<?php
/**
* Web service particulier pour photoflora, qui ne doit être installé sur tela botanica
* Web service particulier pour photoflora, qui ne doitpas être installé sur tela botanica
* mais sur photoflora.free.fr
* Une redirection htaccess est à faire, redirigeant /service:eflore:0.1/photoflora/image
* vers le site photoflora à l'adresse ou seront installé les services web et le minimum
* nécessaire pour les faire fonctionner (framework + base de code eflore-projet ou peut être moins)
* nécessaire pour les faire fonctionner (framework + base de code eflore-projet ou peut-être moins)
*
* La table des metadonnées est, elle, stockée sur Tela Botanica
* Le service est dans le même dépot que les autres par souci de commodité
17,12 → 17,14
const MIME_XML = 'text/xml';
//TODO déplacer ceci dans des parametres de config
private $efph_url_photo = 'http://photoflora.free.fr/photos/٪s/max/%s';
private $efph_url_photo_bb = 'http://photoflorabb.free.fr/max/bb%s';
private $efph_url_photo_jlt = 'http://photoflorajlt.free.fr/max/jlt%s';
const BDD_PF = 'photoflora';
private $efph_url_photo = 'http://photoflora.free.fr/photos/%s/max/%s';
private $efph_url_photo_bb = 'http://photoflorabb.free.fr/max/%s';
private $efph_url_photo_jlt = 'http://photoflorajlt.free.fr/max/%s';
private $efph_url_photo_bb_min = 'http://photoflora.free.fr/photos/bb/min/bb%s';
private $efph_url_photo_jlt_min = 'http://photoflora.free.fr/photos/jlt/min/jlt%s';
private $efph_url_photo_min = 'http://photoflora.free.fr/photos/%s/min/%s';
private $efph_url_photo_bb_min = 'http://photoflora.free.fr/photos/bb/min/%s';
private $efph_url_photo_jlt_min = 'http://photoflora.free.fr/photos/jlt/min/%s';
private $parametres = array();
private $ressources = array();
47,7 → 49,7
$this->format = (isset($this->parametres['retour.format']) && $this->parametres['retour.format'] != '') ? $this->parametres['retour.format'] : $this->format;
$this->retour_mime = (isset($this->parametres['retour']) && $this->parametres['retour'] != '') ? $this->parametres['retour'] : $this->retour_mime;
// TODO: décommenter lors de la mise en prod
//$photographies = $this->getImagesPourNumTax($ressources[0]);
//$photographies = $this->obtenirImages();
//TODO commenter lors de la mise en prod
$photographies = $this->getResultatTest();
$this->nbreImages = count($photographies);
78,10 → 80,14
private function recupererMasque() {
$masqueEntete = '';
// on récupère un num tax en fait
if ($masqueNn = $this->parametres['masque.nn']) {
$masqueEntete = "nn=$masqueNn";
foreach ($this->parametres as $param => $cle) {
if ($param == 'masque') {
$masqueEntete = 'masque='.$cle.',';
} elseif (substr($param, 0, 7) == 'masque.') {
$masqueEntete .= substr($param, 7).'='.$cle.',';
}
}
$masqueEntete = rtrim($masqueEntete,',');
return $masqueEntete;
}
99,20 → 105,49
$this->parametres['navigation.limite'] = 100;
}
}
//TODO utiliser le num nom ?
// en attendant on triche sur le paramètre du service, à changer lorsque l'on connaitra le format de la bdd
public function getImagesPourNumTax($nt) {
$requetes_taxon = 'SELECT photos.*, taxons.Combinaison, photographes.Nom, photographes.Prenom, photographes.Initiales, photographes.Mail '.
'FROM photos, photographes, taxons '.
'WHERE photos.NumTaxon = '.$this->Bdd->proteger($nt).' '.
'AND photos.Auteur = photographes.ID '.
 
public function obtenirImages() {
$requete = 'SELECT photos.*,taxons.NumTaxon, taxons.NumNomen, taxons.Combinaison, photographes.Nom, photographes.Prenom, photographes.Initiales, photographes.Mail '.
'FROM '.self::BDD_PF.'.photos, '.self::BDD_PF.'.photographes, '.self::BDD_PF.'.taxons '.
'WHERE '.
'photos.Auteur = photographes.ID '.
'AND photos.NumTaxon = taxons.NumTaxon '.
'ORDER BY photos.support';
$resultat = $this->Bdd->recupererTous($requetes_taxon);
$this->construireWhereNumNom().' '.
$this->construireWhereNumTax().' '.
$this->construireWhereNomSci().' '.
$this->construireWhereAuteur().' '.
'ORDER BY photos.support LIMIT '.$this->parametres['navigation.depart'].','.$this->parametres['navigation.limite'];
$resultat = $this->Bdd->recupererTous($requete);
return $resultat;
}
private function construireWhereNumNom() {
return (isset($this->parametres['masque.nn'])) ? 'AND taxons.NumNomen = '.$this->Bdd->proteger($this->parametres['masque.nn']).' ' : '';
}
private function construireWhereNumTax() {
return (isset($this->parametres['masque.nt'])) ? 'AND taxons.NumTaxon = '.$this->Bdd->proteger($this->parametres['masque.nt']).' ' : '';
}
private function construireWhereNomSci() {
return (isset($this->parametres['masque.ns'])) ? 'AND taxons.Combinaison LIKE '.$this->Bdd->proteger($this->parametres['masque.ns'].'%').' ' : '';
}
private function construireWhereAuteur() {
$requete_auteur = '';
if (isset($this->parametres['masque.auteur'])) {
$auteur_like = $this->Bdd->proteger($this->parametres['masque.auteur'].'%');
$requete_auteur = 'AND photos.auteur = '.
'(SELECT id FROM '.self::BDD_PF.'.photographes '.
'WHERE '.
'Nom LIKE '.$auteur_like.' OR '.
'Prenom LIKE '.$auteur_like.' OR '.
'Initiales LIKE '.$auteur_like.' OR '.
'Mail LIKE '.$auteur_like.') ';
}
return $requete_auteur;
}
private function formaterRetourJson($photographies) {
$resultat = array();
foreach ($photographies as $photo) {
121,19 → 156,14
$url = $this->getUrlPhotoPourInitiales($photo['Initiales'], $photo['NumPhoto']);
$id = str_replace(array('.jpg','.jpeg'),'',$photo['NumPhoto']);
// Post-traitement des valeurs
$image['station'] = preg_replace('/^[ ]*:[ ]*/', '', $photo['lieu']);
$image['date'] = $photo['Date'];
$image['auteur'] = $photo['Prenom'].' '.$photo['Nom'];
$image['determination.nom_sci'] = $photo['Objet'];
$image['determination.nom_sci.code'] = "bdtfx.".$this->parametres['masque.nn'];
$image['station'] = $this->formaterChaineEncodeeBddPhotoflora($photo['lieu']);
$image['date'] = $this->donnerDate($this->formaterChaineEncodeeBddPhotoflora($photo['Date']));
$image['auteur'] = $this->formaterChaineEncodeeBddPhotoflora($photo['Prenom'].' '.$photo['Nom']);
$image['determination'] = $photo['Combinaison'].' ['.$photo['Prenom'].' '.$photo['Nom'].']';
$image['determination.nom_sci'] = $photo['Combinaison'];
$image['determination.nom_sci.code'] = "bdtfx.".$photo['NumNomen'];
$image['binaire.href'] = $url;
// TODO: comment remplir ces champs ci ? voir la base de données
/** "determination": "nom_sci [Dét. : auteur]",
* "determination.nom_sci": "nom_sci",
* "determination.nom_sci.code": "bdtfx.num_nom"
*/
$resultat[$id] = $image;
}
140,6 → 170,12
return $resultat;
}
private function formaterChaineEncodeeBddPhotoflora($chaine) {
return $chaine = preg_replace_callback("/(&#[0-9]+;)/", function($m) {
return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES");
}, $chaine);
}
// TODO: garder ancien web service pour retour xml ou bien fusionner les deux ?
private function formaterRetourXml($photographies) {
// Formatage du xml
185,7 → 221,8
$base_url = ($this->format == 'max') ? $this->efph_url_photo_jlt : $this->efph_url_photo_jlt_min;
$url = sprintf($base_url, $num_photo);
} else {
$url = sprintf($this->efph_url_photo, $initiales, $num_photo);
$base_url = ($this->format == 'max') ? $this->efph_url_photo : $this->efph_url_photo_min;
$url = sprintf($base_url, $initiales, $num_photo);
}
return $url;
194,7 → 231,8
private function getResultatTest() {
$photographies = array();
$photographies[] = array('Initiales' => 'bb',
'NumPhoto' => '047230.jpg',
'NumPhoto' => 'bb047230.jpg',
'NumNomen' => '182',
'lieu' => 'Ristolas - Hautes Alpes (05) [France]',
'Combinaison' => '',
'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.',
229,7 → 267,7
function donnerTxtSupport($support) {
switch ($support) {
case '0':
$support = 'Photographie num&#233;rique (6 éﻯgapixels)';
$support = 'Photographie num&#233;rique (6 mégapixels)';
break;
case '1':
$support = 'Diapositive';
263,7 → 301,7
$type = 'image/png';
break;
default:
$type = 'Erreur Mime : péﻯvenir eflore_remarques@tela-botanica.org';
$type = 'Erreur Mime : prévenir eflore_remarques@tela-botanica.org';
}
} else {
$type = 'Erreur Mime : prévenir eflore_remarques@tela-botanica.org';
304,7 → 342,7
$mois_sortie = '07';
break;
case 'aout' :
case 'aoﻝt' :
case 'août' :
$mois_sortie = '08';
break;
case 'septembre' :