Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 759 → Rev 760

/trunk/jrest/services/InventoryImportExcel.php
35,6 → 35,7
define('ESPECE','espece'); // texte libre, nom latin, ou code nomenclatural (format BDNFFnn999999)
define('IMAGE','image'); // nom des fichiers images préalablement uploadés sur le CEL séparés par des "/"
define('DEPARTEMENT','departement'); // Texte libre
define('TRANSMETTRE','transmettre'); // "1" ou "oui", toute autre valeur (y compris vide) sera consideree comme "non""
 
 
// Resultat de l'analyse d'une ligne
49,7 → 50,7
 
// Element constituant une observation
 
var $format_observation=array(COMMUNE ,LIEUDIT ,STATION , DEPARTEMENT, MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,IMAGE );
var $format_observation=array(COMMUNE ,LIEUDIT ,STATION , DEPARTEMENT, MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,TRANSMETTRE, IMAGE );
 
// Fichier configuration
var $config;
59,6 → 60,8
 
// Dernier numero d'ordre utilise
var $dernier_ordre=1;
var $cpt_images_liees=0;
 
/**
Constructeur
70,10 → 73,6
 
$this->extendExcelReader = new ExcelReader();
$this->extendExcelReader->initExcelReader();
 
/* Recherche dernier numero d'ordre utilise : pas de mise a jour concurente a priori */
 
 
}
 
/**
94,7 → 93,6
 
 
// Chargement tableau en memoire
 
$data = new Spreadsheet_Excel_Reader($infos_fichier['tmp_name'], false); // false : pour menager la memoire.
$arr = array();
 
110,9 → 108,7
for($row=1;$row<=$rowcount;$row++)
for($col=1;$col<=$colcount;$col++)
$arr[$col][$row] = $data->val($row,$col,0); // Attention, inversion voulue
 
 
// 1 : Traitement intitules
 
$line = array();
135,6 → 131,7
case NOTES:
case DATEOBS:
case ESPECE:
case TRANSMETTRE:
case IMAGE:
$selection=array_values($arr[$col]);
array_shift($selection); // On ne garde pas la premiere ligne, qui contient les intitules
143,8 → 140,7
 
}
}
 
 
// print_r($line[COMMUNE]);
// print_r($line[LIEUDIT]);
// print_r($line[STATION]);
161,6 → 157,7
// 1 : Traitement lignes
 
$cpt_obs=0;
$cpt_img=0;
 
 
/* Recherche dernier numero d'ordre utilise : pas de mise a jour concurente a priori */
210,29 → 207,50
}
//print $cpt_obs ." nouvelle(s) observation(s) !";
print $cpt_obs ;
$message = '';
if($this->cpt_images_liees > 0) {
$message = $this->cpt_images_liees.' images liees pour ';
}
$message .= $cpt_obs;
print $message;
 
}
 
