Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 996 Rev 1014
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
3
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
4
/**
4
/**
5
 * Service de recherche et modification de l'arbre des mots clés associés à un id.
5
 * Service de recherche et modification de l'arbre des mots clés associés à un id.
6
 * 1: Le service recoit un mot clé à ajouter à l'arbre
6
 * 1: Le service recoit un mot clé à ajouter à l'arbre
7
 * 2: Le service recherche l'arbre ou sous arbre correspondant au critères demandé
7
 * 2: Le service recherche l'arbre ou sous arbre correspondant au critères demandé
8
 * 3: Le service renvoie l'arbre au format json
8
 * 3: Le service renvoie l'arbre au format json
9
 * 
9
 * 
10
 * Encodage en entrée : utf8
10
 * Encodage en entrée : utf8
11
 * Encodage en sortie : utf8
11
 * Encodage en sortie : utf8
12
 *
12
 *
13
 * Cas d'utilisation :
13
 * Cas d'utilisation :
14
 *
14
 *
15
 * @author Aurélien PERONNET <aurelien@tela-botanica.org>
15
 * @author Aurélien PERONNET <aurelien@tela-botanica.org>
16
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
16
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
17
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
17
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
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 {
22
 
22
 
23
	protected $suffix = '';
23
	protected $suffix = '';
24
 
24
 
25
	public function getElement($uid) {
25
	public function getElement($uid) {
26
		// Controle detournement utilisateur
26
		// Controle detournement utilisateur
27
		$this->suffix = '_'.$uid[0];
27
		$this->suffix = '_'.$uid[0];
28
		$id_utilisateur = $uid[1] ;
28
		$id_utilisateur = $uid[1] ;
29
		$this->controleUtilisateur($uid[1]);
29
		$this->controleUtilisateur($uid[1]);
30
		
30
		
31
		$requete = 	'SELECT mot_cle, id_mot_cle_utilisateur, ce_mot_cle_utilisateur_parent '.
31
		$requete = 	'SELECT mot_cle, id_mot_cle_utilisateur, ce_mot_cle_utilisateur_parent '.
32
					'FROM cel_mots_cles'.$this->suffix.' '.
32
					'FROM cel_mots_cles'.$this->suffix.' '.
33
					'WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' '.
33
					'WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' '.
34
					'ORDER BY niveau ';
34
					'ORDER BY niveau ';
35
		
35
		
36
		$resultats_mots_cles = $this->requeter($requete);
36
		$resultats_mots_cles = $this->requeter($requete);
37
		
37
		
38
		if (is_array($resultats_mots_cles)) {
38
		if (is_array($resultats_mots_cles)) {
39
			$mots_cles = array();
39
			$mots_cles = array();
40
			foreach($resultats_mots_cles as $mot_cle) {
40
			foreach($resultats_mots_cles as $mot_cle) {
41
				$mots_cles[] = $mot_cle;
41
				$mots_cles[] = $mot_cle;
42
			}
42
			}
43
			
43
						
44
			$infos = json_encode($mots_cles);
44
			$this->envoyerJson($mots_cles);
45
			header('content-type: application/json');
-
 
46
			print $infos;
-
 
47
			exit();
45
			return true;
48
		}
46
		}
49
	}
47
	}
50
 
48
 
51
	public function updateElement($uid, $pairs) {
49
	public function updateElement($uid, $pairs) {
52
		$this->suffix = '_'.$uid[0];
50
		$this->suffix = '_'.$uid[0];
53
		$id_utilisateur = $uid[1];
51
		$id_utilisateur = $uid[1];
54
		$this->controleUtilisateur($uid[1]);
52
		$this->controleUtilisateur($uid[1]);
55
 
53
 
56
		$id_mot_cle = $pairs['id'];
54
		$id_mot_cle = $pairs['id'];
57
		$action = $pairs['action'];
55
		$action = $pairs['action'];
58
 
56
 
59
		if ($action == 'modification') {
57
		if ($action == 'modification') {
60
			$nouveau_nom = $pairs['motcle'];
58
			$nouveau_nom = $pairs['motcle'];
61
			$nouvel_id_general = md5(strtolower($nouveau_nom));
59
			$nouvel_id_general = md5(strtolower($nouveau_nom));
62
 
60
 
63
			$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
61
			$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
64
						'SET mot_cle = '.$this->proteger($nouveau_nom).' , '.
62
						'SET mot_cle = '.$this->proteger($nouveau_nom).' , '.
65
						'	md5 = '.$this->proteger($nouvel_id_general).' '.
63
						'	md5 = '.$this->proteger($nouvel_id_general).' '.
66
						'WHERE id_mot_cle_utilisateur = '.$this->proteger($id_mot_cle).' '.
64
						'WHERE id_mot_cle_utilisateur = '.$this->proteger($id_mot_cle).' '.
67
						'	AND ce_utilisateur = '.$this->proteger($id_utilisateur) ;
65
						'	AND ce_utilisateur = '.$this->proteger($id_utilisateur) ;
68
			$reussite = $this->executer($requete);
66
			$reussite = $this->executer($requete);
69
			if ($reussite) {
67
			if ($reussite) {
70
				echo 'OK';
68
				echo 'OK';
71
			}
69
			}
72
		} else if ($action == 'deplacement') {
70
		} else if ($action == 'deplacement') {
73
			
71
			
74
			$this->commencerTransaction();
72
			$this->commencerTransaction();
75
			
73
			
76
			$transaction_reussie_1 = true;
74
			$transaction_reussie_1 = true;
77
			$id_pere = $pairs['parent'];
75
			$id_pere = $pairs['parent'];
78
			$bornes = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur);
76
			$bornes = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur);
79
			$bg = $bornes['bg'];
77
			$bg = $bornes['bg'];
80
			$bd = $bornes['bd'];
78
			$bd = $bornes['bd'];
81
			$niveau = $bornes['niveau'];
79
			$niveau = $bornes['niveau'];
82
 
80
 
83
			// on inverse l'intervalle de l'élément déplacé et du sous arbre
81
			// on inverse l'intervalle de l'élément déplacé et du sous arbre
84
			$transaction_reussie_2 = $this->exclureIntervalle($bg, $bd, $id_utilisateur);
82
			$transaction_reussie_2 = $this->exclureIntervalle($bg, $bd, $id_utilisateur);
85
 
83
 
86
			$bg_negative = $bg - $bd - 1;
84
			$bg_negative = $bg - $bd - 1;
87
			$bd_negative = $bd - $bd - 1;
85
			$bd_negative = $bd - $bd - 1;
88
 
86
 
89
			// on recalcule les intervalles de l'arbre privé de ce sous arbre
87
			// on recalcule les intervalles de l'arbre privé de ce sous arbre
90
			$transaction_reussie_3 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur);
88
			$transaction_reussie_3 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur);
91
 
89
 
92
			$bornes_pere = $this->calculerBornesEtNiveau($id_pere, $id_utilisateur);
90
			$bornes_pere = $this->calculerBornesEtNiveau($id_pere, $id_utilisateur);
93
			$bg_pere = $bornes_pere['bg'];
91
			$bg_pere = $bornes_pere['bg'];
94
			$bd_pere = $bornes_pere['bd'];
92
			$bd_pere = $bornes_pere['bd'];
95
 
93
 
96
			$niveau_pere = $bornes_pere['niveau'];
94
			$niveau_pere = $bornes_pere['niveau'];
97
 
95
 
98
			$decalage = $bd - $bg + 1;
96
			$decalage = $bd - $bg + 1;
99
 
97
 
100
			// on decale les bornes droite du pere pour préparer l'insertion
98
			// on decale les bornes droite du pere pour préparer l'insertion
101
			$transaction_reussie_4 = $this->decalerBornesPlusIntervalle($bd_pere, $decalage, $id_utilisateur);
99
			$transaction_reussie_4 = $this->decalerBornesPlusIntervalle($bd_pere, $decalage, $id_utilisateur);
102
			
100
			
103
			$nouvelle_bd = $bd_pere + $decalage;
101
			$nouvelle_bd = $bd_pere + $decalage;
104
			$modif_niveau = $niveau_pere - $niveau + 1;
102
			$modif_niveau = $niveau_pere - $niveau + 1;
105
 
103
 
106
			$transaction_reussie_5 = $this->inclureIntervalle($bg_negative, $bd_negative, $nouvelle_bd, $modif_niveau, $id_utilisateur);
104
			$transaction_reussie_5 = $this->inclureIntervalle($bg_negative, $bd_negative, $nouvelle_bd, $modif_niveau, $id_utilisateur);
107
						
105
						
108
			$transaction_reussie_6 = $this->changerPere($id_mot_cle, $id_pere, $id_utilisateur);
106
			$transaction_reussie_6 = $this->changerPere($id_mot_cle, $id_pere, $id_utilisateur);
109
 
107
 
110
			if ($transaction_reussie_1 && $transaction_reussie_2 && $transaction_reussie_3 && $transaction_reussie_4 && $transaction_reussie_5 && $transaction_reussie_6) {
108
			if ($transaction_reussie_1 && $transaction_reussie_2 && $transaction_reussie_3 && $transaction_reussie_4 && $transaction_reussie_5 && $transaction_reussie_6) {
111
				$this->completerTransaction();
109
				$this->completerTransaction();
112
			} else {
110
			} else {
113
				$this->annulerTransaction();
111
				$this->annulerTransaction();
114
			}
112
			}
115
 
113
 
116
		}
114
		}
117
	}
115
	}
118
 
116
 
119
	public function createElement($pairs) {
117
	public function createElement($pairs) {
120
		// Controle detournement utilisateur
118
		// Controle detournement utilisateur
121
		$this->controleUtilisateur($pairs['ce_utilisateur']);
119
		$this->controleUtilisateur($pairs['identifiant']);
122
 
120
 
123
		$this->suffix = '_'.$pairs['mode'];
121
		$this->suffix = '_'.$pairs['mode'];
124
		$id_utilisateur = $pairs['ce_utilisateur'];
122
		$id_utilisateur = $pairs['identifiant'];
125
		$mot_cle = $pairs['motcle'];
123
		$mot_cle = $pairs['motcle'];
126
 
124
 
127
		// TODO supprimer accents
125
		// TODO supprimer accents
128
		$id_mot_cle_general = md5(mb_strtolower($mot_cle));
126
		$id_mot_cle_general = md5(mb_strtolower($mot_cle));
129
		$id_mot_cle = $pairs['id'];
127
		$id_mot_cle = $pairs['id'];
130
		$id_parent = $pairs['parent'];
128
		$id_parent = $pairs['parent'];
131
 
129
 
132
		$this->ajouterMotCleRacine($id_utilisateur);
130
		$this->ajouterMotCleRacine($id_utilisateur);
133
 
131
 
134
		$this->commencerTransaction();
132
		$this->commencerTransaction();
135
 
133
 
136
		$bornes = $this->calculerBornesEtNiveau($id_parent, $id_utilisateur);
134
		$bornes = $this->calculerBornesEtNiveau($id_parent, $id_utilisateur);
137
		$borne_pere = $bornes['bd'];
135
		$borne_pere = $bornes['bd'];
138
		$niveau = $bornes['niveau'] + 1;
136
		$niveau = $bornes['niveau'] + 1;
139
		$bg = $bornes['bd'];
137
		$bg = $bornes['bd'];
140
		$bd = $bg + 1;
138
		$bd = $bg + 1;
141
 
139
 
142
		$transaction_reussie_1 = $this->decalerBornesPlusDeux($borne_pere,$id_utilisateur) ? true : false;
140
		$transaction_reussie_1 = $this->decalerBornesPlusDeux($borne_pere,$id_utilisateur) ? true : false;
143
		
141
		
144
		$requete = 	'INSERT INTO  cel_mots_cles'.$this->suffix.' '.
142
		$requete = 	'INSERT INTO  cel_mots_cles'.$this->suffix.' '.
145
					'VALUES ( '.
143
					'VALUES ( '.
146
					$this->proteger($id_mot_cle).', '.
144
					$this->proteger($id_mot_cle).', '.
147
					$this->proteger($id_utilisateur).', '.
145
					$this->proteger($id_utilisateur).', '.
148
					$this->proteger($mot_cle).', '.
146
					$this->proteger($mot_cle).', '.
149
					$this->proteger($id_mot_cle_general).', '.
147
					$this->proteger($id_mot_cle_general).', '.
150
					$this->proteger($bg).', '.
148
					$this->proteger($bg).', '.
151
					$this->proteger($bd).', '.
149
					$this->proteger($bd).', '.
152
					$this->proteger($niveau).', '.
150
					$this->proteger($niveau).', '.
153
					$this->proteger($id_parent).') ' ;
151
					$this->proteger($id_parent).') ' ;
154
							
152
							
155
		$transaction_reussie_2 = $this->executer($requete);
153
		$transaction_reussie_2 = $this->executer($requete);
156
 
154
 
157
		if ($transaction_reussie_1 && $transaction_reussie_2) {
155
		if ($transaction_reussie_1 && $transaction_reussie_2) {
158
			$this->completerTransaction();
156
			$this->completerTransaction();
159
			echo 'OK';
-
 
160
		} else {
157
		} else {
161
			$this->annulerTransaction();
158
			$this->annulerTransaction();
162
		}
159
		}
163
	}
160
	}
164
 
161
 
165
	public function deleteElement($uid) {
162
	public function deleteElement($uid) {
166
		
163
		
167
		$this->suffix = '_'.$uid[0];
164
		$this->suffix = '_'.$uid[0];
168
		$id_utilisateur = $uid[1];
165
		$id_utilisateur = $uid[1];
169
		$id_mot_cle = $uid[2];
166
		$id_mot_cle = $uid[2];
170
 
167
 
171
		$this->controleUtilisateur($id_utilisateur);		
168
		$this->controleUtilisateur($id_utilisateur);		
172
		$this->commencerTransaction();
169
		$this->commencerTransaction();
173
 
170
 
174
		$bornes  = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur);
171
		$bornes  = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur);
175
		$bg = $bornes['bg'];
172
		$bg = $bornes['bg'];
176
		$bd = $bornes['bd'];
173
		$bd = $bornes['bd'];
177
 
174
 
178
		$requete = 	'DELETE FROM cel_mots_cles'.$this->suffix.' '.
175
		$requete = 	'DELETE FROM cel_mots_cles'.$this->suffix.' '.
179
					'WHERE bg >= '.$this->proteger($bg).' '.
176
					'WHERE bg >= '.$this->proteger($bg).' '.
180
					'	AND bd <= '.$this->proteger($bd).' '.
177
					'	AND bd <= '.$this->proteger($bd).' '.
181
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
178
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
182
					
179
					
183
		$transaction_reussie_1 = $this->executer($requete);
180
		$transaction_reussie_1 = $this->executer($requete);
184
		$transaction_reussie_2 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) ? true : false;
181
		$transaction_reussie_2 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) ? true : false;
185
 
182
 
186
		if ($transaction_reussie_1 && $transaction_reussie_2) {
183
		if ($transaction_reussie_1 && $transaction_reussie_2) {
187
			$this->completerTransaction();
184
			$this->completerTransaction();
188
		} else {
185
		} else {
189
			$this->annulerTransaction();
186
			$this->annulerTransaction();
190
		}
187
		}
191
	}
188
	}
192
	
189
	
193
	private function ajouterMotCleRacine($id) {
190
	private function ajouterMotCleRacine($id) {
194
		$requete = 	'SELECT COUNT(*) as nb_mc '.
191
		$requete = 	'SELECT COUNT(*) as nb_mc '.
195
					'FROM cel_mots_cles'.$this->suffix.' '.
192
					'FROM cel_mots_cles'.$this->suffix.' '.
196
					'WHERE ce_utilisateur = '.$this->proteger($id).' ';
193
					'WHERE ce_utilisateur = '.$this->proteger($id).' ';
197
		$resultat = $this->requeter($requete);
194
		$resultat = $this->requeter($requete);
198
 
195
 
199
		if (is_array($resultat) && count($resultat) > 0) {
196
		if (is_array($resultat) && count($resultat) > 0) {
200
			$valeurs = $resultat[0]['nb_mc'];
197
			$valeurs = $resultat[0]['nb_mc'];
201
 
198
 
202
			switch ($this->suffix) {
199
			switch ($this->suffix) {
203
				case '_obs' :
200
				case '_obs' :
204
					$nom_racine = 'Projets';
201
					$nom_racine = 'Projets';
205
					$id_racine = 'racine_obs';
202
					$id_racine = 'racine_obs';
206
					break;
203
					break;
207
				case '_images' :
204
				case '_images' :
208
					$nom_racine = 'Mots clés';
205
					$nom_racine = 'Mots clés';
209
					$id_racine = 'racine';
206
					$id_racine = 'racine';
210
					break;
207
					break;
211
				default:
208
				default:
212
					$nom_racine = $this->suffix;
209
					$nom_racine = $this->suffix;
213
					$id_racine = $this->suffix;
210
					$id_racine = $this->suffix;
214
			}
211
			}
215
 
212
 
216
			if ($valeurs == 0) {
213
			if ($valeurs == 0) {
217
				$requete = 	'INSERT INTO cel_mots_cles'.$this->suffix.' '.
214
				$requete = 	'INSERT INTO cel_mots_cles'.$this->suffix.' '.
218
							'VALUES ("'.$nom_racine.'", 1, 2, "'.$id_racine.'", "'.$id_racine.'", '.$this->proteger($id).', "", 0) ';
215
							'VALUES ("'.$nom_racine.'", 1, 2, "'.$id_racine.'", "'.$id_racine.'", '.$this->proteger($id).', "", 0) ';
219
				$this->executer($requete);
216
				$this->executer($requete);
220
			}
217
			}
221
		}
218
		}
222
	}
219
	}
223
 
220
 
224
	/**
221
	/**
225
	 * Désactive l'auto-commit puis débute la transaction
222
	 * Désactive l'auto-commit puis débute la transaction
226
	 */
