Subversion Repositories eFlore/Applications.cel

Rev

Rev 768 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 768 Rev 821
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
4
 * Service de recherche et modification de l'arbre des mots clés associés à un id.
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
5
 * 1: Le service recoit un mot clé à ajouter à l'arbre
11
 sur le site "http://www.cecill.info".
-
 
12
 En contrepartie de l'accessibilit? au code source et des droits de copie,
6
 * 2: Le service recherche l'arbre ou sous arbre correspondant au critères demandé
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
7
 * 3: Le service renvoie l'arbre au format json
16
 titulaire des droits patrimoniaux et les conc?dants successifs.
-
 
17
 
-
 
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
-
 
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?.
-
 
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
 */
8
 * 
34
 
-
 
35
 
-
 
36
// in : utf8
-
 
37
// out : utf8
9
 * Encodage en entrée : utf8
38
/*
-
 
39
 * InventoryKeyWordList.php
10
 * Encodage en sortie : utf8
40
 *
11
 *
41
 * Cas d'utilisation :
12
 * Cas d'utilisation :
42
 * Service recherche et modifie l'arbre des mots cl�s associ�s � un id
-
 
43
 *
13
 *
-
 
14
 * @author Aurélien PERONNET <aurelien@tela-botanica.org>
44
 * 1: Le service recoit un mot cl� � ajouter � l'arbre
15
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
45
 * 2: Le service recherche l'arbre ou sous arbre correspondant au crit�res demand�
16
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
-
 
17
 * @version $Id$
46
 * 3: Le service renvoie l'arbre au format json
18
 * @copyright © 2011, Tela-Botanica
47
 */
19
 */
-
 
