Subversion Repositories eFlore/Applications.cel

Rev

Rev 1189 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1189 Rev 1198
1
<?php
1
<?php
-
 
2
// declare(encoding='UTF-8');
-
 
3
/**
-
 
4
 * Script de migration des Observations de la version 1 de la base de données du CEL à la v2.
2
 
5
 *
-
 
6
 * @category	php 5.2
-
 
7
 * @package		Cel/Scripts
-
 
8
 * @author		Aurélien PERONNET <aurelien@tela-botanica.org>
-
 
9
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
-
 
10
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
-
 
11
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
-
 
12
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
-
 
13
 * @version	$Id$
-
 
14
 */
3
class MigrationObs extends Cel {
15
class MigrationObs extends Cel {
4
 
16
 
5
	const truncate = true; //Doit on vider les tables de destination ?
17
	const truncate = true; //Doit on vider les tables de destination ?
6
	const dry_run = false;
18
	const dry_run = false;
7
	const PATTERN_LAT = '/^[+-]?(?:[1-9][0-9]|[0-9])(?:[.][0-9]+|)$/';
19
	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]+|)$/';
20
	const PATTERN_LNG = '/^[+-]?(?:1[0-8][0-9]|[1-9][0-9]|[0-9])(?:[.][0-9]+|)$/';
9
 
21
 
10
	public static $bdd_cel_migration;
22
	public static $bdd_cel_migration;
11
	public static $bdd_utilisateurs;
23
	public static $bdd_utilisateurs;
12
	private $communesOubliees = array();
24
	private $communesOubliees = array();
13
	private $tableau_utilisateurs = array();
25
	private $tableau_utilisateurs = array();
14
	private $tableau_mots_cles = array();
26
	private $tableau_mots_cles = array();
15
	private $tableau_zones_geo = array();
27
	private $tableau_zones_geo = array();
16
 
28
 
17
	/** Tableau associatif permettant de stocker l'avancement dans une boucle.
29
	/** Tableau associatif permettant de stocker l'avancement dans une boucle.
18
	* La clé est un md5 du message à afficher au démarrage de la boucle.
30
	* La clé est un md5 du message à afficher au démarrage de la boucle.
19
	* @var array
31
	* @var array
20
	*/
32
	*/
21
	private static $avancement = array();
33
	private static $avancement = array();
22
 
34
 
23
	private $tableau_nouveau_ancien = array(
35
	private $tableau_nouveau_ancien = array(
24
		'id_observation' 		=> 'id',
36
		'id_observation' 		=> 'id',
25
		'ordre'					=> 'ordre',
37
		'ordre'					=> 'ordre',
26
		'ce_utilisateur'		=> 'traiterIdentifiantUtilisateur',
38
		'ce_utilisateur'		=> 'traiterIdentifiantUtilisateur',
27
		'prenom_utilisateur'	=> 'traiterPrenomUtilisateur',
39
		'prenom_utilisateur'	=> 'traiterPrenomUtilisateur',
28
		'nom_utilisateur'		=> 'traiterNomUtilisateur',
40
		'nom_utilisateur'		=> 'traiterNomUtilisateur',
29
		'courriel_utilisateur'  => 'identifiant',
41
		'courriel_utilisateur'  => 'identifiant',
30
		'nom_sel'				=> 'nom_sel',
42
		'nom_sel'				=> 'nom_sel',
31
		'nom_sel_nn'			=> 'num_nom_sel',
43
		'nom_sel_nn'			=> 'num_nom_sel',
32
		'nom_ret'				=> 'nom_ret',
44
		'nom_ret'				=> 'nom_ret',
33
		'nom_ret_nn'			=> 'num_nom_ret',
45
		'nom_ret_nn'			=> 'num_nom_ret',
34
		'nt'					=> 'num_taxon',
46
		'nt'					=> 'num_taxon',
35
		'famille'				=> 'famille',
47
		'famille'				=> 'famille',
36
		'nom_referentiel'		=> 'traiterReferentiel',
48
		'nom_referentiel'		=> 'traiterReferentiel',
37
		'ce_zone_geo'			=> 'traiterIdentifiantZoneGeo',
49
		'ce_zone_geo'			=> 'traiterIdentifiantZoneGeo',
38
		'zone_geo'				=> 'location',
50
		'zone_geo'				=> 'location',
39
		'lieudit'				=> 'lieudit',
51
		'lieudit'				=> 'lieudit',
40
		'station'				=> 'station',
52
		'station'				=> 'station',
41
		'milieu'				=> 'milieu',
53
		'milieu'				=> 'milieu',
42
		'latitude'				=> 'traiterLat',
54
		'latitude'				=> 'traiterLat',
43
		'longitude'				=> 'traiterLng',
55
		'longitude'				=> 'traiterLng',
44
		'geodatum'				=> 'traiterGeodatum',
56
		'geodatum'				=> 'traiterGeodatum',
45
		'date_observation'		=> 'date_observation',
57
		'date_observation'		=> 'date_observation',
46
		'mots_cles_texte'		=> 'traiterMotsClesTexte',
58
		'mots_cles_texte'		=> 'traiterMotsClesTexte',
47
		'commentaire'			=> 'commentaire',
59
		'commentaire'			=> 'commentaire',
48
		'transmission'			=> 'transmission',
60
		'transmission'			=> 'transmission',
49
		'date_creation'			=> 'date_creation',
61
		'date_creation'			=> 'date_creation',
50
		'date_modification'		=> 'date_modification',
62
		'date_modification'		=> 'date_modification',
51
		'date_transmission'		=> 'date_transmission'
63
		'date_transmission'		=> 'date_transmission'
52
		);
64
		);
53
 
65
 
54
	private $tableau_ancien_nouveau = array(
66
	private $tableau_ancien_nouveau = array(
55
		'id'					=> 'id_observation',
67
		'id'					=> 'id_observation',
56
		'identifiant'			=> '',
68
		'identifiant'			=> '',
57
		'prenom_utilisateur'	=> 'prenom_utilisateur',
69
		'prenom_utilisateur'	=> 'prenom_utilisateur',
58
		'nom_utilisateur'		=> 'nom_utilisateur',
70
		'nom_utilisateur'		=> 'nom_utilisateur',
59
		'ordre'					=> 'ordre',
71
		'ordre'					=> 'ordre',
60
		'nom_sel'				=> 'nom_sel',
72
		'nom_sel'				=> 'nom_sel',
61
		'num_nom_sel'			=> 'nom_sel_nn',
73
		'num_nom_sel'			=> 'nom_sel_nn',
62
		'nom_ret'				=> 'nom_ret',
74
		'nom_ret'				=> 'nom_ret',
63
		'num_nom_ret'			=> 'nom_ret_nn',
75
		'num_nom_ret'			=> 'nom_ret_nn',
64
		'num_taxon'				=> 'nt',
76
		'num_taxon'				=> 'nt',
65
		'famille'				=> 'famille',
77
		'famille'				=> 'famille',
66
		'location'				=> '',
78
		'location'				=> '',
67
		'id_location'			=> '',
79
		'id_location'			=> '',
68
		'date_observation'		=> 'date_observation',
80
		'date_observation'		=> 'date_observation',
69
		'lieu_dit'				=> 'lieudit',
81
		'lieu_dit'				=> 'lieudit',
70
		'station'				=> 'station',
82
		'station'				=> 'station',
71
		'milieu'				=> 'milieu',
83
		'milieu'				=> 'milieu',
72
		'commentaire'			=> 'commentaire',
84
		'commentaire'			=> 'commentaire',
73
		'transmission'			=> 'transmission',
85
		'transmission'			=> 'transmission',
74
		'date_creation' 		=> 'date_creation',
86
		'date_creation' 		=> 'date_creation',
75
		'date_modification' 	=> 'date_modification',
87
		'date_modification' 	=> 'date_modification',
76
		'date_transmission'		=> 'date_transmission',
88
		'date_transmission'		=> 'date_transmission',
77
		'mots_cles'				=> '',
89
		'mots_cles'				=> '',
78
		'coord_x'				=> 'latitude',
90
		'coord_x'				=> 'latitude',
79
		'coord_y'				=> 'longitude',
91
		'coord_y'				=> 'longitude',
80
		'ref_geo'				=> 'geodatum'
92
		'ref_geo'				=> 'geodatum'
81
		);
93
		);
