Subversion Repositories eFlore/Applications.cel

Rev

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

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