<?php
require_once 'application/class/class_ManageSession.php';

$adminUsers = new AdministrationUsers();
$adminDroits = new AdminDroits();
$login = $_SESSION['Session_Login'];
$isAdmLocal = $_SESSION['AdmLocal'];
$societe = $_SESSION['Session_SocUsr'];
$xml_array = array();

/**
 * Section utilisée lors du 1er appel de la page
 */

if (getValue('action') == 'initialisation') {
    
    // On enregistre le profil de l'utilisateur afin de gérer l'affichage dans les xsl.
    $xml_array['AdmLocal'] = array(
        '!value' => $_SESSION['AdmLocal']
    );
    $xml_array['AdmCentral'] = array(
        '!value' => $_SESSION['AdmCentral']
    );
    $xml_array['multiSoc'] = array(
        '!value' => $_SESSION['Session_UsrMultiSoc']
    );
    
    if ($_SESSION['Session_UsrMultiSoc'] == 1) { // Si utilisateur multisociété
                                             
        // On ajoute les evenements sur les listes
        $xml_array['listeGroupes'] = array(
            '!value' => 1,
            '!onchange' => "Traite('DROITS_users.php?action=selectGroupe',document.forms['admin'].groupes);"
        );
        $xml_array['listeSocietes'] = array(
            '!value' => 1,
            '!onchange' => "Traite('DROITS_users.php?action=selectSociete',document.forms['admin'].societes);"
        );
        $xml_array['listeCentres'] = array(
            '!value' => 1,
            '!onchange' => "Traite('DROITS_users.php?action=selectCentre',document.forms['admin'].centres);"
        );
        // Initialisation des listes : groupes /sociétés / centres
        $adminUsers->buildXML_ListGroup($xml_array, $login, $isAdmLocal);
        $adminUsers->buildXML_ListAllSocietes($xml_array, $login, $isAdmLocal);
        $adminUsers->buildXML_ListAllCentres($xml_array, $login, $isAdmLocal);
    }
    
    if ($_SESSION['Session_UsrMultiSoc'] == 0) {
        
        $xml_array['listeCentres'] = array(
            '!value' => 1,
            '!onchange' => "Traite('DROITS_users.php?action=selectCentre',document.forms['admin'].centres);"
        );
        $adminUsers->buildXML_ListCentre($xml_array, $login, $isAdmLocal, $societe);
    }
    
    $adminUsers->buildXML_ListUsers($xml_array, $login, $isAdmLocal, $_SESSION['Session_UsrMultiSoc'], $societe);
    
    $xml_array['nb_users'] = array(
        '!value' => count($adminUsers->listUsers)
    );
    
    // on definit l'action lorque l'on clique sur la touch entrer (touche 13)
    $action = "Traite('DROITS_users.php?action=rechercheLogin',document.forms['admin'].input_login);";
    $action = cnv_to_javascript($action);
    $xml_array['rechercheLoginAction'] = array(
        '!onclick' => "javascript:TrapKey(event,'13','{$action}');"
    );
    
    // On ajoute ici l'option recherche avec filtre sur le login qui est commune à tous les profils d'administrateur
    $xml_array['rechercheLogin'] = array(
        '!onclick' => "Traite('DROITS_users.php?action=rechercheLogin',document.forms['admin'].input_login);"
    );
    $xml_array['actionReinit'] = array(
        '!onclick' => "CallUrl('DROITS_users.php','action=initialisation');"
    );
    $xml_array['ReduireGestionGroupes'] = array(
        '!onclick' => "collapseExpandMenuOuvrir('gestionGroupes','bouton_groupes','images/normal/reduire.jpg','" . cnv_to_javascript(trad('Réduire le menu')) . "','images/normal/developper.jpg','" . cnv_to_javascript(trad('Développer le menu')) . "');"
    );
    $xml_array['ReduireGestionDroits'] = array(
        '!onclick' => "collapseExpandMenuOuvrir('gestionDroits' ,'bouton_droits' ,'images/normal/reduire.jpg','" . cnv_to_javascript(trad('Réduire le menu')) . "','images/normal/developper.jpg','" . cnv_to_javascript(trad('Développer le menu')) . "');"
    );
    $xml_array['rechercheDroit'] = array(
        '!onclick' => "Traite('DROITS_users.php?action=rechercheDroit',document.forms['admin'].filtre);"
    );
    $xml_array['reinitFiltre'] = array(
        '!onclick' => "Traite('DROITS_users.php?action=reinitRechercheDroit',document.forms['admin'].filtre);"
    );
    $xml_array['reinitDroit'] = array(
        '!onclick' => "CallUrl('DROITS_users.php?action=loadProfil','code_user='+document.getElementById('code_user').value+'&nom_user='+document.getElementById('nom_user').value);"
    );
    
    $js_enregistrer = "if(document.getElementById('code_user').value != '')";
    $js_enregistrer .= "{forwardAllDataFromSelect('DROITS_users.php?action=enregistrer&login='+document.getElementById('code_user').value, new Array(new Array('groupeDroitsUser','groupes'),new Array('droitsUser','droits')));}";
    $js_enregistrer .= "else{alert(\"" . cnv_to_javascript(Trad("Vous devez sélectionner un utilisateur avant d'enregistrer son profil")) . "\");}";
    
    $xml_array['enregistrer'] = array(
        '!onclick' => $js_enregistrer
    );
    
    $js = "if(document.getElementById('listUsersAfterRech').selectedIndex!=-1)";
    $js .= "{var listeLogin = document.getElementById('listUsersAfterRech');";
    $js .= "document.getElementById('code_user').value = listeLogin.options[listeLogin.selectedIndex].value ;";
    $js .= "document.getElementById('nom_user').value  = listeLogin.options[listeLogin.selectedIndex].text  ;";
    $js .= "Traite('DROITS_users.php?action=loadProfil',this);}";
    
    $xml_array['SelectUser'] = array(
        '!onclick' => $js
    );
    
    $xslt = new GenXslt();
    // Affichage du menu du haut
    $menu = 'application/xsl/DROITS_users.xsl';
    echo "getObj('men_gene').innerHTML = \"", HttpReplacePointeur($xslt->XslHtml($menu, $xml_array)), '";';
} 
/**
 * Section utilisée suite aux différentes actions de l'utilisateur
 */

