Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2102 Rev 2103
1
<?php
1
<?php
2
class Maintenance extends Script {
2
class Maintenance extends Script {
3
 
3
 
4
	protected $bdd;
4
	protected $bdd;
5
 
5
 
6
	public function __construct($script_nom, $parametres_cli) {
6
	public function __construct($script_nom, $parametres_cli) {
7
		parent::__construct($script_nom, $parametres_cli);
7
		parent::__construct($script_nom, $parametres_cli);
8
		$this->bdd = new Bdd();
8
		$this->bdd = new Bdd();
9
	}
9
	}
10
 
10
 
11
	public function executer() {
11
	public function executer() {
12
		$cmd = $this->getParametre('a');
12
		$cmd = $this->getParametre('a');
13
		try {
13
		try {
14
			switch ($cmd) {
14
			switch ($cmd) {
15
				case 'regenererMotsClesTexteObs' :
15
				case 'regenererMotsClesTexteObs' :
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;
27
				case 'regenererChampsTailleImage' :
33
				case 'regenererChampsTailleImage' :
28
					$this->regenererChampsTailleImage();
34
					$this->regenererChampsTailleImage();
29
					break;
35
					break;
30
				case 'reparerLiaisonsOublieesObs' :
36
				case 'reparerLiaisonsOublieesObs' :
31
					$this->reparerLiaisonsOublieesObs();
37
					$this->reparerLiaisonsOublieesObs();
32
					break;
38
					break;
33
				case 'reparerLiaisonsOublieesImages' :
39
				case 'reparerLiaisonsOublieesImages' :
34
					$this->reparerLiaisonsOublieesImages();
40
					$this->reparerLiaisonsOublieesImages();
35
					break;
41
					break;
36
				default :
42
				default :
37
					$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
43
					$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
38
						"Commandes existantes : regenererMotsClesTexteImages, regenererMotsClesTexteObs";
44
						"Commandes existantes : regenererMotsClesTexteImages, regenererMotsClesTexteObs";
39
					throw new Exception($msg);
45
					throw new Exception($msg);
40
			}
46
			}
41
		} catch (Exception $e) {
47
		} catch (Exception $e) {
42
			$this->traiterErreur($e->getMessage());
48
			$this->traiterErreur($e->getMessage());
43
		}
49
		}
44
	}
50
	}
45
 
51
 
46
	// Régénère le champ "mots_cles_texte" pour toutes les images ayant des mots clés mais ayant ce champ
52
	// Régénère le champ "mots_cles_texte" pour toutes les images ayant des mots clés mais ayant ce champ
47
	// vide, suite à une erreur
53
	// vide, suite à une erreur
48
	protected function regenererMotsClesTexteImages() {
54
	protected function regenererMotsClesTexteImages($tout = false) {
49
		$req = "SELECT id_image FROM cel_images WHERE (mots_cles_texte IS NULL OR mots_cles_texte='') "
55
		$req = "SELECT id_image FROM cel_images WHERE ".
50
			. "AND id_image IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
56
				"id_image IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
-
 
57
		if(!$tout) {
-
 
58
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
-
 
59
		}
51
		$res = $this->bdd->recupererTous($req);
60
		$res = $this->bdd->recupererTous($req);
52
		echo count($res) . " images trouvées\n";
61
		echo count($res) . " images trouvées\n";
53
		foreach ($res as $image) {
62
		foreach ($res as $image) {
54
			$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
63
			$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
55
				. "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'] . "') "
64
				. "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'] . "') "
56
				. "WHERE id_image = '" . $image['id_image'] . "'";
65
				. "WHERE id_image = '" . $image['id_image'] . "'";
57
			$this->bdd->requeter($req); 
66
			$this->bdd->requeter($req); 
58
		}
67
		}
59
	}
68
	}
60
 
69
 
61
	// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ
70
	// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ
62
	// vide, suite à une erreur
71
	// vide, suite à une erreur
63
	protected function regenererMotsClesTexteObs() {
72
	protected function regenererMotsClesTexteObs($tout = false) {
64
		$req = "SELECT id_observation FROM cel_obs WHERE (mots_cles_texte IS NULL OR mots_cles_texte='') "
73
		$req = "SELECT id_observation FROM cel_obs WHERE ".
65
			. "AND id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
74
				"id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
-
 
75
		if(!$tout) {
-
 
76
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
-
 
77
		} 
66
		$res = $this->bdd->recupererTous($req);
78
		$res = $this->bdd->recupererTous($req);
67
		echo count($res) . " observations trouvées\n";
79
		echo count($res) . " observations trouvées\n";
68
		foreach ($res as $image) {
80
		foreach ($res as $image) {
69
			$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
81
			$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
70
			. "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'] . "') "
82
			. "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'] . "') "
71
				. "WHERE id_observation = '" . $image['id_observation'] . "'";
83
				. "WHERE id_observation = '" . $image['id_observation'] . "'";
72
			$this->bdd->requeter($req); 
84
			$this->bdd->requeter($req); 
73
		}
85
		}
74
	}
86
	}
75
 
87
 
76
	// Vide le champ "mots_cles_texte" pour toutes les images n'ayant aucun mot clé
88
	// Vide le champ "mots_cles_texte" pour toutes les images n'ayant aucun mot clé
77
	protected function viderMotsClesTexteImagesSansMotsCles() {
89
	protected function viderMotsClesTexteImagesSansMotsCles() {
78
		$req = "UPDATE cel_images SET mots_cles_texte = NULL WHERE id_image NOT IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
90
		$req = "UPDATE cel_images SET mots_cles_texte = NULL WHERE id_image NOT IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
79
		$res = $this->bdd->requeter($req);
91
		$res = $this->bdd->requeter($req);
80
		echo "$res images mises à jour\n";
92
		echo "$res images mises à jour\n";
81
	}
93
	}
82
 
94
 
83
	// Vide le champ "mots_cles_texte" pour toutes les obs n'ayant aucun mot clé
95
	// Vide le champ "mots_cles_texte" pour toutes les obs n'ayant aucun mot clé
84
	protected function viderMotsClesTexteObsSansMotsCles() {
96
	protected function viderMotsClesTexteObsSansMotsCles() {
85
		$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
97
		$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
86
		$res = $this->bdd->requeter($req);
98
		$res = $this->bdd->requeter($req);
87
		echo "$res observations mises à jour\n";
99
		echo "$res observations mises à jour\n";
88
	}
100
	}
89
	
101
	
90
	protected function regenererChampsTailleImage() {
102
	protected function regenererChampsTailleImage() {
91
		$req = "SELECT id_image FROM cel_images WHERE hauteur = 0 OR largeur = 0";
103
		$req = "SELECT id_image FROM cel_images WHERE hauteur = 0 OR largeur = 0";
92
		$res = $this->bdd->recupererTous($req);
104
		$res = $this->bdd->recupererTous($req);
93
		
105
		
94
		echo count($res)." images concernees \n";
106
		echo count($res)." images concernees \n";
95
		echo "Début du traitement \n";
107
		echo "Début du traitement \n";
96
		$images_maj = 0;
108
		$images_maj = 0;
97
		$image_meta_ratees = 0;
109
		$image_meta_ratees = 0;
98
		$images_inexistantes = 0;
110
		$images_inexistantes = 0;
99
		
111
		
100
		foreach($res as $image) {
112
		foreach($res as $image) {
101
			$chemin = $this->getCheminImage($image['id_image']); 
113
			$chemin = $this->getCheminImage($image['id_image']); 
102
			if(file_exists($chemin)) {
114
			if(file_exists($chemin)) {
103
				list($largeur, $hauteur) = @getimagesize($chemin);
115
				list($largeur, $hauteur) = @getimagesize($chemin);
104
				if(is_numeric($largeur) && is_numeric($hauteur)) {
116
				if(is_numeric($largeur) && is_numeric($hauteur)) {
105
					$req_maj = "UPDATE cel_images SET hauteur = '".$hauteur."', largeur = '".$largeur."' ".
117
					$req_maj = "UPDATE cel_images SET hauteur = '".$hauteur."', largeur = '".$largeur."' ".
106
					           "WHERE id_image = '".$image['id_image']."'";
118
					           "WHERE id_image = '".$image['id_image']."'";
107
					$maj_taille_image = $this->bdd->requeter($req_maj);
119
					$maj_taille_image = $this->bdd->requeter($req_maj);
108
					if($maj_taille_image) {
120
					if($maj_taille_image) {
109
						$images_maj++;
121
						$images_maj++;
110
					}
122
					}
111
				} else {
123
				} else {
112
					$image_meta_ratees++;
124
					$image_meta_ratees++;
113
				}
125
				}
114
			} else {
126
			} else {
115
				$images_inexistantes++;
127
				$images_inexistantes++;
116
			}
128
			}
117
			$this->afficherAvancement("\tImages traitées : ", 1);
129
			$this->afficherAvancement("\tImages traitées : ", 1);
118
		}	
130
		}	
119
		echo "\n";
131
		echo "\n";
120
		echo "Fin de la régénération des tailles des images à partir des metadonnées \n";
132
		echo "Fin de la régénération des tailles des images à partir des metadonnées \n";
121
		echo $images_maj." images ont vu leur infos de taille régénérées \n";
133
		echo $images_maj." images ont vu leur infos de taille régénérées \n";
122
		echo $image_meta_ratees." images ont raté l'extraction de metadonnées \n";
134
		echo $image_meta_ratees." images ont raté l'extraction de metadonnées \n";
123
		echo $images_inexistantes." images n'existent pas en tant que fichier \n";
135
		echo $images_inexistantes." images n'existent pas en tant que fichier \n";
124
	}
136
	}
125
	
137
	
126
	private function getCheminImage($id) {
138
	private function getCheminImage($id) {
127
		$chemin_base = Config::get('dossierImages');
139
		$chemin_base = Config::get('dossierImages');
128
				
140
				
129
		$id = sprintf('%09s', $id);
141
		$id = sprintf('%09s', $id);
130
		$id = wordwrap($id, 3 , '_', true);
142
		$id = wordwrap($id, 3 , '_', true);
131
		
143
		
132
		list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);
144
		list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);
133
		
145
		
134
		$chemin = $chemin_base.$dossierNiveau1.'/'.$dossierNiveau2.'/O/'.$id.'_O.jpg';
146
		$chemin = $chemin_base.$dossierNiveau1.'/'.$dossierNiveau2.'/O/'.$id.'_O.jpg';
135
		
147
		
136
		return $chemin;
148
		return $chemin;
137
	}
149
	}
