Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2140 Rev 2142
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"),
-
 
8
		'-cible' => array(false, '1', "Id de l'autre mot clé")
7
	);
9
	);
8
 
10
 
9
	public function __construct($script_nom, $parametres_cli) {
11
	public function __construct($script_nom, $parametres_cli) {
10
		parent::__construct($script_nom, $parametres_cli);
12
		parent::__construct($script_nom, $parametres_cli);
11
		$this->bdd = new Bdd();
13
		$this->bdd = new Bdd();
12
	}
14
	}
13
 
15
 
14
	public function executer() {
16
	public function executer() {
15
		$cmd = $this->getParametre('a');
17
		$cmd = $this->getParametre('a');
16
		try {
18
		try {
17
			switch ($cmd) {
19
			switch ($cmd) {
18
				case 'regenererMotsClesTexteObs' :
20
				case 'regenererMotsClesTexteObs' :
19
					$this->regenererMotsClesTexteObs();
21
					$this->regenererMotsClesTexteObs();
20
					break;
22
					break;
21
				case 'regenererMotsClesTexteImages' :
23
				case 'regenererMotsClesTexteImages' :
22
					$this->regenererMotsClesTexteImages();
24
					$this->regenererMotsClesTexteImages();
23
					break;
25
					break;
24
				case 'regenererMotsClesTexteObsTout' :
26
				case 'regenererMotsClesTexteObsTout' :
25
					$this->regenererMotsClesTexteObs(true);
27
					$this->regenererMotsClesTexteObs(true);
26
					break;
28
					break;
27
				case 'regenererMotsClesTexteImagesTout' :
29
				case 'regenererMotsClesTexteImagesTout' :
28
					$this->regenererMotsClesTexteImages(true);
30
					$this->regenererMotsClesTexteImages(true);
29
					break;
31
					break;
30
				case 'viderMotsClesTexteImagesSansMotsCles' :
32
				case 'viderMotsClesTexteImagesSansMotsCles' :
31
					$this->viderMotsClesTexteImagesSansMotsCles();
33
					$this->viderMotsClesTexteImagesSansMotsCles();
32
					break;
34
					break;
33
				case 'viderMotsClesTexteObsSansMotsCles' :
35
				case 'viderMotsClesTexteObsSansMotsCles' :
34
					$this->viderMotsClesTexteObsSansMotsCles();
36
					$this->viderMotsClesTexteObsSansMotsCles();
35
					break;
37
					break;
36
				case 'regenererChampsTailleImage' :
38
				case 'regenererChampsTailleImage' :
37
					$this->regenererChampsTailleImage();
39
					$this->regenererChampsTailleImage();
38
					break;
40
					break;
39
				case 'reparerLiaisonsOublieesObs' :
41
				case 'reparerLiaisonsOublieesObs' :
40
					$this->reparerLiaisonsOublieesObs();
42
					$this->reparerLiaisonsOublieesObs();
41
					break;
43
					break;
42
				case 'reparerLiaisonsOublieesImages' :
44
				case 'reparerLiaisonsOublieesImages' :
43
					$this->reparerLiaisonsOublieesImages();
45
					$this->reparerLiaisonsOublieesImages();
44
					break;
46
					break;
45
				case 'reparerLiaisonsObsParMotsClesTexte' :
47
				case 'reparerLiaisonsObsParMotsClesTexte' :
46
					$mot_clef = $this->getParametre('mc');
48
					$mot_clef = $this->getParametre('mc');
47
					$this->reparerLiaisonsObsParMotsClesTexte($mot_clef);
49
					$this->reparerLiaisonsObsParMotsClesTexte($mot_clef);
48
					break;
50
					break;
-
 
51
				case 'reductionMotsClesImages' :
-
 
52
					$idDoublon = $this->getParametre('doublon');
-
 
53
					$idCible = $this->getParametre('cible');
-
 
54
					$this->reductionMotsClesImages($idDoublon, $idCible);
-
 
55
					break;
49
				default :
56
				default :
50
					$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
57
					$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
51
						"Commandes existantes : regenererMotsClesTexteImages, regenererMotsClesTexteObs";
58
						"Commandes existantes : regenererMotsClesTexteImages, regenererMotsClesTexteObs";
52
					throw new Exception($msg);
59
					throw new Exception($msg);
53
			}
60
			}
54
		} catch (Exception $e) {
61
		} catch (Exception $e) {
55
			$this->traiterErreur($e->getMessage());
62
			$this->traiterErreur($e->getMessage());
56
		}
63
		}
57
	}
64
	}