223
	 */
227
	private function commencerTransaction() {
224
	private function commencerTransaction() {
228
		// Désactive l'autocommit le temps de la manipulation de l'arbre
225
		// Désactive l'autocommit le temps de la manipulation de l'arbre
229
		$requete = 'SET AUTOCOMMIT = 0 ';
226
		$requete = 'SET AUTOCOMMIT = 0 ';
230
		$reussite_autocommit = $this->executer($requete);
227
		$reussite_autocommit = $this->executer($requete);
231
 
228
 
232
		// Débute une nouvelle transaction
229
		// Débute une nouvelle transaction
233
		$requete = 'BEGIN ';
230
		$requete = 'BEGIN ';
234
		$reussite_begin = $this->executer($requete);
231
		$reussite_begin = $this->executer($requete);
235
	}
232
	}
236
 
233
 
237
	/**
234
	/**
238
	 * Termine la transaction puis réactive l'auto-commit
235
	 * Termine la transaction puis réactive l'auto-commit
239
	 */
236
	 */
240
	private function completerTransaction() {
237
	private function completerTransaction() {
241
		// Complète la transaction
238
		// Complète la transaction
242
		$requete = 'COMMIT ';
239
		$requete = 'COMMIT ';
243
		$reussite_commit = $this->executer($requete);
240
		$reussite_commit = $this->executer($requete);
244
 
241
 
245
		// Réactive l'autocommit le temps de la manipulation de l'arbre
242
		// Réactive l'autocommit le temps de la manipulation de l'arbre
246
		$requete = 'SET AUTOCOMMIT = 1 ';
243
		$requete = 'SET AUTOCOMMIT = 1 ';
247
		$reussite_autocommit = $this->executer($requete);
244
		$reussite_autocommit = $this->executer($requete);
248
 
245
 
249
		echo 'OK';
246
		echo 'OK';
250
	}
247
	}
