Subversion Repositories eFlore/Applications.cel

Rev

Rev 970 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 970 Rev 1017
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
	
-
 
32
	public function obtenirMotsClesTexte() {
-
 
33
		$requete = 	'SELECT id_mot_cle_utilisateur '.
-
 
34
						'FROM cel_mots_cles_'.$this->mode.' '.
-
 
35
						'WHERE id_mot_cle_utilisateur IN '.
-
 
36
							'('.
-
 
37
								'SELECT id_mot_cle_utilisateur '.
-
 
38
								'FROM cel_'.$this->mode.'_mots_cles '.
-
 
39
								'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
-
 
40
							')'.
-
 
41
						' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
-
 
42
	
-
 
43
		$resultats = $this->requeter($requete);
-
 
44
	
-
 
45
		return $resultats;
-
 
46
	}
31
	
47
	
32
	public function ajouterLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
48
	public function ajouterLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
33
		
49
		
34
		$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
50
		$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
35
		
51
		
36
		// le mot clé ignore est spécifique mysql, mais il est utilisé ici pour des raisons
52
		// le mot clé ignore est spécifique mysql, mais il est utilisé ici pour des raisons
37
		// de performance, à remplacer par un test sur les mots clés déjà existant si ça gène
53
		// de performance, à remplacer par un test sur les mots clés déjà existant si ça gène
38
		$requete_liaison_mots_cles = 'INSERT IGNORE INTO cel_'.$this->mode.'_mots_cles '.
54
		$requete_liaison_mots_cles = 'INSERT IGNORE INTO cel_'.$this->mode.'_mots_cles '.
39
								   '('.$champ.', id_mot_cle_utilisateur) '.
55
								   '('.$champ.', id_mot_cle_utilisateur) '.
40
								   'VALUES ';
56
								   'VALUES ';
41
								   
57
								   
42
		foreach($ids_images_ou_obs as $id_image_ou_obs) {
58
		foreach($ids_images_ou_obs as $id_image_ou_obs) {
43
			foreach($mots_cles as $mot) {
59
			foreach($mots_cles as $mot) {
44
				$requete_liaison_mots_cles .= '('.$id_image_ou_obs.','.$this->proteger($mot).'),';
60
				$requete_liaison_mots_cles .= '('.$id_image_ou_obs.','.$this->proteger($mot).'),';
45
			}
61
			}
46
			$this->regenererIndexTexteMotCle($id_image_ou_obs, $id_utilisateur);
62
			$this->regenererIndexTexteMotCle($id_image_ou_obs, $id_utilisateur);
47
		}
63
		}
48
		
64
		
49
		$requete_liaison_mots_cles = rtrim($requete_liaison_mots_cles,',');
65
		$requete_liaison_mots_cles = rtrim($requete_liaison_mots_cles,',');
50
		
-
 
51
		echo $requete_liaison_mots_cles;
-
 
52
		$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles);
66
		$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles);
53
		
67
		
54
		if(!$resultat_liaison_mots_cles) {
68
		if(!$resultat_liaison_mots_cles) {
55
			$this->logger('CEL_bugs', 'Erreur d\'ajout de mots clés à des '.$this->mode.' : '.$requete_liaison_mots_cles);	
69
			$this->logger('CEL_bugs', 'Erreur d\'ajout de mots clés à des '.$this->mode.' : '.$requete_liaison_mots_cles);	
56
		}
70
		}
57
		
71
		
58
		return $resultat_liaison_mots_cles;			
72
		return $resultat_liaison_mots_cles;			
59
	}
73
	}
60
	
74
	
61
	public function supprimerLiaisonMotsClesEtRegenererIndexTexte($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
75
	public function supprimerLiaisonMotsClesEtRegenererIndexTexte($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
62
		
76
		
63
		$retour = $this->supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles);
77
		$retour = $this->supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles);
64
		
78
		
65
		foreach($ids_images_ou_obs as $image_ou_obs) {
79
		foreach($ids_images_ou_obs as $image_ou_obs) {
66
			$this->regenererIndexTexteMotCle($image_ou_obs, $id_utilisateur);	
80
			$this->regenererIndexTexteMotCle($image_ou_obs, $id_utilisateur);	
67
		}	
81
		}	
68
		
82
		
69
		return $retour;
83
		return $retour;
70
	}
84
	}
71
	
85
	
72
	public function supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
86
	public function supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) {
73
		
87
		
74
		$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
88
		$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
75
		
89
		
76
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
90
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
77
											   $champ.' IN ('.implode(',',$ids_images_ou_obs).') '.
91
											   $champ.' IN ('.implode(',',$ids_images_ou_obs).') '.
78
											   'AND id_mot_cle_utilisateur IN ('.implode(',',$mots_cles).')';
92
											   'AND id_mot_cle_utilisateur IN ('.implode(',',$mots_cles).')';
79
		
93
		
80
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
94
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
81
 
95
 
82
		if ($requete_suppression_liaison_mot_cle !== false) {
96
		if ($requete_suppression_liaison_mot_cle !== false) {
83
			$retour = true;
97
			$retour = true;
84
		} else {
98
		} else {
85
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
99
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
86
			$this->logger($message);
100
			$this->logger($message);
87
			
101
			
88
			$retour = false;
102
			$retour = false;
89
		}
103
		}
90
		
104
		
91
		return $retour;
105
		return $retour;
92
	}
