Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2191 Rev 2192
1
<?php
1
<?php
2
class Maintenance extends Script {
2
class Maintenance extends Script {
3
 
3
 
4
	protected $bdd;
4
	protected $bdd;
5
	protected $parametres_autorises = array(
5
	protected $parametres_autorises = array(
6
		'-mc' => array(false, '1', 'Mot clef à chercher pour régénérer les machins'),
6
		'-mc' => array(false, '1', 'Mot clef à chercher pour régénérer les machins'),
7
		'-doublon' => array(false, '1', "Id du mot clé qu'on veut réduire à un autre"),
7
		'-doublon' => array(false, '1', "Id du mot clé qu'on veut réduire à un autre"),
8
		'-util' => array(false, '1', "Id de l'utilisateur"),
8
		'-util' => array(false, null, "Id de l'utilisateur"),
9
		'-cible' => array(false, '1', "Id de l'autre mot clé")
9
		'-cible' => array(false, '1', "Id de l'autre mot clé")
10
	);
10
	);
11
 
11
 
12
	public function __construct($script_nom, $parametres_cli) {
12
	public function __construct($script_nom, $parametres_cli) {
13
		parent::__construct($script_nom, $parametres_cli);
13
		parent::__construct($script_nom, $parametres_cli);
14
		$this->bdd = new Bdd();
14
		$this->bdd = new Bdd();
15
	}
15
	}
16
 
16
 
17
	public function executer() {
17
	public function executer() {
18
		$cmd = $this->getParametre('a');
18
		$cmd = $this->getParametre('a');
19
		try {
19
		try {
20
			switch ($cmd) {
20
			switch ($cmd) {
21
				case 'regenererMotsClesTexteObs' :
21
				case 'regenererMotsClesTexteObs' :
22
					$this->regenererMotsClesTexteObs();
22
					$this->regenererMotsClesTexteObs();
23
					break;
23
					break;
24
				case 'regenererMotsClesTexteImages' :
24
				case 'regenererMotsClesTexteImages' :
25
					$this->regenererMotsClesTexteImages();
25
					$this->regenererMotsClesTexteImages();
26
					break;
26
					break;
27
				case 'regenererMotsClesTexteObsTout' :
27
				case 'regenererMotsClesTexteObsTout' :
28
					$this->regenererMotsClesTexteObs(true);
28
					$this->regenererMotsClesTexteObs(true);
29
					break;
29
					break;
30
				case 'regenererMotsClesTexteImagesTout' :
30
				case 'regenererMotsClesTexteImagesTout' :
31
					$this->regenererMotsClesTexteImages(true);
31
					$this->regenererMotsClesTexteImages(true);
32
					break;
32
					break;
33
				case 'viderMotsClesTexteImagesSansMotsCles' :
33
				case 'viderMotsClesTexteImagesSansMotsCles' :
34
					$this->viderMotsClesTexteImagesSansMotsCles();
34
					$this->viderMotsClesTexteImagesSansMotsCles();
35
					break;
35
					break;
36
				case 'viderMotsClesTexteObsSansMotsCles' :
36
				case 'viderMotsClesTexteObsSansMotsCles' :
37
					$this->viderMotsClesTexteObsSansMotsCles();
37
					$this->viderMotsClesTexteObsSansMotsCles();
38
					break;
38
					break;
39
				case 'regenererChampsTailleImage' :
39
				case 'regenererChampsTailleImage' :
40
					$this->regenererChampsTailleImage();
40
					$this->regenererChampsTailleImage();
41
					break;
41
					break;
42
				case 'reparerLiaisonsOublieesObs' :
42
				case 'reparerLiaisonsOublieesObs' :
43
					$this->reparerLiaisonsOublieesObs();
43
					$this->reparerLiaisonsOublieesObs();
44
					break;
44
					break;
45
				case 'reparerLiaisonsOublieesImages' :
45
				case 'reparerLiaisonsOublieesImages' :
46
					$this->reparerLiaisonsOublieesImages();
46
					$this->reparerLiaisonsOublieesImages();
47
					break;
47
					break;
48
				case 'reparerLiaisonsObsParMotsClesTexte' :
48
				case 'reparerLiaisonsObsParMotsClesTexte' :
49
					$mot_clef = $this->getParametre('mc');
49
					$mot_clef = $this->getParametre('mc');
50
					$this->reparerLiaisonsObsParMotsClesTexte($mot_clef);
50
					$this->reparerLiaisonsObsParMotsClesTexte($mot_clef);
51
					break;
51
					break;
52
				case 'reductionMotsClesImages' :
52
				case 'reductionMotsClesImages' :
53
					// ex: cli.php maintenance -a reductionMotsClesImages -doublon 1234 -cible 5678
53
					// ex: cli.php maintenance -a reductionMotsClesImages -doublon 1234 -cible 5678
54
					$idDoublon = $this->getParametre('doublon');
54
					$idDoublon = $this->getParametre('doublon');
55
					$idCible = $this->getParametre('cible');
55
					$idCible = $this->getParametre('cible');
56
					$this->reductionMotsClesImages($idDoublon, $idCible);
56
					$this->reductionMotsClesImages($idDoublon, $idCible);
57
					break;
57
					break;
58
				case 'reductionMotsClesImagesUtil' :
58
				case 'reductionMotsClesImagesUtil' :
59
					// ex: cli.php maintenance -a reductionMotsClesImagesUtil -util 6865
59
					// ex: cli.php maintenance -a reductionMotsClesImagesUtil -util 6865
60
					$idUtilisateur = $this->getParametre('util');
60
					$idUtilisateur = $this->obtenirParametreIntObligatoirePourMethode('util');
61
					$this->reductionMotsClesImagesUtilisateur($idUtilisateur);
61
					$this->reductionMotsClesImagesUtilisateur($idUtilisateur);
62
					break;
62
					break;
-
 
63
				case 'reduireEtNormaliserMotsClesImagesUtil' :
-
 
64
					// ex: cli.php maintenance -a reduireEtNormaliserMotsClesImages -util 6865
-
 
65
					$idUtilisateur = $this->obtenirParametreIntObligatoirePourMethode('util');
-
 
66
					$this->reduireEtNormaliserMotsClesImages($idUtilisateur);
-
 
67
					break;
63
				case 'reduireEtNormaliserMotsClesImages' :
68
				case 'reduireEtNormaliserMotsClesImages' :
64
					// ex: cli.php maintenance -a reduireEtNormaliserMotsClesImages
69
					// ex: cli.php maintenance -a reduireEtNormaliserMotsClesImages
65
					$this->reduireEtNormaliserMotsClesImages();
70
					$this->reduireEtNormaliserMotsClesImages();
66
					break;
71
					break;
67
				default :
72
				default :
68
					$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
73
					$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
69
						"Commandes existantes : regenererMotsClesTexteImages, regenererMotsClesTexteObs";
74
						"Commandes existantes : regenererMotsClesTexteImages, regenererMotsClesTexteObs";
70
					throw new Exception($msg);
75
					throw new Exception($msg);
71
			}
76
			}
72
		} catch (Exception $e) {
77
		} catch (Exception $e) {
73
			$this->traiterErreur($e->getMessage());
78
			$this->traiterErreur($e->getMessage());
74
		}
79
		}
75
	}
80
	}
-
 
81
	
-
 
82
	private function obtenirParametreIntObligatoirePourMethode($param) {
-
 
83
		$param_val = $this->getParametre($param);
-
 
84
		if(!$param_val || !is_numeric($param_val)) {
-
 
85
			$msg = "Erreur : le paramètre $param est obligatoire pour cette méthode et doit être un entier \n";
-
 
86
			throw new Exception($msg);
-
 
87
		}
-
 
88
		return $param_val;
-
 
89
	}
76
 
90
 
77
	// Régénère le champ "mots_cles_texte" pour toutes les images ayant des mots clés mais ayant ce champ
91
	// Régénère le champ "mots_cles_texte" pour toutes les images ayant des mots clés mais ayant ce champ
78
	// vide, suite à une erreur
92
	// vide, suite à une erreur
79
	protected function regenererMotsClesTexteImages($tout = false) {
93
	protected function regenererMotsClesTexteImages($tout = false) {
80
		$req = "SELECT id_image FROM cel_images WHERE ".
94
		$req = "SELECT id_image FROM cel_images WHERE ".
81
				"id_image IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
95
				"id_image IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
82
		if(!$tout) {
96
		if(!$tout) {
83
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
97
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
84
		}
98
		}
85
		$res = $this->bdd->recupererTous($req);
99
		$res = $this->bdd->recupererTous($req);
86
		echo count($res) . " images trouvées\n";
100
		echo count($res) . " images trouvées\n";
87
		foreach ($res as $image) {
101
		foreach ($res as $image) {
88
			$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
102
			$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
89
				. "INNER JOIN cel_mots_cles_images_liaison cml ON cml.id_mot_cle = cm.id_mot_cle AND cml.id_element_lie = '" . $image['id_image'] . "') "
103
				. "INNER JOIN cel_mots_cles_images_liaison cml ON cml.id_mot_cle = cm.id_mot_cle AND cml.id_element_lie = '" . $image['id_image'] . "') "
90
				. "WHERE id_image = '" . $image['id_image'] . "'";
104
				. "WHERE id_image = '" . $image['id_image'] . "'";
91
			$this->bdd->requeter($req); 
105
			$this->bdd->requeter($req); 
92
		}
106
		}
93
	}
107
	}
94
 
108
 
95
	// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ
109
	// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ
96
	// vide, suite à une erreur
110
	// vide, suite à une erreur
97
	protected function regenererMotsClesTexteObs($tout = false) {
111
	protected function regenererMotsClesTexteObs($tout = false) {
98
		$req = "SELECT id_observation FROM cel_obs WHERE ".
112
		$req = "SELECT id_observation FROM cel_obs WHERE ".
99
				"id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
113
				"id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
100
		if(!$tout) {
114
		if(!$tout) {
101
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
115
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
102
		} 
116
		} 
103
		$res = $this->bdd->recupererTous($req);
117
		$res = $this->bdd->recupererTous($req);
104
		echo count($res) . " observations trouvées\n";
118
		echo count($res) . " observations trouvées\n";
105
		foreach ($res as $image) {
119
		foreach ($res as $image) {
106
			$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
120
			$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
107
			. "INNER JOIN cel_mots_cles_obs_liaison cml ON cml.id_mot_cle = cm.id_mot_cle AND cml.id_element_lie = '" . $image['id_observation'] . "') "
121
			. "INNER JOIN cel_mots_cles_obs_liaison cml ON cml.id_mot_cle = cm.id_mot_cle AND cml.id_element_lie = '" . $image['id_observation'] . "') "
108
				. "WHERE id_observation = '" . $image['id_observation'] . "'";
122
				. "WHERE id_observation = '" . $image['id_observation'] . "'";
109
			$this->bdd->requeter($req); 
123
			$this->bdd->requeter($req); 
110
		}
124
		}
111
	}
125
	}
112
 
126
 
113
	// Vide le champ "mots_cles_texte" pour toutes les images n'ayant aucun mot clé
127
	// Vide le champ "mots_cles_texte" pour toutes les images n'ayant aucun mot clé
114
	protected function viderMotsClesTexteImagesSansMotsCles() {
128
	protected function viderMotsClesTexteImagesSansMotsCles() {
115
		$req = "UPDATE cel_images SET mots_cles_texte = NULL WHERE id_image NOT IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
129
		$req = "UPDATE cel_images SET mots_cles_texte = NULL WHERE id_image NOT IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
116
		$res = $this->bdd->requeter($req);
130
		$res = $this->bdd->requeter($req);
117
		echo "$res images mises à jour\n";
131
		echo "$res images mises à jour\n";
118
	}
132
	}
119
 
133
 
120
	// Vide le champ "mots_cles_texte" pour toutes les obs n'ayant aucun mot clé
134
	// Vide le champ "mots_cles_texte" pour toutes les obs n'ayant aucun mot clé
121
	protected function viderMotsClesTexteObsSansMotsCles() {
135
	protected function viderMotsClesTexteObsSansMotsCles() {
122
		$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
136
		$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
123
		$res = $this->bdd->requeter($req);
137
		$res = $this->bdd->requeter($req);
124
		echo "$res observations mises à jour\n";
138
		echo "$res observations mises à jour\n";
125
	}
139
	}
126
	
140
	
127
	protected function regenererChampsTailleImage() {
141
	protected function regenererChampsTailleImage() {
128
		$req = "SELECT id_image FROM cel_images WHERE hauteur = 0 OR largeur = 0";
142
		$req = "SELECT id_image FROM cel_images WHERE hauteur = 0 OR largeur = 0";
129
		$res = $this->bdd->recupererTous($req);
143
		$res = $this->bdd->recupererTous($req);
130
		
144
		
131
		echo count($res)." images concernees \n";
145
		echo count($res)." images concernees \n";
132
		echo "Début du traitement \n";
146
		echo "Début du traitement \n";
133
		$images_maj = 0;
147
		$images_maj = 0;
134
		$image_meta_ratees = 0;
148
		$image_meta_ratees = 0;
135
		$images_inexistantes = 0;
149
		$images_inexistantes = 0;
136
		
150
		
137
		foreach($res as $image) {
151
		foreach($res as $image) {
138
			$chemin = $this->getCheminImage($image['id_image']); 
152
			$chemin = $this->getCheminImage($image['id_image']); 
139
			if(file_exists($chemin)) {
153
			if(file_exists($chemin)) {
140
				list($largeur, $hauteur) = @getimagesize($chemin);
154
				list($largeur, $hauteur) = @getimagesize($chemin);
141
				if(is_numeric($largeur) && is_numeric($hauteur)) {
155
				if(is_numeric($largeur) && is_numeric($hauteur)) {
142
					$req_maj = "UPDATE cel_images SET hauteur = '".$hauteur."', largeur = '".$largeur."' ".
156
					$req_maj = "UPDATE cel_images SET hauteur = '".$hauteur."', largeur = '".$largeur."' ".
143
					           "WHERE id_image = '".$image['id_image']."'";
157
					           "WHERE id_image = '".$image['id_image']."'";
144
					$maj_taille_image = $this->bdd->requeter($req_maj);
158
					$maj_taille_image = $this->bdd->requeter($req_maj);
145
					if($maj_taille_image) {
159
					if($maj_taille_image) {
146
						$images_maj++;
160
						$images_maj++;
147
					}
161
					}
148
				} else {
162
				} else {
149
					$image_meta_ratees++;
163
					$image_meta_ratees++;
150
				}
164
				}
151
			} else {
165
			} else {
152
				$images_inexistantes++;
166
				$images_inexistantes++;
153
			}
167
			}
154
			$this->afficherAvancement("\tImages traitées : ", 1);
168
			$this->afficherAvancement("\tImages traitées : ", 1);
155
		}	
169
		}	
156
		echo "\n";
170
		echo "\n";
157
		echo "Fin de la régénération des tailles des images à partir des metadonnées \n";
171
		echo "Fin de la régénération des tailles des images à partir des metadonnées \n";
158
		echo $images_maj." images ont vu leur infos de taille régénérées \n";
172
		echo $images_maj." images ont vu leur infos de taille régénérées \n";
159
		echo $image_meta_ratees." images ont raté l'extraction de metadonnées \n";
173
		echo $image_meta_ratees." images ont raté l'extraction de metadonnées \n";
160
		echo $images_inexistantes." images n'existent pas en tant que fichier \n";
174
		echo $images_inexistantes." images n'existent pas en tant que fichier \n";
161
	}
175
	}
162
	
176
	
163
	private function getCheminImage($id) {
177
	private function getCheminImage($id) {
164
		$chemin_base = Config::get('dossierImages');
178
		$chemin_base = Config::get('dossierImages');
165
				
179
				
166
		$id = sprintf('%09s', $id);
180
		$id = sprintf('%09s', $id);
167
		$id = wordwrap($id, 3 , '_', true);
181
		$id = wordwrap($id, 3 , '_', true);
168
		
182
		
169
		list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);
183
		list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);
170
		
184
		
171
		$chemin = $chemin_base.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/O/'.$id.'_O.jpg';
185
		$chemin = $chemin_base.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/O/'.$id.'_O.jpg';
172
		
186
		
173
		return $chemin;
187
		return $chemin;
174
	}
188
	}
