Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1842 Rev 1914
Line 40... Line 40...
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]);
-
 
45
		
44
		$this->controleUtilisateur($uid[1]);
Line 46... Line -...
46
		$this->setChampsEtTablePourSuffixe($uid[0]);
-
 
47
		
45
		$this->setChampsEtTablePourSuffixe($uid[0]);
48
		$requete = 	'SELECT mot_cle, id_mot_cle'.$this->suffixe_champ.', ce_mot_cle'.$this->suffixe_champ.'_parent '.
46
		
49
					'FROM cel_mots_cles'.$this->suffixe_table.' '.
47
		$this->envoyerJson(self::getMotsClefs($uid[1], $uid[0]));
50
					'WHERE id_utilisateur = '.Cel::db()->proteger($id_utilisateur).' '.
48
		return TRUE; // compat: pourquoi renvoyer true si vide ?
51
					'ORDER BY niveau ';
-
 
52
		
49
	}
53
		$resultats_mots_cles = Cel::db()->requeter($requete);
50
 
54
		
51
 
-
 
52
	static function getMotsClefs($uid, $type) {
55
		if (is_array($resultats_mots_cles)) {
53
		if($type == 'obs') {
56
			$mots_cles = array();
54
			return Cel::db()->requeter(sprintf(
57
			foreach($resultats_mots_cles as $mot_cle) {
-
 
58
				$mots_cles[] = $mot_cle;
-
 
59
			}
55
				'SELECT mot_cle, id_mot_cle_obs, ce_mot_cle_obs_parent'.
60
						
56
				' FROM cel_mots_cles_obs'.
-
 
57
				' WHERE id_utilisateur = %s'.
61
			$this->envoyerJson($mots_cles);
58
				' ORDER BY niveau',
-
 
59
				Cel::db()->proteger($uid)));
-
 
60
		}
-
 
61
 
-
 
62
		if($type == 'images') {
-
 
63
			return Cel::db()->requeter(sprintf(
-
 
64
				'SELECT mot_cle, id_mot_cle_image, ce_mot_cle_image_parent'.
-
 
65
				' FROM cel_mots_cles_images'.
-
 
66
				' WHERE id_utilisateur = %s'.
-
 
67
				' ORDER BY niveau',
-
 
68
				Cel::db()->proteger($uid)));
-
 
69
		}
-
 
70
		/* pour extraire un mot-clef en particulier (bien que getMotsClefId() soit plus adapté:
-
 
71
		array_walk($ret,
-
 
72
				   create_function('&$val, $k, $keyword',
-
 
73
								   'if($val["mot_cle"] != $keyword) $val = NULL;' .
-
 
74
								   'else $val = $val["id_mot_cle_obs"];'),
-
 
75
				   'XXX');
-
 
76
		$obsKeywordIdToDetach = array_filter($ret);
-
 
77
		$obsKeywordIdToDetach = array_pop($obsKeywordIdToDetach); */
-
 
78
 
-
 
79
		return array();
-
 
80
	}
-
 
81
 
-
 
82
 
-
 
83
	static function getMotsClefId($uid, $type, $keyword) {
-
 
84
		if($type == 'obs') {
-
 
85
			$ret = Cel::db()->requeter(sprintf(
-
 
86
				'SELECT mot_cle, id_mot_cle_obs, ce_mot_cle_obs_parent'.
-
 
87
				' FROM cel_mots_cles_obs'.
-
 
88
				' WHERE id_utilisateur = %s'.
-
 
89
				' AND mot_cle = %s'.
-
 
90
				' ORDER BY niveau',
-
 
91
				Cel::db()->proteger($uid),
-
 
92
				Cel::db()->proteger($keyword) ));
-
 
93
		}
-
 
94
 
-
 
95
		if($type == 'images') {
-
 
96
			$ret = Cel::db()->requeter(sprintf(
-
 
97
				'SELECT mot_cle, id_mot_cle_image, ce_mot_cle_image_parent'.
-
 
98
				' FROM cel_mots_cles_images'.
-
 
99
				' WHERE id_utilisateur = %s'.
-
 
100
				' AND mot_cle = %s'.
-
 
101
				' ORDER BY niveau',
-
 
102
				Cel::db()->proteger($uid),
-
 
103
				Cel::db()->proteger($keyword) ));
62
			return true;
104
		}
Line 63... Line 105...
63
		}
105
		return @$ret[0]['id_mot_cle_obs'];
64
	}
106
	}
65
 
107
 
Line 88... Line 130...
88
			} else {
130
			} else {
89
				return false;
131
				return false;
90
			}
132
			}
