Subversion Repositories eFlore/Applications.cel

Rev

Rev 1198 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1198 Rev 1199
Line 46... Line 46...
46
		self::$bdd_cel_migration = $this->config['database_cel']['database_migration'];
46
		self::$bdd_cel_migration = $this->config['database_cel']['database_migration'];
47
		self::$bdd_utilisateurs = $this->config['database_ident']['database'];
47
		self::$bdd_utilisateurs = $this->config['database_ident']['database'];
Line 48... Line 48...
48
 
48
 
49
		echo "--MIGRATION DES MOTS CLES --------------------------------------\n";
49
		echo "--MIGRATION DES MOTS CLES --------------------------------------\n";
50
		if (self::truncate) {
50
		if (self::truncate) {
51
			echo "-------------------------------------------------------------------\n\n";
51
			echo "-------------------------------------------------------------------\n";
52
			echo "  ETAPE 0. Vider les tables ... \n\n";
52
			echo "  ETAPE 0. Vider les tables ... \n\n";
53
			echo "-------------------------------------------------------------------\n\n";
53
			echo "-------------------------------------------------------------------\n";
54
			$this->viderTables();
54
			$this->viderTables();
55
			echo "\n---------------------------------------------------------------- OK\n\n";
55
			echo "---------------------------------------------------------------- OK\n";
Line 56... Line 56...
56
		}
56
		}
57
 
57
 
58
		echo "-------------------------------------------------------------------\n\n";
58
		echo "-------------------------------------------------------------------\n";
59
		echo "  ETAPE 1. Paramétrage ... \n\n";
59
		echo "  ETAPE 1. Paramétrage ... \n";
60
		echo "-------------------------------------------------------------------\n\n";
60
		echo "-------------------------------------------------------------------\n";
61
		$this->getUtilisateurs();
61
		$this->getUtilisateurs();
62
		echo "\n"."\n"."\n";
62
		echo "\n"."\n"."\n";
63
		echo "-------------------------------------------------------------------\n\n";
63
		echo "-------------------------------------------------------------------\n";
64
		echo "  ETAPE 2. Migration des mots clés ... \n\n";
64
		echo "  ETAPE 2. Migration des mots clés ... \n";
65
		echo "-------------------------------------------------------------------\n\n";
65
		echo "-------------------------------------------------------------------\n";
66
		$this->migrerTableMotsClesObs();
66
		$this->migrerTableMotsClesObs();
67
		echo "\n---------------------------------------------------------------- OK\n\n";
67
		echo "\n---------------------------------------------------------------- OK\n";
68
		$this->migrerTableMotsClesImages();
68
		$this->migrerTableMotsClesImages();
69
		echo "\n"."\n"."\n";
69
		echo "\n"."\n"."\n";
70
		echo "-------------------------------------------------------------------\n\n";
70
		echo "-------------------------------------------------------------------\n";
71
		echo "  ETAPE 3. Migration des liaisons mots clés ... \n\n";
71
		echo "  ETAPE 3. Migration des liaisons mots clés ... \n";
72
		echo "-------------------------------------------------------------------\n\n";
72
		echo "-------------------------------------------------------------------\n";
73
		$this->migrerLiaisonsMotsClesObs();
73
		$this->migrerLiaisonsMotsClesObs();
Line 74... Line 74...
74
		$this->migrerLiaisonsMotsClesImages();
74
		$this->migrerLiaisonsMotsClesImages();
75
		echo "\n"."\n"."\n";
75
		echo "\n"."\n"."\n";
76
 
76
 
77
		echo "-------------------------------------------------------------------\n\n";
77
		echo "-------------------------------------------------------------------\n";
78
		echo "  ETAPE 4. Génération des index des mots clés ... \n\n";
78
		echo "  ETAPE 4. Génération des index des mots clés ... \n";
79
		echo "-------------------------------------------------------------------\n\n";
79
		echo "-------------------------------------------------------------------\n";
80
		$this->genererIndexTexteMotsClesObs();
80
		$this->genererIndexTexteMotsClesObs();
Line 144... Line 144...
144
 
144
 
