Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 816 Rev 819
Line 1... Line 1...
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 {
Line 48... Line 19...
48
 	
19
	
49
 	const SEPARATEUR_MOT_CLE_TEXTE = '##';
20
	const SEPARATEUR_MOT_CLE_TEXTE = '##';
Line 50... Line 21...
50
 	const SEPARATEUR_MOT_CLE_ID = ';';
21
	const SEPARATEUR_MOT_CLE_ID = ';';
51
 	
22
	
52
 	function getRessource() {
23
	public function getRessource() {
Line 53... Line 24...
53
 		//$this->migrerMotsClesDansTableLiaison();	
24
		//$this->migrerMotsClesDansTableLiaison();	
Line 54... Line 25...
54
 	}
25
	}
Line 55... Line 26...
55
 	
26
	
56
 	function getElement($uid) {
27
	public function getElement($uid) {
57
 		
-
 
58
 	}
28
	
59
 
29
	}
60
	// met à jour les associations des mots clés des observations
30
 
61
	function updateElement($uid,$pairs)
31
	// met à jour les associations des mots clés des observations
62
	{
32
	public function updateElement($uid,$pairs) {
63
		// Controle detournement utilisateur
33
		// Controle detournement utilisateur
Line 64... Line 34...
64
	    session_start();
34
		session_start();
Line 74... Line 44...
74
     	if(isset($pairs['action'])) {
44
		if (isset($pairs['action'])) {
75
     		$action = $pairs['action'];
45
			$action = $pairs['action'];
76
     	}
46
		}
Line 77... Line 47...
77
 
47
 
78
     	$valeur = $pairs['mots_cles'];
-
 
79
     	
48
		$valeur = $pairs['mots_cles'];
-
 
49
		$valeur = $this->nettoyerMotsCles($valeur);
-
 
50
		$requete =	'UPDATE cel_inventory '.
-
 
51
					"SET mots_cles = REPLACE(CONCAT(IFNULL(mots_cles,''), '$valeur;'), 'null', '') ".
Line 80... Line -...
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','') ".
-
 
84
								"WHERE ordre IN (".$uid[1].") AND identifiant = ".$this->proteger($uid[0]);
-
 
85
 
52
					"WHERE ordre IN ({$uid[1]}) AND identifiant = ".$this->proteger($uid[0]);
Line 86... Line 53...
86
		/*echo $requete_maj_liaison_mots_cles; exit;*/
53
 
87
		$resultat_maj_liaison_mots_cles = $this->executerRequeteSimple($requete_maj_liaison_mots_cles);
-
 
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;
Line 93... Line 59...
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
		
Line 97... Line 63...
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) {
Line 99... Line 65...
99
			$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
65
			$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
-
 
66
		}
Line 100... Line 67...
100
		}
67
 
101
 
68
		return $retour;
102
        return true;
69
	}
103
	}
70
 
104
 
71
	public function deleteElement($uid){
105
	function deleteElement($uid){
-
 
106
 
-
 
107
	 	// Controle detournement utilisateur
72
		$retour = false;
108
	    session_start();
73
		
109
	 	if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {
74
		// Controle detournement utilisateur
110
	 		print "Acces interdit";
-
 
111
 			return;
-
 
112
     	}
-
 
113
 
-
 
114
     	if(!isset($uid[2]) || !isset($uid[1])) {
75
		session_start();
115
     		echo 'pas de mots clés';
76
		if ($_SESSION['user'] != '' && $_SESSION['user']['name'] != $uid[0]) {
116
     		return;
-
 
117
     	}
-
 
Line -... Line 77...
-
 
77
			print "Acces interdit";
118
 
78
		} else {
-
 
79
			if (!isset($uid[2]) || !isset($uid[1])) {
119
     	$valeur = $uid[2] ;
80
				print 'pas de mots clés';
120
 
81
			} else {
Line 121... Line 82...
121
     	$valeur = $this->nettoyerMotsCles($valeur);
82
				$mot_cle = $this->nettoyerMotsCles($uid[2]);
-
 
83
				$mot_cle = $this->proteger($mot_cle);
-
 
84
		
122
     	$chaine = $this->proteger($valeur);
85
				$requete =	'UPDATE cel_inventory '.
123
 
86
							"SET mots_cles = REPLACE(REPLACE(mots_cles, '$mot_cle', ''), ';;', ';') ".
-
 
87
							"WHERE ordre IN ({$uid[1]}) ".
-
 
88
							"	AND identifiant = '".$DB->escapeSimple($uid[0])."'";
124
     	$requete_suppression_mots_cles = "UPDATE cel_inventory SET " ;
89
				$resultat = $this->executerRequeteSimple($requete);
Line 125... Line 90...
125
 
90
		
126
		$requete_suppression_mots_cles .= "mots_cles = REPLACE(REPLACE(mots_cles,'".$chaine."',''),';;',';') ";
91
				if ($resultat) {
Line 127... Line 92...
127
		$requete_suppression_mots_cles .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'";
92
					$retour = true;
128
		$resultat_suppression_mots_cles = $this->executerRequeteSimple($requete_suppression_mots_cles);
-
 
129
 
93
				} else {
Line 130... Line 94...
130
        if ($resultat_suppression_mots_cles) {
94
					$e = "Erreur de suppression des mots clés de plusieurs observations : $requete";
131
        	$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations : ".$requete_suppression_mots_cles);
-
 
132
        	return false;
95
					$this->logger('CEL_bugs', $e);
133
        }
-
 
134
 
96
				}
135
        return true;
-
 
136
	}
97
			}
137
	
98
		}
138
	private function regenererIndexTexteMotCleObservation($ordre_observation, $identifiant_utilisateur) {
99
 
Line 139... Line 100...
139
			
100
		return $retour;
140
		$mots_cles_obs = $this->obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur);
-
 
141
		
101
	}
