Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 816 Rev 819
1
<?php
1
<?php
2
 
-
 
-
 
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 
-
 
5
 Aurelien Peronnet aurelienperonnet@gmail.com 2008
-
 
6
 
-
 
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
-
 
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
-
 
11
 sur le site "http://www.cecill.info".
-
 
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
-
 
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
-
 
16
 titulaire des droits patrimoniaux et les conc?dants successifs.
4
 * Service de liaisons d'images à des observations.
17
 
-
 
18
 A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
5
 * Le service lie une ou plusieurs images à une ou plusieurs observations
19
 associ?s au chargement,  ? l'utilisation,  ? la modification et/ou au
-
 
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 ?
-
 
22
 manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
-
 
23
 avertis poss?dant  des  connaissances  informatiques approfondies.  Les
-
 
24
 utilisateurs sont donc invit?s ? charger  et  tester  l'ad?quation  du
-
 
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,
-
 
27
 ? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?.
6
 * Le service renvoie les observations liées à une image
28
 
-
 
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
-
 
31
 termes.
-
 
32
 
-
 
33
 */
-
 
34
 
-
 
35
 
-
 
36
// in : utf8
-
 
37
// out : utf8
7
 * Encodage en entrée : utf8
38
/*
-
 
39
 * InventoryImageLink.php
8
 * Encodage en sortie : utf8
40
 *
9
 *
41
 * Cas d'utilisation :
10
 * Cas d'utilisation :
42
 * Service de liaisons d'images à des observations
-
 
43
 *
11
 *
44
 * 2: Le service lie une ou plusieurs images à une ou plusieurs observations
12
 * @author Aurélien PERONNET <aurelien@tela-botanica.org>
45
 * 3: Le service renvoie les observations liées à une image
13
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
-
 
14
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
-
 
15
 * @version $Id$
-
 
16
 * @copyright © 2011, Tela-Botanica
46
 */
17
 */