175
	
189
	
176
	protected function reparerLiaisonsOublieesObs() {
190
	protected function reparerLiaisonsOublieesObs() {
177
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car 
191
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car 
178
		// dans la table de liaison il est souvent vide 
192
		// dans la table de liaison il est souvent vide 
179
		$requete_liaisons = "SELECT com.id_observation, com.id_mot_cle_obs, co.ce_utilisateur ".
193
		$requete_liaisons = "SELECT com.id_observation, com.id_mot_cle_obs, co.ce_utilisateur ".
180
					"FROM `cel_obs_mots_cles` com INNER JOIN cel_obs co ON co.id_observation = com.id_observation ";
194
					"FROM `cel_obs_mots_cles` com INNER JOIN cel_obs co ON co.id_observation = com.id_observation ";
181
		
195
		
182
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
196
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
183
		$nb_liaisons_originales = count($liaisons);
197
		$nb_liaisons_originales = count($liaisons);
184
		
198
		
185
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
199
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
186
		$requete_mots_cles = "SELECT id_mot_cle_obs, id_utilisateur, mot_cle FROM cel_mots_cles_obs ";
200
		$requete_mots_cles = "SELECT id_mot_cle_obs, id_utilisateur, mot_cle FROM cel_mots_cles_obs ";
187
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
201
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
188
		
202
		
189
		$anciens_mots_cles_fmt = array();
203
		$anciens_mots_cles_fmt = array();
190
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
204
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
191
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
205
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
192
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
206
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
193
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
207
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
194
			}
208
			}