82
 
94
 
83
	/**
95
	/**
84
	 * Méthode appelée avec une requête de type GET.
96
	 * Méthode appelée avec une requête de type GET.
85
	 */
97
	 */
86
	public function getElement($params) {
98
	public function getElement($params) {
87
 
99
 
88
		if(!isset($this->config['database_cel']['database_migration']) || $this->config['database_cel']['database_migration'] == '') {
100
		if(!isset($this->config['database_cel']['database_migration']) || $this->config['database_cel']['database_migration'] == '') {
89
			echo 'Attention la variable de configuration database_migration dans la section database_cel, contenant la base de données d\'arrivée, doit être remplie '."\n";
101
			echo 'Attention la variable de configuration database_migration dans la section database_cel, contenant la base de données d\'arrivée, doit être remplie '."\n";
90
			exit;
102
			exit;
91
		}
103
		}
92
 
104
 
93
		if(!isset($this->config['database_ident']['database']) || $this->config['database_ident']['database'] == '') {
105
		if(!isset($this->config['database_ident']['database']) || $this->config['database_ident']['database'] == '') {
94
			echo 'Attention la variable de configuration database dans la section database_ident, contenant la base de données utilisateurs, doit être remplie '."\n";
106
			echo 'Attention la variable de configuration database dans la section database_ident, contenant la base de données utilisateurs, doit être remplie '."\n";
95
			exit;
107
			exit;
96
		}
108
		}
97
 
109
 
98
		self::$bdd_cel_migration = $this->config['database_cel']['database_migration'];
110
		self::$bdd_cel_migration = $this->config['database_cel']['database_migration'];
99
		self::$bdd_utilisateurs = $this->config['database_ident']['database'];
111
		self::$bdd_utilisateurs = $this->config['database_ident']['database'];
100
 
112
 
101
		echo "--MIGRATION DES OBSERVATIONS --------------------------------------\n";
113
		echo "--MIGRATION DES OBSERVATIONS --------------------------------------\n";
102
		//1. TEMPORAIRE : vider les tables de destinations
114
		//1. TEMPORAIRE : vider les tables de destinations
103
		if (self::truncate) {
115
		if (self::truncate) {
104
			echo "-------------------------------------------------------------------\n\n";
116
			echo "-------------------------------------------------------------------\n\n";
105
			echo "  ETAPE 0. Vider les tables ... \n\n";
117
			echo "  ETAPE 0. Vider les tables ... \n\n";
106
			echo "-------------------------------------------------------------------\n\n";
118
			echo "-------------------------------------------------------------------\n\n";
107
			$nouvellesTables = array('cel_obs', 'cel_utilisateurs_infos', 'cel_zones_geo');
119
			$nouvellesTables = array('cel_obs', 'cel_utilisateurs_infos', 'cel_zones_geo');
108
			foreach ($nouvellesTables as $nomTable) {
120
			foreach ($nouvellesTables as $nomTable) {
109
				echo 'Vider la table '.$nomTable.'...';
121
				echo 'Vider la table '.$nomTable.'...';
110
				$requeteTruncate = 'TRUNCATE TABLE '.self::$bdd_cel_migration.'.'.$nomTable;
122
				$requeteTruncate = 'TRUNCATE TABLE '.self::$bdd_cel_migration.'.'.$nomTable;
111
				$resultatTruncate = $this->executerRequete($requeteTruncate);
123
				$resultatTruncate = $this->executerRequete($requeteTruncate);
112
				echo "ok \n";
124
				echo "ok \n";
113
			}
125
			}
114
 
126
 
115
			echo "\n---------------------------------------------------------------- OK\n\n";
127
			echo "\n---------------------------------------------------------------- OK\n\n";
116
		}
128
		}
117
 
129
 
118
		echo "-------------------------------------------------------------------\n\n";
130
		echo "-------------------------------------------------------------------\n\n";
119
		echo "  ETAPE 1. Paramétrage ... \n\n";
131
		echo "  ETAPE 1. Paramétrage ... \n\n";
120
		echo "-------------------------------------------------------------------\n\n";
132
		echo "-------------------------------------------------------------------\n\n";
121
		$this->getUtilisateurs();
133
		$this->getUtilisateurs();
122
		$this->getMotsCles();
134
		$this->getMotsCles();
123
 
135
 
124
		echo "-------------------------------------------------------------------\n\n";
136
		echo "-------------------------------------------------------------------\n\n";
125
		echo "  ETAPE 2. Migration des utilisateurs ... \n\n";
137
		echo "  ETAPE 2. Migration des utilisateurs ... \n\n";
126
		echo "-------------------------------------------------------------------\n\n";
138
		echo "-------------------------------------------------------------------\n\n";
127
		$this->migrerUtilisateurs();
139
		$this->migrerUtilisateurs();
128
 
140
 
129
		echo "-------------------------------------------------------------------\n\n";
141
		echo "-------------------------------------------------------------------\n\n";
130
		echo "  ETAPE 3. Migration des zone géographiques ... \n\n";
142
		echo "  ETAPE 3. Migration des zone géographiques ... \n\n";
131
		echo "-------------------------------------------------------------------\n\n";
143
		echo "-------------------------------------------------------------------\n\n";
132
		$this->migrerZonesGeo();
144
		$this->migrerZonesGeo();
133
 
145
 
134
		echo "-------------------------------------------------------------------\n\n";
146
		echo "-------------------------------------------------------------------\n\n";
135
		echo "  ETAPE 4. Migration des observations ... \n\n";
147
		echo "  ETAPE 4. Migration des observations ... \n\n";
136
		echo "-------------------------------------------------------------------\n\n";
148
		echo "-------------------------------------------------------------------\n\n";
137
		$this->migrerObs();
149
		$this->migrerObs();
138
		$this->ordonnerObs();
150
		$this->ordonnerObs();
139
		echo "\n"."\n"."\n";
151
		echo "\n"."\n"."\n";
140
	}
152
	}
141
 
153
 
142
	public function executerRequeteSimple($requete) {
154
	public function executerRequeteSimple($requete) {
143
		// Fonction de commodité pour afficher les requetes au lieu de les executer
155
		// Fonction de commodité pour afficher les requetes au lieu de les executer
144
		if (self::dry_run) {
156
		if (self::dry_run) {
145
			echo str_replace('),','),'."\n", $requete);
157
			echo str_replace('),','),'."\n", $requete);
146
			return true;
158
			return true;
147
		} else {
159
		} else {
148
			return parent::executerRequeteSimple($requete);
160
			return parent::executerRequeteSimple($requete);
149
		}
161
		}
150
	}
162
	}