142
		if(count($mots_cles_obs) > 0) {
102
	
143
 
103
	private function regenererIndexTexteMotCleObservation($ordre_observation, $identifiant_utilisateur) {
144
			$tableau_texte_mots_cles = $this->obtenirMotClesTexte($mots_cles_obs[0]['mots_cles'],$identifiant_utilisateur);
104
		$mots_cles_obs = $this->obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur);
Line 145... Line 105...
145
			
105
		
146
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($tableau_texte_mots_cles);
106
		if (count($mots_cles_obs) > 0) {
Line 147... Line 107...
147
			
107
			$tableau_texte_mots_cles = $this->obtenirMotClesTexte($mots_cles_obs[0]['mots_cles'], $identifiant_utilisateur);
-
 
108
			$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($tableau_texte_mots_cles);
-
 
109
			$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur);
-
 
110
		}
-
 
111
	}
Line 148... Line -...
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) {
112
	
Line 153... Line 113...
153
		
113
	private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur) {
154
			$requete_regeneration_texte_mots_cles = 'UPDATE cel_inventory '.
114
		$requete = 	'UPDATE cel_inventory '.
Line 155... Line 115...
155
													'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
115
					'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
156
													'WHERE ordre = '.$this->proteger($ordre_observation).' AND '.
-
 
157
													'identifiant = '.$this->proteger($identifiant_utilisateur);
116
					'WHERE ordre = '.$this->proteger($ordre_observation).
Line 158... Line 117...
158
			
117
					'	AND identifiant = '.$this->proteger($identifiant_utilisateur);
159
			$this->executerRequeteSimple($requete_regeneration_texte_mots_cles);
118
		
160
	}
119
		$this->executerRequeteSimple($requete);
Line 161... Line 120...
161
	
120
	}
Line 162... Line 121...
162
	private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) {
121
	
163
		
122
	private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) {
Line 164... Line 123...
164
		$requete_mot_cle_obs = 'SELECT mots_cles FROM cel_inventory '.
123
		$requete = 	'SELECT mots_cles '.
165
								'WHERE ordre = '.$this->proteger($ordre_observation).' AND '.
-
 
166
								' identifiant = '.$this->proteger($identifiant_utilisateur);
124
					'FROM cel_inventory '.
167
								
125
					'WHERE ordre = '.$this->proteger($ordre_observation).
168
		$resultats_mot_cles_obs = $this->executerRequete($requete_mot_cle_obs);
126
					'	AND identifiant = '.$this->proteger($identifiant_utilisateur);
Line 169... Line 127...
169
				
127
		
170
		return $resultats_mot_cles_obs;
128
		$resultats = $this->executerRequete($requete);
Line 171... Line 129...
171
	}
129
				
172
	
-
 
173
	private function obtenirMotClesTexte($chaine_mot_cle, $identifiant_utilisateur) {
130
		return $resultats;
Line 174... Line 131...
174
		
131
	}
175
		$chaine_mot_cle_obs = $this->formaterChaineMotClePourConditionSql($chaine_mot_cle);
132
	
176
		
