Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2229 Rev 2415
Line 1... Line 1...
1
<?php
1
<?php
-
 
2
// declare(encoding='UTF-8');
-
 
3
/**
-
 
4
 * Classe de maintenance de la base de données du CEL.
-
 
5
 *
-
 
6
 * Utilisation :
-
 
7
 * - <code>/opt/lamp/bin/php cli.php maintenance -a (voir méthode executer)</code>
-
 
8
 *
-
 
9
 * @category   CEL
-
 
10
 * @package    Scripts
-
 
11
 * @subpackage Maintenance
-
 
12
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
-
 
13
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
-
 
14
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
-
 
15
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
-
 
16
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
-
 
17
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
-
 
18
 */
2
class Maintenance extends Script {
19
class Maintenance extends Script {
Line 3... Line 20...
3
 
20
 
4
	protected $bdd;
21
	protected $bdd;
5
	protected $parametres_autorises = array(
22
	protected $parametres_autorises = array(
Line 103... Line 120...
103
			}
120
			}
104
		} catch (Exception $e) {
121
		} catch (Exception $e) {
105
			$this->traiterErreur($e->getMessage());
122
			$this->traiterErreur($e->getMessage());
106
		}
123
		}
107
	}
124
	}
108
	
125
 
109
	private function obtenirParametreIntObligatoirePourMethode($param) {
126
	private function obtenirParametreIntObligatoirePourMethode($param) {
110
		$param_val = $this->getParametre($param);
127
		$param_val = $this->getParametre($param);
111
		if(!$param_val || !is_numeric($param_val)) {
128
		if(!$param_val || !is_numeric($param_val)) {
112
			$msg = "Erreur : le paramètre $param est obligatoire pour cette méthode et doit être un entier \n";
129
			$msg = "Erreur : le paramètre $param est obligatoire pour cette méthode et doit être un entier \n";
113
			throw new Exception($msg);
130
			throw new Exception($msg);
Line 127... Line 144...
127
		echo count($res) . " images trouvées\n";
144
		echo count($res) . " images trouvées\n";
128
		foreach ($res as $image) {
145
		foreach ($res as $image) {
129
			$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
146
			$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
130
				. "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'] . "') "
147
				. "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'] . "') "
131
				. "WHERE id_image = '" . $image['id_image'] . "'";
148
				. "WHERE id_image = '" . $image['id_image'] . "'";
132
			$this->bdd->requeter($req); 
149
			$this->bdd->requeter($req);
133
		}
150
		}
134
	}
151
	}
Line 135... Line 152...
135
 
152
 
136
	// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ
153
	// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ
137
	// vide, suite à une erreur
154
	// vide, suite à une erreur
138
	protected function regenererMotsClesTexteObs($tout = false) {
155
	protected function regenererMotsClesTexteObs($tout = false) {
139
		$req = "SELECT id_observation FROM cel_obs WHERE ".
156
		$req = "SELECT id_observation FROM cel_obs WHERE ".
140
				"id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
157
				"id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
141
		if(!$tout) {
158
		if(!$tout) {
142
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
159
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
143
		} 
160
		}
144
		$res = $this->bdd->recupererTous($req);
161
		$res = $this->bdd->recupererTous($req);
145
		echo count($res) . " observations trouvées\n";
162
		echo count($res) . " observations trouvées\n";
146
		foreach ($res as $image) {
163
		foreach ($res as $image) {
147
			$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
164
			$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
148
			. "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'] . "') "
165
			. "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'] . "') "
149
				. "WHERE id_observation = '" . $image['id_observation'] . "'";
166
				. "WHERE id_observation = '" . $image['id_observation'] . "'";
150
			$this->bdd->requeter($req); 
167
			$this->bdd->requeter($req);
151
		}
168
		}
Line 152... Line 169...
152
	}
169
	}
153
 
170
 
Line 162... Line 179...
162
	protected function viderMotsClesTexteObsSansMotsCles() {
179
	protected function viderMotsClesTexteObsSansMotsCles() {
163
		$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
180
		$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
164
		$res = $this->bdd->requeter($req);
181
		$res = $this->bdd->requeter($req);
165
		echo "$res observations mises à jour\n";
182
		echo "$res observations mises à jour\n";
166
	}
183
	}
167
	
184
 
168
	protected function regenererChampsTailleImage() {
185
	protected function regenererChampsTailleImage() {
169
		$req = "SELECT id_image FROM cel_images WHERE hauteur = 0 OR largeur = 0";
186
		$req = "SELECT id_image FROM cel_images WHERE hauteur = 0 OR largeur = 0";
170
		$res = $this->bdd->recupererTous($req);
187
		$res = $this->bdd->recupererTous($req);
171
		
188
 
172
		echo count($res)." images concernees \n";
189
		echo count($res)." images concernees \n";
173
		echo "Début du traitement \n";
190
		echo "Début du traitement \n";
174
		$images_maj = 0;
191
		$images_maj = 0;
175
		$image_meta_ratees = 0;
192
		$image_meta_ratees = 0;
176
		$images_inexistantes = 0;
193
		$images_inexistantes = 0;
177
		
194
 
178
		foreach($res as $image) {
195
		foreach($res as $image) {
179
			$chemin = $this->getCheminImage($image['id_image']); 
196
			$chemin = $this->getCheminImage($image['id_image']);
180
			if(file_exists($chemin)) {
197
			if(file_exists($chemin)) {
181
				list($largeur, $hauteur) = @getimagesize($chemin);
198
				list($largeur, $hauteur) = @getimagesize($chemin);
182
				if(is_numeric($largeur) && is_numeric($hauteur)) {
199
				if(is_numeric($largeur) && is_numeric($hauteur)) {
183
					$req_maj = "UPDATE cel_images SET hauteur = '".$hauteur."', largeur = '".$largeur."' ".
200
					$req_maj = "UPDATE cel_images SET hauteur = '".$hauteur."', largeur = '".$largeur."' ".
184
					           "WHERE id_image = '".$image['id_image']."'";
201
					           "WHERE id_image = '".$image['id_image']."'";
Line 191... Line 208...
191
				}
208
				}
192
			} else {
209
			} else {
193
				$images_inexistantes++;
210
				$images_inexistantes++;
194
			}
211
			}
195
			$this->afficherAvancement("\tImages traitées : ", 1);
212
			$this->afficherAvancement("\tImages traitées : ", 1);
196
		}	
213
		}
197
		echo "\n";
214
		echo "\n";
198
		echo "Fin de la régénération des tailles des images à partir des metadonnées \n";
215
		echo "Fin de la régénération des tailles des images à partir des metadonnées \n";
199
		echo $images_maj." images ont vu leur infos de taille régénérées \n";
216
		echo $images_maj." images ont vu leur infos de taille régénérées \n";
200
		echo $image_meta_ratees." images ont raté l'extraction de metadonnées \n";
217
		echo $image_meta_ratees." images ont raté l'extraction de metadonnées \n";
201
		echo $images_inexistantes." images n'existent pas en tant que fichier \n";
218
		echo $images_inexistantes." images n'existent pas en tant que fichier \n";
202
	}
219
	}
203
	
220
 
204
	private function getCheminImage($id) {
221
	private function getCheminImage($id) {
205
		$chemin_base = Config::get('dossierImages');
222
		$chemin_base = Config::get('dossierImages');
206
				
223
 
207
		$id = sprintf('%09s', $id);
224
		$id = sprintf('%09s', $id);
208
		$id = wordwrap($id, 3 , '_', true);
225
		$id = wordwrap($id, 3 , '_', true);
209
		
226
 
210
		list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);
227
		list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);
211
		
228
 
212
		$chemin = $chemin_base.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/O/'.$id.'_O.jpg';
229
		$chemin = $chemin_base.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/O/'.$id.'_O.jpg';
213
		
230
 
214
		return $chemin;
231
		return $chemin;
215
	}
232
	}