58
 
65
 
59
	// Régénère le champ "mots_cles_texte" pour toutes les images ayant des mots clés mais ayant ce champ
66
	// Régénère le champ "mots_cles_texte" pour toutes les images ayant des mots clés mais ayant ce champ
60
	// vide, suite à une erreur
67
	// vide, suite à une erreur
61
	protected function regenererMotsClesTexteImages($tout = false) {
68
	protected function regenererMotsClesTexteImages($tout = false) {
62
		$req = "SELECT id_image FROM cel_images WHERE ".
69
		$req = "SELECT id_image FROM cel_images WHERE ".
63
				"id_image IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
70
				"id_image IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
64
		if(!$tout) {
71
		if(!$tout) {
65
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
72
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
66
		}
73
		}
67
		$res = $this->bdd->recupererTous($req);
74
		$res = $this->bdd->recupererTous($req);
68
		echo count($res) . " images trouvées\n";
75
		echo count($res) . " images trouvées\n";
69
		foreach ($res as $image) {
76
		foreach ($res as $image) {
70
			$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
77
			$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm "
71
				. "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'] . "') "
78
				. "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'] . "') "
72
				. "WHERE id_image = '" . $image['id_image'] . "'";
79
				. "WHERE id_image = '" . $image['id_image'] . "'";
73
			$this->bdd->requeter($req); 
80
			$this->bdd->requeter($req); 
74
		}
81
		}
75
	}
82
	}
76
 
83
 
77
	// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ
84
	// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ
78
	// vide, suite à une erreur
85
	// vide, suite à une erreur
79
	protected function regenererMotsClesTexteObs($tout = false) {
86
	protected function regenererMotsClesTexteObs($tout = false) {
80
		$req = "SELECT id_observation FROM cel_obs WHERE ".
87
		$req = "SELECT id_observation FROM cel_obs WHERE ".
81
				"id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
88
				"id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
82
		if(!$tout) {
89
		if(!$tout) {
83
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
90
			$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')";
84
		} 
91
		} 
85
		$res = $this->bdd->recupererTous($req);
92
		$res = $this->bdd->recupererTous($req);
86
		echo count($res) . " observations trouvées\n";
93
		echo count($res) . " observations trouvées\n";
87
		foreach ($res as $image) {
94
		foreach ($res as $image) {
88
			$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
95
			$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm "
89
			. "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'] . "') "
96
			. "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'] . "') "
90
				. "WHERE id_observation = '" . $image['id_observation'] . "'";
97
				. "WHERE id_observation = '" . $image['id_observation'] . "'";
91
			$this->bdd->requeter($req); 
98
			$this->bdd->requeter($req); 
92
		}
99
		}
93
	}
100
	}
94
 
101
 
95
	// Vide le champ "mots_cles_texte" pour toutes les images n'ayant aucun mot clé
102
	// Vide le champ "mots_cles_texte" pour toutes les images n'ayant aucun mot clé
96
	protected function viderMotsClesTexteImagesSansMotsCles() {
103
	protected function viderMotsClesTexteImagesSansMotsCles() {
97
		$req = "UPDATE cel_images SET mots_cles_texte = NULL WHERE id_image NOT IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
104
		$req = "UPDATE cel_images SET mots_cles_texte = NULL WHERE id_image NOT IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)";
98
		$res = $this->bdd->requeter($req);
105
		$res = $this->bdd->requeter($req);
99
		echo "$res images mises à jour\n";
106
		echo "$res images mises à jour\n";
100
	}
107
	}