47
 Class InventoryKeyWordObsLink extends Cel {
18
class InventoryKeyWordObsLink extends Cel {
48
 	
19
	
49
 	const SEPARATEUR_MOT_CLE_TEXTE = '##';
20
	const SEPARATEUR_MOT_CLE_TEXTE = '##';
50
 	const SEPARATEUR_MOT_CLE_ID = ';';
21
	const SEPARATEUR_MOT_CLE_ID = ';';
51
 	
22
	
52
 	function getRessource() {
23
	public function getRessource() {
53
 		//$this->migrerMotsClesDansTableLiaison();	
24
		//$this->migrerMotsClesDansTableLiaison();	
54
 	}
25
	}
55
 	
26
	
56
 	function getElement($uid) {
27
	public function getElement($uid) {
57
 		
28
	
58
 	}
29
	}
59
 
30
 
60
	// met à jour les associations des mots clés des observations
31
	// met à jour les associations des mots clés des observations
61
	function updateElement($uid,$pairs)
-
 
62
	{
32
	public function updateElement($uid,$pairs) {
63
		// Controle detournement utilisateur
33
		// Controle detournement utilisateur
64
	    session_start();
34
		session_start();
65
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
35
		if (($_SESSION['user'] != '') && $_SESSION['user']['name'] != $uid[0]) {
66
	 		print "Acces interdit";
36
			print "Acces interdit";
67
 			return;
37
			return;
68
     	}
38
		}
69
     	
39
	
70
     	if(!isset($pairs['mots_cles']) || !isset($uid[1])) {
40
		if (!isset($pairs['mots_cles']) || !isset($uid[1])) {
71
     		return;
41
			return;
72
     	}
42
		}
73
 
43
 
74
     	if(isset($pairs['action'])) {
44
		if (isset($pairs['action'])) {
75
     		$action = $pairs['action'];
45
			$action = $pairs['action'];
76
     	}
-
 
77
 
46
		}
-
 
47
 
-
 
48
		$valeur = $pairs['mots_cles'];
-
 
49
		$valeur = $this->nettoyerMotsCles($valeur);
78
     	$valeur = $pairs['mots_cles'];
-
 
79
     	
-
 
80
		$valeur = $this->nettoyerMotsCles($valeur);
-
 
81
 
-
 
82
     	$requete_maj_liaison_mots_cles = "UPDATE cel_inventory SET ".
-
 
83
								"mots_cles = REPLACE(CONCAT(IFNULL(mots_cles,''),'".$valeur.";'),'null','') ".
50
		$requete =	'UPDATE cel_inventory '.
84
								"WHERE ordre IN (".$uid[1].") AND identifiant = ".$this->proteger($uid[0]);
51
					"SET mots_cles = REPLACE(CONCAT(IFNULL(mots_cles,''), '$valeur;'), 'null', '') ".
85
 
-
 
86
		/*echo $requete_maj_liaison_mots_cles; exit;*/
52
					"WHERE ordre IN ({$uid[1]}) AND identifiant = ".$this->proteger($uid[0]);
87
		$resultat_maj_liaison_mots_cles = $this->executerRequeteSimple($requete_maj_liaison_mots_cles);
53
 
88
		
54
		$resultat = $this->executerRequeteSimple($requete);
89
		$retour = false;
55
		
90
		
56
		$retour = false;
91
		if ($resultat_maj_liaison_mots_cles) {
57
		if ($resultat) {
92
			$retour = 'OK';
58
			$retour = true;
93
		} else {
59
		} else {
94
			$this->logger("CEL_bugs","Erreur de mise à jour des mots clés d'une obs : ".$requete_maj_liaison_mots_cles);
60
			$this->logger('CEL_bugs', "Erreur de mise à jour des mots clés d'une obs : $requete");
95
		}
61
		}
96
		
62
		
97
		$tableau_id_obs = split(',',$uid[1]);
63
		$tableau_id_obs = split(',', $uid[1]);
98
		foreach($tableau_id_obs as $ordre_obs) {
64
		foreach($tableau_id_obs as $ordre_obs) {
99
			$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
65
			$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
100
		}
66
		}
101
 
67
 
102
        return true;
68
		return $retour;
103
	}
69
	}
-
 
70
 
104
 
71
	public function deleteElement($uid){
105
	function deleteElement($uid){
72
		$retour = false;
106
 
73
		
107
	 	// Controle detournement utilisateur
74
		// Controle detournement utilisateur
108
	    session_start();
75
		session_start();
109
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
76
		if ($_SESSION['user'] != '' && $_SESSION['user']['name'] != $uid[0]) {
110
	 		print "Acces interdit";
-
 
111
 			return;
-
 
112
     	}
77
			print "Acces interdit";
113
 
78
		} else {
114
     	if(!isset($uid[2]) || !isset($uid[1])) {
79
			if (!isset($uid[2]) || !isset($uid[1])) {
115
     		echo 'pas de mots clés';
-
 
116
     		return;
-
 
117
     	}
-
 
118
 
-
 
119
     	$valeur = $uid[2] ;
80
				print 'pas de mots clés';
120
 
81
			} else {
121
     	$valeur = $this->nettoyerMotsCles($valeur);
82
				$mot_cle = $this->nettoyerMotsCles($uid[2]);
122
     	$chaine = $this->proteger($valeur);
83
				$mot_cle = $this->proteger($mot_cle);
123
 
-
 
124
     	$requete_suppression_mots_cles = "UPDATE cel_inventory SET " ;
84
		
-
 
85
				$requete =	'UPDATE cel_inventory '.
125
 
86
							"SET mots_cles = REPLACE(REPLACE(mots_cles, '$mot_cle', ''), ';;', ';') ".
126
		$requete_suppression_mots_cles .= "mots_cles = REPLACE(REPLACE(mots_cles,'".$chaine."',''),';;',';') ";
87
							"WHERE ordre IN ({$uid[1]}) ".
127
		$requete_suppression_mots_cles .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'";
88
							"	AND identifiant = '".$DB->escapeSimple($uid[0])."'";
128
		$resultat_suppression_mots_cles = $this->executerRequeteSimple($requete_suppression_mots_cles);
89
				$resultat = $this->executerRequeteSimple($requete);
-
 
90
		
-
 
91
				if ($resultat) {
129
 
92
					$retour = true;
130
        if ($resultat_suppression_mots_cles) {
93
				} else {
131
        	$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations : ".$requete_suppression_mots_cles);
94
					$e = "Erreur de suppression des mots clés de plusieurs observations : $requete";
-
 
95
					$this->logger('CEL_bugs', $e);
-
 
96
				}
132
        	return false;
97
			}
133
        }
98
		}
134
 
99
 
135
        return true;
100
		return $retour;
136
	}
101
	}
137
	
102
	
138
	private function regenererIndexTexteMotCleObservation($ordre_observation, $identifiant_utilisateur) {
103
	private function regenererIndexTexteMotCleObservation($ordre_observation, $identifiant_utilisateur) {
139
			
-
 
140
		$mots_cles_obs = $this->obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur);
104
		$mots_cles_obs = $this->obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur);
141
		
105
		