216
	
233
 
217
	protected function reparerLiaisonsOublieesObs() {
234
	protected function reparerLiaisonsOublieesObs() {
218
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car 
235
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car
219
		// dans la table de liaison il est souvent vide 
236
		// dans la table de liaison il est souvent vide
220
		$requete_liaisons = "SELECT com.id_observation, com.id_mot_cle_obs, co.ce_utilisateur ".
237
		$requete_liaisons = "SELECT com.id_observation, com.id_mot_cle_obs, co.ce_utilisateur ".
221
					"FROM `cel_obs_mots_cles` com INNER JOIN cel_obs co ON co.id_observation = com.id_observation ";
238
					"FROM `cel_obs_mots_cles` com INNER JOIN cel_obs co ON co.id_observation = com.id_observation ";
222
		
239
 
223
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
240
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
224
		$nb_liaisons_originales = count($liaisons);
241
		$nb_liaisons_originales = count($liaisons);
225
		
242
 
226
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
243
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
227
		$requete_mots_cles = "SELECT id_mot_cle_obs, id_utilisateur, mot_cle FROM cel_mots_cles_obs ";
244
		$requete_mots_cles = "SELECT id_mot_cle_obs, id_utilisateur, mot_cle FROM cel_mots_cles_obs ";
228
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
245
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
229
		
246
 
230
		$anciens_mots_cles_fmt = array();
247
		$anciens_mots_cles_fmt = array();
231
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
248
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
232
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
249
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
233
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
250
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
234
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
251
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
235
			}
252
			}