function analyserLigne($line,$i) {
$ligne_vide=true;
$ligne_image_seulement=true;
$ligne_normale=true;
$ligne_identique_sauf_image = true;
foreach ($this->format_observation as $colonne) {
if($i < 1) {
$ligne_identique_sauf_image = false;
} else {
if($colonne!= IMAGE && $line[$colonne][$i - 1] != $line[$colonne][$i] && $line[$colonne][$i] != '') {
$ligne_identique_sauf_image = false;
}
}
if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
if ($colonne!=IMAGE) {
$ligne_image_seulement=false;
$ligne_vide=false;
break;
}
$ligne_vide=false;
}
}
}
if ($ligne_vide) {
return LIGNE_VIDE;
}
else {
if ($ligne_image_seulement) {
if ($ligne_image_seulement || $ligne_identique_sauf_image) {
return LIGNE_IMAGE_SEULEMENT;
}
else {
244,7 → 262,10
}
 
function traiterLigne($line,$i,$utilisateur,$DB) { // Controle donnee et insertion
$info_image=array();
$info_transmettre = "0";
foreach ($this->format_observation as $colonne) {
if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
switch ($colonne) { // On ne garde que les colonnes que l'on souhaite traiter
275,6 → 296,9
case DATEOBS:
$info_dateobs=$this->traiterDateObs($line[DATEOBS][$i]);
break;
case TRANSMETTRE:
$info_transmettre=$this->traiterTransmettre($line[TRANSMETTRE][$i]);
break;
case ESPECE:
$info_espece=$this->traiterEspece($line[ESPECE][$i]);
if (isset($info_espece['en_id_nom']) && $info_espece['en_id_nom']!='') {
316,6 → 340,10
case LONGITUDE:
$info_longitude="000null";
break;
case TRANSMETTRE:
$info_transmettre = "0";
break;
 
}
 
326,7 → 354,7
 
list($jour,$mois,$annee)=split("/",$info_dateobs);
$info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
$query = "INSERT INTO cel_inventory (identifiant,ordre,nom_sel,num_nom_sel,nom_ret,num_nom_ret,num_taxon,famille,location,id_location,date_observation,lieudit,station, milieu, commentaire, date_creation,date_modification,coord_x,coord_y) " .
$query = "INSERT INTO cel_inventory (identifiant,ordre,nom_sel,num_nom_sel,nom_ret,num_nom_ret,num_taxon,famille,location,id_location,date_observation,lieudit,station, milieu, commentaire, transmission, date_creation,date_modification,coord_x,coord_y) " .
" VALUES('".$DB->escapeSimple($utilisateur)."','".
$DB->escapeSimple($this->dernier_ordre)."','".
$DB->escapeSimple($info_espece['nom_sel'])."','".
341,33 → 369,30
$DB->escapeSimple($info_lieudit)."','".
$DB->escapeSimple($info_station)."','".
$DB->escapeSimple($info_milieu)."','".
$DB->escapeSimple($info_notes)."',".
$DB->escapeSimple($info_notes)."','".
$DB->escapeSimple($info_transmettre)."',".
"now() , now(),'".
$DB->escapeSimple($info_latitude)."','".
$DB->escapeSimple($info_longitude)."')";
// print "\n";
 
$res =& $DB->query($query);
 
if (PEAR::isError($res)) {
return false;
}
 
// creation lien image
foreach ($info_image as $pic) {
 
$query = 'INSERT INTO cel_obs_images (coi_ce_image, coi_ce_utilisateur, coi_ce_observation) VALUES ("'.$DB->escapeSimple($pic['ci_id_image']).'","'.$DB->escapeSimple($utilisateur).'", "'.$DB->escapeSimple($this->dernier_ordre).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ;
//print $query;
$query = 'INSERT INTO cel_obs_images (coi_ce_image, coi_ce_utilisateur, coi_ce_observation ) VALUES ("'.$DB->escapeSimple($pic['ci_id_image']).'","'.$DB->escapeSimple($utilisateur).'", "'.$DB->escapeSimple($this->dernier_ordre).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ;
 
$res =& $DB->query($query);
 
if (PEAR::isError($res)) {
return false;
} else {
$this->cpt_images_liees++;
}
 
}
 
 
377,10 → 402,24
 
}
 
function traiterLigneComplement($line,$i,$utilisateur) {
function traiterLigneComplement($line,$i,$utilisateur, $ordre = null) {
 
// TODO
$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / + utilisateur
// creation lien image
foreach ($info_image as $pic) {
 
$DB=$this->connectDB($this->config,'cel_db');
$query = 'INSERT INTO cel_obs_images (coi_ce_image, coi_ce_utilisateur, coi_ce_observation) VALUES ("'.$DB->escapeSimple($pic['ci_id_image']).'","'.$DB->escapeSimple($utilisateur).'", "'.$DB->escapeSimple($this->dernier_ordre).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ;
 
$res =& $DB->query($query);
 
if (PEAR::isError($res)) {
return false;
} else {
$this->cpt_images_liees++;
}
}
}
function traiterCommune($identifiant_commune) { // Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee
 
389,7 → 428,7
 
$identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau
 
preg_match('/(.*) \(([0-9][0-9]*)\)/',$identifiant_commune,$elements);
preg_match('/(.*) \(([0-9][0-9]*)\)/',$identifiant_commune,$elements);
 
$DB=$this->connectDB($this->config,'database_cel'); // FIXME regarder si opportun ici
 
454,7 → 493,15
}
 
function traiterDepartement($departement) { // texte libre
// echo "traitement milieu";
 
if(is_numeric($departement) && strlen($departement) == 5) {
$departement = substr($departement,0,2);
}
if(is_numeric($departement) && strlen($departement) == 4) {
$departement = substr($departement,0,1);
$departement = "0"+$departement;
}
return utf8_encode(trim($departement));
}
 
479,6 → 526,17
return trim($dateobs);
}
 
function traiterTransmettre($transmettre) {
$transmission = '0';
if (trim($transmettre) == "1" || trim($transmettre) == "oui") {
$transmission = '1';
}
return $transmission;
}
 
function traiterEspece($identifiant_espece) { // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999) ou code taxonomique (format BDNFFnt999999)
 
// echo "traitement espece";
655,7 → 713,6
 
function traiterImage($images,$utilisateur) { // recherche id image de ce nom
 
//echo "traitement image";
$DB=$this->connectDB($this->config,'cel_db');
 
$liste_images = explode("/",$images) ;