101
 
108
 
102
	// Vide le champ "mots_cles_texte" pour toutes les obs n'ayant aucun mot clé
109
	// Vide le champ "mots_cles_texte" pour toutes les obs n'ayant aucun mot clé
103
	protected function viderMotsClesTexteObsSansMotsCles() {
110
	protected function viderMotsClesTexteObsSansMotsCles() {
104
		$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
111
		$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)";
105
		$res = $this->bdd->requeter($req);
112
		$res = $this->bdd->requeter($req);
106
		echo "$res observations mises à jour\n";
113
		echo "$res observations mises à jour\n";
107
	}
114
	}
108
	
115
	
109
	protected function regenererChampsTailleImage() {
116
	protected function regenererChampsTailleImage() {
110
		$req = "SELECT id_image FROM cel_images WHERE hauteur = 0 OR largeur = 0";
117
		$req = "SELECT id_image FROM cel_images WHERE hauteur = 0 OR largeur = 0";
111
		$res = $this->bdd->recupererTous($req);
118
		$res = $this->bdd->recupererTous($req);
112
		
119
		
113
		echo count($res)." images concernees \n";
120
		echo count($res)." images concernees \n";
114
		echo "Début du traitement \n";
121
		echo "Début du traitement \n";
115
		$images_maj = 0;
122
		$images_maj = 0;
116
		$image_meta_ratees = 0;
123
		$image_meta_ratees = 0;
117
		$images_inexistantes = 0;
124
		$images_inexistantes = 0;
118
		
125
		
119
		foreach($res as $image) {
126
		foreach($res as $image) {
120
			$chemin = $this->getCheminImage($image['id_image']); 
127
			$chemin = $this->getCheminImage($image['id_image']); 
121
			if(file_exists($chemin)) {
128
			if(file_exists($chemin)) {
122
				list($largeur, $hauteur) = @getimagesize($chemin);
129
				list($largeur, $hauteur) = @getimagesize($chemin);
123
				if(is_numeric($largeur) && is_numeric($hauteur)) {
130
				if(is_numeric($largeur) && is_numeric($hauteur)) {
124
					$req_maj = "UPDATE cel_images SET hauteur = '".$hauteur."', largeur = '".$largeur."' ".
131
					$req_maj = "UPDATE cel_images SET hauteur = '".$hauteur."', largeur = '".$largeur."' ".
125
					           "WHERE id_image = '".$image['id_image']."'";
132
					           "WHERE id_image = '".$image['id_image']."'";
126
					$maj_taille_image = $this->bdd->requeter($req_maj);
133
					$maj_taille_image = $this->bdd->requeter($req_maj);
127
					if($maj_taille_image) {
134
					if($maj_taille_image) {
128
						$images_maj++;
135
						$images_maj++;
129
					}
136
					}
130
				} else {
137
				} else {
131
					$image_meta_ratees++;
138
					$image_meta_ratees++;
132
				}
139
				}
133
			} else {
140
			} else {
134
				$images_inexistantes++;
141
				$images_inexistantes++;
135
			}
142
			}
136
			$this->afficherAvancement("\tImages traitées : ", 1);
143
			$this->afficherAvancement("\tImages traitées : ", 1);
137
		}	
144
		}	
138
		echo "\n";
145
		echo "\n";
139
		echo "Fin de la régénération des tailles des images à partir des metadonnées \n";
146
		echo "Fin de la régénération des tailles des images à partir des metadonnées \n";
140
		echo $images_maj." images ont vu leur infos de taille régénérées \n";
147
		echo $images_maj." images ont vu leur infos de taille régénérées \n";
141
		echo $image_meta_ratees." images ont raté l'extraction de metadonnées \n";
148
		echo $image_meta_ratees." images ont raté l'extraction de metadonnées \n";
142
		echo $images_inexistantes." images n'existent pas en tant que fichier \n";
149
		echo $images_inexistantes." images n'existent pas en tant que fichier \n";
143
	}
150
	}
