/trunk/jrest/services/InventoryStationList.php |
---|
File deleted |
/trunk/jrest/services/NameParser.php |
---|
File deleted |
/trunk/jrest/services/CodeAsync.php |
---|
File deleted |
/trunk/jrest/services/UserOpenId.php |
---|
File deleted |
/trunk/jrest/services/TestCreationDossier.php |
---|
File deleted |
\ No newline at end of file |
/trunk/jrest/services/PlantNetRssParEspece.php |
---|
File deleted |
/trunk/jrest/services/InventoryItemList.php |
---|
File deleted |
\ No newline at end of file |
/trunk/jrest/services/PlantNetRss.php |
---|
File deleted |
/trunk/jrest/services/Cel.php |
---|
614,6 → 614,38 |
return preg_match('/^INSEE-C:[0-9]{5}/',$code_a_tester); |
} |
protected function convertirCodeZoneGeoVersCodeInsee($code_zone_geo) { |
$code_departement = ''; |
if($this->estUnCodeInseeDepartement($code_zone_geo)) { |
$code_departement = ltrim($code_zone_geo,'INSEE-C:'); |
} |
return $code_departement; |
} |
protected function convertirCodeInseeVersCodeZoneGeo($code_insee) { |
return 'INSEE-C:'.$code_insee; |
} |
protected function obtenirCodeInseeCommunePourNomEtDepartement($nom_commune, $dpt) { |
$code_insee = $dpt; |
$requete = 'SELECT id_zone_geo FROM cel_zones_geo '. |
'WHERE nom LIKE '.$this->proteger($nom_commune).' '. |
'AND id_zone_geo LIKE "INSEE-C:'.$dpt.'%"'; |
$resultat = $this->requeter($requete); |
if(is_array($resultat) && count($resultat) > 0) { |
$code_insee = $resultat[0]['id_zone_geo']; |
} |
return $code_insee; |
} |
protected function encoderMotCle($mot_cle) { |
return md5(mb_strtolower(trim($mot_cle))); |
} |
/trunk/jrest/services/CelStatistiqueTxt.php |
---|
79,6 → 79,7 |
$limitSql = 'LIMIT 0,150 '; |
$zero_images = false; |
if (count($this->parametres) != 0) { |
extract($this->parametres); |
/trunk/jrest/services/CelWidgetMap.php |
---|
60,6 → 60,7 |
* Les stations de la carte par défaut |
*/ |
public function getStations($params) { |
$json = null; |
$requete = 'SELECT sector, x_utm, y_utm, wgs84_latitude AS commune_latitude, wgs84_longitude AS commune_longitude, '. |
' coord_x AS point_latitude, coord_y AS point_longitude '. |
/trunk/jrest/services/User.php |
---|
85,7 → 85,7 |
if ($this->identificationEstDemandee($uid)) { |
if (!$utilisateur = $this->utilisateurEstIdentifie()) { |
if ($this->IdentifierUtilisateur($uid[0],$uid[1],1)) { |
if ($this->identifierUtilisateur($uid[0],$uid[1],1)) { |
$utilisateur= $this->chargerInfosUtilisateur($uid[0]); |
$utilisateur['connecte'] = true; |
} |
96,7 → 96,7 |
} |
} |
else { |
$this->DeconnecterUtilisateur(); |
$this->deconnecterUtilisateur(); |
} |
$this->envoyerInfosUtilisateur($utilisateur); |
146,41 → 146,44 |
} |
function utilisateurEstIdentifieCookie() { |
return isset($_COOKIE["cel_name"]) && ($this->IdentifierUtilisateurSansEncryptionMotDePasse($_COOKIE["cel_name"], $_COOKIE["cel_password"])) ? $_COOKIE["cel_name"] : false; |
return isset($_COOKIE["cel_name"]) && ($this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE["cel_name"], $_COOKIE["cel_password"])) ? $_COOKIE["cel_name"] : false; |
} |
function SetUtilisateur($user, $remember=1) { |
function setUtilisateur($user, $remember=1) { |
$_SESSION["user"] = $user; |
$this->SetPersistentCookie("cel_id", $user["id"], $remember); |
$this->SetPersistentCookie("cel_name", $user["name"], $remember); |
$this->SetPersistentCookie("cel_password", $user["password"], $remember); |
$this->SetPersistentCookie("cel_remember", $remember, $remember); |
$this->setPersistentCookie("cel_id", $user["id_utilisateur"], $remember); |
$this->setPersistentCookie("cel_name", $user["courriel"], $remember); |
$this->setPersistentCookie("cel_password", $user["mot_de_passe"], $remember); |
$this->setPersistentCookie("cel_remember", $remember, $remember); |
print_r($_COOKIE); |
} |
function DeconnecterUtilisateur() { |
function deconnecterUtilisateur() { |
$_SESSION["user"] = ""; |
$this->SupprimerCookie("cel_id"); |
$this->SupprimerCookie("cel_name"); |
$this->SupprimerCookie("cel_password"); |
$this->SupprimerCookie("cel_remember"); |
$this->supprimerCookie("cel_id"); |
$this->supprimerCookie("cel_name"); |
$this->supprimerCookie("cel_password"); |
$this->supprimerCookie("cel_remember"); |
} |
function SetPersistentCookie($name, $value, $remember = 1) { |
SetCookie($name, $value, time() + ($remember ? 90*24*60*60 : 60 * 60),'/'); |
function setPersistentCookie($name, $value, $remember = 1) { |
SetCookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)),'/'); |
$_COOKIE[$name] = $value; |
} |
function SupprimerCookie($name) { |
function supprimerCookie($name) { |
SetCookie($name, "", 1,'/'); $_COOKIE[$name] = ""; |
} |
function IdentifierUtilisateur($login, $mot_de_passe, $remember = 1) { |
function identifierUtilisateur($login, $mot_de_passe, $remember = 1) { |
$identification = false; |
if ($utilisateur = $this->chargerInfosUtilisateur($login)) { |
if ($utilisateur['mot_de_passe'] == $this->encrypterMotDePasse($mot_de_passe) || $mot_de_passe == "debug") { |
$this->SetUtilisateur($utilisateur, $remember); |
$this->setUtilisateur($utilisateur, $remember); |
$identification = true; |
} |
} |
188,13 → 191,13 |
return $identification; |
} |
function IdentifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe, $remember = 1) { |
function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe, $remember = 1) { |
$souvenir = false; |
if ($utilisateur = $this->chargerInfosUtilisateur($login)) { |
if ($utilisateur['mot_de_passe'] == $mot_de_passe) { |
$this->SetUtilisateur($utilisateur, $remember); |
$this->setUtilisateur($utilisateur, $remember); |
$souvenir = true; |
} |
} |
/trunk/jrest/services/InventoryKeyWordImageLink.php |
---|
New file |
0,0 → 1,82 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author Aurélien Peronnet <aurelien@tela-botania.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/ |
*/ |
/** |
* in : utf8 |
* out : utf8 |
* |
* Service de liaisons de mots clés à des images. |
* Le service lie une ou plusieurs mots clés à une ou plusieurs images |
* |
*/ |
class InventoryKeyWordImageLink extends Cel { |
public function getElement($uid) { |
} |
public function createElement($pairs) { |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($pairs['ce_utilisateur']); |
if (!isset($pairs['mots_cles']) || !isset($pairs['images']) || !isset($pairs['ce_utilisateur'])) { |
return; |
} |
$pairs['images'] = rtrim($pairs['images'],','); |
$id_images = explode(',',$pairs['images']); |
$pairs['mots_cles'] = rtrim($pairs['mots_cles'],','); |
$mots_cles = explode(',',$pairs['mots_cles']); |
// Pour le moment on ne peut que supprimer les mots clés et ajouter les nouveaux à cause du fonctionnement |
// de l'arbre de mots clés des images |
$gestionnaire_mots_cles = new LiaisonMotsCles($this->config,'images'); |
$suppression_liaison_mot_cle = $gestionnaire_mots_cles->supprimerToutesLiaisonsPourIdImageOuObs($pairs['ce_utilisateur'], $id_images); |
$liaison_mot_cle = $gestionnaire_mots_cles->ajouterLiaisonMotsCles($pairs['ce_utilisateur'],$id_images, $mots_cles); |
return $liaison_mot_cle; |
} |
public function deleteElement($uid){ |
$retour = false; |
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2]) || !$this->estUnIdentifiantMotCle($uid[2])) { |
return; |
} |
$id_images = explode(',',$uid[1]); |
$id_utilisateur = $uid[0]; |
$gestionnaire_mots_cles = new LiaisonMotsCles($this->config,'images'); |
$mots_cles = $gestionnaire_mots_cles->nettoyerMotsCles($uid[2]); |
$mots_cles = explode(',',$mots_cles); |
$suppression_liaison_mot_cle = $gestionnaire_mots_cles->supprimerLiaisonMotsClesEtRegenererIndexTexte($id_utilisateur, $id_images, $mots_cles); |
return $suppression_liaison_mot_cle; |
} |
private function estUnIdentifiantMotCle($chaine) { |
return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine); |
} |
} |
?> |
/trunk/jrest/services/InventoryKeyWordObsLink.php |
---|
70,7 → 70,7 |
$mots_cles = $gestionnaire_mots_cles->nettoyerMotsCles($uid[2]); |
$mots_cles = explode(',',$mots_cles); |
$suppression_liaison_mot_cle = $gestionnaire_mots_cles->supprimerLiaisonMotsCles($id_utilisateur, $ids_obs, $mots_cles); |
$suppression_liaison_mot_cle = $gestionnaire_mots_cles->supprimerLiaisonMotsClesEtRegenererIndexTexte($id_utilisateur, $ids_obs, $mots_cles); |
return $suppression_liaison_mot_cle; |
} |
/trunk/jrest/services/CelSyndicationObservation.php |
---|
31,9 → 31,9 |
private $auteurs = array(); |
private $flux = array(); |
private $criteres = array( |
'utilisateur' => 'identifiant', |
'commune' => 'location', |
'dept' => 'id_location', |
'utilisateur' => 'ce_utilisateur', |
'commune' => 'zone_geo', |
'dept' => 'id_zone_geo', |
'taxon' => 'nom_ret', |
'commentaire' => 'commentaire', |
'date' => 'date_observation', |
369,6 → 369,7 |
} |
private function creerSousRequeteMotsClesEt($mot_cle) { |
$requete = 'mots_cles like "inexistant" OR'; |
$where = ''; |
$champs = 'a.cmc_id_proprietaire , '; |
/trunk/jrest/services/CelImageDoublon.php |
---|
67,6 → 67,7 |
* Carte par défaut |
*/ |
private function getDoublonHtml($parametres) { |
$widget = null; |
$utilisateur = $this->getAuthIdentifiant(); |
/trunk/jrest/services/CoordSearch.php |
---|
21,11 → 21,11 |
parent::__construct($config); |
$this->adresse_service_geonames = $this->config['cel_db']['url_service_geo_geonames']; |
$this->adresse_service_local = $this->config['cel_db']['url_service_geo_local']; |
$this->adresse_service_geonames = $this->config['cel']['url_service_geo_geonames']; |
$this->adresse_service_local = $this->config['cel']['url_service_geo_local']; |
$this->nom_service_geocoding = $this->config['cel_db']['nom_service_geocoding_geonames']; |
$this->nom_service_reverse_geocoding = $this->config['cel_db']['nom_service_reverse_geocoding_geonames']; |
$this->nom_service_geocoding = $this->config['cel']['nom_service_geocoding_geonames']; |
$this->nom_service_reverse_geocoding = $this->config['cel']['nom_service_reverse_geocoding_geonames']; |
} |
/** |
80,6 → 80,10 |
$commune = $this->affecterValeurParametreOuDefaut($params, 2, '*'); |
$code_postal = $this->affecterValeurParametreOuDefaut($params, 3, '*'); |
if(strlen($code_postal) > 2) { |
$code_postal = substr($code_postal,0,2); |
} |
$code_pays = $this->affecterValeurParametreOuDefaut($params, 4, 'FR'); |
return array('lat' => $lat, 'lon' => $lng, 'commune' => $commune, |
104,6 → 108,8 |
$infos_commune_json = @file_get_contents($this->url_service_geo_local."?lat=".$lat."&lon=".$lon); |
$infos_commune = json_decode($infos_commune_json); |
print_r($infos_commune); |
$retour = false; |
if ($this->estUnRetourOsmValide($infos_commune)) { |
/trunk/jrest/services/InventoryImageExport.php |
---|
14,8 → 14,6 |
parent::__construct($config); |
require_once('lib/zip.php'); |
$this->config=$config; |
$this->extendSpreadsheetProductor = new SpreadsheetProductor(); |
$this->extendSpreadsheetProductor->initSpreadsheet(); |
26,7 → 24,6 |
$this->authentifier(); |
$tableau = array(); |
$tag = $uid[0]; |
$limite = 0; |
/trunk/jrest/services/CelStatistique.php |
---|
76,6 → 76,7 |
$periode = 0; |
$cumul = 0; |
$img_totale_cumul = array(); |
foreach ($img_totale as $annee_mois => $nbre) { |
$annee = substr($annee_mois, 0, 4); |
$mois = substr($annee_mois, 4, 2); |
/trunk/jrest/services/CelWidgetSaisie.php |
---|
110,6 → 110,7 |
$msg = (count($this->messages) > 0) ? 'erreur' : 'ok'; |
$retour = (object) array('msg' => $msg); |
$this->envoyerJson($obj); |
} |
/trunk/jrest/services/CelMotCle.php |
---|
16,6 → 16,7 |
// TODO : compléter la classe avec des méthdodes de modification, suppression et consultation des mots-clés. |
// TODO : ajout vérification de la non présence du caractère '|' dans les chaines utilisateurs... |
class CelMotCle extends Cel { |
const OBS_RACINE_ID = 'racine_obs'; |
const OBS_RACINE_NOM = 'Projets'; |
const OBS_TABLE_SUFFIXE = '_obs'; |
73,7 → 74,6 |
} else { |
$this->messages[] = "Le tableau des ordres des obs ne contenait pas que des nombres entiers."; |
} |
return $retour; |
} |
/trunk/jrest/services/InventoryImportExcel.php |
---|
1,5 → 1,4 |
<?php |
// In : utf8 |
// Out : utf8 |
43,11 → 42,8 |
define('LIGNE_NORMALE',2); // |
define('LIGNE_IMAGE_SEULEMENT',3); // |
// Parser de Nom |
include('NameParser.php'); |
class InventoryImportExcel extends Cel { |
Class InventoryImportExcel extends DBAccessor { |
// Element constituant une observation |
var $format_observation=array(COMMUNE ,LIEUDIT ,STATION , DEPARTEMENT, MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,TRANSMETTRE, IMAGE ); |
/trunk/jrest/services/InventoryImage.php |
---|
97,7 → 97,7 |
$gestionnaire_image = new GestionImage($this->config); |
$id_utilisateur = $pairs['ce_utilisateur']; |
if ($this->ajouterImage($id_utilisateur, $infos_fichier)) { |
if ($gestionnaire_image->ajouterImage($id_utilisateur, $infos_fichier)) { |
// l'upload demande de court-circuiter le fonctionnement normal de JREST |
// en quittant directement après l'envoi |
/trunk/jrest/lib/Spreadsheet/Excel/Writer/OLEwriter.php |
---|
32,7 → 32,7 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
*/ |
require_once('PEAR.php'); |
//require_once('PEAR.php'); |
/** |
* Class for creating OLE streams for Excel Spreadsheets |
/trunk/jrest/lib/Spreadsheet/Excel/Writer/Parser.php |
---|
88,7 → 88,7 |
define('SPREADSHEET_EXCEL_WRITER_NE',"<>"); |
require_once('PEAR.php'); |
//require_once('PEAR.php'); |
/** |
* Class for parsing Excel formulas |
1430,7 → 1430,7 |
} |
else { |
return new PEAR_Error("Sintactic error: coma expected in ". |
"function $function, {$num_args}º arg"); |
"function $function, {$num_args}� arg"); |
} |
$result2 = $this->_condition(); |
if($this->isError($result2)) { |
/trunk/jrest/lib/Spreadsheet/Excel/Writer/BIFFwriter.php |
---|
32,7 → 32,7 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
*/ |
require_once('PEAR.php'); |
//require_once('PEAR.php'); |
/** |
* Class for writing Excel BIFF records. |
/trunk/jrest/lib/Spreadsheet/Excel/Writer/Format.php |
---|
32,7 → 32,7 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
*/ |
require_once('PEAR.php'); |
//require_once('PEAR.php'); |
/** |
* Class for generating Excel XF records (formats) |
/trunk/jrest/lib/Spreadsheet/Excel/Writer.php |
---|
31,7 → 31,7 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
*/ |
require_once('PEAR.php'); |
//require_once('PEAR.php'); |
require_once('Writer/Workbook.php'); |
/** |
/trunk/jrest/lib/ImageRecreation.php |
---|
14,13 → 14,13 |
$this->mode = self::MODE_GD; |
if (extension_loaded('imagick')) { |
putenv('MAGICK_TEMPORARY_PATH='.$this->config['cel_db']['chemin_stockage_temp']); |
putenv('MAGICK_TEMPORARY_PATH='.$this->config['cel']['chemin_stockage_temp']); |
$this->mode = self::MODE_IMAGEMAGICK; |
} |
} |
public function recreerMiniaturesRecursivement() { |
$this->itererRecursivement($this->config['cel_db']['chemin_images']); |
$this->itererRecursivement($this->config['cel']['chemin_images']); |
} |
public function regenererMiniaturesIntervalle($params) { |
292,7 → 292,7 |
} |
public function obtenirDossierPourFormat($id, $format) { |
$chemin_base = $this->config['cel_db']['chemin_images']; |
$chemin_base = $this->config['cel']['chemin_images']; |
$chemin_sur_serveur = $chemin_base; |
335,8 → 335,8 |
public function obtenirDimensionsPourFormat($format) { |
$dimensions = array('largeur' => 0, 'hauteur' => 0); |
if (isset($this->config['cel_db']['format_'.$format])) { |
list($dimensions['largeur'], $dimensions['hauteur']) = explode('_', $this->config['cel_db']['format_'.$format]); |
if (isset($this->config['cel']['format_'.$format])) { |
list($dimensions['largeur'], $dimensions['hauteur']) = explode('_', $this->config['cel']['format_'.$format]); |
} |
return $dimensions; |
380,7 → 380,7 |
} |
public function renvoyerTauxCompressionPourPoids($poids_octets) { |
$poids_max_octets = $this->config['cel_db']['taille_max']; |
$poids_max_octets = $this->config['cel']['taille_max']; |
$ratio_compression = 100 ; |
495,7 → 495,7 |
$nom_temp = md5(time()); |
$chemin_temp = |
$out = $this->config['cel_db']['chemin_stockage_temp'].'/'.$nom_temp; |
$out = $this->config['cel']['chemin_stockage_temp'].'/'.$nom_temp; |
$dimension_vignettes = $this->obtenirDimensionsPourFormat($format); |
/trunk/jrest/lib/LiaisonMotsCles.php |
---|
31,10 → 31,12 |
public function ajouterLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) { |
$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; |
// le mot clé ignore est spécifique mysql, mais il est utilisé ici pour des raisons |
// de performance, à remplacer par un test sur les mots clés déjà existant si ça gène |
$requete_liaison_mots_cles = 'INSERT IGNORE INTO cel_'.$this->mode.'_mots_cles '. |
'(id_observation, id_mot_cle_utilisateur) '. |
'('.$champ.', id_mot_cle_utilisateur) '. |
'VALUES '; |
foreach($ids_images_ou_obs as $id_image_ou_obs) { |
46,6 → 48,7 |
$requete_liaison_mots_cles = rtrim($requete_liaison_mots_cles,','); |
echo $requete_liaison_mots_cles; |
$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles); |
if(!$resultat_liaison_mots_cles) { |
55,6 → 58,17 |
return $resultat_liaison_mots_cles; |
} |
public function supprimerLiaisonMotsClesEtRegenererIndexTexte($id_utilisateur, $ids_images_ou_obs, $mots_cles) { |
$retour = $this->supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles); |
foreach($ids_images_ou_obs as $image_ou_obs) { |
$this->regenererIndexTexteMotCle($image_ou_obs, $id_utilisateur); |
} |
return $retour; |
} |
public function supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) { |
$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; |
65,7 → 79,7 |
$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle); |
if ($resultat_suppression_mot_cle) { |
if ($requete_suppression_liaison_mot_cle !== false) { |
$retour = true; |
} else { |
$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete"; |
74,10 → 88,27 |
$retour = false; |
} |
foreach($ids_images_ou_obs as $image_ou_obs) { |
$this->regenererIndexTexteMotCle($image_ou_obs, $id_utilisateur); |
return $retour; |
} |
public function supprimerToutesLiaisonsPourIdImageOuObs($id_utilisateur, $ids_images_ou_obs) { |
$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; |
$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '. |
$champ.' IN ('.implode(',',$ids_images_ou_obs).') '; |
$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle); |
if ($requete_suppression_liaison_mot_cle !== false) { |
$retour = true; |
} else { |
$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete"; |
$this->logger($message); |
$retour = false; |
} |
return $retour; |
} |
/trunk/jrest/lib/ExtracteurMetadonnees.php |
---|
15,469 → 15,190 |
public function extraireMetadonnees($chemin_fichier) |
{ |
$iptc = $this->extraireIptc($chemin_fichier) ; |
$exif = $this->extraireExif($chemin_fichier) ; |
$metadonnees = $this->decoderMetaDonnees($chemin_fichier); |
$meta = array_merge($exif,$iptc); |
$this->initialiserSectionsSupplementaires(&$meta) ; |
return $meta ; |
return $metadonnees ; |
} |
/** |
* Extraction des metadonnées exif |
**/ |
public function extraireExif($chemin_fichier) |
{ |
$exif_tab = $this->initialiserTableauExif () ; |
$exif = @exif_read_data($chemin_fichier,"EXIF,COMPUTED,IFD0,FILE,COMMENT",true,false); |
if ($exif) { |
foreach ($exif as $key => $section) |
{ |
foreach ($section as $name => $val) |
{ |
if ($name != "MakerNote") |
{ |
$this->decoderValeurExif ($name, $val ,&$exif_tab) ; |
private function peutUtiliserExifTool() { |
// TODO indiquer ceci dans un fichier de config |
return file_exists('/usr/bin/exiftool') && is_executable('/usr/bin/exiftool'); |
} |
} |
} |
} |
return $exif_tab ; |
} |
private function decoderMetadonnees($chemin_image) { |
/** |
* Extraction des metadonnées iptc |
**/ |
public function extraireIptc($chemin_fichier) |
{ |
$iptc_tab = $this->initialiserTableauIptc() ; |
$metadonnees = array(); |
// geimagesize renvoie le infos iptc dans le tableau info |
$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 ,&$iptc_tab) ; |
} |
} |
} |
} |
if($this->peutUtiliserExifTool()) { |
return $iptc_tab ; |
} |
$res = $this->decoderMetadonneesExifTool($chemin_image); |
$metadonnees['meta_exif'] = $this->convertirExifVersXML(&$res); |
$metadonnees['meta_iptc'] = $this->convertirIptcVersXML(&$res); |
$metadonnees['meta_xmp'] = $this->convertirXmpVersXML(&$res); |
$metadonnees['meta_makernote'] = $this->convertirMakernoteVersXML(&$res); |
/** |
* Stocke une valeur de metadonnées exif 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 decoderValeurExif($nom, $val ,$data_tab) |
{ |
switch ($nom) |
{ |
$metadonnees['appareil_fabriquant'] = $this->obtenirAppareilFabricant(&$res); |
$metadonnees['appareil_modele'] = $this->obtenirAppareilModele(&$res); |
case "Height" : |
$data_tab['ci_meta_height'] = $val ; |
break ; |
$metadonnees['hauteur'] = $this->obtenirHauteur(&$res); |
$metadonnees['largeur'] = $this->obtenirLargeur(&$res); |
case "Width" : |
$data_tab['ci_meta_width'] = $val ; |
break ; |
$metadonnees['date_prise_de_vue'] = $this->obtenirDatePriseDeVue(&$res); |
case "Make" : |
$data_tab['ci_meta_make'] = $val ; |
break ; |
} else { |
case "Model" : |
$data_tab['ci_meta_model'] = $val ; |
break ; |
} |
case "XResolution" : |
$data_tab['ci_meta_x_resolution'] = $val ; |
break ; |
return $metadonnees; |
} |
case "YResolution" : |
$data_tab['ci_meta_y_resolution'] = $val ; |
break ; |
private function obtenirAppareilFabricant($infos_meta) { |
case "DateTimeOriginal" : |
$data_tab['ci_meta_date_time'] = $val ; |
break ; |
$fabriquant = ''; |
case "GPS" : |
$data_tab['ci_meta_gps'] = $val ; |
break ; |
if(isset($infos_meta['EXIF']['Make'])) { |
$fabriquant = $infos_meta['EXIF']['Make']['valeur']; |
} |
case "UserComment" : |
$data_tab['ci_meta_user_comment'] = '"'.$val.'"' ; |
break ; |
return $fabriquant; |
} |
case "ExposureTime" : |
$data_tab['ci_meta_exif_exposure_time'] = $val ; |
break ; |
private function obtenirAppareilModele($infos_meta) { |
case "FNumber" : |
$data_tab['ci_meta_exif_f_number'] = $val ; |
break ; |
$modele = ''; |
case "ExifVersion" : |
$data_tab['ci_meta_exif_exif_version'] = $val ; |
break ; |
if(isset($infos_meta['EXIF']['CameraModelName'])) { |
$modele = $infos_meta['EXIF']['CameraModelName']['valeur']; |
} |
case "CompressedBitsPerPixel" : |
$data_tab['ci_meta_exif_compressed_bits_per_pixel'] = $val ; |
break ; |
return $modele; |
} |
case "ShutterSpeedValue" : |
$data_tab['ci_meta_exif_shutter_speed_value'] = $val ; |
break ; |
private function obtenirHauteur($infos_meta) { |
$hauteur = ''; |
case "ApertureValue" : |
$data_tab['ci_meta_exif_aperture_value'] = $val ; |
break ; |
if(isset($infos_meta['File']['ImageHeight'])) { |
$hauteur = $infos_meta['File']['ImageHeight']['valeur']; |
} |
case "ExposureBiasValue" : |
$data_tab['ci_meta_exif_exposure_bias_value'] = $val ; |
break ; |
return $hauteur; |
} |
case "MaxApertureValue" : |
$data_tab['ci_meta_exif_max_aperture_value'] = $val ; |
break ; |
private function obtenirLargeur($infos_meta) { |
$largeur = ''; |
case "MeteringMode" : |
$data_tab['ci_meta_exif_metering_mode'] = $val ; |
break ; |
if(isset($infos_meta['File']['ImageWidth'])) { |
$largeur = $infos_meta['File']['ImageWidth']['valeur']; |
} |
case "LightSource" : |
$data_tab['ci_meta_exif_light_source'] = $val ; |
break ; |
return $largeur; |
} |
case "Flash" : |
$data_tab['ci_meta_exif_flash'] = $val ; |
break ; |
private function obtenirDatePriseDeVue($infos_meta) { |
case "FocalLength" : |
$data_tab['ci_meta_exif_focal_length'] = $val ; |
break ; |
$date = ''; |
case "FlashpixVersion" : |
$data_tab['ci_meta_exif_flash_pix_version'] = $val ; |
break ; |
if(isset($infos_meta['EXIF']['DateTimeOriginal'])) { |
$date = $infos_meta['EXIF']['DateTimeOriginal']['valeur']; |
} |
case "ColorSpace" : |
$data_tab['ci_meta_exif_color_space'] = $val ; |
break ; |
return $date; |
} |
case "InteroperabilityOffset" : |
$data_tab['ci_meta_exif_interoperability_offset'] = $val ; |
break ; |
private function decoderMetadonneesExifTool($chemin_image) { |
$metadata = array(); |
$res = exec('/usr/bin/exiftool -g -D '.$chemin_image, $metadata); |
case "FocalPlaneXResolution" : |
$data_tab['ci_meta_exif_focal_plane_x_resolution'] = $val ; |
break ; |
$metadata_decodees = array(); |
case "FocalPlaneYResolution" : |
$data_tab['ci_meta_exif_focal_plane_y_resolution'] = $val ; |
break ; |
$categorie = ''; |
foreach($metadata as &$data) { |
if($this->estUnSeparateurCategorieExifTool($data)) { |
$categorie = trim(str_replace('----','',$data)); |
} else { |
$data_decodee = $this->parserValeurMetadonneeExifTool($data); |
$cle_metadonnee = str_replace(' ', '', $data_decodee['cle']); |
$metadata_decodees[$categorie][$cle_metadonnee] = $data_decodee; |
} |
} |
case "FocalPlaneResolutionUnit" : |
$data_tab['ci_meta_exif_focal_plane_resolution_unit'] = $val ; |
break ; |
return $metadata_decodees; |
} |
case "SensingMethod" : |
$data_tab['ci_meta_exif_sensing_method'] = $val ; |
break ; |
private function estUnSeparateurCategorieExifTool($data) { |
return preg_match('^---- (.)* ----^',$data); |
} |
case "FileSource" : |
$data_tab['ci_meta_exif_file_source'] = $val ; |
break ; |
private function parserValeurMetadonneeExifTool($data) { |
$cle_valeur = explode(':',$data); |
case "CustomRendered" : |
$data_tab['ci_meta_exif_custom_rendered'] = $val ; |
break ; |
$valeur = ''; |
if(count($cle_valeur) == 2) { |
$valeur = trim($cle_valeur[1]); |
} |
case "ExposureMode" : |
$data_tab['ci_meta_exif_exposure_mode'] = $val ; |
break ; |
$id_cle = explode(' ',trim($cle_valeur[0]),2); |
case "WhiteBalance" : |
$data_tab['ci_meta_exif_white_balance'] = $val ; |
break ; |
$id_cle[1] = str_replace(array('-','/'),'',$id_cle[1]); |
case "DigitalZoomRatio" : |
$data_tab['ci_meta_exif_digital_zoom_ratio'] = $val ; |
break ; |
$cle_id_valeur = array('cle' => $id_cle[1], 'id' => str_replace('-','',$id_cle[0]), 'valeur' => $valeur); |
return $cle_id_valeur; |
} |
case "SceneCaptureType" : |
$data_tab['ci_meta_exif_scene_capture_type'] = $val ; |
break ; |
private function convertirExifVersXML($donnees_meta) { |
case "GainControl" : |
$data_tab['ci_meta_exif_gain_control'] = $val ; |
break ; |
$xml = '<?xml version="1.0" encoding="UTF-8" ?>'; |
$xml .= '<exif>'; |
if (isset($donnees_meta['EXIF'])) { |
foreach ($donnees_meta['EXIF'] as $prop => &$valeur) { |
$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n"; |
} |
} |
$xml .= '</exif>'."\n"."\n"; |
case "Contrast" : |
$data_tab['ci_meta_exif_contrast'] = $val ; |
break ; |
return $xml; |
} |
case "Saturation" : |
$data_tab['ci_meta_exif_saturation'] = $val ; |
break ; |
private function convertirIptcVersXML($donnees_meta) { |
case "Sharpness" : |
$data_tab['ci_meta_exif_sharpness'] = $val ; |
break ; |
case "SubjectDistanceRange" : |
$data_tab['ci_meta_exif_subject_distance_range'] = $val ; |
break ; |
default : |
$data_tab['ci_meta_exif_autres'] .= $nom.":".$val.";" ; |
$xml = '<?xml version="1.0" encoding="UTF-8" ?>'; |
$xml .= '<iptc>'; |
if (isset($donnees_meta['IPTC'])) { |
foreach ($donnees_meta['IPTC'] as $prop => &$valeur) { |
$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n"; |
} |
} |
$xml .= '</iptc>'."\n"."\n"; |
/** |
* 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) |
{ |
// mots cles iptc |
case "2#005" : |
$data_tab['ci_meta_iptc_category'] = $val ; |
break; |
return $xml; |
} |
case "2#025" : |
$data_tab['ci_meta_iptc_mots_cles'] = $val ; |
break; |
private function convertirXmpVersXML($donnees_meta) { |
// champ by line |
case "2#080" : |
$data_tab['ci_meta_iptc_by_line'] = $val ; |
break ; |
// champ by line titre |
case "2#085" : |
$data_tab['ci_meta_iptc_by_line_title'] = $val ; |
break ; |
// ville |
case "2#090" : |
$data_tab['ci_meta_iptc_city'] = $val ; |
break ; |
// sous location |
case "2#092" : |
$data_tab['ci_meta_iptc_sub_location'] = $val ; |
break ; |
// etat (pour les us) |
case "2#095" : |
$data_tab['ci_meta_iptc_province_state'] = $val ; |
break ; |
// code pays |
case "2#100" : |
$data_tab['ci_meta_iptc_country_primary_location_code'] = $val ; |
break ; |
// code pays |
case "2#101" : |
$data_tab['ci_meta_iptc_country_name'] = $val ; |
break ; |
// titre principal |
case "2#105" : |
$data_tab['ci_meta_iptc_headline'] = $val ; |
break ; |
// credit |
case "2#110" : |
$data_tab['ci_meta_iptc_credit'] = $val ; |
break ; |
// copyright |
case "2#116" : |
$data_tab['ci_meta_iptc_copyright_notice'] = $val ; |
break ; |
// contact |
case "2#118" : |
$data_tab['ci_meta_iptc_contact'] = $val ; |
break ; |
// autres (pour les champs qu'on ne prend pas en compte) |
default : |
$data_tab['ci_meta_iptc_autres'] .= $nom.":".$val.";" ; |
$xml = '<?xml version="1.0" encoding="UTF-8" ?>'; |
$xml .= '<xmp>'; |
if (isset($donnees_meta['XMP'])) { |
foreach ($donnees_meta['XMP'] as $prop => &$valeur) { |
$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n"; |
} |
} |
$xml .= '</xmp>'; |
/** |
* Crée le tableau vide pour stocker les iptc pour le ce |
* |
* @return array $data_tab référence vers le tableau où la donnée sera stockée |
* |
**/ |
private function initialiserTableauIptc() |
{ |
$data_tab = array() ; |
$data_tab['ci_meta_iptc_category'] = NULL ; |
$data_tab['ci_meta_iptc_mots_cles'] = NULL ; |
$data_tab['ci_meta_iptc_by_line'] = NULL ; |
$data_tab['ci_meta_iptc_by_line_title'] = NULL ; |
$data_tab['ci_meta_iptc_city'] = NULL ; |
$data_tab['ci_meta_iptc_sub_location'] = NULL ; |
$data_tab['ci_meta_iptc_province_state'] = NULL ; |
$data_tab['ci_meta_iptc_country_primary_location_code'] = NULL ; |
$data_tab['ci_meta_iptc_country_name'] = NULL ; |
$data_tab['ci_meta_iptc_headline'] = NULL ; |
$data_tab['ci_meta_iptc_credit'] = NULL ; |
$data_tab['ci_meta_iptc_copyright_notice'] = NULL ; |
$data_tab['ci_meta_iptc_contact'] = NULL ; |
$data_tab['ci_meta_iptc_autres'] .= " " ; |
return $data_tab ; |
return $xml; |
} |
/** |
* Crée le tableau vide pour stocker les exifs pour le cel |
* |
* @return array $data_tab référence vers le tableau où la donnée sera stockée |
* |
**/ |
private function initialiserTableauExif() |
{ |
$data_tab = array() ; |
private function convertirMakernoteVersXML($donnees_meta) { |
$data_tab['ci_meta_height'] = 0 ; |
$data_tab['ci_meta_width'] = 0 ; |
$data_tab['ci_meta_make'] = NULL ; |
$data_tab['ci_meta_model'] = NULL ; |
$data_tab['ci_meta_x_resolution'] = NULL ; |
$data_tab['ci_meta_y_resolution'] = NULL ; |
$data_tab['ci_meta_date_time'] = NULL ; |
$data_tab['ci_meta_gps'] = NULL ; |
$data_tab['ci_meta_user_comment'] = NULL ; |
$data_tab['ci_meta_exif_exposure_time'] = NULL ; |
$data_tab['ci_meta_exif_f_number'] = NULL ; |
$data_tab['ci_meta_exif_exif_version'] = NULL ; |
$data_tab['ci_meta_exif_compressed_bits_per_pixel'] = NULL ; |
$data_tab['ci_meta_exif_shutter_speed_value'] = NULL ; |
$data_tab['ci_meta_exif_aperture_value'] = NULL ; |
$data_tab['ci_meta_exif_exposure_bias_value'] = NULL ; |
$data_tab['ci_meta_exif_max_aperture_value'] = NULL ; |
$data_tab['ci_meta_exif_metering_mode'] = NULL ; |
$data_tab['ci_meta_exif_flash'] = NULL ; |
$data_tab['ci_meta_exif_light_source'] = NULL ; |
$data_tab['ci_meta_exif_focal_length'] = NULL ; |
$data_tab['ci_meta_exif_flash_pix_version'] = NULL ; |
$data_tab['ci_meta_exif_color_space'] = NULL ; |
$data_tab['ci_meta_exif_interoperability_offset'] = NULL ; |
$data_tab['ci_meta_exif_focal_plane_x_resolution'] = NULL ; |
$data_tab['ci_meta_exif_focal_plane_y_resolution'] = NULL ; |
$data_tab['ci_meta_exif_focal_plane_resolution_unit'] = NULL ; |
$data_tab['ci_meta_exif_sensing_method'] = NULL ; |
$data_tab['ci_meta_exif_file_source'] = NULL ; |
$data_tab['ci_meta_exif_custom_rendered'] = NULL ; |
$data_tab['ci_meta_exif_exposure_mode'] = NULL ; |
$data_tab['ci_meta_exif_white_balance'] = NULL ; |
$data_tab['ci_meta_exif_digital_zoom_ratio'] = NULL ; |
$data_tab['ci_meta_exif_scene_capture_type'] = NULL ; |
$data_tab['ci_meta_exif_gain_control'] = NULL ; |
$data_tab['ci_meta_exif_contrast'] = NULL ; |
$data_tab['ci_meta_exif_saturation'] = NULL ; |
$data_tab['ci_meta_exif_sharpness'] = NULL ; |
$data_tab['ci_meta_exif_subject_distance_range'] = NULL ; |
$data_tab['ci_meta_exif_autres'] .= " " ; |
return $data_tab ; |
$xml = '<?xml version="1.0" encoding="UTF-8" ?>'; |
$xml .= '<makernote>'; |
if (isset($donnees_meta['MAKERNOTE'])) { |
foreach ($donnees_meta['MAKERNOTE'] as $prop => &$valeur) { |
$xml .= '<'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n"; |
} |
} |
$xml .= '</makernote>'; |
/** |
* Crée le tableau vide pour stocker les section supplémentaires pour le cel |
* |
* @return array $tab référence vers le tableau de metadonnées |
* |
**/ |
private function InitialiserSectionsSupplementaires($tab) |
{ |
$tab['ci_meta_exif_autres'] .= " " ; |
$tab['ci_meta_iptc_autres'] .= " " ; |
$tab['ci_nom_original'] = NULL ; |
$tab['ci_md5'] = NULL ; |
return ''; |
} |
} |
?> |
/trunk/jrest/lib/GestionImage.php |
---|
56,13 → 56,16 |
// le md5 du fichier sert à repérer les images en doublons |
$informations_image['md5'] = md5_file($infos_fichier['tmp_name']) ; |
// TODO: faire une fonction qui fournit un id pour un mail donné |
// faire cela automatiquement dans le constructeur ? dans la classe cel ? |
$informations_image['ce_utilisateur'] = $id_utilisateur ; |
$informations_image['mail_utilisateur'] = $id_utilisateur ; |
$infos_utilisateur = $this->getInfosComplementairesUtilisateur($id_utilisateur); |
$informations_image['courriel_utilisateur'] = $infos_utilisateur['courriel']; |
$informations_image['nom_utilisateur'] = $infos_utilisateur['nom']; |
$informations_image['prenom_utilisateur'] = $infos_utilisateur['prenom']; |
$requete_insertion_infos_image = $this->construireRequeteInsertionImage($informations_image); |
$resultat_insertion_infos_image = $this->executer($requete_insertion_infos_image); |
if (!$resultat_insertion_infos_image) { |
94,7 → 97,7 |
$nouvel_ordre = 0 ; |
$requete_selection_ordre_max ='SELECT MAX(ordre) as max_ordre FROM cel_images WHERE ce_utilisateur = '.$this->proteger($id_utilisateur) ; |
$resultat_requete_ordre_max = $this->executerRequete($requete_selection_ordre_max); |
$resultat_requete_ordre_max = $this->requeter($requete_selection_ordre_max); |
if($resultat_requete_ordre_max) { |
$nouvel_ordre = $resultat_requete_ordre_max[0]['max_ordre']; |
108,8 → 111,8 |
$id_image = false; |
$requete_id_image ='SELECT id_image FROM cel_images WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ci_ordre = '.$ordre ; |
$resultat_id_image = $this->executerRequete($requete_id_image); |
$requete_id_image ='SELECT id_image FROM cel_images WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ordre = '.$ordre ; |
$resultat_id_image = $this->requeter($requete_id_image); |
if (count($resultat_id_image) > 0) |
{ |
140,12 → 143,8 |
} |
} |
// TODO: modifier le format d'extraction des metadonnées |
if ($informations_image['ci_meta_date_time'] != 'NULL') { |
$champs_a_inserer .= 'date_prise_de_vue, '; |
$valeurs_a_inserer .= $this->proteger($informations_image['ci_meta_date_time']).','; |
} |
$champs_a_inserer .= 'date_modification,' ; |
$valeurs_a_inserer .= '"0000-00-00 00:00:00",' ; |
$champs_a_inserer .= 'date_creation' ; |
$valeurs_a_inserer .= 'CURRENT_TIMESTAMP()' ; |