236
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_obs']] = $ancien_mot_cle;
253
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_obs']] = $ancien_mot_cle;
237
		}
254
		}
238
		
255
 
239
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
256
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
240
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_obs";
257
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_obs";
241
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
258
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
242
		
259
 
243
		$nouveau_mots_cles_fmt = array();
260
		$nouveau_mots_cles_fmt = array();
244
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
261
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
245
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
262
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
246
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
263
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
247
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
264
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
248
			}
265
			}
249
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][strtolower($nouveau_mot_cle['mot_cle'])] = $nouveau_mot_cle;
266
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][strtolower($nouveau_mot_cle['mot_cle'])] = $nouveau_mot_cle;
250
		}
267
		}
251
		
268
 
252
		$anciens_mot_cles_pas_trouves = 0;
269
		$anciens_mot_cles_pas_trouves = 0;
253
		$nouveaux_mot_cles_pas_trouves = 0;
270
		$nouveaux_mot_cles_pas_trouves = 0;
254
		$utilisateurs_pas_trouves = 0;
271
		$utilisateurs_pas_trouves = 0;
255
		$valeurs_a_inserer = array();
272
		$valeurs_a_inserer = array();
256
		
273
 
257
		$ids_obs = array();
274
		$ids_obs = array();
258
		
275
 
259
		foreach($liaisons as &$liaison) {
276
		foreach($liaisons as &$liaison) {
260
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
277
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
261
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_obs'];
278
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_obs'];
262
			
279
 
263
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
280
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
264
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
281
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
265
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
282
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
266
					$texte_ancien_mot_cle = strtolower($texte_ancien_mot_cle); // l'astuce de ouf !
283
					$texte_ancien_mot_cle = strtolower($texte_ancien_mot_cle); // l'astuce de ouf !
267
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
284
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
268
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
285
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
269
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
286
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
270
							
287
 
271
							$valeurs_a_inserer[] = array(
288
							$valeurs_a_inserer[] = array(
272
													'id_element_lie' => $liaison['id_observation'],
289
													'id_element_lie' => $liaison['id_observation'],
273
													'id_mot_cle' => $nouvel_id_mot_cle,
290
													'id_mot_cle' => $nouvel_id_mot_cle,
274
													'ancienne_liaison' => $liaison
291
													'ancienne_liaison' => $liaison
275
							);
292
							);
276
							$ids_obs[] = $liaison['id_observation'];
293
							$ids_obs[] = $liaison['id_observation'];
277
						} else {
294
						} else {
278
							$nouveaux_mot_cles_pas_trouves++;
295
							$nouveaux_mot_cles_pas_trouves++;
279
						}
296
						}
280
					} else {
297
					} else {
281
						
298
 
282
					}
299
					}
283
					
300
 
284
				} else {
301
				} else {
285
					$anciens_mot_cles_pas_trouves++;
302
					$anciens_mot_cles_pas_trouves++;
286
				}
303
				}
