Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1326 Rev 1425
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 id_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 id_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 id_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 id_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 id_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
			
-
 
251
			$md5_racine = $this->proteger(md5($nom_racine));
-
 
252
			$id_racine = $this->proteger($id_racine);
-
 
253
			$nom_racine = $this->proteger($nom_racine);
-
 
254
			$id_utilisateur = $this->proteger($id);
250
 
255
 
251
			if ($valeurs == 0) {
256
			if ($valeurs == 0) {				
252
				$requete = 	'INSERT INTO cel_mots_cles'.$this->suffixe_table.' '.
257
				$requete = "INSERT INTO cel_mots_cles{$this->suffixe_table} ".
-
 
258
						   "VALUES ($id_racine, $id_utilisateur, $nom_racine, $md5_racine, ".
-
 
259
						   "1, 2, 0, '') ";
253
							'VALUES ("'.$nom_racine.'", 1, 2, "'.$id_racine.'", "'.$id_racine.'", '.$this->proteger($id).', "", 0) ';
260
				
254
				$this->executer($requete);
261
				$this->executer($requete);
255
			}
262
			}
256
		}
263
		}
257
	}
264
	}
258
 
265
 
259
	/**
266
	/**
260
	 * Désactive l'auto-commit puis débute la transaction
267
	 * Désactive l'auto-commit puis débute la transaction
261
	 */
268
	 */
262
	private function commencerTransaction() {
269
	private function commencerTransaction() {
263
		// Désactive l'autocommit le temps de la manipulation de l'arbre
270
		// Désactive l'autocommit le temps de la manipulation de l'arbre
264
		$requete = 'SET AUTOCOMMIT = 0 ';
271
		$requete = 'SET AUTOCOMMIT = 0 ';
265
		$reussite_autocommit = $this->executer($requete);
272
		$reussite_autocommit = $this->executer($requete);
266
 
273
 
267
		// Débute une nouvelle transaction
274
		// Débute une nouvelle transaction
268
		$requete = 'BEGIN ';
275
		$requete = 'BEGIN ';
269
		$reussite_begin = $this->executer($requete);
276
		$reussite_begin = $this->executer($requete);
270
	}
277
	}
271
 
278
 
272
	/**
279
	/**
273
	 * Termine la transaction puis réactive l'auto-commit
280
	 * Termine la transaction puis réactive l'auto-commit
274
	 */
281
	 */
275
	private function completerTransaction() {
282
	private function completerTransaction() {
276
		// Complète la transaction
283
		// Complète la transaction
277
		$requete = 'COMMIT ';
284
		$requete = 'COMMIT ';
278
		$reussite_commit = $this->executer($requete);
285
		$reussite_commit = $this->executer($requete);
279
 
286
 
280
		// Réactive l'autocommit le temps de la manipulation de l'arbre
287
		// Réactive l'autocommit le temps de la manipulation de l'arbre
281
		$requete = 'SET AUTOCOMMIT = 1 ';
288
		$requete = 'SET AUTOCOMMIT = 1 ';
282
		$reussite_autocommit = $this->executer($requete);
289
		$reussite_autocommit = $this->executer($requete);
283
 
290
 
284
		echo 'OK';
291
		echo 'OK';
285
	}
292
	}
286
	
293
	
287
	/**
294
	/**
288
	 * Annule la transaction et réactive l'auto-commit
295
	 * Annule la transaction et réactive l'auto-commit
289
	 */
296
	 */
290
	private function annulerTransaction() {
297
	private function annulerTransaction() {
291
		// Annule la transaction
298
		// Annule la transaction
292
		$requete = 'ROLLBACK ';
299
		$requete = 'ROLLBACK ';
293
		$reussite_rollback = $this->executer($requete);
300
		$reussite_rollback = $this->executer($requete);
294
 
301
 
295
		// Réactive l'autocommit le temps de la manipulation de l'arbre
302
		// Réactive l'autocommit le temps de la manipulation de l'arbre
296
		$requete = 'SET AUTOCOMMIT = 1 ';
303
		$requete = 'SET AUTOCOMMIT = 1 ';
297
		$reussite_autocommit = $this->executer($requete);
304
		$reussite_autocommit = $this->executer($requete);
298
 
305
 
299
		echo 'ERROR';
306
		echo 'ERROR';
300
	}
307
	}
301
 
308
 
302
	/** 
309
	/** 
303
	 * Renvoie les bornes d'un noeud de l'arbre des mots clés
310
	 * Renvoie les bornes d'un noeud de l'arbre des mots clés
304
	 */
311
	 */