251
	
248
	
252
	/**
249
	/**
253
	 * Annule la transaction et réactive l'auto-commit
250
	 * Annule la transaction et réactive l'auto-commit
254
	 */
251
	 */
255
	private function annulerTransaction() {
252
	private function annulerTransaction() {
256
		// Annule la transaction
253
		// Annule la transaction
257
		$requete = 'ROLLBACK ';
254
		$requete = 'ROLLBACK ';
258
		$reussite_rollback = $this->executer($requete);
255
		$reussite_rollback = $this->executer($requete);
259
 
256
 
260
		// Réactive l'autocommit le temps de la manipulation de l'arbre
257
		// Réactive l'autocommit le temps de la manipulation de l'arbre
261
		$requete = 'SET AUTOCOMMIT = 1 ';
258
		$requete = 'SET AUTOCOMMIT = 1 ';
262
		$reussite_autocommit = $this->executer($requete);
259
		$reussite_autocommit = $this->executer($requete);
263
 
260
 
264
		echo 'ERROR';
261
		echo 'ERROR';
265
	}
262
	}
266
 
263
 
267
	/** 
264
	/** 
268
	 * Renvoie les bornes d'un noeud de l'arbre des mots clés
265
	 * Renvoie les bornes d'un noeud de l'arbre des mots clés
269
	 */