20
class InventoryKeyWordList extends DBAccessor {
-
 
21
	public $config ;
-
 
22
	protected $suffix = '';
Line 48... Line -...
48
 
-
 
49
 Class InventoryKeyWordList extends DBAccessor {
-
 
50
 
-
 
51
	var $config ;
-
 
52
 
-
 
53
	protected $suffix = "";
-
 
54
 
23
 
55
	function InventoryKeyWordList($config) {
-
 
56
 
24
	public function InventoryKeyWordList($config) {
57
		$this->config=$config;
-
 
58
	}
-
 
59
 
-
 
60
	function verifierPresenceRacine($id)
-
 
61
	{
-
 
62
		$DB=$this->connectDB($this->config,'cel_db');
-
 
63
 
-
 
64
		$query = 'SELECT COUNT(*) FROM cel_mots_cles'.$this->suffix.' WHERE cmc_id_proprietaire = "'.$DB->escapeSimple($id).'"' ;
-
 
65
		$res =& $DB->query($query);
-
 
66
 
-
 
67
		if (PEAR::isError($res)) {
-
 
68
 
-
 
69
                	die($res->getMessage());
-
 
70
                }
-
 
71
		else
-
 
72
		{
-
 
73
			$valeurs = $res->fetchrow(DB_FETCHMODE_ORDERED) ;
-
 
74
 
-
 
75
			switch ($this->suffix) {
-
 
76
				case "_obs":
-
 
77
					$nom_racine = 'Projets';
-
 
78
					$id_racine = 'racine_obs';
-
 
79
				break;
-
 
80
 
-
 
81
				case "_images":
-
 
82
					$nom_racine = 'Mots clés';
-
 
83
					$id_racine = 'racine';
-
 
84
				break;
-
 
85
 
-
 
86
				default:
-
 
87
					$nom_racine = $this->suffix;
-
 
88
					$id_racine = $this->suffix;
-
 
89
			}
-
 
90
 
-
 
91
			if($valeurs[0] == 0)
-
 
92
			{
-
 
93
				$query = 'INSERT INTO cel_mots_cles'.$this->suffix.' VALUES ("'.$nom_racine.'",1,2,"'.$id_racine.'","'.$id_racine.'","'.$DB->escapeSimple($id).'","",0) ' ;
-
 
94
				$res =& $DB->query($query);
-
 
95
 
-
 
96
				if (PEAR::isError($res)) {
-
 
97
 
-
 
98
					die($res->getMessage());
-
 
99
				}
-
 
100
			}
-
 
101
		}
-
 
102
	}
-
 
103
 
-
 
104
	function desactiverAutoCommitEtCommencerTransaction()
-
 
105
	{
-
 
106
		$DB=$this->connectDB($this->config,'cel_db');
-
 
107
 
-
 
108
		// desactive l'autocommit le temps de la maniulation de l'arbre
-
 
109
		$query = "SET AUTOCOMMIT = 0" ;
-
 
110
		$res =& $DB->query($query);
-
 
111
 
-
 
112
		// et debute une nouvelle transaction
-
 
113
		$query = "BEGIN " ;
-
 
114
		$res =& $DB->query($query);
-
 
115
	}
-
 
116
 
-
 
117
	function reactiverAutoCommitEtCompleterTransaction()
-
 
118
	{
-
 
119
		$DB=$this->connectDB($this->config,'cel_db');
-
 
120
 
-
 
121
		// complete la transaction
-
 
122
		$query = "COMMIT " ;
-
 
123
		$res =& $DB->query($query);
-
 
124
 
-
 
125
		// reactive l'autocommit le temps de la maniulation de l'arbre
-
 
126
		$query = "SET AUTOCOMMIT = 1" ;
-
 
127
		$res =& $DB->query($query);
-
 
128
 
-
 
129
		echo "OK" ;
-
 
130
	}
-
 
131
 
-
 
132
	function reactiverAutoCommitEtAnnulerTransaction()
-
 
133
	{
-
 
134
		$DB=$this->connectDB($this->config,'cel_db');
-
 
135
 
-
 
136
		// annule la transaction
-
 
137
		$query = "ROLLBACK " ;
-
 
138
		$res =& $DB->query($query);
-
 
139
 
-
 
140
		// reactive l'autocommit le temps de la maniulation de l'arbre
-
 
141
		$query = "SET AUTOCOMMIT = 1" ;
-
 
142
		$res =& $DB->query($query);
-
 
143
 
-
 
144
		echo "ERROR" ;
-
 
145
	}
-
 
146
 
-
 
147
	// renvoie les bornes d'un noeud de l'arbre des mots cl�s
-
 
148
	function calculerBornesEtNiveau($id_mot_cle,$id_utilisateur)
-
 
149
	{
-
 
150
		$DB=$this->connectDB($this->config,'cel_db');
-
 
151
 
-
 
152
		$query = 'SELECT cmc_bd, cmc_bg, cmc_niveau FROM cel_mots_cles'.$this->suffix.' WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
153
 
-
 
154
		$res =& $DB->query($query);
-
 
155
                if (PEAR::isError($res)) {
-
 
156
 
-
 
157
                	die($res->getMessage());
-
 
158
                }
-
 
159
 
-
 
160
		$results = array() ;
-
 
161
		$valeurs = $res->fetchrow(DB_FETCHMODE_ASSOC) ;
-
 
162
 
-
 
163
 
-
 
164
		return $valeurs ;
-
 
165
 
-
 
166
	}
-
 
167
 
-
 
168
	// decale les bornes de deux pour inserer un nouvel element
-
 
169
	function decalerBornesPlusDeux($valeur,$id_utilisateur)
-
 
170
	{
-
 
171
		$DB=$this->connectDB($this->config,'cel_db');
-
 
172
 
-
 
173
		// decalage borne droite
-
 
174
		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd + 2 WHERE cmc_bd >=  "'.$DB->escapeSimple($valeur).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
175
		$res =& $DB->query($query);
-
 
176
                if (PEAR::isError($res)) {
-
 
177
 
-
 
178
                	die($res->getMessage());
-
 
179
			$reussi_1 = false ;
-
 
180
                }
-
 
181
		else
-
 
182
		{
-
 
183
			$reussi_1 = true ;
-
 
184
		}
-
 
185
 
-
 
186
		// decalage borne gauche
-
 
187
		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg = cmc_bg + 2 WHERE cmc_bg >=  "'.$DB->escapeSimple($valeur).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
188
		$res =& $DB->query($query);
-
 
189
                  if (PEAR::isError($res)) {
-
 
190
 
-
 
191
                	die($res->getMessage());
-
 
192
			$reussi_2 = false ;
-
 
193
                }
-
 
194
		else
-
 
195
		{
-
 
196
			$reussi_2 = true ;
-
 
197
		}
-
 
198
 
-
 
199
		$reussi = $reussi_1 && $reussi_2  ;
-
 
200
 
-
 
201
		return $reussi ;
-
 
202
	}
-
 
203
 
-
 
204
	// decale les bornes d'un intervalle negatif donne (pour la suppression d'un sous arbre)
-
 
205
	function decalerBornesMoinsIntervalle($bg, $bd,$id_utilisateur)
-
 
206
	{
-
 
207
		$DB=$this->connectDB($this->config,'cel_db');
-
 
208
 
-
 
209
 
-
 
210
		$decalage = $bd - $bg + 1 ;
-
 
211
 
-
 
212
		// decalage borne droite
-
 
213
		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd - "'.$DB->escapeSimple($decalage).'" WHERE cmc_bd >=  "'.$DB->escapeSimple($bg).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
214
		$res =& $DB->query($query);
-
 
215
                 if (PEAR::isError($res)) {
-
 
216
 
-
 
217
                	die($res->getMessage());
-
 
218
			$reussi_1 = false ;
-
 
219
                }
-
 
220
		else
-
 
221
		{
-
 
222
			$reussi_1 = true ;
-
 
223
		}
-
 
224
 
-
 
225
		// decalage borne gauche
-
 
226
		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg = cmc_bg - "'.$DB->escapeSimple($decalage).'" WHERE cmc_bg >  "'.$DB->escapeSimple($bg).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
227
		$res =& $DB->query($query);
-
 
228
                 if (PEAR::isError($res)) {
-
 
229
 
-
 
230
                	die($res->getMessage());
-
 
231
			$reussi_2 = false ;
-
 
232
                }
-
 
233
		else
-
 
234
		{
-
 
235
			$reussi_2 = true ;
-
 
236
		}
-
 
237
 
-
 
238
		$reussi = $reussi_1 && $reussi_2 ;
-
 
239
 
-
 
240
		return $reussi ;
25
		$this->config = $config;
Line 241... Line -...
241
	}
-
 
242
 
-
 
243
	// decale � droite des bornes don�es d'un intervalle positif donne (pour l'ajout d'un sous arbre)
-
 
244
	function decalerBornesPlusIntervalle($valeur_bornes, $largeur,$id_utilisateur)
-
 
245
	{
-
 
246
		$DB=$this->connectDB($this->config,'cel_db');
-
 
247
 
-
 
248
		$decalage = $largeur ;
-
 
249
 
-
 
250
		// decalage borne droite
-
 
251
		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd + "'.$DB->escapeSimple($decalage).'" WHERE cmc_bd >=  "'.$DB->escapeSimple($valeur_bornes).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
252
		$res =& $DB->query($query);
-
 
253
                 if (PEAR::isError($res)) {
-
 
254
 
-
 
255
                	die($res->getMessage());
-
 
256
			$reussi_1 = false ;
-
 
257
                }
-
 
258
		else
-
 
259
		{
-
 
260
			$reussi_1 = true ;
-
 
261
		}
-
 
262
 
-
 
263
		// decalage borne gauche
-
 
264
		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg = cmc_bg + "'.$DB->escapeSimple($decalage).'" WHERE cmc_bg >=  "'.$DB->escapeSimple($valeur_bornes).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
265
		$res =& $DB->query($query);
-
 
266
		if (PEAR::isError($res)) {
-
 
267
 
-
 
268
                	die($res->getMessage());
-
 
269
			$reussi_2 = false ;
-
 
270
                }
-
 
271
		else
-
 
272
		{
-
 
273
			$reussi_2 = true ;
-
 
274
		}
-
 
275
 
-
 
276
		$reussi = $reussi_1 && $reussi_2 ;
-
 
277
 
-
 
278
		return $reussi ;
-
 
279
	}
-
 
280
 
-
 
281
	// inverse les bornes dun intervalle pour l'exclure des modifications sur l'arbre sans changer la hierarchie
-
 
282
	function exclureIntervalle($bg, $bd, $id_utilisateur)
-
 
283
	{
-
 
284
		$DB=$this->connectDB($this->config,'cel_db');
-
 
285
 
-
 
286
		// decalage bornes
-
 
287
		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bd = cmc_bd - "'.$DB->escapeSimple($bd).'" - 1 ,  cmc_bg =  cmc_bg -  "'.$DB->escapeSimple($bd).'" - 1 WHERE cmc_bd <=  "'.$DB->escapeSimple($bd).'" AND cmc_bg >=  "'.$DB->escapeSimple($bg).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
288
 
-
 
289
		$res =& $DB->query($query);
-
 
290
                 if (PEAR::isError($res)) {
-
 
291
 
-
 
292
                	die($res->getMessage());
-
 
293
			return false ;
-
 
294
                }
-
 
295
		else
-
 
296
		{
-
 
297
			return true ;
-
 
298
		}
-
 
299
	}
-
 
300
 
-
 
301
	// recale les bornes dun intervalle pour l'inclure dans l'arbre � la bonne place
-
 
302
	function inclureIntervalle($bg, $bd, $decalage,$modif_niveau, $id_utilisateur)
-
 
303
	{
-
 
304
		$DB=$this->connectDB($this->config,'cel_db');
-
 
305
 
26
	}
306
		// decalage borne droite
-
 
307
		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_bg =  cmc_bg + "'.$DB->escapeSimple($decalage).'" , cmc_bd = cmc_bd + "'.$DB->escapeSimple($decalage).'", cmc_niveau = cmc_niveau + "'.$modif_niveau.'" WHERE cmc_bg >=  "'.$DB->escapeSimple($bg).'" AND cmc_bd <=  "'.$DB->escapeSimple($bd).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
308
 
-
 
309
		$res =& $DB->query($query);
-
 
310
                 if (PEAR::isError($res)) {
-
 
311
 
-
 
312
                	die($res->getMessage());
-
 
313
			return false ;
-
 
314
                }
-
 
315
		else
-
 
316
		{
-
 
317
			return true ;
-
 
318
		}
-
 
319
	}
-
 
320
 
-
 
321
	function changerPere($id_mot_cle, $id_pere, $id_utilisateur)
-
 
322
	{
-
 
323
		$DB=$this->connectDB($this->config,'cel_db');
-
 
324
 
-
 
325
		$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_id_parent = "'.$DB->escapeSimple($id_pere).'" WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
326
 
-
 
327
		$res =& $DB->query($query);
-
 
328
                 if (PEAR::isError($res)) {
-
 
329
 
-
 
330
                	die($res->getMessage());
-
 
331
			return false ;
-
 
332
                }
-
 
333
		else
-
 
334
		{
-
 
335
			return true ;
-
 
336
		}
-
 
337
	}
-
 
338
 
-
 
339
	function getElement($uid)
27
 
340
	{
28
	public function getElement($uid) {
341
			// Controle detournement utilisateur
-
 
342
		session_start();
-
 
343
		$this->controleUtilisateur($uid[1]);
-
 
344
		$DB=$this->connectDB($this->config,'cel_db');
29
		// Controle detournement utilisateur
345
 
30
		session_start();
-
 
31
		$this->suffix = '_'.$uid[0];
346
		$this->suffix = '_'.$uid[0];
32
		$id_utilisateur = $uid[1] ;
-
 
33
		$this->controleUtilisateur($uid[1]);
-
 
34
		
347
		$id_utilisateur = $uid[1] ;
35
		$requete = 	'SELECT cmc_mot_cle, cmc_id_mot_cle_utilisateur, cmc_id_parent '.
348
 
-
 
349
		$query = 'SELECT cmc_mot_cle, cmc_id_mot_cle_utilisateur, cmc_id_parent FROM cel_mots_cles'.$this->suffix.' WHERE cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ORDER BY cmc_niveau' ;
36
					'FROM cel_mots_cles'.$this->suffix.' '.
350
 
37
					'WHERE cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" '.
351
		$result = array() ;
38
					'ORDER BY cmc_niveau ';
352
 
39
		
353
		$res =& $DB->query($query);
-
 
354
		if (PEAR::isError($res))
40
		$resultat = $this->recupererResultat($requete);
355
		{
-
 
356
			die($res->getMessage());
-
 
357
		}
-
 
358
		else
41
		if ($resultat) {
359
		{
-
 
360
			while($motcle = $res->fetchrow(DB_FETCHMODE_ASSOC))
42
			$mots_cles = array();
361
			{
43
			while($mot_cle = $resultat->fetchrow(DB_FETCHMODE_ASSOC)) {
362
				$result[] = $motcle ;
-
 
363
			}
44
				$mots_cles[] = $mot_cle;
364
 
45
			}
365
			$res = json_encode($result) ;
46
			$infos = json_encode($mots_cles);
366
 
47
 
367
			header("content-type: text/json") ;
48
			header('content-type: text/json');
368
			print $res ;
49
			print $infos;
369
			exit() ;
50
			exit();
Line 370... Line -...
370
		}
-
 
371
	}
51
		}
372
 
-
 
373
	// met � jour les mots clés d'une image
-
 
374
	function updateElement($uid,$pairs)
52
	}
-
 
53
 
-
 
54
	public function updateElement($uid, $pairs) {
375
	{
55
		session_start();
Line 376... Line 56...
376
		// Controle detournement utilisateur
56
		$this->suffix = '_'.$uid[0];
-
 
57
		$id_utilisateur = $uid[1];
Line 377... Line 58...
377
		session_start();
58
		$this->controleUtilisateur($uid[1]);
378
		$this->controleUtilisateur($uid[1]);
59
 
379
 
60
		$id_mot_cle = $pairs['id'];
Line 380... Line 61...
380
		$this->suffix = '_'.$uid[0];
61
		$action = $pairs['action'];
381
 
-
 
382
		$id_utilisateur = $uid[1] ;
62
 
383
		$id_mot_cle = $pairs['id'] ;
63
		if ($action == 'modification') {
384
		$action = $pairs['action'] ;
-
 
385
 
64
			$nouveau_nom = $pairs['motcle'];
386
		if($action == 'modification')
-
 
387
		{
65
			$nouvel_id_general = md5(strtolower($nouveau_nom));
388
			$nouveau_nom = $pairs['motcle'] ;
-
 
389
			$nouvel_id_general = md5(strtolower($nouveau_nom)) ;
66
 
390
 
-
 
391
			$DB=$this->connectDB($this->config,'cel_db');
-
 
392
 
67
			$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
393
			$query = 'UPDATE cel_mots_cles'.$this->suffix.' SET cmc_mot_cle = "'.$DB->escapeSimple($nouveau_nom).'" , cmc_id_mot_cle_general = "'.$DB->escapeSimple($nouvel_id_general).'" WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
394
 
-
 
395
			$res =& $DB->query($query);
-
 
396
			if (PEAR::isError($res))
-
 
397
			{
-
 
398
				die($res->getMessage());
68
						'SET cmc_mot_cle = "'.$DB->escapeSimple($nouveau_nom).'" , '.
399
				$transaction_reussie_1 = false ;
69
						'	cmc_id_mot_cle_general = "'.$DB->escapeSimple($nouvel_id_general).'" '.
-
 
70
						'WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" '.
400
			}
71
						'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
Line 401... Line -...
401
			else
-
 
402
			{
-
 
403
				$transaction_reussie_1 = true ;
-
 
404
				echo "OK" ;
-
 
405
			}
72
			$reussite = $this->executerRequete($requete);
406
		}
-
 
407
 
73
			if ($reussite) {
408
		if($action == 'deplacement')
-
 
409
		{
74
				echo 'OK';
410
			$this->desactiverAutoCommitEtCommencerTransaction() ;
75
			}
411
 
76
		} else if ($action == 'deplacement') {
412
			$transaction_reussie_1 = true ;
77
			$this->commencerTransaction();
413
 
-
 
414
			$id_pere = $pairs['parent'] ;
-
 
415
 
-
 
416
			$bornes = $this->calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) ;
-
 
417
			$bg = $bornes['cmc_bg']  ;
-
 
418
			$bd = $bornes['cmc_bd']  ;
-
 
419
			$niveau = $bornes['cmc_niveau'] ;
-
 
420
 
-
 
421
			// on inverse l'intervalle de l'�l�ment d�plac� et du sous arbre
-
 
422
			if($this->exclureIntervalle($bg,$bd,$id_utilisateur))
-
 
Line 423... Line 78...
423
			{
78
 
424
				$transaction_reussie_2 = true ;
79
			$transaction_reussie_1 = true;
Line 425... Line -...
425
			}
-
 
426
			else
-
 
427
			{
-
 
428
				$transaction_reussie_2 = false ;
80
			$id_pere = $pairs['parent'];
429
			}
-
 
430
 
-
 
431
			$bg_negative = $bg - $bd - 1 ;
-
 
432
			$bd_negative = $bd - $bd - 1 ;
81
			$bornes = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur);
433
 
-
 
Line 434... Line -...
434
			// on recalcule les intervalles de l'arbre priv� de ce sous arbre
-
 
435
			if($this->decalerBornesMoinsIntervalle($bg,$bd,$id_utilisateur))
-
 
436
			{
-
 
437
				$transaction_reussie_3 = true ;
-
 
438
			}
-
 
439
			else
-
 
440
			{
-
 
441
				$transaction_reussie_3 = false ;
-
 
442
			}
82
			$bg = $bornes['cmc_bg'];
443
 
83
			$bd = $bornes['cmc_bd'];
444
			$bornes_pere = $this->calculerBornesEtNiveau($id_pere,$id_utilisateur) ;
-
 
445
			$bg_pere = $bornes_pere['cmc_bg']  ;
-
 
446
			$bd_pere = $bornes_pere['cmc_bd']  ;
-
 
447
 
-
 
448
			$niveau_pere = $bornes_pere['cmc_niveau'] ;
-
 
449
 
-
 
450
			$decalage = $bd - $bg + 1 ;
-
 
Line -... Line 84...
-
 
84
			$niveau = $bornes['cmc_niveau'];
451
 
85
 
-
 
86
			// on inverse l'intervalle de l'élément déplacé et du sous arbre
Line 452... Line 87...
452
			// on decale les bornes droite du pere pour pr�parer l'insertion
87
			$transaction_reussie_2 = $this->exclureIntervalle($bg, $bd, $id_utilisateur) ? true : false;
Line 453... Line -...
453
			if($this->decalerBornesPlusIntervalle($bd_pere, $decalage, $id_utilisateur))
-
 
454
			{
-
 
455
				$transaction_reussie_4 = true ;
-
 
456
			}
-
 
457
			else
-
 
458
			{
-
 
459
				$transaction_reussie_4 = false ;
88
 
460
			}
-
 
Line -... Line 89...
-
 
89
			$bg_negative = $bg - $bd - 1;
461
 
90
			$bd_negative = $bd - $bd - 1;
462
			$nouvelle_bd = $bd_pere + $decalage  ;
91
 
463
 
92
			// on recalcule les intervalles de l'arbre privé de ce sous arbre
464
			$modif_niveau = $niveau_pere - $niveau + 1 ;
-
 
465
 
-
 
466
			if($this->inclureIntervalle($bg_negative,$bd_negative,$nouvelle_bd,$modif_niveau,$id_utilisateur))
-
 
467
			{
93
			$transaction_reussie_3 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) ? true : false;
468
				$transaction_reussie_5 = true ;
-
 
Line -... Line 94...
-
 
94
 
-
 
95
			$bornes_pere = $this->calculerBornesEtNiveau($id_pere, $id_utilisateur);
-
 
96
			$bg_pere = $bornes_pere['cmc_bg'];
-
 
97
			$bd_pere = $bornes_pere['cmc_bd'];
469
			}
98
 
470
			else
-
 
471
			{
99
			$niveau_pere = $bornes_pere['cmc_niveau'];
472
				$transaction_reussie_5 = false ;
-
 
473
			}
100
 
474
 
-
 
475
			if($this->changerPere($id_mot_cle,$id_pere,$id_utilisateur))
101
			$decalage = $bd - $bg + 1;
476
			{
102
 
Line 477... Line 103...
477
				$transaction_reussie_6 = true ;
103
			// on decale les bornes droite du pere pour préparer l'insertion
478
			}
104
			$transaction_reussie_4 = $this->decalerBornesPlusIntervalle($bd_pere, $decalage, $id_utilisateur) ? true : false;
Line 479... Line 105...
479
			else
105
			
480
			{
-
 
481
				$transaction_reussie_6 = false ;
-
 
482
			}
106
			$nouvelle_bd = $bd_pere + $decalage;
483
 
107
			$modif_niveau = $niveau_pere - $niveau + 1;
484
			if($transaction_reussie_1 && $transaction_reussie_2 && $transaction_reussie_3 && $transaction_reussie_4 && $transaction_reussie_5 && $transaction_reussie_6)
108
 
Line 485... Line 109...
485
			{
109
			$transaction_reussie_5 = $this->inclureIntervalle($bg_negative, $bd_negative, $nouvelle_bd, $modif_niveau, $id_utilisateur) ? true : false;
486
				$this->reactiverAutoCommitEtCompleterTransaction() ;
-
 
487
			}
110
 
488
			else
111
			$transaction_reussie_6 = $this->changerPere($id_mot_cle, $id_pere, $id_utilisateur) ? true : false;
Line 489... Line 112...
489
			{
112
 
490
				$this->reactiverAutoCommitEtAnnulerTransaction() ;
113
			if ($transaction_reussie_1 && $transaction_reussie_2 && $transaction_reussie_3 && $transaction_reussie_4 && $transaction_reussie_5 && $transaction_reussie_6) {
491
			}
114
				$this->completerTransaction();
492
 
115
			} else {
493
		}
116
				$this->annulerTransaction();
494
	}
117
			}
495
 
118
 
496
	function createElement($pairs)
119
		}