305
	private function calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) {
312
	private function calculerBornesEtNiveau($id_mot_cle,$id_utilisateur) {
306
		$requete = 	'SELECT bd, bg, niveau '.
313
		$requete = 	'SELECT bd, bg, niveau '.
307
					'FROM cel_mots_cles'.$this->suffixe_table.' '.
314
					'FROM cel_mots_cles'.$this->suffixe_table.' '.
308
					'WHERE id_mot_cle'.$this->suffixe_champ.' = '.$this->proteger($id_mot_cle).' '.
315
					'WHERE id_mot_cle'.$this->suffixe_champ.' = '.$this->proteger($id_mot_cle).' '.
309
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
316
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
310
		
317
		
311
		$resultat = $this->requeter($requete);
318
		$resultat = $this->requeter($requete);
312
		
319
		
313
		$valeurs = null;
320
		$valeurs = null;
314
		if(is_array($resultat) && count($resultat) > 0) {
321
		if(is_array($resultat) && count($resultat) > 0) {
315
			$valeurs = $resultat[0];
322
			$valeurs = $resultat[0];
316
		}
323
		}
317
		
324
		
318
		return $valeurs;
325
		return $valeurs;
319
	}
326
	}
320
 
327
 
321
	/**
328
	/**
322
	 * Décale les bornes de deux pour insérer un nouvel élément
329
	 * Décale les bornes de deux pour insérer un nouvel élément
323
	 */ 
330
	 */ 
324
	private function decalerBornesPlusDeux($valeur, $id_utilisateur) {
331
	private function decalerBornesPlusDeux($valeur, $id_utilisateur) {
325
		// Décalage borne droite
332
		// Décalage borne droite
326
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
333
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
327
					'SET bd = bd + 2 WHERE bd >= '.$valeur.' '.
334
					'SET bd = bd + 2 WHERE bd >= '.$valeur.' '.
328
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
335
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
329
		$reussi_1 = $this->executer($requete);
336
		$reussi_1 = $this->executer($requete);
330
		
337
		
331
		// Décalage borne gauche
338
		// Décalage borne gauche
332
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
339
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
333
					'SET bg = bg + 2 '.
340
					'SET bg = bg + 2 '.
334
					'WHERE bg >= '.$valeur.' '.
341
					'WHERE bg >= '.$valeur.' '.
335
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
342
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
336
		$reussi_2 = $this->executer($requete);
343
		$reussi_2 = $this->executer($requete);
337
		
344
		
338
		return $reussi_1 !== false && $reussi_2 !== false;
345
		return $reussi_1 !== false && $reussi_2 !== false;
339
	}
346
	}
340
 
347
 
341
	/**
348
	/**
342
	 * Décale les bornes d'un intervalle negatif donne (pour la suppression d'un sous arbre).
349
	 * Décale les bornes d'un intervalle negatif donne (pour la suppression d'un sous arbre).
343
	 */
350
	 */
344
	private function decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) {
351
	private function decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) {
345
		$decalage = $bd - $bg + 1;
352
		$decalage = $bd - $bg + 1;
346
 
353
 
347
		// Décalage borne droite
354
		// Décalage borne droite
348
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
355
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
349
					'SET bd = bd - '.$decalage.' '.
356
					'SET bd = bd - '.$decalage.' '.
350
					'WHERE bd >=  '.$bg.' '.
357
					'WHERE bd >=  '.$bg.' '.
351
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
358
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
352
		$reussi_1 = $this->executer($requete);
359
		$reussi_1 = $this->executer($requete);
353
 
360
 
354
		// Décalage borne gauche
361
		// Décalage borne gauche
355
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
362
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
356
					'SET bg = bg - '.$decalage.' '.
363
					'SET bg = bg - '.$decalage.' '.
357
					'WHERE bg >  '.$bg.' '.
364
					'WHERE bg >  '.$bg.' '.
358
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
365
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
359
		$reussi_2 = $this->executer($requete);
366
		$reussi_2 = $this->executer($requete);
360
		
367
		
361
		return $reussi_1 !== false && $reussi_2 !== false;
368
		return $reussi_1 !== false && $reussi_2 !== false;
362
	}
369
	}
363
 
370
 
364
	/**
371
	/**
365
	 * Décale à droite des bornes donées d'un intervalle positif donne (pour l'ajout d'un sous arbre).
372
	 * Décale à droite des bornes donées d'un intervalle positif donne (pour l'ajout d'un sous arbre).
366
	 */ 
373
	 */ 
