Subversion Repositories eFlore/Applications.cel

Rev

Rev 1268 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1268 Rev 1298
Line 18... Line 18...
18
 * @version $Id$
18
 * @version $Id$
19
 * @copyright © 2011, Tela-Botanica
19
 * @copyright © 2011, Tela-Botanica
20
 */
20
 */
21
class InventoryKeyWordList extends Cel {
21
class InventoryKeyWordList extends Cel {
Line 22... Line 22...
22
 
22
 
-
 
23
	protected $suffixe = '';
-
 
24
	protected $suffixe_table = null;
-
 
25
	protected $suffixe_champ = null;
-
 
26
	
-
 
27
	private function setChampsEtTablePourSuffixe($suffixe) {
-
 
28
		$this->suffixe = $suffixe;
-
 
29
		switch($suffixe) {
-
 
30
			case 'obs':
-
 
31
				$this->suffixe_table = '_obs';
-
 
32
				$this->suffixe_champ = '_obs';
-
 
33
			break;
-
 
34
			case 'images':
-
 
35
				$this->suffixe_table = '_images';
-
 
36
				$this->suffixe_champ = '_image';
-
 
37
			break;
-
 
38
		}
Line 23... Line 39...
23
	protected $suffix = '';
39
	}
24
 
40
 
25
	public function getElement($uid) {
-
 
26
		// Controle detournement utilisateur
41
	public function getElement($uid) {
27
		$this->suffix = '_'.$uid[0];
42
		// Controle detournement utilisateur
Line -... Line 43...
-
 
43
		$id_utilisateur = $uid[1] ;
-
 
44
		$this->controleUtilisateur($uid[1]);
28
		$id_utilisateur = $uid[1] ;
45
		
29
		$this->controleUtilisateur($uid[1]);
46
		$this->setChampsEtTablePourSuffixe($uid[0]);
30
		
47
		
31
		$requete = 	'SELECT mot_cle, id_mot_cle_obs, ce_mot_cle_obs_parent '.
48
		$requete = 	'SELECT mot_cle, id_mot_cle'.$this->suffixe_champ.', ce_mot_cle'.$this->suffixe_champ.'_parent '.
Line 32... Line 49...
32
					'FROM cel_mots_cles'.$this->suffix.' '.
49
					'FROM cel_mots_cles'.$this->suffixe_table.' '.
Line 45... Line 62...
45
			return true;
62
			return true;
46
		}
63
		}
47
	}
64
	}
Line 48... Line 65...
48
 
65
 