195
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_obs']] = $ancien_mot_cle;
209
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_obs']] = $ancien_mot_cle;
196
		}
210
		}
197
		
211
		
198
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
212
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
199
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_obs";
213
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_obs";
200
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
214
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
201
		
215
		
202
		$nouveau_mots_cles_fmt = array();
216
		$nouveau_mots_cles_fmt = array();
203
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
217
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
204
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
218
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
205
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
219
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
206
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
220
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
207
			}
221
			}
208
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][strtolower($nouveau_mot_cle['mot_cle'])] = $nouveau_mot_cle;
222
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][strtolower($nouveau_mot_cle['mot_cle'])] = $nouveau_mot_cle;
209
		}
223
		}
210
		
224
		
211
		$anciens_mot_cles_pas_trouves = 0;
225
		$anciens_mot_cles_pas_trouves = 0;
212
		$nouveaux_mot_cles_pas_trouves = 0;
226
		$nouveaux_mot_cles_pas_trouves = 0;
213
		$utilisateurs_pas_trouves = 0;
227
		$utilisateurs_pas_trouves = 0;
214
		$valeurs_a_inserer = array();
228
		$valeurs_a_inserer = array();
215
		
229
		
216
		$ids_obs = array();
230
		$ids_obs = array();
217
		
231
		