287
			} else {
304
			} else {
288
				$utilisateurs_pas_trouves++;
305
				$utilisateurs_pas_trouves++;
289
			}
306
			}
290
		}
307
		}
291
		
308
 
292
		echo "Anciennes liaisons ".$nb_liaisons_originales." \n";
309
		echo "Anciennes liaisons ".$nb_liaisons_originales." \n";
293
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
310
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
294
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
311
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
295
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
312
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
296
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
313
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
297
		
314
 
298
		$tranches = array_chunk($valeurs_a_inserer, 800);
315
		$tranches = array_chunk($valeurs_a_inserer, 800);
Line 299... Line 316...
299
 
316
 
300
		foreach($tranches as $tranche) {
317
		foreach($tranches as $tranche) {
301
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
318
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
Line 307... Line 324...
307
			$insertion = $this->bdd->requeter($requete_insertion);
324
			$insertion = $this->bdd->requeter($requete_insertion);
308
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
325
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
309
		}
326
		}
310
		echo "\n";
327
		echo "\n";
311
	}
328
	}
312
	
329
 
313
	private function reparerLiaisonsOublieesImages() {
330
	private function reparerLiaisonsOublieesImages() {
314
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car
331
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car
315
		// dans la table de liaison il est souvent vide
332
		// dans la table de liaison il est souvent vide
316
		$requete_liaisons = "SELECT cim.id_image, cim.id_mot_cle_image, ci.ce_utilisateur ".
333
		$requete_liaisons = "SELECT cim.id_image, cim.id_mot_cle_image, ci.ce_utilisateur ".
317
							"FROM cel_images_mots_cles cim INNER JOIN cel_images ci ON ci.id_image = cim.id_image ";
334
							"FROM cel_images_mots_cles cim INNER JOIN cel_images ci ON ci.id_image = cim.id_image ";
Line 318... Line 335...
318
 
335
 
319
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
336
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
320
		
337
 
321
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
338
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
322
		$requete_mots_cles = "SELECT id_mot_cle_image, id_utilisateur, mot_cle FROM cel_mots_cles_images ";
339
		$requete_mots_cles = "SELECT id_mot_cle_image, id_utilisateur, mot_cle FROM cel_mots_cles_images ";
323
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
340
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
324
		
341
 
325
		$anciens_mots_cles_fmt = array();
342
		$anciens_mots_cles_fmt = array();
326
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
343
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
327
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
344
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
328
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
345
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
329
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
346
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
330
			}
347
			}
331
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_image']] = $ancien_mot_cle;
348
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_image']] = $ancien_mot_cle;
332
		}
349
		}
333
		
350
 
334
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
351
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
335
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_images";
352
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_images";
336
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
353
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
337
		
354
 
338
		$nouveau_mots_cles_fmt = array();
355
		$nouveau_mots_cles_fmt = array();
339
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
356
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
340
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
357
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
341
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
358
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
342
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
359
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
343
			}
360
			}
344
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
361
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
345
		}
362
		}
346
		
363
 
347
		$anciens_mot_cles_pas_trouves = 0;
364
		$anciens_mot_cles_pas_trouves = 0;
348
		$nouveaux_mot_cles_pas_trouves = 0;
365
		$nouveaux_mot_cles_pas_trouves = 0;
349
		$utilisateurs_pas_trouves = 0;
366
		$utilisateurs_pas_trouves = 0;
350
		$valeurs_a_inserer = array();
367
		$valeurs_a_inserer = array();
351
		
368
 
352
		foreach($liaisons as &$liaison) {
369
		foreach($liaisons as &$liaison) {
353
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
370
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
354
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_image'];
371
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_image'];
355
				
372
 
356
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
373
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
357
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
374
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
358
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
375
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
359
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
376
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
360
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
377
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
361
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
378
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
362
								
379
 
363
							$valeurs_a_inserer[] = array(
380
							$valeurs_a_inserer[] = array(
364
															'id_element_lie' => $liaison['id_image'],
381
															'id_element_lie' => $liaison['id_image'],
365
															'id_mot_cle' => $nouvel_id_mot_cle,
382
															'id_mot_cle' => $nouvel_id_mot_cle,
366
															'ancienne_liaison' => $liaison
383
															'ancienne_liaison' => $liaison
367
							);
384
							);
368
							$ids_imgs[] = $liaison['id_image'];
385
							$ids_imgs[] = $liaison['id_image'];
369
						} else {
386
						} else {
370
							$nouveaux_mot_cles_pas_trouves++;
387
							$nouveaux_mot_cles_pas_trouves++;
371
						}
388
						}