106
	}
93
	
107
	
94
	public function supprimerToutesLiaisonsPourIdImageOuObs($id_utilisateur, $ids_images_ou_obs) {
108
	public function supprimerToutesLiaisonsPourIdImageOuObs($id_utilisateur, $ids_images_ou_obs) {
95
		
109
		
96
		$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
110
		$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; 
97
		
111
		
98
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
112
		$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '.
99
											   $champ.' IN ('.implode(',',$ids_images_ou_obs).') ';
113
											   $champ.' IN ('.implode(',',$ids_images_ou_obs).') ';
100
		
114
		
101
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
115
		$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
102
 
116
 
103
		if ($requete_suppression_liaison_mot_cle !== false) {
117
		if ($requete_suppression_liaison_mot_cle !== false) {
104
			$retour = true;
118
			$retour = true;
105
		} else {
119
		} else {
106
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
120
			$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete";
107
			$this->logger($message);
121
			$this->logger($message);
108
			
122
			
109
			$retour = false;
123
			$retour = false;
110
		}
124
		}
111
		
125
		
112
		return $retour;
126
		return $retour;
113
	}
127
	}
114
		
128
		
115
	private function regenererIndexTexteMotCle($image_ou_obs, $identifiant_utilisateur) {
129
	private function regenererIndexTexteMotCle($image_ou_obs, $identifiant_utilisateur) {
116
		
130
		
117
		$mots_cles = $this->obtenirMotsClesTexte($image_ou_obs, $identifiant_utilisateur);
131
		$mots_cles = $this->obtenirMotsClesTexte($image_ou_obs, $identifiant_utilisateur);
118
		
132
		
119
		if (count($mots_cles) > 0) {
133
		if (count($mots_cles) > 0) {
120
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($mots_cles);
134
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($mots_cles);
121
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $image_ou_obs, $identifiant_utilisateur);
135
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $image_ou_obs, $identifiant_utilisateur);
122
		}
136
		}
123
	}
137
	}
124
	
138
	
125
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $identifiant_utilisateur) {
139
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $identifiant_utilisateur) {
126
		$requete = 	'UPDATE '.(($this->mode == 'obs') ? 'cel_obs' : 'cel_images').' '.
140
		$requete = 	'UPDATE '.(($this->mode == 'obs') ? 'cel_obs' : 'cel_images').' '.
127
					'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
141
					'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
128
					'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
142
					'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
129
					' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
143
					' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
130
		
144
		
131
		return $this->executer($requete);
145
		return $this->executer($requete);
132
	}
146
	}
133
	
147
	
134
	private function obtenirMotsClesTexte($id_image_ou_obs, $identifiant_utilisateur) {
148
	private function obtenirMotsClesTexte($id_image_ou_obs, $identifiant_utilisateur) {
135
		$requete = 	'SELECT mot_cle '.
149
		$requete = 	'SELECT mot_cle '.
136
					'FROM '.'cel_mots_cles_'.$this->mode.' '.
150
					'FROM '.'cel_mots_cles_'.$this->mode.' '.
137
					'WHERE id_mot_cle_utilisateur IN '.
151
					'WHERE id_mot_cle_utilisateur IN '.
138
						'('.
152
						'('.
139
							'SELECT id_mot_cle_utilisateur '.
153
							'SELECT id_mot_cle_utilisateur '.
140
							'FROM cel_'.$this->mode.'_mots_cles '.
154
							'FROM cel_'.$this->mode.'_mots_cles '.
141
							'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
155
							'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs).
142
						')'.
156
						')'.
143
					' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
157
					' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur);
144
		
158
		
145
		$resultats = $this->requeter($requete);
159
		$resultats = $this->requeter($requete);
146
				
160
				
147
		return $resultats;
161
		return $resultats;
148
	}
162
	}
149
	
163
	
150
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
164
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
151
		$mot_cles_texte_chaine = '';
165
		$mot_cles_texte_chaine = '';
152
		
166
		
153
		if (is_array($tableau_mots_cles_texte)) { 
167
		if (is_array($tableau_mots_cles_texte)) { 
154
			foreach ($tableau_mots_cles_texte as $mot_cle) {
168
			foreach ($tableau_mots_cles_texte as $mot_cle) {
155
				$mot_cles_texte_chaine .= $mot_cle['mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
169
				$mot_cles_texte_chaine .= $mot_cle['mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
156
			}
170
			}
157
		}
171
		}
158
		
172
		
159
		$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine, self::SEPARATEUR_MOT_CLE_TEXTE);
173
		$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine, self::SEPARATEUR_MOT_CLE_TEXTE);
160
		
174
		
161
		return $mot_cles_texte_chaine;
175
		return $mot_cles_texte_chaine;
162
	}
176
	}
163
	
177
	
164
	public function nettoyerMotsCles($chaine) {
178
	public function nettoyerMotsCles($chaine) {
165
		$valeur = str_replace('null', '', $chaine);
179
		$valeur = str_replace('null', '', $chaine);
166
		$valeur = trim($valeur, ';;');
180
		$valeur = trim($valeur, ';;');
167
		
181
		
168
		return $valeur;
182
		return $valeur;
169
	}
183
	}
170
}
184
}
171
?>
185
?>