218
		foreach($liaisons as &$liaison) {
232
		foreach($liaisons as &$liaison) {
219
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
233
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
220
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_obs'];
234
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_obs'];
221
			
235
			
222
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
236
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
223
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
237
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
224
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
238
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
225
					$texte_ancien_mot_cle = strtolower($texte_ancien_mot_cle); // l'astuce de ouf !
239
					$texte_ancien_mot_cle = strtolower($texte_ancien_mot_cle); // l'astuce de ouf !
226
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
240
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
227
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
241
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
228
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
242
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
229
							
243
							
230
							$valeurs_a_inserer[] = array(
244
							$valeurs_a_inserer[] = array(
231
													'id_element_lie' => $liaison['id_observation'],
245
													'id_element_lie' => $liaison['id_observation'],
232
													'id_mot_cle' => $nouvel_id_mot_cle,
246
													'id_mot_cle' => $nouvel_id_mot_cle,
233
													'ancienne_liaison' => $liaison
247
													'ancienne_liaison' => $liaison
234
							);
248
							);
235
							$ids_obs[] = $liaison['id_observation'];
249
							$ids_obs[] = $liaison['id_observation'];
236
						} else {
250
						} else {
237
							$nouveaux_mot_cles_pas_trouves++;
251
							$nouveaux_mot_cles_pas_trouves++;
238
						}
252
						}
239
					} else {
253
					} else {
240
						
254
						
241
					}
255
					}
242
					
256
					
243
				} else {
257
				} else {
244
					$anciens_mot_cles_pas_trouves++;
258
					$anciens_mot_cles_pas_trouves++;
245
				}
259
				}
246
			} else {
260
			} else {
247
				$utilisateurs_pas_trouves++;
261
				$utilisateurs_pas_trouves++;
248
			}
262
			}
249
		}
263
		}
250
		
264
		
251
		echo "Anciennes liaisons ".$nb_liaisons_originales." \n";
265
		echo "Anciennes liaisons ".$nb_liaisons_originales." \n";
252
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
266
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
253
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
267
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
254
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
268
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
255
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
269
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
256
		
270
		
257
		$tranches = array_chunk($valeurs_a_inserer, 800);
271
		$tranches = array_chunk($valeurs_a_inserer, 800);
258
 
272
 
259
		foreach($tranches as $tranche) {
273
		foreach($tranches as $tranche) {
260
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
274
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
261
					                      "VALUES ";
275
					                      "VALUES ";
262
			foreach($tranche as $l) {
276
			foreach($tranche as $l) {
263
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
277
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
264
			}
278
			}
265
			$requete_insertion = rtrim($requete_insertion, ',');
279
			$requete_insertion = rtrim($requete_insertion, ',');
266
			$insertion = $this->bdd->requeter($requete_insertion);
280
			$insertion = $this->bdd->requeter($requete_insertion);
267
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
281
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
268
		}
282
		}
269
		echo "\n";
283
		echo "\n";
270
	}
284
	}
271
	
285
	
272
	private function reparerLiaisonsOublieesImages() {
286
	private function reparerLiaisonsOublieesImages() {
273
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car
287
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car
274
		// dans la table de liaison il est souvent vide
288
		// dans la table de liaison il est souvent vide
275
		$requete_liaisons = "SELECT cim.id_image, cim.id_mot_cle_image, ci.ce_utilisateur ".
289
		$requete_liaisons = "SELECT cim.id_image, cim.id_mot_cle_image, ci.ce_utilisateur ".
276
							"FROM cel_images_mots_cles cim INNER JOIN cel_images ci ON ci.id_image = cim.id_image ";
290
							"FROM cel_images_mots_cles cim INNER JOIN cel_images ci ON ci.id_image = cim.id_image ";
277
 
291
 
278
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
292
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
279
		
293
		
280
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
294
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
281
		$requete_mots_cles = "SELECT id_mot_cle_image, id_utilisateur, mot_cle FROM cel_mots_cles_images ";
295
		$requete_mots_cles = "SELECT id_mot_cle_image, id_utilisateur, mot_cle FROM cel_mots_cles_images ";
282
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
296
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
283
		
297
		
284
		$anciens_mots_cles_fmt = array();
298
		$anciens_mots_cles_fmt = array();
285
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
299
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
286
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
300
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
287
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
301
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
288
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
302
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
289
			}
303
			}
290
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_image']] = $ancien_mot_cle;
304
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_image']] = $ancien_mot_cle;
291
		}
305
		}
292
		
306
		
293
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
307
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
294
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_images";
308
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_images";
295
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
309
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
296
		
310
		
297
		$nouveau_mots_cles_fmt = array();
