array(false, false, 'Permet de tester le script sur un jeux réduit de données (indiquer le nombre de lignes).')); public function executer() { // Lancement de l'action demandée try { $this->initialiserProjet('nvps'); $cmd = $this->getParametre('a'); switch ($cmd) { case 'chargerTous' : $this->chargerStructureSql(); $this->chargerNvps(); break; case 'chargerStructure' : $this->chargerStructureSql(); break; case 'chargerNvps' : $this->chargerNvps(); break; case 'supprimerTous' : $this->supprimerTous(); break; default : throw new Exception("Erreur : la commande '$cmd' n'existe pas!"); } } catch (Exception $e) { $this->traiterErreur($e->getMessage()); } } /** * Charge le fichier en créant un id pour chaque nom vernaculaire. */ private function chargerNvps() { //Debug::printr(Config::get('fichiers')); $fichierOuvert = $this->ouvrirFichier(Config::get('chemins.nvps')); $donnees = $this->analyserFichier($fichierOuvert); fclose($fichierOuvert); foreach ($donnees as $donnee) { $table = Config::get('tables.nvps'); $fields = implode(', ', array_keys($donnee)); $values = implode(', ', $donnee); $requete = "INSERT INTO $table ($fields) VALUES ($values) "; $this->getBdd()->requeter($requete); $this->afficherAvancement("Insertion des noms vernaculaires dans la base de données"); if ($this->stopperLaBoucle($this->getParametre('t'))) { break; } } echo "\n"; } private function ouvrirFichier($chemin) { $fichierOuvert = false; if ($chemin) { if (file_exists($chemin) === true) { $fichierOuvert = fopen($chemin, 'r'); if ($fichierOuvert == false) { throw new Exception("Le fichier $chemin n'a pas pu être ouvert."); } } else { throw new Exception("Le fichier $chemin est introuvable."); } } else { throw new Exception("Aucun chemin de fichier n'a été fourni."); } return $fichierOuvert; } private function analyserFichier($fichierOuvert) { $entetesCsv = explode("\t", trim(fgets($fichierOuvert))); $donnees = array(); while ($ligneCsv = fgets($fichierOuvert)) { $champs = explode("\t", trim($ligneCsv)); if (count($champs) > 0) { $infos = array(); foreach ($entetesCsv as $ordre => $champNom) { $valeur = isset($champs[$ordre]) ? $champs[$ordre] : ''; $infos[$champNom] = $valeur; } $infos['id'] = $this->getIndexNomVernaculaire($infos['nom_vernaculaire']); $donnees[] = $this->getBdd()->protegerTableau($infos); } $this->afficherAvancement("Analyse du fichier des noms vernaculaires"); if ($this->stopperLaBoucle()) { break; } } echo "\n"; return $donnees; } private function getIndexNomVernaculaire($nomVernaculaire) { $indexCourrant = null; if (array_key_exists($nomVernaculaire, $this->nomsIndex) == false) { $this->nomsIndex[$nomVernaculaire] = $this->numeroIndex++; } $indexCourrant = $this->nomsIndex[$nomVernaculaire]; return $indexCourrant; } private function supprimerTous() { $requete = "DROP TABLE IF EXISTS nvps_meta, nvps_v2007, nvps_v2012"; $this->getBdd()->requeter($requete); } } ?>