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; } } } } ?>