145
			if (count($arbres_mots_cles) > 0) {
145
			if (count($arbres_mots_cles) > 0) {
146
				$champ_parent = ($image_ou_obs == "obs") ? 'ce_mot_cle_obs_parent' : 'ce_mot_cle_image_parent';
146
				$champ_parent = ($image_ou_obs == "obs") ? 'ce_mot_cle_obs_parent' : 'ce_mot_cle_image_parent';
147
				$champ_id = ($image_ou_obs == "obs") ? 'id_mot_cle_obs' : 'id_mot_cle_image';
147
				$champ_id = ($image_ou_obs == "obs") ? 'id_mot_cle_obs' : 'id_mot_cle_image';
148
				$requete = 'INSERT INTO '.self::$bdd_cel_migration.".cel_mots_cles_$image_ou_obs ".
148
				$requete = 'INSERT INTO '.self::$bdd_cel_migration.".cel_mots_cles_$image_ou_obs ".
149
						"($champ_id, id_utilisateur, mot_cle, md5, bg, bd, niveau, $champ_parent) ".
149
					"($champ_id, id_utilisateur, mot_cle, md5, bg, bd, niveau, $champ_parent) ".
Line 150... Line 150...
150
						'VALUES ';
150
					'VALUES ';
151
 
151
 
152
				$sous_requete = array();
152
				$sous_requete = array();
153
				foreach ($arbres_mots_cles as $arbre_mot_cle) {
153
				foreach ($arbres_mots_cles as $arbre_mot_cle) {
Line 234... Line 234...
234
	}
234
	}
Line 235... Line 235...
235
 
235
 
236
	private function migrerLiaisonsMotsClesObs() {
236
	private function migrerLiaisonsMotsClesObs() {
237
		$requete = 'SELECT mots_cles AS mots_cles, id AS id, identifiant AS id_utilisateur '.
237
		$requete = 'SELECT mots_cles AS mots_cles, id AS id, identifiant AS id_utilisateur '.
238
				'FROM cel_inventory '.
238
				'FROM cel_inventory '.
-
 
239
				'WHERE mots_cles != "" '.
-
 
240
				'	AND mots_cles != "NULL" '.
239
				'WHERE mots_cles != "" '.
241
				'	AND mots_cles != "null" '.
240
				'	AND mots_cles IS NOT NULL '.
242
				'	AND mots_cles IS NOT NULL '.
241
				'ORDER BY identifiant ';
243
				'ORDER BY identifiant ';
Line 242... Line 244...
242
		$mots_cles_obs = $this->executerRequete($requete);
244
		$mots_cles_obs = $this->executerRequete($requete);
Line 255... Line 257...
255
	}
257
	}
Line 256... Line 258...
256
 
258
 
257
	private function migrerLiaisonsMotsClesImages() {
259
	private function migrerLiaisonsMotsClesImages() {
258
		$requete = 'SELECT ci_meta_mots_cles AS mots_cles, ci_id_image AS id, ci_ce_utilisateur AS id_utilisateur '.
260
		$requete = 'SELECT ci_meta_mots_cles AS mots_cles, ci_id_image AS id, ci_ce_utilisateur AS id_utilisateur '.
259
				'FROM cel_images '.
261
				'FROM cel_images '.
-
 
262
				'WHERE ci_meta_mots_cles != "" '.
-
 
263
				'	AND ci_meta_mots_cles != "NULL" '.
260
				'WHERE ci_meta_mots_cles != "" '.
264
				'	AND ci_meta_mots_cles != "null" '.
261
				'	AND ci_meta_mots_cles IS NOT NULL '.
265
				'	AND ci_meta_mots_cles IS NOT NULL '.
262
				'ORDER BY ci_ce_utilisateur';
266
				'ORDER BY ci_ce_utilisateur';
Line 263... Line 267...
263
		$mots_cles_images = $this->executerRequete($requete);
267
		$mots_cles_images = $this->executerRequete($requete);
Line 290... Line 294...
290
		$sous_requete_chaine = implode(',', $sous_requete);
294
		$sous_requete_chaine = implode(',', $sous_requete);
291
		return $sous_requete_chaine;
295
		return $sous_requete_chaine;
292
	}
296
	}
Line 293... Line 297...
293
 
297
 
-
 
298
	private function parserMotsCles($mot_cles, $separateur = ',') {
294
	private function parserMotsCles($mot_cles, $separateur = ',') {
299
		$mot_cles = trim($mot_cles, $separateur);
Line 295... Line 300...
295
		$tableau_mots_cles = explode($separateur, $mot_cles);
300
		$tableau_mots_cles = explode($separateur, $mot_cles);
296
 
301
 
297
		$tableau_mots_cles_formates = array();
302
		$tableau_mots_cles_formates = array();
298
		foreach ($tableau_mots_cles as $mot_cle) {
303
		foreach ($tableau_mots_cles as $mot_cle) {
-
 
304
			$mot_cle = str_replace($separateur.$separateur, '', $mot_cle);
Line 299... Line 305...
299
			$mot_cle = str_replace($separateur.$separateur, '', $mot_cle);
305
			$mot_cle = str_replace('null', '', $mot_cle);
300
			$mot_cle = str_replace('null', '', $mot_cle);
306
			$mot_cle = trim($mot_cle);
301
 
307
 
302
			if ($this->estUnIdentifiantMotCle($mot_cle)) {
308
			if ($this->estUnIdentifiantMotCle($mot_cle)) {
Line 312... Line 318...
312
				} else {
318
				} else {
313
					// on met le mot clé dans sa propre case afin d'éviter
319
					// on met le mot clé dans sa propre case afin d'éviter
314
					// facilement les doublons provoqués par de mauvais formatages
320
					// facilement les doublons provoqués par de mauvais formatages
315
					$tableau_mots_cles_formates[$mot_cle] = $mot_cle;
321
					$tableau_mots_cles_formates[$mot_cle] = $mot_cle;
316
				}
322
				}
-
 
323
			} else if ($mot_cle != '') {
-
 
324
				echo "N'est pas un mot clé : $mot_cle\n";
317
			}
325
			}
318
		}
326
		}
319
		return $tableau_mots_cles_formates;
327
		return $tableau_mots_cles_formates;
320
	}
328
	}
