Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2459 → Rev 2460

/trunk/jrest/bibliotheque/Bdd.php
File deleted
\ No newline at end of file
/trunk/jrest/bibliotheque/Bdd2.php
1,13 → 1,20
<?php
// declare(encoding='UTF-8');
/**
* La classe de gestion de la base de données.
* Classe de gestion de la base de données.
*
* @category php 5.2
* @package cel
* @author Raphaël Droz <raphael@tela-botanica.org>
* @copyright Copyright (c) 2013, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Bibliothèques
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Raphaël Droz <raphael@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien PERONNET <aurelien@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class Bdd2 extends PDO {
 
132,5 → 139,4
public function obtenirDernierId() {
return $this->lastInsertId();
}
 
}
/trunk/jrest/bibliotheque/GestionImage.php
1,26 → 1,20
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
 
// declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category CEL
* @package jrest
* @author Aurelien Peronnet <aurelien@tela-botanica.org>
* @author Jean-Pascal Milcent <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
 
/**
* Classe de gestion de l'ajout, modification et suppression des images
*
* in=utf8
* out=utf8
*
*/
* Classe métier de gestion de l'ajout, modification et suppression des images.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Bibliothèques
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien PERONNET <aurelien@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class GestionImage extends Cel {
 
/**
33,14 → 27,9
*/
public function ajouterImage($id_utilisateur, $infos_fichier) {
$nouvel_ordre = $this->obtenirNouvelOrdrePourUtilisateur($id_utilisateur);
if (!$nouvel_ordre) {
$message = "Erreur lors du calcul du nouvel ordre de l'image";
$this->logger($message);
}
 
$extracteur_metadonnees = new ExtracteurMetadonnees();
$informations_image = $extracteur_metadonnees->extraireMetadonnees($infos_fichier['tmp_name']) ;
 
if (!$informations_image) {
$message = "Erreur lors de l'extraction des metadonnées";
$this->logger($message);
49,7 → 38,7
// ajout de quelques informations supplémentaire, en sus
// des metadonnées dejà extraites
$informations_image['ordre'] = $nouvel_ordre ;
$informations_image['publiable_eflore'] = 'false' ;
$informations_image['transmission'] = '0' ;
$informations_image['nom_original'] = $infos_fichier['name'] ;
 
// le md5 du fichier sert à repérer les images en doublons
63,13 → 52,8
$informations_image['nom_utilisateur'] = $infos_utilisateur['nom'];
$informations_image['prenom_utilisateur'] = $infos_utilisateur['prenom'];
 
$requete_insertion_infos_image = $this->construireRequeteInsertionImage($informations_image);
 
// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete contient des | (pipes)
// ce qui est fréquent dans les métadonnées
// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple
$resultat_insertion_infos_image = Cel::db()->executer($requete_insertion_infos_image);
 
$requete = $this->construireRequeteInsertionImage($informations_image);
$resultat_insertion_infos_image = Cel::db()->executer($requete);
if (!$resultat_insertion_infos_image) {
$message = "Echec de l'insertion dans la base de donnees : " ;
$this->logger($message);
76,7 → 60,6
}
 
$id_nouvelle_image = $this->obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $nouvel_ordre);
 
if (!$id_nouvelle_image) {
$message = "Impossible d'obtenir le nouvel identifiant de l'image";
$this->logger($message);
84,7 → 67,6
 
$manipulateur_image = new ImageRecreation($this->config);
$fichier_stocke = $manipulateur_image->stockerFichierEtCreerMiniatures($infos_fichier, $id_nouvelle_image);
 
if (!$fichier_stocke) {
$message = "Erreur lors du stockage du fichier";
$this->logger($message);
105,6 → 87,9
if ($resultat !== false) {
$nouvel_ordre = $resultat[0]['max_ordre'];
$nouvel_ordre++;
} else {
$message = "Erreur lors du calcul du nouvel ordre de l'image";
$this->logger($message);
}
return $nouvel_ordre;
}
127,46 → 112,38
}
 
private function construireRequeteInsertionImage($informations_image) {
$requete_insertion_image = "INSERT INTO cel_images ";
$champs_a_inserer = '' ;
$valeurs_a_inserer = '' ;
$infos = array(
'date_creation' => 'NOW()',
'date_modification' => 'NULL');
foreach ($informations_image as $champ => $valeur) {
$champs_a_inserer .= $champ.',' ;
 
if (is_null($valeur)) {
$valeurs_a_inserer .= 'NULL,' ;
} else {
$valeurs_a_inserer .= Cel::db()->proteger($valeur).',' ;
}
$infos[$champ] = is_null($valeur) ? 'NULL' : Cel::db()->proteger($valeur);
}
$champs = implode(', ', array_keys($infos));
$valeurs = implode(', ', array_values($infos));
 
$champs_a_inserer .= 'date_modification,' ;
$valeurs_a_inserer .= '"0000-00-00 00:00:00",' ;
$champs_a_inserer .= 'date_creation' ;
$valeurs_a_inserer .= 'CURRENT_TIMESTAMP()' ;
$requete_insertion_image .= "($champs_a_inserer) VALUES ($valeurs_a_inserer)" ;
$requete_insertion_image .= ' -- '.__FILE__.' : '.__LINE__;
 
return $requete_insertion_image;
$requete = "INSERT INTO cel_images ($champs) ".
"VALUES ($valeurs) ".
' -- '.__FILE__.' : '.__LINE__;
return $requete;
}
 
/**
* Modifie les champs de metadonnées d'une image
*
* @param array $utilisateur identifiant utilisateur
* @param array $id_utilisateur identifiant utilisateur
* @param array $id id de l'image
* @param array $parametres un taleau contenant des valeurs indexées par les noms de champs de la bdd
* @return boolean true ou false suivant le succès de l'opération
*/
public function modifierImage($utilisateur, $id_image, $parametres) {
$requete_mise_a_jour_image = 'UPDATE cel_images SET ' ;
public function modifierImage($id_utilisateur, $id_image, $parametres) {
$champs_a_mettre_a_jour = $this->construireRequeteMajMetaDonnees($parametres);
$requete_mise_a_jour_image .= $champs_a_mettre_a_jour;
$requete_mise_a_jour_image .= ' WHERE id_image = '.Cel::db()->proteger($id_image).
' AND ce_utilisateur = '.Cel::db()->proteger($utilisateur).
 
$requete = "UPDATE cel_images SET $champs_a_mettre_a_jour ".
' WHERE id_image = '.Cel::db()->proteger($id_image).
' AND ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).
' -- '.__FILE__.' : '.__LINE__;
$resultat_mise_a_jour = Cel::db()->executer($requete_mise_a_jour_image);
return ($resultat_mise_a_jour !== false);
$resultat = Cel::db()->executer($requete);
return ($resultat !== false);
}
 
/**
180,8 → 157,8
$champs_a_ignorer = array('id_image');
foreach ($valeurs_metadonnees as $champ => $valeur) {
if (!in_array($champ,$champs_a_ignorer)) {
if ($champ == 'date_prise_de_vue' && trim($valeur != "")) {
$date_tab = explode('/',$valeur) ;
if ($champ == 'date_prise_de_vue' && trim($valeur != '')) {
$date_tab = explode('/', $valeur) ;
$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ;
$requete_maj_champs .= $champ.' = '.Cel::db()->proteger($date).' , ' ;
} else {
207,7 → 184,6
"WHERE ce_utilisateur = $idUtilisateurP ".
"AND ordre IN ($idsImagesP) ".
' -- '.__FILE__.' : '.__LINE__;
 
$resultats = Cel::db()->requeter($requete);
 
$idsImages = array();
214,7 → 190,6
foreach ($resultats as $id_image) {
$idsImages[] = $id_image['id_image'];
}
 
return $this->supprimerImage($idsImages);
}
 
273,5 → 248,4
$migration_releve = Cel::db()->executer($requete);
return $migration_releve;
}
}
?>
}
/trunk/jrest/bibliotheque/GestionObservation.php
247,7 → 247,6
"SET transmission = $etat_transmission , date_modification = NOW() ".
"WHERE id_observation IN ($chaine_ids_obs) ".
' -- ' . __FILE__ . ':' . __LINE__;
 
$resultat = Cel::db()->executer($requete);
return $resultat;
}
273,12 → 272,12
"WHERE ce_utilisateur = $idUtilisateurP ".
"AND ordre IN ($ordre) ".
' -- '.__FILE__.':'.__LINE__;
$resultat_ids_observations = Cel::db()->requeter($requete);
$resultats = Cel::db()->requeter($requete);
 
$ids_obs = array();
$ids_obs_non_protegees = array();
if (is_array($resultat_ids_observations) && count($resultat_ids_observations) > 0) {
foreach ($resultat_ids_observations as $id_observation) {
if (is_array($resultats) && count($resultats) > 0) {
foreach ($resultats as $id_observation) {
$ids_obs[] = Cel::db()->proteger($id_observation['id_obs']);
$ids_obs_non_protegees[] = $id_observation['id_obs'];
}
288,17 → 287,15
"ce_utilisateur = $idUtilisateurP ".
"AND id_observation IN ($chaine_ids_obs) ".
' -- '.__FILE__.':'.__LINE__;
$resultat = Cel::db()->executer($requete);
 
$resultat_suppression_observations = Cel::db()->executer($requete);
 
// TODO: Faire la suppression des mots clés
// et des liaisons obs images dans une ou des fonctions à part
if ($resultat_suppression_observations === false) {
$msg = "Erreur de suppression d'une liste d'observations : $resultat_suppression_observations";
if ($resultat === false) {
$msg = "Erreur de suppression d'une liste d'observations : $resultat";
$this->logger('CEL_bugs', $msg);
} else {
// TODO [jpm] : pourquoi on supprime pas les images si on supprime les obs ?
 
$gestion_mots_cles = new GestionMotsClesChemin($this->config, 'obs');
$resultat_suppression_mots_cles = $gestion_mots_cles->supprimerToutesLiaisonsPourIdsElementsLies($ids_obs_non_protegees);
 
439,10 → 436,7
$parametres['famille'] = $complement->famille;
}
}
}
 
// référentiel "autre": on vide !
else {
} else { // référentiel "autre": on vide !
$parametres['nom_sel_nn'] = $parametres['nom_ret'] = $parametres['nom_ret_nn'] = $parametres['nt'] = $parametres['famille'] = NULL;
}
 
504,24 → 498,19
* @return string une sous requete utilisable pour l'ajout d'une observation
*/
private function traiterParametresObservationEtConstruireSousRequeteAjout($parametres) {
$sous_requete = '';
 
$champs = '';
$valeurs = '';
 
// Nullifiage ...
// TODO: code dupliqué, en faire une fonction à mettre à la place appropriée
foreach($parametres as $cle => $valeur) {
foreach ($parametres as $cle => $valeur) {
$valeur = self::renvoyerValeurDenullifiee($valeur);
$champs .= $cle.', ';
$valeurs .= $valeur.', ';
}
 
$champs = '('.$champs.'mots_cles_texte, transmission, date_creation, date_modification, date_transmission)';
$valeurs = '('.$valeurs.'"", 0, now(), now(), "0000-00-00 00:00:00")';
 
$sous_requete .= $champs.' VALUES '.$valeurs;
 
$sous_requete = $champs.' VALUES '.$valeurs;
return $sous_requete;
}
 
535,13 → 524,12
* selon la syntaxe UPDATE table SET colonne1 = valeur1, colonne2 = valeur2 WHERE condition
*/
static function traiterParametresObservationEtConstruireSousRequeteMaj($parametres) {
$champs = array();
 
// Nullifiage ...
// TODO: code dupliqué, en faire une fonction à mettre à la place appropriée
$champs = array();
foreach ($parametres as $cle => $valeur) {
$valeur = self::renvoyerValeurDenullifiee($valeur);
$champs[] = $cle." = ".$valeur;
$champs[] = $cle.' = '.$valeur;
}
return $champs;
}
/trunk/jrest/bibliotheque/CartoGroupage.php
1,4 → 1,20
<?php
// declare(encoding='UTF-8');
/**
* Classe de groupage des obs par quadtree pour la carto.
*
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Bibliothèques
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien PERONNET <aurelien@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class CartoGroupage {
const MARQUEUR_GROUPE = 'GROUPE';
const MARQUEUR_COMMUNE = 'COMMUNE';
36,16 → 52,14
*/
public static function creerGroupesQuadtree(&$markers, $neLat, $neLng, $swLat, $swLng, $zoom = 3) {
if (count($markers) > self::$seuilClusterisation) {
 
self::calculerProfondeurMax($zoom);
self::calculerPasCorrectionCentre($zoom);
 
$noeudRacine = array('nbrePoints' => count($markers), 'points' => $markers);
self::attribuerAuCadran($noeudRacine, $neLat, $neLng, $swLat, $swLng);
 
} else {
foreach($markers as &$marker) {
if(!self::estUnPointAExclure($marker)) {
foreach ($markers as &$marker) {
if (!self::estUnPointAExclure($marker)) {
$emplacement = self::formaterPointPourAjout($marker);
self::mettreAJourBornes($marker);
$points = array($marker);
60,10 → 74,9
}
 
private function calculerCoefficientReductionPas() {
if(self::$coefficientReductionPas == null) {
if (self::$coefficientReductionPas == null) {
self::$coefficientReductionPas = (self::$pasZoomMaxClustering - self::$pasZoomDefaut)/(self::$zoomMaxClustering - self::$zoomDefaut);
}
 
return self::$coefficientReductionPas;
}
 
72,15 → 85,14
}
 
private function calculerCoefficientProfondeurMax() {
if(self::$coefficientProfondeurMax == null) {
if (self::$coefficientProfondeurMax == null) {
self::$coefficientProfondeurMax = (self::$profondeurMax - self::$profondeurMin)/(self::$zoomMaxClustering - self::$zoomDefaut);
}
 
return self::$coefficientProfondeurMax;
}
 
private function calculerProfondeurMax($zoom) {
if($zoom > self::$zoomDefaut) {
if ($zoom > self::$zoomDefaut) {
self::$profondeurMax = round(($zoom - self::$zoomDefaut) * self::calculerCoefficientProfondeurMax() + self::$profondeurMin,0);
} else {
self::$profondeurMax = 1;
158,11 → 170,11
 
private static function coordonneesSontNulles(&$point) {
$coord_nulles = ($point['latitude'] == '000null' ||
$point['latitude'] == 0 ||
$point['latitude'] == '' ||
$point['longitude'] == '000null' ||
$point['longitude'] == 0 ||
$point['longitude'] == '');
$point['latitude'] == 0 ||
$point['latitude'] == '' ||
$point['longitude'] == '000null' ||
$point['longitude'] == 0 ||
$point['longitude'] == '');
return $coord_nulles;
}
 
173,7 → 185,7
 
private static function formaterNomStation(&$point, $type_emplacement) {
$station = '';
if($type_emplacement == 'stations' && $point['station'] != '' && $point['station'] != '000null') {
if ($type_emplacement == 'stations' && $point['station'] != '' && $point['station'] != '000null') {
$station = $point['station'];
} else {
$id_zone_geo = $point['ce_zone_geo'];
190,11 → 202,11
}
 
private static function formaterPointPourAjout(&$point) {
if(isset($point['type_emplacement'])) {
if (isset($point['type_emplacement'])) {
return $point['type_emplacement'];
}
 
if(self::coordonneesSontNulles($point) || self::estSensible($point)) {
if (self::coordonneesSontNulles($point) || self::estSensible($point)) {
$point_allege = array();
$point_allege['id'] = self::MARQUEUR_COMMUNE.':'.$point['wgs84_latitude'].'|'.$point['wgs84_longitude'];
$point_allege['type_emplacement'] = 'communes';
215,7 → 227,6
 
$point = $point_allege;
}
 
return $point['type_emplacement'];
}
 
259,7 → 270,6
return $groupe;
}
 
 
private static function estUnParentFeuilles(&$noeud) {
return self::estUneFeuille($noeud['A']) &&
self::estUneFeuille($noeud['B']) &&
274,5 → 284,4
(!isset($noeud['C']) || $noeud['C'] == null) &&
(!isset($noeud['D']) || $noeud['D'] == null);
}
}
?>
}
/trunk/jrest/bibliotheque/Cel.php
1,16 → 1,21
<?php
// declare(encoding='UTF-8');
/**
* Classe mère abstraite contenant les méthodes génériques des services.
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @author Raphaël Droz <raphael@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @copyright © 2006-2014 Tela Botanica
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Bibliothèques
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien PERONNET <aurelien@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
// TODO : il faudrait déplacer les méthodes des sections de cette classe dans des classes séparées chargées via un Conteneur.
require_once('Bdd2.php');
 
abstract class Cel {
/trunk/jrest/bibliotheque/ExtracteurMetadonnees.php
1,16 → 1,19
<?php
// declare(encoding='UTF-8');
/**
* Classe d'extraction de metadonnées afin de les mettre dans
* un tableau au format du cel
* Encodage en entrée : utf8
* Encodage en sortie : utf8
* Classe d'extraction de metadonnées d'un fichier JPEG afin de les mettre dans un tableau au format du CEL.
*
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @version $Id$
* @copyright © 2012, Tela Botanica
* @internal Mininum PHP version : 5.2
* @category CEL
* @package Services
* @subpackage Bibliothèques
* @version 0.1
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien PERONNET <aurelien@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class ExtracteurMetadonnees {
 
496,10 → 499,10
}
 
public function decoderMetadonneesBasique($chemin_fichier) {
$exif = @exif_read_data($chemin_fichier, "EXIF,COMPUTED,IFD0,FILE,COMMENT", true, false);
$exif = @exif_read_data($chemin_fichier, "EXIF,COMPUTED,IFD0,FILE,COMMENT", true, false);
 
// tant pis pour les makernote et xmp, les décoder demande trop de librairies externes, autant installer exiftool alors
$metadonnees = array();
// tant pis pour les makernote et xmp, les décoder demande trop de librairies externes, autant installer exiftool alors
$metadonnees = array();
$metadonnees['XMP'] = array();
unset($metadonnees['EXIF']['MakerNote']);
$metadonnees['MAKERNOTE'] = array();
511,142 → 514,140
$metadonnees_non_formatees = array_merge($metadonnees_non_formatees, $exif['IFD0']);
}
$metadonnees['EXIF'] = $this->formaterTableauExif($metadonnees_non_formatees);
$metadonnees['IPTC'] = $this->extraireIptc($chemin_fichier);
$metadonnees['File'] = array(
'ImageWidth' => array('id' => '', 'valeur' => $exif['COMPUTED']['Width']),
$metadonnees['IPTC'] = $this->extraireIptc($chemin_fichier);
$metadonnees['File'] = array(
'ImageWidth' => array('id' => '', 'valeur' => $exif['COMPUTED']['Width']),
'ImageHeight' => array('id' => '', 'valeur' => $exif['COMPUTED']['Height']));
return $metadonnees ;
}
return $metadonnees ;
}
 
private function formaterTableauExif(&$tableau) {
$tableau_exif_formate = array();
private function formaterTableauExif(&$tableau) {
$tableau_exif_formate = array();
 
foreach ($tableau as $nom_tag => $valeur) {
$id = '';
if (isset($this->tableau_ids_tags_exif[$nom_tag])) {
$id = $this->tableau_ids_tags_exif[$nom_tag];
}
$tableau_exif_formate[$nom_tag] = array('id' => $id, 'valeur' => $valeur);
}
foreach ($tableau as $nom_tag => $valeur) {
$id = '';
if (isset($this->tableau_ids_tags_exif[$nom_tag])) {
$id = $this->tableau_ids_tags_exif[$nom_tag];
}
$tableau_exif_formate[$nom_tag] = array('id' => $id, 'valeur' => $valeur);
}
 
return $tableau_exif_formate;
}
return $tableau_exif_formate;
}
 
/**
* Extraction des metadonnées iptc
**/
public function extraireIptc($chemin_fichier) {
$meta = array();
/**
* Extraction des metadonnées iptc
*/
public function extraireIptc($chemin_fichier) {
$meta = array();
 
// getimagesize renvoie les infos iptc dans le tableau info
$info = array();
$size = getimagesize($chemin_fichier, $info);
// getimagesize renvoie les infos iptc dans le tableau info
$info = array();
$size = getimagesize($chemin_fichier, $info);
 
// s'il existe
if (isset($info["APP13"])) {
// on parse les donnees
$iptc = iptcparse($info["APP13"]);
if ($iptc) {
// et on les analyse
foreach ($iptc as $marker => $section) {
foreach ($section as $nom => $val) {
// pour remplir le tableau de donnees
$this->decoderValeurIptc($marker, $val, $meta);
}
}
}
}
// s'il existe
if (isset($info['APP13'])) {
// on parse les donnees
$iptc = iptcparse($info['APP13']);
if ($iptc) {
// et on les analyse
foreach ($iptc as $marker => $section) {
foreach ($section as $nom => $val) {
// pour remplir le tableau de donnees
$this->decoderValeurIptc($marker, $val, $meta);
}
}
}
}
return $meta;
}
 
return $meta;
}
/**
* Stocke une valeur de metadonnées iptc dans le champ du tableau correspondant
* @param String $nom nom de la valeur
* @param String $val valeur
* @param String $data référence vers le tableau où la donnée sera stockée
**/
private function decoderValeurIptc($nom, $val, &$data_tab) {
switch ($nom) {
case "2#005" :// mots cles iptc
$data_tab['Category'] = array('id' => '5', 'valeur' => $val);
break;
case "2#080" :// champ by line
$data_tab['By-Line'] = array('id' => '80', 'valeur' => $val);
break ;
case "2#085" :// champ by line titre
$data_tab['By-LineTitle'] = array('id' => '85', 'valeur' => $val);
break ;
case "2#090" :// ville
$data_tab['City'] = array('id' => '90', 'valeur' => $val);
break ;
case "2#092" :// sous location
$data_tab['SubLocation'] = array('id' => '92', 'valeur' => $val);
break ;
case "2#095" :// etat (pour les us)
$data_tab['ProvinceState'] = array('id' => '95', 'valeur' => $val);
break ;
case "2#100" :// code pays
$data_tab['CountryPrimaryLocationCode'] = array('id' => '100', 'valeur' => $val);
break ;
case "2#101" :// code pays
$data_tab['CountryName'] = array('id' => '101', 'valeur' => $val);
break ;
case "2#105" :// titre principal
$data_tab['Headline'] = array('id' => '105', 'valeur' => $val);
break ;
case "2#110" :// credit
$data_tab['Credit'] = array('id' => '110', 'valeur' => $val);
break ;
case "2#116" :// copyright
$data_tab['CopyrightNotice'] = array('id' => '116', 'valeur' => $val);
break ;
case "2#118" :// contact
$data_tab['Contact'] = array('id' => '118', 'valeur' => $val);
break ;
default:
unset($data_tab['nom']);
}
}
 
/**
* Stocke une valeur de metadonnées iptc dans le champ du tableau correspondant
* @param String $nom nom de la valeur
* @param String $val valeur
* @param String $data référence vers le tableau où la donnée sera stockée
**/
private function decoderValeurIptc($nom, $val, &$data_tab) {
switch ($nom) {
case "2#005" :// mots cles iptc
$data_tab['Category'] = array('id' => '5', 'valeur' => $val);
break;
case "2#080" :// champ by line
$data_tab['By-Line'] = array('id' => '80', 'valeur' => $val);
break ;
case "2#085" :// champ by line titre
$data_tab['By-LineTitle'] = array('id' => '85', 'valeur' => $val);
break ;
case "2#090" :// ville
$data_tab['City'] = array('id' => '90', 'valeur' => $val);
break ;
case "2#092" :// sous location
$data_tab['SubLocation'] = array('id' => '92', 'valeur' => $val);
break ;
case "2#095" :// etat (pour les us)
$data_tab['ProvinceState'] = array('id' => '95', 'valeur' => $val);
break ;
case "2#100" :// code pays
$data_tab['CountryPrimaryLocationCode'] = array('id' => '100', 'valeur' => $val);
break ;
case "2#101" :// code pays
$data_tab['CountryName'] = array('id' => '101', 'valeur' => $val);
break ;
case "2#105" :// titre principal
$data_tab['Headline'] = array('id' => '105', 'valeur' => $val);
break ;
case "2#110" :// credit
$data_tab['Credit'] = array('id' => '110', 'valeur' => $val);
break ;
case "2#116" :// copyright
$data_tab['CopyrightNotice'] = array('id' => '116', 'valeur' => $val);
break ;
case "2#118" :// contact
$data_tab['Contact'] = array('id' => '118', 'valeur' => $val);
break ;
default:
unset($data_tab['nom']);
}
}
private function obtenirHauteur() {
$hauteur = isset($this->meta['File']['ImageHeight']) ? $this->meta['File']['ImageHeight']['valeur'] : '';
return $hauteur;
}
 
private function obtenirHauteur() {
$hauteur = isset($this->meta['File']['ImageHeight']) ? $this->meta['File']['ImageHeight']['valeur'] : '';
return $hauteur;
}
private function obtenirLargeur() {
$largeur = isset($this->meta['File']['ImageWidth']) ? $this->meta['File']['ImageWidth']['valeur'] : '';
return $largeur;
}
 
private function obtenirLargeur() {
$largeur = isset($this->meta['File']['ImageWidth']) ? $this->meta['File']['ImageWidth']['valeur'] : '';
return $largeur;
}
private function obtenirDatePriseDeVue() {
$date = isset($this->meta['EXIF']['DateTimeOriginal']) ? $this->meta['EXIF']['DateTimeOriginal']['valeur'] : '';
return $date;
}
 
private function obtenirDatePriseDeVue() {
$date = isset($this->meta['EXIF']['DateTimeOriginal']) ? $this->meta['EXIF']['DateTimeOriginal']['valeur'] : '';
return $date;
}
private function obtenirAppareilFabricant() {
$fabriquant = isset($this->meta['EXIF']['Make']) ? $this->meta['EXIF']['Make']['valeur'] : '';
return $fabriquant;
}
 
private function obtenirAppareilFabricant() {
$fabriquant = isset($this->meta['EXIF']['Make']) ? $this->meta['EXIF']['Make']['valeur'] : '';
return $fabriquant;
}
private function obtenirAppareilModele() {
$modele = isset($this->meta['EXIF']['CameraModelName']) ? $this->meta['EXIF']['CameraModelName']['valeur'] : '';
return $modele;
}
 
private function obtenirAppareilModele() {
$modele = isset($this->meta['EXIF']['CameraModelName']) ? $this->meta['EXIF']['CameraModelName']['valeur'] : '';
return $modele;
}
private function convertirMetaVersXML($type) {
$xml = null;
if (isset($this->meta[$type])) {
$racine = strtolower($type);
 
private function convertirMetaVersXML($type) {
$xml = null;
if (isset($this->meta[$type])) {
$racine = strtolower($type);
 
$xml = '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
$xml .= "<$racine>"."\n";
foreach ($this->meta[$type] as $prop => &$valeur) {
$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
}
$xml .= "</$racine>";
}
return $xml;
}
}
?>
$xml = '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
$xml .= "<$racine>"."\n";
foreach ($this->meta[$type] as $prop => &$valeur) {
$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
}
$xml .= "</$racine>";
}
return $xml;
}
}