311
		$nouveau_mots_cles_fmt = array();
298
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
312
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
299
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
313
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
300
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
314
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
301
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
315
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
302
			}
316
			}
303
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
317
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
304
		}
318
		}
305
		
319
		
306
		$anciens_mot_cles_pas_trouves = 0;
320
		$anciens_mot_cles_pas_trouves = 0;
307
		$nouveaux_mot_cles_pas_trouves = 0;
321
		$nouveaux_mot_cles_pas_trouves = 0;
308
		$utilisateurs_pas_trouves = 0;
322
		$utilisateurs_pas_trouves = 0;
309
		$valeurs_a_inserer = array();
323
		$valeurs_a_inserer = array();
310
		
324
		
311
		foreach($liaisons as &$liaison) {
325
		foreach($liaisons as &$liaison) {
312
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
326
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
313
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_image'];
327
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_image'];
314
				
328
				
315
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
329
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
316
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
330
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
317
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
331
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
318
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
332
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
319
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
333
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
320
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
334
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
321
								
335
								
322
							$valeurs_a_inserer[] = array(
336
							$valeurs_a_inserer[] = array(
323
															'id_element_lie' => $liaison['id_image'],
337
															'id_element_lie' => $liaison['id_image'],
324
															'id_mot_cle' => $nouvel_id_mot_cle,
338
															'id_mot_cle' => $nouvel_id_mot_cle,
325
															'ancienne_liaison' => $liaison
339
															'ancienne_liaison' => $liaison
326
							);
340
							);
327
							$ids_imgs[] = $liaison['id_image'];
341
							$ids_imgs[] = $liaison['id_image'];
328
						} else {
342
						} else {
329
							$nouveaux_mot_cles_pas_trouves++;
343
							$nouveaux_mot_cles_pas_trouves++;
330
						}
344
						}
331
					} else {
345
					} else {
332
		
346
		
333
					}
347
					}
334
						
348
						
335
				} else {
349
				} else {
336
					$anciens_mot_cles_pas_trouves++;
350
					$anciens_mot_cles_pas_trouves++;
337
				}
351
				}
338
			} else {
352
			} else {
339
				$utilisateurs_pas_trouves++;
353
				$utilisateurs_pas_trouves++;
340
			}
354
			}
341
		}
355
		}
342
		
356
		
343
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
357
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
344
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
358
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
345
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
359
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
346
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
360
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
347
 
361
 
348
		$tranches = array_chunk($valeurs_a_inserer, 800);
362
		$tranches = array_chunk($valeurs_a_inserer, 800);
349
 
363
 
350
		foreach($tranches as $tranche) {
364
		foreach($tranches as $tranche) {
351
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_images_liaison (id_element_lie, id_mot_cle) ".
365
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_images_liaison (id_element_lie, id_mot_cle) ".
352
					                      "VALUES ";
366
					                      "VALUES ";
353
			foreach($tranche as $l) {
367
			foreach($tranche as $l) {
354
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
368
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
355
			}
369
			}
356
			$requete_insertion = rtrim($requete_insertion, ',');
370
			$requete_insertion = rtrim($requete_insertion, ',');
357
			$insertion = $this->bdd->requeter($requete_insertion);
371
			$insertion = $this->bdd->requeter($requete_insertion);
358
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
372
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
359
		}
373
		}
360
		echo "\n";
374
		echo "\n";
361
	}
375
	}
362
	
376
	
363
	private function reparerLiaisonsObsParMotsClesTexte($mot_cle_texte_recherche) {
377
	private function reparerLiaisonsObsParMotsClesTexte($mot_cle_texte_recherche) {
364
		$ancienne_table_obs = Config::get('table_obs_recup');
378
		$ancienne_table_obs = Config::get('table_obs_recup');
365
		$requete_anciens_mots_cles_texte = "SELECT ce_utilisateur, id_observation, mots_cles_texte ".
379
		$requete_anciens_mots_cles_texte = "SELECT ce_utilisateur, id_observation, mots_cles_texte ".
366
											"FROM ".$ancienne_table_obs." WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%'";
380
											"FROM ".$ancienne_table_obs." WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%'";
367
		$obs_a_mot_cle = $this->bdd->recupererTous($requete_anciens_mots_cles_texte);
381
		$obs_a_mot_cle = $this->bdd->recupererTous($requete_anciens_mots_cles_texte);
368
		
382
		
369
		$requete_nouveaux_mots_cle = "SELECT * FROM cel_arbre_mots_cles_obs ".
383
		$requete_nouveaux_mots_cle = "SELECT * FROM cel_arbre_mots_cles_obs ".
370
									"WHERE id_utilisateur IN ". 
384
									"WHERE id_utilisateur IN ". 
371
									"(SELECT id_utilisateur FROM ".$ancienne_table_obs." ".
385
									"(SELECT id_utilisateur FROM ".$ancienne_table_obs." ".
372
									"WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%')";
386
									"WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%')";
373
		$nouveaux_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cle);
387
		$nouveaux_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cle);
374
		
388
		
375
		$mots_cles_indexes = array();
389
		$mots_cles_indexes = array();
376
		foreach($nouveaux_mots_cles as $mot_cle) {
390
		foreach($nouveaux_mots_cles as $mot_cle) {
377
			$mots_cles_indexes[$mot_cle['id_utilisateur']][strtolower($mot_cle['mot_cle'])] = $mot_cle;
391
			$mots_cles_indexes[$mot_cle['id_utilisateur']][strtolower($mot_cle['mot_cle'])] = $mot_cle;
378
		}
392
		}
379
				
393
				
380
		$liaisons_a_inserer = array();
394
		$liaisons_a_inserer = array();
381
		$utilFoirax = 0;
395
		$utilFoirax = 0;
382
		$mcFoirax = 0;
396
		$mcFoirax = 0;