Line 321... Line 329...
321
 
329
 
322
	private function estUnIdentifiantMotCle($chaine) {
330
	private function estUnIdentifiantMotCle($chaine) {
323
		return trim($chaine) != '' && preg_match('/^(?:[0-9]+\.[0-9]+|[-_a-z0-9]+(?:[.][-_a-z0-9]+)*)$/i', $chaine);
331
		return preg_match('/^(?:[-][0-9]+[.][0-9]+|[-_a-z0-9]+(?:[.][-_a-z0-9]+)*)$/i', $chaine);
Line 324... Line 332...
324
	}
332
	}
325
 
333
 
326
	private function genererIndexTexteMotsClesObs() {
334
	private function genererIndexTexteMotsClesObs() {
327
		$requete_selection_obs = 'SELECT DISTINCT id_observation, ce_utilisateur '.
-
 
328
			'FROM '.self::$bdd_cel_migration.'.cel_obs '.
335
		$requete = 'SELECT DISTINCT id_observation, id_utilisateur '.
Line 329... Line 336...
329
			'WHERE id_observation IN (SELECT DISTINCT id_observation FROM '.self::$bdd_cel_migration.'.cel_mots_cles_obs) ';
336
			'FROM '.self::$bdd_cel_migration.'.cel_obs_mots_cles ';
330
		$obs_a_mots_cles = $this->requeter($requete_selection_obs);
337
		$obs_a_mots_cles = $this->requeter($requete);
331
 
338
 
332
		foreach ($obs_a_mots_cles as $obs) {
339
		foreach ($obs_a_mots_cles as $obs) {
333
			$mots_cles_texte = $this->obtenirMotsClesTexte($obs['id_observation'], $obs['ce_utilisateur'], 'obs');
340
			$mots_cles_texte = $this->obtenirMotsClesTexte($obs['id_observation'], $obs['id_utilisateur'], 'obs');
334
			if (is_array($mots_cles_texte) && count($mots_cles_texte) > 0) {
341
			if (is_array($mots_cles_texte) && count($mots_cles_texte) > 0) {
335
				$mots_cles_texte_chaine = implode(',', $mots_cles_texte);
342
				$mots_cles_texte_chaine = implode(',', $mots_cles_texte);
336
				$mise_a_jour_index = $this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine,$obs['id_observation'], $obs['ce_utilisateur'], 'obs');
343
				$mise_a_jour_index = $this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $obs['id_observation'], $obs['id_utilisateur'], 'obs');
337
				$this->afficherAvancement('Génération des index mots clés obs (par 1)');
344
				$this->afficherAvancement('Génération des index mots clés obs (par 1)');
338
			}
345
			}
Line 339... Line 346...
339
		}
346
		}
340
		echo "\n-----------------------------------------------------------------OK\n";
347
		echo "\n-----------------------------------------------------------------OK\n";
341
	}
348
	}
342
 
-
 
343
	private function genererIndexTexteMotsClesImages() {
349
 
Line 344... Line 350...
344
		$requete_selection_images = 'SELECT DISTINCT id_image, ce_utilisateur '.
350
	private function genererIndexTexteMotsClesImages() {
345
			'FROM '.self::$bdd_cel_migration.'.cel_images '.
351
		$requete = 'SELECT DISTINCT id_image, id_utilisateur '.
346
			'WHERE id_image IN (SELECT DISTINCT id_image FROM '.self::$bdd_cel_migration.'.cel_mots_cles_images) ';
352
			'FROM '.self::$bdd_cel_migration.'.cel_images_mots_cles ';
347
		$images_a_mots_cles = $this->requeter($requete_selection_images);
353
		$images_a_mots_cles = $this->requeter($requete);
348
 
354
 
349
		foreach ($images_a_mots_cles as $image) {
355
		foreach ($images_a_mots_cles as $image) {
350
			$mots_cles_texte = $this->obtenirMotsClesTexte($image['id_image'], $image['ce_utilisateur'], 'images');
356
			$mots_cles_texte = $this->obtenirMotsClesTexte($image['id_image'], $image['id_utilisateur'], 'images');
351
			$mots_cles_texte_chaine = '';
357
			$mots_cles_texte_chaine = '';
352
			if (is_array($mots_cles_texte) && count($mots_cles_texte) > 0) {
358
			if (is_array($mots_cles_texte) && count($mots_cles_texte) > 0) {
353
				$mots_cles_texte_chaine = implode(',', $mots_cles_texte);
359
				$mots_cles_texte_chaine = implode(',', $mots_cles_texte);
354
				$mise_a_jour_index = $this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine,$image['id_image'], $image['ce_utilisateur'], 'images');
360
				$mise_a_jour_index = $this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $image['id_image'], $image['id_utilisateur'], 'images');
Line 355... Line 361...
355
				$this->afficherAvancement('Génération des index mots clés images (par 1)');
361
				$this->afficherAvancement('Génération des index mots clés images (par 1)');
356
			}
362
			}
357
		}
363
		}
