10,9 → 10,33 |
// TODO : soigner les controles ... |
// Scenario avance |
|
|
// Nom des colonnes |
|
define('COMMUNE','commune'); // soit un nom de commune, soit un code INSEE (5 chiffres), ou "nom de commune (numero departement)" |
define('LIEUDIT','lieu-dit'); // Texte libre |
define('STATION','station'); // Texte libre |
define('MILIEU','milieu'); // Texte libre |
define('LATITUDE','latitude'); // En decimal systeme WGS84 |
define('LONGITUDE','longitude'); // En decimal systeme WGS84 |
define('NOTES','notes'); // Texte libre |
define('DATEOBS','date'); // date au format jj/mm/aaaa |
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 "/" |
|
// Resultat analyse ligne // TODO : Classe ? |
define('LIGNE_VIDE',1); // |
define('LIGNE_NORMALE',2); // |
define('LIGNE_IMAGE_SEULEMENT',3); // |
|
|
// Element constituant une observation |
|
Class InventoryImportExcel extends DBAccessor { |
|
// Element constituant une observation |
|
var $format_observation=array(COMMUNE ,LIEUDIT ,STATION ,MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,IMAGE ); |
var $config; |
var $extendExcelReader; |
|
21,57 → 45,333 |
$this->config=$config; |
// Pas d'heritage multiple en php :( |
|
|
$this->extendExcelReader = new ExcelReader(); |
$this->extendExcelReader->initExcelReader(); |
} |
|
|
function getElement($uid){ |
function createElement($pairs) { |
|
// uid[0] : utilisateur obligatoire |
|
// Controle detournement utilisateur |
session_start(); |
$this->controleUtilisateur($uid[0]); |
|
|
// Begin |
session_start(); |
$this->controleUtilisateur($pairs['identifiant']); |
|
foreach($_FILES as $file) { // FIXME : est necessaire |
|
$data = new Spreadsheet_Excel_Reader("import.xls", false); // false : pour menager la memoire. |
$infos_fichier = $file ; |
} |
|
$arr = array(); |
|
for($row=1;$row<=$data->rowcount(0);$row++) |
for($col=1;$col<=$data->colcount(0);$col++) |
$arr[$row][$col] = $data->val($row,$col,0); |
// Chargement tableau en memoire FIXME : limiter le nombre de ligne ? |
|
$data = new Spreadsheet_Excel_Reader($infos_fichier['tmp_name'], false); // false : pour menager la memoire. |
|
$arr = array(); |
$rowcount=$data->rowcount(0); |
$colcount=$data->colcount(0); |
|
if ($rowcount<=1) { // TODO : retour erreur |
print "Tableau vide"; |
exit; |
} |
|
for($row=1;$row<=$rowcount;$row++) |
for($col=1;$col<=$colcount;$col++) |
$arr[$col][$row] = $data->val($row,$col,0); |
|
|
//print_r($arr); |
|
print_r($arr); |
// 1 : Traitement colonnes |
|
$line = array(); |
|
/* Les colonnes ne sont pas forcemment dans l'ordre : on les extrait pour traitement futur */ |
|
for($col=1;$col<=$colcount;$col++) { |
$colonne=strtolower($arr[$col][1]); |
switch ($colonne) { // On ne garde que les colonnes que l'on souhaite traiter |
case COMMUNE: |
case LIEUDIT: |
case STATION: |
case MILIEU: |
case LATITUDE: |
case LONGITUDE: |
case NOTES: |
case DATEOBS: |
case ESPECE: |
case IMAGE: |
$selection=array_values($arr[$col]); |
array_shift($selection); // On ne garde pas la premiere ligne, qui contient les intitules |
$line[$colonne]=$selection; |
break; |
|
} |
} |
|
/* |
print_r($line[COMMUNE]); |
print_r($line[LIEUDIT]); |
print_r($line[STATION]); |
print_r($line[MILIEU]); |
print_r($line[LATITUDE]); |
print_r($line[LONGITUDE]); |
print_r($line[NOTES]); |
print_r($line[DATEOBS]); |
print_r($line[ESPECE]); |
print_r($line[IMAGE]); |
*/ |
|
// 1 : Traitement lignes |
|
for ($i=0;$i<=$colcount-1;$i++) { |
// On saute les lignes vides |
while (($this->analyserLigne($line,$i)==LIGNE_VIDE) && ($i<=$colcount)) { |
print "vide"; |
$i++; |
} |
while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$colcount)) { |
$this->traiterLigne($line,$i); |
$i++; |
while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$colcount)) { |
if ($retour_analyse==LIGNE_IMAGE_SEULEMENT) { |
$this->traiterLigneComplement($line,$i); |
} |
else { |
print "vide"; |
} |
$i++; |
} |
} |
|
// Cas special : seul l'image est presente |
|
} |
|
} |
|
function analyserLigne($line,$i) { |
$ligne_vide=true; |
$ligne_image_seulement=true; |
$ligne_normale=true; |
foreach ($this->format_observation as $colonne) { |
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) { |
return LIGNE_IMAGE_SEULEMENT; |
} |
else { |
return LIGNE_NORMALE; |
} |
} |
|
|
} |
|
function traiterLigne($line,$i) { |
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 |
case COMMUNE: |
$info_commune=$this->traiterCommune($line[COMMUNE][$i]); |
echo $info_commune['name']; |
echo $info_commune['code']; |
break; |
case LIEUDIT: |
$this->traiterLieudit($line[LIEUDIT][$i]); |
break; |
case STATION: |
$this->traiterStation($line[STATION][$i]); |
break; |
case MILIEU: |
$this->traiterMilieu($line[MILIEU][$i]); |
break; |
case LATITUDE: |
$this->traiterLatitude($line[LATITUDE][$i]); |
break; |
case LONGITUDE: |
$this->traiterLongitude($line[LONGITUDE][$i]); |
break; |
case NOTES: |
$this->traiterNotes($line[NOTES][$i]); |
break; |
case DATEOBS: |
$this->traiterDateObs($line[DATEOBS][$i]); |
break; |
case ESPECE: |
$this->traiterEspece($line[ESPECE][$i]); |
break; |
case IMAGE: |
$this->traiterImage($line[IMAGE][$i]); |
break; |
} |
print "\n"; |
} |
} |
|
} |
|
function traiterLigneComplement($line,$i) { |
$this->traiterImage($line[IMAGE][$i]); |
print "\n"; |
|
} |
function traiterCommune($identifiant_commune) { // Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee |
|
|
echo "traitement commune"; |
|
$identifiant_commune=ltrim($identifiant_commune); |
|
$identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau |
|
preg_match('/(.*)\((.*)\)/',$identifiant_commune,$elements); |
|
$DB=$this->connectDB($this->config,'database_cel'); // FIXME regarder si opportun ici |
|
if ($elements[1]) { // departement present |
$nom_commune=$elements[1]; |
$code_commune=$elements[2]; |
|
$query="SELECT DISTINCT name, code FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."%' AND code ='".$DB->escapeSimple($code_commune)."'"; |
|
} |
else { |
preg_match('/([0-9][0-9])|(2A[0-9][0-9]*)|(2B[0-9][0-9]*)/',$identifiant_commune,$elements); |
if ($elements[1]) { // code insee commune |
$code_insee_commune=$elements[1]; |
$query="SELECT DISTINCT name, code FROM locations WHERE insee_code ='".$DB->escapeSimple($code_insee_commune)."'"; |
} |
else { |
preg_match('/(.*)/',$identifiant_commune,$elements); |
if ($elements[1]) { // commune |
$nom_commune=$elements[1]; |
$query="SELECT DISTINCT name, code FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."'"; |
} |
} |
} |
|
|
$res =& $DB->query($query); |
|
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
|
return $res->fetchrow(DB_FETCHMODE_ASSOC); |
|
|
|
|
} |
|
function traiterLieudit($lieudit) { // texte libre |
|
echo "traitement lieudit"; |
return utf8_encode(ltrim($lieudit)); |
} |
|
function traiterStation($station) { // texte libre |
echo "traitement station"; |
return utf8_encode(ltrim($station)); |
} |
|
function traiterMilieu($milieu) { // texte libre |
echo "traitement milieu"; |
return utf8_encode(ltrim($milieu)); |
} |
|
function traiterLatitude($latitude) { // verifier formal decimal + limite france ? TODO |
echo "traitement latitude"; |
return ltrim($latitude); |
} |
|
function traiterLongitude($longitude) { // verifier format decimal + limite france ? TODO |
echo "traitement longitude"; |
return ltrim($longitude); |
} |
|
function traiterNotes($notes) { // texte libre |
echo "traitement notes"; |
return utf8_encode(ltrim($notes)); |
} |
|
function traiterDateObs($dateobs) { // verifier jj/mm/aaaa sinon date vide TODO |
echo "traitement dateobs"; |
return ltrim($notes); |
} |
|
function traiterEspece($identifiant_espece) { // texte libre, nom latin, ou code nomenclatural (format BDNFFnn999999) |
/* |
$identifiant_espece=ltrim($identifiant_espece); |
|
$identifiant_espece=utf8_encode($identifiant_espece); // FIXME : devrait deja etre en utf8 a ce niveau |
|
preg_match('/B(.*)\((.*)\)/',$identifiant_commune,$elements); |
preg_match('/(.*)\((.*)\)/',$identifiant_commune,$elements); |
|
$DB=$this->connectDB($this->config,'database_cel'); // FIXME regarder si opportun ici |
|
if ($elements[1]) { // departeme |
$query="SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,". |
" auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ". |
" , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ". |
" , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ". |
" , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ". |
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom, esn_ce_statut" . |
" FROM eflore_nom, eflore_nom_rang, " . |
" eflore_naturaliste_intitule_abreviation AS auteur_bex ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_b ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_mex ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_m ". |
" , eflore_selection_nom". |
" WHERE en_id_version_projet_nom = '25' AND en_nom_genre LIKE '".$DB->escapeSimple($genre)."%' " . |
" AND en_ce_rang > 160 " . |
" AND en_epithete_espece like '".$DB->escapeSimple($espece)."%' AND en_ce_rang = enrg_id_rang " . |
" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ". |
" AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ". |
" AND esn_id_version_projet_taxon=en_id_version_projet_nom " . |
" AND esn_id_nom= en_id_nom ". |
" ORDER BY esn_ce_statut, en_ce_rang, en_epithete_espece, en_nom_genre LIMIT 50"; |
|
|
|
echo "traitement espece"; |
*/ |
} |
|
|
|
function traiterImage($image) { // recherche id image de ce nom et creation table correspondance |
echo "traitement image"; |
} |
|
|
|
|
} |
|
|
|
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.7 2008-11-13 11:29:12 ddelon |
* Reecriture gwt-ext |
* |
* Revision 1.6 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.5 2007-06-06 13:31:16 ddelon |
* v0.09 |
* |
* Revision 1.4 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
* |
* |
*/ |
|
|