497
	{
120
	}
498
 
121
 
-
 
122
	public function createElement($pairs) {
-
 
123
		// Controle detournement utilisateur
-
 
124
		session_start();
-
 
125
		$this->controleUtilisateur($pairs['identifiant']);
499
		// Controle detournement utilisateur
126
 
500
		session_start();
127
		$this->suffix = '_'.$pairs['mode'];
501
		$this->controleUtilisateur($pairs['identifiant']);
128
		$id_utilisateur = $pairs['identifiant'];
502
 
129
		$mot_cle = $pairs['motcle'];
503
		$this->suffix = '_'.$pairs['mode'];
130
 
-
 
131
		// TODO supprimer accents et majuscules
-
 
132
		$id_mot_cle_general = md5(mb_strtolower($mot_cle));
504
 
133
		$id_mot_cle = $pairs['id'];
505
		$id_utilisateur = $pairs['identifiant'] ;
-
 
-
 
134
		$id_parent = $pairs['parent'];
-
 
135
 
-
 
136
		$this->ajouterMotCleRacine($id_utilisateur);
-
 
137
 
506
		$mot_cle = $pairs['motcle'] ;
138
		$this->commencerTransaction();
-
 
139
 
507
 
140
		$bornes = $this->calculerBornesEtNiveau($id_parent, $id_utilisateur);
508
		// TODO supprimer accents et majuscules
141
		$borne_pere = $bornes['cmc_bd'];
-
 
142
		$niveau = $bornes['cmc_niveau'] + 1;
-
 
143
		$bg = $bornes['cmc_bd'];
509
		$id_mot_cle_general = md5(mb_strtolower($mot_cle)) ;
144
		$bd = $bg + 1;
510
		$id_mot_cle = $pairs['id'] ;
145
 
511
		$id_parent = $pairs['parent'] ;
146
		$transaction_reussie_1 = $this->decalerBornesPlusDeux($borne_pere,$id_utilisateur) ? true : false;
512
 
-
 
513
		$this->verifierPresenceRacine($id_utilisateur) ;
-
 
514
 
-
 
515
		$transaction_reussie = false ;
-
 
516
 
-
 
517
		$this->desactiverAutoCommitEtCommencerTransaction() ;
-
 
518
 
-
 
519
		$bornes = $this->calculerBornesEtNiveau($id_parent,$id_utilisateur) ;
-
 
520
 
-
 
521
		$bg = $bornes['cmc_bd']  ;
-
 
522
		$bd = $bg + 1 ;
-
 
523
		$borne_pere = $bornes['cmc_bd'] ;
-
 
524
 
-
 
525
		$niveau = $bornes['cmc_niveau']  + 1;
-
 
526
 
-
 
527
		if($this->decalerBornesPlusDeux($borne_pere,$id_utilisateur))
-
 
528
		{
-
 
529
			$transaction_reussie_1 = true ;
-
 
530
		}
-
 
531
		else
-
 
532
		{
-
 
533
			$transaction_reussie_1 = false ;
-
 
534
		}
-
 
535
 
-
 
536
		$DB=$this->connectDB($this->config,'cel_db');
-
 
537
				$query = 'INSERT INTO  cel_mots_cles'.$this->suffix.' VALUES (' ;
-
 
538
				$query .= '"'.$DB->escapeSimple($mot_cle).'",' ;
-
 
539
				$query .= '"'.$DB->escapeSimple($bg).'",' ;
-
 
540
				$query .= '"'.$DB->escapeSimple($bd).'",' ;
-
 
541
				$query .= '"'.$DB->escapeSimple($id_mot_cle_general).'",' ;
-
 
542
				$query .= '"'.$DB->escapeSimple($id_mot_cle).'",' ;
-
 
543
				$query .= '"'.$DB->escapeSimple($id_utilisateur).'",' ;
-
 
544
				$query .= '"'.$DB->escapeSimple($id_parent).'",' ;
-
 
545
				$query .= '"'.$DB->escapeSimple($niveau).'"' ;
-
 
546
				$query .= ')' ;
-
 
547
 
-
 
548
		$res =& $DB->query($query);
-
 
549
        if (PEAR::isError($res))
-
 
550
		{
147
		
Line 551... Line 148...
551
			die($res->getMessage());
148
		$requete = 	'INSERT INTO  cel_mots_cles'.$this->suffix.' '.
-
 
149
					'VALUES ( '.
552
			$transaction_reussie_2 = false ;
150
					'"'.$DB->escapeSimple($mot_cle).'", '.
553
        }
-
 
554
		else
-
 
555
		{
151
					'"'.$DB->escapeSimple($bg).'", '.
-
 
152
					'"'.$DB->escapeSimple($bd).'", '.
-
 
153
					'"'.$DB->escapeSimple($id_mot_cle_general).'", '.
Line 556... Line 154...
556
			$transaction_reussie_2 = true ;
154
					'"'.$DB->escapeSimple($id_mot_cle).'", '.
557
		}
-
 
558
 
155
					'"'.$DB->escapeSimple($id_utilisateur).'", '.
559
		if($transaction_reussie_1 && $transaction_reussie_2)
-
 
560
		{
-
 
561
			$this->reactiverAutoCommitEtCompleterTransaction() ;
-
 
Line 562... Line 156...
562
			echo "OK" ;
156
					'"'.$DB->escapeSimple($id_parent).'", '.
-
 
157
					'"'.$DB->escapeSimple($niveau).'" )' ;
-
 
158
		$transaction_reussie_2 = $this->executerRequete($requete);
-
 
159
 
-
 
160
		if ($transaction_reussie_1 && $transaction_reussie_2) {
-
 
161
			$this->completerTransaction();
-
 
162
			echo 'OK';
-
 
163
		} else {
-
 
164
			$this->annulerTransaction();
-
 
165
		}
-
 
166
	}
-
 
167
 
-
 
168
	public function deleteElement($uid) {
-
 
169
		session_start();
-
 
170
		
-
 
171
		$this->suffix = '_'.$uid[0];
-
 
172
		$id_utilisateur = $uid[1];
-
 
173
		$id_mot_cle = $uid[2];
-
 
174
 
-
 
175
		$this->controleUtilisateur($id_utilisateur);		
-
 
176
		$this->commencerTransaction();
-
 
177
 
-
 
178
		$bornes  = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur);
-
 
179
		$bg = $bornes['cmc_bg'];
Line 563... Line 180...
563
		}
