Subversion Repositories eFlore/Applications.cel

Rev

Rev 631 | Rev 780 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 631 Rev 769
Line 42... Line 42...
42
 * Service de liaisons d'images à des observations
42
 * Service de liaisons d'images à des observations
43
 *
43
 *
44
 * 2: Le service lie une ou plusieurs images à une ou plusieurs observations
44
 * 2: Le service lie une ou plusieurs images à une ou plusieurs observations
45
 * 3: Le service renvoie les observations liées à une image
45
 * 3: Le service renvoie les observations liées à une image
46
 */
46
 */
-
 
47
 Class InventoryKeyWordObsLink extends Cel {
Line 47... Line 48...
47
 
48
 	
-
 
49
 	const SEPARATEUR_MOT_CLE_TEXTE = '##';
Line 48... Line 50...
48
 Class InventoryKeyWordObsLink extends DBAccessor {
50
 	const SEPARATEUR_MOT_CLE_ID = ';';
-
 
51
 	
-
 
52
 	function getRessource() {
Line 49... Line 53...
49
 
53
 		$this->migrerMotsClesDansTableLiaison();	
Line 50... Line -...
50
	var $config;
-
 
51
 
54
 	}
Line 52... Line 55...
52
	function InventoryKeyWordObsLink($config) {
55
 	
53
 
56
 	function getElement($uid) {
54
		$this->config=$config;
57
 		
55
	}
58
 	}
56
 
59
 
57
	// met à jour les associations entre images et observations
60
	// met à jour les associations des mots clés des observations
58
	function updateElement($uid,$pairs)
61
	function updateElement($uid,$pairs)
59
	{
62
	{
60
		// Controle detournement utilisateur
63
		// Controle detournement utilisateur
Line 61... Line -...
61
	    session_start();
-
 
62
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
-
 
63
	 		print "Acces interdit";
64
	    session_start();
64
 			return;
65
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
65
     	}
66
	 		print "Acces interdit";
Line 66... Line 67...
66
 
67
 			return;
67
     	$DB=$this->connectDB($this->config,'database_cel');
68
     	}
68
 
69
     	
Line 69... Line 70...
69
     	if(!isset($pairs['mots_cles']) || !isset($uid[1])) {
70
     	if(!isset($pairs['mots_cles']) || !isset($uid[1])) {
Line 70... Line 71...
70
     		return;
71
     		return;
-
 
72
     	}
71
     	}
73
 
72
 
74
     	if(isset($pairs['action'])) {
-
 
75
     		$action = $pairs['action'];
Line 73... Line -...
73
     	if(isset($pairs['action'])) {
-
 
74
     		$action = $pairs['action'];
76
     	}
75
     	}
-
 
Line 76... Line 77...
76
 
77
 
Line -... Line 78...
-
 
78
     	$valeur = $pairs['mots_cles'];
77
     	$valeur = $pairs['mots_cles'];
79
     	
-
 
80
		$valeur = $this->nettoyerMotsCles($valeur);
-
 
81
 
-
 
82
     	$requete_maj_liaison_mots_cles = "UPDATE cel_inventory SET " ;
Line 78... Line 83...
78
     	
83
		$requete_maj_liaison_mots_cles .= "mots_cles = CONCAT(IFNULL(mots_cles,''),'".$valeur.";') ";
79
     	$valeur = str_replace('null','',$valeur);
84
		$requete_maj_liaison_mots_cles .= "WHERE ordre IN (".$uid[1].") AND identifiant = ".$this->proteger($uid[0]);
80
     	$valeur = trim($valeur, "null");
85
 
81
       	$valeur = trim($valeur, ";;");
86
		$resultat_maj_liaison_mots_cles = $this->executerRequeteSimple($requete_maj_liaison_mots_cles);
82
 
-
 
Line 83... Line 87...
83
     	$query="UPDATE cel_inventory SET " ;
87
		
84
		$query .= "mots_cles = CONCAT(IFNULL(mots_cles,''),'".$DB->escapeSimple($valeur).";') ";
88
		$retour = false;
Line 85... Line 89...
85
		$query .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'";
89
		
Line 104... Line 108...
104
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
108
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
105
	 		print "Acces interdit";
109
	 		print "Acces interdit";
106
 			return;
110
 			return;
107
     	}
111
     	}
Line 108... Line -...
108
 
-
 
109
     	$DB=$this->connectDB($this->config,'database_cel');
-
 
110
 