138
	
150
	
139
	protected function reparerLiaisonsOublieesObs() {
151
	protected function reparerLiaisonsOublieesObs() {
140
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car 
152
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car 
141
		// dans la table de liaison il est souvent vide 
153
		// dans la table de liaison il est souvent vide 
142
		$requete_liaisons = "SELECT com.id_observation, com.id_mot_cle_obs, co.ce_utilisateur ".
154
		$requete_liaisons = "SELECT com.id_observation, com.id_mot_cle_obs, co.ce_utilisateur ".
143
					"FROM `cel_obs_mots_cles` com INNER JOIN cel_obs co ON co.id_observation = com.id_observation ";
155
					"FROM `cel_obs_mots_cles` com INNER JOIN cel_obs co ON co.id_observation = com.id_observation ";
144
		
156
		
145
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
157
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
146
		$nb_liaisons_originales = count($liaisons);
158
		$nb_liaisons_originales = count($liaisons);
147
		
159
		
148
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
160
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
149
		$requete_mots_cles = "SELECT id_mot_cle_obs, id_utilisateur, mot_cle FROM cel_mots_cles_obs ";
161
		$requete_mots_cles = "SELECT id_mot_cle_obs, id_utilisateur, mot_cle FROM cel_mots_cles_obs ";
150
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
162
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
151
		
163
		
152
		$anciens_mots_cles_fmt = array();
164
		$anciens_mots_cles_fmt = array();
153
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
165
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
154
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
166
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
155
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
167
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
156
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
168
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
157
			}
169
			}