180
		$bd = $bornes['cmc_bd'];
564
		else
181
 
Line 565... Line -...
565
		{
-
 
566
			$this->reactiverAutoCommitEtAnnulerTransaction() ;
-
 
567
		}
182
		$requete = 	'DELETE FROM cel_mots_cles'.$this->suffix.' '.
568
 
183
					'WHERE cmc_bg >= "'.$DB->escapeSimple($bg).'" '.
569
	}
-
 
570
 
184
					'	AND cmc_bd <= "'.$DB->escapeSimple($bd).'" '.
571
	function deleteElement($uid){
185
					'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ';
572
 
186
		$transaction_reussie_1 = $this->verifierLignesAffectees($requete);
573
	   session_start();
187
 
574
		$this->controleUtilisateur($uid[1]);
-
 
575
		$this->suffix = '_'.$uid[0];
188
		$transaction_reussie_2 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) ? true : false;
576
 
-
 
577
		$DB=$this->connectDB($this->config,'cel_db');
189
 
578
 
190
		if ($transaction_reussie_1 && $transaction_reussie_2) {
579
		$this->desactiverAutoCommitEtCommencerTransaction() ;
191
			$this->completerTransaction();
580
 
192
		} else {
581
		$id_mot_cle= $uid[2] ;
193
			$this->annulerTransaction();
582
		$id_utilisateur = $uid[1] ;
194
		}