112
 
111
     	if(!isset($uid[2]) || !isset($uid[1])) {
113
     	if(!isset($uid[2]) || !isset($uid[1])) {
112
     		echo 'pas de mots clés';
114
     		echo 'pas de mots clés';
113
     		return;
115
     		return;
Line 114... Line 116...
114
     	}
116
     	}
Line -... Line 117...
-
 
117
 
-
 
118
     	$valeur = $uid[2] ;
-
 
119
 
-
 
120
     	$valeur = $this->nettoyerMotsCles($valeur);
-
 
121
     	$chaine = $this->proteger($valeur);
-
 
122
 
-
 
123
     	$requete_suppression_mots_cles = "UPDATE cel_inventory SET " ;
-
 
124
 
-
 
125
		$requete_suppression_mots_cles .= "mots_cles = REPLACE(REPLACE(mots_cles,'".$chaine."',''),';;',';') ";
-
 
126
		$requete_suppression_mots_cles .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'";
-
 
127
 
-
 
128
		$resultat_suppression_mots_cles = $this->executerRequeteSimple($requete_suppression_mots_cles);
-
 
129
 
-
 
130
        if ($resultat_suppression_mots_cles) {
-
 
131
        	$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations : ".$requete_suppression_mots_cles);
-
 
132
        	return false;
-
 
133
        }
-
 
134
 
-
 
135
        return true;
-
 
136
	}
-
 
137
	
-
 
138
	private function regenererIndexTexteMotCleObservation($ordre_observation, $identifiant_utilisateur) {
-
 
139
			
-
 
140
		$mots_cles_obs = $this->obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur);
-
 
141
		
-
 
142
		if(count($mots_cles_obs) > 0) {
-
 
143
 
-
 
144
			$tableau_texte_mots_cles = $this->obtenirMotClesTexte($mots_cles_obs[0]['mots_cles'],$identifiant_utilisateur);
-
 
145
			
-
 
146
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($tableau_texte_mots_cles);
-
 
147
			
-
 
148
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur);
-
 
149
		}
-
 
150
	}
-
 
151
	
-
 
152
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur) {
-
 
153
		
-
 
154
			$requete_regeneration_texte_mots_cles = 'UPDATE cel_inventory '.
-
 
155
													'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
-
 
156
													'WHERE ordre = '.$this->proteger($ordre_observation).' AND '.
-
 
157
													'identifiant = '.$this->proteger($identifiant_utilisateur);
-
 
158
			
-
 
159
			$this->executerRequeteSimple($requete_regeneration_texte_mots_cles);
-
 
160
	}
-
 
161
	
-
 
162
	private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) {
-
 
163
		
-
 
164
		$requete_mot_cle_obs = 'SELECT mots_cles FROM cel_inventory '.
-
 
165
								'WHERE ordre = '.$this->proteger($ordre_observation).' AND '.
-
 
166
								' identifiant = '.$this->proteger($identifiant_utilisateur);
-
 
167
								
-
 
168
		$resultats_mot_cles_obs = $this->executerRequete($requete_mot_cle_obs);
-
 
169
				
-
 
170
		return $resultats_mot_cles_obs;
-
 
171
	}
-
 
172
	
-
 
173
	private function obtenirMotClesTexte($chaine_mot_cle, $identifiant_utilisateur) {
-
 
174
		
-
 
175
		$chaine_mot_cle_obs = $this->formaterChaineMotClePourConditionSql($chaine_mot_cle);
-
 
176
		
-
 
177
		$requete_selection_texte_mot_cles = 'SELECT cmc_mot_cle FROM cel_mots_cles_obs '.
-
 
178
												'WHERE cmc_id_mot_cle_utilisateur IN ('.$chaine_mot_cle_obs.') '.
-
 
179
												'AND cmc_id_proprietaire = '.$this->proteger($identifiant_utilisateur);
-
 
180
												
-
 
181
		$resultat_selection_texte_mot_cles = $this->executerRequete($requete_selection_texte_mot_cles);
-
 
182
		
-
 
183
		return $resultat_selection_texte_mot_cles;
-
 
184
	}
-
 
185
	
-
 