372
					} else {
389
					} else {
373
		
390
 
374
					}
391
					}
375
						
392
 
376
				} else {
393
				} else {
377
					$anciens_mot_cles_pas_trouves++;
394
					$anciens_mot_cles_pas_trouves++;
378
				}
395
				}
379
			} else {
396
			} else {
380
				$utilisateurs_pas_trouves++;
397
				$utilisateurs_pas_trouves++;
381
			}
398
			}
382
		}
399
		}
383
		
400
 
384
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
401
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
385
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
402
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
386
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
403
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
Line 398... Line 415...
398
			$insertion = $this->bdd->requeter($requete_insertion);
415
			$insertion = $this->bdd->requeter($requete_insertion);
399
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
416
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
400
		}
417
		}
401
		echo "\n";
418
		echo "\n";
402
	}
419
	}
403
	
420
 
404
	private function reparerLiaisonsObsParMotsClesTexte($mot_cle_texte_recherche) {
421
	private function reparerLiaisonsObsParMotsClesTexte($mot_cle_texte_recherche) {
405
		$ancienne_table_obs = Config::get('table_obs_recup');
422
		$ancienne_table_obs = Config::get('table_obs_recup');
406
		$requete_anciens_mots_cles_texte = "SELECT ce_utilisateur, id_observation, mots_cles_texte ".
423
		$requete_anciens_mots_cles_texte = "SELECT ce_utilisateur, id_observation, mots_cles_texte ".
407
											"FROM ".$ancienne_table_obs." WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%'";
424
											"FROM ".$ancienne_table_obs." WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%'";
408
		$obs_a_mot_cle = $this->bdd->recupererTous($requete_anciens_mots_cles_texte);
425
		$obs_a_mot_cle = $this->bdd->recupererTous($requete_anciens_mots_cles_texte);
409
		
426
 
410
		$requete_nouveaux_mots_cle = "SELECT * FROM cel_arbre_mots_cles_obs ".
427
		$requete_nouveaux_mots_cle = "SELECT * FROM cel_arbre_mots_cles_obs ".
411
									"WHERE id_utilisateur IN ". 
428
									"WHERE id_utilisateur IN ".
412
									"(SELECT id_utilisateur FROM ".$ancienne_table_obs." ".
429
									"(SELECT id_utilisateur FROM ".$ancienne_table_obs." ".
413
									"WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%')";
430
									"WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%')";
414
		$nouveaux_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cle);
431
		$nouveaux_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cle);
415
		
432
 
416
		$mots_cles_indexes = array();
433
		$mots_cles_indexes = array();
417
		foreach($nouveaux_mots_cles as $mot_cle) {
434
		foreach($nouveaux_mots_cles as $mot_cle) {
418
			$mots_cles_indexes[$mot_cle['id_utilisateur']][strtolower($mot_cle['mot_cle'])] = $mot_cle;
435
			$mots_cles_indexes[$mot_cle['id_utilisateur']][strtolower($mot_cle['mot_cle'])] = $mot_cle;
419
		}
436
		}
420
				
437
 
421
		$liaisons_a_inserer = array();
438
		$liaisons_a_inserer = array();
422
		$utilFoirax = 0;
439
		$utilFoirax = 0;
423
		$mcFoirax = 0;
440
		$mcFoirax = 0;