133
	private function obtenirMotClesTexte($chaine_mot_cle, $identifiant_utilisateur) {
Line 206... Line 163...
206
			
163
		
207
			return $mot_cles_texte_chaine;
164
		return $mot_cles_texte_chaine;
Line 208... Line 165...
208
	}
165
	}
209
	
-
 
210
	private function nettoyerMotsCles($chaine) {
166
	
211
		
167
	private function nettoyerMotsCles($chaine) {
Line 212... Line 168...
212
		$valeur = str_replace('null','',$chaine);
168
		$valeur = str_replace('null', '', $chaine);
213
       	$valeur = trim($valeur, ";;");
169
		$valeur = trim($valeur, ';;');
Line 214... Line 170...
214
       	
170
		
215
       	return $valeur;
-
 
216
	}
171
		return $valeur;
-
 
172
	}
217
	
173
	
218
	private function migrerMotsClesDansTableLiaison() {
-
 
219
		
174
	private function migrerMotsClesDansTableLiaison() {
Line 220... Line 175...
220
		$requete_selection_obs_mots_cles = 'SELECT id, ordre, identifiant, mots_cles FROM cel_inventory '.
175
		$requete = 	'SELECT id, ordre, identifiant, mots_cles '.
Line 221... Line 176...
221
											'WHERE TRIM(mots_cles) != ""';
176
					'FROM cel_inventory '.
222
		
177
					'WHERE TRIM(mots_cles) != "" ';
223
		$obs_mots_cles = $this->executerRequete($requete_selection_obs_mots_cles);
-
 
224
		
178
		$obs_mots_cles = $this->executerRequete($requete);
225
		echo '<pre>'.print_r($obs_mots_cles,true).'</pre>';
-
 
226
		
-
 
227
		$max = 20000;
-
 
228
		$i = 0;
-
 
229
		
-
 
230
		foreach($obs_mots_cles as $obs_mc) {
179
		
231
			
180
		echo '<pre>'.print_r($obs_mots_cles, true).'</pre>';
Line 232... Line 181...
232
			/*if($i >= $max) {
181
		
Line 233... Line 182...
233
				return;
182
		$max = 20000;
234
			}*/
-
 
235
						
183
		$i = 0;
236
			$mots_cles_nettoyes = $this->nettoyerMotsCles($obs_mc['mots_cles']);
-
 
237
			$tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID,$mots_cles_nettoyes);
184
		foreach ($obs_mots_cles as $obs_mc) {
238
			
185
			$mots_cles_nettoyes = $this->nettoyerMotsCles($obs_mc['mots_cles']);
239
			$sous_requete_insertion_valeur = '';
186
			$tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID, $mots_cles_nettoyes);
240
			
187
			
241
			if(count($tableau_mots_cles_codes) > 0) {
188
			$requete_values = '';
Line 242... Line 189...
242
				
189
			
243
				foreach($tableau_mots_cles_codes as $mots_cles_codes) {
-
 
244
					
190
			if (count($tableau_mots_cles_codes) > 0) {
245
					$mots_cles_codes = trim($mots_cles_codes,self::SEPARATEUR_MOT_CLE_ID);
-
 
246
					if($this->estUnIdentifiantMotCle($mots_cles_codes)) {							
191
				foreach($tableau_mots_cles_codes as $mots_cles_codes) {
247
						$sous_requete_insertion_valeur .= '('.$mots_cles_codes.','.$obs_mc['id'].'),';
192
					$mots_cles_codes = trim($mots_cles_codes, self::SEPARATEUR_MOT_CLE_ID);
248
					}
-
 
249
				}
193
					if ($this->estUnIdentifiantMotCle($mots_cles_codes)) {							
250
				
-
 
251
				$sous_requete_insertion_valeur = rtrim($sous_requete_insertion_valeur,',');
194
						$requete_values .= '('.$mots_cles_codes.','.$obs_mc['id'].'),';
252
				
195
					}
253
				if(trim($sous_requete_insertion_valeur) != '') { 
196
				}
254
				
197
				
255
					$requete_insertion_mot_cles  = 'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '.
198
				$requete_values = rtrim($requete_values, ',');
Line 256... Line 199...
256
													'VALUES '.$sous_requete_insertion_valeur.' ';
199
				if (trim($requete_values) != '') { 
257
													
200
					$requete = 	'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '.
258
					echo $requete_insertion_mot_cles.'<br />';
201
								'VALUES '.$requete_values.' ';
259
				
-
 
260
					$i++;
-
 
261
				}
202
					echo $requete.'<br />';
262
			}
203
					$i++;
263
		}
204
				}