266
	 */
270
	private function calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) {
267
	private function calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) {
271
		$requete = 	'SELECT bd, bg, niveau '.
268
		$requete = 	'SELECT bd, bg, niveau '.
272
					'FROM cel_mots_cles'.$this->suffix.' '.
269
					'FROM cel_mots_cles'.$this->suffix.' '.
273
					'WHERE id_mot_cle_utilisateur = '.$this->proteger($id_mot_cle).' '.
270
					'WHERE id_mot_cle_utilisateur = '.$this->proteger($id_mot_cle).' '.
274
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
271
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
275
		$resultat = $this->requeter($requete);
272
		$resultat = $this->requeter($requete);
276
		
273
		
277
		if(is_array($resultat) && count($resultat) > 0) {
274
		if(is_array($resultat) && count($resultat) > 0) {
278
			$valeurs = $resultat[0];
275
			$valeurs = $resultat[0];
279
		}
276
		}
280
		
277
		
281
		return $valeurs;
278
		return $valeurs;
282
	}
279
	}
283
 
280
 
284
	/**
281
	/**
285
	 * Décale les bornes de deux pour insérer un nouvel élément
282
	 * Décale les bornes de deux pour insérer un nouvel élément
286
	 */ 
283
	 */ 
287
	private function decalerBornesPlusDeux($valeur, $id_utilisateur) {
284
	private function decalerBornesPlusDeux($valeur, $id_utilisateur) {
288
		// Décalage borne droite
285
		// Décalage borne droite
289
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
286
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
290
					'SET bd = bd + 2 WHERE bd >= '.$this->proteger($valeur).' '.
287
					'SET bd = bd + 2 WHERE bd >= '.$this->proteger($valeur).' '.
291
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
288
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
292
		$reussi_1 = $this->executer($requete);
289
		$reussi_1 = $this->executer($requete);
293
		
290
		
294
		// Décalage borne gauche
291
		// Décalage borne gauche
295
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
292
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
296
					'SET bg = bg + 2 '.
293
					'SET bg = bg + 2 '.
297
					'WHERE bg >=  '.$this->proteger($valeur).' '.
294
					'WHERE bg >=  '.$this->proteger($valeur).' '.
298
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
295
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
299
		$reussi_2 = $this->executer($requete);
296
		$reussi_2 = $this->executer($requete);
300
		
297
		
301
		return $reussi_1 && $reussi_2;
298
		return $reussi_1 && $reussi_2;
302
	}
299
	}
