Line 12... |
Line 12... |
12 |
|
12 |
|
13 |
protected $table_publication = null;
|
13 |
protected $table_publication = null;
|
14 |
protected $table_auteur = null;
|
14 |
protected $table_auteur = null;
|
15 |
protected $table_publication_a_auteur = null;
|
15 |
protected $table_publication_a_auteur = null;
|
- |
|
16 |
protected $table_meta = null;
|
- |
|
17 |
protected $table_structure = 'coel_structure'; // @TODO configurer
|
- |
|
18 |
protected $table_collection = 'coel_collection'; // @TODO configurer
|
Line 16... |
Line 19... |
16 |
protected $table_meta = null;
|
19 |
protected $table_collection_bota = 'coel_collection_botanique'; // @TODO configurer
|
17 |
|
20 |
|
Line 18... |
Line 21... |
18 |
protected $id_table_publication = null;
|
21 |
protected $id_table_publication = null;
|
Line 96... |
Line 99... |
96 |
$this->id_table_publication = $tables['id_table_publication'];
|
99 |
$this->id_table_publication = $tables['id_table_publication'];
|
97 |
$this->id_table_publication_personne = $tables['id_table_publication_personne'];
|
100 |
$this->id_table_publication_personne = $tables['id_table_publication_personne'];
|
Line 98... |
Line 101... |
98 |
|
101 |
|
99 |
$this->id_role_auteur = $tables['id_role_auteur'];
|
102 |
$this->id_role_auteur = $tables['id_role_auteur'];
|
100 |
}
|
103 |
}
|
- |
|
104 |
|
- |
|
105 |
/**
|
- |
|
106 |
* Importe des collections botaniques à partir de deux fichiers : $fichier-collections.csv et
|
- |
|
107 |
* $fichier-collections-bota.csv
|
- |
|
108 |
* Il faut donc fournir en paramètre seulement le début du nom de fichier. Ex :
|
- |
|
109 |
* fichiers:
|
- |
|
110 |
* - rhone-alpes-collections.csv
|
- |
|
111 |
* - rhone-alpes-collections-bota.csv
|
- |
|
112 |
* commande :
|
- |
|
113 |
* - php cli.php import -a collections -n rhone-alpes
|
101 |
|
114 |
*/
|
- |
|
115 |
private function chargerCollections($fichier) {
|
- |
|
116 |
|
- |
|
117 |
$separateur = "\t"; // @TODO configurer
|
- |
|
118 |
$fichierCollections = Config::get('dossiertmp').$fichier . '-collections.csv';
|
- |
|
119 |
$fichierCollectionsBota = Config::get('dossiertmp').$fichier . '-collections-bota.csv';
|
- |
|
120 |
|
- |
|
121 |
// vérification existence fichiers
|
- |
|
122 |
if(!file_exists($fichierCollections)) {
|
- |
|
123 |
throw new Exception("Le fichier ".Config::get('dossiertmp').$fichierCollections." n'existe pas.");
|
- |
|
124 |
}
|
- |
|
125 |
if(!file_exists($fichierCollectionsBota)) {
|
- |
|
126 |
throw new Exception("Le fichier ".Config::get('dossiertmp').$fichierCollectionsBota." n'existe pas.");
|
- |
|
127 |
}
|
102 |
private function chargerCollections($fichier) {
|
128 |
|
- |
|
129 |
//ouvrir le fichier - collection
|
- |
|
130 |
$pointeurCollections = fopen($fichierCollections, "r");
|
- |
|
131 |
// Chargement de la première colonne (qui contient les noms de colonnes à importer)
|
- |
|
132 |
$colonnes = fgetcsv($pointeurCollections, 0, $separateur);
|
- |
|
133 |
$colonnesParNom = array_flip($colonnes);
|
- |
|
134 |
//var_dump($colonnes);
|
- |
|
135 |
//var_dump($colonnesParNom);
|
103 |
//ouvrir le fichier - collection
|
136 |
|
- |
|
137 |
// vérifier le nom des colonnes
|
- |
|
138 |
// @TODO on verra plus tard
|
- |
|
139 |
/*if(count($colonnes) < 2 || !array_intersect(array_keys($this->colonnes_obligatoires), $colonnes)) {
|
- |
|
140 |
// Vérification des colonnes obligatoires et en même temps du séparateur
|
- |
|
141 |
$erreur = "Le fichier ne contient pas les colonnes obligatoires : ".implode(',', array_keys($this->colonnes_obligatoires))."\n";
|
- |
|
142 |
$erreur .= "ou bien n'est pas séparé par le caractère ';' ";
|
- |
|
143 |
throw new Exception($erreur);
|
- |
|
144 |
}*/
|
- |
|
145 |
|
- |
|
146 |
$idCollectionsParIdTemp = array();
|
- |
|
147 |
// parcours du fichier "-collections.csv"
|
- |
|
148 |
while($ligne = fgetcsv($pointeurCollections, 0, $separateur)) {
|
- |
|
149 |
//var_dump($ligne);
|
- |
|
150 |
$nomStructure = $ligne[$colonnesParNom['cc_ce_structure']];
|
- |
|
151 |
if (empty($nomStructure) || is_numeric($nomStructure)) {
|
- |
|
152 |
echo "- omission de la structure pour cause de nom chelou [$nomStructure]\n";
|
- |
|
153 |
continue;
|
104 |
// vérifier le nom des colonnes
|
154 |
}
|
- |
|
155 |
// tester l'existence de la structure
|
105 |
// tester l'existence de la structure
|
156 |
$idStructure = $this->verifierExistenceStructureParNom($nomStructure);
|
106 |
// si oui récupérer l'id
|
157 |
// si oui récupérer l'id
|
- |
|
158 |
//sinon créer la structure et récupérer son id
|
- |
|
159 |
if ($idStructure === false) {
|
- |
|
160 |
$idStructure = $this->creerStructure($nomStructure);
|
107 |
//sinon créer la structure et récupérer son id
|
161 |
}
|
108 |
// remplacer le nom de la structure par son id
|
162 |
// remplacer le nom de la structure par son id
|
- |
|
163 |
// créer les collections et récupérer leur id
|
- |
|
164 |
// @TODO vérifier qu'elles existent pour ne pas insérer de doublons en relançant le script !!
|
- |
|
165 |
$idCollection = $this->creerCollection($idStructure, $ligne, $colonnesParNom);
|
- |
|
166 |
$idCollectionsParIdTemp[$ligne[$colonnesParNom['id']]] = $idCollection;
|
- |
|
167 |
}
|
109 |
// créer les collections et récupérer leur id
|
168 |
|
- |
|
169 |
//ouvrir le fichier collection botanique
|
- |
|
170 |
$pointeurCollectionsBota = fopen($fichierCollectionsBota, "r");
|
- |
|
171 |
// Chargement de la première colonne (qui contient les noms de colonnes à importer)
|
- |
|
172 |
$colonnesBota = fgetcsv($pointeurCollectionsBota, 0, $separateur);
|
- |
|
173 |
$colonnesBotaParNom = array_flip($colonnesBota);
|
- |
|
174 |
//var_dump($colonnesBota);
|
- |
|
175 |
//var_dump($colonnesBotaParNom);
|
110 |
//ouvrir le fichier collection botanique
|
176 |
|
- |
|
177 |
// vérifier les colonnes
|
- |
|
178 |
// @TODO on verra plus tard
|
- |
|
179 |
|
- |
|
180 |
// parcours du fichier "-collections-bota.csv"
|
111 |
// vérifier les colonnes
|
181 |
while($ligne = fgetcsv($pointeurCollectionsBota, 0, $separateur)) {
|
- |
|
182 |
// remplacer les noms des collections par leur id (créé précédemment)
|
112 |
// remplacer les noms des collections par leur id (créé précédemment)
|
183 |
$ligne[$colonnesBotaParNom['ccb_id_collection']] = $idCollectionsParIdTemp[$ligne[$colonnesBotaParNom['ccb_id_collection']]];
|
- |
|
184 |
// créer/importer
|
- |
|
185 |
// @TODO vérifier qu'elles existent pour ne pas insérer de doublons en relançant le script !!
|
- |
|
186 |
$this->creerCollectionBota($ligne, $colonnesBotaParNom);
|
Line 113... |
Line 187... |
113 |
// créer/importer
|
187 |
}
|
Line -... |
Line 188... |
- |
|
188 |
|
- |
|
189 |
}
|
- |
|
190 |
|
- |
|
191 |
/**
|
- |
|
192 |
* Si une structure ayant pour nom $nomStructure existe, retourne son
|
- |
|
193 |
* identifiant numérique, sinon retourne false
|
- |
|
194 |
*/
|
- |
|
195 |
protected function verifierExistenceStructureParNom($nomStructure) {
|
- |
|
196 |
$idStructure = false;
|
- |
|
197 |
$nsp = $this->bdd->proteger($nomStructure);
|
- |
|
198 |
$requete = "SELECT cs_id_structure FROM " . $this->table_structure
|
- |
|
199 |
. " WHERE cs_nom = $nsp";
|
- |
|
200 |
|
- |
|
201 |
$resultat = $this->bdd->recupererTous($requete);
|
- |
|
202 |
// var_dump($resultat);
|
- |
|
203 |
if (count($resultat) > 0) {
|
- |
|
204 |
$idStructure = $resultat[0]['cs_id_structure'];
|
- |
|
205 |
}
|
- |
|
206 |
return $idStructure;
|
- |
|
207 |
}
|
- |
|
208 |
|
- |
|
209 |
/**
|
- |
|
210 |
* Crée une structure portant le nom $nomStructure, sans rien fournir d'autre, et
|
- |
|
211 |
* retourne l'identifiant numérique du novueau tuple
|
- |
|
212 |
*/
|
- |
|
213 |
protected function creerStructure($nomStructure) {
|
- |
|
214 |
$nsp = $this->bdd->proteger($nomStructure);
|
- |
|
215 |
$requete = "INSERT INTO " . $this->table_structure . " (cs_nom)"
|
- |
|
216 |
. " VALUES ($nsp)";
|
- |
|
217 |
//echo "REQ INS: $requete\n";
|
- |
|
218 |
$resultat = $this->bdd->executer($requete);
|
- |
|
219 |
$idStructure = $this->bdd->recupererIdDernierAjout();
|
- |
|
220 |
|
- |
|
221 |
return $idStructure;
|
- |
|
222 |
}
|
- |
|
223 |
|
- |
|
224 |
/**
|
- |
|
225 |
* Crée une collection en la rattachant à la structure d'id $idStrucutre; la remplit
|
- |
|
226 |
* avec les données issues de $ligne en se servant de $colonnesParNom pour accéder
|
- |
|
227 |
* aux valeurs par clés textuelles; retourne l'identifiant numérique du novueau tuple
|
- |
|
228 |
*/
|
- |
|
229 |
protected function creerCollection($idStructure, $ligne, $colonnesParNom) {
|
- |
|
230 |
//echo "Insertion ! : "; var_dump($ligne); echo "<br/>";
|
- |
|
231 |
$nom = $this->bdd->proteger($ligne[$colonnesParNom['cc_nom']]);
|
- |
|
232 |
$desc = $this->bdd->proteger($ligne[$colonnesParNom['cc_description']]);
|
- |
|
233 |
$pcd = $this->bdd->proteger($ligne[$colonnesParNom['cc_periode_constitution_debut']]);
|
- |
|
234 |
$pcf = $this->bdd->proteger($ligne[$colonnesParNom['cc_periode_constitution_fin']]);
|
- |
|
235 |
$tcl = $this->bdd->proteger($ligne[$colonnesParNom['cc_truk_couverture_lieu']]);
|
- |
|
236 |
$cst = $this->bdd->proteger($ligne[$colonnesParNom['cc_ce_specimen_type']]);
|
- |
|
237 |
|
- |
|
238 |
$requete = "INSERT INTO " . $this->table_collection
|
- |
|
239 |
. " (cc_ce_structure, cc_nom, cc_description, cc_periode_constitution_debut, cc_periode_constitution_fin, cc_truk_couverture_lieu, cc_ce_specimen_type)"
|
- |
|
240 |
. " VALUES ($idStructure, $nom, $desc, $pcd, $pcf, $tcl, $cst)";
|
- |
|
241 |
//echo "REQ INS: $requete\n";
|
- |
|
242 |
$resultat = $this->bdd->executer($requete);
|
- |
|
243 |
$idCollection = $this->bdd->recupererIdDernierAjout();
|
- |
|
244 |
|
- |
|
245 |
return $idCollection;
|
- |
|
246 |
}
|
- |
|
247 |
|
- |
|
248 |
/**
|
- |
|
249 |
* Crée une collection botanique; la remplit avec les données issues de $ligne en se
|
- |
|
250 |
* servant de $colonnesParNom pour accéder aux valeurs par clés textuelles
|
- |
|
251 |
*/
|
- |
|
252 |
protected function creerCollectionBota($ligne, $colonnesBotaParNom) {
|
- |
|
253 |
//echo "Insertion ! : "; var_dump($ligne); echo "<br/>";
|
- |
|
254 |
$id = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_id_collection']]);
|
- |
|
255 |
$ceg = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_ce_etat_general']]);
|
- |
|
256 |
$ne = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_nbre_echantillon']]);
|
- |
|
257 |
$spec = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_specialite']]);
|
- |
|
258 |
$ac = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_annotation_classement']]);
|
- |
|
259 |
$ct = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_ce_traitement']]);
|
- |
|
260 |
$ci = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_ce_inventaire']]);
|
- |
|
261 |
$ii = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_inventaire_info']]);
|
- |
|
262 |
$aur = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_autres_unite_rangement']]);
|
- |
|
263 |
$tcpt = $this->bdd->proteger($ligne[$colonnesBotaParNom['ccb_truk_conservation_papier_type']]);
|
- |
|
264 |
|
- |
|
265 |
// @TODO comment gérer la colonne "Nombre de parts" ? Faut la mettre dans quoi ?
|
- |
|
266 |
$requete = "INSERT INTO " . $this->table_collection_bota
|
- |
|
267 |
. " (ccb_id_collection, ccb_ce_etat_general, ccb_nbre_echantillon, ccb_specialite, ccb_annotation_classement, ccb_ce_traitement, ccb_ce_inventaire,"
|
- |
|
268 |
. " ccb_inventaire_info, ccb_autres_unites_rangement, ccb_truk_conservation_papier_type)"
|
- |
|
269 |
. " VALUES ($id, $ceg, $ne, $spec, $ac, $ct, $ci, $ii, $aur, $tcpt)";
|
- |
|
270 |
//echo "REQ INS: $requete\n";
|
114 |
|
271 |
$resultat = $this->bdd->executer($requete);
|
Line 115... |
Line 272... |
115 |
}
|
272 |
}
|
116 |
|
273 |
|
117 |
private function chargerPubli($fichier) {
|
274 |
private function chargerPubli($fichier) {
|