144
	
151
	
145
	private function getCheminImage($id) {
152
	private function getCheminImage($id) {
146
		$chemin_base = Config::get('dossierImages');
153
		$chemin_base = Config::get('dossierImages');
147
				
154
				
148
		$id = sprintf('%09s', $id);
155
		$id = sprintf('%09s', $id);
149
		$id = wordwrap($id, 3 , '_', true);
156
		$id = wordwrap($id, 3 , '_', true);
150
		
157
		
151
		list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);
158
		list($dossierNiveau1, $dossierNiveau2) = explode('_', $id);
152
		
159
		
153
		$chemin = $chemin_base.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/O/'.$id.'_O.jpg';
160
		$chemin = $chemin_base.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/O/'.$id.'_O.jpg';
154
		
161
		
155
		return $chemin;
162
		return $chemin;
156
	}
163
	}
157
	
164
	
158
	protected function reparerLiaisonsOublieesObs() {
165
	protected function reparerLiaisonsOublieesObs() {
159
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car 
166
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car 
160
		// dans la table de liaison il est souvent vide 
167
		// dans la table de liaison il est souvent vide 
161
		$requete_liaisons = "SELECT com.id_observation, com.id_mot_cle_obs, co.ce_utilisateur ".
168
		$requete_liaisons = "SELECT com.id_observation, com.id_mot_cle_obs, co.ce_utilisateur ".
162
					"FROM `cel_obs_mots_cles` com INNER JOIN cel_obs co ON co.id_observation = com.id_observation ";
169
					"FROM `cel_obs_mots_cles` com INNER JOIN cel_obs co ON co.id_observation = com.id_observation ";
163
		
170
		
164
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
171
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
165
		$nb_liaisons_originales = count($liaisons);
172
		$nb_liaisons_originales = count($liaisons);
166
		
173
		
167
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
174
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
168
		$requete_mots_cles = "SELECT id_mot_cle_obs, id_utilisateur, mot_cle FROM cel_mots_cles_obs ";
175
		$requete_mots_cles = "SELECT id_mot_cle_obs, id_utilisateur, mot_cle FROM cel_mots_cles_obs ";
169
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
176
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
170
		
177
		
171
		$anciens_mots_cles_fmt = array();
178
		$anciens_mots_cles_fmt = array();
172
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
179
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
173
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
180
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
174
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
181
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
175
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
182
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
176
			}
183
			}
177
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_obs']] = $ancien_mot_cle;
184
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_obs']] = $ancien_mot_cle;
178
		}
185
		}
179
		
186
		
180
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
187
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
181
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_obs";
188
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_obs";
182
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
189
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
183
		
190
		
184
		$nouveau_mots_cles_fmt = array();
191
		$nouveau_mots_cles_fmt = array();
185
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
192
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
186
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
193
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
187
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
194
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
188
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
195
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
189
			}
196
			}
190
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][strtolower($nouveau_mot_cle['mot_cle'])] = $nouveau_mot_cle;
197
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][strtolower($nouveau_mot_cle['mot_cle'])] = $nouveau_mot_cle;
191
		}
198
		}
192
		
199
		
193
		$anciens_mot_cles_pas_trouves = 0;
200
		$anciens_mot_cles_pas_trouves = 0;
194
		$nouveaux_mot_cles_pas_trouves = 0;
201
		$nouveaux_mot_cles_pas_trouves = 0;
195
		$utilisateurs_pas_trouves = 0;
202
		$utilisateurs_pas_trouves = 0;
196
		$valeurs_a_inserer = array();
203
		$valeurs_a_inserer = array();
197
		
204
		
198
		$ids_obs = array();
205
		$ids_obs = array();
199
		
206
		
