Rev 691 | 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 nvps* -a chargerTous* Options :* -t : Permet de tester le script sur un jeux réduit de données (indiquer le nombre de lignes).*/class Nvps 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('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);}}?>