383
		foreach($obs_a_mot_cle as $obs) {
397
		foreach($obs_a_mot_cle as $obs) {
384
			$mots_cles_texte_tab = explode(',', $obs['mots_cles_texte']);
398
			$mots_cles_texte_tab = explode(',', $obs['mots_cles_texte']);
385
			$id_observation = $obs['id_observation'];
399
			$id_observation = $obs['id_observation'];
386
			$id_utilisateur = $obs['ce_utilisateur'];
400
			$id_utilisateur = $obs['ce_utilisateur'];
387
			foreach($mots_cles_texte_tab as $mot_cle_t) {
401
			foreach($mots_cles_texte_tab as $mot_cle_t) {
388
				if($mot_cle_t == $mot_cle_texte_recherche) {
402
				if($mot_cle_t == $mot_cle_texte_recherche) {
389
					if (isset($mots_cles_indexes[$id_utilisateur])) {
403
					if (isset($mots_cles_indexes[$id_utilisateur])) {
390
						if (isset($mots_cles_indexes[$id_utilisateur][strtolower($mot_cle_t)])) {
404
						if (isset($mots_cles_indexes[$id_utilisateur][strtolower($mot_cle_t)])) {
391
							$id_nouveau_mot_cle = $mots_cles_indexes[$id_utilisateur][strtolower($mot_cle_t)]['id_mot_cle'];
405
							$id_nouveau_mot_cle = $mots_cles_indexes[$id_utilisateur][strtolower($mot_cle_t)]['id_mot_cle'];
392
						} else {
406
						} else {
393
							$mcFoirax++;
407
							$mcFoirax++;
394
						}
408
						}
395
					} else {
409
					} else {
396
						$utilFoirax++;
410
						$utilFoirax++;
397
					}
411
					}
398
					$liaisons_a_inserer[] = array('id_element_lie' => $id_observation, 'id_mot_cle' => $id_nouveau_mot_cle);
412
					$liaisons_a_inserer[] = array('id_element_lie' => $id_observation, 'id_mot_cle' => $id_nouveau_mot_cle);
399
				}
413
				}
400
			}
414
			}
401
		}
415
		}
402
		echo "Utilisateurs pas dans le tableau: $utilFoirax\n";
416
		echo "Utilisateurs pas dans le tableau: $utilFoirax\n";
403
		echo "Motf-clefs pas dans le tableau: $mcFoirax\n";
417
		echo "Motf-clefs pas dans le tableau: $mcFoirax\n";
404
		//echo '<pre>'.print_r($liaisons_a_inserer, true).'</pre>';
418
		//echo '<pre>'.print_r($liaisons_a_inserer, true).'</pre>';
405
		echo "Liaisons à insérer: " . count($liaisons_a_inserer) . " \n";
419
		echo "Liaisons à insérer: " . count($liaisons_a_inserer) . " \n";
406
 
420
 
407
		$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
421
		$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
408
				"VALUES ";
422
				"VALUES ";
409
		foreach($liaisons_a_inserer as $l) {
423
		foreach($liaisons_a_inserer as $l) {
410
			$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
424
			$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
411
		}
425
		}
412
		$requete_insertion = rtrim($requete_insertion, ',');
426
		$requete_insertion = rtrim($requete_insertion, ',');
413
		$insertion = $this->bdd->requeter($requete_insertion);
427
		$insertion = $this->bdd->requeter($requete_insertion);
414
	}
428
	}
415
 
429
 
416
	// Change toutes les associations images - mots_cles dont l'id mot_cle est $idDoublon, pour le remplacer par $idCible
430
	// Change toutes les associations images - mots_cles dont l'id mot_cle est $idDoublon, pour le remplacer par $idCible
417
	private function reductionMotsClesImages($idDoublon, $idCible, $supprimerVieuxMotsCles=true) {
431
	private function reductionMotsClesImages($idDoublon, $idCible, $supprimerVieuxMotsCles=true) {
418
		echo "Réduction de $idDoublon à $idCible" . PHP_EOL;
432
		echo "Réduction de $idDoublon à $idCible" . PHP_EOL;
419
 
433
 
420
		$q1 = "SELECT id_element_lie FROM cel_mots_cles_images_liaison WHERE id_mot_cle = $idCible;";
434
		$q1 = "SELECT id_element_lie FROM cel_mots_cles_images_liaison WHERE id_mot_cle = $idCible;";
421
		$r1 = $this->bdd->requeter($q1);
435
		$r1 = $this->bdd->requeter($q1);
422
		$idsImages = array();
436
		$idsImages = array();
423
		foreach ($r1 as $r) {
437
		foreach ($r1 as $r) {
424
			$idsImages[] = $r['id_element_lie'];
438
			$idsImages[] = $r['id_element_lie'];
425
		}
439
		}
426
 
440
 
427
		if (count($idsImages) > 0) {
441
		if (count($idsImages) > 0) {
428
			// On vire ceux qui ont le doublon mais qui ont aussi la cible
442
			// On vire ceux qui ont le doublon mais qui ont aussi la cible
429
			$q2 = "DELETE FROM cel_mots_cles_images_liaison WHERE id_mot_cle = $idDoublon AND id_element_lie IN (" . implode(',', $idsImages) . ");";
443
			$q2 = "DELETE FROM cel_mots_cles_images_liaison WHERE id_mot_cle = $idDoublon AND id_element_lie IN (" . implode(',', $idsImages) . ");";
430
			$r2 = $this->bdd->requeter($q2);
444
			$r2 = $this->bdd->requeter($q2);
431
		}
445
		}
432
	
446
	
433
		// On convertit tous les doublons en cible
447
		// On convertit tous les doublons en cible
434
		$q3 = "UPDATE cel_mots_cles_images_liaison SET id_mot_cle = $idCible WHERE id_mot_cle = $idDoublon;";
448
		$q3 = "UPDATE cel_mots_cles_images_liaison SET id_mot_cle = $idCible WHERE id_mot_cle = $idDoublon;";
435
		$r3 = $this->bdd->requeter($q3);
449
		$r3 = $this->bdd->requeter($q3);
436
 
450
 
437
		if ($supprimerVieuxMotsCles) {
451
		if ($supprimerVieuxMotsCles) {
438
			// On supprime le mot cle qui sert plus à rien
452
			// On supprime le mot cle qui sert plus à rien
439
			$q4 = "DELETE FROM cel_arbre_mots_cles_images WHERE id_mot_cle = $idDoublon;";
453
			$q4 = "DELETE FROM cel_arbre_mots_cles_images WHERE id_mot_cle = $idDoublon;";
440
			$r4 = $this->bdd->requeter($q4);
454
			$r4 = $this->bdd->requeter($q4);
441
		}
455
		}
442
	}
456
	}