142
		if(count($mots_cles_obs) > 0) {
-
 
143
 
106
		if (count($mots_cles_obs) > 0) {
144
			$tableau_texte_mots_cles = $this->obtenirMotClesTexte($mots_cles_obs[0]['mots_cles'],$identifiant_utilisateur);
-
 
145
			
107
			$tableau_texte_mots_cles = $this->obtenirMotClesTexte($mots_cles_obs[0]['mots_cles'], $identifiant_utilisateur);
146
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($tableau_texte_mots_cles);
-
 
147
			
108
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($tableau_texte_mots_cles);
148
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur);
109
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur);
149
		}
110
		}
150
	}
111
	}
151
	
112
	
152
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur) {
113
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur) {
-
 
114
		$requete = 	'UPDATE cel_inventory '.
-
 
115
					'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
-
 
116
					'WHERE ordre = '.$this->proteger($ordre_observation).
-
 
117
					'	AND identifiant = '.$this->proteger($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
			
118
		
159
			$this->executerRequeteSimple($requete_regeneration_texte_mots_cles);
119
		$this->executerRequeteSimple($requete);
160
	}
120
	}
161
	
121
	
162
	private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) {
122
	private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) {
-
 
123
		$requete = 	'SELECT mots_cles '.
-
 
124
					'FROM cel_inventory '.
-
 
125
					'WHERE ordre = '.$this->proteger($ordre_observation).
-
 
126
					'	AND identifiant = '.$this->proteger($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
								
127
		
168
		$resultats_mot_cles_obs = $this->executerRequete($requete_mot_cle_obs);
128
		$resultats = $this->executerRequete($requete);
169
				
129
				
170
		return $resultats_mot_cles_obs;
130
		return $resultats;
171
	}
131
	}
172
	
132
	
173
	private function obtenirMotClesTexte($chaine_mot_cle, $identifiant_utilisateur) {
133
	private function obtenirMotClesTexte($chaine_mot_cle, $identifiant_utilisateur) {
174
		
-
 
175
		$chaine_mot_cle_obs = $this->formaterChaineMotClePourConditionSql($chaine_mot_cle);
134
		$chaine_mot_cle_obs = $this->formaterChaineMotClePourConditionSql($chaine_mot_cle);
176
		
135
		
177
		$requete_selection_texte_mot_cles = 'SELECT cmc_mot_cle FROM cel_mots_cles_obs '.
136
		$requete = 'SELECT cmc_mot_cle FROM cel_mots_cles_obs '.
178
												'WHERE cmc_id_mot_cle_utilisateur IN ('.$chaine_mot_cle_obs.') '.
137
					'WHERE cmc_id_mot_cle_utilisateur IN ('.$chaine_mot_cle_obs.') '.
179
												'AND cmc_id_proprietaire = '.$this->proteger($identifiant_utilisateur);
138
					'AND cmc_id_proprietaire = '.$this->proteger($identifiant_utilisateur);
180
												
139
												
181
		$resultat_selection_texte_mot_cles = $this->executerRequete($requete_selection_texte_mot_cles);
140
		$resultat = $this->executerRequete($requete);
182
		
141
		
183
		return $resultat_selection_texte_mot_cles;
142
		return $resultat;
184
	}
143
	}
185
	
144
	
186
	private function formaterChaineMotClePourConditionSql($chaine_mot_cle_obs) {
145
	private function formaterChaineMotClePourConditionSql($chaine_mot_cle_obs) {
-
 
146
		$chaine_mot_cle_obs = $this->nettoyerMotsCles($chaine_mot_cle_obs);
-
 
147
		$chaine_mot_cle_obs = str_replace(self::SEPARATEUR_MOT_CLE_ID, ',', $chaine_mot_cle_obs);
-
 
148
		$chaine_mot_cle_obs = trim($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
			
149
		
192
			return $chaine_mot_cle_obs;
150
		return $chaine_mot_cle_obs;
193
	}
151
	}
194
	
152
	
195
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
153
	private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) {
-
 
154
		$mot_cles_texte_chaine = '';
196
		
-
 
197
			$mot_cles_texte_chaine = '';
-
 
198
			
155
		
199
			if(is_array($tableau_mots_cles_texte)) { 
156
		if (is_array($tableau_mots_cles_texte)) { 
200
				foreach($tableau_mots_cles_texte as $mot_cle) {
157
			foreach ($tableau_mots_cles_texte as $mot_cle) {
201
					$mot_cles_texte_chaine .= $mot_cle['cmc_mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
-
 
202
				}
158
				$mot_cles_texte_chaine .= $mot_cle['cmc_mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE;
-
 
159
			}
203
			}
160
		}
204
			
161
		
205
			$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine,self::SEPARATEUR_MOT_CLE_TEXTE);
162
		$mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine, self::SEPARATEUR_MOT_CLE_TEXTE);
206
			
163
		
207
			return $mot_cles_texte_chaine;
164
		return $mot_cles_texte_chaine;
208
	}