151
 
163
 
152
	private function getUtilisateurs() {
164
	private function getUtilisateurs() {
153
		echo "\n-------------------------------------------------------------------\n";
165
		echo "\n-------------------------------------------------------------------\n";
154
		echo "--SELECTION DES UTILISATEURS---------------------------------------\n\n";
166
		echo "--SELECTION DES UTILISATEURS---------------------------------------\n\n";
155
 
167
 
156
		$requete = 'SELECT DISTINCT u_id AS id, u_mail AS mail, u_name AS nom, u_surname AS prenom, u_passwd AS pass '.
168
		$requete = 'SELECT DISTINCT u_id AS id, u_mail AS mail, u_name AS nom, u_surname AS prenom, u_passwd AS pass '.
157
			'FROM cel_inventory INNER JOIN '.self::$bdd_utilisateurs.'.annuaire_tela ON (u_mail = identifiant) ';
169
			'FROM cel_inventory INNER JOIN '.self::$bdd_utilisateurs.'.annuaire_tela ON (u_mail = identifiant) ';
158
		$tableau_utilisateurs = $this->executerRequete($requete);
170
		$tableau_utilisateurs = $this->executerRequete($requete);
159
 
171
 
160
		foreach( $tableau_utilisateurs as &$utilisateur) {
172
		foreach( $tableau_utilisateurs as &$utilisateur) {
161
			$this->tableau_utilisateurs[$utilisateur['mail']] = $utilisateur;
173
			$this->tableau_utilisateurs[$utilisateur['mail']] = $utilisateur;
162
		}
174
		}
163
 
175
 
164
		echo sizeof($this->tableau_utilisateurs)." utilisateurs sélectionnés";
176
		echo sizeof($this->tableau_utilisateurs)." utilisateurs sélectionnés";
165
		echo "\n-----------------------------------------------------------------OK\n";
177
		echo "\n-----------------------------------------------------------------OK\n";
166
	}
178
	}
167
 
179
 
168
	private function getMotsCles() {
180
	private function getMotsCles() {
169
		echo "\n-------------------------------------------------------------------\n";
181
		echo "\n-------------------------------------------------------------------\n";
170
		echo "--SELECTION DES MOTS-CLES -----------------------------------------\n\n";
182
		echo "--SELECTION DES MOTS-CLES -----------------------------------------\n\n";
171
 
183
 
172
		$requete = 'SELECT cmc_id_proprietaire as id_utilisateur, cmc_id_mot_cle_utilisateur as id_mot_cle, '.
184
		$requete = 'SELECT cmc_id_proprietaire as id_utilisateur, cmc_id_mot_cle_utilisateur as id_mot_cle, '.
173
			'cmc_mot_cle as mot_cle '.
185
			'cmc_mot_cle as mot_cle '.
174
			'FROM cel_mots_cles_obs ';
186
			'FROM cel_mots_cles_obs ';
175
		$tableau_mots_cles = $this->executerRequete($requete);
187
		$tableau_mots_cles = $this->executerRequete($requete);
176
 
188
 
177
		foreach( $tableau_mots_cles as &$mot_cle) {
189
		foreach( $tableau_mots_cles as &$mot_cle) {
178
			$this->tableau_mots_cles[$mot_cle['id_utilisateur']][$mot_cle['id_mot_cle']] = $mot_cle;
190
			$this->tableau_mots_cles[$mot_cle['id_utilisateur']][$mot_cle['id_mot_cle']] = $mot_cle;
179
		}
191
		}
180
 
192
 
181
		echo sizeof($this->tableau_mots_cles)." mots-clés sélectionnés";
193
		echo sizeof($this->tableau_mots_cles)." mots-clés sélectionnés";
182
		echo "\n-----------------------------------------------------------------OK\n";
194
		echo "\n-----------------------------------------------------------------OK\n";
183
 
195
 
184
	}
196
	}
185
 
197
 
186
	/**
198
	/**
187
	 * Utiliser cette méthode dans une boucle pour afficher un message suivi du nombre de tour de boucle effectué.
199
	 * Utiliser cette méthode dans une boucle pour afficher un message suivi du nombre de tour de boucle effectué.
188
	 * Vous devrez vous même gérer le retour à la ligne à la sortie de la boucle.
200
	 * Vous devrez vous même gérer le retour à la ligne à la sortie de la boucle.
189
	 *
201
	 *
190
	 * @param string le message d'information.
202
	 * @param string le message d'information.
191
	 * @param int le nombre de départ à afficher.
203
	 * @param int le nombre de départ à afficher.
192
	 * @return void le message est affiché dans la console.
204
	 * @return void le message est affiché dans la console.
193
	 */
205
	 */
194
	protected function afficherAvancement($message, $depart = 0) {
206
	protected function afficherAvancement($message, $depart = 0) {
195
		if (! isset(self::$avancement[$message])) {
207
		if (! isset(self::$avancement[$message])) {
196
			self::$avancement[$message] = $depart;
208
			self::$avancement[$message] = $depart;
197
			echo "$message : ";
209
			echo "$message : ";
198
 
210
 
199
			$actuel =& self::$avancement[$message];
211
			$actuel =& self::$avancement[$message];
200
			echo $actuel++;
212
			echo $actuel++;
201
		} else {
213
		} else {
202
			$actuel =& self::$avancement[$message];
214
			$actuel =& self::$avancement[$message];
203
 
215
 
204
			// Cas du passage de 99 (= 2 caractères) à 100 (= 3 caractères)
216
			// Cas du passage de 99 (= 2 caractères) à 100 (= 3 caractères)
205
			$passage = 0;
217
			$passage = 0;
206
			if (strlen((string) ($actuel - 1)) < strlen((string) ($actuel))) {
218
			if (strlen((string) ($actuel - 1)) < strlen((string) ($actuel))) {
207
				$passage = 1;
219
				$passage = 1;
208
			}
220
			}
209
 
221
 
210
			echo str_repeat(chr(8), (strlen((string) $actuel) - $passage));
222
			echo str_repeat(chr(8), (strlen((string) $actuel) - $passage));
211
			echo $actuel++;
223
			echo $actuel++;
212
		}
224
		}
213
	}
225
	}
214
 
226
 
215
	private function migrerUtilisateurs() {
227
	private function migrerUtilisateurs() {
216
		$requete = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_utilisateurs_infos '.
228
		$requete = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_utilisateurs_infos '.
217
					'(id_utilisateur) '.
229
					'(id_utilisateur) '.
218
					'VALUES ';
230
					'VALUES ';
219
 
231
 
220
		$sous_requete = array();
232
		$sous_requete = array();
221
		foreach ($this->tableau_utilisateurs as $id => &$utilisateur) {
233
		foreach ($this->tableau_utilisateurs as $id => &$utilisateur) {
222
			$sous_requete[] = '('.$this->proteger($utilisateur['id']).')';
234
			$sous_requete[] = '('.$this->proteger($utilisateur['id']).')';
223
		}
235
		}
224
		$requete .= implode(',', $sous_requete);
236
		$requete .= implode(',', $sous_requete);
225
 
237
 
226
		$migration_utilisateurs = $this->executerRequeteSimple($requete);
238
		$migration_utilisateurs = $this->executerRequeteSimple($requete);
227
 
239
 
228
		if ($migration_utilisateurs) {
240
		if ($migration_utilisateurs) {
229
			echo "Migration utilisateurs : ".count($sous_requete);
241
			echo "Migration utilisateurs : ".count($sous_requete);
230
		} else {
242
		} else {
231
			exit('Erreur lors de la migration des utilisateurs '."\n");
243
			exit('Erreur lors de la migration des utilisateurs '."\n");
232
		}
244
		}
233
		echo "\n---------------------------------------------------------------- OK\n\n";
245
		echo "\n---------------------------------------------------------------- OK\n\n";
234
 
246
 
235
	}
247
	}