186
	private function formaterChaineMotClePourConditionSql($chaine_mot_cle_obs) {
-
 
187
		
-
 
188
			$chaine_mot_cle_obs = $this->nettoyerMotsCles($chaine_mot_cle_obs);
-
 
189
			$chaine_mot_cle_obs = str_replace(self::SEPARATEUR_MOT_CLE_ID,',',$chaine_mot_cle_obs);
-
 
190
			$chaine_mot_cle_obs = trim($chaine_mot_cle_obs,',');
-
 
191
			
-
 
192
			return $chaine_mot_cle_obs;
-
 
193
	}
-
 
194
	
-
 
195
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
-
 
196
		
-
 
197
			$mot_cles_texte_chaine = '';
-
 
198
			
-
 
199
			if(is_array($tableau_mots_cles_texte)) { 
-
 
200
				foreach($tableau_mots_cles_texte as $mot_cle) {
-
 
201
					$mot_cles_texte_chaine .= $mot_cle['cmc_mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
-
 
202
				}
-
 
203
			}
-
 
204
			
-
 
205
			$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine,self::SEPARATEUR_MOT_CLE_TEXTE);
-
 
206
			
-
 
207
			return $mot_cles_texte_chaine;
-
 
208
	}
-
 
209
	
115
 
210
	private function nettoyerMotsCles($chaine) {
116
     	$valeur = $uid[2] ;
211
		
Line 117... Line 212...
117
 
212
		$valeur = str_replace('null','',$chaine);
-
 
213
     	$valeur = trim($valeur, "null");
-
 
214
       	$valeur = trim($valeur, ";;");
-
 
215
       	
-
 
216
       	return $valeur;
-
 
217
	}
118
     	$valeur = trim($valeur, "null");
218
	
Line 119... Line 219...
119
       	$valeur = trim($valeur, ";;");
219
	private function migrerMotsClesDansTableLiaison() {
120
 
-
 
Line 121... Line 220...
121
     	$query="UPDATE cel_inventory SET " ;
220
		
Line -... Line 221...
-
 
221
		$requete_selection_obs_mots_cles = 'SELECT id, ordre, identifiant, mots_cles FROM cel_inventory '.
-
 
222
											'WHERE TRIM(mots_cles) != ""';
-
 
223
		
122
		$chaine = $DB->escapeSimple($valeur);
224
		$obs_mots_cles = $this->executerRequete($requete_selection_obs_mots_cles);
-
 
225
		
-
 
226
		echo '<pre>'.print_r($obs_mots_cles,true).'</pre>';
-
 
227
		
-
 
228
		$max = 20000;
-
 
229
		$i = 0;
-
 
230
		
123
 
231
		foreach($obs_mots_cles as $obs_mc) {
-
 
232
			
124
		$query .= "mots_cles = REPLACE(REPLACE(mots_cles,'".$chaine."',''),';;',';') ";
233
			/*if($i >= $max) {
-
 
234
				return;
-
 
235
			}*/
-
 
236
						
-
 
237
			$mots_cles_nettoyes = $this->nettoyerMotsCles($obs_mc['mots_cles']);
-
 
238
			$tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID,$mots_cles_nettoyes);
-
 
239
			
-
 
240
			$sous_requete_insertion_valeur = '';
-
 
241
			
-
 
242
			if(count($tableau_mots_cles_codes) > 0) {
125
		$query .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'";
243
				
Line -... Line 244...
-
 
244
				foreach($tableau_mots_cles_codes as $mots_cles_codes) {
-
 
245
					
126
 
246
					$mots_cles_codes = trim($mots_cles_codes,self::SEPARATEUR_MOT_CLE_ID);
-
 
247
					if($this->estUnIdentifiantMotCle($mots_cles_codes)) {							
-
 
248
						$sous_requete_insertion_valeur .= '('.$mots_cles_codes.','.$obs_mc['id'].'),';
-
 
249
					}
Line -... Line 250...
-
 
250
				}
Line -... Line 251...
-
 
251
				
-
 
252
				$sous_requete_insertion_valeur = rtrim($sous_requete_insertion_valeur,',');
-
 
253
				
127
		$res =& $DB->query($query);
254
				if(trim($sous_requete_insertion_valeur) != '') { 
-
 
255
				
-
 
256
					$requete_insertion_mot_cles  = 'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '.
-
 
257
													'VALUES '.$sous_requete_insertion_valeur.' ';
-
 
258
													
-
 
259
					echo $requete_insertion_mot_cles.'<br />';
-
 
260
				
Line 128... Line 261...
128
 
261
					$i++;
129
        if (PEAR::isError($res)) {
262
				}
130
        	$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations :".$res->getMessage()." ".$query);
263
			}