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) ; |