Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1181 Rev 1189
Line 1... Line 1...
1
<?php
1
<?php
Line 2... Line 2...
2
 
2
 
3
class MigrationImages extends Cel {
3
class MigrationImages extends Cel {
4
	
4
 
5
	public static $bdd_cel_migration;
5
	public static $bdd_cel_migration;
6
	public static $bdd_utilisateurs;
6
	public static $bdd_utilisateurs;
7
	
7
 
8
	const truncate = true; //Doit on vider les tables de destination ?
8
	const truncate = true; //Doit on vider les tables de destination ?
9
	
9
 
10
	const separateur_champs_metadonnees = ';';
10
	const separateur_champs_metadonnees = ';';
11
	const separateur_valeurs_metadonnees = ':';
11
	const separateur_valeurs_metadonnees = ':';
12
	
12
 
13
	private $id_cle_metadonnees = array();
13
	private $id_cle_metadonnees = array();
14
	
14
 
15
	/** Tableau associatif permettant de stocker l'avancement dans une boucle.
15
	/** Tableau associatif permettant de stocker l'avancement dans une boucle.
16
	* La clé est un md5 du message à afficher au démarrage de la boucle.
16
	* La clé est un md5 du message à afficher au démarrage de la boucle.
17
	* @var array
17
	* @var array
18
	*/
18
	*/
19
	private static $avancement = array();
19
	private static $avancement = array();
20
	
20
 
21
	const dry_run = false;
21
	const dry_run = false;
22
	
22
 
23
	private $tableau_utilisateurs = array();
23
	private $tableau_utilisateurs = array();
24
	private $tableau_observations = array();
24
	private $tableau_observations = array();
25
	private $tableau_mots_cles = array();
25
	private $tableau_mots_cles = array();
26
	
26
 
27
	private $tableau_nouveau_ancien = array(	
27
	private $tableau_nouveau_ancien = array(
28
		'id_image' => 'ci_id_image',
28
		'id_image' => 'ci_id_image',
29
		'ordre' =>'ci_ordre',
29
		'ordre' =>'ci_ordre',
30
		'ce_utilisateur' => 'traiterIdentifiantUtilisateur',
30
		'ce_utilisateur' => 'traiterIdentifiantUtilisateur',
31
		'prenom_utilisateur' => 'traiterPrenomUtilisateur',
31
		'prenom_utilisateur' => 'traiterPrenomUtilisateur',
Line 46... Line 46...
46
		'meta_xmp' => 'traiterXmp',
46
		'meta_xmp' => 'traiterXmp',
47
		'meta_makernote' => 'traiterMakernote',
47
		'meta_makernote' => 'traiterMakernote',
48
		'date_modification' => 'ci_meta_date',
48
		'date_modification' => 'ci_meta_date',
49
		'date_creation' => 'ci_meta_date_ajout'
49
		'date_creation' => 'ci_meta_date_ajout'
50
	);
50
	);
51
	
51
 
52
	private $champs_exifs_non_gardes = array(
52
	private $champs_exifs_non_gardes = array(
53
		'ci_meta_x_resolution',
53
		'ci_meta_x_resolution',
54
		'ci_meta_y_resolution',
54
		'ci_meta_y_resolution',
55
		'ci_meta_gps',
55
		'ci_meta_gps',
56
		'ci_meta_user_comment',
56
		'ci_meta_user_comment',
Line 83... Line 83...
83
		'ci_meta_exif_contrast',
83
		'ci_meta_exif_contrast',
84
		'ci_meta_exif_saturation',
84
		'ci_meta_exif_saturation',
85
		'ci_meta_exif_sharpness',
85
		'ci_meta_exif_sharpness',
86
		'ci_meta_exif_subject_distance_range'
86
		'ci_meta_exif_subject_distance_range'
87
	);
87
	);
88
	
88
 
89
	private $champs_iptc_non_gardes = array(
89
	private $champs_iptc_non_gardes = array(
90
		'ci_meta_iptc_category',
90
		'ci_meta_iptc_category',
91
		'ci_meta_iptc_by_line',
91
		'ci_meta_iptc_by_line',
92
		'ci_meta_iptc_by_line_title',
92
		'ci_meta_iptc_by_line_title',
93
		'ci_meta_iptc_city',
93
		'ci_meta_iptc_city',
Line 98... Line 98...
98
		'ci_meta_iptc_headline',
98
		'ci_meta_iptc_headline',
99
		'ci_meta_iptc_credit',
99
		'ci_meta_iptc_credit',
100
		'ci_meta_iptc_copyright_notice',
100
		'ci_meta_iptc_copyright_notice',
101
		'ci_meta_iptc_contact'
101
		'ci_meta_iptc_contact'
102
	);
102
	);
103
	
103
 
104
	private $champs_divers_non_gardes = array(
104
	private $champs_divers_non_gardes = array(
105
		'ci_publiable_eflore',
105
		'ci_publiable_eflore',
106
		'ci_meta_mots_cles'
106
		'ci_meta_mots_cles'
107
	);
107
	);
108
	
108
 
109
	/**
109
	/**
110
	* Utiliser cette méthode dans une boucle pour afficher un message suivi du nombre de tour de boucle effectué.
110
	* Utiliser cette méthode dans une boucle pour afficher un message suivi du nombre de tour de boucle effectué.
111
	* Vous devrez vous même gérer le retour à la ligne à la sortie de la boucle.
111
	* Vous devrez vous même gérer le retour à la ligne à la sortie de la boucle.
112
	*
112
	*
113
	* @param string le message d'information.
113
	* @param string le message d'information.
Line 116... Line 116...
116
	*/
116
	*/
117
	protected function afficherAvancement($message, $depart = 0) {
117
	protected function afficherAvancement($message, $depart = 0) {
118
		if (! isset(self::$avancement[$message])) {
118
		if (! isset(self::$avancement[$message])) {
119
			self::$avancement[$message] = $depart;
119
			self::$avancement[$message] = $depart;
120
			echo "$message : ";
120
			echo "$message : ";
121
				
121
 
122
			$actuel =& self::$avancement[$message];
122
			$actuel =& self::$avancement[$message];
123
			echo $actuel++;
123
			echo $actuel++;
124
		} else {
124
		} else {
125
			$actuel =& self::$avancement[$message];
125
			$actuel =& self::$avancement[$message];
126
				
126
 
127
			// Cas du passage de 99 (= 2 caractères) à 100 (= 3 caractères)
127
			// Cas du passage de 99 (= 2 caractères) à 100 (= 3 caractères)
128
			$passage = 0;
128
			$passage = 0;
129
			if (strlen((string) ($actuel - 1)) < strlen((string) ($actuel))) {
129
			if (strlen((string) ($actuel - 1)) < strlen((string) ($actuel))) {
130
			$passage = 1;
130
			$passage = 1;
131
		}
131
		}
132
				
132
 
133
			echo str_repeat(chr(8), (strlen((string) $actuel) - $passage));
133
			echo str_repeat(chr(8), (strlen((string) $actuel) - $passage));
134
			echo $actuel++;
134
			echo $actuel++;
135
		}
135
		}
136
	}
136
	}
137
	
137
 
138
	/**
138
	/**
139
	 * Méthode appelée avec une requête de type GET.
139
	 * Méthode appelée avec une requête de type GET.
140
	 */
140
	 */
141
	public function getElement($params) {
141
	public function getElement($params) {
142
		
142
 
143
		if(!isset($this->config['database_cel']['database_migration']) || $this->config['database_cel']['database_migration'] == '') {
143
		if(!isset($this->config['database_cel']['database_migration']) || $this->config['database_cel']['database_migration'] == '') {
144
			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";
144
			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";
145
			exit;
145
			exit;
146
		}
146
		}
147
		
147
 
148
		if(!isset($this->config['database_ident']['database']) || $this->config['database_ident']['database'] == '') {
148
		if(!isset($this->config['database_ident']['database']) || $this->config['database_ident']['database'] == '') {
149
			echo 'Attention la variable de configuration database dans la section database_ident, contenant la base de données utilisateurs, doit être remplie '."\n";
149
			echo 'Attention la variable de configuration database dans la section database_ident, contenant la base de données utilisateurs, doit être remplie '."\n";
150
			exit;
150
			exit;
151
		}
151
		}
152
		
152
 
153
		self::$bdd_cel_migration = $this->config['database_cel']['database_migration'];
153
		self::$bdd_cel_migration = $this->config['database_cel']['database_migration'];
154
		self::$bdd_utilisateurs = $this->config['database_ident']['database'];
154
		self::$bdd_utilisateurs = $this->config['database_ident']['database'];
155
		
155
 
156
		$this->id_cle_metadonnees = array_merge($this->tableau_ids_tags_exif, $this->tableau_ids_tags_iptc);
156
		$this->id_cle_metadonnees = array_merge($this->tableau_ids_tags_exif, $this->tableau_ids_tags_iptc);
Line 157... Line 157...
157
 
157
 
158
		echo "--MIGRATION DES IMAGES --------------------------------------\n";
158
		echo "--MIGRATION DES IMAGES --------------------------------------\n";
159
		//1. TEMPORAIRE : vider les tables de destinations
159
		//1. TEMPORAIRE : vider les tables de destinations
160
		if (self::truncate) {
160
		if (self::truncate) {
161
			echo "-------------------------------------------------------------------\n\n";
161
			echo "-------------------------------------------------------------------\n\n";
162
			echo "  ETAPE 0. Vider les tables ... \n\n";
162
			echo "  ETAPE 0. Vider les tables ... \n\n";
163
			echo "-------------------------------------------------------------------\n\n";
163
			echo "-------------------------------------------------------------------\n\n";
164
			$nouvellesTables = array('`cel_images`', '`cel_obs_images`');
164
			$nouvellesTables = array('cel_images', 'cel_obs_images');
165
			foreach ($nouvellesTables as $nomTable) {
165
			foreach ($nouvellesTables as $nomTable) {
166
				echo 'Vider la table '.$nomTable.'...';
166
				echo 'Vider la table '.$nomTable.'...';
167
				$requeteTruncate = 'TRUNCATE TABLE '.self::$bdd_cel_migration.'.'.$nomTable;
167
				$requeteTruncate = 'TRUNCATE TABLE '.self::$bdd_cel_migration.'.'.$nomTable;
168
				$resultatTruncate = $this->executerRequete($requeteTruncate);
168
				$resultatTruncate = $this->executerRequete($requeteTruncate);
169
				echo "ok \n";
169
				echo "ok \n";
170
			}
170
			}
171
				
171
 
172
			echo "\n---------------------------------------------------------------- OK\n\n";
172
			echo "\n---------------------------------------------------------------- OK\n\n";
173
		}
173
		}
174
		
174
 
175
		echo "-------------------------------------------------------------------\n\n";
175
		echo "-------------------------------------------------------------------\n\n";
176
		echo "  ETAPE 1. Paramétrage ... \n\n";
176
		echo "  ETAPE 1. Paramétrage ... \n\n";
177
		echo "-------------------------------------------------------------------\n\n";
177
		echo "-------------------------------------------------------------------\n\n";
178
		$this->getUtilisateurs();
178
		$this->getUtilisateurs();
179
		$this->getMotsCles();
179
		$this->getMotsCles();
180
		$this->getObservations();
180
		$this->getObservations();
181
		
181
 
182
		echo "-------------------------------------------------------------------\n\n";
182
		echo "-------------------------------------------------------------------\n\n";
183
		echo "  ETAPE 2. Migration des images ... \n\n";
183
		echo "  ETAPE 2. Migration des images ... \n\n";
184
		echo "-------------------------------------------------------------------\n\n";
184
		echo "-------------------------------------------------------------------\n\n";
185
		$this->migrerImages();
185
		$this->migrerImages();
186
		echo "\n"."\n"."\n";
186
		echo "\n"."\n"."\n";
187
		
187
 
188
		echo "-------------------------------------------------------------------\n\n";
188
		echo "-------------------------------------------------------------------\n\n";
189
		echo "  ETAPE 3. migration des liaisons obs images ... \n\n";
189
		echo "  ETAPE 3. migration des liaisons obs images ... \n\n";
190
		echo "-------------------------------------------------------------------\n\n";
190
		echo "-------------------------------------------------------------------\n\n";
191
		$this->migrerLiaisonsObsImages();
191
		$this->migrerLiaisonsObsImages();
192
		echo "\n"."\n"."\n";
192
		echo "\n"."\n"."\n";
193
	}
193
	}
194
	
194
 
195
	private function getUtilisateurs() {
195
	private function getUtilisateurs() {
196
		echo "\n-------------------------------------------------------------------\n";
196
		echo "\n-------------------------------------------------------------------\n";
197
		echo "--SELECTION DES UTILISATEURS---------------------------------------\n\n";
197
		echo "--SELECTION DES UTILISATEURS---------------------------------------\n\n";
198
		
198
 
199
		$requete_selection_utilisateurs = 'SELECT U_ID as id, U_MAIL as mail, U_NAME as nom, U_SURNAME as prenom, U_PASSWD as pass FROM '.self::$bdd_utilisateurs.'.annuaire_tela';
199
		$requete_selection_utilisateurs = 'SELECT U_ID as id, U_MAIL as mail, U_NAME as nom, U_SURNAME as prenom, U_PASSWD as pass FROM '.self::$bdd_utilisateurs.'.annuaire_tela';
200
		$tableau_utilisateurs = $this->executerRequete($requete_selection_utilisateurs);
200
		$tableau_utilisateurs = $this->executerRequete($requete_selection_utilisateurs);
201
		
201
 
202
		foreach( $tableau_utilisateurs as &$utilisateur) {
202
		foreach( $tableau_utilisateurs as &$utilisateur) {
203
			$this->tableau_utilisateurs[$utilisateur['mail']] = $utilisateur;
203
			$this->tableau_utilisateurs[$utilisateur['mail']] = $utilisateur;
204
		}
204
		}
205
		
205
 
206
		echo sizeof($this->tableau_utilisateurs)." utilisateurs sélectionnés";
206
		echo sizeof($this->tableau_utilisateurs)." utilisateurs sélectionnés";
207
		echo "\n-----------------------------------------------------------------OK\n";
207
		echo "\n-----------------------------------------------------------------OK\n";
208
	}
208
	}
209
	
209
 
210
	private function getMotsCles() {
210
	private function getMotsCles() {
211
		echo "\n-------------------------------------------------------------------\n";
211
		echo "\n-------------------------------------------------------------------\n";
212
		echo "--SELECTION DES MOTS-CLES -----------------------------------------\n\n";
212
		echo "--SELECTION DES MOTS-CLES -----------------------------------------\n\n";
213
		
213
 
214
		$requete_selection_mots_cles = 'SELECT cmc_id_proprietaire as id_utilisateur, cmc_id_mot_cle_utilisateur as id_mot_cle, cmc_mot_cle as mot_cle FROM cel_mots_cles_obs';
214
		$requete_selection_mots_cles = 'SELECT cmc_id_proprietaire as id_utilisateur, cmc_id_mot_cle_utilisateur as id_mot_cle, cmc_mot_cle as mot_cle FROM cel_mots_cles_obs';
Line 215... Line 215...
215
		$tableau_mots_cles = $this->executerRequete($requete_selection_mots_cles);
215
		$tableau_mots_cles = $this->executerRequete($requete_selection_mots_cles);
216
 
216
 
217
		foreach( $tableau_mots_cles as &$mot_cle) {
217
		foreach( $tableau_mots_cles as &$mot_cle) {
218
			$this->tableau_mots_cles[$mot_cle['id_utilisateur']][$mot_cle['id_mot_cle']] = $mot_cle;
218
			$this->tableau_mots_cles[$mot_cle['id_utilisateur']][$mot_cle['id_mot_cle']] = $mot_cle;
219
		}
219
		}
220
		
220
 
221
		echo sizeof($this->tableau_mots_cles)." mots-clés sélectionnés";
221
		echo sizeof($this->tableau_mots_cles)." mots-clés sélectionnés";
222
		echo "\n-----------------------------------------------------------------OK\n";
222
		echo "\n-----------------------------------------------------------------OK\n";
223
		
223
 
224
	}
224
	}
225
	
225
 
226
	private function getObservations() {
226
	private function getObservations() {
227
		
227
 
228
		$pas = 5000;
228
		$pas = 5000;
229
		
229
 
230
		$nObs = "SELECT COUNT(*) AS nb FROM cel_inventory";
230
		$nObs = "SELECT COUNT(*) AS nb FROM cel_inventory";
231
		$resultatNbObs = $this->executerRequete($nObs);
231
		$resultatNbObs = $this->executerRequete($nObs);
232
		$nbObs = $resultatNbObs[0]['nb'];
232
		$nbObs = $resultatNbObs[0]['nb'];
233
		
233
 
234
		for ($i = 0; $i < 230000; $i += $pas ) {
234
		for ($i = 0; $i < 230000; $i += $pas ) {
235
			$requete_selection_observations = 'SELECT id, ordre, identifiant FROM cel_inventory LIMIT '.$i.", $pas";
235
			$requete_selection_observations = 'SELECT id, ordre, identifiant FROM cel_inventory LIMIT '.$i.", $pas";
236
			$tableau_observations = $this->executerRequete($requete_selection_observations);
236
			$tableau_observations = $this->executerRequete($requete_selection_observations);
237
			foreach($tableau_observations as &$obs) {
237
			foreach($tableau_observations as &$obs) {
238
				$this->tableau_observations[$obs['identifiant']][$obs['ordre']] = $obs['id'];
238
				$this->tableau_observations[$obs['identifiant']][$obs['ordre']] = $obs['id'];
239
			}
239
			}
240
			
240
 
241
			$this->afficherAvancement('Selection des observations (par '.$pas.' )', $nbObs);
241
			$this->afficherAvancement('Selection des observations (par '.$pas.' )', $nbObs);
242
		}
242
		}
243
		
243
 
244
		echo "\n\n";
244
		echo "\n\n";
245
	}
245
	}
246
		
246
 
247
	public function executerRequeteSimple($requete) {
247
	public function executerRequeteSimple($requete) {
248
		// Fonction de commodité pour afficher les requetes au lieu de les executer
248
		// Fonction de commodité pour afficher les requetes au lieu de les executer
249
		if (self::dry_run) {
249
		if (self::dry_run) {
250
			echo str_replace('),','),'."\n", $requete)."\n";	
250
			echo str_replace('),','),'."\n", $requete)."\n";
251
			return true;
251
			return true;
252
		} else {
252
		} else {
253
			return parent::executerRequeteSimple($requete);
253
			return parent::executerRequeteSimple($requete);
254
		}
254
		}
255
	}
255
	}
256
	
256
 
257
	private function migrerImages() {
257
	private function migrerImages() {
258
		
258
 
259
		$debut = 0;
259
		$debut = 0;
260
		$pas = 200; 
260
		$pas = 200;
261
		$fin = 150000; 
261
		$fin = 150000;
262
		
262
 
263
		//Selectionner le nombre d'images
263
		//Selectionner le nombre d'images
264
		$requeteNbImg = "SELECT COUNT(*) as nb FROM cel_images";
264
		$requeteNbImg = "SELECT COUNT(*) as nb FROM cel_images";
265
		$resultatNbImg = $this->executerRequete($requeteNbImg);
265
		$resultatNbImg = $this->executerRequete($requeteNbImg);
266
		$fin = $resultatNbImg[0]['nb'];
266
		$fin = $resultatNbImg[0]['nb'];
267
		
267
 
268
		for ($i = $debut; $i <= $fin ; $i += $pas) {
268
		for ($i = $debut; $i <= $fin ; $i += $pas) {
269
			$requete_selection_images = 'SELECT * FROM cel_images '.
269
			$requete_selection_images = 'SELECT * FROM cel_images '.
270
											'ORDER BY ci_id_image ASC LIMIT '.$i.','.$pas;
270
											'ORDER BY ci_id_image ASC LIMIT '.$i.','.$pas;
271
											
271
 
272
			$images = @$this->requeter($requete_selection_images);	
272
			$images = @$this->requeter($requete_selection_images);
273
			
273
 
274
			$requete_insertion_images = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_images (';
274
			$requete_insertion_images = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_images (';
275
			foreach ($this->tableau_nouveau_ancien as $nouveau_champ => $ancien_champ) {
275
			foreach ($this->tableau_nouveau_ancien as $nouveau_champ => $ancien_champ) {
276
				$requete_insertion_images .= $nouveau_champ.',';
276
				$requete_insertion_images .= $nouveau_champ.',';
277
			}		
277
			}
278
			$requete_insertion_images = rtrim($requete_insertion_images, ',');
278
			$requete_insertion_images = rtrim($requete_insertion_images, ',');
279
			
279
 
280
			$requete_insertion_images = $requete_insertion_images.') VALUES ';
280
			$requete_insertion_images = $requete_insertion_images.') VALUES ';
281
			
281
 
282
			if (is_array($images)) { 
282
			if (is_array($images)) {
283
				
283
 
284
				$nb_images_a_traiter = count($images);
284
				$nb_images_a_traiter = count($images);
285
				
285
 
286
				foreach($images as $image) {
286
				foreach($images as $image) {
287
					
287
 
288
					$nouvelle_image = $this->traiterLigneImage($image);
288
					$nouvelle_image = $this->traiterLigneImage($image);
289
					
289
 
290
					$nouvelle_image = array_map(array($this,'proteger'),$nouvelle_image);
290
					$nouvelle_image = array_map(array($this,'proteger'),$nouvelle_image);
291
					$requete_insertion_images .= '('.join(',',array_values($nouvelle_image)).'),';
291
					$requete_insertion_images .= '('.join(',',array_values($nouvelle_image)).'),';
292
				}
292
				}
293
				
293
 
294
				$requete_insertion_images = rtrim($requete_insertion_images, ',');
294
				$requete_insertion_images = rtrim($requete_insertion_images, ',');
295
				$migration_images = $this->executer($requete_insertion_images);
295
				$migration_images = $this->executer($requete_insertion_images);
296
				
296
 
297
				if (!$migration_images) {
297
				if (!$migration_images) {
298
					echo 'la migration des images '.$i.' à '.($i+$nb_images_a_traiter).' a échoué '."\n";
298
					echo 'la migration des images '.$i.' à '.($i+$nb_images_a_traiter).' a échoué '."\n";
299
				} else {
299
				} else {
300
					$this->afficherAvancement('Migration des images (par '.$pas.' )', $fin);
300
					$this->afficherAvancement('Migration des images (par '.$pas.' )', $fin);
301
				} 
301
				}
302
			}
302
			}
303
			
303
 
304
			if(count($images) < $pas) {
304
			if(count($images) < $pas) {
305
				echo "\n---------------------------------------------------------------- OK\n\n";
305
				echo "\n---------------------------------------------------------------- OK\n\n";
306
				return;
306
				return;
307
			}
307
			}
308
		}
308
		}
309
	}
309
	}
310
	
310
 
311
	private function migrerLiaisonsObsImages() {
311
	private function migrerLiaisonsObsImages() {
312
		$debut = 0;
312
		$debut = 0;
313
		$pas = 500; 
313
		$pas = 500;
314
		$fin = 50000; 
314
		$fin = 50000;
315
		
315
 
316
		$liaisons_obs_inexistantes = 0;
316
		$liaisons_obs_inexistantes = 0;
317
		
317
 
318
		//Selectionner le nombre de liaisons
318
		//Selectionner le nombre de liaisons
319
		$requeteNbImgObs = "SELECT COUNT(*) as nb FROM cel_obs_images";
319
		$requeteNbImgObs = "SELECT COUNT(*) as nb FROM cel_obs_images";
320
		$resultatNbImgObs = $this->executerRequete($requeteNbImgObs);
320
		$resultatNbImgObs = $this->executerRequete($requeteNbImgObs);
321
		$fin = $resultatNbImgObs[0]['nb'];
321
		$fin = $resultatNbImgObs[0]['nb'];
322
		
322
 
323
		for ($i = $debut; $i <= $fin ; $i += $pas) {
323
		for ($i = $debut; $i <= $fin ; $i += $pas) {
324
			
324
 
325
			if($i > $fin) {
325
			if($i > $fin) {
326
				$i = $fin;
326
				$i = $fin;
327
			}
327
			}
328
			
328
 
329
			$requete_selection_liaisons = 'SELECT * FROM cel_obs_images LIMIT '.$i.','.$pas;
329
			$requete_selection_liaisons = 'SELECT * FROM cel_obs_images LIMIT '.$i.','.$pas;
330
			$tableau_liaisons = $this->executerRequete($requete_selection_liaisons);
330
			$tableau_liaisons = $this->executerRequete($requete_selection_liaisons);
331
			
331
 
332
			$requete_migration_liaison = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_obs_images '.
332
			$requete_migration_liaison = 'INSERT INTO '.self::$bdd_cel_migration.'.cel_obs_images '.
333
											'(id_image, id_utilisateur, id_observation, date_liaison) '.
333
											'(id_image, id_utilisateur, id_observation, date_liaison) '.
334
											'VALUES ';
334
											'VALUES ';
335
											
335
 
336
			$sous_requete_insertion = '';
336
			$sous_requete_insertion = '';
337
			
337
 
338
			if(is_array($tableau_liaisons)) {
338
			if(is_array($tableau_liaisons)) {
339
				foreach($tableau_liaisons as &$liaison) {
339
				foreach($tableau_liaisons as &$liaison) {
340
					
340
 
341
					$mail_utilisateur = $liaison['coi_ce_utilisateur'];
341
					$mail_utilisateur = $liaison['coi_ce_utilisateur'];
342
					$utilisateur = $this->renvoyerIdPourMigration($mail_utilisateur);
342
					$utilisateur = $this->renvoyerIdPourMigration($mail_utilisateur);
343
					
343
 
344
					$id_obs = $liaison['coi_ce_observation'];
344
					$id_obs = $liaison['coi_ce_observation'];
345
				
345
 
346
					if (isset($this->tableau_observations[$mail_utilisateur][$id_obs])) {
346
					if (isset($this->tableau_observations[$mail_utilisateur][$id_obs])) {
347
						$id_obs =  $this->tableau_observations[$mail_utilisateur][$id_obs];
347
						$id_obs =  $this->tableau_observations[$mail_utilisateur][$id_obs];
348
						
348
 
349
						$sous_requete_insertion .= '('.$this->proteger($liaison['coi_ce_image']).','.
349
						$sous_requete_insertion .= '('.$this->proteger($liaison['coi_ce_image']).','.
350
							$this->proteger($utilisateur).','.
350
							$this->proteger($utilisateur).','.
351
							$this->proteger($id_obs).','.
351
							$this->proteger($id_obs).','.
352
							$this->proteger($liaison['coi_date_liaison']).
352
							$this->proteger($liaison['coi_date_liaison']).
353
						'),';
353
						'),';
354
					} else {
354
					} else {
355
						// cas d'une observation inexistante, la liaison est ignorée
355
						// cas d'une observation inexistante, la liaison est ignorée
356
						$liaisons_obs_inexistantes++;
356
						$liaisons_obs_inexistantes++;
357
					}
357
					}
358
				}
358
				}
359
				
359
 
360
				$sous_requete_insertion = rtrim($sous_requete_insertion,',');
360
				$sous_requete_insertion = rtrim($sous_requete_insertion,',');
361
				$requete_migration_liaison = $requete_migration_liaison.$sous_requete_insertion;
361
				$requete_migration_liaison = $requete_migration_liaison.$sous_requete_insertion;
362
				
362
 
363
				$migration_liaison = $this->executerRequeteSimple($requete_migration_liaison);
363
				$migration_liaison = $this->executerRequeteSimple($requete_migration_liaison);
364
				
364
 
365
				if (!$migration_liaison) {
365
				if (!$migration_liaison) {
366
					echo 'la migration des liaisons obs images de '.$i.' à '.($i+$pas).' a échoué ! '."\n<br />";
366
					echo 'la migration des liaisons obs images de '.$i.' à '.($i+$pas).' a échoué ! '."\n<br />";
367
				} else {
367
				} else {
368
					$this->afficherAvancement('Migration des liaisons obs images (par '.$pas.' )', $fin);
368
					$this->afficherAvancement('Migration des liaisons obs images (par '.$pas.' )', $fin);
369
				} 
369
				}
370
			}
370
			}
371
		}
371
		}
372
		echo "\n\n";
372
		echo "\n\n";
373
		echo $liaisons_obs_inexistantes ? $liaisons_obs_inexistantes." liaisons image obs ont été ignorées car les obs sont absentes" : '' ;
373
		echo $liaisons_obs_inexistantes ? $liaisons_obs_inexistantes." liaisons image obs ont été ignorées car les obs sont absentes" : '' ;
374
		echo "\n";
374
		echo "\n";
375
		echo "\n---------------------------------------------------------------- OK\n\n";
375
		echo "\n---------------------------------------------------------------- OK\n\n";
376
	}
376
	}
377
	
377
 
378
	private function traiterLigneImage($image) {
378
	private function traiterLigneImage($image) {
379
		
379
 
380
		$nouvelle_image = array();
380
		$nouvelle_image = array();
381
		
381
 
382
		foreach ($this->tableau_nouveau_ancien as $nouveau_champ_image => $ancien_champ_image) { 
382
		foreach ($this->tableau_nouveau_ancien as $nouveau_champ_image => $ancien_champ_image) {
383
			
383
 
384
			if ($this->estUnChampATraiter($ancien_champ_image)) {
384
			if ($this->estUnChampATraiter($ancien_champ_image)) {
385
				if (method_exists($this,$ancien_champ_image)) {
385
				if (method_exists($this,$ancien_champ_image)) {
386
					$nouvelle_image[$nouveau_champ_image] = $this->$ancien_champ_image($image);
386
					$nouvelle_image[$nouveau_champ_image] = $this->$ancien_champ_image($image);
Line 391... Line 391...
391
 
391
 
392
			} else {
392
			} else {
393
				$nouvelle_image[$nouveau_champ_image] = $image[$ancien_champ_image];
393
				$nouvelle_image[$nouveau_champ_image] = $image[$ancien_champ_image];
394
			}
394
			}
395
		}
395
		}
396
		
396
 
397
		return $nouvelle_image;
397
		return $nouvelle_image;
398
	}
398
	}
399
	
399
 
400
	private function estUnChampATraiter($champ) {
400
	private function estUnChampATraiter($champ) {
401
				
401
 
402
		return strpos($champ, 'traiter') !== false;
402
		return strpos($champ, 'traiter') !== false;
403
	}
403
	}
404
	
404
 
405
	private function traiterMotsClesTexte($ligne_image) {
405
	private function traiterMotsClesTexte($ligne_image) {
406
		
406
 
407
		$mail_image = $ligne_image['ci_ce_utilisateur'];
407
		$mail_image = $ligne_image['ci_ce_utilisateur'];
408
		$retour = $ligne_image['ci_meta_mots_cles'];
408
		$retour = $ligne_image['ci_meta_mots_cles'];
409
		
409
 
410
		if (isset($this->tableau_mots_cles[$mail_image])) {
410
		if (isset($this->tableau_mots_cles[$mail_image])) {
411
			
411
 
412
			$mots_cles_tableau = $this->parserMotsCles($mail_image, $ligne_image['ci_meta_mots_cles'], ',');
412
			$mots_cles_tableau = $this->parserMotsCles($mail_image, $ligne_image['ci_meta_mots_cles'], ',');
413
			$retour =  join(';',$mots_cles_tableau);
413
			$retour =  join(';',$mots_cles_tableau);
414
			$retour = ltrim($retour,';;') ;
414
			$retour = ltrim($retour,';;') ;
415
		}
415
		}
416
		
416
 
417
		return $retour;
417
		return $retour;
418
	} 
418
	}
419
	
419
 
420
	private function parserMotsCles($utilisateur, $mot_cles, $separateur = ',') {
420
	private function parserMotsCles($utilisateur, $mot_cles, $separateur = ',') {
421
		
421
 
422
		$tableau_mots_cles = explode($separateur,$mot_cles);
422
		$tableau_mots_cles = explode($separateur,$mot_cles);
423
		$tableau_mots_cles_formates = array();
423
		$tableau_mots_cles_formates = array();
424
		
424
 
425
		foreach($tableau_mots_cles as $mot_cle) {
425
		foreach($tableau_mots_cles as $mot_cle) {
426
			
426
 
427
			$mot_cle = str_replace($separateur.$separateur,'',$mot_cle);
427
			$mot_cle = str_replace($separateur.$separateur,'',$mot_cle);
428
			$mot_cle = str_replace('null','',$mot_cle);
428
			$mot_cle = str_replace('null','',$mot_cle);
429
			
429
 
430
			if ($this->estUnIdentifiantMotCle($mot_cle)) {
430
			if ($this->estUnIdentifiantMotCle($mot_cle)) {
431
				
431
 
432
				// certains mots clés mal formatés contiennent des virgules
432
				// certains mots clés mal formatés contiennent des virgules
433
				if (strpos($mot_cle,',') !== false) {
433
				if (strpos($mot_cle,',') !== false) {
434
					$tab_mot_cle_mal_formate = explode(',',$mot_cle);
434
					$tab_mot_cle_mal_formate = explode(',',$mot_cle);
435
					
435
 
436
					foreach ($tab_mot_cle_mal_formate as $mot_cle_mal_formate) {
436
					foreach ($tab_mot_cle_mal_formate as $mot_cle_mal_formate) {
437
						if ($this->estUnIdentifiantMotCle($mot_cle_mal_formate)) {
437
						if ($this->estUnIdentifiantMotCle($mot_cle_mal_formate)) {
438
							$tableau_mots_cles_formates[$mot_cle_mal_formate] = $this->tableau_mots_cles[$utilisateur][$mot_cle_mal_formate]['mot_cle'];
438
							$tableau_mots_cles_formates[$mot_cle_mal_formate] = $this->tableau_mots_cles[$utilisateur][$mot_cle_mal_formate]['mot_cle'];
439
						}
439
						}
440
					}	
440
					}
441
				} else {
441
				} else {
442
					// on met le mot clé dans sa propre case afin d'éviter
442
					// on met le mot clé dans sa propre case afin d'éviter
443
					// facilement les doublons provoqués par de mauvais formatages 
443
					// facilement les doublons provoqués par de mauvais formatages
444
					if(isset($this->tableau_mots_cles[$utilisateur][$mot_cle])) {
444
					if(isset($this->tableau_mots_cles[$utilisateur][$mot_cle])) {
445
						$tableau_mots_cles_formates[$mot_cle] = $this->tableau_mots_cles[$utilisateur][$mot_cle]['mot_cle'];
445
						$tableau_mots_cles_formates[$mot_cle] = $this->tableau_mots_cles[$utilisateur][$mot_cle]['mot_cle'];
446
					}
446
					}
Line 447... Line 447...
447
				}
447
				}
448
 
448
 
449
			}
449
			}
450
		}
450
		}
451
		
451
 
452
		return $tableau_mots_cles_formates;
452
		return $tableau_mots_cles_formates;
453
	}
453
	}
454
	
454
 
455
	private function estUnIdentifiantMotCle($chaine) {
455
	private function estUnIdentifiantMotCle($chaine) {
456
		return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ;
456
		return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ;
457
	}
457
	}
458
	
458
 
459
	private function traiterIdentifiantUtilisateur($ligne_image) {
459
	private function traiterIdentifiantUtilisateur($ligne_image) {
460
		
460
 
461
		$mail_image = $ligne_image['ci_ce_utilisateur'];
461
		$mail_image = $ligne_image['ci_ce_utilisateur'];
462
		$retour = $this->renvoyerIdPourMigration($mail_image);
462
		$retour = $this->renvoyerIdPourMigration($mail_image);
463
		
463
 
464
		return $retour;
464
		return $retour;
465
	}
465
	}
466
	
466
 
467
	private function traiterPrenomUtilisateur($ligne_image) {
467
	private function traiterPrenomUtilisateur($ligne_image) {
468
		
468
 
469
		$mail_image = $ligne_image['ci_ce_utilisateur'];
469
		$mail_image = $ligne_image['ci_ce_utilisateur'];
470
		$retour = $mail_image;
470
		$retour = $mail_image;
471
		
471
 
472
		if (isset($this->tableau_utilisateurs[$mail_image])) {
472
		if (isset($this->tableau_utilisateurs[$mail_image])) {
473
			$retour =  $this->tableau_utilisateurs[$mail_image]['prenom'];
473
			$retour =  $this->tableau_utilisateurs[$mail_image]['prenom'];
474
		} else {
474
		} else {
475
			$retour = '';
475
			$retour = '';
476
		}
476
		}
477
		
477
 
478
		return $retour;
478
		return $retour;
479
	}
479
	}
480
	
480
 
481
	private function traiterNomUtilisateur($ligne_image) {
481
	private function traiterNomUtilisateur($ligne_image) {
482
		
482
 
483
		$mail_image = $ligne_image['ci_ce_utilisateur'];
483
		$mail_image = $ligne_image['ci_ce_utilisateur'];
484
		$retour = $mail_image;
484
		$retour = $mail_image;
485
		
485
 
486
		if (isset($this->tableau_utilisateurs[$mail_image])) {
486
		if (isset($this->tableau_utilisateurs[$mail_image])) {
487
			$retour =  $this->tableau_utilisateurs[$mail_image]['nom'];
487
			$retour =  $this->tableau_utilisateurs[$mail_image]['nom'];
488
		} else {
488
		} else {
489
			$retour = '';
489
			$retour = '';
490
		}
490
		}
491
		
491
 
492
		return $retour;
492
		return $retour;
493
	}
493
	}
494
	
494
 
495
	private function decoderTableauMetaDonnees($chaine) {
495
	private function decoderTableauMetaDonnees($chaine) {
Line 496... Line 496...
496
		
496
 
497
		$tableau_valeurs_decodees = array();
497
		$tableau_valeurs_decodees = array();
498
 
498
 
499
		if (trim($chaine) != '') { 
499
		if (trim($chaine) != '') {
500
			$tableau_meta = explode(self::separateur_champs_metadonnees,$chaine);
500
			$tableau_meta = explode(self::separateur_champs_metadonnees,$chaine);
501
			foreach ($tableau_meta as &$chaine_meta) {
501
			foreach ($tableau_meta as &$chaine_meta) {
502
				
502
 
503
				$cle_valeur = explode(self::separateur_valeurs_metadonnees, $chaine_meta);
503
				$cle_valeur = explode(self::separateur_valeurs_metadonnees, $chaine_meta);
504
				if (is_array($cle_valeur) && count($cle_valeur) == 2) {
504
				if (is_array($cle_valeur) && count($cle_valeur) == 2) {
505
					$cle = ltrim($cle_valeur[0],' ');
505
					$cle = ltrim($cle_valeur[0],' ');
506
					$tableau_valeurs_decodees[$cle] = $cle_valeur[1];
506
					$tableau_valeurs_decodees[$cle] = $cle_valeur[1];
507
				}
507
				}
508
			}
508
			}
509
		}
509
		}
510
		
510
 
511
		return $tableau_valeurs_decodees;
511
		return $tableau_valeurs_decodees;
512
	}
512
	}
513
	
513
 
514
	private function convertirTableauMetadonneesEnXml($tableau) {
514
	private function convertirTableauMetadonneesEnXml($tableau) {
515
		
515
 
Line 516... Line 516...
516
		$xml = '';
516
		$xml = '';
517
		
517
 
518
		foreach($tableau as $cle => $valeur) {
518
		foreach($tableau as $cle => $valeur) {
Line 524... Line 524...
524
			$cle = str_replace(' ','',ucwords($cle));
524
			$cle = str_replace(' ','',ucwords($cle));
525
			$valeur = str_replace("\0",'',$valeur);
525
			$valeur = str_replace("\0",'',$valeur);
526
			$id = isset($this->id_cle_metadonnees[$cle]) ? $this->id_cle_metadonnees[$cle] : $cle;
526
			$id = isset($this->id_cle_metadonnees[$cle]) ? $this->id_cle_metadonnees[$cle] : $cle;
527
			$xml .= '<'.$cle.' id="'.$id.'">'.$valeur.'</'.$cle.'>'."\n";
527
			$xml .= '<'.$cle.' id="'.$id.'">'.$valeur.'</'.$cle.'>'."\n";
528
		}
528
		}
529
		
529
 
530
		return $xml;
530
		return $xml;
531
	}
531
	}
532
	
532
 
533
	private function peutUtiliserExifTool() {
533
	private function peutUtiliserExifTool() {
534
		return file_exists('/usr/bin/exiftool') && is_executable('/usr/bin/exiftool');
534
		return file_exists('/usr/bin/exiftool') && is_executable('/usr/bin/exiftool');
535
	}
535
	}
536
	
536
 
537
	private function decoderMetadonnees($chemin_image) {
537
	private function decoderMetadonnees($chemin_image) {
538
		
538
 
539
		$res = '';
539
		$res = '';
540
		
540
 
541
		if($this->peutUtiliserExifTool()) {
541
		if($this->peutUtiliserExifTool()) {
542
			$res = $this->decoderMetadonneesExifTool($chemin_image);
542
			$res = $this->decoderMetadonneesExifTool($chemin_image);
543
			
543
 
544
			$xml_meta = '<?xml version="1.0" encoding="UTF-8" ?>';
544
			$xml_meta = '<?xml version="1.0" encoding="UTF-8" ?>';
545
			$xml_meta .= '<exif>';
545
			$xml_meta .= '<exif>';
546
			
546
 
547
			foreach($res['EXIF'] as $prop => $valeur) {
547
			foreach($res['EXIF'] as $prop => $valeur) {
548
				$xml_meta .= '    <'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
548
				$xml_meta .= '    <'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
549
			}
549
			}
550
			$xml_meta .= '</exif>'."\n";
550
			$xml_meta .= '</exif>'."\n";
551
			
551
 
552
			$xml_meta .= '<iptc>';
552
			$xml_meta .= '<iptc>';
553
			foreach($res['IPTC'] as $prop => $valeur) {
553
			foreach($res['IPTC'] as $prop => $valeur) {
554
				$xml_meta .= '    <'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
554
				$xml_meta .= '    <'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
555
			}
555
			}
556
			$xml_meta .= '</iptc>'."\n";
556
			$xml_meta .= '</iptc>'."\n";
557
			
557
 
558
			$xml_meta .= '<xmp>';
558
			$xml_meta .= '<xmp>';
559
			foreach($res['XMP'] as $prop => $valeur) {
559
			foreach($res['XMP'] as $prop => $valeur) {
560
				$xml_meta .= '    <'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
560
				$xml_meta .= '    <'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
561
			}
561
			}
562
			$xml_meta .= '</xmp>'."\n";
562
			$xml_meta .= '</xmp>'."\n";
563
		} else {
563
		} else {
564
			
564
 
565
		}
565
		}
566
		
566
 
567
		return $xml_meta;
567
		return $xml_meta;
568
	}
568
	}
569
	
569
 
570
	private function decoderMetadonneesExifTool($chemin_image) {
570
	private function decoderMetadonneesExifTool($chemin_image) {
571
		$metadata = array();
571
		$metadata = array();
572
		$res = exec('/usr/bin/exiftool -g -D '.$chemin_image, $metadata);	
572
		$res = exec('/usr/bin/exiftool -g -D '.$chemin_image, $metadata);
573
		
573
 
574
		$metadata_decodees = array();
574
		$metadata_decodees = array();
575
		
575
 
576
		$categorie = '';
576
		$categorie = '';
577
		foreach($metadata as &$data) {
577
		foreach($metadata as &$data) {
578
			if($this->estUnSeparateurCategorieExifTool($data)) {
578
			if($this->estUnSeparateurCategorieExifTool($data)) {
579
				$categorie = trim(str_replace('----','',$data));
579
				$categorie = trim(str_replace('----','',$data));
580
			} else {
580
			} else {
Line 582... Line 582...
582
				$cle_metadonnee = str_replace(' ', '', $data_decodee['cle']);
582
				$cle_metadonnee = str_replace(' ', '', $data_decodee['cle']);
583
				$metadata_decodees[$categorie][$cle_metadonnee] = $data_decodee;
583
				$metadata_decodees[$categorie][$cle_metadonnee] = $data_decodee;
584
				$this->id_cle_metadonnees[$cle_metadonnee] = $data_decodee['id'];
584
				$this->id_cle_metadonnees[$cle_metadonnee] = $data_decodee['id'];
585
			}
585
			}
586
		}
586
		}
587
		
587
 
588
		return $metadata_decodees;
588
		return $metadata_decodees;
589
	}
589
	}
590
	
590
 
591
	private function estUnSeparateurCategorieExifTool($data) {
591
	private function estUnSeparateurCategorieExifTool($data) {
592
		return preg_match('^---- (.)* ----^',$data);	
592
		return preg_match('^---- (.)* ----^',$data);
593
	}
593
	}
594
	
594
 
595
	private function parserValeurMetadonneeExifTool($data) {
595
	private function parserValeurMetadonneeExifTool($data) {
596
		$cle_valeur = explode(':',$data);
596
		$cle_valeur = explode(':',$data);
597
		
597
 
598
		$valeur = '';
598
		$valeur = '';
599
		if(count($cle_valeur) == 2) {
599
		if(count($cle_valeur) == 2) {
600
			$valeur	= trim($cle_valeur[1]);
600
			$valeur	= trim($cle_valeur[1]);
601
		}
601
		}
602
		
602
 
603
		$id_cle = explode(' ',trim($cle_valeur[0]),2);
603
		$id_cle = explode(' ',trim($cle_valeur[0]),2);
604
		
604
 
605
		$id_cle[1] = str_replace(array('-','/'),'',$id_cle[1]);
605
		$id_cle[1] = str_replace(array('-','/'),'',$id_cle[1]);
606
				
606
 
607
		$cle_id_valeur = array('cle' => $id_cle[1], 'id' => str_replace('-','',$id_cle[0]), 'valeur' => $valeur);
607
		$cle_id_valeur = array('cle' => $id_cle[1], 'id' => str_replace('-','',$id_cle[0]), 'valeur' => $valeur);
608
		return $cle_id_valeur;		
608
		return $cle_id_valeur;
609
	}
609
	}
610
	
610
 
611
	private function traiterExif($ligne_image) {
611
	private function traiterExif($ligne_image) {
Line 612... Line 612...
612
 
612
 
613
		$metadonnees_autres = $this->decoderTableauMetaDonnees($ligne_image['ci_meta_exif_autres']);
613
		$metadonnees_autres = $this->decoderTableauMetaDonnees($ligne_image['ci_meta_exif_autres']);
614
		$metadonnees = array_intersect_key($ligne_image, array_flip($this->champs_exifs_non_gardes))+$metadonnees_autres;
614
		$metadonnees = array_intersect_key($ligne_image, array_flip($this->champs_exifs_non_gardes))+$metadonnees_autres;
615
		
615
 
616
		$xml_meta = '<?xml version="1.0" encoding="UTF-8" ?>';
616
		$xml_meta = '<?xml version="1.0" encoding="UTF-8" ?>';
617
		$xml_meta .= '<exif>';
617
		$xml_meta .= '<exif>';
618
		$xml_meta .= $this->convertirTableauMetadonneesEnXml($metadonnees);
618
		$xml_meta .= $this->convertirTableauMetadonneesEnXml($metadonnees);
619
		$xml_meta .= '</exif>';
619
		$xml_meta .= '</exif>';
620
		
620
 
621
		return $xml_meta;
621
		return $xml_meta;
622
	}
622
	}
623
	
623
 
624
	private function traiterIptc($ligne_image) {
624
	private function traiterIptc($ligne_image) {
625
		
625
 
626
		$metadonnees_autres = $this->decoderTableauMetaDonnees($ligne_image['ci_meta_iptc_autres']);
626
		$metadonnees_autres = $this->decoderTableauMetaDonnees($ligne_image['ci_meta_iptc_autres']);
627
		$metadonnees = array_intersect_key($ligne_image, array_flip($this->champs_iptc_non_gardes))+$metadonnees_autres;
627
		$metadonnees = array_intersect_key($ligne_image, array_flip($this->champs_iptc_non_gardes))+$metadonnees_autres;
628
		
628
 
629
		$xml_meta = '<?xml version="1.0" encoding="UTF-8" ?>';
629
		$xml_meta = '<?xml version="1.0" encoding="UTF-8" ?>';
630
		$xml_meta .= '<iptc>';
630
		$xml_meta .= '<iptc>';
631
		$xml_meta .= $this->convertirTableauMetadonneesEnXml($metadonnees);
631
		$xml_meta .= $this->convertirTableauMetadonneesEnXml($metadonnees);
632
		$xml_meta .= '</iptc>';
632
		$xml_meta .= '</iptc>';
633
		
633
 
634
		return $xml_meta;
634
		return $xml_meta;
635
	}
635
	}
636
	
636
 
637
	private function traiterXmp($ligne_image) {
637
	private function traiterXmp($ligne_image) {
638
		
638
 
639
		$chemin = $this->obtenirCheminImageOriginale($ligne_image['ci_id_image']);
639
		$chemin = $this->obtenirCheminImageOriginale($ligne_image['ci_id_image']);
640
		// TODO décommenté car pour le moment ça n'est pas necessaire, à éxécuter à part
640
		// TODO décommenté car pour le moment ça n'est pas necessaire, à éxécuter à part
641
		//$res = $this->decoderMetadonneesExifTool($chemin);
641
		//$res = $this->decoderMetadonneesExifTool($chemin);
642
		$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
642
		$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
Line 645... Line 645...
645
			foreach ($res['XMP'] as $prop => $valeur) {
645
			foreach ($res['XMP'] as $prop => $valeur) {
646
				$xml .= '    <'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
646
				$xml .= '    <'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
647
			}
647
			}
648
		}
648
		}
649
		$xml .= '</xmp>';
649
		$xml .= '</xmp>';
650
		
650
 
651
		return $xml;
651
		return $xml;
652
	}
652
	}
653
	
653
 
654
	private function traiterMakernote($ligne_image) {
654
	private function traiterMakernote($ligne_image) {
655
		
655
 
656
		$chemin = $this->obtenirCheminImageOriginale($ligne_image['ci_id_image']);
656
		$chemin = $this->obtenirCheminImageOriginale($ligne_image['ci_id_image']);
657
		//$res = $this->decoderMetadonneesExifTool($chemin);
657
		//$res = $this->decoderMetadonneesExifTool($chemin);
658
		$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
658
		$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
659
		$xml .= '<makernote>';
659
		$xml .= '<makernote>';
660
		if (isset($res['MAKERNOTE'])) {
660
		if (isset($res['MAKERNOTE'])) {
661
			foreach ($res['MAKERNOTE'] as $prop => $valeur) {
661
			foreach ($res['MAKERNOTE'] as $prop => $valeur) {
662
				$xml .= '    <'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
662
				$xml .= '    <'.$prop.' id="'.$valeur['id'].'">'.$valeur['valeur'].'</'.$prop.'>'."\n";
663
			}
663
			}
664
		}
664
		}
665
		$xml .= '</makernote>';
665
		$xml .= '</makernote>';
666
		
666
 
667
		return '';
667
		return '';
668
	}
668
	}
669
	
669
 
670
	public function obtenirCheminImageOriginale($id_image) {
670
	public function obtenirCheminImageOriginale($id_image) {
671
		$nom = $this->convertirIdBddVersNomFichier($id_image, 'O');
671
		$nom = $this->convertirIdBddVersNomFichier($id_image, 'O');
672
		$dossier = $this->obtenirDossierPourFormat($id_image,'O');
672
		$dossier = $this->obtenirDossierPourFormat($id_image,'O');
673
		
673
 
674
		return $dossier.'/'.$nom;
674
		return $dossier.'/'.$nom;
675
	}
675
	}
676
	
676
 
677
	public function convertirIdBddVersNomFichier($id, $format, $extension = 'jpg') {
677
	public function convertirIdBddVersNomFichier($id, $format, $extension = 'jpg') {
678
		// creation du format original
678
		// creation du format original
679
		$id_avec_zeros = sprintf('%09s', $id) ;
679
		$id_avec_zeros = sprintf('%09s', $id) ;
680
		$id_avec_zeros_underscores = wordwrap($id_avec_zeros, 3 , '_', true) ;
680
		$id_avec_zeros_underscores = wordwrap($id_avec_zeros, 3 , '_', true) ;
681
		
681
 
682
		$nom_fichier = $id_avec_zeros_underscores.'_'.$format.'.'.$extension;
682
		$nom_fichier = $id_avec_zeros_underscores.'_'.$format.'.'.$extension;
683
		
683
 
684
		return $nom_fichier;
684
		return $nom_fichier;
685
	}
685
	}
686
	
686
 
687
	public function obtenirDossierPourFormat($id, $format) {
687
	public function obtenirDossierPourFormat($id, $format) {
688
		$chemin_base = $this->config['cel']['chemin_images'];
688
		$chemin_base = $this->config['cel']['chemin_images'];
689
	
689
 
690
		$chemin_sur_serveur = $chemin_base;
690
		$chemin_sur_serveur = $chemin_base;
691
	
691
 
692
		$id = sprintf('%09s', $id);
692
		$id = sprintf('%09s', $id);
693
		$id = wordwrap($id, 3 , '_', true);
693
		$id = wordwrap($id, 3 , '_', true);
694
	
694
 
695
		list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);
695
		list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);
696
	
696
 
697
		$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/'.$format;
697
		$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/'.$format;
698
		
698
 
699
		return $chemin_sur_serveur_final;
699
		return $chemin_sur_serveur_final;
700
	}
700
	}
701
	
701
 
702
	private function renvoyerIdPourMigration($utilisateur) {
702
	private function renvoyerIdPourMigration($utilisateur) {
703
		// si tout les test suivant échouent, on garde l'utilisateur tel quel
703
		// si tout les test suivant échouent, on garde l'utilisateur tel quel
704
		// (cas de la chaine de session des utilisateur anonymes)
704
		// (cas de la chaine de session des utilisateur anonymes)
705
		$retour = $utilisateur;
705
		$retour = $utilisateur;
706
		// si le mail correspond a un utilisateur de la bdd
706
		// si le mail correspond a un utilisateur de la bdd
Line 711... Line 711...
711
			// sinon si c'est un mail inconnu, on garde le md5
711
			// sinon si c'est un mail inconnu, on garde le md5
712
			if($this->mailValide($utilisateur)) {
712
			if($this->mailValide($utilisateur)) {
713
				$retour = md5($utilisateur);
713
				$retour = md5($utilisateur);
714
			}
714
			}
715
		}
715
		}
716
	
716
 
717
		return $retour;
717
		return $retour;
718
	}
718
	}
