Subversion Repositories eFlore/Applications.cel

Rev

Rev 631 | Rev 780 | Go to most recent revision | Show entire file | Ignore 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 {
-
 
48
 	
-
 
49
 	const SEPARATEUR_MOT_CLE_TEXTE = '##';
-
 
50
 	const SEPARATEUR_MOT_CLE_ID = ';';
-
 
51
 	
-
 
52
 	function getRessource() {
-
 
53
 		$this->migrerMotsClesDansTableLiaison();	
-
 
54
 	}
-
 
55
 	
-
 
56
 	function getElement($uid) {
-
 
57
 		
-
 
58
 	}
Line 47... Line -...
47
 
-
 
48
 Class InventoryKeyWordObsLink extends DBAccessor {
-
 
49
 
-
 
50
	var $config;
-
 
51
 
-
 
52
	function InventoryKeyWordObsLink($config) {
-
 
53
 
-
 
54
		$this->config=$config;
-
 
55
	}
-
 
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
61
	    session_start();
64
	    session_start();
62
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
65
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
63
	 		print "Acces interdit";
66
	 		print "Acces interdit";
64
 			return;
67
 			return;
65
     	}
68
     	}
66
 
-
 
67
     	$DB=$this->connectDB($this->config,'database_cel');
-
 
68
 
69
     	
69
     	if(!isset($pairs['mots_cles']) || !isset($uid[1])) {
70
     	if(!isset($pairs['mots_cles']) || !isset($uid[1])) {
70
     		return;
71
     		return;
Line 71... Line 72...
71
     	}
72
     	}
72
 
73
 
73
     	if(isset($pairs['action'])) {
74
     	if(isset($pairs['action'])) {
Line 74... Line 75...
74
     		$action = $pairs['action'];
75
     		$action = $pairs['action'];
Line 75... Line 76...
75
     	}
76
     	}
76
 
-
 
77
     	$valeur = $pairs['mots_cles'];
-
 
78
     	
-
 
79
     	$valeur = str_replace('null','',$valeur);
-
 
80
     	$valeur = trim($valeur, "null");
-
 
81
       	$valeur = trim($valeur, ";;");
-
 
82
 
-
 
83
     	$query="UPDATE cel_inventory SET " ;
-
 
Line -... Line 77...
-
 
77
 
-
 
78
     	$valeur = $pairs['mots_cles'];
-
 
79
     	
-
 
80
		$valeur = $this->nettoyerMotsCles($valeur);
-
 
81
 
-
 
82
     	$requete_maj_liaison_mots_cles = "UPDATE cel_inventory SET " ;
84
		$query .= "mots_cles = CONCAT(IFNULL(mots_cles,''),'".$DB->escapeSimple($valeur).";') ";
83
		$requete_maj_liaison_mots_cles .= "mots_cles = CONCAT(IFNULL(mots_cles,''),'".$valeur.";') ";
-
 
84
		$requete_maj_liaison_mots_cles .= "WHERE ordre IN (".$uid[1].") AND identifiant = ".$this->proteger($uid[0]);
-
 
85
 
-
 
86
		$resultat_maj_liaison_mots_cles = $this->executerRequeteSimple($requete_maj_liaison_mots_cles);
-
 
87
		
-
 
88
		$retour = false;
-
 
89
		
-
 
90
		if ($resultat_maj_liaison_mots_cles) {
-
 
91
			$retour = 'OK';
-
 
92
		} else {
-
 
93
			$this->logger("CEL_bugs","Erreur de mise à jour des mots clés d'une obs : ".$requete_maj_liaison_mots_cles);
-
 
94
		}
Line 85... Line -...
85
		$query .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'";
-
 
86
 
-
 
87
		echo $query;
-
 
88
 
-
 
89
		$res =& $DB->query($query);
-
 
90
 
-
 
91
        if (PEAR::isError($res)) {
95
		
92
        	$this->logger("CEL_bugs","Erreur d'ajout de plusieurs observations :".$res->getMessage()." ".$query);
96
		$tableau_id_obs = split(',',$uid[1]);
Line 93... Line 97...
93
        	die($res->getMessage());
97
		foreach($tableau_id_obs as $ordre_obs) {
Line 94... Line 98...
94
        }
98
			$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
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 115... Line 117...
115
 
117
 
116
     	$valeur = $uid[2] ;
118
     	$valeur = $uid[2] ;
Line 117... Line 119...
117
 
119
 
118
     	$valeur = trim($valeur, "null");
-
 
Line 119... Line 120...
119
       	$valeur = trim($valeur, ";;");
120
     	$valeur = $this->nettoyerMotsCles($valeur);
120
 
121
     	$chaine = $this->proteger($valeur);
Line 121... Line 122...
121
     	$query="UPDATE cel_inventory SET " ;
122
 
Line 122... Line 123...
122
		$chaine = $DB->escapeSimple($valeur);
123
     	$requete_suppression_mots_cles = "UPDATE cel_inventory SET " ;
123
 
124
 
124
		$query .= "mots_cles = REPLACE(REPLACE(mots_cles,'".$chaine."',''),';;',';') ";
125
		$requete_suppression_mots_cles .= "mots_cles = REPLACE(REPLACE(mots_cles,'".$chaine."',''),';;',';') ";
125
		$query .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'";
126
		$requete_suppression_mots_cles .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'";
Line 126... Line 127...
126
 
127
 
127
		$res =& $DB->query($query);
-
 
128
 
-
 
129
        if (PEAR::isError($res)) {
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
	
-
 
210
	private function nettoyerMotsCles($chaine) {
-
 
211
		
-
 
212
		$valeur = str_replace('null','',$chaine);
-
 
213
     	$valeur = trim($valeur, "null");
-
 
214
       	$valeur = trim($valeur, ";;");
-
 
215
       	
-
 
216
       	return $valeur;
-
 
217
	}
-
 
218
	
-
 
219
	private function migrerMotsClesDansTableLiaison() {
-
 
220
		
-
 
221
		$requete_selection_obs_mots_cles = 'SELECT id, ordre, identifiant, mots_cles FROM cel_inventory '.
-
 
222
											'WHERE TRIM(mots_cles) != ""';
-
 
223
		
-
 
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
		
-
 
231
		foreach($obs_mots_cles as $obs_mc) {
-
 
232
			
-
 
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) {
-
 
243
				
-
 
244
				foreach($tableau_mots_cles_codes as $mots_cles_codes) {
-
 
245
					
-
 
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
					}
-
 
250
				}
-
 
251
				
-
 
252
				$sous_requete_insertion_valeur = rtrim($sous_requete_insertion_valeur,',');
-
 
253
				
-
 
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
				
-
 
261
					$i++;
-
 
262
				}
Line 130... Line 263...
130
        	$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations :".$res->getMessage()." ".$query);
263
			}
131
        	die($res->getMessage());
264
		}
132
        }
265
	}