Subversion Repositories eFlore/Applications.cel

Rev

Rev 1224 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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