158
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_obs']] = $ancien_mot_cle;
170
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_obs']] = $ancien_mot_cle;
159
		}
171
		}
160
		
172
		
161
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
173
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
162
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_obs";
174
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_obs";
163
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
175
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
164
		
176
		
165
		$nouveau_mots_cles_fmt = array();
177
		$nouveau_mots_cles_fmt = array();
166
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
178
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
167
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
179
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
168
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
180
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
169
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
181
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
170
			}
182
			}
171
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
183
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
172
		}
184
		}
173
		
185
		
174
		$anciens_mot_cles_pas_trouves = 0;
186
		$anciens_mot_cles_pas_trouves = 0;
175
		$nouveaux_mot_cles_pas_trouves = 0;
187
		$nouveaux_mot_cles_pas_trouves = 0;
176
		$utilisateurs_pas_trouves = 0;
188
		$utilisateurs_pas_trouves = 0;
177
		$valeurs_a_inserer = array();
189
		$valeurs_a_inserer = array();
178
		
190
		
179
		$ids_obs = array();
191
		$ids_obs = array();
180
		
192
		
181
		foreach($liaisons as &$liaison) {
193
		foreach($liaisons as &$liaison) {
182
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
194
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
183
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_obs'];
195
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_obs'];
184
			
196
			
185
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
197
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
186
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
198
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
187
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
199
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
188
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
200
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
189
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
201
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
190
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
202
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
191
							
203
							
192
							$valeurs_a_inserer[] = array(
204
							$valeurs_a_inserer[] = array(
193
													'id_element_lie' => $liaison['id_observation'],
205
													'id_element_lie' => $liaison['id_observation'],
194
													'id_mot_cle' => $nouvel_id_mot_cle,
206
													'id_mot_cle' => $nouvel_id_mot_cle,
195
													'ancienne_liaison' => $liaison
207
													'ancienne_liaison' => $liaison
196
							);
208
							);
197
							$ids_obs[] = $liaison['id_observation'];
209
							$ids_obs[] = $liaison['id_observation'];
198
						} else {
210
						} else {
199
							$nouveaux_mot_cles_pas_trouves++;
211
							$nouveaux_mot_cles_pas_trouves++;
200
						}
212
						}
