Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2098 Rev 2104
Line 16... Line 16...
16
					$this->regenererMotsClesTexteObs();
16
					$this->regenererMotsClesTexteObs();
17
					break;
17
					break;
18
				case 'regenererMotsClesTexteImages' :
18
				case 'regenererMotsClesTexteImages' :
19
					$this->regenererMotsClesTexteImages();
19
					$this->regenererMotsClesTexteImages();
20
					break;
20
					break;
-
 
21
				case 'regenererMotsClesTexteObsTout' :
-
 
22
					$this->regenererMotsClesTexteObs(true);
-
 
23
					break;
-
 
24
				case 'regenererMotsClesTexteImagesTout' :
-
 
25
					$this->regenererMotsClesTexteImages(true);
-
 
26
					break;
21
				case 'viderMotsClesTexteImagesSansMotsCles' :
27
				case 'viderMotsClesTexteImagesSansMotsCles' :
22
					$this->viderMotsClesTexteImagesSansMotsCles();
28
					$this->viderMotsClesTexteImagesSansMotsCles();
23
					break;
29
					break;
24
				case 'viderMotsClesTexteObsSansMotsCles' :
30
				case 'viderMotsClesTexteObsSansMotsCles' :
25
					$this->viderMotsClesTexteObsSansMotsCles();
31
					$this->viderMotsClesTexteObsSansMotsCles();
26
					break;
32
					break;
-
 
33
				case 'reparerLiaisonsOublieesObs' :
-
 
34
					$this->reparerLiaisonsOublieesObs();
-
 
35
					break;
-
 
36
				case 'reparerLiaisonsOublieesImages' :
-
 
37
					$this->reparerLiaisonsOublieesImages();
-
 
38
					break;
27
				default :
39
				default :
28
					$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
40
					$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
29
						"Commandes existantes : regenererMotsClesTexteImages, regenererMotsClesTexteObs";
41
						"Commandes existantes : regenererMotsClesTexteImages, regenererMotsClesTexteObs";
30
					throw new Exception($msg);
42
					throw new Exception($msg);
31
			}
43
			}
Line 34... Line 46...
34
		}
46
		}
35
	}
47
	}
Line 36... Line 48...
36
 
48
 
37
	// Régénère le champ "mots_cles_texte" pour toutes les images ayant des mots clés mais ayant ce champ
49
	// Régénère le champ "mots_cles_texte" pour toutes les images ayant des mots clés mais ayant ce champ
38
	// vide, suite à une erreur
50
	// vide, suite à une erreur
39
	protected function regenererMotsClesTexteImages() {
51
	protected function regenererMotsClesTexteImages($tout = false) {
40
		$req = "SELECT id_image FROM cel_images WHERE (mots_cles_texte IS NULL OR mots_cles_texte='') "
52
		$req = "SELECT id_image FROM cel_images WHERE ".
-
 
53
				"id_image IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
-
 
54
		if(!$tout) {
-
 
55
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
41
			. "AND id_image IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
56
		}
42
		$res = $this->bdd->recupererTous($req);
57
		$res = $this->bdd->recupererTous($req);
43
		echo count($res) . " images trouvées\n";
58
		echo count($res) . " images trouvées\n";
44
		foreach ($res as $image) {
59
		foreach ($res as $image) {
45
			$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
60
			$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
Line 49... Line 64...
49
		}
64
		}
50
	}
65
	}
Line 51... Line 66...
51
 
66
 
52
	// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ
67
	// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ
53
	// vide, suite à une erreur
68
	// vide, suite à une erreur