303
 
300
 
304
	/**
301
	/**
305
	 * Décale les bornes d'un intervalle negatif donne (pour la suppression d'un sous arbre).
302
	 * Décale les bornes d'un intervalle negatif donne (pour la suppression d'un sous arbre).
306
	 */
303
	 */
307
	private function decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) {
304
	private function decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) {
308
		$decalage = $bd - $bg + 1;
305
		$decalage = $bd - $bg + 1;
309
 
306
 
310
		// Décalage borne droite
307
		// Décalage borne droite
311
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
308
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
312
					'SET bd = bd - '.$this->proteger($decalage).' '.
309
					'SET bd = bd - '.$this->proteger($decalage).' '.
313
					'WHERE bd >=  '.$this->proteger($bg).' '.
310
					'WHERE bd >=  '.$this->proteger($bg).' '.
314
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
311
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
315
		$reussi_1 = $this->executer($requete);
312
		$reussi_1 = $this->executer($requete);
316
 
313
 
317
		// Décalage borne gauche
314
		// Décalage borne gauche
318
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
315
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
319
					'SET bg = bg - '.$this->proteger($decalage).' '.
316
					'SET bg = bg - '.$this->proteger($decalage).' '.
320
					'WHERE bg >  '.$this->proteger($bg).' '.
317
					'WHERE bg >  '.$this->proteger($bg).' '.
321
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
318
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
322
		$reussi_2 = $this->executer($requete);
319
		$reussi_2 = $this->executer($requete);
323
		
320
		
324
		return $reussi_1 && $reussi_2;
321
		return $reussi_1 && $reussi_2;
325
	}