201
					} else {
213
					} else {
202
						
214
						
203
					}
215
					}
204
					
216
					
205
				} else {
217
				} else {
206
					$anciens_mot_cles_pas_trouves++;
218
					$anciens_mot_cles_pas_trouves++;
207
				}
219
				}
208
			} else {
220
			} else {
209
				$utilisateurs_pas_trouves++;
221
				$utilisateurs_pas_trouves++;
210
			}
222
			}
211
		}
223
		}
212
		
224
		
213
		echo "Anciennes liaisons ".$nb_liaisons_originales." \n";
225
		echo "Anciennes liaisons ".$nb_liaisons_originales." \n";
214
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
226
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
215
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
227
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
216
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
228
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
217
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
229
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
218
		
230
		
219
		$tranches = array_chunk($valeurs_a_inserer, 800);
231
		$tranches = array_chunk($valeurs_a_inserer, 800);
220
 
232
 
221
		foreach($tranches as $tranche) {
233
		foreach($tranches as $tranche) {
222
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
234
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
223
					                      "VALUES ";
235
					                      "VALUES ";
224
			foreach($tranche as $l) {
236
			foreach($tranche as $l) {
225
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
237
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
226
			}
238
			}
227
			$requete_insertion = rtrim($requete_insertion, ',');
239
			$requete_insertion = rtrim($requete_insertion, ',');
228
			$insertion = $this->bdd->requeter($requete_insertion);
240
			$insertion = $this->bdd->requeter($requete_insertion);
229
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
241
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
230
		}
242
		}
231
		echo "\n";
243
		echo "\n";
232
		
-
 
233
		// éventuellement dans le cas ou l'on verrait des mots clés manquants dans l'index texte
-
 
234
		/*echo "\nRegénération de l'index des mots clés pour les obs concernées\n";
-
 
235
		$ids_obs = array_unique($ids_obs);
-
 
236
		
-
 
237
		foreach($ids_obs as $id_obs_index) {
-
 
238
			$req_index = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
-
 
239
			. "INNER JOIN cel_mots_cles_obs_liaison cml ON cml.id_mot_cle = cm.id_mot_cle AND cml.id_element_lie = '".$id_obs_index."') "
-
 
240
			. "WHERE id_observation = '".$id_obs_index."'";
-
 
241
			$this->bdd->requeter($req_index);
-
 
242
			$this->afficherAvancement("Index mots clés régénérés ", 1);
-
 
243
		}
-
 
244
		echo "\nFin de la régénération de l'index des mots clés";*/
-
 
245
	}
244
	}
246
	
245
	
247
	private function reparerLiaisonsOublieesImages() {
246
	private function reparerLiaisonsOublieesImages() {
248
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car
247
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car
249
		// dans la table de liaison il est souvent vide
248
		// dans la table de liaison il est souvent vide
250
		$requete_liaisons = "SELECT cim.id_image, cim.id_mot_cle_image, ci.ce_utilisateur ".
249
		$requete_liaisons = "SELECT cim.id_image, cim.id_mot_cle_image, ci.ce_utilisateur ".
251
							"FROM cel_images_mots_cles cim INNER JOIN cel_images ci ON ci.id_image = cim.id_image ";
250
							"FROM cel_images_mots_cles cim INNER JOIN cel_images ci ON ci.id_image = cim.id_image ";
252
 
251
 
253
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
252
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
254
		
253
		
255
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
254
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
256
		$requete_mots_cles = "SELECT id_mot_cle_image, id_utilisateur, mot_cle FROM cel_mots_cles_images ";
255
		$requete_mots_cles = "SELECT id_mot_cle_image, id_utilisateur, mot_cle FROM cel_mots_cles_images ";
257
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
256
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
258
		
257
		
259
		$anciens_mots_cles_fmt = array();
258
		$anciens_mots_cles_fmt = array();
260
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
259
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
261
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
260
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
262
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
261
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
263
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
262
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
264
			}
263
			}