236
 
248
 
237
	private function migrerZonesGeo() {
249
	private function migrerZonesGeo() {
238
 
250
 
239
		$pas = 5000;
251
		$pas = 5000;
240
 
252
 
241
		//SELECTIONNER LE NOMBRE DE ZONE GEO
253
		//SELECTIONNER LE NOMBRE DE ZONE GEO
242
		$requete_nombreZonesGeo = 'SELECT count(*) as nb FROM locations';
254
		$requete_nombreZonesGeo = 'SELECT count(*) as nb FROM locations';
243
		$resultatNbZonesGeo = $this->executerRequete($requete_nombreZonesGeo);
255
		$resultatNbZonesGeo = $this->executerRequete($requete_nombreZonesGeo);
244
		$nbZones = (int) $resultatNbZonesGeo[0]['nb'];
256
		$nbZones = (int) $resultatNbZonesGeo[0]['nb'];
245
 
257
 
246
		$nbTotal = 0;
258
		$nbTotal = 0;
247
		for($i = 0; $i <= $nbZones ; $i += $pas) {
259
		for($i = 0; $i <= $nbZones ; $i += $pas) {
248
 
260
 
249
			$requete_selection_zones_geo = 'SELECT * FROM locations LIMIT '.$i.', '.$pas;
261
			$requete_selection_zones_geo = 'SELECT * FROM locations LIMIT '.$i.', '.$pas;
250
 
262
 
251
			$zones_geo = $this->executerRequete($requete_selection_zones_geo);
263
			$zones_geo = $this->executerRequete($requete_selection_zones_geo);
252
 
264
 
253
			$requete_insertion_nouvelles_zones_geo = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_zones_geo '.
265
			$requete_insertion_nouvelles_zones_geo = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_zones_geo '.
254
					'(id_zone_geo, code, nom, utm_secteur, utm_x, utm_y, wgs84_latitude, wgs84_longitude, date_modification) '.
266
					'(id_zone_geo, code, nom, utm_secteur, utm_x, utm_y, wgs84_latitude, wgs84_longitude, date_modification) '.
255
					'VALUES ';
267
					'VALUES ';
256
 
268
 
257
			$sous_requete_insertion_valeurs = '';
269
			$sous_requete_insertion_valeurs = '';
258
 
270
 
259
			if(count($zones_geo) > 0) {
271
			if(count($zones_geo) > 0) {
260
				foreach($zones_geo as $zone_geo) {
272
				foreach($zones_geo as $zone_geo) {
261
 
273
 
262
					$zone_geo['nouveau_code_geo'] = 'INSEE-C:'.$zone_geo['insee_code'];
274
					$zone_geo['nouveau_code_geo'] = 'INSEE-C:'.$zone_geo['insee_code'];
263
					$lat_long = $this->convertirUtmVersLatLong($zone_geo['x_utm'],$zone_geo['y_utm'],$zone_geo['sector']);
275
					$lat_long = $this->convertirUtmVersLatLong($zone_geo['x_utm'],$zone_geo['y_utm'],$zone_geo['sector']);
264
 
276
 
265
					$indice_tableau_localites = $this->construireIndiceTableauLocalites($zone_geo['name'], $zone_geo['insee_code']);
277
					$indice_tableau_localites = $this->construireIndiceTableauLocalites($zone_geo['name'], $zone_geo['insee_code']);
266
					$this->tableau_zones_geo[$indice_tableau_localites] = $zone_geo;
278
					$this->tableau_zones_geo[$indice_tableau_localites] = $zone_geo;
267
 
279
 
268
					$sous_requete_insertion_valeurs .= '('.$this->proteger($zone_geo['nouveau_code_geo']).','.
280
					$sous_requete_insertion_valeurs .= '('.$this->proteger($zone_geo['nouveau_code_geo']).','.
269
														$this->proteger($zone_geo['insee_code']).','.
281
														$this->proteger($zone_geo['insee_code']).','.
270
														$this->proteger($zone_geo['name']).','.
282
														$this->proteger($zone_geo['name']).','.
271
														$this->proteger($zone_geo['sector']).','.
283
														$this->proteger($zone_geo['sector']).','.
272
														$this->proteger($zone_geo['x_utm']).','.
284
														$this->proteger($zone_geo['x_utm']).','.
273
														$this->proteger($zone_geo['y_utm']).','.
285
														$this->proteger($zone_geo['y_utm']).','.
274
														$this->proteger($lat_long['lat']).','.
286
														$this->proteger($lat_long['lat']).','.
275
														$this->proteger($lat_long['long']).','.
287
														$this->proteger($lat_long['long']).','.
276
														$this->proteger($zone_geo['update_date']).
288
														$this->proteger($zone_geo['update_date']).
277
														'),';
289
														'),';
278
				}
290
				}
279
 
291
 
280
				$sous_requete_insertion_valeurs = rtrim($sous_requete_insertion_valeurs,',');
292
				$sous_requete_insertion_valeurs = rtrim($sous_requete_insertion_valeurs,',');
281
 
293
 
282
				$requete_insertion_nouvelles_zones_geo .= $sous_requete_insertion_valeurs;
294
				$requete_insertion_nouvelles_zones_geo .= $sous_requete_insertion_valeurs;
283
 
295
 
284
				$migration_zones_geo = $this->executerRequeteSimple($requete_insertion_nouvelles_zones_geo);
296
				$migration_zones_geo = $this->executerRequeteSimple($requete_insertion_nouvelles_zones_geo);
285
			} else {
297
			} else {
286
				echo 'Fin de migration des zones géo '."\n";
298
				echo 'Fin de migration des zones géo '."\n";
287
				return;
299
				return;
288
			}
300
			}
289
 
301
 
290
			if ($migration_zones_geo) {
302
			if ($migration_zones_geo) {
291
				$nbTotal ++;
303
				$nbTotal ++;
292
				$this->afficherAvancement('Migration des zones (par '.$pas.')', $nbTotal);
304
				$this->afficherAvancement('Migration des zones (par '.$pas.')', $nbTotal);
293
			} else {
305
			} else {
294
				exit('Erreur lors de la migration des zones géo '.$i.' à '.($i+$pas)."\n");
306
				exit('Erreur lors de la migration des zones géo '.$i.' à '.($i+$pas)."\n");
295
			}
307
			}
296
		}
308
		}
297
		echo "\n---------------------------------------------------------------- OK\n\n";
309
		echo "\n---------------------------------------------------------------- OK\n\n";
298
	}
310
	}
299
 
311
 