322
	}
326
 
323
 
327
	/**
324
	/**
328
	 * Décale à droite des bornes donées d'un intervalle positif donne (pour l'ajout d'un sous arbre).
325
	 * Décale à droite des bornes donées d'un intervalle positif donne (pour l'ajout d'un sous arbre).
329
	 */ 
326
	 */ 
330
	private function decalerBornesPlusIntervalle($valeur_bornes, $largeur, $id_utilisateur) {
327
	private function decalerBornesPlusIntervalle($valeur_bornes, $largeur, $id_utilisateur) {
331
		$decalage = $largeur;
328
		$decalage = $largeur;
332
 
329
 
333
		// decalage borne droite
330
		// decalage borne droite
334
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
331
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
335
					'SET bd = bd + '.$this->proteger($decalage).' '.
332
					'SET bd = bd + '.$this->proteger($decalage).' '.
336
					'WHERE bd >=  '.$this->proteger($valeur_bornes).' '.
333
					'WHERE bd >=  '.$this->proteger($valeur_bornes).' '.
337
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
334
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
338
		$reussi_1 = $this->executer($requete);
335
		$reussi_1 = $this->executer($requete);
339
 
336
 
340
		// decalage borne gauche
337
		// decalage borne gauche
341
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
338
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
342
					'SET bg = bg + '.$this->proteger($decalage).' '.
339
					'SET bg = bg + '.$this->proteger($decalage).' '.
343
					'WHERE bg >=  '.$this->proteger($valeur_bornes).' '.
340
					'WHERE bg >=  '.$this->proteger($valeur_bornes).' '.
344
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
341
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
345
		$reussi_2 = $this->executer($requete);
342
		$reussi_2 = $this->executer($requete);
346
 
343
 
347
		return $reussi_1 && $reussi_2;
344
		return $reussi_1 && $reussi_2;
348
	}
345
	}
