Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1306 Rev 1327
1
<?php
1
<?php
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
3
/**
3
/**
4
* PHP Version 5
4
* PHP Version 5
5
*
5
*
6
* @category  PHP
6
* @category  PHP
7
* @package   jrest
7
* @package   jrest
8
* @author    Aurélien Peronnet <aurelien@tela-botania.org>
8
* @author    Aurélien Peronnet <aurelien@tela-botania.org>
9
* @copyright 2010 Tela-Botanica
9
* @copyright 2010 Tela-Botanica
10
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
* @version   SVN: <svn_id>
11
* @version   SVN: <svn_id>
12
* @link      /doc/jrest/
12
* @link      /doc/jrest/
13
*/
13
*/
14
 
14
 
15
/**
15
/**
16
* in : utf8
16
* in : utf8
17
* out : utf8
17
* out : utf8
18
* 
18
* 
19
* Librairie de liaison d'images et d'observation à des mots clés
19
* Librairie de liaison d'images et d'observation à des mots clés
20
*
20
*
21
*/
21
*/
22
class LiaisonMotsCles extends Cel {
22
class LiaisonMotsCles extends Cel {
23
	
23
	
24
	const SEPARATEUR_MOT_CLE_TEXTE = ',';
24
	const SEPARATEUR_MOT_CLE_TEXTE = ',';
25
	private $mode = 'obs';
25
	private $mode = 'obs';
26
	
26
	
27
	public function LiaisonMotsCles($config, $mode) {
27
	public function LiaisonMotsCles($config, $mode) {
28
		parent::__construct($config);
28
		parent::__construct($config);
29
		$this->mode = $mode;
29
		$this->mode = $mode;
30
	}
30
	}
31
	
31
	
32
	public function ajouterLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
32
	public function ajouterLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
33
		
33
		
34
		$champ_objet_lie = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
34
		$champ_objet_lie = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
35
		$champ_mot_cle = ($this->mode == 'obs') ? 'id_mot_cle_obs' : 'id_mot_cle_image'; 
35
		$champ_mot_cle = ($this->mode == 'obs') ? 'id_mot_cle_obs' : 'id_mot_cle_image'; 
36
		
36
		
37
		// le mot clé ignore est spécifique mysql, mais il est utilisé ici pour des raisons
37
		// le mot clé ignore est spécifique mysql, mais il est utilisé ici pour des raisons
38
		// de performance, à remplacer par un test sur les mots clés déjà existant si ça gène
38
		// de performance, à remplacer par un test sur les mots clés déjà existant si ça gène
39
		$requete_liaison_mots_cles = 'INSERT IGNORE INTO cel_'.$this->mode.'_mots_cles '.
39
		$requete_liaison_mots_cles = 'INSERT IGNORE INTO cel_'.$this->mode.'_mots_cles '.
40
								   '('.$champ_objet_lie.', '.$champ_mot_cle.') '.
40
								   '('.$champ_objet_lie.', '.$champ_mot_cle.') '.
41
								   'VALUES ';
41
								   'VALUES ';
42
								   
42
								   
43
		foreach($ids_images_ou_obs as $id_image_ou_obs) {
43
		foreach($ids_images_ou_obs as $id_image_ou_obs) {
44
			foreach($mots_cles as $mot) {
44
			foreach($mots_cles as $mot) {
45
				$requete_liaison_mots_cles .= '('.$id_image_ou_obs.','.$this->proteger($mot).'),';
45
				$requete_liaison_mots_cles .= '('.$id_image_ou_obs.','.$this->proteger($mot).'),';
46
			}
46
			}
47
		}
47
		}
48
		
48
		
49
		$requete_liaison_mots_cles = rtrim($requete_liaison_mots_cles,',');
49
		$requete_liaison_mots_cles = rtrim($requete_liaison_mots_cles,',');
50
		$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles);
50
		$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles);
51
		
51
		
