Subversion Repositories eFlore/Applications.cel

Rev

Rev 1110 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2
 
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.
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
 */
34
 
35
 
36
// in : utf8
37
// out : utf8
38
/*
39
 * InventoryKeyWordList.php
40
 *
41
 * Cas d'utilisation :
42
 * Service recherche et modifie l'arbre des mots cl�s associ�s � un id
43
 *
44
 * 1: Le service recoit un mot cl� � ajouter � l'arbre
45
 * 2: Le service recherche l'arbre ou sous arbre correspondant au crit�res demand�
46
 * 3: Le service renvoie l'arbre au format json
47
 */
48
 
49
 Class InventoryKeyWordList extends DBAccessor {
50
 
51
	var $config ;
52
 
53
	protected $suffix = "";
54
 
55
	function InventoryKeyWordList($config) {
56
 
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 ;
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
 
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)
340
	{
1080 aurelien 341
		// Controle detournement utilisateur
342
		if(!isset($_SESSION)) {session_start();}
416 aurelien 343
		$this->controleUtilisateur($uid[1]);
344
		$DB=$this->connectDB($this->config,'cel_db');
345
 
346
		$this->suffix = '_'.$uid[0];
347
		$id_utilisateur = $uid[1] ;
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' ;
350
 
351
		$result = array() ;
352
 
353
		$res =& $DB->query($query);
354
		if (PEAR::isError($res))
355
		{
356
			die($res->getMessage());
357
		}
358
		else
359
		{
360
			while($motcle = $res->fetchrow(DB_FETCHMODE_ASSOC))
361
			{
362
				$result[] = $motcle ;
363
			}
364
 
365
			$res = json_encode($result) ;
366
 
1267 aurelien 367
			header("content-type: application/json") ;
416 aurelien 368
			print $res ;
369
			exit() ;
370
		}
371
	}
372
 
373
	// met � jour les mots clés d'une image
374
	function updateElement($uid,$pairs)
375
	{
376
		// Controle detournement utilisateur
1080 aurelien 377
		if(!isset($_SESSION)) {session_start();}
416 aurelien 378
		$this->controleUtilisateur($uid[1]);
379
 
380
		$this->suffix = '_'.$uid[0];
381
 
382
		$id_utilisateur = $uid[1] ;
383
		$id_mot_cle = $pairs['id'] ;
384
		$action = $pairs['action'] ;
385
 
386
		if($action == 'modification')
387
		{
388
			$nouveau_nom = $pairs['motcle'] ;
1267 aurelien 389
			$nouvel_id_general = md5(mb_strtolower($nouveau_nom)) ;
416 aurelien 390
 
391
			$DB=$this->connectDB($this->config,'cel_db');
392
 
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());
399
				$transaction_reussie_1 = false ;
400
			}
401
			else
402
			{
403
				$transaction_reussie_1 = true ;
404
				echo "OK" ;
405
			}
406
		}
407
 
408
		if($action == 'deplacement')
409
		{
410
			$this->desactiverAutoCommitEtCommencerTransaction() ;
411
 
412
			$transaction_reussie_1 = true ;
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))
423
			{
424
				$transaction_reussie_2 = true ;
425
			}
426
			else
427
			{
428
				$transaction_reussie_2 = false ;
429
			}
430
 
431
			$bg_negative = $bg - $bd - 1 ;
432
			$bd_negative = $bd - $bd - 1 ;
433
 
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
			}
443
 
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 ;
451
 
452
			// on decale les bornes droite du pere pour pr�parer l'insertion
453
			if($this->decalerBornesPlusIntervalle($bd_pere, $decalage, $id_utilisateur))
454
			{
455
				$transaction_reussie_4 = true ;
456
			}
457
			else
458
			{
459
				$transaction_reussie_4 = false ;
460
			}
461
 
462
			$nouvelle_bd = $bd_pere + $decalage  ;
463
 
464
			$modif_niveau = $niveau_pere - $niveau + 1 ;
465
 
