Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1913 → Rev 1914

/branches/v1.7-croissant/jrest/services/InventoryKeyWordList.php
42,27 → 42,69
// Controle detournement utilisateur
$id_utilisateur = $uid[1] ;
$this->controleUtilisateur($uid[1]);
$this->setChampsEtTablePourSuffixe($uid[0]);
$requete = 'SELECT mot_cle, id_mot_cle'.$this->suffixe_champ.', ce_mot_cle'.$this->suffixe_champ.'_parent '.
'FROM cel_mots_cles'.$this->suffixe_table.' '.
'WHERE id_utilisateur = '.Cel::db()->proteger($id_utilisateur).' '.
'ORDER BY niveau ';
$resultats_mots_cles = Cel::db()->requeter($requete);
if (is_array($resultats_mots_cles)) {
$mots_cles = array();
foreach($resultats_mots_cles as $mot_cle) {
$mots_cles[] = $mot_cle;
}
$this->envoyerJson($mots_cles);
return true;
$this->envoyerJson(self::getMotsClefs($uid[1], $uid[0]));
return TRUE; // compat: pourquoi renvoyer true si vide ?
}
 
 
static function getMotsClefs($uid, $type) {
if($type == 'obs') {
return Cel::db()->requeter(sprintf(
'SELECT mot_cle, id_mot_cle_obs, ce_mot_cle_obs_parent'.
' FROM cel_mots_cles_obs'.
' WHERE id_utilisateur = %s'.
' ORDER BY niveau',
Cel::db()->proteger($uid)));
}
 
if($type == 'images') {
return Cel::db()->requeter(sprintf(
'SELECT mot_cle, id_mot_cle_image, ce_mot_cle_image_parent'.
' FROM cel_mots_cles_images'.
' WHERE id_utilisateur = %s'.
' ORDER BY niveau',
Cel::db()->proteger($uid)));
}
/* pour extraire un mot-clef en particulier (bien que getMotsClefId() soit plus adapté:
array_walk($ret,
create_function('&$val, $k, $keyword',
'if($val["mot_cle"] != $keyword) $val = NULL;' .
'else $val = $val["id_mot_cle_obs"];'),
'XXX');
$obsKeywordIdToDetach = array_filter($ret);
$obsKeywordIdToDetach = array_pop($obsKeywordIdToDetach); */
 
return array();
}
 
 
static function getMotsClefId($uid, $type, $keyword) {
if($type == 'obs') {
$ret = Cel::db()->requeter(sprintf(
'SELECT mot_cle, id_mot_cle_obs, ce_mot_cle_obs_parent'.
' FROM cel_mots_cles_obs'.
' WHERE id_utilisateur = %s'.
' AND mot_cle = %s'.
' ORDER BY niveau',
Cel::db()->proteger($uid),
Cel::db()->proteger($keyword) ));
}
 
if($type == 'images') {
$ret = Cel::db()->requeter(sprintf(
'SELECT mot_cle, id_mot_cle_image, ce_mot_cle_image_parent'.
' FROM cel_mots_cles_images'.
' WHERE id_utilisateur = %s'.
' AND mot_cle = %s'.
' ORDER BY niveau',
Cel::db()->proteger($uid),
Cel::db()->proteger($keyword) ));
}
return @$ret[0]['id_mot_cle_obs'];
}
 
public function updateElement($uid, $pairs) {
$id_utilisateur = $uid[1];
$this->controleUtilisateur($uid[1]);
90,7 → 132,7
}
} else if ($action == 'deplacement') {
$this->commencerTransaction();
self::commencerTransaction();
$transaction_reussie_1 = true;
$id_pere = $pairs['parent'];
129,10 → 171,10
if ($transaction_reussie_1 !== false && $transaction_reussie_2 !== false &&
$transaction_reussie_3 !== false && $transaction_reussie_4 !== false &&
$transaction_reussie_5 !== false && $transaction_reussie_6 !== false) {
$this->completerTransaction();
self::completerTransaction();
return true;
} else {
$this->annulerTransaction();
self::annulerTransaction();
return false;
}
}
154,8 → 196,6
 