300
	private function convertirUtmVersLatLong($x, $y, $sector) {
312
	private function convertirUtmVersLatLong($x, $y, $sector) {
301
    	$lat_long = array();
313
    	$lat_long = array();
302
 
314
 
303
    	$convertisseur = new gPoint();
315
    	$convertisseur = new gPoint();
304
		$convertisseur->setUTM($x, $y, $sector);
316
		$convertisseur->setUTM($x, $y, $sector);
305
		$convertisseur->convertTMtoLL();
317
		$convertisseur->convertTMtoLL();
306
		$lat_long['lat'] = str_replace(',','.',$convertisseur->Lat());
318
		$lat_long['lat'] = str_replace(',','.',$convertisseur->Lat());
307
		$lat_long['long'] = str_replace(',','.',$convertisseur->Long());
319
		$lat_long['long'] = str_replace(',','.',$convertisseur->Long());
308
 
320
 
309
		return $lat_long;
321
		return $lat_long;
310
    }
322
    }
311
 
323
 
312
	private function migrerObs() {
324
	private function migrerObs() {
313
		$debut = 0;
325
		$debut = 0;
314
		$pas = 1000;
326
		$pas = 1000;
315
		$nbTotal = 0;
327
		$nbTotal = 0;
316
 
328
 
317
		//Selectionner le nombre d'observations
329
		//Selectionner le nombre d'observations
318
		$requeteNbObs = "SELECT COUNT(*) as nb FROM cel_inventory";
330
		$requeteNbObs = "SELECT COUNT(*) as nb FROM cel_inventory";
319
		$resultatNbObs = $this->executerRequete($requeteNbObs);
331
		$resultatNbObs = $this->executerRequete($requeteNbObs);
320
		$fin = $resultatNbObs[0]['nb'];
332
		$fin = $resultatNbObs[0]['nb'];
321
 
333
 
322
		for ($i = $debut; $i < $fin ; $i += $pas) {
334
		for ($i = $debut; $i < $fin ; $i += $pas) {
323
			$requete_selection_obs = 'SELECT * FROM cel_inventory '.
335
			$requete_selection_obs = 'SELECT * FROM cel_inventory '.
324
											'ORDER BY identifiant LIMIT '.$i.','.$pas;
336
											'ORDER BY identifiant LIMIT '.$i.','.$pas;
325
			$observations = $this->requeter($requete_selection_obs);
337
			$observations = $this->requeter($requete_selection_obs);
326
 
338
 
327
			$requete_insertion_observations = 'INSERT IGNORE INTO '.self::$bdd_cel_migration.'.cel_obs (';
339
			$requete_insertion_observations = 'INSERT IGNORE INTO '.self::$bdd_cel_migration.'.cel_obs (';
328
 
340
 
329
			foreach ($this->tableau_nouveau_ancien as $nouveau_champ => $ancien_champ) {
341
			foreach ($this->tableau_nouveau_ancien as $nouveau_champ => $ancien_champ) {
330
				$requete_insertion_observations .= $nouveau_champ.',';
342
				$requete_insertion_observations .= $nouveau_champ.',';
331
			}
343
			}
332
 
344
 
333
			$requete_insertion_observations = rtrim($requete_insertion_observations, ',');
345
			$requete_insertion_observations = rtrim($requete_insertion_observations, ',');
334
			$requete_insertion_observations = $requete_insertion_observations.') VALUES ';
346
			$requete_insertion_observations = $requete_insertion_observations.') VALUES ';
335
 
347
 
336
			if (count($observations) > 0) {
348
			if (count($observations) > 0) {
337
				foreach($observations as $observation) {
349
				foreach($observations as $observation) {
338
					$nouvelle_observation = $this->traiterLigneObservation($observation);
350
					$nouvelle_observation = $this->traiterLigneObservation($observation);
339
 
351
 
340
					$nouvelle_observation = array_map(array($this, 'protegerSiNonNull'), $nouvelle_observation);
352
					$nouvelle_observation = array_map(array($this, 'protegerSiNonNull'), $nouvelle_observation);
341
					$requete_insertion_observations .= '('.join(',', array_values($nouvelle_observation)).'),';
353
					$requete_insertion_observations .= '('.join(',', array_values($nouvelle_observation)).'),';
342
				}
354
				}
343
 
355
 
344
				$requete_insertion_observations = rtrim($requete_insertion_observations, ',');
356
				$requete_insertion_observations = rtrim($requete_insertion_observations, ',');
345
 
357
 
346
				$migration_observations = $this->executerRequeteSimple($requete_insertion_observations);
358
				$migration_observations = $this->executerRequeteSimple($requete_insertion_observations);
347
			} else {
359
			} else {
348
				echo 'Fin de migration des observations '."\n"."\n";
360
				echo 'Fin de migration des observations '."\n"."\n";
349
				return;
361
				return;
350
			}
362
			}
351
 
363
 
352
			if ($migration_observations) {
364
			if ($migration_observations) {
353
				$nbTotal ++;
365
				$nbTotal ++;
354
				$this->afficherAvancement('Migration des observations (par '.$pas.')', $nbTotal);
366
				$this->afficherAvancement('Migration des observations (par '.$pas.')', $nbTotal);
355
			} else {
367
			} else {
356
				exit('Erreur lors de la migration des observation de '.$i.' à '.($i+$pas)."\n");
368
				exit('Erreur lors de la migration des observation de '.$i.' à '.($i+$pas)."\n");
357
			}
369
			}
358
		}
370
		}
359
		if (sizeof($this->communesOubliees) > 0) {
371
		if (sizeof($this->communesOubliees) > 0) {
360
			echo "\nxxxxxxxxx communes oubliées : ".sizeof($this->communesOubliees)." xxxxxxxxx \\n";
372
			echo "\nxxxxxxxxx communes oubliées : ".sizeof($this->communesOubliees)." xxxxxxxxx \\n";
361
		}
373
		}
362
		echo "\n---------------------------------------------------------------- OK\n\n";
374
		echo "\n---------------------------------------------------------------- OK\n\n";
363
	}
375
	}
364
 
376
 
365
	private function ordonnerObs() {
377
	private function ordonnerObs() {
366
		$requete = 'ALTER TABLE '.self::$bdd_cel_migration.'.cel_obs ORDER BY id_observation';
378
		$requete = 'ALTER TABLE '.self::$bdd_cel_migration.'.cel_obs ORDER BY id_observation';
367
		$this->executerRequeteSimple($requete);
379
		$this->executerRequeteSimple($requete);
368
	}
380
	}
369
 
381
 