443
 
457
 
444
	// Parcourt l'arbre des mots-cles images de l'utilisateur dont l'id est $idUtilisateur, et réduit tous ceux dont le chemin
458
	// Parcourt l'arbre des mots-cles images de l'utilisateur dont l'id est $idUtilisateur, et réduit tous ceux dont le chemin
445
	// n'est pas unique
459
	// n'est pas unique
446
	private function reductionMotsClesImagesUtilisateur($idUtilisateur) {
460
	private function reductionMotsClesImagesUtilisateur($idUtilisateur) {
447
		$q1 = "SELECT id_mot_cle, chemin, mot_cle, (LOCATE(mot_cle, chemin) != 0) as valide FROM cel_arbre_mots_cles_images"
461
		$q1 = "SELECT id_mot_cle, chemin, mot_cle, (LOCATE(mot_cle, chemin) != 0) as valide FROM cel_arbre_mots_cles_images"
448
			. " WHERE id_utilisateur = '$idUtilisateur'"
462
			. " WHERE id_utilisateur = '$idUtilisateur'"
449
			. " ORDER BY chemin ASC, valide DESC;";
463
			. " ORDER BY chemin ASC, valide DESC;";
450
		$r1 = $this->bdd->requeter($q1);
464
		$r1 = $this->bdd->requeter($q1);
451
 
465
 
452
		$idsMotsCles = array();
466
		$idsMotsCles = array();
453
		$nbVieux = 0;
467
		$nbVieux = 0;
454
		foreach ($r1 as $r) {
468
		foreach ($r1 as $r) {
455
			$k = strtolower($r['chemin']);
469
			$k = strtolower($r['chemin']);
456
			if (! isset($idsMotsCles[$k])) {
470
			if (! isset($idsMotsCles[$k])) {
457
				$idsMotsCles[$k] = array();
471
				$idsMotsCles[$k] = array();
458
			}
472
			}
459
			$idsMotsCles[$k][] = $r['id_mot_cle'];
473
			$idsMotsCles[$k][] = $r['id_mot_cle'];
460
			$nbVieux++;
474
			$nbVieux++;
461
		}
475
		}
462
		$nbNouveaux = count($idsMotsCles);
476
		$nbNouveaux = count($idsMotsCles);
463
 
477
 
464
		echo "Réduction de $nbVieux à $nbNouveaux mots-cles" . PHP_EOL;
478
		echo "Réduction de $nbVieux à $nbNouveaux mots-cles" . PHP_EOL;
465
		$aTraiter = 0;
479
		$aTraiter = 0;
466
		foreach ($idsMotsCles as $chemin => $ids) {
480
		foreach ($idsMotsCles as $chemin => $ids) {
467
			if (count($ids) > 1) {
481
			if (count($ids) > 1) {
468
				$aTraiter ++;
482
				$aTraiter ++;
469
				$idCible = array_shift($ids);
483
				$idCible = array_shift($ids);
470
				foreach ($ids as $idDoublon) {
484
				foreach ($ids as $idDoublon) {
471
					$this->reductionMotsClesImages($idDoublon, $idCible);
485
					$this->reductionMotsClesImages($idDoublon, $idCible);
472
				}
486
				}
473
			}
487
			}
474
		}
488
		}
475
		echo "$aTraiter groupes ont été réduits" . PHP_EOL;
489
		echo "$aTraiter groupes ont été réduits" . PHP_EOL;
476
	}
490
	}
477
	
491
	
478
	private function reduireEtNormaliserMotsClesImages() {
492
	private function reduireEtNormaliserMotsClesImages($util=null) {
479
		$this->reduireEtNormaliserMotsCles('cel_arbre_mots_cles_images', 'chemin', 'images');
493
		$this->reduireEtNormaliserMotsCles('cel_arbre_mots_cles_images', 'chemin', 'images', $util);
480
	}
494
	}
481
	
495
	
482
	private function reduireEtNormaliserMotsCles($table, $colonne, $mode = "images") {		
496
	private function reduireEtNormaliserMotsCles($table, $colonne, $mode = "images", $util=null) {		
483
		echo "Suppression des accents dans la table $table, colonne $colonne ...";
497
		echo "Suppression des accents dans la table $table, colonne $colonne ...";
484
		$this->supprimerAccents($table, $colonne);
498
		$this->supprimerAccents($table, $colonne, $util);
485
		echo "effectuée \n";
499
		echo "effectuée \n";
486
		echo "Suppression des majuscules dans la table $table, colonne $colonne ...";
500
		echo "Suppression des majuscules dans la table $table, colonne $colonne ...";
487
		$this->supprimerMajuscules($table, $colonne);
501
		$this->supprimerMajuscules($table, $colonne, $util);
-
 
502
		echo "effectuée \n";
-
 
503
		echo "\n";
-
 
504
		if ($util !== null) {
-
 
505
			echo "Réduction de tous les mots clés $mode de l'utilisateur $util\n";
488
		echo "effectuée \n";
506
			$this->reductionMotsClesImagesUtilisateur($util);
489
		echo "\n";
507
		} else {
490
		echo "Réduction de tous les mots clés $mode \n";
508
			echo "Réduction de tous les mots clés $mode \n";
491
		$req_utilisateurs = "SELECT DISTINCT id_utilisateur FROM ".$table;
509
			$req_utilisateurs = "SELECT DISTINCT id_utilisateur FROM ".$table;
492
		$utilisateurs = $this->bdd->recupererTous($req_utilisateurs);
510
			$utilisateurs = $this->bdd->recupererTous($req_utilisateurs);
493
		
511
			
494
		foreach($utilisateurs as $utilisateur) {
512
			foreach($utilisateurs as $utilisateur) {
495
			echo "Utilisateur en cours de traitement : ".$utilisateur['id_utilisateur']." \n";
513
				echo "Utilisateur en cours de traitement : ".$utilisateur['id_utilisateur']." \n";
496
			if($mode == "images") {
514
				if($mode == "images") {
497
				$this->reductionMotsClesImagesUtilisateur($utilisateur['id_utilisateur']);
515
					$this->reductionMotsClesImagesUtilisateur($utilisateur['id_utilisateur']);
498
			} else {
516
				} else {
-
 
517
					//TODO: créer cette fonction
499
				//TODO: créer cette fonction
518
					// $this->reductionMotsClesObsUtilisateur($utilisateur['id_utilisateur']);
500
				// $this->reductionMotsClesObsUtilisateur($utilisateur['id_utilisateur']);
519
				}
501
			}
520
			}
502
		}
521
		}
503
		echo "Fin de la réduction des mots clés $mode \n";
522
		echo "Fin de la réduction des mots clés $mode \n";
504
	}
523
	}