367
	private function decalerBornesPlusIntervalle($valeur_bornes, $largeur, $id_utilisateur) {
374
	private function decalerBornesPlusIntervalle($valeur_bornes, $largeur, $id_utilisateur) {
368
		$decalage = $largeur;
375
		$decalage = $largeur;
369
 
376
 
370
		// decalage borne droite
377
		// decalage borne droite
371
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
378
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
372
					'SET bd = bd + '.$decalage.' '.
379
					'SET bd = bd + '.$decalage.' '.
373
					'WHERE bd >=  '.$valeur_bornes.' '.
380
					'WHERE bd >=  '.$valeur_bornes.' '.
374
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
381
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
375
		$reussi_1 = $this->executer($requete);
382
		$reussi_1 = $this->executer($requete);
376
 
383
 
377
		// decalage borne gauche
384
		// decalage borne gauche
378
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
385
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
379
					'SET bg = bg + '.$decalage.' '.
386
					'SET bg = bg + '.$decalage.' '.
380
					'WHERE bg >=  '.$valeur_bornes.' '.
387
					'WHERE bg >=  '.$valeur_bornes.' '.
381
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
388
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
382
		$reussi_2 = $this->executer($requete);
389
		$reussi_2 = $this->executer($requete);
383
 
390
 
384
		return $reussi_1 !== false && $reussi_2 !== false;
391
		return $reussi_1 !== false && $reussi_2 !== false;
385
	}
392
	}
386
 
393
 
387
	/**
394
	/**
388
	 * Inverse les bornes d'un intervalle pour l'exclure des modifications sur l'arbre sans changer la hiérarchie.
395
	 * Inverse les bornes d'un intervalle pour l'exclure des modifications sur l'arbre sans changer la hiérarchie.
389
	 */
396
	 */
390
	private function exclureIntervalle($bg, $bd, $id_utilisateur) {
397
	private function exclureIntervalle($bg, $bd, $id_utilisateur) {
391
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
398
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
392
					'SET bd = bd - '.$bd.' - 1 , '.
399
					'SET bd = bd - '.$bd.' - 1 , '.
393
					'	bg =  bg -  '.$bd.' - 1 '.
400
					'	bg =  bg -  '.$bd.' - 1 '.
394
					'WHERE bd <=  '.$bd.' '.
401
					'WHERE bd <=  '.$bd.' '.
395
					'	AND bg >=  '.$bg.' '.
402
					'	AND bg >=  '.$bg.' '.
396
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
403
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
397
 
404
 
398
		return $this->executer($requete);
405
		return $this->executer($requete);
399
	}
406
	}
400
 
407
 
401
	/** 
408
	/** 
402
	 * Recale les bornes dun intervalle pour l'inclure dans l'arbre à la bonne place.
409
	 * Recale les bornes dun intervalle pour l'inclure dans l'arbre à la bonne place.
403
	 * Décalage borne droite
410
	 * Décalage borne droite
404
	 */
411
	 */
405
	private function inclureIntervalle($bg, $bd, $decalage,$modif_niveau, $id_utilisateur) {
412
	private function inclureIntervalle($bg, $bd, $decalage,$modif_niveau, $id_utilisateur) {
406
 
413
 
407
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
414
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
408
					'SET bg =  bg + '.$decalage.' , '.
415
					'SET bg =  bg + '.$decalage.' , '.
409
					'	bd = bd + '.$decalage.', '.
416
					'	bd = bd + '.$decalage.', '.
410
					'	niveau = niveau + '.$modif_niveau.' '.
417
					'	niveau = niveau + '.$modif_niveau.' '.
411
					' WHERE bg >=  '.$bg.' '.
418
					' WHERE bg >=  '.$bg.' '.
412
					'	AND bd <=  '.$bd.' '.
419
					'	AND bd <=  '.$bd.' '.
413
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
420
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
414
 
421
 
415
		return $this->executer($requete);
422
		return $this->executer($requete);
416
	}
423
	}
417
 
424
 
418
	private function changerPere($id_mot_cle, $id_pere, $id_utilisateur) {
425
	private function changerPere($id_mot_cle, $id_pere, $id_utilisateur) {
419
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
426
		$requete = 	'UPDATE cel_mots_cles'.$this->suffixe_table.' '.
420
					'SET ce_mot_cle'.$this->suffixe_champ.'_parent = '.$this->proteger($id_pere).' '.
427
					'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).' '.
428
					'WHERE id_mot_cle'.$this->suffixe_champ.' = '.$this->proteger($id_mot_cle).' '.
422
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
429
					'	AND id_utilisateur = '.$this->proteger($id_utilisateur).' ';
423
 
430
 
424
		return $this->executer($requete);
431
		return $this->executer($requete);
425
	}
432
	}
426
 }
433
 }
427
?>
434
?>