14,6 → 14,9 |
protected $table_auteur = null; |
protected $table_publication_a_auteur = null; |
protected $table_meta = null; |
protected $table_structure = 'coel_structure'; // @TODO configurer |
protected $table_collection = 'coel_collection'; // @TODO configurer |
protected $table_collection_bota = 'coel_collection_botanique'; // @TODO configurer |
|
protected $id_table_publication = null; |
protected $id_table_publication_personne = null; |
98,22 → 101,176 |
|
$this->id_role_auteur = $tables['id_role_auteur']; |
} |
|
|
/** |
* Importe des collections botaniques à partir de deux fichiers : $fichier-collections.csv et |
* $fichier-collections-bota.csv |
* Il faut donc fournir en paramètre seulement le début du nom de fichier. Ex : |
* fichiers: |
* - rhone-alpes-collections.csv |
* - rhone-alpes-collections-bota.csv |
* commande : |
* - php cli.php import -a collections -n rhone-alpes |
*/ |
private function chargerCollections($fichier) { |
|
$separateur = "\t"; // @TODO configurer |
$fichierCollections = Config::get('dossiertmp').$fichier . '-collections.csv'; |
$fichierCollectionsBota = Config::get('dossiertmp').$fichier . '-collections-bota.csv'; |
|
// vérification existence fichiers |
if(!file_exists($fichierCollections)) { |
throw new Exception("Le fichier ".Config::get('dossiertmp').$fichierCollections." n'existe pas."); |
} |
if(!file_exists($fichierCollectionsBota)) { |
throw new Exception("Le fichier ".Config::get('dossiertmp').$fichierCollectionsBota." n'existe pas."); |
} |
|
//ouvrir le fichier - collection |
$pointeurCollections = fopen($fichierCollections, "r"); |
// Chargement de la première colonne (qui contient les noms de colonnes à importer) |
$colonnes = fgetcsv($pointeurCollections, 0, $separateur); |
$colonnesParNom = array_flip($colonnes); |
//var_dump($colonnes); |
//var_dump($colonnesParNom); |
|
// vérifier le nom des colonnes |
// tester l'existence de la structure |
// si oui récupérer l'id |
//sinon créer la structure et récupérer son id |
// remplacer le nom de la structure par son id |
// créer les collections et récupérer leur id |
// @TODO on verra plus tard |
/*if(count($colonnes) < 2 || !array_intersect(array_keys($this->colonnes_obligatoires), $colonnes)) { |
// Vérification des colonnes obligatoires et en même temps du séparateur |
$erreur = "Le fichier ne contient pas les colonnes obligatoires : ".implode(',', array_keys($this->colonnes_obligatoires))."\n"; |
$erreur .= "ou bien n'est pas séparé par le caractère ';' "; |
throw new Exception($erreur); |
}*/ |
|
$idCollectionsParIdTemp = array(); |
// parcours du fichier "-collections.csv" |
while($ligne = fgetcsv($pointeurCollections, 0, $separateur)) { |
//var_dump($ligne); |
$nomStructure = $ligne[$colonnesParNom['cc_ce_structure']]; |
if (empty($nomStructure) || is_numeric($nomStructure)) { |
echo "- omission de la structure pour cause de nom chelou [$nomStructure]\n"; |
continue; |
} |
// tester l'existence de la structure |
$idStructure = $this->verifierExistenceStructureParNom($nomStructure); |
// si oui récupérer l'id |
//sinon créer la structure et récupérer son id |
if ($idStructure === false) { |
$idStructure = $this->creerStructure($nomStructure); |
} |
// remplacer le nom de la structure par son id |
// créer les collections et récupérer leur id |
// @TODO vérifier qu'elles existent pour ne pas insérer de doublons en relançant le script !! |
$idCollection = $this->creerCollection($idStructure, $ligne, $colonnesParNom); |
$idCollectionsParIdTemp[$ligne[$colonnesParNom['id']]] = $idCollection; |
} |
|
//ouvrir le fichier collection botanique |
$pointeurCollectionsBota = fopen($fichierCollectionsBota, "r"); |
// Chargement de la première colonne (qui contient les noms de colonnes à importer) |
$colonnesBota = fgetcsv($pointeurCollectionsBota, 0, $separateur); |
$colonnesBotaParNom = array_flip($colonnesBota); |
//var_dump($colonnesBota); |
//var_dump($colonnesBotaParNom); |
|
// vérifier les colonnes |
// remplacer les noms des collections par leur id (créé précédemment) |
// créer/importer |
// @TODO on verra plus tard |
|
// parcours du fichier "-collections-bota.csv" |
while($ligne = fgetcsv($pointeurCollectionsBota, 0, $separateur)) { |
// remplacer les noms des collections par leur id (créé précédemment) |
$ligne[$colonnesBotaParNom['ccb_id_collection']] = $idCollectionsParIdTemp[$ligne[$colonnesBotaParNom['ccb_id_collection']]]; |
// créer/importer |
// @TODO vérifier qu'elles existent pour ne pas insérer de doublons en relançant le script !! |
$this->creerCollectionBota($ligne, $colonnesBotaParNom); |
} |
|
} |
|
/** |
* Si une structure ayant pour nom $nomStructure existe, retourne son |
* identifiant numérique, sinon retourne false |
*/ |
protected function verifierExistenceStructureParNom($nomStructure) { |
$idStructure = false; |
$nsp = $this->bdd->proteger($nomStructure); |
$requete = "SELECT cs_id_structure FROM " . $this->table_structure |
. " WHERE cs_nom = $nsp"; |
|
$resultat = $this->bdd->recupererTous($requete); |
// var_dump($resultat); |
if (count($resultat) > 0) { |
$idStructure = $resultat[0]['cs_id_structure']; |
} |
return $idStructure; |
} |
|
/** |
* Crée une structure portant le nom $nomStructure, sans rien fournir d'autre, et |
* retourne l'identifiant numérique du novueau tuple |
*/ |
protected function creerStructure($nomStructure) { |
$nsp = $this->bdd->proteger($nomStructure); |
$requete = "INSERT INTO " . $this->table_structure . " (cs_nom)" |
. " VALUES ($nsp)"; |
//echo "REQ INS: $requete\n"; |
$resultat = $this->bdd->executer($requete); |
$idStructure = $this->bdd->recupererIdDernierAjout(); |
|
return $idStructure; |
} |
|
/** |
* Crée une collection en la rattachant à la structure d'id $idStrucutre; la remplit |
* avec les données issues de $ligne en se servant de $colonnesParNom pour accéder |
* aux valeurs par clés textuelles; retourne l'identifiant numérique du novueau tuple |
*/ |
protected function creerCollection($idStructure, $ligne, $colonnesParNom) { |
//echo "Insertion ! : "; var_dump($ligne); echo "<br/>"; |
$nom = $this->bdd->proteger($ligne[$colonnesParNom['cc_nom']]); |
$desc = $this->bdd->proteger($ligne[$colonnesParNom['cc_description']]); |
$pcd = $this->bdd->proteger($ligne[$colonnesParNom['cc_periode_constitution_debut']]); |
$pcf = $this->bdd->proteger($ligne[$colonnesParNom['cc_periode_constitution_fin']]); |
$tcl = $this->bdd->proteger($ligne[$colonnesParNom['cc_truk_couverture_lieu']]); |
$cst = $this->bdd->proteger($ligne[$colonnesParNom['cc_ce_specimen_type']]); |
|
$requete = "INSERT INTO " . $this->table_collection |
. " (cc_ce_structure, cc_nom, cc_description, cc_periode_constitution_debut, cc_periode_constitution_fin, cc_truk_couverture_lieu, cc_ce_specimen_type)" |
. " VALUES ($idStructure, $nom, $desc, $pcd, $pcf, $tcl, $cst)"; |
//echo "REQ INS: $requete\n"; |
$resultat = $this->bdd->executer($requete); |
$idCollection = $this->bdd->recupererIdDernierAjout(); |
|
return $idCollection; |
} |
|
/** |
* Crée une collection botanique; la remplit avec les données issues de $ligne en se |
* servant de $colonnesParNom pour accéder aux valeurs par clés textuelles |
*/ |
protected function creerCollectionBota($ligne, $colonnesBotaParNom) { |
//echo "Insertion ! : "; var_dump($ligne); echo "<br/>"; |
$id = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_id_collection']]); |
$ceg = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_ce_etat_general']]); |
$ne = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_nbre_echantillon']]); |
$spec = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_specialite']]); |
$ac = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_annotation_classement']]); |
$ct = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_ce_traitement']]); |
$ci = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_ce_inventaire']]); |
$ii = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_inventaire_info']]); |
$aur = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_autres_unite_rangement']]); |
$tcpt = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_truk_conservation_papier_type']]); |
|
// @TODO comment gérer la colonne "Nombre de parts" ? Faut la mettre dans quoi ? |
$requete = "INSERT INTO " . $this->table_collection_bota |
. " (ccb_id_collection, ccb_ce_etat_general, ccb_nbre_echantillon, ccb_specialite, ccb_annotation_classement, ccb_ce_traitement, ccb_ce_inventaire," |
. " ccb_inventaire_info, ccb_autres_unites_rangement, ccb_truk_conservation_papier_type)" |
. " VALUES ($id, $ceg, $ne, $spec, $ac, $ct, $ci, $ii, $aur, $tcpt)"; |
//echo "REQ INS: $requete\n"; |
$resultat = $this->bdd->executer($requete); |
} |
|
private function chargerPubli($fichier) { |
|
// vérification existence fichier |