3,16 → 3,23 |
// In : utf8 |
// Out : utf8 |
|
// Import depuis une feuille de calcul |
/* |
|
// Test fonction d'import |
// Import de base |
// TODO : soigner les controles ... |
// Scenario avance |
Octobre 2010 David Delon. |
Import d'observations dans le carnet en ligne à partir d'un fichier excel chargé par l'utilisateur |
et liaison d'images déjà chargee aux observations ainsi crées. |
|
Nom des colonnes imposé, mais présence de toutes les colonnes non obligatoires, ordre non imposé |
Aucune valeur dans les colonnes n'est obligatoire |
Pour une ligne donnée, si tous les champs vides on ne fait rien, ou si seul le champ image est présent. |
Si la seule différence entre deux lignes est la valeur de la colonne image, on considère que c'est la même observation à laquelle on associe plusieurs images. |
Si au moins deux lignes (ou plus) sont complètement identiques on prend en compte une seule ligne (les doublons sont éliminés). |
|
// Nom des colonnes |
*/ |
|
|
// 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 |
24,7 → 31,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 "/" |
|
// Resultat analyse ligne // TODO : Classe ? |
// Resultat de l'analyse d'une ligne |
define('LIGNE_VIDE',1); // |
define('LIGNE_NORMALE',2); // |
define('LIGNE_IMAGE_SEULEMENT',3); // |
39,9 → 46,18 |
// Element constituant une observation |
|
var $format_observation=array(COMMUNE ,LIEUDIT ,STATION ,MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,IMAGE ); |
|
|
// Fichier configuration |
var $config; |
|
// Encapsulation classe lecture fichier excel |
|
var $extendExcelReader; |
|
/** |
Constructeur |
**/ |
function InventoryImportExcel($config) { |
|
$this->config=$config; |
51,26 → 67,30 |
$this->extendExcelReader->initExcelReader(); |
} |
|
|
/** |
Sur post |
**/ |
function createElement($pairs) { |
|
// uid[0] : utilisateur obligatoire |
|
$pairs['utilisateur']=$_POST['identifiant']; |
|
|
session_start(); |
$this->controleUtilisateur($pairs['identifiant']); |
$this->controleUtilisateur($pairs['utilisateur']); |
|
foreach($_FILES as $file) { // FIXME : est necessaire |
|
foreach($_FILES as $file) { // C'est le plus simple |
|
$infos_fichier = $file ; |
} |
|
|
// Chargement tableau en memoire FIXME : limiter le nombre de ligne ? |
// Chargement tableau en memoire |
|
$data = new Spreadsheet_Excel_Reader($infos_fichier['tmp_name'], false); // false : pour menager la memoire. |
$arr = array(); |
|
$arr = array(); |
$rowcount=$data->rowcount(0); |
$colcount=$data->colcount(0); |
|
84,7 → 104,6 |
$arr[$col][$row] = $data->val($row,$col,0); |
|
|
//print_r($arr); |
|
// 1 : Traitement colonnes |
|
128,27 → 147,32 |
|
// 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"; |
for ($i=0;$i<=$rowcount-1;$i++) { |
// On saute les lignes vides du debut et les lignes contenant des information sur image uniquement |
while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) { |
if ($retour_analyse==LIGNE_IMAGE_SEULEMENT) { |
// print "image non rattachee a une observation"; |
} |
else { |
// print "vide"; |
} |
$i++; |
} |
while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$colcount)) { |
$this->traiterLigne($line,$i); |
while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$rowcount)) { |
$ordre=$this->traiterLigne($line,$i,$pairs['utilisateur']); |
$i++; |
while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$colcount)) { |
// On saute les lignes vide ou on traite les lignes suivantes contenant des informations sur image seulement |
while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) { |
if ($retour_analyse==LIGNE_IMAGE_SEULEMENT) { |
$this->traiterLigneComplement($line,$i); |
$this->traiterLigneComplement($line,$i,$pairs['utilisateur'],$ordre); // images supplementaires |
} |
else { |
print "vide"; |
// print "vide"; |
} |
$i++; |
} |
} |
|
// Cas special : seul l'image est presente |
|
} |
|
183,58 → 207,159 |
|
} |
|
function traiterLigne($line,$i) { |
function traiterLigne($line,$i,$utilisateur) { // Controle donnee et insertion |
$info_image=array(); |
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]); |
$info_lieudit=$this->traiterLieudit($line[LIEUDIT][$i]); |
break; |
case STATION: |
$this->traiterStation($line[STATION][$i]); |
$info_station=$this->traiterStation($line[STATION][$i]); |
break; |
case MILIEU: |
$this->traiterMilieu($line[MILIEU][$i]); |
$info_milieu=$this->traiterMilieu($line[MILIEU][$i]); |
break; |
case LATITUDE: |
$this->traiterLatitude($line[LATITUDE][$i]); |
$info_latitude=$this->traiterLatitude($line[LATITUDE][$i]); |
break; |
case LONGITUDE: |
$this->traiterLongitude($line[LONGITUDE][$i]); |
$info_longitude=$this->traiterLongitude($line[LONGITUDE][$i]); |
break; |
case NOTES: |
$this->traiterNotes($line[NOTES][$i]); |
$info_notes=$this->traiterNotes($line[NOTES][$i]); |
break; |
case DATEOBS: |
$this->traiterDateObs($line[DATEOBS][$i]); |
$info_dateobs=$this->traiterDateObs($line[DATEOBS][$i]); |
break; |
case ESPECE: |
$this->traiterEspece($line[ESPECE][$i]); |
$info_espece=$this->traiterEspece($line[ESPECE][$i]); |
if (isset($info_espece['en_id_nom']) && $info_espece['en_id_nom']!='') { |
$complement=$this->rechercherInformationsComplementaires($info_espece['en_id_nom']); |
$info_espece['nom_ret']=$complement['Nom_Retenu']; |
$info_espece['num_nom_ret']=$complement['Num_Nom_Retenu']; |
$info_espece['num_taxon']=$complement['Num_Taxon']; |
$info_espece['famille']=$complement['Famille']; |
} |
|
|
break; |
case IMAGE: |
$this->traiterImage($line[IMAGE][$i]); |
$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / + utilisateur |
break; |
} |
print "\n"; |
} |
else { |
switch($colonne) { |
case COMMUNE: |
$info_commune['name']="000null"; |
$info_commune['code']="000null"; |
break; |
case LIEUDIT: |
$info_lieudit="000null"; |
break; |
case STATION: |
$info_station="000null"; |
break; |
case MILIEU: |
$info_milieu="000null"; |
break; |
case LATITUDE: |
$info_latitude="000null"; |
break; |
case LONGITUDE: |
$info_longitude="000null"; |
break; |
|
} |
|
} |
} |
|
// Dernier numero d'ordre utilise : |
|
$DB=$this->connectDB($this->config,'database_cel'); // TODO / a garder en memoire pour eviter appels mutliples |
$query="SELECT MAX(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($utilisateur)."' "; |
|
$res =& $DB->query($query); |
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
$ordre=0; |
|
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$ordre=$row['ordre']+1; |
} |
|
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) " . |
" VALUES('".$DB->escapeSimple($utilisateur)."','". |
$DB->escapeSimple($ordre)."','". |
$DB->escapeSimple($info_espece['nom_sel'])."','". |
$DB->escapeSimple($info_espece['en_id_nom'])."','". |
$DB->escapeSimple($info_espece['nom_ret'])."','". |
$DB->escapeSimple($info_espece['num_nom_ret'])."','". |
$DB->escapeSimple($info_espece['num_taxon'])."','". |
$DB->escapeSimple($info_espece['famille'])."','". |
$DB->escapeSimple($info_commune['name'])."','". |
$DB->escapeSimple($info_commune['code'])."','". |
$DB->escapeSimple($info_dateobs)."','". |
$DB->escapeSimple($info_lieudit)."','". |
$DB->escapeSimple($info_station)."','". |
$DB->escapeSimple($info_milieu)."','". |
$DB->escapeSimple($info_notes)."',". |
"now() , now(),'". |
$DB->escapeSimple($info_latitude)."','". |
$DB->escapeSimple($info_longitude)."')"; |
// print $query; |
// 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($ordre).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ; |
|
//print $query; |
|
$res =& $DB->query($query); |
|
if (PEAR::isError($res)) { |
return false; |
} |
|
|
} |
|
|
|
return $ordre; |
|
|
} |
|
function traiterLigneComplement($line,$i) { |
$this->traiterImage($line[IMAGE][$i]); |
print "\n"; |
function traiterLigneComplement($line,$i,$utilisateur) { |
|
// TODO |
|
} |
function traiterCommune($identifiant_commune) { // Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee |
|
|
echo "traitement commune"; |
|
$identifiant_commune=ltrim($identifiant_commune); |
|
248,7 → 373,7 |
$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)."'"; |
$query="SELECT DISTINCT name, code FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."' AND code ='".$DB->escapeSimple($code_commune)."'"; |
|
} |
else { |
282,43 → 407,44 |
|
function traiterLieudit($lieudit) { // texte libre |
|
echo "traitement lieudit"; |
//echo "traitement lieudit"; |
|
return utf8_encode(ltrim($lieudit)); |
} |
|
function traiterStation($station) { // texte libre |
echo "traitement station"; |
// echo "traitement station"; |
return utf8_encode(ltrim($station)); |
} |
|
function traiterMilieu($milieu) { // texte libre |
echo "traitement milieu"; |
// echo "traitement milieu"; |
return utf8_encode(ltrim($milieu)); |
} |
|
function traiterLatitude($latitude) { // verifier formal decimal + limite france ? TODO |
echo "traitement latitude"; |
// echo "traitement latitude"; |
return ltrim($latitude); |
} |
|
function traiterLongitude($longitude) { // verifier format decimal + limite france ? TODO |
echo "traitement longitude"; |
// echo "traitement longitude"; |
return ltrim($longitude); |
} |
|
function traiterNotes($notes) { // texte libre |
echo "traitement notes"; |
// 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); |
// echo "traitement dateobs"; |
return ltrim($dateobs); |
} |
|
function traiterEspece($identifiant_espece) { // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999) |
|
echo "traitement espece"; |
// echo "traitement espece"; |
$identifiant_espece=ltrim($identifiant_espece); |
|
$identifiant_espece=utf8_encode($identifiant_espece); // FIXME : devrait deja etre en utf8 a ce niveau |
327,9 → 453,10 |
|
if ($elements[1]) { // Numero nomenclatural |
|
$DB=$this->connectDB($this->config); |
|
$query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,". |
// Recherche du nom associe |
$DB=$this->connectDB($this->config); // FIXME : gerer cache de connection |
$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 ". |
337,18 → 464,29 |
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" . |
" FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a, " . |
" 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 ". |
" WHERE a.esn_id_nom= '".$elements[1]. "'". |
" AND a.esn_id_version_projet_taxon = 25 ". |
" AND en_ce_rang = enrg_id_rang" . |
" AND en_id_nom = a.esn_id_nom" . |
" 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 a.esn_id_version_projet_taxon=en_id_version_projet_nom "; |
" , eflore_naturaliste_intitule_abreviation AS auteur_b ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_mex ". |
" , eflore_naturaliste_intitule_abreviation AS auteur_m ". |
" WHERE a.esn_id_nom= '".$elements[1]. "'". |
" AND a.esn_id_version_projet_taxon = 25 ". |
" AND en_ce_rang = enrg_id_rang" . |
" AND en_id_nom = a.esn_id_nom" . |
" 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 a.esn_id_version_projet_taxon=en_id_version_projet_nom "; |
|
$res =& $DB->query($query); |
|
|
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
|
$row =& $res->fetchrow(DB_FETCHMODE_ASSOC); |
return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$elements[1]); |
|
} |
|
else { // Nom scientifique |
356,7 → 494,6 |
|
$decoupageNomLatin=new DecoupageNomLatin(); |
$nom_latin_decoupe=$decoupageNomLatin->decouper($identifiant_espece); |
print_r($nom_latin_decoupe); |
|
/* |
|
391,47 → 528,167 |
[nom_complet] => Acer monspessulanum subsp. monspessulanum |
|
*/ |
/* |
|
|
$query="SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,". |
$DB=$this->connectDB($this->config); // FIXME regarder si opportun ici |
|
$query="SELECT DISTINCT en_id_nom" . |
" FROM eflore_nom, eflore_nom_rang " . |
" WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['nom_genre'])."' " . |
" AND en_ce_rang = '".$DB->escapeSimple($nom_latin_decoupe['rang_taxonomique'])."' " ; |
if (isset($nom_latin_decoupe['nom_infrasp']) && $nom_latin_decoupe['nom_infrasp']!="") { |
$query.=" AND en_epithete_infra_specifique = '".$DB->escapeSimple($nom_latin_decoupe['nom_infrasp'])."' " ; |
} |
$query.=" AND en_epithete_espece = '".$DB->escapeSimple($nom_latin_decoupe['nom_sp'])."' AND en_ce_rang = enrg_id_rang " . |
" LIMIT 1"; |
|
|
} |
|
$res =& $DB->query($query); |
|
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
|
$id_nom=$res->fetchrow(DB_FETCHMODE_ASSOC); |
|
// Recherche du nom associe |
$DB=$this->connectDB($this->config); // FIXME : gerer cache de connection |
$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, " . |
" , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" . |
" FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a, " . |
" 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 = '".$DB->escapeSimple($nom_latin_decoupe['nom_genre'])."' " . |
" AND en_ce_rang = '".$DB->escapeSimple($nom_latin_decoupe['rang_taxonomique'])."' " . |
" AND en_epithete_espece = '".$DB->escapeSimple($nom_latin_decoupe['nom_sp'])."' 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"; |
" WHERE a.esn_id_nom= '".$id_nom['en_id_nom']. "'". |
" AND a.esn_id_version_projet_taxon = 25 ". |
" AND en_ce_rang = enrg_id_rang" . |
" AND en_id_nom = a.esn_id_nom" . |
" 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 a.esn_id_version_projet_taxon=en_id_version_projet_nom "; |
$res =& $DB->query($query); |
|
*/ |
} |
|
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
|
$row =& $res->fetchrow(DB_FETCHMODE_ASSOC); |
return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$id_nom['en_id_nom']); |
|
|
|
|
|
} |
|
|
|
function traiterImage($image) { // recherche id image de ce nom et creation table correspondance |
echo "traitement image"; |
function traiterImage($images,$utilisateur) { // recherche id image de ce nom |
|
//echo "traitement image"; |
$DB=$this->connectDB($this->config,'cel_db'); |
|
$liste_images = explode("/",$images) ; |
|
$row =array(); |
foreach($liste_images as $image) { |
|
$query="SELECT * FROM cel_images WHERE ci_ce_utilisateur='".$DB->escapeSimple($utilisateur)."' AND ci_nom_original='".$DB->escapeSimple($image)."'"; |
|
$res =& $DB->query($query); |
$row [] =& $res->fetchrow(DB_FETCHMODE_ASSOC); |
|
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
|
} |
return $row; |
|
|
} |
|
|
// utilitaire : FIXME mutualiser avec autres scripts |
|
function rechercherInformationsComplementaires($numNom) { |
|
$DB=$this->connectDB($this->config); |
|
$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, b.esn_id_taxon, b.esn_id_nom" . |
" 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 a, eflore_selection_nom b". |
" WHERE a.esn_id_nom= ".$numNom. |
" AND a.esn_id_version_projet_taxon = 25 ". |
" AND a.esn_id_taxon=b.esn_id_taxon ". |
" AND b.esn_ce_statut=3 ". |
" AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" . |
" AND en_ce_rang = enrg_id_rang" . |
" AND en_id_nom = b.esn_id_nom" . |
" 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 a.esn_id_version_projet_taxon=en_id_version_projet_nom "; |
|
|
$res =& $DB->query($query); |
|
|
|
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
|
// Nom retenu, Num Nomen nom retenu, Num Taxon, |
// Famille |
|
$value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>""); |
|
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
$fam=$this->rechercherFamille($row['esn_id_taxon'],$DB); |
while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) { |
$fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB); |
} |
if ($fam['en_ce_rang']==120) { |
$famille=$fam['en_nom_supra_generique']; |
} |
else { |
$famille="Famille inconnue"; |
} |
$value=array('Nom_Retenu'=>$this->formaterNom($row),'Num_Nom_Retenu'=>$row['esn_id_nom'],'Num_Taxon'=>$row['esn_id_taxon'],'Famille'=>$famille); |
|
|
} |
|
return $value; |
|
|
|
} |
|
function formaterNom($rawnom) { |
|
|
// Constitution du nom: |
$nom = ''; |
|
454,42 → 711,78 |
} |
|
} |
return $nom.$this->retournerAuteur($rawnom) ; |
|
return $nom .$this->retournerAuteur($rawnom) ; |
|
} |
|
|
function rechercherFamille($taxon,&$DB) { |
|
$row=array(); |
|
$query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ". |
" FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom ". |
" WHERE etr_id_taxon_1 = ".$taxon. |
" AND etr_id_version_projet_taxon_1 = 25 ". |
" AND etr_id_categorie_taxon = 3 ". |
" AND etr_id_valeur_taxon = 3 ". |
" AND esn_id_taxon = etr_id_taxon_2 ". |
" AND esn_ce_statut = 3 ". |
" AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ". |
" AND en_id_nom = esn_id_nom ". |
" AND esn_id_version_projet_taxon=en_id_version_projet_nom "; |
$res =& $DB->query($query); |
|
if (DB::isError($res)) { |
die($res->getMessage()); |
} |
|
if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) { |
return $row; |
} |
else { |
$row['en_ce_rang']='fin'; |
return $row; |
} |
|
} |
|
|
function retournerAuteur($rawnom) { |
$auteurs = ''; |
$auteur_basio = ''; |
$auteur_modif = ''; |
if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' ) { |
$auteur_basio .= $rawnom['abreviation_auteur_basio_ex']; |
if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio']; |
} |
} else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= $rawnom['abreviation_auteur_basio']; |
} |
$auteurs = ''; |
$auteur_basio = ''; |
$auteur_modif = ''; |
if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' ) { |
$auteur_basio .= $rawnom['abreviation_auteur_basio_ex']; |
if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio']; |
} |
} else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') { |
$auteur_basio .= $rawnom['abreviation_auteur_basio']; |
} |
|
if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif_ex']; |
if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif']; |
} |
} else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif']; |
} |
if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif_ex']; |
if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif']; |
} |
} else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') { |
$auteur_modif .= $rawnom['abreviation_auteur_modif']; |
} |
|
if (!empty($auteur_modif)) { |
$auteurs = ' ('.$auteur_basio.') '.$auteur_modif; |
} elseif (!empty($auteur_basio)) { |
$auteurs = ' '.$auteur_basio; |
} |
if (!empty($auteur_modif)) { |
$auteurs = ' ('.$auteur_basio.') '.$auteur_modif; |
} elseif (!empty($auteur_basio)) { |
$auteurs = ' '.$auteur_basio; |
} |
|
return $auteurs ; |
return $auteurs ; |
} |
|
|
|
|
} |
|
|