265
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_image']] = $ancien_mot_cle;
264
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_image']] = $ancien_mot_cle;
266
		}
265
		}
267
		
266
		
268
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
267
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
269
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_images";
268
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_images";
270
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
269
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
271
		
270
		
272
		$nouveau_mots_cles_fmt = array();
271
		$nouveau_mots_cles_fmt = array();
273
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
272
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
274
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
273
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
275
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
274
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
276
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
275
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
277
			}
276
			}
278
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
277
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
279
		}
278
		}
280
		
279
		
281
		$anciens_mot_cles_pas_trouves = 0;
280
		$anciens_mot_cles_pas_trouves = 0;
282
		$nouveaux_mot_cles_pas_trouves = 0;
281
		$nouveaux_mot_cles_pas_trouves = 0;
283
		$utilisateurs_pas_trouves = 0;
282
		$utilisateurs_pas_trouves = 0;
284
		$valeurs_a_inserer = array();
283
		$valeurs_a_inserer = array();
285
		
284
		
286
		foreach($liaisons as &$liaison) {
285
		foreach($liaisons as &$liaison) {
287
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
286
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
288
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_image'];
287
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_image'];
289
				
288
				
290
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
289
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
291
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
290
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
292
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
291
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
293
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
292
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
294
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
293
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
295
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
294
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
296
								
295
								
297
							$valeurs_a_inserer[] = array(
296
							$valeurs_a_inserer[] = array(
298
															'id_element_lie' => $liaison['id_image'],
297
															'id_element_lie' => $liaison['id_image'],
299
															'id_mot_cle' => $nouvel_id_mot_cle,
298
															'id_mot_cle' => $nouvel_id_mot_cle,
300
															'ancienne_liaison' => $liaison
299
															'ancienne_liaison' => $liaison
301
							);
300
							);
302
							$ids_imgs[] = $liaison['id_image'];
301
							$ids_imgs[] = $liaison['id_image'];
303
						} else {
302
						} else {
304
							$nouveaux_mot_cles_pas_trouves++;
303
							$nouveaux_mot_cles_pas_trouves++;
305
						}
304
						}
306
					} else {
305
					} else {
307
		
306
		
308
					}
307
					}
309
						
308
						
310
				} else {
309
				} else {
311
					$anciens_mot_cles_pas_trouves++;
310
					$anciens_mot_cles_pas_trouves++;
312
				}
311
				}
313
			} else {
312
			} else {
314
				$utilisateurs_pas_trouves++;
313
				$utilisateurs_pas_trouves++;
315
			}
314
			}
316
		}
315
		}
317
		
316
		
318
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
317
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
319
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
318
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
320
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
319
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
321
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
320
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
322
 
321
 
323
		$tranches = array_chunk($valeurs_a_inserer, 800);
322
		$tranches = array_chunk($valeurs_a_inserer, 800);
324
 
323
 
325
		foreach($tranches as $tranche) {
324
		foreach($tranches as $tranche) {
326
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_images_liaison (id_element_lie, id_mot_cle) ".
325
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_images_liaison (id_element_lie, id_mot_cle) ".
327
					                      "VALUES ";
326
					                      "VALUES ";
328
			foreach($tranche as $l) {
327
			foreach($tranche as $l) {
329
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
328
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
330
			}
329
			}
331
			$requete_insertion = rtrim($requete_insertion, ',');
330
			$requete_insertion = rtrim($requete_insertion, ',');
332
			$insertion = $this->bdd->requeter($requete_insertion);
331
			$insertion = $this->bdd->requeter($requete_insertion);
333
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
332
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
334
		}
333
		}
335
		echo "\n";
334
		echo "\n";
336
		
-
 
337
		// éventuellement dans le cas ou l'on verrait des mots clés manquants dans l'index texte
-
 
338
		/*echo "\nRegénération de l'index des mots clés pour les obs concernées\n";
-
 
339
		$ids_imgs = array_unique($ids_imgs);
-
 
340
		
-
 
341
		foreach($ids_imgs as $id_image_index) {
-
 
342
			$req_index = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
-
 
343
			. "INNER JOIN cel_mots_cles_images_liaison cml ON cml.id_mot_cle = cm.id_mot_cle AND cml.id_element_lie = '".$id_image_index."') "
-
 
344
			. "WHERE id_image = '".$id_image_index."'";
-
 
345
			$this->bdd->requeter($req_index);
-
 
346
			$this->afficherAvancement("Index mots clés régénérés ", 1);
-
 
347
		}
-
 
348
		echo "\nFin de la régénération de l'index des mots clés";*/
-
 
349
	}
335
	}
350
}
336
}
351
?>
337
?>