349
 
346
 
350
	/**
347
	/**
351
	 * Inverse les bornes d'un intervalle pour l'exclure des modifications sur l'arbre sans changer la hiérarchie.
348
	 * Inverse les bornes d'un intervalle pour l'exclure des modifications sur l'arbre sans changer la hiérarchie.
352
	 */
349
	 */
353
	private function exclureIntervalle($bg, $bd, $id_utilisateur) {
350
	private function exclureIntervalle($bg, $bd, $id_utilisateur) {
354
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
351
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
355
					'SET bd = bd - '.$this->proteger($bd).' - 1 , '.
352
					'SET bd = bd - '.$this->proteger($bd).' - 1 , '.
356
					'	bg =  bg -  '.$this->proteger($bd).' - 1 '.
353
					'	bg =  bg -  '.$this->proteger($bd).' - 1 '.
357
					'WHERE bd <=  '.$this->proteger($bd).' '.
354
					'WHERE bd <=  '.$this->proteger($bd).' '.
358
					'	AND bg >=  '.$this->proteger($bg).' '.
355
					'	AND bg >=  '.$this->proteger($bg).' '.
359
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
356
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
360
 
357
 
361
		return $this->executer($requete);
358
		return $this->executer($requete);
362
	}
359
	}
363
 
360
 
