Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 479 → Rev 480

/trunk/jrest/services/InventoryImportExcel.php
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 ;
}
 
 
 
 
}