505
	
524
	
506
	private function supprimerMajuscules($table, $colonne) {
525
	private function supprimerMajuscules($table, $colonne, $util=null) {
-
 
526
		$requete = "UPDATE ".$table." SET ".$colonne." = LOWER(".$colonne.")";
-
 
527
		if ($util !== null) {
-
 
528
			$requete .= " WHERE id_utilisateur = $util";
507
		$requete = "UPDATE ".$table." SET ".$colonne." = LOWER(".$colonne.")";
529
		}
508
		$this->bdd->requeter($requete); 
530
		$this->bdd->requeter($requete); 
509
	}
531
	}
510
	
532
	
511
	private function supprimerAccents($table, $colonne) {
533
	private function supprimerAccents($table, $colonne, $util=null) {
512
		
534
		
513
		$requetes = array(
535
		$requetes = array(
514
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Š','S')",
536
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Š','S')",
515
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'š','s')",
537
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'š','s')",
516
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ð','Dj')",
538
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ð','Dj')",
517
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ž','Z')",
539
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ž','Z')",
518
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ž','z')",
540
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ž','z')",
519
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'À','A')",
541
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'À','A')",
520
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Á','A')",
542
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Á','A')",
521
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Â','A')",
543
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Â','A')",
522
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ã','A')",
544
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ã','A')",
523
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ä','A')",
545
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ä','A')",
524
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Å','A')",
546
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Å','A')",
525
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Æ','A')",
547
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Æ','A')",
526
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ç','C')",
548
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ç','C')",
527
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'È','E')",
549
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'È','E')",
528
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'É','E')",
550
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'É','E')",
529
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ê','E')",
551
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ê','E')",
530
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ë','E')",
552
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ë','E')",
531
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ì','I')",
553
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ì','I')",
532
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Í','I')",
554
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Í','I')",
533
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Î','I')",
555
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Î','I')",
534
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ï','I')",
556
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ï','I')",
535
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ñ','N')",
557
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ñ','N')",
536
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ò','O')",
558
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ò','O')",
537
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ó','O')",
559
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ó','O')",
538
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ô','O')",
560
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ô','O')",
539
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Õ','O')",
561
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Õ','O')",
540
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ö','O')",
562
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ö','O')",
541
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ø','O')",
563
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ø','O')",
542
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ù','U')",
564
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ù','U')",
543
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ú','U')",
565
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ú','U')",
544
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Û','U')",
566
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Û','U')",
545
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ü','U')",
567
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ü','U')",
546
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ý','Y')",
568
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ý','Y')",
547
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Þ','B')",
569
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Þ','B')",
548
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ß','Ss')",
570
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ß','Ss')",
549
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'à','a')",
571
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'à','a')",
550
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'á','a')",
572
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'á','a')",
551
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'â','a')",
573
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'â','a')",
552
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ã','a')",
574
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ã','a')",
553
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ä','a')",
575
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ä','a')",
554
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'å','a')",
576
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'å','a')",
555
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'æ','a')",
577
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'æ','a')",
556
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ç','c')",
578
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ç','c')",
557
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'è','e')",
579
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'è','e')",
558
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'é','e')",
580
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'é','e')",
559
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ê','e')",
581
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ê','e')",
560
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ë','e')",
582
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ë','e')",
561
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ì','i')",
583
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ì','i')",
562
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'í','i')",
584
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'í','i')",
563
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'î','i')",
585
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'î','i')",
564
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ï','i')",
586
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ï','i')",
565
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ð','o')",
587
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ð','o')",
566
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ñ','n')",
588
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ñ','n')",
567
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ò','o')",
589
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ò','o')",
568
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ó','o')",
590
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ó','o')",
569
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ô','o')",
591
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ô','o')",
570
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'õ','o')",
592
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'õ','o')",
571
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ö','o')",
593
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ö','o')",
572
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ø','o')",
594
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ø','o')",
573
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ù','u')",
595
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ù','u')",
574
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ú','u')",
596
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ú','u')",
575
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'û','u')",
597
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'û','u')",
576
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ý','y')",
598
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ý','y')",
577
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ý','y')",
599
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ý','y')",
578
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'þ','b')",
600
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'þ','b')",
579
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ÿ','y')",
601
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ÿ','y')",
580
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ƒ','f')",
602
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ƒ','f')",
581
		);
603
		);
582
		
604
		
583
		foreach($requetes as $requete) {
605
		foreach($requetes as $requete) {
-
 
606
			if ($util !== null) {
-
 
607
				$requete .= " WHERE id_utilisateur = $util";
-
 
608
			}
584
			$this->bdd->requeter($requete);
609
			$this->bdd->requeter($requete);
585
		}
610
		}
586
	}
611
	}
587
}
612
}
588
?>
613
?>