583
 
-
 
Line -... Line 195...
-
 
195
	}
-
 
196
	
-
 
197
	private function ajouterMotCleRacine($id) {
-
 
198
		$requete = 	'SELECT COUNT(*) '.
-
 
199
					'FROM cel_mots_cles'.$this->suffix.' '.
-
 
200
					'WHERE cmc_id_proprietaire = "'.$DB->escapeSimple($id).'" ';
-
 
201
		$resultat = $this->recupererResultat($requete);
-
 
202
 
-
 
203
		if ($resultat) {
-
 
204
			$valeurs = $resultat->fetchrow(DB_FETCHMODE_ORDERED);
-
 
205
 
-
 
206
			switch ($this->suffix) {
-
 
207
				case '_obs' :
-
 
208
					$nom_racine = 'Projets';
-
 
209
					$id_racine = 'racine_obs';
-
 
210
					break;
-
 
211
				case '_images' :
-
 
212
					$nom_racine = 'Mots clés';
-
 
213
					$id_racine = 'racine';
-
 
214
					break;
-
 
215
				default:
-
 
216
					$nom_racine = $this->suffix;
-
 
217
					$id_racine = $this->suffix;
-
 
218
			}
-
 
219
 
-
 
220
			if ($valeurs[0] == 0) {
-
 
221
				$requete = 	'INSERT INTO cel_mots_cles'.$this->suffix.' '.
-
 
222
							'VALUES ("'.$nom_racine.'", 1, 2, "'.$id_racine.'", "'.$id_racine.'", "'.$DB->escapeSimple($id).'", "", 0) ';
-
 
223
				$this->executerRequete($requete);
-
 
224
			}
-
 
225
		}
-
 
226
	}