719
	
719
 
720
	public function mailValide($mail) {
720
	public function mailValide($mail) {
721
		// vérification bidon mais ça suffit pour ici
721
		// vérification bidon mais ça suffit pour ici
722
		return !(strpos('@',$mail) === false); 
722
		return !(strpos('@',$mail) === false);
723
	}
723
	}
724
	
724
 
725
	private $tableau_ids_tags_exif = array('InteropIndex' => '1',
725
	private $tableau_ids_tags_exif = array('InteropIndex' => '1',
726
		'InteropVersion' => '2',
726
		'InteropVersion' => '2',
727
		'ProcessingSoftware' => '11',
727
		'ProcessingSoftware' => '11',
728
		'SubfileType' => '254',
728
		'SubfileType' => '254',
729
		'OldSubfileType' => '255',
729
		'OldSubfileType' => '255',
Line 1135... Line 1135...
1135
		'Saturation' => '65109',
1135
		'Saturation' => '65109',
1136
		'Sharpness' => '65110',
1136
		'Sharpness' => '65110',
1137
		'Smoothness' => '65111',
1137
		'Smoothness' => '65111',
1138
		'MoireFilter' => '65112',
1138
		'MoireFilter' => '65112',
1139
	);
1139
	);
1140
	
1140
 
1141
	private $tableau_ids_tags_iptc = array('ApplicationRecordVersion' => '0',
1141
	private $tableau_ids_tags_iptc = array('ApplicationRecordVersion' => '0',
1142
		'ObjectTypeReference' => '3',
1142
		'ObjectTypeReference' => '3',
1143
		'ObjectAttributeReference' => '4',
1143
		'ObjectAttributeReference' => '4',
1144
		'ObjectName' => '5',
1144
		'ObjectName' => '5',
1145
		'EditStatus' => '7',
1145
		'EditStatus' => '7',