424
		foreach($obs_a_mot_cle as $obs) {
441
		foreach($obs_a_mot_cle as $obs) {
425
			$mots_cles_texte_tab = explode(',', $obs['mots_cles_texte']);
442
			$mots_cles_texte_tab = explode(',', $obs['mots_cles_texte']);
Line 468... Line 485...
468
		if (count($idsImages) > 0) {
485
		if (count($idsImages) > 0) {
469
			// On vire ceux qui ont le doublon mais qui ont aussi la cible
486
			// On vire ceux qui ont le doublon mais qui ont aussi la cible
470
			$q2 = "DELETE FROM cel_mots_cles_images_liaison WHERE id_mot_cle = $idDoublon AND id_element_lie IN (" . implode(',', $idsImages) . ");";
487
			$q2 = "DELETE FROM cel_mots_cles_images_liaison WHERE id_mot_cle = $idDoublon AND id_element_lie IN (" . implode(',', $idsImages) . ");";
471
			$r2 = $this->bdd->requeter($q2);
488
			$r2 = $this->bdd->requeter($q2);
472
		}
489
		}
473
	
490
 
474
		// On convertit tous les doublons en cible
491
		// On convertit tous les doublons en cible
475
		$q3 = "UPDATE cel_mots_cles_images_liaison SET id_mot_cle = $idCible WHERE id_mot_cle = $idDoublon;";
492
		$q3 = "UPDATE cel_mots_cles_images_liaison SET id_mot_cle = $idCible WHERE id_mot_cle = $idDoublon;";
476
		$r3 = $this->bdd->requeter($q3);
493
		$r3 = $this->bdd->requeter($q3);
Line 477... Line 494...
477
 
494
 
Line 497... Line 514...
497
		if (count($idsObs) > 0) {
514
		if (count($idsObs) > 0) {
498
			// On vire ceux qui ont le doublon mais qui ont aussi la cible
515
			// On vire ceux qui ont le doublon mais qui ont aussi la cible
499
			$q2 = "DELETE FROM cel_mots_cles_obs_liaison WHERE id_mot_cle = $idDoublon AND id_element_lie IN (" . implode(',', $idsObs) . ");";
516
			$q2 = "DELETE FROM cel_mots_cles_obs_liaison WHERE id_mot_cle = $idDoublon AND id_element_lie IN (" . implode(',', $idsObs) . ");";
500
			$r2 = $this->bdd->requeter($q2);
517
			$r2 = $this->bdd->requeter($q2);
501
		}
518
		}
502
	
519
 
503
		// On convertit tous les doublons en cible
520
		// On convertit tous les doublons en cible
504
		$q3 = "UPDATE cel_mots_cles_obs_liaison SET id_mot_cle = $idCible WHERE id_mot_cle = $idDoublon;";
521
		$q3 = "UPDATE cel_mots_cles_obs_liaison SET id_mot_cle = $idCible WHERE id_mot_cle = $idDoublon;";
505
		$r3 = $this->bdd->requeter($q3);
522
		$r3 = $this->bdd->requeter($q3);
Line 506... Line 523...
506
 
523
 
Line 558... Line 575...
558
				}
575
				}
559
			}
576
			}
560
		}
577
		}
561
		echo "$aTraiter groupes ($mode) ont été réduits" . PHP_EOL;
578
		echo "$aTraiter groupes ($mode) ont été réduits" . PHP_EOL;
562
	}
579
	}
563
	
580
 
564
	private function reduireEtNormaliserMotsClesImages($util=null) {
581
	private function reduireEtNormaliserMotsClesImages($util=null) {
565
		$this->reduireEtNormaliserMotsCles('cel_arbre_mots_cles_images', 'chemin', 'images', $util);
582
		$this->reduireEtNormaliserMotsCles('cel_arbre_mots_cles_images', 'chemin', 'images', $util);
566
	}
583
	}
567
	
584
 
568
	private function reduireEtNormaliserMotsClesObs($util=null) {
585
	private function reduireEtNormaliserMotsClesObs($util=null) {
569
		$this->reduireEtNormaliserMotsCles('cel_arbre_mots_cles_obs', 'chemin', 'obs', $util);
586
		$this->reduireEtNormaliserMotsCles('cel_arbre_mots_cles_obs', 'chemin', 'obs', $util);
570
	}
587
	}
571
	
588
 