-
 
227
 
-
 
228
	/**
-
 
229
	 * Désactive l'auto-commit puis débute la transaction
-
 
230
	 */
-
 
231
	private function commencerTransaction() {
-
 
232
		// Désactive l'autocommit le temps de la manipulation de l'arbre
-
 
233
		$requete = 'SET AUTOCOMMIT = 0 ';
-
 
234
		$reussite_autocommit = $this->executerRequete($requete);
-
 
235
 
-
 
236
		// Débute une nouvelle transaction
-
 
237
		$requete = 'BEGIN ';
-
 
238
		$reussite_begin = $this->executerRequete($requete);
-
 
239
	}
-
 
240
 
-
 
241
	/**
-
 
242
	 * Termine la transaction puis réactive l'auto-commit
-
 
243
	 */
-
 
244
	private function completerTransaction() {
-
 
245
		// Complète la transaction
-
 
246
		$requete = 'COMMIT ';
-
 
247
		$reussite_commit = $this->executerRequete($requete);
-
 
248
 
-
 
249
		// Réactive l'autocommit le temps de la manipulation de l'arbre
-
 
250
		$requete = 'SET AUTOCOMMIT = 1 ';
-
 
251
		$reussite_autocommit = $this->executerRequete($requete);
-
 
252
 
-
 
253
		echo 'OK';
-
 
254
	}