200
		foreach($liaisons as &$liaison) {
207
		foreach($liaisons as &$liaison) {
201
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
208
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
202
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_obs'];
209
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_obs'];
203
			
210
			
204
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
211
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
205
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
212
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
206
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
213
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
207
					$texte_ancien_mot_cle = strtolower($texte_ancien_mot_cle); // l'astuce de ouf !
214
					$texte_ancien_mot_cle = strtolower($texte_ancien_mot_cle); // l'astuce de ouf !
208
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
215
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
209
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
216
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
210
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
217
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
211
							
218
							
212
							$valeurs_a_inserer[] = array(
219
							$valeurs_a_inserer[] = array(
213
													'id_element_lie' => $liaison['id_observation'],
220
													'id_element_lie' => $liaison['id_observation'],
214
													'id_mot_cle' => $nouvel_id_mot_cle,
221
													'id_mot_cle' => $nouvel_id_mot_cle,
215
													'ancienne_liaison' => $liaison
222
													'ancienne_liaison' => $liaison
216
							);
223
							);
217
							$ids_obs[] = $liaison['id_observation'];
224
							$ids_obs[] = $liaison['id_observation'];
218
						} else {
225
						} else {
219
							$nouveaux_mot_cles_pas_trouves++;
226
							$nouveaux_mot_cles_pas_trouves++;
220
						}
227
						}
221
					} else {
228
					} else {
222
						
229
						
223
					}
230
					}
224
					
231
					
225
				} else {
232
				} else {
226
					$anciens_mot_cles_pas_trouves++;
233
					$anciens_mot_cles_pas_trouves++;
227
				}
234
				}
228
			} else {
235
			} else {
229
				$utilisateurs_pas_trouves++;
236
				$utilisateurs_pas_trouves++;
230
			}
237
			}
231
		}
238
		}
232
		
239
		
233
		echo "Anciennes liaisons ".$nb_liaisons_originales." \n";
240
		echo "Anciennes liaisons ".$nb_liaisons_originales." \n";
234
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
241
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
235
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
242
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
236
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
243
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
237
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
244
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
238
		
245
		
239
		$tranches = array_chunk($valeurs_a_inserer, 800);
246
		$tranches = array_chunk($valeurs_a_inserer, 800);
240
 
247
 
241
		foreach($tranches as $tranche) {
248
		foreach($tranches as $tranche) {
242
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
249
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
243
					                      "VALUES ";
250
					                      "VALUES ";
244
			foreach($tranche as $l) {
251
			foreach($tranche as $l) {
245
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
252
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
246
			}
253
			}
247
			$requete_insertion = rtrim($requete_insertion, ',');
254
			$requete_insertion = rtrim($requete_insertion, ',');
248
			$insertion = $this->bdd->requeter($requete_insertion);
255
			$insertion = $this->bdd->requeter($requete_insertion);
249
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
256
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
250
		}
257
		}
251
		echo "\n";
258
		echo "\n";
252
	}
259
	}
253
	
260
	
254
	private function reparerLiaisonsOublieesImages() {
261
	private function reparerLiaisonsOublieesImages() {
255
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car
262
		// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car
256
		// dans la table de liaison il est souvent vide
263
		// dans la table de liaison il est souvent vide
257
		$requete_liaisons = "SELECT cim.id_image, cim.id_mot_cle_image, ci.ce_utilisateur ".
264
		$requete_liaisons = "SELECT cim.id_image, cim.id_mot_cle_image, ci.ce_utilisateur ".
258
							"FROM cel_images_mots_cles cim INNER JOIN cel_images ci ON ci.id_image = cim.id_image ";
265
							"FROM cel_images_mots_cles cim INNER JOIN cel_images ci ON ci.id_image = cim.id_image ";
259
 
266
 
260
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
267
		$liaisons = $this->bdd->recupererTous($requete_liaisons);
261
		
268
		
262
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
269
		// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé
263
		$requete_mots_cles = "SELECT id_mot_cle_image, id_utilisateur, mot_cle FROM cel_mots_cles_images ";
270
		$requete_mots_cles = "SELECT id_mot_cle_image, id_utilisateur, mot_cle FROM cel_mots_cles_images ";
264
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
271
		$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles);
265
		
272
		
266
		$anciens_mots_cles_fmt = array();
273
		$anciens_mots_cles_fmt = array();
267
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
274
		foreach($anciens_mots_cles as &$ancien_mot_cle) {
268
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
275
			$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur'];
269
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
276
			if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) {
270
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
277
				$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array();
271
			}
278
			}
