Rev 349 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php//declare(encoding='UTF-8');/*** Exemple de lancement du script : :* /opt/lampp/bin/php cli.php bdtfx -a chargerTous** @category php 5.2* @package eFlore/Scripts* @author Jennifer DHÉ <jennifer@tela-botanica.org>* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @copyright Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL* @version $Id$*/class Fournier extends EfloreScript {private $table = null;private $tableMeta = null;private $pasInsertion = 1000;private $departInsertion = 0;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() {try {$this->initialiserProjet('fournier');$this->initialiserTables();// Lancement de l'action demandée$cmd = $this->getParametre('a');switch ($cmd) {case 'chargerTous' :$this->chargerStructureSql();$this->chargerFournier();$this->genererNomSciHtml();break;case 'chargerStructureSql' :$this->chargerStructureSql();break;case 'chargerFournier' :$this->chargerFournier();break;case 'genererNomSciHtml' :$this->genererNomSciHtml();break;case 'supprimerTous' :$this->supprimerTous();break;default :throw new Exception("Erreur : la commande '$cmd' n'existe pas!");}} catch (Exception $e) {$this->traiterErreur($e->getMessage());}}private function chargerFournier() {$chemin = Config::get('chemins.fournier');$table = Config::get('tables.fournier');$requete = "LOAD DATA INFILE '$chemin' "."REPLACE INTO TABLE $table ".'CHARACTER SET utf8 '.'FIELDS '." TERMINATED BY ',' "." ENCLOSED BY '\"' "." ESCAPED BY '\\\' ".'IGNORE 1 LINES';$this->getBdd()->requeter($requete);}private function genererNomSciHtml() {$this->preparerTable();$generateur = new GenerateurNomSciHtml();$nbreTotal = $this->recupererNbTotalTuples();while ($this->departInsertion < $nbreTotal) {$resultat = $this->recupererTuples();$nomsSciEnHtml = $generateur->generer($resultat);$this->lancerRequeteModification($nomsSciEnHtml);$this->departInsertion += $this->pasInsertion;$this->afficherAvancement("Insertion des noms scientifique au format HTML dans la base par paquet de {$this->pasInsertion} en cours");if ($this->stopperLaBoucle($this->getParametre('t'))) break;}echo "\n";}private function initialiserTables() {$this->table = Config::get('tables.fournier');$this->tableMeta = Config::get('tables.fournierMeta');}private function preparerTable() {$requete = "SHOW COLUMNS FROM {$this->table} LIKE 'nom_sci_html' ";$resultat = $this->getBdd()->recuperer($requete);if ($resultat === false) {$requete = "ALTER TABLE {$this->table} ".'ADD nom_sci_html VARCHAR( 500 ) '.'CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ';$this->getBdd()->requeter($requete);}}private function recupererNbTotalTuples(){$requete = "SELECT count(*) AS nb FROM {$this->table} ";$resultat = $this->getBdd()->recuperer($requete);return $resultat['nb'];}private function recupererTuples() {$requete = 'SELECT num_nom, rang, nom_supra_generique, genre, epithete_infra_generique, '.' epithete_sp, type_epithete, epithete_infra_sp, cultivar_groupe, '.' nom_commercial, cultivar '."FROM {$this->table} "."LIMIT {$this->departInsertion},{$this->pasInsertion} ";$resultat = $this->getBdd()->recupererTous($requete);return $resultat;}private function lancerRequeteModification($nomsSciHtm) {foreach ($nomsSciHtm as $id => $html) {$html = $this->getBdd()->proteger($html);$requete = "UPDATE {$this->table} "."SET nom_sci_html = $html "."WHERE num_nom = $id ";$resultat = $this->getBdd()->requeter($requete);if ($resultat === false) {throw new Exception("Erreur d'insertion pour le tuple $id");}}}private function supprimerTous() {$requete = "DROP TABLE IF EXISTS {$this->tableMeta}, {$this->table}";$this->getBdd()->requeter($requete);}}?>