358
		echo "\n-----------------------------------------------------------------OK\n";
364
		echo "\n-----------------------------------------------------------------OK\n";
359
	}
365
	}
360
 
-
 
361
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $id_utilisateur, $mode_image_ou_obs) {
366
 
362
		$requete = 	'UPDATE '.self::$bdd_cel_migration.'.'.(($mode_image_ou_obs == 'obs') ? 'cel_obs' : 'cel_images').' '.
-
 
363
			'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
-
 
364
			'WHERE '.(($mode_image_ou_obs == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).' '.
-
 
365
			'	AND ce_utilisateur = '.$this->proteger($id_utilisateur);
-
 
366
 
367
	private function obtenirMotsClesTexte($id_image_ou_obs, $id_utilisateur, $mode) {
367
		return $this->executer($requete);
368
		$bdd = self::$bdd_cel_migration;
368
	}
369
		$champ_id_mot_cle = ($mode == 'obs') ? 'id_mot_cle_obs' : 'id_mot_cle_image';
369
 
370
		$champ_id_obs_ou_img = ($mode == 'obs') ? 'id_observation' : 'id_image';
370
	private function obtenirMotsClesTexte($id_image_ou_obs, $id_utilisateur, $mode_image_ou_obs) {
-
 
371
		$champ_id = ($mode_image_ou_obs == 'obs') ? 'id_mot_cle_obs' : 'id_mot_cle_image';
-
 
372
 
371
		$id_image_ou_obs = $this->proteger($id_image_ou_obs);
373
		$requete = 'SELECT mot_cle '.
372
		$id_utilisateur = $this->proteger($id_utilisateur);
374
			'FROM '.self::$bdd_cel_migration.'.cel_mots_cles_'.$mode_image_ou_obs.' '.
-
 
375
			"WHERE $champ_id IN ".
373
 
376
				'('.
374
		$requete = 'SELECT mot_cle '.
Line 377... Line 375...
377
					"SELECT $champ_id ".
375
				"FROM $bdd.cel_mots_cles_$mode AS a ".
378
					'FROM '.self::$bdd_cel_migration.'.cel_'.$mode_image_ou_obs.'_mots_cles '.
376
				"	INNER JOIN $bdd.cel_{$mode}_mots_cles AS b ".
379
					'WHERE '.(($mode_image_ou_obs == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
377
				"	ON (a.$champ_id_mot_cle = b.$champ_id_mot_cle AND a.id_utilisateur = b.id_utilisateur) ".
380
				')'.
378
				"WHERE b.$champ_id_obs_ou_img = $id_image_ou_obs ".
Line 381... Line 379...
381
			' AND id_utilisateur = '.$this->proteger($id_utilisateur);
379
				"	AND a.id_utilisateur = $id_utilisateur ";
382
		$resultats = $this->requeter($requete);
380
		$resultats = $this->requeter($requete);
-
 
381
 
-
 
382
		$mots_cles = array();
-
 
383
		foreach ($resultats as $resultat) {
-
 
384
			$mots_cles[] = $resultat['mot_cle'];
-
 
385
		}
-
 
386
 
-
 
387
		return $mots_cles;
-
 
388
	}
-
 
389
 
-
 
390
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $id_utilisateur, $mode_image_ou_obs) {
-
 
391
		$bdd = self::$bdd_cel_migration;
-
 
392
		$table = ($mode_image_ou_obs == 'obs') ? 'cel_obs' : 'cel_images';
-
 
393
		$chp_id_obs_ou_img = ($mode_image_ou_obs == 'obs') ? 'id_observation' : 'id_image';
-
 
394
		$id_image_ou_obs = $this->proteger($id_image_ou_obs);
-
 
395
		$mots_cles_texte = $this->proteger($mots_cles_texte_chaine);
-
 
396
		$ce_utilisateur = $this->proteger($id_utilisateur);
383
 
397
 
384
		$mots_cles = array();
398
		$requete = 	"UPDATE $bdd.$table ".