54
	protected function regenererMotsClesTexteObs() {
69
	protected function regenererMotsClesTexteObs($tout = false) {
55
		$req = "SELECT id_observation FROM cel_obs WHERE (mots_cles_texte IS NULL OR mots_cles_texte='') "
70
		$req = "SELECT id_observation FROM cel_obs WHERE ".
-
 
71
				"id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
-
 
72
		if(!$tout) {
-
 
73
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
56
			. "AND id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
74
		} 
57
		$res = $this->bdd->recupererTous($req);
75
		$res = $this->bdd->recupererTous($req);
58
		echo count($res) . " observations trouvées\n";
76
		echo count($res) . " observations trouvées\n";
59
		foreach ($res as $image) {
77
		foreach ($res as $image) {
60
			$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
78
			$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
Line 75... Line 93...
75
	protected function viderMotsClesTexteObsSansMotsCles() {
93
	protected function viderMotsClesTexteObsSansMotsCles() {
76
		$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
94
		$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
77
		$res = $this->bdd->requeter($req);
95
		$res = $this->bdd->requeter($req);
78
		echo "$res observations mises à jour\n";
96
		echo "$res observations mises à jour\n";
79
	}
97
	}
-
 
98
	
-
 
99
	protected function reparerLiaisonsOublieesObs() {
-
 
100
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car 
-
 
101
		// dans la table de liaison il est souvent vide 
-
 
102
		$requete_liaisons = "SELECT com.id_observation, com.id_mot_cle_obs, co.ce_utilisateur ".
-
 
103
					"FROM `cel_obs_mots_cles` com INNER JOIN cel_obs co ON co.id_observation = com.id_observation ";
-
 
104
		
-
 
105
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
-
 
106
		$nb_liaisons_originales = count($liaisons);
-
 
107
		
-
 
108
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
-
 
109
		$requete_mots_cles = "SELECT id_mot_cle_obs, id_utilisateur, mot_cle FROM cel_mots_cles_obs ";
-
 
110
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
-
 
111
		
-
 
112
		$anciens_mots_cles_fmt = array();
-
 
113
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
-
 
114
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
-
 
115
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
-
 
116
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
-
 
117
			}
-
 
118
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_obs']] = $ancien_mot_cle;
-
 
119
		}
-
 
120
		
-
 
121
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
-
 
122
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_obs";
-
 
123
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
-
 
124
		
-
 
125
		$nouveau_mots_cles_fmt = array();
-
 
126
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
-
 
127
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
-
 
128
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
-
 
129
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
-
 
130
			}
-
 
131
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
-
 
132
		}
-
 
133
		
-
 
134
		$anciens_mot_cles_pas_trouves = 0;
-
 
135
		$nouveaux_mot_cles_pas_trouves = 0;
-
 
136
		$utilisateurs_pas_trouves = 0;
-
 
137
		$valeurs_a_inserer = array();
-
 
138
		
-
 
139
		$ids_obs = array();
-
 
140
		
-
 
141
		foreach($liaisons as &$liaison) {
-
 
142
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
-
 
143
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_obs'];
-
 
144
			
-
 
145
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
-
 
146
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
-
 
147
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
-
 
148
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
-
 
149
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
-
 
150
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
-
 
151
							
-
 
152
							$valeurs_a_inserer[] = array(
-
 
153
													'id_element_lie' => $liaison['id_observation'],
-
 
154
													'id_mot_cle' => $nouvel_id_mot_cle,
-
 
155
													'ancienne_liaison' => $liaison
-
 
156
							);
-
 
157
							$ids_obs[] = $liaison['id_observation'];
-
 
158
						} else {
-
 
159
							$nouveaux_mot_cles_pas_trouves++;
-
 
160
						}
-
 
161
					} else {
-
 
162
						
-
 
163
					}
-
 
164
					
-
 
165
				} else {
-
 
166
					$anciens_mot_cles_pas_trouves++;
-
 
167
				}
-
 
168
			} else {
-
 
169
				$utilisateurs_pas_trouves++;
-
 
170
			}
-
 
171
		}
-
 
172
		
-
 
173
		echo "Anciennes liaisons ".$nb_liaisons_originales." \n";
-
 
174
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
-
 
175
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
-
 
176
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
-
 
177
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
-
 
178
		
-
 
179
		$tranches = array_chunk($valeurs_a_inserer, 800);
-
 
180
 
-
 