466
			if($this->inclureIntervalle($bg_negative,$bd_negative,$nouvelle_bd,$modif_niveau,$id_utilisateur))
467
			{
468
				$transaction_reussie_5 = true ;
469
			}
470
			else
471
			{
472
				$transaction_reussie_5 = false ;
473
			}
474
 
475
			if($this->changerPere($id_mot_cle,$id_pere,$id_utilisateur))
476
			{
477
				$transaction_reussie_6 = true ;
478
			}
479
			else
480
			{
481
				$transaction_reussie_6 = false ;
482
			}
483
 
484
			if($transaction_reussie_1 && $transaction_reussie_2 && $transaction_reussie_3 && $transaction_reussie_4 && $transaction_reussie_5 && $transaction_reussie_6)
485
			{
486
				$this->reactiverAutoCommitEtCompleterTransaction() ;
487
			}
488
			else
489
			{
490
				$this->reactiverAutoCommitEtAnnulerTransaction() ;
491
			}
492
 
493
		}
494
	}
495
 
496
	function createElement($pairs)
497
	{
498
 
499
		// Controle detournement utilisateur
1080 aurelien 500
		if(!isset($_SESSION)) {session_start();}
416 aurelien 501
		$this->controleUtilisateur($pairs['identifiant']);
502
 
503
		$this->suffix = '_'.$pairs['mode'];
504
 
505
		$id_utilisateur = $pairs['identifiant'] ;
506
		$mot_cle = $pairs['motcle'] ;
507
 
508
		// TODO supprimer accents et majuscules
509
		$id_mot_cle_general = md5(mb_strtolower($mot_cle)) ;
510
		$id_mot_cle = $pairs['id'] ;
511
		$id_parent = $pairs['parent'] ;
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
		{
551
			die($res->getMessage());
552
			$transaction_reussie_2 = false ;
553
        }
554
		else
555
		{
556
			$transaction_reussie_2 = true ;
557
		}
558
 
559
		if($transaction_reussie_1 && $transaction_reussie_2)
560
		{
561
			$this->reactiverAutoCommitEtCompleterTransaction() ;
562
		}
563
		else
564
		{
565
			$this->reactiverAutoCommitEtAnnulerTransaction() ;
566
		}
567
 
568
	}
569
 
570
	function deleteElement($uid){
571
 
1080 aurelien 572
		if(!isset($_SESSION)) {session_start();}
416 aurelien 573
		$this->controleUtilisateur($uid[1]);
574
		$this->suffix = '_'.$uid[0];
575
 
576
		$DB=$this->connectDB($this->config,'cel_db');
577
 
578
		$this->desactiverAutoCommitEtCommencerTransaction() ;
579
 
580
		$id_mot_cle= $uid[2] ;
581
		$id_utilisateur = $uid[1] ;
582
 
583
		$bornes  = $this->calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) ;
584
 
585
		$bg = $bornes['cmc_bg'] ;
586
		$bd = $bornes['cmc_bd'] ;
587
 
588
		$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).'"' ;
589
 
590
		$res =& $DB->query($query);
591
        if (PEAR::isError($res))
592
		{
593
                	die($res->getMessage());
594
			$transaction_reussie_1 = false ;
595
        }
596
		else
597
		{
598
			if($DB->affectedRows() <= 0)
599
			{
600
				$transaction_reussie_1 = false ;
601
			}
602
			else
603
			{
604
				$transaction_reussie_1 = true ;
605
			}
606
		}
607
 
608
 
609
		if($this->decalerBornesMoinsIntervalle($bg,$bd, $id_utilisateur))
610
		{
611
			$transaction_reussie_2 = true ;
612
		}
613
		else
614
		{
615
			$transaction_reussie_2 = false ;
616
		}
617
 
618
		if($transaction_reussie_1 && $transaction_reussie_2)
619
		{
620
			$this->reactiverAutoCommitEtCompleterTransaction() ;
621
		}
622
		else
623
		{
624
			$this->reactiverAutoCommitEtAnnulerTransaction() ;
625
		}
626
	}
627
 
628
 }
629
?>