2,13 → 2,18 |
|
class MigrationObs extends Cel { |
|
const truncate = true; //Doit on vider les tables de destination ? |
const dry_run = false; |
const PATTERN_LAT = '/^[+-]?(?:[1-9][0-9]|[0-9])(?:[.][0-9]+|)$/'; |
const PATTERN_LNG = '/^[+-]?(?:1[0-8][0-9]|[1-9][0-9]|[0-9])(?:[.][0-9]+|)$/'; |
|
public static $bdd_cel_migration; |
public static $bdd_utilisateurs; |
private $communesOubliees = array(); |
private $tableau_utilisateurs = array(); |
private $tableau_mots_cles = array(); |
private $tableau_zones_geo = array(); |
|
const truncate = true; //Doit on vider les tables de destination ? |
|
const dry_run = false; |
|
/** Tableau associatif permettant de stocker l'avancement dans une boucle. |
* La clé est un md5 du message à afficher au démarrage de la boucle. |
* @var array |
15,11 → 20,6 |
*/ |
private static $avancement = array(); |
|
private $communesOubliees = array(); |
private $tableau_utilisateurs = array(); |
private $tableau_mots_cles = array(); |
private $tableau_zones_geo = array(); |
|
private $tableau_nouveau_ancien = array( |
'id_observation' => 'id', |
'ordre' => 'ordre', |
39,8 → 39,8 |
'lieudit' => 'lieudit', |
'station' => 'station', |
'milieu' => 'milieu', |
'latitude' => 'coord_x', |
'longitude' => 'coord_y', |
'latitude' => 'traiterLat', |
'longitude' => 'traiterLng', |
'geodatum' => 'traiterGeodatum', |
'date_observation' => 'date_observation', |
'mots_cles_texte' => 'traiterMotsClesTexte', |
104,8 → 104,7 |
echo "-------------------------------------------------------------------\n\n"; |
echo " ETAPE 0. Vider les tables ... \n\n"; |
echo "-------------------------------------------------------------------\n\n"; |
$nouvellesTables = array('`cel_images`', '`cel_images_mots_cles`', '`cel_mots_cles_images`', '`cel_mots_cles_obs`;', |
'`cel_obs`', '`cel_obs_images`', '`cel_obs_mots_cles`', '`cel_utilisateurs`', '`cel_utilisateurs`', '`cel_zones_geo`'); |
$nouvellesTables = array('cel_obs', 'cel_utilisateurs_infos', 'cel_zones_geo'); |
foreach ($nouvellesTables as $nomTable) { |
echo 'Vider la table '.$nomTable.'...'; |
$requeteTruncate = 'TRUNCATE TABLE '.self::$bdd_cel_migration.'.'.$nomTable; |
154,8 → 153,8 |
echo "\n-------------------------------------------------------------------\n"; |
echo "--SELECTION DES UTILISATEURS---------------------------------------\n\n"; |
|
$requete = 'SELECT U_ID as id, U_MAIL as mail, U_NAME as nom, U_SURNAME as prenom, U_PASSWD as pass '. |
'FROM '.self::$bdd_utilisateurs.'.annuaire_tela '; |
$requete = 'SELECT DISTINCT u_id AS id, u_mail AS mail, u_name AS nom, u_surname AS prenom, u_passwd AS pass '. |
'FROM cel_inventory INNER JOIN '.self::$bdd_utilisateurs.'.annuaire_tela ON (u_mail = identifiant) '; |
$tableau_utilisateurs = $this->executerRequete($requete); |
|
foreach( $tableau_utilisateurs as &$utilisateur) { |
214,39 → 213,22 |
} |
|
private function migrerUtilisateurs() { |
$pas = 1000; |
$nbTotal = 0; |
$tabUtilisateurs = $this->tableau_utilisateurs; |
while (!empty($tabUtilisateurs)) { |
$requete = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_utilisateurs '. |
'(id_utilisateur, prenom, nom, courriel, mot_de_passe) '. |
'VALUES '; |
$requete = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_utilisateurs_infos '. |
'(id_utilisateur) '. |
'VALUES '; |
|
$sous_requete = array(); |
$i = 0; |
foreach ($tabUtilisateurs as $id => &$utilisateur) { |
$i++; |
if ($i == $pas) { |
break; |
} |
$prenom = self::formaterMotPremiereLettreChaqueMotEnMajuscule($utilisateur['prenom']); |
$nom = self::formaterMotEnMajuscule($utilisateur['nom']); |
$sous_requete[] = '('.$this->proteger($utilisateur['id']).','. |
$this->proteger($prenom).','. |
$this->proteger($nom).','. |
$this->proteger($utilisateur['mail']).','. |
$this->proteger($utilisateur['pass']).')'; |
unset($tabUtilisateurs[$id]); |
} |
$requete = $requete.implode(',', $sous_requete); |
$migration_utilisateurs = $this->executerRequeteSimple($requete); |
$sous_requete = array(); |
foreach ($this->tableau_utilisateurs as $id => &$utilisateur) { |
$sous_requete[] = '('.$this->proteger($utilisateur['id']).')'; |
} |
$requete .= implode(',', $sous_requete); |
|
if ($migration_utilisateurs) { |
$nbTotal ++; |
$this->afficherAvancement('Migration utilisateurs (par '.$pas.')', $nbTotal); |
} else { |
exit('Erreur lors de la migration des utilisateurs '."\n"); |
} |
$migration_utilisateurs = $this->executerRequeteSimple($requete); |
|
if ($migration_utilisateurs) { |
echo "Migration utilisateurs : ".count($sous_requete); |
} else { |
exit('Erreur lors de la migration des utilisateurs '."\n"); |
} |
echo "\n---------------------------------------------------------------- OK\n\n"; |
|
355,8 → 337,8 |
foreach($observations as $observation) { |
$nouvelle_observation = $this->traiterLigneObservation($observation); |
|
$nouvelle_observation = array_map(array($this,'protegerSiNonNull'),$nouvelle_observation); |
$requete_insertion_observations .= '('.join(',',array_values($nouvelle_observation)).'),'; |
$nouvelle_observation = array_map(array($this, 'protegerSiNonNull'), $nouvelle_observation); |
$requete_insertion_observations .= '('.join(',', array_values($nouvelle_observation)).'),'; |
} |
|
$requete_insertion_observations = rtrim($requete_insertion_observations, ','); |
428,6 → 410,38 |
return $retour; |
} |
|
private function traiterLat(&$observation) { |
if ($this->etreNull($observation['coord_x'])) { |
$observation['coord_x'] = 'NULL'; |
} else if (preg_match(self::PATTERN_LAT, $observation['coord_x']) == false) { |
$latNote = 'Latitude éronnée : '.$observation['coord_x']; |
if ($this->etreNull($observation['commentaire'])) { |
$observation['commentaire'] = $latNote; |
} else { |
$observation['commentaire'] .= "\n".$latNote; |
} |
$observation['coord_x'] = 'NULL'; |
} |
$retour = $observation['coord_x']; |
return $retour; |
} |
|
private function traiterLng(&$observation) { |
if ($this->etreNull($observation['coord_y'])) { |
$observation['coord_y'] = 'NULL'; |
} else if (preg_match(self::PATTERN_LNG, $observation['coord_y']) == false) { |
$lngNote = 'Longitude éronnée : '.$observation['coord_y']; |
if ($this->etreNull($observation['commentaire'])) { |
$observation['commentaire'] = $lngNote; |
} else { |
$observation['commentaire'] .= "\n".$lngNote; |
} |
$observation['coord_y'] = 'NULL'; |
} |
$retour = $observation['coord_y']; |
return $retour; |
} |
|
private function traiterGeodatum($observation) { |
$retour = 'NULL'; |
if ($observation['coord_x'] != 'NULL' && $observation['coord_y'] != 'NULL') { |