49
	public function updateElement($uid, $pairs) {
-
 
50
		$this->suffix = '_'.$uid[0];
66
	public function updateElement($uid, $pairs) {
51
		$id_utilisateur = $uid[1];
67
		$id_utilisateur = $uid[1];
-
 
68
		$this->controleUtilisateur($uid[1]);
-
 
69
		
Line 52... Line 70...
52
		$this->controleUtilisateur($uid[1]);
70
		$this->setChampsEtTablePourSuffixe($uid[0]);
53
 
71
 
Line 54... Line 72...
54
		$id_mot_cle = $pairs['id'];
72
		$id_mot_cle = $pairs['id'];
55
		$action = $pairs['action'];
73
		$action = $pairs['action'];
56
 
74
 
Line 57... Line 75...
57
		if ($action == 'modification') {
75
		if ($action == 'modification') {
58
			$nouveau_nom = $pairs['motcle'];
76
			$nouveau_nom = $pairs['motcle'];
59
			$nouvel_id_general = md5(mb_strtolower($nouveau_nom));
77
			$nouvel_id_general = md5(mb_strtolower($nouveau_nom));
60
 
78
 
61
			$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
79
			$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
62
						'SET mot_cle = '.$this->proteger($nouveau_nom).' , '.
80
						'SET mot_cle = '.$this->proteger($nouveau_nom).' , '.
63
						'	md5 = '.$this->proteger($nouvel_id_general).' '.
81
						'	md5 = '.$this->proteger($nouvel_id_general).' '.
64
						'WHERE id_mot_cle_utilisateur = '.$this->proteger($id_mot_cle).' '.
82
						'WHERE id_mot_cle'.$this->suffixe_champ.' = '.$this->proteger($id_mot_cle).' '.
65
						'	AND ce_utilisateur = '.$this->proteger($id_utilisateur) ;
83
						'	AND ce_utilisateur = '.$this->proteger($id_utilisateur) ;
66
			$reussite = $this->executer($requete);
84
			$reussite = $this->executer($requete);
Line 67... Line 85...
67
			if ($reussite) {
85
			if ($reussite !== false) {
Line 103... Line 121...
103
 
121
 
Line 104... Line 122...
104
			$transaction_reussie_5 = $this->inclureIntervalle($bg_negative, $bd_negative, $nouvelle_bd, $modif_niveau, $id_utilisateur);
122
			$transaction_reussie_5 = $this->inclureIntervalle($bg_negative, $bd_negative, $nouvelle_bd, $modif_niveau, $id_utilisateur);
Line 105... Line 123...
105
						
123
						
-
 
124
			$transaction_reussie_6 = $this->changerPere($id_mot_cle, $id_pere, $id_utilisateur);
-
 
125
 
106
			$transaction_reussie_6 = $this->changerPere($id_mot_cle, $id_pere, $id_utilisateur);
126
			if ($transaction_reussie_1 !== false && $transaction_reussie_2 !== false && 
107
 
127
				$transaction_reussie_3 !== false && $transaction_reussie_4 !== false && 
108
			if ($transaction_reussie_1 && $transaction_reussie_2 && $transaction_reussie_3 && $transaction_reussie_4 && $transaction_reussie_5 && $transaction_reussie_6) {
128
				$transaction_reussie_5 !== false && $transaction_reussie_6 !== false) {
109
				$this->completerTransaction();
129
				$this->completerTransaction();
Line 116... Line 136...
116
 
136
 
117
	public function createElement($pairs) {
137
	public function createElement($pairs) {
118
		// Controle detournement utilisateur
138
		// Controle detournement utilisateur
Line 119... Line 139...
119
		$this->controleUtilisateur($pairs['identifiant']);
139
		$this->controleUtilisateur($pairs['identifiant']);
120
 
140
 
121
		$this->suffix = '_'.$pairs['mode'];
141
		$this->setChampsEtTablePourSuffixe($pairs['mode']);
Line 122... Line 142...
122
		$id_utilisateur = $pairs['identifiant'];
142
		$id_utilisateur = $pairs['identifiant'];
123
		$mot_cle = $pairs['motcle'];
143
		$mot_cle = $pairs['motcle'];
Line 137... Line 157...
137
		$bg = $bornes['bd'];
157
		$bg = $bornes['bd'];
138
		$bd = $bg + 1;
158
		$bd = $bg + 1;
Line 139... Line 159...
139
 
159
 
Line 140... Line 160...
140
		$transaction_reussie_1 = $this->decalerBornesPlusDeux($borne_pere,$id_utilisateur) ? true : false;
160
		$transaction_reussie_1 = $this->decalerBornesPlusDeux($borne_pere,$id_utilisateur) ? true : false;
141
		
161
		
142
		$requete = 	'INSERT INTO  cel_mots_cles'.$this->suffix.' '.
162
		$requete = 	'INSERT INTO  cel_mots_cles'.$this->suffixe_table.' '.
143
					'VALUES ( '.
163
					'VALUES ( '.
144
					$this->proteger($id_mot_cle).', '.
164
					$this->proteger($id_mot_cle).', '.
145
					$this->proteger($id_utilisateur).', '.
165
					$this->proteger($id_utilisateur).', '.
Line 159... Line 179...
159
		}
179
		}
160
	}
180
	}
Line 161... Line 181...
161
 
181
 
Line 162... Line 182...
162
	public function deleteElement($uid) {
182
	public function deleteElement($uid) {
163
		
183
		
164
		$this->suffix = '_'.$uid[0];
184
		$this->setChampsEtTablePourSuffixe($uid[0]);
Line 165... Line 185...
165
		$id_utilisateur = $uid[1];
185
		$id_utilisateur = $uid[1];
166
		$id_mot_cle = $uid[2];
186
		$id_mot_cle = $uid[2];
Line 167... Line 187...
167
 
187
 
168
		$this->controleUtilisateur($id_utilisateur);		
188
		$this->controleUtilisateur($id_utilisateur);		
169
		$this->commencerTransaction();
189
		$this->commencerTransaction();
Line 170... Line 190...
170
 
190
 
171
		$bornes  = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur);
191
		$bornes  = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur);
172
		$bg = $bornes['bg'];
192
		$bg = $bornes['bg'];
173
		$bd = $bornes['bd'];
193
		$bd = $bornes['bd'];
Line 174... Line 194...
174
 
194
 
175
		$requete = 	'DELETE FROM cel_mots_cles'.$this->suffix.' '.
195
		$requete = 	'DELETE FROM cel_mots_cles'.$this->suffixe_table.' '.
Line 176... Line 196...
176
					'WHERE bg >= '.$this->proteger($bg).' '.
196
					'WHERE bg >= '.$this->proteger($bg).' '.
177
					'	AND bd <= '.$this->proteger($bd).' '.
197
					'	AND bd <= '.$this->proteger($bd).' '.
178
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
198
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
179
					
199
					
180
		$transaction_reussie_1 = $this->executer($requete);
200
		$transaction_reussie_1 = $this->executer($requete);
181
		$transaction_reussie_2 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) ? true : false;
201
		$transaction_reussie_2 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) ? true : false;
Line 182... Line 202...
182
 
202
 
183
		if ($transaction_reussie_1 && $transaction_reussie_2) {
203
		if ($transaction_reussie_1 !== false && $transaction_reussie_2 !== false) {
184
			$this->completerTransaction();
204
			$this->completerTransaction();
185
		} else {
205
		} else {
186
			$this->annulerTransaction();
206
			$this->annulerTransaction();
Line 187... Line 207...
187
		}
207
		}
188
	}
208
	}
Line 189... Line 209...
189
	
209
	
190
	private function ajouterMotCleRacine($id) {
210
	private function ajouterMotCleRacine($id) {
191
		$requete = 	'SELECT COUNT(*) as nb_mc '.
211
		$requete = 	'SELECT COUNT(*) as nb_mc '.
192
					'FROM cel_mots_cles'.$this->suffix.' '.
212
					'FROM cel_mots_cles'.$this->suffixe_table.' '.
193
					'WHERE ce_utilisateur = '.$this->proteger($id).' ';
213
					'WHERE ce_utilisateur = '.$this->proteger($id).' ';
194
		$resultat = $this->requeter($requete);
214
		$resultat = $this->requeter($requete);
195
 
215
 
196
		if (is_array($resultat) && count($resultat) > 0) {
216
		if (is_array($resultat) && count($resultat) > 0) {
197
			$valeurs = $resultat[0]['nb_mc'];
217
			$valeurs = $resultat[0]['nb_mc'];
198
 
218
 
199
			switch ($this->suffix) {
219
			switch ($this->suffixe) {
200
				case '_obs' :
220
				case 'obs' :
201
					$nom_racine = 'Projets';
221
					$nom_racine = 'Projets';
Line 202... Line 222...
202
					$id_racine = 'racine_obs';
222
					$id_racine = 'racine_obs';
203
					break;
223
					break;
204
				case '_images' :
224
				case 'images' :
205
					$nom_racine = 'Mots clés';
225
					$nom_racine = 'Mots clés';
206
					$id_racine = 'racine';
226
					$id_racine = 'racine';
207
					break;
227
					break;
208
				default:
228
				default:
Line 264... Line 284...
264
	/** 
284
	/** 
265
	 * Renvoie les bornes d'un noeud de l'arbre des mots clés
285
	 * Renvoie les bornes d'un noeud de l'arbre des mots clés
266
	 */
286
	 */
267
	private function calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) {
287
	private function calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) {
268
		$requete = 	'SELECT bd, bg, niveau '.
288
		$requete = 	'SELECT bd, bg, niveau '.
269
					'FROM cel_mots_cles'.$this->suffix.' '.
289
					'FROM cel_mots_cles'.$this->suffixe_table.' '.
270
					'WHERE id_mot_cle_utilisateur = '.$this->proteger($id_mot_cle).' '.
290
					'WHERE id_mot_cle'.$this->suffixe_champ.' = '.$this->proteger($id_mot_cle).' '.
271
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
291
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
272
		$resultat = $this->requeter($requete);
292
		$resultat = $this->requeter($requete);
Line 273... Line 293...
273
		
293
		
274
		if(is_array($resultat) && count($resultat) > 0) {
294
		if(is_array($resultat) && count($resultat) > 0) {
Line 281... Line 301...
281
	/**
301
	/**
282
	 * Décale les bornes de deux pour insérer un nouvel élément
302
	 * Décale les bornes de deux pour insérer un nouvel élément
283
	 */ 
303
	 */ 
284
	private function decalerBornesPlusDeux($valeur, $id_utilisateur) {
304
	private function decalerBornesPlusDeux($valeur, $id_utilisateur) {
285
		// Décalage borne droite
305
		// Décalage borne droite
286
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
306
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
287
					'SET bd = bd + 2 WHERE bd >= '.$this->proteger($valeur).' '.
307
					'SET bd = bd + 2 WHERE bd >= '.$valeur.' '.
288
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
308
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
289
		$reussi_1 = $this->executer($requete);
309
		$reussi_1 = $this->executer($requete);
Line 290... Line 310...
290
		
310
		
291
		// Décalage borne gauche
311
		// Décalage borne gauche
292
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
312
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
293
					'SET bg = bg + 2 '.
313
					'SET bg = bg + 2 '.
294
					'WHERE bg >=  '.$this->proteger($valeur).' '.
314
					'WHERE bg >= '.$valeur.' '.
295
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
315
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
Line 296... Line 316...
296
		$reussi_2 = $this->executer($requete);
316
		$reussi_2 = $this->executer($requete);
297
		
317
		
Line 298... Line 318...
298
		return $reussi_1 && $reussi_2;
318
		return $reussi_1 !== false && $reussi_2 !== false;
299
	}
319
	}
300
 
320
 
301
	/**
321
	/**
302
	 * Décale les bornes d'un intervalle negatif donne (pour la suppression d'un sous arbre).
322
	 * Décale les bornes d'un intervalle negatif donne (pour la suppression d'un sous arbre).
Line 303... Line 323...
303
	 */
323
	 */
304
	private function decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) {
324
	private function decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) {
305
		$decalage = $bd - $bg + 1;
325
		$decalage = $bd - $bg + 1;
306
 
326
 
307
		// Décalage borne droite
327
		// Décalage borne droite
308
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
328
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
Line 309... Line 329...
309
					'SET bd = bd - '.$this->proteger($decalage).' '.
329
					'SET bd = bd - '.$decalage.' '.
310
					'WHERE bd >=  '.$this->proteger($bg).' '.
330
					'WHERE bd >=  '.$bg.' '.
311
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
331
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
312
		$reussi_1 = $this->executer($requete);
332
		$reussi_1 = $this->executer($requete);
313
 
333
 
314
		// Décalage borne gauche
334
		// Décalage borne gauche
Line 315... Line 335...
315
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
335
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
316
					'SET bg = bg - '.$this->proteger($decalage).' '.
336
					'SET bg = bg - '.$decalage.' '.
Line 317... Line 337...
317
					'WHERE bg >  '.$this->proteger($bg).' '.
337
					'WHERE bg >  '.$bg.' '.
318
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
338
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
319
		$reussi_2 = $this->executer($requete);
339
		$reussi_2 = $this->executer($requete);
320
		
340
		
321
		return $reussi_1 && $reussi_2;
341
		return $reussi_1 !== false && $reussi_2 !== false;
Line 322... Line 342...
322
	}
342
	}
323
 
343
 
324
	/**
344
	/**
325
	 * Décale à droite des bornes donées d'un intervalle positif donne (pour l'ajout d'un sous arbre).
345
	 * Décale à droite des bornes donées d'un intervalle positif donne (pour l'ajout d'un sous arbre).
326
	 */ 
346
	 */ 
327
	private function decalerBornesPlusIntervalle($valeur_bornes, $largeur, $id_utilisateur) {
347
	private function decalerBornesPlusIntervalle($valeur_bornes, $largeur, $id_utilisateur) {
Line 328... Line 348...
328
		$decalage = $largeur;
348
		$decalage = $largeur;
329
 
349
 
330
		// decalage borne droite
350
		// decalage borne droite
331
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
351
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
332
					'SET bd = bd + '.$this->proteger($decalage).' '.
352
					'SET bd = bd + '.$decalage.' '.
333
					'WHERE bd >=  '.$this->proteger($valeur_bornes).' '.
353
					'WHERE bd >=  '.$valeur_bornes.' '.
Line 334... Line 354...
334
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
354
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
335
		$reussi_1 = $this->executer($requete);
355
		$reussi_1 = $this->executer($requete);
Line 336... Line 356...
336
 
356
 
337
		// decalage borne gauche
357
		// decalage borne gauche
338
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
358
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
339
					'SET bg = bg + '.$this->proteger($decalage).' '.
359
					'SET bg = bg + '.$decalage.' '.
340
					'WHERE bg >=  '.$this->proteger($valeur_bornes).' '.
360
					'WHERE bg >=  '.$valeur_bornes.' '.
341
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
361
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
342
		$reussi_2 = $this->executer($requete);
362
		$reussi_2 = $this->executer($requete);
343
 
363
 
344
		return $reussi_1 && $reussi_2;
364
		return $reussi_1 !== false && $reussi_2 !== false;
345
	}
365
	}
Line 346... Line 366...
346
 
366
 
347
	/**
367
	/**
Line 362... Line 382...
362
	 * Recale les bornes dun intervalle pour l'inclure dans l'arbre à la bonne place.
382
	 * Recale les bornes dun intervalle pour l'inclure dans l'arbre à la bonne place.
363
	 * Décalage borne droite
383
	 * Décalage borne droite
364
	 */
384
	 */
365
	private function inclureIntervalle($bg, $bd, $decalage,$modif_niveau, $id_utilisateur) {
385
	private function inclureIntervalle($bg, $bd, $decalage,$modif_niveau, $id_utilisateur) {
Line 366... Line 386...
366
 
386
 
367
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
387
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
368
					'SET bg =  bg + '.$this->proteger($decalage).' , '.
388
					'SET bg =  bg + '.$decalage.' , '.
369
					'	bd = bd + '.$this->proteger($decalage).', '.
389
					'	bd = bd + '.$decalage.', '.
370
					'	niveau = niveau + '.$modif_niveau.' '.
390
					'	niveau = niveau + '.$modif_niveau.' '.
371
					' WHERE bg >=  '.$this->proteger($bg).' '.
391
					' WHERE bg >=  '.$bg.' '.
372
					'	AND bd <=  '.$this->proteger($bd).' '.
392
					'	AND bd <=  '.$bd.' '.
Line 373... Line 393...
373
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
393
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
374
 
394
 
Line 375... Line 395...
375
		return $this->executer($requete);
395
		return $this->executer($requete);
376
	}
396
	}
377
 
397
 
378
	private function changerPere($id_mot_cle, $id_pere, $id_utilisateur) {
398
	private function changerPere($id_mot_cle, $id_pere, $id_utilisateur) {
379
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
399
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
Line 380... Line 400...
380
					'SET ce_mot_cle_utilisateur_parent = '.$this->proteger($id_pere).' '.
400
					'SET ce_mot_cle_'.$this->suffixe_champ.'_parent = '.$this->proteger($id_pere).' '.
381
					'WHERE id_mot_cle_utilisateur = '.$this->proteger($id_mot_cle).' '.
401
					'WHERE id_mot_cle'.$this->suffixe_champ.' = '.$this->proteger($id_mot_cle).' '.
382
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
402
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';