364
	/** 
361
	/** 
365
	 * Recale les bornes dun intervalle pour l'inclure dans l'arbre à la bonne place.
362
	 * Recale les bornes dun intervalle pour l'inclure dans l'arbre à la bonne place.
366
	 * Décalage borne droite
363
	 * Décalage borne droite
367
	 */
364
	 */
368
	private function inclureIntervalle($bg, $bd, $decalage,$modif_niveau, $id_utilisateur) {
365
	private function inclureIntervalle($bg, $bd, $decalage,$modif_niveau, $id_utilisateur) {
369
 
366
 
370
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
367
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
371
					'SET bg =  bg + '.$this->proteger($decalage).' , '.
368
					'SET bg =  bg + '.$this->proteger($decalage).' , '.
372
					'	bd = bd + '.$this->proteger($decalage).', '.
369
					'	bd = bd + '.$this->proteger($decalage).', '.
373
					'	niveau = niveau + '.$modif_niveau.' '.
370
					'	niveau = niveau + '.$modif_niveau.' '.
374
					' WHERE bg >=  '.$this->proteger($bg).' '.
371
					' WHERE bg >=  '.$this->proteger($bg).' '.
375
					'	AND bd <=  '.$this->proteger($bd).' '.
372
					'	AND bd <=  '.$this->proteger($bd).' '.
376
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
373
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
377
 
374
 
378
		return $this->executer($requete);
375
		return $this->executer($requete);
379
	}
376
	}
380
 
377
 
381
	private function changerPere($id_mot_cle, $id_pere, $id_utilisateur) {
378
	private function changerPere($id_mot_cle, $id_pere, $id_utilisateur) {
382
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
379
		$requete = 	'UPDATE cel_mots_cles'.$this->suffix.' '.
383
					'SET ce_mot_cle_utilisateur_parent = '.$this->proteger($id_pere).' '.
380
					'SET ce_mot_cle_utilisateur_parent = '.$this->proteger($id_pere).' '.
384
					'WHERE id_mot_cle_utilisateur = '.$this->proteger($id_mot_cle).' '.
381
					'WHERE id_mot_cle_utilisateur = '.$this->proteger($id_mot_cle).' '.
385
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
382
					'	AND ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
386
		
383
		
387
		return $this->executer($requete);
384
		return $this->executer($requete);
388
	}
385
	}
389
 }
386
 }
390
?>
387
?>