Subversion Repositories eFlore/Applications.cel

Compare Revisions

Regard whitespace Rev 2459 → Rev 2460

/trunk/jrest/bibliotheque/Bdd.php
File deleted
\ No newline at end of file
/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>
* @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>
* @version $Id$
* @copyright © 2012, Tela Botanica
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class ExtracteurMetadonnees {
 
534,7 → 537,7
 
/**
* Extraction des metadonnées iptc
**/
*/
public function extraireIptc($chemin_fichier) {
$meta = array();
 
543,9 → 546,9
$size = getimagesize($chemin_fichier, $info);
 
// s'il existe
if (isset($info["APP13"])) {
if (isset($info['APP13'])) {
// on parse les donnees
$iptc = iptcparse($info["APP13"]);
$iptc = iptcparse($info['APP13']);
if ($iptc) {
// et on les analyse
foreach ($iptc as $marker => $section) {
556,7 → 559,6
}
}
}
 
return $meta;
}
 
648,5 → 650,4
}
return $xml;
}
}
?>
}
/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
* Classe métier de gestion de l'ajout, modification et suppression des images.
*
* @internal Mininum PHP version : 5.2
* @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/
* @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>
*/
 
/**
* Classe de gestion de l'ajout, modification et suppression des images
*
* in=utf8
* out=utf8
*
*/
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,7 → 157,7
$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 != "")) {
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).' , ' ;
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/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
* @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>
* @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
* @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/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,11 → 498,8
* @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) {
516,12 → 507,10
$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,13 → 52,11
*/
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)) {
63,7 → 77,6
if(self::$coefficientReductionPas == null) {
self::$coefficientReductionPas = (self::$pasZoomMaxClustering - self::$pasZoomDefaut)/(self::$zoomMaxClustering - self::$zoomDefaut);
}
 
return self::$coefficientReductionPas;
}
 
75,7 → 88,6
if(self::$coefficientProfondeurMax == null) {
self::$coefficientProfondeurMax = (self::$profondeurMax - self::$profondeurMin)/(self::$zoomMaxClustering - self::$zoomDefaut);
}
 
return self::$coefficientProfondeurMax;
}
 
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
*
* @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 Aurélien Peronnet <aurelien@tela-botanica.org>
* @author Raphaël Droz <raphael@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 © 2006-2014 Tela Botanica
* @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 {