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'; |
} |