Rev 2001 | Blame | Last modification | View Log | RSS feed
<?php// Encodage : UTF-8// +-------------------------------------------------------------------------------------------------------------------+/*** Traitement des observations sauvages pour les migrer vers des champs étendus** Description : classe permettant d'affecter des champs étendus aux observations sauvages* Utilisation : php script.php migrationsauvages -a migrerObservationsSauvages** @category PHP 5.3* @package scripts//Auteur original :* @author Aurélien PERONNET <aurelien@tela-botanica.org>* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2* @version $Id$*/// +-------------------------------------------------------------------------------------------------------------------+class Migrationsauvages extends Script {// +-------------------------------------------------------------------------------------------------------------------+public function executer() {include_once dirname(__FILE__).'/bibliotheque/Dao.php';$this->dao = new Dao();// Récupération de paramétres// Lancement de l'action demandée$cmd = $this->getParametre('a');$this->mode_verbeux = $this->getParametre('v');$this->migrerObservationsSauvages();}private function migrerObservationsSauvages() {$nb_obs = $this->dao->obtenirNbObservationsSauvages();$this->traiterObservationsSauvages($nb_obs);}private function traiterObservationsSauvages($nb_obs) {$debut = microtime(true);$nb_obs_modifiees = 0;$nb_obs_ignorees = 0;$total = $nb_obs;if($this->mode_verbeux) {echo "-------------------------------------------------------------------\n";echo " Début de la migration des observations sauvages vers les champs étendus \n";echo " ".$total." observations concernées \n";echo "-------------------------------------------------------------------\n";}$champs_etendus_a_inserer = array();$nb_champs_total = 0;$nb_champs_etendus_a_inserer = 0;$pas_liste_obs = 5000;echo " Traitement des observations par paquet de ".$pas_liste_obs." (5 champs étendus ajoutés par observation traitée) \n";for($i = 0; $i <= $total; $i += $pas_liste_obs) {$liste_observations = $this->dao->obtenirObservationsSauvages($i, $pas_liste_obs);$champs_etendus_a_inserer = array();$nb_champs_etendus_a_inserer = 0;foreach($liste_observations as $observation) {// test si obs candidate est ok, i.e. si elle contient bien un champ station formate comme ceci// coordonnees_debut_de_rue;coordonnees_fin_de_rue;cote_de_la_rueif ($this->doitMigrerObservation($observation)) {$champs_etendus_a_inserer[] = $this->convertirChampsObsSauvagesEnChampsEtendus($observation);$nb_obs_modifiees++;$nb_champs_etendus_a_inserer += 5;$nb_champs_total += 5;} else {$nb_obs_ignorees++;}// insertion par paquets de 100 champs ou bien à la fin du parcours de la liste s'il y a moins de// 20 observations à traiter (20 obs * 5 champs = 100 champs)if($nb_champs_etendus_a_inserer >= 100) {$this->dao->ajouterChampsEtendusParLots($champs_etendus_a_inserer);$champs_etendus_a_inserer = array();$nb_champs_etendus_a_inserer = 0;}}echo " ".$nb_champs_total." champs étendus insérés \n";}// insertion des champs restants s'il en reste moins de 100 à la finif($nb_champs_etendus_a_inserer > 0) {$this->dao->ajouterChampsEtendusParLots($champs_etendus_a_inserer);$nb_champs_total += $nb_champs_etendus_a_inserer;echo " ".$nb_champs_total." champs étendus insérés \n";}$fin = microtime(true);if($this->mode_verbeux) {echo "\n";echo "-------------------------------------------------------------------\n";echo " Fin de la migration des observations sauvages, \n";echo " ".($fin - $debut)." secondes écoulées \n";echo " ".$nb_champs_total." champs étendus créées \n";echo " ".$nb_obs_modifiees." observations modifiées \n";echo " ".$nb_obs_ignorees." observations ignorées \n";echo "-------------------------------------------------------------------\n";echo "\n";}}private function doitMigrerObservation($observation) {return (!empty($observation['station']) && substr_count($observation['station'],";") == 2);}private function convertirChampsObsSauvagesEnChampsEtendus($observation) {list($coords_debut_rue,$coords_fin_rue,$cote_rue) = explode(';', $observation['station']);$coords_debut_rue = explode(',', $coords_debut_rue);$coords_fin_rue = explode(',', $coords_fin_rue);$lieu_dit = (trim($observation['lieudit']) == 'non renseigné(e)') ? '' : $observation['lieudit'];$id = $observation['id_observation'];$champs_etendus = array(array('id_observation' => $id,'cle' => 'latitudeDebutRue','label' => 'Latitude du début de la rue','valeur' => $coords_debut_rue[0]),array('id_observation' => $id,'cle' => 'longitudeDebutRue','label' => 'Longitude du début de la rue','valeur' => $coords_debut_rue[1]),array('id_observation' => $id,'cle' => 'latitudeFinRue','label' => 'Latitude de fin de la rue','valeur' => $coords_debut_rue[0]),array('id_observation' => $id,'cle' => 'longitudeFinRue','label' => 'Longitude de fin de la rue','valeur' => $coords_debut_rue[1]),array('id_observation' => $id,'cle' => 'adresse','label' => 'Adresse','valeur' => $lieu_dit));return $champs_etendus;}}?>