52
		foreach($ids_images_ou_obs as $id_image_ou_obs) {
52
		foreach($ids_images_ou_obs as $id_image_ou_obs) {
53
			$this->regenererIndexTexteMotCle($id_image_ou_obs, $id_utilisateur);
53
			$this->regenererIndexTexteMotCle($id_image_ou_obs, $id_utilisateur);
54
		}
54
		}
55
 
55
 
56
		if(!$resultat_liaison_mots_cles) {
56
		if(!$resultat_liaison_mots_cles) {
57
			$this->logger('CEL_bugs', 'Erreur d\'ajout de mots clés à des '.$this->mode.' : '.$requete_liaison_mots_cles);	
57
			$this->logger('CEL_bugs', 'Erreur d\'ajout de mots clés à des '.$this->mode.' : '.$requete_liaison_mots_cles);	
58
		}
58
		}
59
		
59
		
60
		return $resultat_liaison_mots_cles;			
60
		return $resultat_liaison_mots_cles;			
61
	}
61
	}
62
	
62
	
63
	public function supprimerLiaisonMotsClesEtRegenererIndexTexte($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
63
	public function supprimerLiaisonMotsClesEtRegenererIndexTexte($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
64
		
64
		
65
		$retour = $this->supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles);
65
		$retour = $this->supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles);
66
		
66
		
67
		foreach($ids_images_ou_obs as $image_ou_obs) {
67
		foreach($ids_images_ou_obs as $image_ou_obs) {
68
			$this->regenererIndexTexteMotCle($image_ou_obs, $id_utilisateur);	
68
			$this->regenererIndexTexteMotCle($image_ou_obs, $id_utilisateur);	
69
		}	
69
		}	
70
		
70
		
71
		return $retour;
71
		return $retour;
72
	}
72
	}
73
	
73
	
74
	public function supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
74
	public function supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
75
		
75
		
76
		$champ_objet_lie = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
76
		$champ_objet_lie = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
77
		$champ_mot_cle = ($this->mode == 'obs') ? 'id_mot_cle_obs' : 'id_mot_cle_image';
77
		$champ_mot_cle = ($this->mode == 'obs') ? 'id_mot_cle_obs' : 'id_mot_cle_image';
78
		
78
		
79
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
79
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
80
											   $champ_objet_lie.' IN ('.implode(',',$ids_images_ou_obs).') '.
80
											   $champ_objet_lie.' IN ('.implode(',',$ids_images_ou_obs).') '.
81
											   'AND '.$champ_mot_cle.' IN ('.implode(',',$mots_cles).')';
81
											   'AND '.$champ_mot_cle.' IN ('.implode(',',$mots_cles).')';
82
		
82
		
83
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
83
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
84
 
84
 
85
		if ($requete_suppression_liaison_mot_cle !== false) {
85
		if ($requete_suppression_liaison_mot_cle !== false) {
86
			$retour = true;
86
			$retour = true;
87
		} else {
87
		} else {
88
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
88
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
89
			$this->logger($message);
89
			$this->logger($message);
90
			
90
			
91
			$retour = false;
91
			$retour = false;
92
		}
92
		}
93
		
93
		
94
		return $retour;
94
		return $retour;
95
	}
95
	}
96
	
96
	
97
	public function supprimerToutesLiaisonsPourIdImageOuObs($id_utilisateur, $ids_images_ou_obs) {
97
	public function supprimerToutesLiaisonsPourIdImageOuObs($id_utilisateur, $ids_images_ou_obs) {
98
		
98
		
99
		$champ_objet_lie = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
99
		$champ_objet_lie = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
100
		$champ_mot_cle = ($this->mode == 'obs') ? 'id_mot_cle_obs' : 'id_mot_cle_image';
100
		$champ_mot_cle = ($this->mode == 'obs') ? 'id_mot_cle_obs' : 'id_mot_cle_image';
101
		
101
		
102
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
102
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
103
											   $champ_objet_lie.' IN ('.implode(',',$ids_images_ou_obs).') ';
103
											   $champ_objet_lie.' IN ('.implode(',',$ids_images_ou_obs).') ';
104
		
104
		
105
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
105
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
106
 
106
 
107
		if ($requete_suppression_liaison_mot_cle !== false) {
107
		if ($requete_suppression_liaison_mot_cle !== false) {
108
			$retour = true;
108
			$retour = true;
109
		} else {
109
		} else {
110
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
110
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
111
			$this->logger($message);
111
			$this->logger($message);
112
			
112
			
113
			$retour = false;
113
			$retour = false;
114
		}
114
		}
115
		
115
		
116
		return $retour;
116
		return $retour;
117
	}
117
	}
