Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 631 Rev 769
1
<?php
1
<?php
2
 
2
 
3
/**
3
/**
4
 
4
 
5
 Aurelien Peronnet aurelienperonnet@gmail.com 2008
5
 Aurelien Peronnet aurelienperonnet@gmail.com 2008
6
 
6
 
7
 Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et
7
 Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et
8
 respectant les principes de diffusion des logiciels libres. Vous pouvez
8
 respectant les principes de diffusion des logiciels libres. Vous pouvez
9
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
9
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
10
 de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA
10
 de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA
11
 sur le site "http://www.cecill.info".
11
 sur le site "http://www.cecill.info".
12
 En contrepartie de l'accessibilit? au code source et des droits de copie,
12
 En contrepartie de l'accessibilit? au code source et des droits de copie,
13
 de modification et de redistribution accord?s par cette licence, il n'est
13
 de modification et de redistribution accord?s par cette licence, il n'est
14
 offert aux utilisateurs qu'une garantie limit?e.  Pour les m?mes raisons,
14
 offert aux utilisateurs qu'une garantie limit?e.  Pour les m?mes raisons,
15
 seule une responsabilit? restreinte p?se sur l'auteur du programme,  le
15
 seule une responsabilit? restreinte p?se sur l'auteur du programme,  le
16
 titulaire des droits patrimoniaux et les conc?dants successifs.
16
 titulaire des droits patrimoniaux et les conc?dants successifs.
17
 
17
 
18
 A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
18
 A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
19
 associ?s au chargement,  ? l'utilisation,  ? la modification et/ou au
19
 associ?s au chargement,  ? l'utilisation,  ? la modification et/ou au
20
 d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant
20
 d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant
21
 donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ?
21
 donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ?
22
 manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
22
 manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
23
 avertis poss?dant  des  connaissances  informatiques approfondies.  Les
23
 avertis poss?dant  des  connaissances  informatiques approfondies.  Les
24
 utilisateurs sont donc invit?s ? charger  et  tester  l'ad?quation  du
24
 utilisateurs sont donc invit?s ? charger  et  tester  l'ad?quation  du
25
 logiciel ? leurs besoins dans des conditions permettant d'assurer la
25
 logiciel ? leurs besoins dans des conditions permettant d'assurer la
26
 s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement,
26
 s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement,
27
 ? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?.
27
 ? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?.
28
 
28
 
29
 Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez
29
 Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez
30
 pris connaissance de la licence CeCILL, et que vous en avez accept? les
30
 pris connaissance de la licence CeCILL, et que vous en avez accept? les
31
 termes.
31
 termes.
32
 
32
 
33
 */
33
 */
34
 
34
 
35
 
35
 
36
// in : utf8
36
// in : utf8
37
// out : utf8
37
// out : utf8
38
/*
38
/*
39
 * InventoryImageLink.php
39
 * InventoryImageLink.php
40
 *
40
 *
41
 * Cas d'utilisation :
41
 * Cas d'utilisation :
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
 	}
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
 
69
     	
67
     	$DB=$this->connectDB($this->config,'database_cel');
-
 
68
 
-
 
69
     	if(!isset($pairs['mots_cles']) || !isset($uid[1])) {
70
     	if(!isset($pairs['mots_cles']) || !isset($uid[1])) {
70
     		return;
71
     		return;
71
     	}
72
     	}
72
 
73
 
73
     	if(isset($pairs['action'])) {
74
     	if(isset($pairs['action'])) {
74
     		$action = $pairs['action'];
75
     		$action = $pairs['action'];
75
     	}
76
     	}
76
 
77
 
77
     	$valeur = $pairs['mots_cles'];
78
     	$valeur = $pairs['mots_cles'];
78
     	
79
     	
79
     	$valeur = str_replace('null','',$valeur);
-
 
80
     	$valeur = trim($valeur, "null");
-
 
81
       	$valeur = trim($valeur, ";;");
-
 
82
 
-
 
83
     	$query="UPDATE cel_inventory SET " ;
-
 
84
		$query .= "mots_cles = CONCAT(IFNULL(mots_cles,''),'".$DB->escapeSimple($valeur).";') ";
-
 
85
		$query .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'";
-
 
86
 
-
 
-
 
80
		$valeur = $this->nettoyerMotsCles($valeur);
-
 
81
 
-
 
82
     	$requete_maj_liaison_mots_cles = "UPDATE cel_inventory SET " ;
-
 
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
 
87
		echo $query;
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
		}
-
 
95
		
-
 
96
		$tableau_id_obs = split(',',$uid[1]);
-
 
97
		foreach($tableau_id_obs as $ordre_obs) {
88
 
-
 
89
		$res =& $DB->query($query);
-
 
90
 
-
 
91
        if (PEAR::isError($res)) {
-
 
92
        	$this->logger("CEL_bugs","Erreur d'ajout de plusieurs observations :".$res->getMessage()." ".$query);
-
 
93
        	die($res->getMessage());
-
 
94
        }
98
			$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
95
        echo $query;
99
		}
96
 
100
 
97
        return	true;
101
        return true;
98
	}
102
	}
99
 
103
 
100
	function deleteElement($uid){
104
	function deleteElement($uid){
101
 
105
 
102
	 	// Controle detournement utilisateur
106
	 	// Controle detournement utilisateur
103
	    session_start();
107
	    session_start();
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
     	}
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;
114
     	}
116
     	}
115
 
117
 
116
     	$valeur = $uid[2] ;
118
     	$valeur = $uid[2] ;
117
 
119
 
118
     	$valeur = trim($valeur, "null");
120
     	$valeur = $this->nettoyerMotsCles($valeur);
119
       	$valeur = trim($valeur, ";;");
121
     	$chaine = $this->proteger($valeur);
120
 
-
 
121
     	$query="UPDATE cel_inventory SET " ;
122
 
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])."'";
126
 
127
 
127
		$res =& $DB->query($query);
128
		$resultat_suppression_mots_cles = $this->executerRequeteSimple($requete_suppression_mots_cles);
128
 
129
 
129
        if (PEAR::isError($res)) {
130
        if ($resultat_suppression_mots_cles) {
130
        	$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations :".$res->getMessage()." ".$query);
131
        	$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations : ".$requete_suppression_mots_cles);
131
        	die($res->getMessage());
132
        	return false;
132
        }
133
        }
133
 
134
 
134
        return true;
135
        return true;
135
 
-
 
136
 
-
 
137
	}
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
				}
-
 
263
			}
-
 
264
		}
-
 
265
	}
-
 
266
	
-
 
267
	private function estUnIdentifiantMotCle($chaine) {
-
 
268
		return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ;
-
 
269
	}
-
 
270
	
138
 
271
 
139
}
272
}
140
?>
273
?>