예제 #1
0
// Retirer une liaison
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'supprimer' && $user_id) {
    // Par sécurité et pour actualiser une éventuelle liaison (dé)faite depuis un autre compte, on ne stocke en session que l'identifiant de la clef des associations
    // La méthode appelée ci-dessous effectue de multiples vérifications complémentaires
    list($_SESSION['USER_SWITCH_ID'], $user_liste) = DB_STRUCTURE_SWITCH::DB_recuperer_et_verifier_listing_comptes_associes($_SESSION['USER_ID'], $_SESSION['USER_SWITCH_ID']);
    if (!$_SESSION['USER_SWITCH_ID']) {
        exit_json(FALSE, 'Aucune liaison de compte vous concernant n\'a été trouvée !');
    }
    $tab_user = explode(',', $user_liste);
    $user_key = array_search($user_id, $tab_user);
    if ($user_key === FALSE) {
        exit_json(FALSE, 'Le compte indiqué n\'est pas relié au votre !');
    }
    // Ok pour supprimer la liaison
    unset($tab_user[$user_key]);
    // Soit on n'est plus relié avec personne...
    if (count($tab_user) == 1) {
        DB_STRUCTURE_SWITCH::DB_supprimer_comptes_associes($_SESSION['USER_SWITCH_ID']);
        $_SESSION['USER_SWITCH_ID'] = NULL;
    } else {
        $user_liste = implode(',', $tab_user);
        DB_STRUCTURE_SWITCH::DB_modifier_comptes_associes($_SESSION['USER_SWITCH_ID'], $user_liste);
    }
    // Afficher le retour
    exit_json(TRUE);
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// On ne devrait pas en arriver là !
// ////////////////////////////////////////////////////////////////////////////////////////////////////
exit_json(FALSE, 'Erreur avec les données transmises !');
예제 #2
0
 /**
  * recuperer_et_verifier_listing_comptes_associes
  *
  * @param int   $user_id
  * @param int   $user_switch_id
  * @return array ($user_switch_id,$user_liste)
  */
 public static function DB_recuperer_et_verifier_listing_comptes_associes($user_id, $user_switch_id)
 {
     $user_liste = NULL;
     // Un "user_switch_id" est transmis : on recherche sur user_switch_liste, tout en vérifiant quand même que le user_id est dans la liste...
     if ($user_switch_id) {
         $DB_SQL = 'SELECT user_switch_id AS "0", user_switch_liste AS "1" ';
         // Pour la récupération avec list()
         $DB_SQL .= 'FROM sacoche_user_switch ';
         $DB_SQL .= 'WHERE user_switch_id = :user_switch_id ';
         $DB_SQL .= 'AND user_switch_liste LIKE :switch_liste_like ';
         $DB_VAR = array(':user_switch_id' => $user_switch_id, ':switch_liste_like' => '%,' . $user_id . ',%');
         list($user_switch_id, $user_switch_liste) = DB::queryRow(SACOCHE_STRUCTURE_BD_NAME, $DB_SQL, $DB_VAR) + array(NULL, NULL);
     }
     // Soit on n'est pas passé dans le test précédent, soit la liste récupérée ne contenait curieusement pas l'id du user : on recherche sur l'id du user, même s'il n'est pas normal qu'un rapprochement existe et ne soit pas transmis
     if (!$user_switch_id) {
         $DB_SQL = 'SELECT user_switch_id AS "0", user_switch_liste AS "1" ';
         // Pour la récupération avec list()
         $DB_SQL .= 'FROM sacoche_user_switch ';
         $DB_SQL .= 'WHERE user_switch_liste LIKE :switch_liste_like ';
         $DB_SQL .= 'LIMIT 1 ';
         // Au cas où, même s'il ne devrait pas y avoir un même user sur des regroupement
         $DB_VAR = array(':switch_liste_like' => '%,' . $user_id . ',%');
         list($user_switch_id, $user_switch_liste) = DB::queryRow(SACOCHE_STRUCTURE_BD_NAME, $DB_SQL, $DB_VAR) + array(NULL, NULL);
     }
     // S'il y a des comptes associés, on vérifie qu'il n'y ait pas que le user_id dedans !
     if ($user_switch_id && $user_switch_liste == ',' . $user_id . ',') {
         DB_STRUCTURE_SWITCH::DB_supprimer_comptes_associes($user_switch_id);
         list($user_switch_id, $user_switch_liste) = array(NULL, NULL);
     }
     // S'il y a des comptes associés, on vérifie que ce ne soient pas des comptes supprimés ou désactivés (si c'est le cas, alors on met la liste à jour)
     if ($user_switch_id) {
         $user_liste = substr($user_switch_liste, 1, -1);
         // Lever si besoin une limitation de GROUP_CONCAT (group_concat_max_len est par défaut limité à une chaine de 1024 caractères) ; éviter plus de 8096 (http://www.glpi-project.org/forum/viewtopic.php?id=23767).
         DB::query(SACOCHE_STRUCTURE_BD_NAME, 'SET group_concat_max_len = 8096');
         $DB_SQL = 'SELECT GROUP_CONCAT(user_id ORDER BY user_id ASC SEPARATOR ",") AS user_switch_liste ';
         $DB_SQL .= 'FROM sacoche_user ';
         $DB_SQL .= 'WHERE user_id IN(' . $user_liste . ') AND user_sortie_date>NOW() ';
         $user_liste = DB::queryOne(SACOCHE_STRUCTURE_BD_NAME, $DB_SQL, NULL);
         if ($user_liste != substr($user_switch_liste, 1, -1)) {
             // On a trouvé une différence...
             if ($user_liste == $user_id) {
                 // Si seul le compte utilisé est envore actif, alors il n'y a plus de liaison
                 DB_STRUCTURE_SWITCH::DB_supprimer_comptes_associes($user_switch_id);
                 list($user_switch_id, $user_liste) = array(NULL, NULL);
             } else {
                 // Sinon on met à jour avec la liste des comptes actifs
                 DB_STRUCTURE_SWITCH::DB_modifier_comptes_associes($user_switch_id, $user_liste);
             }
         }
     }
     return array($user_switch_id, $user_liste);
 }