370
	private function traiterLigneObservation($obs) {
382
	private function traiterLigneObservation($obs) {
371
		$nouvelle_obs = array();
383
		$nouvelle_obs = array();
372
		foreach($this->tableau_nouveau_ancien as $nouveau_champ_obs => $ancien_champ_obs) {
384
		foreach($this->tableau_nouveau_ancien as $nouveau_champ_obs => $ancien_champ_obs) {
373
			if ($this->estUnChampATraiter($ancien_champ_obs)) {
385
			if ($this->estUnChampATraiter($ancien_champ_obs)) {
374
				if (method_exists($this, $ancien_champ_obs)) {
386
				if (method_exists($this, $ancien_champ_obs)) {
375
					$nouvelle_obs[$nouveau_champ_obs] = $this->$ancien_champ_obs($obs);
387
					$nouvelle_obs[$nouveau_champ_obs] = $this->$ancien_champ_obs($obs);
376
				} else {
388
				} else {
377
					$nouvelle_obs[$nouveau_champ_obs] = '';
389
					$nouvelle_obs[$nouveau_champ_obs] = '';
378
				}
390
				}
379
			} else {
391
			} else {
380
				if ($obs[$ancien_champ_obs] == '000null' || $obs[$ancien_champ_obs] == 'null' || trim($obs[$ancien_champ_obs]) == '') {
392
				if ($obs[$ancien_champ_obs] == '000null' || $obs[$ancien_champ_obs] == 'null' || trim($obs[$ancien_champ_obs]) == '') {
381
					$obs[$ancien_champ_obs] = 'NULL';
393
					$obs[$ancien_champ_obs] = 'NULL';
382
				}
394
				}
383
 
395
 
384
				if (($ancien_champ_obs == 'coord_x' || $ancien_champ_obs == 'coord_y') && ($obs[$ancien_champ_obs] == '0' || $obs[$ancien_champ_obs] == 0)) {
396
				if (($ancien_champ_obs == 'coord_x' || $ancien_champ_obs == 'coord_y') && ($obs[$ancien_champ_obs] == '0' || $obs[$ancien_champ_obs] == 0)) {
385
					$obs[$ancien_champ_obs] = 'NULL';
397
					$obs[$ancien_champ_obs] = 'NULL';
386
				}
398
				}
387
 
399
 
388
				$nouvelle_obs[$nouveau_champ_obs] = $obs[$ancien_champ_obs];
400
				$nouvelle_obs[$nouveau_champ_obs] = $obs[$ancien_champ_obs];
389
			}
401
			}
390
		}
402
		}
391
		return $nouvelle_obs;
403
		return $nouvelle_obs;
392
	}
404
	}
393
 
405
 
394
	private function protegerSiNonNull($valeur) {
406
	private function protegerSiNonNull($valeur) {
395
		if ($valeur != 'NULL') {
407
		if ($valeur != 'NULL') {
396
			$valeur = $this->proteger($valeur);
408
			$valeur = $this->proteger($valeur);
397
		}
409
		}
398
		return $valeur;
410
		return $valeur;
399
	}
411
	}
400
 
412
 
401
	private function estUnChampATraiter($champ) {
413
	private function estUnChampATraiter($champ) {
402
		return strpos($champ,'traiter') !== false;
414
		return strpos($champ,'traiter') !== false;
403
	}
415
	}
404
 
416
 
405
	private function traiterReferentiel($observation) {
417
	private function traiterReferentiel($observation) {
406
		$retour = 'NULL';
418
		$retour = 'NULL';
407
		if ($observation['num_nom_sel'] != '' && $observation['num_nom_sel'] != '0') {
419
		if ($observation['num_nom_sel'] != '' && $observation['num_nom_sel'] != '0') {
408
			$retour = 'bdnff:4.02';
420
			$retour = 'bdnff:4.02';
409
		}
421
		}
410
		return $retour;
422
		return $retour;
411
	}
423
	}
412
 
424
 
413
	private function traiterLat(&$observation) {
425
	private function traiterLat(&$observation) {
414
		if ($this->etreNull($observation['coord_x'])) {
426
		if ($this->etreNull($observation['coord_x'])) {
415
			$observation['coord_x'] = 'NULL';
427
			$observation['coord_x'] = 'NULL';
416
		} else if (preg_match(self::PATTERN_LAT, $observation['coord_x']) == false) {
428
		} else if (preg_match(self::PATTERN_LAT, $observation['coord_x']) == false) {
417
			$latNote = 'Latitude éronnée : '.$observation['coord_x'];
429
			$latNote = 'Latitude éronnée : '.$observation['coord_x'];
418
			if ($this->etreNull($observation['commentaire'])) {
430
			if ($this->etreNull($observation['commentaire'])) {
419
				$observation['commentaire'] = $latNote;
431
				$observation['commentaire'] = $latNote;
420
			} else {
432
			} else {
421
				$observation['commentaire'] .= "\n".$latNote;
433
				$observation['commentaire'] .= "\n".$latNote;
422
			}
434
			}
423
			$observation['coord_x'] = 'NULL';
435
			$observation['coord_x'] = 'NULL';
424
		}
436
		}
425
		$retour = $observation['coord_x'];
437
		$retour = $observation['coord_x'];
426
		return $retour;
438
		return $retour;
427
	}
439
	}
428
 
440
 
429
	private function traiterLng(&$observation) {
441
	private function traiterLng(&$observation) {
430
		if ($this->etreNull($observation['coord_y'])) {
442
		if ($this->etreNull($observation['coord_y'])) {
431
			$observation['coord_y'] = 'NULL';
443
			$observation['coord_y'] = 'NULL';
432
		} else if (preg_match(self::PATTERN_LNG, $observation['coord_y']) == false) {
444
		} else if (preg_match(self::PATTERN_LNG, $observation['coord_y']) == false) {
433
			$lngNote = 'Longitude éronnée : '.$observation['coord_y'];
445
			$lngNote = 'Longitude éronnée : '.$observation['coord_y'];
434
			if ($this->etreNull($observation['commentaire'])) {
446
			if ($this->etreNull($observation['commentaire'])) {
435
				$observation['commentaire'] = $lngNote;
447
				$observation['commentaire'] = $lngNote;
436
			} else {
448
			} else {
437
				$observation['commentaire'] .= "\n".$lngNote;
449
				$observation['commentaire'] .= "\n".$lngNote;
438
			}
450
			}
439
			$observation['coord_y'] = 'NULL';
451
			$observation['coord_y'] = 'NULL';
440
		}
452
		}
441
		$retour = $observation['coord_y'];
453
		$retour = $observation['coord_y'];
442
		return $retour;
454
		return $retour;
443
	}
455
	}
444
 
456
 
445
	private function traiterGeodatum($observation) {
457
	private function traiterGeodatum($observation) {
446
		$retour = 'NULL';
458
		$retour = 'NULL';
447
		if ($observation['coord_x'] != 'NULL' && $observation['coord_y'] != 'NULL') {
459
		if ($observation['coord_x'] != 'NULL' && $observation['coord_y'] != 'NULL') {
448
			$retour = 'WGS84';
460
			$retour = 'WGS84';
449
		}
461
		}
450
		return $retour;
462
		return $retour;
451
	}
463
	}
452
 
464
 
453
	private function traiterMotsClesTexte($ligne_observation) {
465
	private function traiterMotsClesTexte($ligne_observation) {
454
		$mail_observation = $ligne_observation['identifiant'];
466
		$mail_observation = $ligne_observation['identifiant'];
455
		$retour = $ligne_observation['mots_cles'];
467
		$retour = $ligne_observation['mots_cles'];
456
		if (isset($this->tableau_mots_cles[$mail_observation])) {
468
		if (isset($this->tableau_mots_cles[$mail_observation])) {
457
			$mots_cles_tableau = $this->parserMotsCles($mail_observation, $ligne_observation['mots_cles'], ';');
469
			$mots_cles_tableau = $this->parserMotsCles($mail_observation, $ligne_observation['mots_cles'], ';');
458
			$retour =  join(',', $mots_cles_tableau);
470
			$retour =  join(',', $mots_cles_tableau);
459
			$retour = ltrim($retour, ',,') ;
471
			$retour = ltrim($retour, ',,') ;
460
		}
472
		}
461
 
473
 
462
		return $retour;
474
		return $retour;
463
	}
475
	}
464
 
476
 
