Subversion Repositories eFlore/Applications.cel

Rev

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

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