Subversion Repositories eFlore/Applications.coel

Rev

Rev 1928 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1928 Rev 1929
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) {