465
	private function parserMotsCles($utilisateur, $mot_cles, $separateur = ',') {
477
	private function parserMotsCles($utilisateur, $mot_cles, $separateur = ',') {
466
		$tableau_mots_cles = explode($separateur,$mot_cles);
478
		$tableau_mots_cles = explode($separateur,$mot_cles);
467
		$tableau_mots_cles_formates = array();
479
		$tableau_mots_cles_formates = array();
468
 
480
 
469
		foreach ($tableau_mots_cles as $mot_cle) {
481
		foreach ($tableau_mots_cles as $mot_cle) {
470
 
482
 
471
			$mot_cle = str_replace($separateur.$separateur,'',$mot_cle);
483
			$mot_cle = str_replace($separateur.$separateur,'',$mot_cle);
472
			$mot_cle = str_replace('null','',$mot_cle);
484
			$mot_cle = str_replace('null','',$mot_cle);
473
 
485
 
474
			if ($this->estUnIdentifiantMotCle($mot_cle)) {
486
			if ($this->estUnIdentifiantMotCle($mot_cle)) {
475
 
487
 
476
				// certains mots clés mal formatés contiennent des virgules
488
				// certains mots clés mal formatés contiennent des virgules
477
				if (strpos($mot_cle,',') !== false) {
489
				if (strpos($mot_cle,',') !== false) {
478
					$tab_mot_cle_mal_formate = explode(',',$mot_cle);
490
					$tab_mot_cle_mal_formate = explode(',',$mot_cle);
479
 
491
 
480
					foreach ($tab_mot_cle_mal_formate as $mot_cle_mal_formate) {
492
					foreach ($tab_mot_cle_mal_formate as $mot_cle_mal_formate) {
481
						if ($this->estUnIdentifiantMotCle($mot_cle_mal_formate)) {
493
						if ($this->estUnIdentifiantMotCle($mot_cle_mal_formate)) {
482
							$tableau_mots_cles_formates[$mot_cle_mal_formate] = $this->tableau_mots_cles[$utilisateur][$mot_cle_mal_formate]['mot_cle'];
494
							$tableau_mots_cles_formates[$mot_cle_mal_formate] = $this->tableau_mots_cles[$utilisateur][$mot_cle_mal_formate]['mot_cle'];
483
						}
495
						}
484
					}
496
					}
485
				} else {
497
				} else {
486
					// on met le mot clé dans sa propre case afin d'éviter
498
					// on met le mot clé dans sa propre case afin d'éviter
487
					// facilement les doublons provoqués par de mauvais formatages
499
					// facilement les doublons provoqués par de mauvais formatages
488
					if (isset($this->tableau_mots_cles[$utilisateur][$mot_cle]) && trim($this->tableau_mots_cles[$utilisateur][$mot_cle]['mot_cle']) != '') {
500
					if (isset($this->tableau_mots_cles[$utilisateur][$mot_cle]) && trim($this->tableau_mots_cles[$utilisateur][$mot_cle]['mot_cle']) != '') {
489
						$tableau_mots_cles_formates[$mot_cle] = $this->tableau_mots_cles[$utilisateur][$mot_cle]['mot_cle'];
501
						$tableau_mots_cles_formates[$mot_cle] = $this->tableau_mots_cles[$utilisateur][$mot_cle]['mot_cle'];
490
					}
502
					}
491
				}
503
				}
492
 
504
 
493
			}
505
			}
494
		}
506
		}
495
 
507
 
496
		return $tableau_mots_cles_formates;
508
		return $tableau_mots_cles_formates;
497
	}
509
	}
498
 
510
 
499
	private function estUnIdentifiantMotCle($chaine) {
511
	private function estUnIdentifiantMotCle($chaine) {
500
		return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ;
512
		return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ;
501
	}
513
	}
502
 
514
 
503
	private function traiterIdentifiantUtilisateur($ligne_observation) {
515
	private function traiterIdentifiantUtilisateur($ligne_observation) {
504
		$mail_observation = $ligne_observation['identifiant'];
516
		$mail_observation = $ligne_observation['identifiant'];
505
		$retour = $this->renvoyerIdPourMigration($mail_observation);
517
		$retour = $this->renvoyerIdPourMigration($mail_observation);
506
		return $retour;
518
		return $retour;
507
	}
519
	}
508
 
520
 
509
	private function traiterPrenomUtilisateur($ligne_observation) {
521
	private function traiterPrenomUtilisateur($ligne_observation) {
510
		$mail_observation = $ligne_observation['identifiant'];
522
		$mail_observation = $ligne_observation['identifiant'];
511
 
523
 
512
		$retour = '';
524
		$retour = '';
513
		if (isset($this->tableau_utilisateurs[$mail_observation])) {
525
		if (isset($this->tableau_utilisateurs[$mail_observation])) {
514
			$prenom =  $this->tableau_utilisateurs[$mail_observation]['prenom'];
526
			$prenom =  $this->tableau_utilisateurs[$mail_observation]['prenom'];
515
			$retour = self::formaterMotPremiereLettreChaqueMotEnMajuscule($prenom);
527
			$retour = self::formaterMotPremiereLettreChaqueMotEnMajuscule($prenom);
516
		}
528
		}
517
		return $retour;
529
		return $retour;
518
	}
530
	}
519
 
531
 
520
	private function traiterNomUtilisateur($ligne_observation) {
532
	private function traiterNomUtilisateur($ligne_observation) {
521
		$mail_observation = $ligne_observation['identifiant'];
533
		$mail_observation = $ligne_observation['identifiant'];
522
 
534
 
523
		$retour = '';
535
		$retour = '';
524
		if (isset($this->tableau_utilisateurs[$mail_observation])) {
536
		if (isset($this->tableau_utilisateurs[$mail_observation])) {
525
			$nom =  $this->tableau_utilisateurs[$mail_observation]['nom'];
537
			$nom =  $this->tableau_utilisateurs[$mail_observation]['nom'];
526
			$retour = self::formaterMotEnMajuscule($nom);
538
			$retour = self::formaterMotEnMajuscule($nom);
527
		}
539
		}
528
		return $retour;
540
		return $retour;
529
	}
541
	}
530
 
542
 
531
	public static function formaterMotPremiereLettreChaqueMotEnMajuscule($chaine, $encodage= 'UTF-8') {
543
	public static function formaterMotPremiereLettreChaqueMotEnMajuscule($chaine, $encodage= 'UTF-8') {
532
		$chaine = str_replace('-', ' - ', $chaine);
544
		$chaine = str_replace('-', ' - ', $chaine);
533
		$chaine = mb_strtolower($chaine, $encodage);
545
		$chaine = mb_strtolower($chaine, $encodage);
534
		$chaine = mb_convert_case($chaine, MB_CASE_TITLE, $encodage);
546
		$chaine = mb_convert_case($chaine, MB_CASE_TITLE, $encodage);
535
		$chaine = str_replace(' - ', '-', $chaine);
547
		$chaine = str_replace(' - ', '-', $chaine);
536
		return $chaine;
548
		return $chaine;
537
	}
549
	}
538
 
550
 
539
	public static function formaterMotEnMajuscule($chaine, $encodage= 'UTF-8') {
551
	public static function formaterMotEnMajuscule($chaine, $encodage= 'UTF-8') {
540
		return mb_convert_case($chaine, MB_CASE_UPPER, $encodage);
552
		return mb_convert_case($chaine, MB_CASE_UPPER, $encodage);
541
	}
553
	}