118
	
118
	
119
	public function supprimerToutesLiaisonsPourIdMotCle($id_utilisateur, $tableau_ids_mots_cles) {
119
	public function supprimerToutesLiaisonsPourIdMotCle($id_utilisateur, $tableau_ids_mots_cles) {
120
				
120
				
121
		$champ_objet_lie = ($this->mode == 'obs') ? 'id_observation' : 'id_image';
121
		$champ_objet_lie = ($this->mode == 'obs') ? 'id_observation' : 'id_image';
122
		$champ_mot_cle = ($this->mode == 'obs') ? 'id_mot_cle_obs' : 'id_mot_cle_image';
122
		$champ_mot_cle = ($this->mode == 'obs') ? 'id_mot_cle_obs' : 'id_mot_cle_image';
123
			
123
			
124
		$chaine_mot_cles_ids = '('.implode(',', $tableau_ids_mots_cles).')';
124
		$chaine_mot_cles_ids = '('.implode(',', $tableau_ids_mots_cles).')';
125
		
125
		
126
		$requete_objets_lies_mot_cle = 'SELECT '.$champ_objet_lie.' as id FROM cel_'.$this->mode.'_mots_cles WHERE '.
126
		$requete_objets_lies_mot_cle = 'SELECT '.$champ_objet_lie.' as id FROM cel_'.$this->mode.'_mots_cles WHERE '.
127
		$champ_mot_cle.' IN '.$chaine_mot_cles_ids;
127
		$champ_mot_cle.' IN '.$chaine_mot_cles_ids;
128
		
128
		
129
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
129
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
130
		$champ_mot_cle.' IN '.$chaine_mot_cles_ids;
130
		$champ_mot_cle.' IN '.$chaine_mot_cles_ids;
131
				
131
				
132
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
132
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
133
	
133
	
134
		$resultat_requete_objets_lies_mot_cle = $this->requeter($requete_objets_lies_mot_cle);
134
		$resultat_requete_objets_lies_mot_cle = $this->requeter($requete_objets_lies_mot_cle);
135
		foreach($resultat_requete_objets_lies_mot_cle as $objet_lie) {
135
		foreach($resultat_requete_objets_lies_mot_cle as $objet_lie) {
136
			$this->regenererIndexTexteMotCle($objet_lie['id'], $id_utilisateur);
136
			$this->regenererIndexTexteMotCle($objet_lie['id'], $id_utilisateur);
137
		}
137
		}
138
	
138
	
139
		if ($requete_suppression_liaison_mot_cle !== false) {
139
		if ($requete_suppression_liaison_mot_cle !== false) {
140
			$retour = true;
140
			$retour = true;
141
		} else {
141
		} else {
142
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
142
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
143
			$this->logger($message);
143
			$this->logger($message);
144
				
144
				
145
			$retour = false;
145
			$retour = false;
146
		}
146
		}
147
	
147
	
148
		return $retour;
148
		return $retour;
149
	}
149
	}
150
		
150
		
151
	private function regenererIndexTexteMotCle($image_ou_obs, $identifiant_utilisateur) {
151
	private function regenererIndexTexteMotCle($image_ou_obs, $identifiant_utilisateur) {
152
		
152
		
153
		$mots_cles = $this->obtenirMotsClesTexte($image_ou_obs, $identifiant_utilisateur);
153
		$mots_cles = $this->obtenirMotsClesTexte($image_ou_obs, $identifiant_utilisateur);
154
		$mots_cles_texte_chaine = "";
154
		$mots_cles_texte_chaine = "";
155
		if (count($mots_cles) > 0) {
155
		if (count($mots_cles) > 0) {
156
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($mots_cles);
156
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($mots_cles);
157
		}
157
		}
158
		$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $image_ou_obs, $identifiant_utilisateur);
158
		$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $image_ou_obs, $identifiant_utilisateur);