572
	private function reduireEtNormaliserMotsCles($table, $colonne, $mode = "images", $util=null) {		
589
	private function reduireEtNormaliserMotsCles($table, $colonne, $mode = "images", $util=null) {
573
		echo "Suppression des accents dans la table $table, colonne $colonne ...";
590
		echo "Suppression des accents dans la table $table, colonne $colonne ...";
574
		$this->supprimerAccents($table, $colonne, $util);
591
		$this->supprimerAccents($table, $colonne, $util);
575
		echo "effectuée \n";
592
		echo "effectuée \n";
576
		echo "Suppression des majuscules dans la table $table, colonne $colonne ...";
593
		echo "Suppression des majuscules dans la table $table, colonne $colonne ...";
577
		$this->supprimerMajuscules($table, $colonne, $util);
594
		$this->supprimerMajuscules($table, $colonne, $util);
Line 586... Line 603...
586
			}
603
			}
587
		} else {
604
		} else {
588
			echo "Réduction de tous les mots clés $mode \n";
605
			echo "Réduction de tous les mots clés $mode \n";
589
			$req_utilisateurs = "SELECT DISTINCT id_utilisateur FROM ".$table;
606
			$req_utilisateurs = "SELECT DISTINCT id_utilisateur FROM ".$table;
590
			$utilisateurs = $this->bdd->recupererTous($req_utilisateurs);
607
			$utilisateurs = $this->bdd->recupererTous($req_utilisateurs);
591
			
608
 
592
			foreach($utilisateurs as $utilisateur) {
609
			foreach($utilisateurs as $utilisateur) {
593
				echo "Utilisateur en cours de traitement : ".$utilisateur['id_utilisateur']." \n";
610
				echo "Utilisateur en cours de traitement : ".$utilisateur['id_utilisateur']." \n";
594
				if($mode == "images") {
611
				if($mode == "images") {
595
					$this->reductionMotsClesImagesUtilisateur($utilisateur['id_utilisateur']);
612
					$this->reductionMotsClesImagesUtilisateur($utilisateur['id_utilisateur']);
596
				} elseif($mode == "obs") {
613
				} elseif($mode == "obs") {
Line 598... Line 615...
598
				}
615
				}
599
			}
616
			}
600
		}
617
		}
601
		echo "Fin de la réduction des mots clés $mode \n";
618
		echo "Fin de la réduction des mots clés $mode \n";
602
	}
619
	}
603
	
620
 
604
	private function supprimerMajuscules($table, $colonne, $util=null) {
621
	private function supprimerMajuscules($table, $colonne, $util=null) {
605
		$requete = "UPDATE ".$table." SET ".$colonne." = LOWER(".$colonne.")";
622
		$requete = "UPDATE ".$table." SET ".$colonne." = LOWER(".$colonne.")";
606
		if ($util !== null) {
623
		if ($util !== null) {
607
			$requete .= " WHERE id_utilisateur = $util";
624
			$requete .= " WHERE id_utilisateur = $util";
608
		}
625
		}
609
		$this->bdd->requeter($requete); 
626
		$this->bdd->requeter($requete);
610
	}
627
	}
611
	
628
 
612
	private function supprimerAccents($table, $colonne, $util=null) {
629
	private function supprimerAccents($table, $colonne, $util=null) {
613
		
630
 
614
		$requetes = array(
631
		$requetes = array(
615
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Š','S')",
632
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Š','S')",
616
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'š','s')",
633
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'š','s')",
617
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ð','Dj')",
634
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ð','Dj')",
618
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ž','Z')",
635
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ž','Z')",
Line 678... Line 695...
678
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ý','y')",
695
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ý','y')",
679
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'þ','b')",
696
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'þ','b')",
680
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ÿ','y')",
697
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ÿ','y')",
681
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ƒ','f')",
698
			"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ƒ','f')",
682
		);
699
		);
683
		
700
 
684
		foreach($requetes as $requete) {
701
		foreach($requetes as $requete) {
685
			if ($util !== null) {
702
			if ($util !== null) {
686
				$requete .= " WHERE id_utilisateur = $util";
703
				$requete .= " WHERE id_utilisateur = $util";
687
			}
704
			}
688
			$this->bdd->requeter($requete);
705
			$this->bdd->requeter($requete);
689
		}
706
		}
690
	}
707
	}
691
}
-
 
692
?>
-
 
693
708
}
-
 
709
694
710