542
 
554
 
543
	private function traiterZoneGeo($ligne_observation) {
555
	private function traiterZoneGeo($ligne_observation) {
544
 
556
 
545
		$zone_geo = $ligne_observation['location'];
557
		$zone_geo = $ligne_observation['location'];
546
 
558
 
547
		if ($ligne_observation['id_location'] != null && !is_numeric($ligne_observation['id_location']) && $ligne_observation['id_location'] != '000null') {
559
		if ($ligne_observation['id_location'] != null && !is_numeric($ligne_observation['id_location']) && $ligne_observation['id_location'] != '000null') {
548
			$id_zone_geo_ancienne = $ligne_observation['id_location'];
560
			$id_zone_geo_ancienne = $ligne_observation['id_location'];
549
			if ($zone_geo != '') {
561
			if ($zone_geo != '') {
550
				$id_zone_geo_ancienne = '('.$id_zone_geo_ancienne.')';
562
				$id_zone_geo_ancienne = '('.$id_zone_geo_ancienne.')';
551
			}
563
			}
552
 
564
 
553
			$zone_geo .= $id_zone_geo_ancienne;
565
			$zone_geo .= $id_zone_geo_ancienne;
554
		} else if ($ligne_observation['location'] == null || $ligne_observation['location'] == "" || $ligne_observation['location'] == "000null") {
566
		} else if ($ligne_observation['location'] == null || $ligne_observation['location'] == "" || $ligne_observation['location'] == "000null") {
555
 
567
 
556
			if ($ligne_observation['id_location'] != '' && $ligne_observation['id_location'] != '000null') {
568
			if ($ligne_observation['id_location'] != '' && $ligne_observation['id_location'] != '000null') {
557
				$id_zone_geo_ancienne = $ligne_observation['id_location'];
569
				$id_zone_geo_ancienne = $ligne_observation['id_location'];
558
				$id_zone_geo_ancienne = $id_zone_geo_ancienne;
570
				$id_zone_geo_ancienne = $id_zone_geo_ancienne;
559
				$zone_geo = $id_zone_geo_ancienne;
571
				$zone_geo = $id_zone_geo_ancienne;
560
			} else {
572
			} else {
561
				$zones_geo = 'NULL';
573
				$zones_geo = 'NULL';
562
			}
574
			}
563
		}
575
		}
564
 
576
 
565
		return $zone_geo;
577
		return $zone_geo;
566
	}
578
	}
567
 
579
 
568
	private function traiterIdentifiantZoneGeo($ligne_observation) {
580
	private function traiterIdentifiantZoneGeo($ligne_observation) {
569
		$id_zone_geo = '';
581
		$id_zone_geo = '';
570
 
582
 
571
		if ($ligne_observation['id_location'] != '' && $ligne_observation['id_location'] != '000null') {
583
		if ($ligne_observation['id_location'] != '' && $ligne_observation['id_location'] != '000null') {
572
			$indice = $this->construireIndiceTableauLocalites($ligne_observation['location'], $ligne_observation['id_location']);
584
			$indice = $this->construireIndiceTableauLocalites($ligne_observation['location'], $ligne_observation['id_location']);
573
			if (isset($this->tableau_zones_geo[$indice])) {
585
			if (isset($this->tableau_zones_geo[$indice])) {
574
				$id_zone_geo = $this->tableau_zones_geo[$indice]['nouveau_code_geo'];
586
				$id_zone_geo = $this->tableau_zones_geo[$indice]['nouveau_code_geo'];
575
			} else {
587
			} else {
576
				if ($ligne_observation['location'] != "000null") {
588
				if ($ligne_observation['location'] != "000null") {
577
					$this->communesOubliees[$indice] = false;
589
					$this->communesOubliees[$indice] = false;
578
				}
590
				}
579
			}
591
			}
580
		} else {
592
		} else {
581
			$id_zone_geo = 'NULL';
593
			$id_zone_geo = 'NULL';
582
		}
594
		}
583
 
595
 
584
		return $id_zone_geo;
596
		return $id_zone_geo;
585
	}
597
	}
586
 
598
 
587
	private function construireIndiceTableauLocalites($nom, $id) {
599
	private function construireIndiceTableauLocalites($nom, $id) {
588
		$nom = htmlentities($nom, ENT_NOQUOTES, 'UTF-8');
600
		$nom = htmlentities($nom, ENT_NOQUOTES, 'UTF-8');
589
 
601
 
590
    	$nom = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $nom);
602
    	$nom = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $nom);
591
    	$nom = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $nom); // pour les ligatures e.g. '&oelig;'
603
    	$nom = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $nom); // pour les ligatures e.g. '&oelig;'
592
    	$nom = preg_replace('#&[^;]+;#', '', $nom); // supprime les autres caractères
604
    	$nom = preg_replace('#&[^;]+;#', '', $nom); // supprime les autres caractères
593
 
605
 
594
    	$nom = str_replace("'",'_',$nom);
606
    	$nom = str_replace("'",'_',$nom);
595
		$nom = str_replace(' ','_',$nom);
607
		$nom = str_replace(' ','_',$nom);
596
		$nom = str_replace('-','_',$nom);
608
		$nom = str_replace('-','_',$nom);
597
		$nom = str_replace('  ','_',$nom);
609
		$nom = str_replace('  ','_',$nom);
598
		$indice = strtolower($nom).substr($id,0,2);
610
		$indice = strtolower($nom).substr($id,0,2);
599
 
611
 
600
		return $indice;
612
		return $indice;
601
	}
613
	}
602
 
614
 
603
	// Par défaut, on garde l'utilisateur tel quel (cas de la chaine de session des utilisateur anonymes)
615
	// Par défaut, on garde l'utilisateur tel quel (cas de la chaine de session des utilisateur anonymes)
604
	private function renvoyerIdPourMigration($utilisateur) {
616
	private function renvoyerIdPourMigration($utilisateur) {
605
		$retour = $utilisateur;
617
		$retour = $utilisateur;
606
		// si le mail correspond a un utilisateur de la bdd
618
		// si le mail correspond a un utilisateur de la bdd
607
		if (isset($this->tableau_utilisateurs[$utilisateur])) {
619
		if (isset($this->tableau_utilisateurs[$utilisateur])) {
608
			// on renvoie son id
620
			// on renvoie son id
609
			$retour = $this->tableau_utilisateurs[$utilisateur]['id'];
621
			$retour = $this->tableau_utilisateurs[$utilisateur]['id'];
610
		} else if ($utilisateur != '') {
622
		} else if ($utilisateur != '') {
611
			// sinon si c'est un mail inconnu, on garde le md5
623
			// sinon si c'est un mail inconnu, on garde le md5
612
			if ($this->mailValide($utilisateur)) {
624
			if ($this->mailValide($utilisateur)) {
613
				$retour = md5($utilisateur);
625
				$retour = md5($utilisateur);
614
			}
626
			}
615
		}
627
		}
616
		return $retour;
628
		return $retour;
617
	}
629
	}
618
 
630
 
619
	public function mailValide($mail) {
631
	public function mailValide($mail) {
620
		// vérification bidon mais ça suffit pour ici
632
		// vérification bidon mais ça suffit pour ici
621
		return !(strpos('@', $mail) === false);
633
		return !(strpos('@', $mail) === false);
622
	}
634
	}
623
}
635
}