Subversion Repositories eFlore/Applications.cel

Rev

Rev 1186 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1186 Rev 1189
Line 1... Line 1...
1
<?php
1
<?php
Line 2... Line 2...
2
 
2
 
Line 3... Line -...
3
class MigrationObs extends Cel {
-
 
4
 
-
 
5
	public static $bdd_cel_migration;
-
 
6
	public static $bdd_utilisateurs;
3
class MigrationObs extends Cel {
7
 
-
 
8
	const truncate = true; //Doit on vider les tables de destination ?
4
 
-
 
5
	const truncate = true; //Doit on vider les tables de destination ?
-
 
6
	const dry_run = false;
-
 
7
	const PATTERN_LAT = '/^[+-]?(?:[1-9][0-9]|[0-9])(?:[.][0-9]+|)$/';
-
 
8
	const PATTERN_LNG = '/^[+-]?(?:1[0-8][0-9]|[1-9][0-9]|[0-9])(?:[.][0-9]+|)$/';
-
 
9
 
-
 
10
	public static $bdd_cel_migration;
-
 
11
	public static $bdd_utilisateurs;
-
 
12
	private $communesOubliees = array();
-
 
13
	private $tableau_utilisateurs = array();
Line 9... Line 14...
9
 
14
	private $tableau_mots_cles = array();
10
	const dry_run = false;
15
	private $tableau_zones_geo = array();
11
 
16
 
12
	/** Tableau associatif permettant de stocker l'avancement dans une boucle.
17
	/** Tableau associatif permettant de stocker l'avancement dans une boucle.
13
	* La clé est un md5 du message à afficher au démarrage de la boucle.
18
	* La clé est un md5 du message à afficher au démarrage de la boucle.
Line 14... Line -...
14
	* @var array
-
 
15
	*/
-
 
16
	private static $avancement = array();
-
 
17
 
-
 
18
	private $communesOubliees = array();
-
 
19
	private $tableau_utilisateurs = array();
19
	* @var array
20
	private $tableau_mots_cles = array();
20
	*/
21
	private $tableau_zones_geo = array();
21
	private static $avancement = array();
22
 
22
 
23
	private $tableau_nouveau_ancien = array(
23
	private $tableau_nouveau_ancien = array(
Line 37... Line 37...
37
		'ce_zone_geo'			=> 'traiterIdentifiantZoneGeo',
37
		'ce_zone_geo'			=> 'traiterIdentifiantZoneGeo',
38
		'zone_geo'				=> 'location',
38
		'zone_geo'				=> 'location',
39
		'lieudit'				=> 'lieudit',
39
		'lieudit'				=> 'lieudit',
40
		'station'				=> 'station',
40
		'station'				=> 'station',
41
		'milieu'				=> 'milieu',
41
		'milieu'				=> 'milieu',
42
		'latitude'				=> 'coord_x',
42
		'latitude'				=> 'traiterLat',
43
		'longitude'				=> 'coord_y',
43
		'longitude'				=> 'traiterLng',
44
		'geodatum'				=> 'traiterGeodatum',
44
		'geodatum'				=> 'traiterGeodatum',
45
		'date_observation'		=> 'date_observation',
45
		'date_observation'		=> 'date_observation',
46
		'mots_cles_texte'		=> 'traiterMotsClesTexte',
46
		'mots_cles_texte'		=> 'traiterMotsClesTexte',
47
		'commentaire'			=> 'commentaire',
47
		'commentaire'			=> 'commentaire',
48
		'transmission'			=> 'transmission',
48
		'transmission'			=> 'transmission',
Line 102... Line 102...
102
		//1. TEMPORAIRE : vider les tables de destinations
102
		//1. TEMPORAIRE : vider les tables de destinations
103
		if (self::truncate) {
103
		if (self::truncate) {
104
			echo "-------------------------------------------------------------------\n\n";
104
			echo "-------------------------------------------------------------------\n\n";
105
			echo "  ETAPE 0. Vider les tables ... \n\n";
105
			echo "  ETAPE 0. Vider les tables ... \n\n";
106
			echo "-------------------------------------------------------------------\n\n";
106
			echo "-------------------------------------------------------------------\n\n";
107
			$nouvellesTables = array('`cel_images`', '`cel_images_mots_cles`', '`cel_mots_cles_images`', '`cel_mots_cles_obs`;',
107
			$nouvellesTables = array('cel_obs', 'cel_utilisateurs_infos', 'cel_zones_geo');
108
								'`cel_obs`', '`cel_obs_images`', '`cel_obs_mots_cles`', '`cel_utilisateurs`', '`cel_utilisateurs`', '`cel_zones_geo`');
-
 
109
			foreach ($nouvellesTables as $nomTable) {
108
			foreach ($nouvellesTables as $nomTable) {
110
				echo 'Vider la table '.$nomTable.'...';
109
				echo 'Vider la table '.$nomTable.'...';
111
				$requeteTruncate = 'TRUNCATE TABLE '.self::$bdd_cel_migration.'.'.$nomTable;
110
				$requeteTruncate = 'TRUNCATE TABLE '.self::$bdd_cel_migration.'.'.$nomTable;
112
				$resultatTruncate = $this->executerRequete($requeteTruncate);
111
				$resultatTruncate = $this->executerRequete($requeteTruncate);
113
				echo "ok \n";
112
				echo "ok \n";
Line 152... Line 151...
152
 
151
 
153
	private function getUtilisateurs() {
152
	private function getUtilisateurs() {
154
		echo "\n-------------------------------------------------------------------\n";
153
		echo "\n-------------------------------------------------------------------\n";
Line 155... Line 154...
155
		echo "--SELECTION DES UTILISATEURS---------------------------------------\n\n";
154
		echo "--SELECTION DES UTILISATEURS---------------------------------------\n\n";
156
 
155
 
157
		$requete = 'SELECT U_ID as id, U_MAIL as mail, U_NAME as nom, U_SURNAME as prenom, U_PASSWD as pass '.
156
		$requete = 'SELECT DISTINCT u_id AS id, u_mail AS mail, u_name AS nom, u_surname AS prenom, u_passwd AS pass '.
Line 158... Line 157...
158
			'FROM '.self::$bdd_utilisateurs.'.annuaire_tela ';
157
			'FROM cel_inventory INNER JOIN '.self::$bdd_utilisateurs.'.annuaire_tela ON (u_mail = identifiant) ';
159
		$tableau_utilisateurs = $this->executerRequete($requete);
158
		$tableau_utilisateurs = $this->executerRequete($requete);
160
 
159
 
Line 212... Line 211...
212
			echo $actuel++;
211
			echo $actuel++;
213
		}
212
		}
214
	}
213
	}
Line 215... Line 214...
215
 
214
 
216
	private function migrerUtilisateurs() {
-
 
217
		$pas = 1000;
-
 
218
		$nbTotal = 0;
-
 
219
		$tabUtilisateurs = $this->tableau_utilisateurs;
-
 
220
		while (!empty($tabUtilisateurs)) {
215
	private function migrerUtilisateurs() {
221
			$requete = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_utilisateurs '.
216
		$requete = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_utilisateurs_infos '.
222
						'(id_utilisateur, prenom, nom, courriel, mot_de_passe) '.
217
					'(id_utilisateur) '.
223
						'VALUES ';
-
 
224
 
-
 
225
			$sous_requete = array();
-
 
226
			$i = 0;
-
 
227
			foreach ($tabUtilisateurs as $id => &$utilisateur) {
-
 
228
				$i++;
-
 
229
				if ($i == $pas) {
-
 
230
					break;
-
 
231
				}
-
 
232
				$prenom = self::formaterMotPremiereLettreChaqueMotEnMajuscule($utilisateur['prenom']);
-
 
233
				$nom = self::formaterMotEnMajuscule($utilisateur['nom']);
-
 
234
				$sous_requete[] = '('.$this->proteger($utilisateur['id']).','.
-
 
235
					$this->proteger($prenom).','.
-
 
236
					$this->proteger($nom).','.
-
 
237
					$this->proteger($utilisateur['mail']).','.
-
 
238
					$this->proteger($utilisateur['pass']).')';
-
 
239
				unset($tabUtilisateurs[$id]);
-
 
240
			}
-
 
241
			$requete = $requete.implode(',', $sous_requete);
-
 
Line -... Line 218...
-
 
218
					'VALUES ';
-
 
219
 
-
 
220
		$sous_requete = array();
-
 
221
		foreach ($this->tableau_utilisateurs as $id => &$utilisateur) {
-
 
222
			$sous_requete[] = '('.$this->proteger($utilisateur['id']).')';
-
 
223
		}
-
 
224
		$requete .= implode(',', $sous_requete);
-
 
225
 
242
			$migration_utilisateurs = $this->executerRequeteSimple($requete);
226
		$migration_utilisateurs = $this->executerRequeteSimple($requete);
243
 
-
 
244
			if ($migration_utilisateurs) {
227
 
245
				$nbTotal ++;
228
		if ($migration_utilisateurs) {
246
				$this->afficherAvancement('Migration utilisateurs (par '.$pas.')', $nbTotal);
229
			echo "Migration utilisateurs : ".count($sous_requete);
247
			} else {
-
 
248
				exit('Erreur lors de la migration des utilisateurs '."\n");
230
		} else {
249
			}
231
			exit('Erreur lors de la migration des utilisateurs '."\n");
Line 250... Line 232...
250
		}
232
		}
Line 353... Line 335...
353
 
335
 
354
			if (count($observations) > 0) {
336
			if (count($observations) > 0) {
355
				foreach($observations as $observation) {
337
				foreach($observations as $observation) {
Line 356... Line 338...
356
					$nouvelle_observation = $this->traiterLigneObservation($observation);
338
					$nouvelle_observation = $this->traiterLigneObservation($observation);
357
 
339
 
358
					$nouvelle_observation = array_map(array($this,'protegerSiNonNull'),$nouvelle_observation);
340
					$nouvelle_observation = array_map(array($this, 'protegerSiNonNull'), $nouvelle_observation);
Line 359... Line 341...
359
					$requete_insertion_observations .= '('.join(',',array_values($nouvelle_observation)).'),';
341
					$requete_insertion_observations .= '('.join(',', array_values($nouvelle_observation)).'),';
Line 360... Line 342...
360
				}
342
				}
Line 426... Line 408...
426
			$retour = 'bdnff:4.02';
408
			$retour = 'bdnff:4.02';
427
		}
409
		}
428
		return $retour;
410
		return $retour;
429
	}
411
	}
Line -... Line 412...
-
 
412
 
-
 
413
	private function traiterLat(&$observation) {
-
 
414
		if ($this->etreNull($observation['coord_x'])) {
-
 
415
			$observation['coord_x'] = 'NULL';
-
 
416
		} else if (preg_match(self::PATTERN_LAT, $observation['coord_x']) == false) {
-
 
417
			$latNote = 'Latitude éronnée : '.$observation['coord_x'];
-
 
418
			if ($this->etreNull($observation['commentaire'])) {
-
 
419
				$observation['commentaire'] = $latNote;
-
 
420
			} else {
-
 
421
				$observation['commentaire'] .= "\n".$latNote;
-
 
422
			}
-
 
423
			$observation['coord_x'] = 'NULL';
-
 
424
		}
-
 
425
		$retour = $observation['coord_x'];
-
 
426
		return $retour;
-
 
427
	}
-
 
428
 
-
 
429
	private function traiterLng(&$observation) {
-
 
430
		if ($this->etreNull($observation['coord_y'])) {
-
 
431
			$observation['coord_y'] = 'NULL';
-
 
432
		} else if (preg_match(self::PATTERN_LNG, $observation['coord_y']) == false) {
-
 
433
			$lngNote = 'Longitude éronnée : '.$observation['coord_y'];
-
 
434
			if ($this->etreNull($observation['commentaire'])) {
-
 
435
				$observation['commentaire'] = $lngNote;
-
 
436
			} else {
-
 
437
				$observation['commentaire'] .= "\n".$lngNote;
-
 
438
			}
-
 
439
			$observation['coord_y'] = 'NULL';
-
 
440
		}
-
 
441
		$retour = $observation['coord_y'];
-
 
442
		return $retour;
-
 
443
	}
430
 
444
 
431
	private function traiterGeodatum($observation) {
445
	private function traiterGeodatum($observation) {
432
		$retour = 'NULL';
446
		$retour = 'NULL';
433
		if ($observation['coord_x'] != 'NULL' && $observation['coord_y'] != 'NULL') {
447
		if ($observation['coord_x'] != 'NULL' && $observation['coord_y'] != 'NULL') {
434
			$retour = 'WGS84';
448
			$retour = 'WGS84';