91
		} else if ($action == 'deplacement') {
133
		} else if ($action == 'deplacement') {
Line 92... Line 134...
92
			
134
			
Line 93... Line 135...
93
			$this->commencerTransaction();
135
			self::commencerTransaction();
94
			
136
			
95
			$transaction_reussie_1 = true;
137
			$transaction_reussie_1 = true;
96
			$id_pere = $pairs['parent'];
138
			$id_pere = $pairs['parent'];
Line 127... Line 169...
127
			$transaction_reussie_6 = $this->changerPere($id_mot_cle, $id_pere, $id_utilisateur);
169
			$transaction_reussie_6 = $this->changerPere($id_mot_cle, $id_pere, $id_utilisateur);
Line 128... Line 170...
128
 
170
 
129
			if ($transaction_reussie_1 !== false && $transaction_reussie_2 !== false && 
171
			if ($transaction_reussie_1 !== false && $transaction_reussie_2 !== false && 
130
				$transaction_reussie_3 !== false && $transaction_reussie_4 !== false && 
172
				$transaction_reussie_3 !== false && $transaction_reussie_4 !== false && 
131
				$transaction_reussie_5 !== false && $transaction_reussie_6 !== false) {
173
				$transaction_reussie_5 !== false && $transaction_reussie_6 !== false) {
132
				$this->completerTransaction();
174
				self::completerTransaction();
133
				return true;
175
				return true;
134
			} else {
176
			} else {
135
				$this->annulerTransaction();
177
				self::annulerTransaction();
136
				return false;
178
				return false;
137
			}
179
			}
138
		}
180
		}
139
		return true;
181
		return true;
Line 152... Line 194...
152
		$id_mot_cle = $pairs['id'];
194
		$id_mot_cle = $pairs['id'];
153
		$id_parent = $pairs['parent'];
195
		$id_parent = $pairs['parent'];
Line 154... Line 196...
154
 
196
 
Line 155... Line -...
155
		$this->ajouterMotCleRacine($id_utilisateur);
-
 
156
 
-
 
157
		$this->commencerTransaction();
197
		$this->ajouterMotCleRacine($id_utilisateur);
158
 
198
 
159
		$bornes = $this->calculerBornesEtNiveau($id_parent, $id_utilisateur);
199
		$bornes = $this->calculerBornesEtNiveau($id_parent, $id_utilisateur);
160
		$borne_pere = $bornes['bd'];
200
		$borne_pere = $bornes['bd'];
161
		$niveau = $bornes['niveau'] + 1;
201
		$niveau = $bornes['niveau'] + 1;
Line -... Line 202...
-
 
202
		$bg = $bornes['bd'];
-
 
203
		$bd = $bg + 1;
-
 
204
 
162
		$bg = $bornes['bd'];
205
        if(!$borne_pere) return false;
Line 163... Line 206...
163
		$bd = $bg + 1;
206
 
164
 
207
		self::commencerTransaction();
165
		$transaction_reussie_1 = $this->decalerBornesPlusDeux($borne_pere,$id_utilisateur) ? true : false;
208
		$transaction_reussie_1 = $this->decalerBornesPlusDeux($borne_pere,$id_utilisateur) ? true : false;
Line 176... Line 219...
176
					Cel::db()->proteger($id_parent).') ' ;
219
					Cel::db()->proteger($id_parent).') ' ;
Line 177... Line 220...
177
							
220
							
Line 178... Line 221...
178
		$transaction_reussie_2 = Cel::db()->executer($requete);
221
		$transaction_reussie_2 = Cel::db()->executer($requete);
-
 
222
 
-
 
223
		if ($transaction_reussie_1 && $transaction_reussie_2) {
-
 
224
            // on sort de self::createElement ==> JRest::(get|post) ==> JRest->created() qui fait header().
-
 
225
            // or si nous dépassons ini_get(output_buffering) nous ne pouvons plus réécrire le code de retour
-
 
226
            // HTTP, de plus, si ini_get(output_buffering) == off, nous enverrions un warning.
179
 
227
            // d'où ce clone de JRest::created();
180
		if ($transaction_reussie_1 && $transaction_reussie_2) {
228
            header('HTTP/1.0 201 Created');
181
			$this->completerTransaction();
229
			self::completerTransaction();
-
 
230
            exit;
-
 
231
		} else {
182
			return true;
232
            // cf ci-dessus: JRest::badRequest
183
		} else {
233
            header('HTTP/1.0 400 Bad Request');
184
			$this->annulerTransaction();
234
			self::annulerTransaction();
185
			return false;
235
            exit;
186
		}
236
		}
Line 187... Line 237...
187
		return true;
