security_check();
if ($resultat_session == 'c') {
header("Location: ../utilisateurs/mon_compte.php?change_mdp=yes");
die();
} else if ($resultat_session == '0') {
header("Location: ../logout.php?auto=1");
die();
}
if (!checkAccess()) {
header("Location: ../logout.php?auto=1");
die();
}
// Initialisation des variables
$mode = isset($_POST["mode"]) ? $_POST["mode"] : (isset($_GET["mode"]) ? $_GET["mode"] : false);
$action = isset($_POST["action"]) ? $_POST["action"] : (isset($_GET["action"]) ? $_GET["action"] : false);
// Test SSO. Dans le cas d'un SSO, on laisse le mot de passevide.
$test_sso = ((getSettingValue('use_sso') != "cas" and getSettingValue("use_sso") != "lemon" and (getSettingValue("use_sso") != "lcs") and getSettingValue("use_sso") != "ldap_scribe") OR $block_sso);
$mdp_INE=isset($_POST["mdp_INE"]) ? $_POST["mdp_INE"] : (isset($_GET["mdp_INE"]) ? $_GET["mdp_INE"] : NULL);
$msg = '';
// Si on est en traitement par lot, on sélectionne tout de suite la liste des utilisateurs impliqués
$error = false;
if ($mode == "classe") {
$nb_comptes = 0;
if ($_POST['classe'] == "all") {
$quels_eleves = mysqli_query($GLOBALS["mysqli"], "SELECT distinct(jec.login) login, u.auth_mode " .
"FROM classes c, j_eleves_classes jec, utilisateurs u WHERE (" .
"jec.id_classe = c.id and u.login = jec.login)");
if (!$quels_eleves) $msg .= mysqli_error($GLOBALS["mysqli"]);
} elseif (is_numeric($_POST['classe'])) {
$quels_eleves = mysqli_query($GLOBALS["mysqli"], "SELECT distinct(jec.login), u.auth_mode " .
"FROM classes c, j_eleves_classes jec, utilisateurs u WHERE (" .
"jec.id_classe = '" . $_POST['classe']."' and u.login = jec.login)");
if (!$quels_eleves) $msg .= mysqli_error($GLOBALS["mysqli"]);
} else {
$error = true;
$msg .= "Vous devez sélectionner au moins une classe !
";
}
}
// Trois actions sont possibles depuis cette page : activation, désactivation et suppression.
// L'édition se fait directement sur la page de gestion des responsables
if (!$error) {
if($action) {
check_token();
}
if ($action == "changer_etat_user") {
$sql="SELECT etat FROM utilisateurs WHERE (login = '" . $_GET['eleve_login']."' AND statut = 'eleve')";
$res=mysqli_query($GLOBALS["mysqli"],$sql);
if(mysqli_num_rows($res)==0) {
$msg .= "Erreur : Aucun compte élève n'a été trouvé pour le login indiqué : " . $_GET['eleve_login'];
unset($action);
}
else {
$lig_etat=mysqli_fetch_object($res);
if($lig_etat->etat=="actif") {
$action="rendre_inactif";
}
else {
$action="rendre_actif";
}
}
}
if ($action == "rendre_inactif") {
// Désactivation d'utilisateurs actifs
if ($mode == "individual") {
// Désactivation pour un utilisateur unique
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(login) FROM utilisateurs WHERE (login = '" . $_GET['eleve_login']."' AND etat = 'actif')"), 0);
if ($test == "0") {
$msg .= "Erreur lors de la désactivation de l'utilisateur : celui-ci n'existe pas ou bien est déjà inactif.";
} else {
$res = mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs SET etat='inactif' WHERE (login = '".$_GET['eleve_login']."')");
if ($res) {
$msg .= "L'utilisateur ".$_GET['eleve_login'] . " a été désactivé.";
} else {
$msg .= "Erreur lors de la désactivation de l'utilisateur.";
}
}
} elseif ($mode == "classe" and !$error) {
// Pour tous les élèves qu'on a déjà sélectionnés un peu plus haut, on désactive les comptes
while ($current_eleve = mysqli_fetch_object($quels_eleves)) {
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(login) FROM utilisateurs WHERE login = '" . $current_eleve->login ."'"), 0);
if ($test > 0) {
// L'utilisateur existe bien dans la tables utilisateurs, on désactive
$res = mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs SET etat = 'inactif' WHERE login = '" . $current_eleve->login . "'");
if (!$res) {
$msg .= "Erreur lors de la désactivation du compte ".$current_eleve->login."
";
} else {
$nb_comptes++;
}
}
}
$msg .= "$nb_comptes comptes ont été désactivés.";
}
} elseif ($action == "rendre_actif") {
// Activation d'utilisateurs préalablement désactivés
if ($mode == "individual") {
// Activation pour un utilisateur unique
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(login) FROM utilisateurs WHERE (login = '" . $_GET['eleve_login']."' AND etat = 'inactif')"), 0);
if ($test == "0") {
$msg .= "Erreur lors de la désactivation de l'utilisateur : celui-ci n'existe pas ou bien est déjà actif.";
} else {
$res = mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs SET etat='actif' WHERE (login = '".$_GET['eleve_login']."')");
if ($res) {
$msg .= "L'utilisateur ".$_GET['eleve_login'] . " a été activé.";
} else {
$msg .= "Erreur lors de l'activation de l'utilisateur.";
}
}
} elseif ($mode == "classe") {
// Pour tous les élèves qu'on a déjà sélectionnés un peu plus haut, on désactive les comptes
while ($current_eleve = mysqli_fetch_object($quels_eleves)) {
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(login) FROM utilisateurs WHERE login = '" . $current_eleve->login ."'"), 0);
if ($test > 0) {
// L'utilisateur existe bien dans la tables utilisateurs, on désactive
$res = mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs SET etat = 'actif' WHERE login = '" . $current_eleve->login . "'");
if (!$res) {
$msg .= "Erreur lors de l'activation du compte ".$current_eleve->login."
";
} else {
$nb_comptes++;
}
}
}
$msg .= "$nb_comptes comptes ont été activés.";
}
} elseif ($action == "supprimer") {
$ldap_write_access=false;
//if ($gepiSettings['ldap_write_access']) {
if ($gepiSettings['ldap_write_access']=='yes') {
//echo "\$ldap_write_access
";
$ldap_write_access = true;
$ldap_server = new LDAPServer;
}
// Suppression d'un ou plusieurs utilisateurs
if ($mode == "individual") {
// Suppression pour un utilisateur unique
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(login) FROM utilisateurs WHERE (login = '" . $_GET['eleve_login']."')"), 0);
if ($test == "0") {
$msg .= "Erreur lors de la suppression de l'utilisateur : celui-ci n'existe pas.";
} else {
// Suppression du compte proprement dite:
$res = mysqli_query($GLOBALS["mysqli"], "DELETE FROM utilisateurs WHERE (login = '".$_GET['eleve_login']."')");
if ($res) {
$msg .= "L'utilisateur ".$_GET['eleve_login'] . " a été supprimé.";
if ($ldap_write_access) {
if ($ldap_server->test_user($_GET['eleve_login'])) {
$write_ldap_success = $ldap_server->delete_user($_GET['eleve_login']);
if ($write_ldap_success) {
$msg .= "
L'utilisateur a été supprimé de l'annuaire LDAP.";
}
}
}
// Suppression de scorie éventuelle:
$res3 = mysqli_query($GLOBALS["mysqli"], "DELETE FROM sso_table_correspondance WHERE login_gepi = '".$_GET['eleve_login']."'");
} else {
$msg .= "Erreur lors de la suppression de l'utilisateur.";
}
}
} elseif ($mode == "classe") {
// Pour tous les élèves qu'on a déjà sélectionnés un peu plus haut, on désactive les comptes
while ($current_eleve = mysqli_fetch_object($quels_eleves)) {
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(login) FROM utilisateurs WHERE login = '" . $current_eleve->login ."'"), 0);
if ($test > 0) {
// L'utilisateur existe bien dans la tables utilisateurs, on désactive
$res = mysqli_query($GLOBALS["mysqli"], "DELETE FROM utilisateurs WHERE login = '" . $current_eleve->login . "'");
if (!$res) {
$msg .= "Erreur lors de la suppression du compte ".$current_eleve->login."
";
} else {
$nb_comptes++;
if ($ldap_write_access && $current_eleve->auth_mode != 'gepi') {
if (!$ldap_server->test_user($current_eleve->login)) {
// L'utilisateur n'a pas été trouvé dans l'annuaire.
$write_ldap_success = true;
} else {
$write_ldap_success = $ldap_server->delete_user($current_eleve->login);
}
}
// Suppression de scorie éventuelle:
$res3 = mysqli_query($GLOBALS["mysqli"], "DELETE FROM sso_table_correspondance WHERE login_gepi = '".$current_eleve->login."'");
}
}
}
$msg .= "$nb_comptes comptes ont été supprimés.";
}
} elseif ($action == "reinit_password") {
if ($mode != "classe") {
$msg .= "Erreur : Vous devez sélectionner une classe.";
} elseif ($mode == "classe") {
if(isset($mdp_INE)) {
$chaine_mdp_INE="&mdp_INE=$mdp_INE";
}
else {
$chaine_mdp_INE="";
}
if ($_POST['classe'] == "all") {
$msg .= "Vous allez réinitialiser les mots de passe de tous les utilisateurs ayant le statut 'eleve'.
Si vous êtes vraiment sûr de vouloir effectuer cette opération, cliquez sur le lien ci-dessous :";
$msg .= "
Réinitialiser les mots de passe (Impression HTML)";
$msg .= "
Réinitialiser les mots de passe (Export CSV)";
$msg .= "
Réinitialiser les mots de passe (Impression PDF)";
} else if (is_numeric($_POST['classe'])) {
$msg .= "Vous allez réinitialiser les mots de passe de tous les utilisateurs ayant le statut 'eleve' pour cette classe.
Si vous êtes vraiment sûr de vouloir effectuer cette opération, cliquez sur le lien ci-dessous :";
$msg .= "
Réinitialiser les mots de passe (Impression HTML)";
$msg .= "
Réinitialiser les mots de passe (Export CSV)";
$msg .= "
Réinitialiser les mots de passe (Impression PDF)";
}
}
} elseif ($action == "change_auth_mode") {
$ldap_write_access = false;
if ($gepiSettings['ldap_write_access'] == "yes") {
$ldap_write_access = true;
$ldap_server = new LDAPServer;
}
$nb_comptes = 0;
$reg_auth_mode = (in_array($_POST['reg_auth_mode'], array("gepi", "ldap", "sso"))) ? $_POST['reg_auth_mode'] : "gepi";
if ($mode != "classe") {
$msg .= "Erreur : Vous devez sélectionner une classe.";
} elseif ($mode == "classe") {
while ($current_eleve = mysqli_fetch_object($quels_eleves)) {
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(login) FROM utilisateurs WHERE login = '" . $current_eleve->login ."'"), 0);
if ($test > 0) {
// L'utilisateur existe bien dans la tables utilisateurs, on modifie
// Si on change le mode d'authentification, il faut quelques opérations particulières
$old_auth_mode = $current_eleve->auth_mode;
if ($_POST['reg_auth_mode'] != $old_auth_mode) {
// On modifie !
$nb_comptes++;
$res = mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs SET auth_mode = '".$reg_auth_mode."' WHERE login = '".$current_eleve->login."'");
// On regarde si des opérations spécifiques sont nécessaires
if ($old_auth_mode == "gepi" && ($_POST['reg_auth_mode'] == "ldap" || $_POST['reg_auth_mode'] == "sso")) {
// On passe du mode Gepi à un mode externe : il faut supprimer le mot de passe
$oldmd5password = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT password FROM utilisateurs WHERE login = '".$current_eleve->login."'"), 0);
// 20140301
if(!getSettingAOui('auth_sso_ne_pas_vider_MDP_gepi')) {
mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs SET password = '', salt = '' WHERE login = '".$current_eleve->login."'");
}
// Et si on a un accès en écriture au LDAP, il faut créer l'utilisateur !
if ($ldap_write_access) {
$create_ldap_user = true;
}
} elseif (($old_auth_mode == "sso" || $old_auth_mode == "ldap") && $_POST['reg_auth_mode'] == "gepi") {
// Passage au mode Gepi, rien de spécial à faire, si ce n'est annoncer à l'administrateur
// qu'il va falloir réinitialiser les mots de passe
$pass_init_required = true;
// Et si accès en écriture au LDAP, on supprime le compte.
if ($ldap_write_access) {
$delete_ldap_user = true;
}
}
// On effectue les opérations LDAP
if (isset($create_ldap_user) && $create_ldap_user) {
if (!$ldap_server->test_user($current_eleve->login)) {
$eleve = mysqli_fetch_object(mysqli_query($GLOBALS["mysqli"], "SELECT distinct(e.login), e.nom, e.prenom, e.sexe, e.email " .
"FROM eleves e WHERE (" .
"e.login = '" . $current_eleve->login."')"));
$reg_civilite = $eleve->sexe == "M" ? "M." : "Mlle";
$write_ldap_success = $ldap_server->add_user($eleve->login, $eleve->nom, $eleve->prenom, $eleve->email, $reg_civilite, md5(rand()), "eleve");
// On transfert le mot de passe à la main
$ldap_server->set_manual_password($current_eleve->login, "{MD5}".base64_encode(pack("H*",$oldmd5password)));
}
}
if (isset($delete_ldap_user) && $delete_ldap_user) {
if (!$ldap_server->test_user($current_eleve->login)) {
// L'utilisateur n'a pas été trouvé dans l'annuaire.
$write_ldap_success = true;
} else {
$write_ldap_success = $ldap_server->delete_user($current_eleve->login);
}
}
}
}
}
$msg .= "$nb_comptes comptes ont été modifiés.";
if (isset($pass_init_required) && $pass_init_required) {
$msg .= "
Attention ! Des modifications appliquées nécessitent la réinitialisation de mots de passe !";
}
}
}
}
//**************** EN-TETE *****************
$titre_page = "Modifier des comptes élèves";
require_once("../lib/header.inc.php");
//**************** FIN EN-TETE *****************
?>
Retour |
Ajouter de nouveaux comptes
Aucun compte élève n'existe encore.
Vous pouvez ajouter des comptes élèves à l'aide du lien ci-dessus.
Actions par lot :"; echo "
\n"; echo "Liste des comptes élèves existants :
\n"; echo "\n"; //==================================== $afficher_tous_les_eleves=isset($_POST['afficher_tous_les_eleves']) ? $_POST['afficher_tous_les_eleves'] : "n"; $critere_recherche=isset($_POST['critere_recherche']) ? $_POST['critere_recherche'] : (isset($_GET['critere_recherche']) ? $_GET['critere_recherche'] : ""); //$critere_recherche=preg_replace("/[^a-zA-ZÀÄÂÉÈÊËÎÏÔÖÙÛܽ¼Ççàäâéèêëîïôöùûü_ -]/", "", $critere_recherche); $critere_recherche=nettoyer_caracteres_nom($critere_recherche, 'a', ' -','%'); $critere_id_classe=isset($_POST['critere_id_classe']) ? preg_replace('/[^0-9]/', '', $_POST['critere_id_classe']) : ""; $critere_etat=isset($_POST['critere_etat']) ? $_POST['critere_etat'] : (isset($_GET['critere_etat']) ? $_GET['critere_etat'] : ""); if(!in_array($critere_etat, array('actif', 'inactif'))) { $critere_etat=""; } $critere_auth_mode=isset($_POST['critere_auth_mode']) ? $_POST['critere_auth_mode'] : (isset($_GET['critere_auth_mode']) ? $_GET['critere_auth_mode'] : array()); $critere_sso_corresp=isset($_POST['critere_sso_corresp']) ? $_POST['critere_sso_corresp'] : (isset($_GET['critere_sso_corresp']) ? $_GET['critere_sso_corresp'] : array()); $critere_limit=isset($_POST['critere_limit']) ? $_POST['critere_limit'] : (isset($_GET['critere_limit']) ? $_GET['critere_limit'] : 20); if(($critere_limit=="")||(!preg_match("/^[0-9]*$/", $critere_limit))||($critere_limit<1)) { $critere_limit=20; } //==================================== //++++++++++++++++++++++++ if((isset($critere_recherche))&&($critere_recherche!="")) { $_SESSION['edit_ele_critere_recherche']=$critere_recherche; } if($critere_recherche=="") { if(isset($_SESSION['edit_ele_critere_recherche'])) { if(isset($_GET['test_recup_critere'])) { $critere_recherche=$_SESSION['edit_ele_critere_recherche']; } unset($_SESSION['edit_ele_critere_recherche']); } } //++++++++++++++++++++++++ if((isset($critere_id_classe))&&($critere_id_classe!="")) { $_SESSION['edit_ele_critere_id_classe']=$critere_id_classe; } if($critere_id_classe=="") { if(isset($_SESSION['edit_ele_critere_id_classe'])) { if(isset($_GET['test_recup_critere'])) { $critere_id_classe=$_SESSION['edit_ele_critere_id_classe']; } unset($_SESSION['edit_ele_critere_id_classe']); } } //++++++++++++++++++++++++ if((isset($critere_etat))&&($critere_etat!="")) { $_SESSION['edit_ele_critere_etat']=$critere_etat; } if($critere_etat=="") { if(isset($_SESSION['edit_ele_critere_etat'])) { if(isset($_GET['test_recup_critere'])) { $critere_etat=$_SESSION['edit_ele_critere_etat']; } unset($_SESSION['edit_ele_critere_etat']); } } //++++++++++++++++++++++++ if((isset($critere_auth_mode))&&(is_array($critere_auth_mode))&&(count($critere_auth_mode)>0)) { $_SESSION['edit_ele_critere_auth_mode']=$critere_auth_mode; } if(count($critere_auth_mode)==0) { if(isset($_SESSION['edit_ele_critere_auth_mode'])) { if(isset($_GET['test_recup_critere'])) { $critere_auth_mode=$_SESSION['edit_ele_critere_auth_mode']; } unset($_SESSION['edit_ele_critere_auth_mode']); } } if((isset($critere_etat))&&($critere_etat!="")) { $_SESSION['edit_ele_critere_etat']=$critere_etat; } //++++++++++++++++++++++++ if((isset($critere_sso_corresp))&&(is_array($critere_sso_corresp))&&(count($critere_sso_corresp)>0)) { $_SESSION['edit_ele_critere_sso_corresp']=$critere_sso_corresp; } if(count($critere_sso_corresp)==0) { if(isset($_SESSION['edit_ele_critere_sso_corresp'])) { if(isset($_GET['test_recup_critere'])) { $critere_sso_corresp=$_SESSION['edit_ele_critere_sso_corresp']; } unset($_SESSION['edit_ele_critere_sso_corresp']); } } //++++++++++++++++++++++++ if((isset($critere_limit))&&($critere_limit!="")&&($critere_limit>19)) { $_SESSION['edit_ele_critere_limit']=$critere_limit; } if($critere_limit=="") { if(isset($_SESSION['edit_ele_critere_limit'])) { if(isset($_GET['test_recup_critere'])) { $critere_limit=$_SESSION['edit_ele_critere_limit']; } unset($_SESSION['edit_ele_critere_limit']); } } //++++++++++++++++++++++++ //==================================== echo "\n"; //==================================== echo "\n"; if (mysqli_num_rows($quels_eleves) == "0") { echo "
\n"; ?>$nb_eleves_aff ligne(s)".$complement_nb_lignes." affichée(s).\n"; echo "
0) { $chaine_auth_mode=""; for($loop=0;$loop Identifiant Nom Prénom Etat Mode auth. Actions Classe 0) { $chaine_sso_corresp=""; if(in_array("manquante", $critere_sso_corresp)) { if($chaine_sso_corresp!="") { $chaine_sso_corresp.=" OR "; } $chaine_sso_corresp.="u.login NOT IN ((SELECT login_gepi FROM sso_table_correspondance WHERE login_sso='') UNION ())"; } /* for($loop=0;$loop "; $quels_eleves = mysqli_query($GLOBALS["mysqli"], $sql); $nb_eleves_aff=mysqli_num_rows($quels_eleves); $complement_nb_lignes=""; if((isset($nb_lignes_avant_limit))&&($nb_lignes_avant_limit!=$nb_eleves_aff)) { $complement_nb_lignes=" sur ".$nb_lignes_avant_limit; } $alt=1; while ($current_eleve = mysqli_fetch_object($quels_eleves)) { $alt=$alt*(-1); echo " \n"; echo " \n"; } ?>\n"; echo "".$current_eleve->login.""; echo " \n"; echo "\n"; echo $current_eleve->nom . " " . $current_eleve->prenom; echo " \n"; echo "\n"; //echo $current_eleve->etat; //echo " \n"; $sso_table_login_ent=""; //if(($current_eleve->auth_mode=="sso")&&(getSettingAOui('sso_cas_table'))) { if(getSettingAOui('sso_cas_table')) { $sso_table_login_ent=get_valeur_champ('sso_table_correspondance', "login_gepi='$current_eleve->login'", 'login_sso'); } echo "
"; echo "login', 'etat_".$current_eleve->login."') ;return false;\" title=\"Changer l'état actif/inactif.\">"; if ($current_eleve->etat == "actif") { echo ""; } else { echo ""; } echo "\n"; echo "\n"; echo "login', '$current_eleve->auth_mode', '$sso_table_login_ent') ;return false;\">"; echo ""; echo $current_eleve->auth_mode; if(($current_eleve->auth_mode=="sso")&&(getSettingAOui('sso_cas_table'))) { echo temoin_compte_sso($current_eleve->login); } echo ""; echo ""; echo " \n"; echo "\n"; echo "nom $current_eleve->prenom\">Supprimer\n"; echo " - nom $current_eleve->prenom. Le mot de passe n'est pas modifié, ni affiché.\">Fiche bienvenue\n"; if($current_eleve->etat == "actif" && ($current_eleve->auth_mode == "gepi" || $gepiSettings['ldap_write_access'] == "yes")) { echo " \n"; echo "
"; echo "Réinitialiser le mot de passe : login."&user_status=eleve&mode=html".add_token_in_url()."\" onclick=\"javascript:return confirm('Êtes-vous sûr de vouloir effectuer cette opération ?\\n Celle-ci est irréversible, et réinitialisera le mot de passe de l\'utilisateur avec un mot de passe alpha-numérique généré aléatoirement.\\n En cliquant sur OK, vous lancerez la procédure, qui génèrera une page contenant la fiche-bienvenue à imprimer immédiatement pour distribution à l\'utilisateur concerné.')\" target='_blank'>Aléatoirement"; echo " - login."\" onclick=\"javascript:return confirm('Êtes-vous sûr de vouloir effectuer cette opération ?\\n Celle-ci réinitialisera le mot de passe de l\'utilisateur avec un mot de passe que vous choisirez.\\n En cliquant sur OK, vous lancerez une page qui vous demandera de saisir un mot de passe et de le valider.')\" target='_blank'>choisi "; } echo "\n"; $tmp_class=get_class_from_ele_login($current_eleve->login); if(isset($tmp_class['liste'])) { echo $tmp_class['liste']; } else { echo "Aucune"; } echo " \n"; /* echo "\n"; $tmp_class=get_class_from_ele_login($current_eleve->login); if(isset($tmp_class['liste'])) { echo $tmp_class['liste']; } else { echo "Aucune"; } echo " \n"; */ echo "
Pour créer de nouveaux comptes d'accès associés aux élèves définis dans Gepi, vous devez cliquer sur le lien 'Ajouter de nouveaux comptes' ci-dessus.
\n"; } require("../lib/footer.inc.php");?>