272
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_image']] = $ancien_mot_cle;
279
			$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_image']] = $ancien_mot_cle;
273
		}
280
		}
274
		
281
		
275
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
282
		// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot
276
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_images";
283
		$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_images";
277
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
284
		$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles);
278
		
285
		
279
		$nouveau_mots_cles_fmt = array();
286
		$nouveau_mots_cles_fmt = array();
280
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
287
		foreach($nouveau_mots_cles as &$nouveau_mot_cle) {
281
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
288
			$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur'];
282
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
289
			if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) {
283
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
290
				$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array();
284
			}
291
			}
285
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
292
			$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle;
286
		}
293
		}
287
		
294
		
288
		$anciens_mot_cles_pas_trouves = 0;
295
		$anciens_mot_cles_pas_trouves = 0;
289
		$nouveaux_mot_cles_pas_trouves = 0;
296
		$nouveaux_mot_cles_pas_trouves = 0;
290
		$utilisateurs_pas_trouves = 0;
297
		$utilisateurs_pas_trouves = 0;
291
		$valeurs_a_inserer = array();
298
		$valeurs_a_inserer = array();
292
		
299
		
293
		foreach($liaisons as &$liaison) {
300
		foreach($liaisons as &$liaison) {
294
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
301
			$id_utilisateur_liaison = $liaison['ce_utilisateur'];
295
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_image'];
302
			$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_image'];
296
				
303
				
297
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
304
			if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) {
298
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
305
				if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) {
299
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
306
					$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle'];
300
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
307
					if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) {
301
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
308
						if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) {
302
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
309
							$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle'];
303
								
310
								
304
							$valeurs_a_inserer[] = array(
311
							$valeurs_a_inserer[] = array(
305
															'id_element_lie' => $liaison['id_image'],
312
															'id_element_lie' => $liaison['id_image'],
306
															'id_mot_cle' => $nouvel_id_mot_cle,
313
															'id_mot_cle' => $nouvel_id_mot_cle,
307
															'ancienne_liaison' => $liaison
314
															'ancienne_liaison' => $liaison
308
							);
315
							);
309
							$ids_imgs[] = $liaison['id_image'];
316
							$ids_imgs[] = $liaison['id_image'];
310
						} else {
317
						} else {
311
							$nouveaux_mot_cles_pas_trouves++;
318
							$nouveaux_mot_cles_pas_trouves++;
312
						}
319
						}
313
					} else {
320
					} else {
314
		
321
		
315
					}
322
					}
316
						
323
						
317
				} else {
324
				} else {
318
					$anciens_mot_cles_pas_trouves++;
325
					$anciens_mot_cles_pas_trouves++;
319
				}
326
				}
320
			} else {
327
			} else {
321
				$utilisateurs_pas_trouves++;
328
				$utilisateurs_pas_trouves++;
322
			}
329
			}
323
		}
330
		}
324
		
331
		
325
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
332
		echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n";
326
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
333
		echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n";
327
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
334
		echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n";
328
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
335
		echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n";
329
 
336
 
330
		$tranches = array_chunk($valeurs_a_inserer, 800);
337
		$tranches = array_chunk($valeurs_a_inserer, 800);
331
 
338
 
