Rev 79 | Rev 130 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/** Exemple lancement:* /opt/lampp/bin/php -d memory_limit=3500M ~/web/eflore-projets/scripts/cli.php nvjfl* -a chargerTous* Options :* -t : Permet de tester le script sur un jeux réduit de données (indiquer le nombre de lignes).*/class Nvjfl extends EfloreScript {private $nomsIndex = array();private $numeroIndex = 1;protected $parametres_autorises = array('-t' => 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éetry {$this->initialiserProjet('nvjfl');$cmd = $this->getParametre('a');switch ($cmd) {case 'chargerTous' :$this->chargerStructureSql();$this->chargerNvjfl();$this->chargerBiblio();$this->chargerBiblioLien();$this->chargerOntologies();break;case 'chargerStructure' :$this->chargerStructureSql();break;case 'chargerNvjfl' :$this->chargerNvjfl();break;case 'chargerBiblio' :$this->chargerBiblio();break;case 'chargerBiblioLien' :$this->chargerBiblioLien();break;case 'chargerOntologies' :$this->chargerOntologies();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 chargerNvjfl() {//Debug::printr(Config::get('fichiers'));$fichierOuvert = $this->ouvrirFichier(Config::get('chemins.nvjfl'));$donnees = $this->analyserFichier($fichierOuvert);fclose($fichierOuvert);foreach ($donnees as $donnee) {$requete = 'INSERT INTO '.Config::get('tables.nvjfl').' VALUES ('.implode(', ', $donnee).')';$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 analyserFichier($fichierOuvert) {$donnees = array();$entetesCsv = fgets($fichierOuvert);while ($ligneCsv = fgets($fichierOuvert)) {$champs = explode("\t", trim($ligneCsv));if (count($champs) > 0) {if (isset($champs[2])) {$nomVernaculaire = $champs[2];$indexCourrant = $this->getIndexNomVernaculaire($nomVernaculaire);$champs = array_merge(array($indexCourrant), $champs);$donnees[] = $this->protegerValeursDesChamps($champs);}}$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 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 protegerValeursDesChamps($champs) {$champsProteges = array();for ($i = 0; $i < 9; $i++) {$valeur = isset($champs[$i]) ? $champs[$i] : '';$champsProteges[] = $this->getBdd()->proteger($valeur);}return $champsProteges;}private function chargerBiblio() {$cheminsNvjflBiblio = Config::get('chemins.nvjflBiblio');$tableNvjflBiblio = Config::get('tables.nvjflBiblio');$requete = "LOAD DATA INFILE '$cheminsNvjflBiblio' "."REPLACE INTO TABLE $tableNvjflBiblio ".'CHARACTER SET utf8 '.'FIELDS '." TERMINATED BY '\t' "." ENCLOSED BY '' "." ESCAPED BY '\\\' ".'IGNORE 1 LINES';$this->getBdd()->requeter($requete);}private function chargerBiblioLien() {$cheminNvjflLienBiblio = Config::get('chemins.nvjflLienBiblio');$tableNvjflLienBiblio = Config::get('tables.nvjflLienBiblio');$requete = "LOAD DATA INFILE '$cheminNvjflLienBiblio' "."REPLACE INTO TABLE $tableNvjflLienBiblio ".'CHARACTER SET utf8 '.'FIELDS '." TERMINATED BY '\t' "." ENCLOSED BY '' "." ESCAPED BY '\\\' ".'IGNORE 1 LINES';$this->getBdd()->requeter($requete);}private function chargerOntologies() {$cheminOntologies = Config::get('chemins.ontologies');$tableOntologies = Config::get('tables.ontologies');$requete = "LOAD DATA INFILE '$cheminOntologies' "."REPLACE INTO TABLE $tableOntologies ".'CHARACTER SET utf8 '.'FIELDS '." TERMINATED BY '\t' "." ENCLOSED BY '' "." ESCAPED BY '\\\' ".'IGNORE 1 LINES';$this->getBdd()->requeter($requete);}}?>