181
		foreach($tranches as $tranche) {
-
 
182
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
-
 
183
					                      "VALUES ";
-
 
184
			foreach($tranche as $l) {
-
 
185
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
-
 
186
			}
-
 
187
			$requete_insertion = rtrim($requete_insertion, ',');
-
 
188
			$insertion = $this->bdd->requeter($requete_insertion);
-
 
189
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
-
 
190
		}
-
 
191
		echo "\n";
-
 
192
	}
-
 
193
	
-
 
194
	private function reparerLiaisonsOublieesImages() {
-
 
195
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car
-
 
196
		// dans la table de liaison il est souvent vide
-
 
197
		$requete_liaisons = "SELECT cim.id_image, cim.id_mot_cle_image, ci.ce_utilisateur ".
-
 
198
							"FROM cel_images_mots_cles cim INNER JOIN cel_images ci ON ci.id_image = cim.id_image ";
-
 
199
 
-
 
200
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
-
 
201
		
-
 
202
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
-
 
203
		$requete_mots_cles = "SELECT id_mot_cle_image, id_utilisateur, mot_cle FROM cel_mots_cles_images ";
-
 
204
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
-
 
205
		
-
 
206
		$anciens_mots_cles_fmt = array();
-
 
207
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
-
 
208
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
-
 
209
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
-
 
210
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
-
 
211
			}
-
 
212
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_image']] = $ancien_mot_cle;
-
 
213
		}
-
 
214
		
-
 
215
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
-
 
216
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_images";
-
 
217
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
-
 
218
		
-
 
219
		$nouveau_mots_cles_fmt = array();
-
 
220
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
-
 
221
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
-
 
222
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
-
 
223
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
-
 
224
			}
-
 
225
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
-
 
226
		}
-
 
227
		
-
 
228
		$anciens_mot_cles_pas_trouves = 0;
-
 
229
		$nouveaux_mot_cles_pas_trouves = 0;
-
 
230
		$utilisateurs_pas_trouves = 0;
-
 
231
		$valeurs_a_inserer = array();
-
 
232
		
-
 
233
		foreach($liaisons as &$liaison) {
-
 
234
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
-
 
235
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_image'];
-
 
236
				
-
 
237
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
-
 
238
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
-
 
239
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
-
 
240
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
-
 
241
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
-
 
242
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
-
 
243
								
-
 
244
							$valeurs_a_inserer[] = array(
-
 
245
															'id_element_lie' => $liaison['id_image'],
-
 
246
															'id_mot_cle' => $nouvel_id_mot_cle,
-
 
247
															'ancienne_liaison' => $liaison
-
 
248
							);
-
 
249
							$ids_imgs[] = $liaison['id_image'];
-
 
250
						} else {
-
 
251
							$nouveaux_mot_cles_pas_trouves++;
-
 
252
						}
-
 
253
					} else {
-
 
254
		
-
 
255
					}
-
 
256
						
-
 
257
				} else {
-
 
258
					$anciens_mot_cles_pas_trouves++;
-
 
259
				}
-
 
260
			} else {
-
 
261
				$utilisateurs_pas_trouves++;
-
 
262
			}
-
 
263
		}
-
 
264
		
-
 
265
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
-
 
266
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
-
 
267
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
-
 
268
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
-
 
269
 
-
 
270
		$tranches = array_chunk($valeurs_a_inserer, 800);
-
 
271
 
-
 
272
		foreach($tranches as $tranche) {
-
 
273
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_images_liaison (id_element_lie, id_mot_cle) ".
-
 
274
					                      "VALUES ";
-
 
275
			foreach($tranche as $l) {
-
 
276
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
-
 
277
			}
-
 
278
			$requete_insertion = rtrim($requete_insertion, ',');
-
 
279
			$insertion = $this->bdd->requeter($requete_insertion);
-
 
280
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
-
 
281
		}
-
 
282
		echo "\n";
-
 
283
	}
80
}
284
}
81
?>
285
?>
82
286