332
		foreach($tranches as $tranche) {
339
		foreach($tranches as $tranche) {
333
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_images_liaison (id_element_lie, id_mot_cle) ".
340
			$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_images_liaison (id_element_lie, id_mot_cle) ".
334
					                      "VALUES ";
341
					                      "VALUES ";
335
			foreach($tranche as $l) {
342
			foreach($tranche as $l) {
336
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
343
				$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
337
			}
344
			}
338
			$requete_insertion = rtrim($requete_insertion, ',');
345
			$requete_insertion = rtrim($requete_insertion, ',');
339
			$insertion = $this->bdd->requeter($requete_insertion);
346
			$insertion = $this->bdd->requeter($requete_insertion);
340
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
347
			$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1);
341
		}
348
		}
342
		echo "\n";
349
		echo "\n";
343
	}
350
	}
344
	
351
	
345
	private function reparerLiaisonsObsParMotsClesTexte($mot_cle_texte_recherche) {
352
	private function reparerLiaisonsObsParMotsClesTexte($mot_cle_texte_recherche) {
346
		$ancienne_table_obs = Config::get('table_obs_recup');
353
		$ancienne_table_obs = Config::get('table_obs_recup');
347
		$requete_anciens_mots_cles_texte = "SELECT ce_utilisateur, id_observation, mots_cles_texte ".
354
		$requete_anciens_mots_cles_texte = "SELECT ce_utilisateur, id_observation, mots_cles_texte ".
348
											"FROM ".$ancienne_table_obs." WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%'";
355
											"FROM ".$ancienne_table_obs." WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%'";
349
		$obs_a_mot_cle = $this->bdd->recupererTous($requete_anciens_mots_cles_texte);
356
		$obs_a_mot_cle = $this->bdd->recupererTous($requete_anciens_mots_cles_texte);
350
		
357
		
351
		$requete_nouveaux_mots_cle = "SELECT * FROM cel_arbre_mots_cles_obs ".
358
		$requete_nouveaux_mots_cle = "SELECT * FROM cel_arbre_mots_cles_obs ".
352
									"WHERE id_utilisateur IN ". 
359
									"WHERE id_utilisateur IN ". 
353
									"(SELECT id_utilisateur FROM ".$ancienne_table_obs." ".
360
									"(SELECT id_utilisateur FROM ".$ancienne_table_obs." ".
354
									"WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%')";
361
									"WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%')";
355
		$nouveaux_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cle);
362
		$nouveaux_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cle);
356
		
363
		
357
		$mots_cles_indexes = array();
364
		$mots_cles_indexes = array();
358
		foreach($nouveaux_mots_cles as $mot_cle) {
365
		foreach($nouveaux_mots_cles as $mot_cle) {
359
			$mots_cles_indexes[$mot_cle['id_utilisateur']][strtolower($mot_cle['mot_cle'])] = $mot_cle;
366
			$mots_cles_indexes[$mot_cle['id_utilisateur']][strtolower($mot_cle['mot_cle'])] = $mot_cle;
360
		}
367
		}
361
				
368
				
362
		$liaisons_a_inserer = array();
369
		$liaisons_a_inserer = array();
363
		$utilFoirax = 0;
370
		$utilFoirax = 0;
364
		$mcFoirax = 0;
371
		$mcFoirax = 0;