-
 
255
	
-
 
256
	/**
-
 
257
	 * Annule la transaction et réactive l'auto-commit
-
 
258
	 */
-
 
259
	private function annulerTransaction() {
-
 
260
		// Annule la transaction
-
 
261
		$requete = 'ROLLBACK ';
-
 
262
		$reussite_rollback = $this->executerRequete($requete);
-
 
263
 
-
 
264
		// Réactive l'autocommit le temps de la manipulation de l'arbre
-
 
265
		$requete = 'SET AUTOCOMMIT = 1 ';
-
 
266
		$reussite_autocommit = $this->executerRequete($requete);
-
 
267
 
-
 
268
		echo 'ERROR';
-
 
269
	}
-
 
270
 
-
 
271
	/** 
-
 
272
	 * Renvoie les bornes d'un noeud de l'arbre des mots clés
-
 
273
	 */
-
 
274
	private function calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) {
-
 
275
		$requete = 	'SELECT cmc_bd, cmc_bg, cmc_niveau '.
-
 
276
					'FROM cel_mots_cles'.$this->suffix.' '.
-
 
277
					'WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" '.
-
 
278
					'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ';
-
 
279
		$resultat = $this->recupererResultat($requete);
-
 
280
		$valeurs = $resultat->fetchrow(DB_FETCHMODE_ASSOC);
-
 
281
		return $valeurs;
-
 
282
	}
-
 
283
 
-
 
284
	/**
-
 
285
	 * Décale les bornes de deux pour insérer un nouvel élément
-
 
286
	 */ 
-
 
287
	private function decalerBornesPlusDeux($valeur, $id_utilisateur) {
-
 
288
		// Décalage borne droite
-
 
289
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
-
 
290
					'SET cmc_bd = cmc_bd + 2 WHERE cmc_bd >= "'.$DB->escapeSimple($valeur).'" '.
-
 
291
					'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ';
-
 
292
		$reussi_1 = $this->executerRequete($requete);
-
 
293
		
-
 
294
		// Décalage borne gauche
-
 
295
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
-
 
296
					'SET cmc_bg = cmc_bg + 2 '.
-
 
297
					'WHERE cmc_bg >=  "'.$DB->escapeSimple($valeur).'" '.
-
 
298
					'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ';
-
 
299
		$reussi_2 = $this->executerRequete($requete);
-
 
300
		
-
 
301
		return $reussi_1 && $reussi_2;
-
 
302
	}
-
 
303
 
-
 
304
	/**
-
 
305
	 * Décale les bornes d'un intervalle negatif donne (pour la suppression d'un sous arbre).
-
 
306
	 */
Line -... Line 307...
-
 
307
	private function decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) {
-
 
308
		$decalage = $bd - $bg + 1;
-
 
309
 
584
		$bornes  = $this->calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) ;
310
		// Décalage borne droite
585
 
-
 
586
		$bg = $bornes['cmc_bg'] ;
311
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
587
		$bd = $bornes['cmc_bd'] ;