165
	}
209
	
166
	
210
	private function nettoyerMotsCles($chaine) {
167
	private function nettoyerMotsCles($chaine) {
-
 
168
		$valeur = str_replace('null', '', $chaine);
-
 
169
		$valeur = trim($valeur, ';;');
211
		
-
 
212
		$valeur = str_replace('null','',$chaine);
-
 
213
       	$valeur = trim($valeur, ";;");
-
 
214
       	
170
		
215
       	return $valeur;
171
		return $valeur;
216
	}
172
	}
217
	
173
	
218
	private function migrerMotsClesDansTableLiaison() {
174
	private function migrerMotsClesDansTableLiaison() {
-
 
175
		$requete = 	'SELECT id, ordre, identifiant, mots_cles '.
-
 
176
					'FROM cel_inventory '.
-
 
177
					'WHERE TRIM(mots_cles) != "" ';
-
 
178
		$obs_mots_cles = $this->executerRequete($requete);
219
		
-
 
220
		$requete_selection_obs_mots_cles = 'SELECT id, ordre, identifiant, mots_cles FROM cel_inventory '.
-
 
221
											'WHERE TRIM(mots_cles) != ""';
-
 
222
		
-
 
223
		$obs_mots_cles = $this->executerRequete($requete_selection_obs_mots_cles);
-
 
224
		
179
		
225
		echo '<pre>'.print_r($obs_mots_cles,true).'</pre>';
180
		echo '<pre>'.print_r($obs_mots_cles, true).'</pre>';
226
		
181
		
227
		$max = 20000;
182
		$max = 20000;
228
		$i = 0;
183
		$i = 0;
229
		
-
 
230
		foreach($obs_mots_cles as $obs_mc) {
184
		foreach ($obs_mots_cles as $obs_mc) {
231
			
-
 
232
			/*if($i >= $max) {
-
 
233
				return;
-
 
234
			}*/
-
 
235
						
-
 
236
			$mots_cles_nettoyes = $this->nettoyerMotsCles($obs_mc['mots_cles']);
185
			$mots_cles_nettoyes = $this->nettoyerMotsCles($obs_mc['mots_cles']);
237
			$tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID,$mots_cles_nettoyes);
186
			$tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID, $mots_cles_nettoyes);
238
			
187
			
239
			$sous_requete_insertion_valeur = '';
188
			$requete_values = '';
240
			
-
 
241
			if(count($tableau_mots_cles_codes) > 0) {
189
			
242
				
-
 
243
				foreach($tableau_mots_cles_codes as $mots_cles_codes) {
190
			if (count($tableau_mots_cles_codes) > 0) {
244
					
191
				foreach($tableau_mots_cles_codes as $mots_cles_codes) {
245
					$mots_cles_codes = trim($mots_cles_codes,self::SEPARATEUR_MOT_CLE_ID);
192
					$mots_cles_codes = trim($mots_cles_codes, self::SEPARATEUR_MOT_CLE_ID);
246
					if($this->estUnIdentifiantMotCle($mots_cles_codes)) {							
193
					if ($this->estUnIdentifiantMotCle($mots_cles_codes)) {							
247
						$sous_requete_insertion_valeur .= '('.$mots_cles_codes.','.$obs_mc['id'].'),';
194
						$requete_values .= '('.$mots_cles_codes.','.$obs_mc['id'].'),';
248
					}
195
					}
249
				}
196
				}
250
				
197
				
251
				$sous_requete_insertion_valeur = rtrim($sous_requete_insertion_valeur,',');
-
 
252
				
198
				$requete_values = rtrim($requete_values, ',');
253
				if(trim($sous_requete_insertion_valeur) != '') { 
-
 
254
				
199
				if (trim($requete_values) != '') { 
255
					$requete_insertion_mot_cles  = 'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '.
200
					$requete = 	'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '.
256
													'VALUES '.$sous_requete_insertion_valeur.' ';
-
 
257
													
201
								'VALUES '.$requete_values.' ';
258
					echo $requete_insertion_mot_cles.'<br />';
-
 
259
				
202
					echo $requete.'<br />';
260
					$i++;
203
					$i++;
261
				}
204
				}
262
			}
205
			}
263
		}
206
		}
264
	}
207
	}
265
	
208
	
266
	private function estUnIdentifiantMotCle($chaine) {
209
	private function estUnIdentifiantMotCle($chaine) {
267
		return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ;
210
		return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine);
268
	}
211
	}
269
	
-
 
270
 
-
 
271
}
212
}
272
?>
213
?>