365
		foreach($obs_a_mot_cle as $obs) {
372
		foreach($obs_a_mot_cle as $obs) {
366
			$mots_cles_texte_tab = explode(',', $obs['mots_cles_texte']);
373
			$mots_cles_texte_tab = explode(',', $obs['mots_cles_texte']);
367
			$id_observation = $obs['id_observation'];
374
			$id_observation = $obs['id_observation'];
368
			$id_utilisateur = $obs['ce_utilisateur'];
375
			$id_utilisateur = $obs['ce_utilisateur'];
369
			foreach($mots_cles_texte_tab as $mot_cle_t) {
376
			foreach($mots_cles_texte_tab as $mot_cle_t) {
370
				if($mot_cle_t == $mot_cle_texte_recherche) {
377
				if($mot_cle_t == $mot_cle_texte_recherche) {
371
					if (isset($mots_cles_indexes[$id_utilisateur])) {
378
					if (isset($mots_cles_indexes[$id_utilisateur])) {
372
						if (isset($mots_cles_indexes[$id_utilisateur][strtolower($mot_cle_t)])) {
379
						if (isset($mots_cles_indexes[$id_utilisateur][strtolower($mot_cle_t)])) {
373
							$id_nouveau_mot_cle = $mots_cles_indexes[$id_utilisateur][strtolower($mot_cle_t)]['id_mot_cle'];
380
							$id_nouveau_mot_cle = $mots_cles_indexes[$id_utilisateur][strtolower($mot_cle_t)]['id_mot_cle'];
374
						} else {
381
						} else {
375
							$mcFoirax++;
382
							$mcFoirax++;
376
						}
383
						}
377
					} else {
384
					} else {
378
						$utilFoirax++;
385
						$utilFoirax++;
379
					}
386
					}
380
					$liaisons_a_inserer[] = array('id_element_lie' => $id_observation, 'id_mot_cle' => $id_nouveau_mot_cle);
387
					$liaisons_a_inserer[] = array('id_element_lie' => $id_observation, 'id_mot_cle' => $id_nouveau_mot_cle);
381
				}
388
				}
382
			}
389
			}
383
		}
390
		}
384
		echo "Utilisateurs pas dans le tableau: $utilFoirax\n";
391
		echo "Utilisateurs pas dans le tableau: $utilFoirax\n";
385
		echo "Motf-clefs pas dans le tableau: $mcFoirax\n";
392
		echo "Motf-clefs pas dans le tableau: $mcFoirax\n";
386
		//echo '<pre>'.print_r($liaisons_a_inserer, true).'</pre>';
393
		//echo '<pre>'.print_r($liaisons_a_inserer, true).'</pre>';
387
		echo "Liaisons à insérer: " . count($liaisons_a_inserer) . " \n";
394
		echo "Liaisons à insérer: " . count($liaisons_a_inserer) . " \n";
388
 
395
 
389
		$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
396
		$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ".
390
				"VALUES ";
397
				"VALUES ";
391
		foreach($liaisons_a_inserer as $l) {
398
		foreach($liaisons_a_inserer as $l) {
392
			$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
399
			$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),";
393
		}
400
		}
394
		$requete_insertion = rtrim($requete_insertion, ',');
401
		$requete_insertion = rtrim($requete_insertion, ',');
395
		$insertion = $this->bdd->requeter($requete_insertion);
402
		$insertion = $this->bdd->requeter($requete_insertion);
396
	}
403
	}
-
 
404
 
-
 
405
	// Change toutes les associations images - mots_cles dont l'id mot_cle est $idDoublon, pour le remplacer par $idCible
-
 
406
	private function reductionMotsClesImages($idDoublon, $idCible) {
-
 
407
		$q1 = "SELECT id_element_lie FROM cel_mots_cles_images_liaison WHERE id_mot_cle = $idCible;";
-
 
408
		$r1 = $this->bdd->requeter($q1);
-
 
409
		$idsImages = array();
-
 
410
		foreach ($r1 as $r) {
-
 
411
			$idsImages[] = $r['id_element_lie'];
-
 
412
		}
-
 
413
 
-
 
414
		// On vire ceux qui ont le doublon mais qui ont aussi la cible
-
 
415
		$q2 = "DELETE FROM cel_mots_cles_images_liaison WHERE id_mot_cle = $idDoublon AND id_element_lie IN (" . implode(',', $idsImages) . ");";
-
 
416
		$r2 = $this->bdd->requeter($q2);
-
 
417
 
-
 
418
		// On convertit tous les doublons en cible
-
 
419
		$q3 = "UPDATE cel_mots_cles_images_liaison SET id_mot_cle = $idCible WHERE id_mot_cle = $idDoublon;";
-
 
420
		$r3 = $this->bdd->requeter($q3);
-
 
421
	}
397
}
422
}
398
?>
423
?>