// Si l'utilisateur à sélectionné un groupe ou bien la mention "aucun filtre" sur la liste socciété ou bien la mention "aucun filtre" sur un centre et que la liste société existe avec la mention "aucun filtre"
elseif (getValue('action') == 'selectGroupe' || (getValue('action') == 'selectSociete' && getValue('societes') == '') || (getValue('action') == 'selectCentre' && isset($_POST['societes']) && $_POST['societes'] == '' && $_POST['centres'] == '')) {
    // On réinitialise toutes les listes
    Affichage::reinitElement('groupeDroits');
    Affichage::reinitElement('groupeDroitsUser');
    Affichage::reinitElement('droits');
    Affichage::reinitElement('droitsUser');
    Affichage::reinitElement('selection');
    Affichage::displayElement('module_gestion_droits', false);
    
    // Si la mention "aucun filtre" sur les groupes a été choisies
    if (getValue('groupes') == '') {
        echo "document.getElementById('listUsersAfterRech').innerHTML = '' ;";
        Affichage::reinitSelect('societes', 'Aucun filtre');
        $adminUsers->getListAllSociete($login, $isAdmLocal);
        Affichage::loadSelectJS('societes', $adminUsers->listSociete, 'RAIS_SOC', 'CODE_STE');
        
        // On construit la nouvelle liste des centres
        Affichage::reinitSelect('centres', 'Aucun filtre');
        $adminUsers->getListAllCentre($login, $isAdmLocal);
        Affichage::loadSelectJS('centres', $adminUsers->listCentre, 'RAIS_SOC', 'CODE_CTR');
        
        $adminUsers->getListAllUsers($login, $isAdmLocal);
    }    // Si un groupe a été choisi
    else {
        // Affichage des sociétés du groupe sélectionné
        Affichage::reinitSelect('societes', 'Aucun filtre');
        $adminUsers->getListSocForGroup($login, $isAdmLocal, getValue('groupes'));
        Affichage::loadSelectJS('societes', $adminUsers->listSociete, 'RAIS_SOC', 'CODE_STE');
        
        // Affichage des centres du groupe sélectionné
        $adminUsers->getListAllCentresInGroupe($login, $isAdmLocal, getValue('groupes'));
        Affichage::reinitSelect('centres', 'Aucun filtre');
        Affichage::loadSelectJS('centres', $adminUsers->listCentre, 'RAIS_SOC', 'CODE_CTR');
        
        // Affichage des utilisateur du groupe sélectionné
        $adminUsers->getListAllUsersInGroupe($login, $isAdmLocal, getValue('groupes'));
    }
    
    Affichage::reinitElement('listUsersAfterRech');
    Affichage::loadSelectJS('listUsersAfterRech', $adminUsers->listUsers, 'NOM', 'CODE');
    Affichage::innerHTML('nb_users_trouve', count($adminUsers->listUsers));
    Affichage::displayElement('resultat_recherche', true);
}// Si l'utilisateur a sélectionné une société oui bien s'il a choisi la mention "aucun filtre" sur la liste des centres
elseif ((getValue('action') == 'selectSociete' && getValue('societes') != '') || (getValue('action') == 'selectCentre' && getValue('centres') == '')) {
    
    // On réinitialise toutes les listes
    Affichage::reinitElement('groupeDroits');
    Affichage::reinitElement('groupeDroitsUser');
    Affichage::reinitElement('droits');
    Affichage::reinitElement('droitsUser');
    Affichage::reinitElement('selection');
    Affichage::displayElement('module_gestion_droits', false);
    Affichage::reinitSelect('centres', 'Aucun filtre');
    
    // On supprime la liste précédente
    Affichage::reinitElement('listUsersAfterRech');
    
    if ($_SESSION['Session_UsrMultiSoc'] == 1)
        $societe = getValue('societes');
    else
        $societe = $_SESSION['Session_SocUsr'];
    
    $adminUsers->getListCentreForSoc($login, $isAdmLocal, $societe);
    $adminUsers->getListAllUsersInSte($login, $isAdmLocal, $societe);
    
    Affichage::loadSelectJS('centres', $adminUsers->listCentre, 'RAIS_SOC', 'CODE_CTR');
    Affichage::loadSelectJS('listUsersAfterRech', $adminUsers->listUsers, 'NOM', 'CODE');
    Affichage::innerHTML('nb_users_trouve', count($adminUsers->listUsers));
    Affichage::displayElement('resultat_recherche', true);
}// Si l'utilisateur a sélectionné un centre
elseif (getValue('action') == 'selectCentre' && getValue('centres') != '') {
    // On réinitialise toutes les listes
    Affichage::reinitElement('groupeDroits');
    Affichage::reinitElement('groupeDroitsUser');
    Affichage::reinitElement('droits');
    Affichage::reinitElement('droitsUser');
    Affichage::reinitElement('selection');
    Affichage::displayElement('module_gestion_droits', false);
    
    // On supprime la liste précédente
    Affichage::reinitElement('listUsersAfterRech');
    
    $adminUsers->getListUsersForCtr($login, $isAdmLocal, getValue('centres'));
    Affichage::loadSelectJS('listUsersAfterRech', $adminUsers->listUsers, 'NOM', 'CODE');
    Affichage::innerHTML('nb_users_trouve', count($adminUsers->listUsers));
    Affichage::displayElement('resultat_recherche', true);
    
    $connecteur->disconnect();
    exit();
}// Si l'utilisateur utilise la recherche "contient" sur le login/nom
elseif (getValue('action') == 'rechercheLogin') {
    
    // On réinitialise toutes les listes
    Affichage::reinitElement('groupeDroits');
    Affichage::reinitElement('groupeDroitsUser');
    Affichage::reinitElement('droits');
    Affichage::reinitElement('droitsUser');
    Affichage::reinitElement('selection');
    Affichage::displayElement('module_gestion_droits', false);
    
    if ($_SESSION['Session_UsrMultiSoc'] == 1)
        $adminUsers->getListAllUsers($login, $isAdmLocal);
    elseif ($_SESSION['Session_UsrMultiSoc'] == 0)
        $adminUsers->getListAllUsersInSte($login, $isAdmLocal, $societe);
    
    $adminUsers->filtreListUsers(getValue('input_login'), $adminUsers->listUsers);
    
    // On calcul le nb de résultat trouvé
    Affichage::innerHTML('nb_users_trouve', count($adminUsers->listUsersFiltr));
    
    Affichage::reinitElement('listUsersAfterRech');
    Affichage::loadSelectJS('listUsersAfterRech', $adminUsers->listUsersFiltr, 'NOM', 'CODE');
    
    if (count($adminUsers->listUsersFiltr) == 0)
        Affichage::messageJS(trad("Aucun résultat correspondant à votre recherche n'a été trouvé"));
    else
        Affichage::displayElement('resultat_recherche', true);
}// Si l'utilisateur a sélectionné un login utilisateur afin de charger son profil de droits
elseif (getValue('action') == 'loadProfil') {
    
    // On réinitialise toutes les listes
    Affichage::reinitElement('groupeDroits');
    Affichage::reinitElement('groupeDroitsUser');
    Affichage::reinitElement('droits');
    Affichage::reinitElement('droitsUser');
    Affichage::setAttribut('filtre', 'value', '');
    
    Affichage::innerHTMLwithoutHTMLTrPointeur('selection', getValue('nom_user'));
    Affichage::innerHTMLwithoutHTMLTr('login_gestionGroupes', getValue('nom_user') . "  ({$_POST['code_user']})");
    Affichage::innerHTMLwithoutHTMLTr('login_gestionDroits', getValue('nom_user') . "  ({$_POST['code_user']})");
    
    // Création des listes d'administration des groupes de droits
    $adminDroits->init2ArrayGroupeForUser(getValue('code_user'));
    Affichage::loadSelectJS('groupeDroits', $adminDroits->listeGroupesLeft, 'LIB_GRP', 'COD_GRP');
    
    Affichage::loadSelectJS('groupeDroitsUser', $adminDroits->listeGroupesUser, 'LIB_GRP', 'COD_GRP');
    
    // Création des listes d'administration des droits
    $adminDroits->init2ArrayDroitsForUser(getValue('code_user'));
    
    Affichage::loadSelectJS('droits', $adminDroits->listeDroitsLeft, 'LIB_DR', 'COD_DR', 'COD_DR');
    Affichage::loadSelectJS('droitsUser', $adminDroits->listeDroitsUser, 'LIB_DR', 'COD_DR', 'COD_DR');
    
    // Initialisation des title sur les bouton action avec le nom de l'utilisateur sélectionné par l'administrateur
    Affichage::setAttribut('ajout_groupe', 'title', cnv_to_javascript(trad("Ajouter un groupe à l'utilisateur ") . getValue('nom_user')));
    Affichage::setAttribut('retirer_groupe', 'title', cnv_to_javascript(trad("Retirer un groupe à l'utilisateur ") . getValue('nom_user')));
    Affichage::setAttribut('ajout_droit', 'title', cnv_to_javascript(trad("Ajouter un droit à l'utilisateur ") . getValue('nom_user')));
    Affichage::setAttribut('retirer_droit', 'title', cnv_to_javascript(trad("Retirer un droit à l'utilisateur ") . getValue('nom_user')));
    Affichage::setAttribut('bouton_annul', 'title', cnv_to_javascript(trad("Annuler les modifications effectuées sur les groupes et les droits de l'utilisateur ") . getValue('nom_user')));
    Affichage::setAttribut('bouton_enrg', 'title', cnv_to_javascript(trad("Enregistrer les modifications effectuées sur les groupes et les droits de l'utilisateur ") . getValue('nom_user')));
    
    Affichage::innerHTML('nb_droits_trouves', count($adminDroits->listeDroitsLeft));
    Affichage::displayElement('module_gestion_droits', true);
} elseif (getValue('action') == 'rechercheDroit' || getValue('action') == 'reinitRechercheDroit') {
    
    if (getValue('action') == 'reinitRechercheDroit') {
        $filtre = '';
        Affichage::setAttribut('filtre', 'value', '');
    } else
        $filtre = getValue('filtre');
    
    Affichage::reinitElement('droits');
    
    $adminDroits->init2ArrayDroitsForUser(getValue('listUsersAfterRech'));
    $adminDroits->filtreListDroits($filtre, $adminDroits->listeDroitsLeft);
    
    Affichage::loadSelectJS('droits', $adminDroits->listDroitsFiltr, 'LIB_DR', 'COD_DR', 'COD_DR');
    Affichage::init2SelectAvecDifferenciel('droits', 'droitsUser');
    Affichage::supprimeDoubleOnSelect('droitsUser');
    
    echo "var total = countNbOptionInSelect('droits');";
    echo "document.getElementById('nb_droits_trouves').innerHTML = total ;";
} elseif (getValue('action') == 'enregistrer') {
    
    // la première sous-chaine contient les groupes
    $array_groupes = explode('|#|', getValue('groupes'));
    // la deuxième contient les droits
    $array_droits = explode('|#|', getValue('droits'));
    
    // On prepare le jeux de données à envoyer au wsdl
    $envoi = $adminDroits->prepareArrayForWsdlModifDroitsUser(getValue('login'), $array_groupes, $array_droits);
    $result = $adminDroits->callWsdlRecDroitsGroupesForUser($envoi);
    
    $message = strBuild(trad('Les modifications de groupes et de droits pour @1@'), getValue('login'));
    if ($result['Statut'] == 'O') {
        $message .= trad(' ont été enregistrées.');
    } else {
        $message .= strBuild(trad(' ont échouées : @1@'), $result['Erreur']);
    }
    echo 'alert("', cnv_to_javascript($message), '");';
}

$connecteur->disconnect();
exit();