237
		return true;
Line 195... Line 245...
195
		
245
		
196
		$tableau_ids_mots_cles = array();
246
		$tableau_ids_mots_cles = array();
Line 197... Line 247...
197
		$tableau_ids_mots_cles[] = $id_mot_cle;
247
		$tableau_ids_mots_cles[] = $id_mot_cle;
198
 
248
 
Line 199... Line 249...
199
		$this->controleUtilisateur($id_utilisateur);		
249
		$this->controleUtilisateur($id_utilisateur);		
200
		$this->commencerTransaction();
250
		self::commencerTransaction();
201
 
251
 
202
		$bornes  = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur);
252
		$bornes  = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur);
Line 221... Line 271...
221
						
271
						
222
			$transaction_reussie_1 = Cel::db()->executer($requete);
272
			$transaction_reussie_1 = Cel::db()->executer($requete);
Line 223... Line 273...
223
			$transaction_reussie_2 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) ? true : false;
273
			$transaction_reussie_2 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) ? true : false;
224
	
274
	
225
			if ($transaction_reussie_1 !== false && $transaction_reussie_2 !== false) {
275
			if ($transaction_reussie_1 !== false && $transaction_reussie_2 !== false) {
226
				$this->completerTransaction();
276
				self::completerTransaction();
227
			} else {
277
			} else {
228
				$this->annulerTransaction();
278
				self::annulerTransaction();
229
			}
279
			}
230
		}
280
		}
231
		// Suppression des liaisons associées à ce mot clé
281
		// Suppression des liaisons associées à ce mot clé
Line 274... Line 324...
274
	}
324
	}
Line 275... Line 325...
275
 
325
 
276
	/**
326
	/**
277
	 * Désactive l'auto-commit puis débute la transaction
327
	 * Désactive l'auto-commit puis débute la transaction
278
	 */
328
	 */
279
	private function commencerTransaction() {
329
	static function commencerTransaction() {
280
		// Désactive l'autocommit le temps de la manipulation de l'arbre
-
 
281
		$requete = 'SET AUTOCOMMIT = 0 ';
330
		// Désactive l'autocommit le temps de la manipulation de l'arbre
282
		$reussite_autocommit = Cel::db()->executer($requete);
-
 
283
 
331
		$reussite_autocommit = Cel::db()->executer("SET AUTOCOMMIT = 0");
284
		// Débute une nouvelle transaction
-
 
285
		$requete = 'BEGIN ';
332
		// Débute une nouvelle transaction
286
		$reussite_begin = Cel::db()->executer($requete);
333
		$reussite_begin = Cel::db()->executer("BEGIN");
Line 287... Line 334...
287
	}
334
	}
288
 
335
 
289
	/**
336
	/**
290
	 * Termine la transaction puis réactive l'auto-commit
337
	 * Termine la transaction puis réactive l'auto-commit
291
	 */
338
	 */
292
	private function completerTransaction() {
-
 
293
		// Complète la transaction
339
	static function completerTransaction() {
294
		$requete = 'COMMIT ';
-
 
295
		$reussite_commit = Cel::db()->executer($requete);
340
		// Complète la transaction
296
 
-
 
297
		// Réactive l'autocommit le temps de la manipulation de l'arbre
341
		$reussite_commit = Cel::db()->executer("COMMIT");
Line 298... Line 342...
298
		$requete = 'SET AUTOCOMMIT = 1 ';
342
		// Réactive l'autocommit le temps de la manipulation de l'arbre
299
		$reussite_autocommit = Cel::db()->executer($requete);
343
		$reussite_autocommit = Cel::db()->executer("SET AUTOCOMMIT = 1");
Line 300... Line 344...
300
 
344
 
301
		echo 'OK';
345
		echo 'OK';
302
	}
346
	}
303
	
347
	
304
	/**
348
	/**
305
	 * Annule la transaction et réactive l'auto-commit
-
 
306
	 */
349
	 * Annule la transaction et réactive l'auto-commit
307
	private function annulerTransaction() {
-
 
308
		// Annule la transaction
350
	 */
309
		$requete = 'ROLLBACK ';
-
 
310
		$reussite_rollback = Cel::db()->executer($requete);
351
	static function annulerTransaction() {
Line 311... Line 352...
311
 
352
		// Annule la transaction
312
		// Réactive l'autocommit le temps de la manipulation de l'arbre
353
		$reussite_rollback = Cel::db()->executer("ROLLBACK");
Line 313... Line 354...
313
		$requete = 'SET AUTOCOMMIT = 1 ';
354
		// Réactive l'autocommit le temps de la manipulation de l'arbre