$this->ajouterMotCleRacine($id_utilisateur);
 
$this->commencerTransaction();
 
$bornes = $this->calculerBornesEtNiveau($id_parent, $id_utilisateur);
$borne_pere = $bornes['bd'];
$niveau = $bornes['niveau'] + 1;
162,6 → 202,9
$bg = $bornes['bd'];
$bd = $bg + 1;
 
if(!$borne_pere) return false;
 
self::commencerTransaction();
$transaction_reussie_1 = $this->decalerBornesPlusDeux($borne_pere,$id_utilisateur) ? true : false;
$requete = 'INSERT INTO cel_mots_cles'.$this->suffixe_table.' '.
178,11 → 221,18
$transaction_reussie_2 = Cel::db()->executer($requete);
 
if ($transaction_reussie_1 && $transaction_reussie_2) {
$this->completerTransaction();
return true;
// on sort de self::createElement ==> JRest::(get|post) ==> JRest->created() qui fait header().
// or si nous dépassons ini_get(output_buffering) nous ne pouvons plus réécrire le code de retour
// HTTP, de plus, si ini_get(output_buffering) == off, nous enverrions un warning.
// d'où ce clone de JRest::created();
header('HTTP/1.0 201 Created');
self::completerTransaction();
exit;
} else {
$this->annulerTransaction();
return false;
// cf ci-dessus: JRest::badRequest
header('HTTP/1.0 400 Bad Request');
self::annulerTransaction();
exit;
}
return true;
}
197,7 → 247,7
$tableau_ids_mots_cles[] = $id_mot_cle;
 
$this->controleUtilisateur($id_utilisateur);
$this->commencerTransaction();
self::commencerTransaction();
 
$bornes = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur);
if($bornes) {
223,9 → 273,9
$transaction_reussie_2 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) ? true : false;
if ($transaction_reussie_1 !== false && $transaction_reussie_2 !== false) {
$this->completerTransaction();
self::completerTransaction();
} else {
$this->annulerTransaction();
self::annulerTransaction();
}
}
// Suppression des liaisons associées à ce mot clé
276,27 → 326,21
/**
* Désactive l'auto-commit puis débute la transaction
*/
private function commencerTransaction() {
static function commencerTransaction() {
// Désactive l'autocommit le temps de la manipulation de l'arbre
$requete = 'SET AUTOCOMMIT = 0 ';
$reussite_autocommit = Cel::db()->executer($requete);
 
$reussite_autocommit = Cel::db()->executer("SET AUTOCOMMIT = 0");
// Débute une nouvelle transaction
$requete = 'BEGIN ';
$reussite_begin = Cel::db()->executer($requete);
$reussite_begin = Cel::db()->executer("BEGIN");
}
 
/**
* Termine la transaction puis réactive l'auto-commit
*/
private function completerTransaction() {
static function completerTransaction() {
// Complète la transaction
$requete = 'COMMIT ';
$reussite_commit = Cel::db()->executer($requete);
 
$reussite_commit = Cel::db()->executer("COMMIT");
// Réactive l'autocommit le temps de la manipulation de l'arbre
$requete = 'SET AUTOCOMMIT = 1 ';
$reussite_autocommit = Cel::db()->executer($requete);
$reussite_autocommit = Cel::db()->executer("SET AUTOCOMMIT = 1");
 
echo 'OK';
}
304,14 → 348,11
/**
* Annule la transaction et réactive l'auto-commit
*/
private function annulerTransaction() {
static function annulerTransaction() {
// Annule la transaction
$requete = 'ROLLBACK ';
$reussite_rollback = Cel::db()->executer($requete);
 
$reussite_rollback = Cel::db()->executer("ROLLBACK");
// Réactive l'autocommit le temps de la manipulation de l'arbre
$requete = 'SET AUTOCOMMIT = 1 ';
$reussite_autocommit = Cel::db()->executer($requete);
$reussite_autocommit = Cel::db()->executer("SET AUTOCOMMIT = 1");
 
echo 'ERROR';
}