-
 
588
 
-
 
589
		$query = 'DELETE FROM cel_mots_cles'.$this->suffix.' WHERE cmc_bg >= "'.$DB->escapeSimple($bg).'" AND cmc_bd <= "'.$DB->escapeSimple($bd).'" AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'"' ;
-
 
590
 
312
					'SET cmc_bd = cmc_bd - "'.$DB->escapeSimple($decalage).'" '.
591
		$res =& $DB->query($query);
-
 
Line -... Line 313...
-
 
313
					'WHERE cmc_bd >=  "'.$DB->escapeSimple($bg).'" '.
-
 
314
					'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ';
-
 
315
		$reussi_1 = $this->executerRequete($requete);
-
 
316
 
-
 
317
		// Décalage borne gauche
-
 
318
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
-
 
319
					'SET cmc_bg = cmc_bg - "'.$DB->escapeSimple($decalage).'" '.
592
        if (PEAR::isError($res))
320
					'WHERE cmc_bg >  "'.$DB->escapeSimple($bg).'" '.
-
 
321
					'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ';
-
 
322
		$reussi_2 = $this->executerRequete($requete);
-
 
323
		
-
 
324
		return $reussi_1 && $reussi_2;
-
 
325
	}
-
 
326
 
-
 
327
	/**
-
 
328
	 * Décale à droite des bornes donées d'un intervalle positif donne (pour l'ajout d'un sous arbre).
-
 
329
	 */ 
-
 
330
	private function decalerBornesPlusIntervalle($valeur_bornes, $largeur, $id_utilisateur) {
-
 
331
		$decalage = $largeur;
-
 
332
 
-
 
333
		// decalage borne droite
-
 
334
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
-
 
335
					'SET cmc_bd = cmc_bd + "'.$DB->escapeSimple($decalage).'" '.
-
 
336
					'WHERE cmc_bd >=  "'.$DB->escapeSimple($valeur_bornes).'" '.
-
 
337
					'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ';
-
 
338
		$reussi_1 = $this->executerRequete($requete);
-
 
339
 
-
 
340
		// decalage borne gauche
-
 
341
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
-
 
342
					'SET cmc_bg = cmc_bg + "'.$DB->escapeSimple($decalage).'" '.
-
 
343
					'WHERE cmc_bg >=  "'.$DB->escapeSimple($valeur_bornes).'" '.
-
 
344
					'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ';
-
 
345
		$reussi_2 = $this->executerRequete($requete);
-
 
346
 
-
 
347
		return $reussi_1 && $reussi_2;
-
 
348
	}
-
 
349
 
-
 
350
	/**
-
 
351
	 * Inverse les bornes d'un intervalle pour l'exclure des modifications sur l'arbre sans changer la hiérarchie.
593
		{
352
	 */
-
 
353
	private function exclureIntervalle($bg, $bd, $id_utilisateur) {
-
 
354
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
-
 
355
					'SET cmc_bd = cmc_bd - "'.$DB->escapeSimple($bd).'" - 1 , '.
-
 
356
					'	cmc_bg =  cmc_bg -  "'.$DB->escapeSimple($bd).'" - 1 '.
-
 
357
					'WHERE cmc_bd <=  "'.$DB->escapeSimple($bd).'" '.
-
 
358
					'	AND cmc_bg >=  "'.$DB->escapeSimple($bg).'" '.
-
 
359
					'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ';
594
                	die($res->getMessage());
360
 
-
 
361
		return $this->executerRequete($requete);
-
 
362
	}
-
 
363
 
-
 
364
	/** 
-
 
365
	 * Recale les bornes dun intervalle pour l'inclure dans l'arbre à la bonne place.
-
 
366
	 * Décalage borne droite
-
 
367
	 */
-
 
368
	private function inclureIntervalle($bg, $bd, $decalage,$modif_niveau, $id_utilisateur) {
-
 
369
 
595
			$transaction_reussie_1 = false ;
370
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
596
        }
371
					'SET cmc_bg =  cmc_bg + "'.$DB->escapeSimple($decalage).'" , '.
597
		else
372
					'	cmc_bd = cmc_bd + "'.$DB->escapeSimple($decalage).'", '.
-
 
373
					'	cmc_niveau = cmc_niveau + "'.$modif_niveau.'" '.
-
 
374
					'WHERE cmc_bg >=  "'.$DB->escapeSimple($bg).'" '.
598
		{
375
					'	AND cmc_bd <=  "'.$DB->escapeSimple($bd).'" '.
-
 
376
					'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ';
-
 
377
 
-
 
378
		return $this->executerRequete($requete);
-
 
379
	}
599
			if($DB->affectedRows() <= 0)
380
 
-
 
381
	private function changerPere($id_mot_cle, $id_pere, $id_utilisateur) {
-
 
382
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
-
 
383
					'SET cmc_id_parent = "'.$DB->escapeSimple($id_pere).'" '.
-
 
384
					'WHERE cmc_id_mot_cle_utilisateur = "'.$DB->escapeSimple($id_mot_cle).'" '.
-
 
385
					'	AND cmc_id_proprietaire = "'.$DB->escapeSimple($id_utilisateur).'" ';
-
 
386
		
-
 
387
		return $this->executerRequete($requete);
-
 
388
	}
-
 
389
	
-
 
390
	private function executerRequete($requete) {
-
 
391
		$DB = $this->connectDB($this->config, 'cel_db');
-
 
392
		$resultat =& $DB->query($requete);
-
 
393
		$execution = true;
-
 
394
		if (PEAR::isError($resultat)) {
-
 
395
			die($res->getMessage());
-
 
396
			$execution = false;
600
			{
397
		}
601
				$transaction_reussie_1 = false ;
-
 
602
			}
398
		return $execution;
603
			else
399
	}
604
			{
400