159
	}
159
	}
160
	
160
	
161
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $identifiant_utilisateur) {
161
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $identifiant_utilisateur) {
162
		$requete = 	'UPDATE '.(($this->mode == 'obs') ? 'cel_obs' : 'cel_images').' '.
162
		$requete = 	'UPDATE '.(($this->mode == 'obs') ? 'cel_obs' : 'cel_images').' '.
163
					'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
163
					'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
164
					'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
164
					'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
165
					' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
165
					' AND id_utilisateur = '.$this->proteger($identifiant_utilisateur);
166
		return $this->executer($requete);
166
		return $this->executer($requete);
167
	}
167
	}
168
	
168
	
169
	private function obtenirMotsClesTexte($id_image_ou_obs, $identifiant_utilisateur) {
169
	private function obtenirMotsClesTexte($id_image_ou_obs, $identifiant_utilisateur) {
170
		$requete = 	'SELECT mot_cle '.
170
		$requete = 	'SELECT mot_cle '.
171
					'FROM '.'cel_mots_cles_'.$this->mode.' '.
171
					'FROM '.'cel_mots_cles_'.$this->mode.' '.
172
					'WHERE id_mot_cle_'.(($this->mode == 'obs') ? 'obs' : 'image').' IN '.
172
					'WHERE id_mot_cle_'.(($this->mode == 'obs') ? 'obs' : 'image').' IN '.
173
						'('.
173
						'('.
174
							'SELECT id_mot_cle_'.(($this->mode == 'obs') ? 'obs' : 'image').' '.
174
							'SELECT id_mot_cle_'.(($this->mode == 'obs') ? 'obs' : 'image').' '.
175
							'FROM cel_'.$this->mode.'_mots_cles '.
175
							'FROM cel_'.$this->mode.'_mots_cles '.
176
							'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
176
							'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
177
						')'.
177
						')'.
178
					' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
178
					' AND id_utilisateur = '.$this->proteger($identifiant_utilisateur);
179
		$resultats = $this->requeter($requete);
179
		$resultats = $this->requeter($requete);
180
		return $resultats;
180
		return $resultats;
181
	}
181
	}
182
	
182
	
183
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
183
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
184
		$mot_cles_texte_chaine = '';
184
		$mot_cles_texte_chaine = '';
185
		
185
		
186
		if (is_array($tableau_mots_cles_texte)) { 
186
		if (is_array($tableau_mots_cles_texte)) { 
187
			foreach ($tableau_mots_cles_texte as $mot_cle) {
187
			foreach ($tableau_mots_cles_texte as $mot_cle) {
188
				$mot_cles_texte_chaine .= $mot_cle['mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
188
				$mot_cles_texte_chaine .= $mot_cle['mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
189
			}
189
			}
190
		}
190
		}
191
		
191
		
192
		$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine, self::SEPARATEUR_MOT_CLE_TEXTE);
192
		$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine, self::SEPARATEUR_MOT_CLE_TEXTE);
193
		
193
		
194
		return $mot_cles_texte_chaine;
194
		return $mot_cles_texte_chaine;
195
	}
195
	}
196
	
196
	
197
	public function nettoyerMotsCles($chaine) {
197
	public function nettoyerMotsCles($chaine) {
198
		$valeur = str_replace('null', '', $chaine);
198
		$valeur = str_replace('null', '', $chaine);
199
		$valeur = trim($valeur, ';;');
199
		$valeur = trim($valeur, ';;');
200
		
200
		
201
		return $valeur;
201
		return $valeur;
202
	}
202
	}
203
}
203
}
204
?>
204
?>