New file |
0,0 → 1,279 |
<?php |
class TaxonDao extends Bdd { |
// tableau de la forme $taxons[num][flore][id] |
// $taxons[num][flore][nom] |
protected $taxons = array(); |
private $id = 0; |
private $flores = array('syntri', 'ciff', 'codefr94', 'bdnff', 'bryo', 'floeur', 'algues', 'characees', 'lichen', 'fournier'); |
private $table_flores = array('bdnff', 'fournier', 'ciff', 'syntri', 'codefr94', 'bryo', 'floeur'); |
|
public function __construct() { |
Bdd::__construct(); |
$this->id = $this->chargerId() + 1; |
$this->taxons = $this->chargerTaxon(); |
} |
|
// recherche si un taxon existe sinon le crée et renvoie son id |
public function getId($num_taxon, $flore = 'ind', $nom = null, $flore_supp = null, $num_supp = null, $remarques = '') { |
|
$idTaxon = null; $nom_supp = $nom; |
if ($nom == null && $remarques != '') { |
$nom = "rem:".$flore_supp.$num_supp.'/'.$remarques; |
} |
|
if (isset($this->taxons['ind'][$nom]['id'])) { |
$idTaxon = $this->taxons['ind'][$nom]['id']; |
} elseif (isset($this->taxons[$flore][$num_taxon]['id']) && $nom == null) { |
$idTaxon = $this->taxons[$flore][$num_taxon]['id']; |
} else { |
$idTaxon = $this->ajouterTaxon($num_taxon, $flore, $nom_supp, $flore_supp, $num_supp, $remarques); |
} |
return $idTaxon; |
} |
|
// renvoie un nom d'apres son id |
public function getNom($id) { |
foreach ($this->taxons['ind'] as $nom=>$param) { |
if ($param['id'] === $id) { |
if (preg_match('/rem:[a-z]+\d+\/(.*)/', $nom, $match)) { |
$nom = $match[1]; |
} |
return $nom; |
} |
} |
return ''; |
} |
|
// Ajoute taxon avec pour clé le numéro taxon, le nom ou la remarque |
public function ajouterTaxon($num_taxon, $flore, $nom, $flore_supp, $num_supp, $remarques) { |
if ($nom != null) { |
$cle = 'ind'; |
$num = $nom; |
} elseif ($remarques != '') { |
$cle = 'ind'; |
$num = "rem:".$flore_supp.$num_supp.'/'.$remarques; |
} else { |
$cle = $flore; |
$num = $num_taxon; |
} |
$this->taxons[$cle][$num]['id'] = $this->id; |
foreach ($this->flores as $nom_flore) { |
if ($nom_flore == $flore) { |
$this->taxons[$cle][$num][$nom_flore] = $num_taxon; |
} elseif ($nom_flore == $flore_supp) { |
$this->taxons[$cle][$num][$nom_flore] = $num_supp; |
} else { |
$this->taxons[$cle][$num][$nom_flore] = 'NULL'; |
} |
} |
$this->taxons[$cle][$num]['nom'] = $this->ajouterNomTaxon($num_taxon, $flore, $nom, $flore_supp, $num_supp); |
$this->taxons[$cle][$num]['remarques'] = $remarques; |
$this->id++; |
return $this->taxons[$cle][$num]['id']; |
} |
|
public function ajouterNomTaxon($num_taxon, $flore, $nom_supp, $flore_supp, $num_supp) { |
$nom = ''; |
$nomCherche = false; |
foreach ($this->table_flores as $nom_flore) { |
if ($nomCherche == false) { |
if ($nom_flore == $flore) { |
$nom = $this->rechercherNomTaxon($nom_flore, $num_taxon); |
if ($nom != false) { |
$nomCherche = true; |
} |
} elseif ($nom_flore == $flore_supp) { |
$nom = $this->rechercherNomTaxon($nom_flore, $num_supp); |
if ($nom != false) { |
$nomCherche = true; |
} |
} |
} |
} |
if ($nom == false && $nom_supp != null) { |
$nom = $nom_supp; |
} elseif ($nom == '' && $nom_supp != null) { |
$nom = $nom_supp; |
} |
return $nom; |
} |
|
public function rechercherNomTaxon($nom_flore, $num_taxon) { |
$requete2 = null; |
switch ($nom_flore) { |
case 'bdnff' : |
$requete = "SELECT sb_nom_complet AS nom FROM sophy_bdnff |
WHERE sb_num_tax = {$num_taxon} AND sb_id_num_bdnff = sb_num_nom_retenu; "; |
break; |
case 'fournier' : |
$requete = "SELECT sb_nom_complet AS nom FROM sophy_bdnff, sophy_fournier_bdnff |
WHERE sfb_id_num_fournier = {$num_taxon} AND sb_num_tax = sfb_id_num_bdnff AND sb_id_num_bdnff = sb_num_nom_retenu;"; |
$requete2 = "SELECT sf_nom_fournier AS nom FROM sophy_fournier WHERE sf_id_num_fournier = {$num_taxon};"; |
break; |
case 'ciff' : |
$requete = "SELECT sb_nom_complet AS nom |
FROM sophy_bdnff, sophy_ciff_bdnff |
WHERE scb_id_num_ciff = {$num_taxon} AND scb_id_num_bdnff = sb_id_num_bdnff;"; |
$requete2 = "SELECT sci_nom_ciff AS nom FROM sophy_ciff WHERE sci_id_num_ciff = {$num_taxon};"; |
break; |
case 'syntri' : |
$requete = "SELECT sb_nom_complet AS nom |
FROM sophy_bdnff, sophy_syntri_fournier, sophy_fournier_bdnff |
WHERE ssf_id_num_syntri = {$num_taxon} AND ssf_id_num_fournier = sfb_id_num_fournier |
AND sb_num_tax = sfb_id_num_bdnff AND sb_id_num_bdnff = sb_num_nom_retenu;"; |
$requete2 = "SELECT ssyn_nom_supp AS nom FROM sophy_syntri WHERE ssyn_id_num_supp = {$num_taxon};"; |
break; |
case 'codefr94' : |
$requete = "SELECT sc_nom_codefr AS nom FROM sophy_codefr94 WHERE sc_id_num_codefr = {$num_taxon};"; |
break; |
case 'bryo' : |
$requete = "SELECT sbr_nom_bryo AS nom FROM sophy_bryophyte WHERE sbr_id_num_bryo = {$num_taxon};"; |
break; |
case 'floeur' : |
$requete = "SELECT sfe_nom_floeur AS nom FROM sophy_flora_europea WHERE sfe_id_num_floeur = {$num_taxon};"; |
break; |
} |
$resultat_requete = $this->recuperer($requete); |
if ($resultat_requete['nom'] == false && $requete2 != null) { |
$resultat_requete = $this->recuperer($requete2); |
} |
return $resultat_requete['nom']; |
} |
// recherche le dernier id de la base |
public function chargerId() { |
$id = 0; |
$requete_select_id = "SELECT MAX(st_id_taxon) AS idMax FROM sophy_taxon;"; |
$resultat_requete_id = $this->recuperer($requete_select_id); |
if ($resultat_requete_id['idMax'] != false) { |
$id = $resultat_requete_id['idMax']; |
} |
return $id; |
} |
|
// Regarde si il y a des taxons dans la base, retourne le tableau de valeur et vide la base |
public function chargerTaxon() { |
$resultat = null; |
$retour = null; |
$requete_select = "SELECT * FROM sophy_taxon;"; |
$resultat = $this->recupererTous($requete_select); |
if ($resultat != false) { |
foreach ($resultat as $result) { |
if ($result['st_nom_supp'] != null) { |
$retour['ind'][$result['st_nom_supp']]['id'] = $result['st_id_taxon']; |
foreach ($this->flores as $nom_flore) { |
$retour['ind'][$result['st_nom_supp']][$nom_flore] = $result["st_ce_num_".$nom_flore]; |
} |
$retour['ind'][$result['st_nom_supp']]['remarques'] = $result['st_nom_supp']; |
} elseif ($result['st_remarques'] != null) { |
$nom = $result['st_remarques']; |
$retour['ind'][$nom]['id'] = $result['st_id_taxon']; |
foreach ($this->flores as $nom_flore) { |
$retour['ind'][$result['st_nom_supp']][$nom_flore] = $result["st_ce_num_".$nom_flore]; |
} |
$retour['ind'][$nom]['remarques'] = $result['st_nom_supp']; |
} elseif ($result['st_ce_num_syntri'] != null) { |
$retour['syntri'][$result['st_ce_num_syntri']]['id'] = $result['st_id_taxon']; |
$retour['syntri'][$result['st_ce_num_syntri']]['num_supp'] = $result['st_num_supp']; |
} elseif ($result['st_ce_num_floeur'] != null) { |
$retour['floeur'][$result['st_ce_num_floeur']]['id'] = $result['st_id_taxon']; |
} elseif ($result['st_ce_num_bdnff'] != null) { |
$retour['bdnff'][$result['st_ce_num_bdnff']]['id'] = $result['st_id_taxon']; |
} elseif ($result['st_ce_num_codefr94'] != null) { |
$retour['codefr94'][$result['st_ce_num_codefr94']]['id'] = $result['st_id_taxon']; |
} elseif ($result['st_ce_num_bryo'] != null) { |
$retour['bryo'][$result['st_ce_num_bryo']]['id'] = $result['st_id_taxon']; |
} elseif ($result['st_ce_num_ciff'] != null) { |
$retour['ciff'][$result['st_ce_num_ciff']]['id'] = $result['st_id_taxon']; |
} elseif ($result['st_ce_num_fournier'] != null) { |
$retour['fournier'][$result['st_ce_num_fournier']]['id'] = $result['st_id_taxon']; |
} |
} |
} |
$requete = "TRUNCATE TABLE `sophy_taxon`; "; |
$res = $this->requeter($requete); |
return $retour; |
} |
// +-------------------------------------------------------------------------------------------------------------------+ |
// Requête sur table sophy_taxon et toutes les tables flore de sophy |
public function integrerTaxons() { |
foreach ($this->taxons as $flore=>$taxons) { |
switch ($flore) { |
case 'ind' : |
// insertion par 1000 pour éviter que la requête soit trop lourde |
$i = 0; $j = 1000; |
$requete = "INSERT INTO `sophy_taxon` (`st_id_taxon`, `st_nom`, `st_nom_supp`,"; |
foreach ($this->flores as $nom_flore) { |
$requete .= "st_ce_num_{$nom_flore}, "; |
} |
$requete .= " st_remarques) VALUES "; |
foreach ($taxons as $taxon=>$valeur) { |
if (!isset($valeur['remarques'])){ |
$valeur['remarques'] = 'NULL'; |
$taxon = $this->proteger($taxon); |
} elseif (substr_compare($taxon, 'rem:', 0, 4) == 0){ |
$valeur['remarques'] = $this->proteger($taxon); |
$taxon = 'NULL'; |
} else { |
$taxon = $this->proteger($taxon); |
$valeur['remarques'] = $this->proteger($valeur['remarques']); |
} |
|
if ($i < $j) { |
$requete .= " (".$valeur['id'].", ".$this->proteger($valeur['nom']).", ".$taxon.", "; |
foreach ($this->flores as $nom_flore) { |
$requete .= $valeur[$nom_flore].", "; |
} |
$requete .= " ".$valeur['remarques']."),"; |
} elseif ($i == $j) {$j += 1000; |
$requete = substr($requete,0,-1).";"; |
$resultat = $this->requeter($requete); |
if ($resultat == false) { |
echo $flore.' : '.$i; |
} |
$requete = "INSERT INTO `sophy_taxon` (`st_id_taxon`, `st_nom`, `st_nom_supp`,"; |
foreach ($this->flores as $nom_flore) { |
$requete .= "st_ce_num_{$nom_flore}, "; |
} |
$requete .= " st_remarques) VALUES (".$valeur['id'].", ".$this->proteger($valeur['nom']). |
", ".$taxon.", "; |
foreach ($this->flores as $nom_flore) { |
$requete .= $valeur[$nom_flore].", "; |
} |
$requete .= " ".$valeur['remarques']."),"; |
} |
$i++; |
} |
$requete = substr($requete,0,-1).";"; |
break; |
case 'syntri' : |
$i = 0; |
$requete = "INSERT INTO `sophy_taxon` (`st_id_taxon`, "; |
foreach ($this->flores as $nom_flore) { |
$requete .= "st_ce_num_{$nom_flore}, "; |
} |
$requete .= "`st_nom`) VALUES "; |
foreach ($taxons as $taxon=>$valeur) { |
$requete .= " (".$valeur['id'].", "; |
foreach ($this->flores as $nom_flore) { |
$requete .= $valeur[$nom_flore].", "; |
} |
$requete .= $this->proteger($valeur['nom'])."), "; |
} |
$requete = substr($requete,0,-2).";"; |
break; |
default: |
$requete = "INSERT INTO `sophy_taxon` (`st_id_taxon`, `st_nom`, st_ce_num_{$flore}) VALUES "; |
foreach ($taxons as $numTaxon=>$valeur) { |
$requete .= " (".$valeur['id'].", ".$this->proteger($valeur['nom']).", ".$numTaxon."),"; |
} |
$requete = substr($requete,0,-1).";"; |
break; |
} |
$resultat = $this->requeter($requete); |
if ($resultat == false) { |
echo " - flore : ".$flore; |
} |
} |
} |
} |
?> |