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();
}
//debug_var();
// 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);
$msg = '';
$compteur_aff_time=0;
function aff_time() {
global $compteur_aff_time;
// Pour tenter de repérer à quel niveau cela traine:
$debug=0;
if($debug==1) {
echo "$compteur_aff_time: ".strftime("%D %T")."
";
}
$compteur_aff_time++;
}
aff_time();
// 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_parents = mysqli_query($GLOBALS["mysqli"], "SELECT distinct(r.login), u.auth_mode " .
"FROM utilisateurs u, resp_pers r, responsables2 re, classes c, j_eleves_classes jec, eleves e WHERE (" .
"u.login = r.login AND r.pers_id = re.pers_id AND " .
"re.ele_id = e.ele_id AND " .
"e.login = jec.login AND " .
"jec.id_classe = c.id)");
if (!$quels_parents) $msg .= mysqli_error($GLOBALS["mysqli"]);
} elseif (is_numeric($_POST['classe'])) {
$quels_parents = mysqli_query($GLOBALS["mysqli"], "SELECT distinct(r.login), u.auth_mode " .
"FROM utilisateurs u, resp_pers r, responsables2 re, classes c, j_eleves_classes jec, eleves e WHERE (" .
"u.login = r.login AND r.pers_id = re.pers_id AND " .
"re.ele_id = e.ele_id AND " .
"e.login = jec.login AND " .
"jec.id_classe = '" . $_POST['classe']."')");
if (!$quels_parents) $msg .= mysqli_error($GLOBALS["mysqli"]);
} else {
$error = true;
$msg .= "Vous devez sélectionner au moins une classe !
";
}
}
aff_time();
if((isset($_GET['acces_resp_legal_0']))&&(($_GET['acces_resp_legal_0']=='y')||($_GET['acces_resp_legal_0']=='n'))) {
check_token();
$sql="UPDATE responsables2 SET acces_sp='".$_GET['acces_resp_legal_0']."' WHERE pers_id='".$_GET['pers_id']."' AND ele_id='".$_GET['ele_id']."';";
$update=mysqli_query($GLOBALS["mysqli"], $sql);
if($update) {
$msg="Modification de l'accès aux données pour pers_id=".$_GET['pers_id']." et ele_id=".$_GET['ele_id']." effectuée.
";
}
else {
$msg="Erreur lors de la modification de l'accès aux données pour pers_id=".$_GET['pers_id']." et ele_id=".$_GET['ele_id']."
";
}
}
// 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['parent_login']."' AND statut = 'responsable')";
$res=mysqli_query($GLOBALS["mysqli"],$sql);
if(mysqli_num_rows($res)==0) {
$msg .= "Erreur : Aucun compte responsable n'a été trouvé pour le login indiqué : " . $_GET['parent_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['parent_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['parent_login']."')");
if ($res) {
$msg .= "L'utilisateur ".$_GET['parent_login'] . " a été désactivé.";
} else {
$msg .= "Erreur lors de la désactivation de l'utilisateur.";
}
}
} elseif ($mode == "classe" and !$error) {
// Pour tous les parents qu'on a déjà sélectionnés un peu plus haut, on désactive les comptes
while ($current_parent = mysqli_fetch_object($quels_parents)) {
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(login) FROM utilisateurs WHERE login = '" . $current_parent->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_parent->login . "'");
if (!$res) {
$msg .= "Erreur lors de la désactivation du compte ".$current_parent->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['parent_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['parent_login']."')");
if ($res) {
$msg .= "L'utilisateur ".$_GET['parent_login'] . " a été activé.";
} else {
$msg .= "Erreur lors de l'activation de l'utilisateur.";
}
}
} elseif ($mode == "classe") {
// Pour tous les parents qu'on a déjà sélectionnés un peu plus haut, on désactive les comptes
while ($current_parent = mysqli_fetch_object($quels_parents)) {
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(login) FROM utilisateurs WHERE login = '" . $current_parent->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_parent->login . "'");
if (!$res) {
$msg .= "Erreur lors de l'activation du compte ".$current_parent->login."
";
} else {
$nb_comptes++;
}
}
}
$msg .= "$nb_comptes comptes ont été activés.";
}
} elseif ($action == "supprimer") {
// 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['parent_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['parent_login']."')");
if ($res) {
$msg .= "L'utilisateur ".$_GET['parent_login'] . " a été supprimé.";
// Réinitialisation du champ login dans la table 'resp_pers':
$res2 = mysqli_query($GLOBALS["mysqli"], "UPDATE resp_pers SET login='' WHERE login = '".$_GET['parent_login'] . "'");
// Suppression de scorie éventuelle:
$res3 = mysqli_query($GLOBALS["mysqli"], "DELETE FROM sso_table_correspondance WHERE login_gepi = '".$_GET['parent_login']."'");
} else {
$msg .= "Erreur lors de la suppression de l'utilisateur.";
}
}
} elseif ($mode == "classe") {
// Pour tous les parents qu'on a déjà sélectionnés un peu plus haut, on désactive les comptes
while ($current_parent = mysqli_fetch_object($quels_parents)) {
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(login) FROM utilisateurs WHERE login = '" . $current_parent->login ."'"), 0);
if ($test > 0) {
// L'utilisateur existe bien dans la tables utilisateurs, on désactive
// Suppression du compte proprement dite:
$res = mysqli_query($GLOBALS["mysqli"], "DELETE FROM utilisateurs WHERE login = '" . $current_parent->login . "'");
if (!$res) {
$msg .= "Erreur lors de l'activation du compte ".$current_parent->login."
";
} else {
// Réinitialisation du champ login dans la table 'resp_pers':
$res = mysqli_query($GLOBALS["mysqli"], "UPDATE resp_pers SET login = '' WHERE login = '" . $current_parent->login ."'");
// Suppression de scorie éventuelle:
$res3 = mysqli_query($GLOBALS["mysqli"], "DELETE FROM sso_table_correspondance WHERE login_gepi = '".$current_parent->login."'");
$nb_comptes++;
}
}
}
$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 ($_POST['classe'] == "all") {
$msg .= "Vous allez réinitialiser les mots de passe de tous les utilisateurs ayant le statut 'responsable'.
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) - ou (Impression HTML avec adresse)";
$msg .= "
Réinitialiser les mots de passe (Export CSV)";
} else if (is_numeric($_POST['classe'])) {
$msg .= "Vous allez réinitialiser les mots de passe de tous les utilisateurs ayant le statut 'responsable' pour la classe de ".get_class_from_id($_POST['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) - ou (Impression HTML avec adresse)";
$msg .= "
Réinitialiser les mots de passe (Export CSV)";
}
}
}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_parent = mysqli_fetch_object($quels_parents)) {
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(login) FROM utilisateurs WHERE login = '" . $current_parent->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_parent->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_parent->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_parent->login."'"), 0);
// 20140301
if(!getSettingAOui('auth_sso_ne_pas_vider_MDP_gepi')) {
mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs SET password = '', salt = '' WHERE login = '".$current_parent->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_parent->login)) {
$parent = mysqli_fetch_object(mysqli_query($GLOBALS["mysqli"], "SELECT distinct(r.login), r.nom, r.prenom, r.civilite, r.mel " .
"FROM resp_pers r WHERE (" .
"r.login = '" . $current_parent->login."')"));
$write_ldap_success = $ldap_server->add_user($parent->login, $parent->nom, $parent->prenom, $parent->mel, $parent->civilite, md5(rand()), "responsable");
// On transfert le mot de passe à la main
$ldap_server->set_manual_password($current_parent->login, "{MD5}".base64_encode(pack("H*",$oldmd5password)));
}
}
if (isset($delete_ldap_user) && $delete_ldap_user) {
if (!$ldap_server->test_user($current_parent->login)) {
// L'utilisateur n'a pas été trouvé dans l'annuaire.
$write_ldap_success = true;
} else {
$write_ldap_success = $ldap_server->delete_user($current_parent->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 des utilisateurs !";
}
}
}
}
aff_time();
//**************** EN-TETE *****************
$titre_page = "Modifier des comptes responsables";
require_once("../lib/header.inc.php");
//**************** FIN EN-TETE *****************
//debug_var();
aff_time();
?>
Retour |
Ajouter de nouveaux comptes
Aucun compte responsable n'existe encore.
Vous pouvez ajouter des comptes responsables à l'aide du lien ci-dessus.
Liste des comptes responsables existants :
\n"; echo "\n"; $afficher_tous_les_resp=isset($_POST['afficher_tous_les_resp']) ? $_POST['afficher_tous_les_resp'] : (isset($_GET['afficher_tous_les_resp']) ? $_GET['afficher_tous_les_resp'] : "n"); $critere_recherche=isset($_POST['critere_recherche']) ? $_POST['critere_recherche'] : (isset($_GET['critere_recherche']) ? $_GET['critere_recherche'] : ""); //$critere_recherche=preg_replace("/[^a-zA-ZÀÄÂÉÈÊËÎÏÔÖÙÛܽ¼Ççàäâéèêëîïôöùûü_ -]/u", "", $critere_recherche); $critere_recherche=nettoyer_caracteres_nom($critere_recherche, 'a', ' -',''); $critere_recherche_login=isset($_POST['critere_recherche_login']) ? $_POST['critere_recherche_login'] : (isset($_GET['critere_recherche_login']) ? $_GET['critere_recherche_login'] : ""); //$critere_recherche_login=preg_replace("/[^a-zA-ZÀÄÂÉÈÊËÎÏÔÖÙÛܽ¼Ççàäâéèêëîïôöùûü_ -]/u", "", $critere_recherche_login); $critere_recherche_login=nettoyer_caracteres_nom($critere_recherche_login, 'a', ' -_.',''); $critere_id_classe=isset($_POST['critere_id_classe']) ? preg_replace('/[^0-9]/', '', $_POST['critere_id_classe']) : (isset($_POST['classe']) ? preg_replace('/[^0-9]/', '', $_POST['classe']) : (isset($_GET['critere_id_classe']) ? preg_replace('/[^0-9]/', '', $_GET['critere_id_classe']) : (isset($_GET['classe']) ? preg_replace('/[^0-9]/', '', $_GET['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_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_resp_critere_recherche']=$critere_recherche; } if($critere_recherche=="") { if(isset($_SESSION['edit_resp_critere_recherche'])) { if(isset($_GET['test_recup_critere'])) { $critere_recherche=$_SESSION['edit_resp_critere_recherche']; } unset($_SESSION['edit_resp_critere_recherche']); } } //++++++++++++++++++++++++ if((isset($critere_recherche_login))&&($critere_recherche_login!="")) { $_SESSION['edit_resp_critere_recherche_login']=$critere_recherche_login; } if($critere_recherche_login=="") { if(isset($_SESSION['edit_resp_critere_recherche_login'])) { if(isset($_GET['test_recup_critere'])) { $critere_recherche_login=$_SESSION['edit_resp_critere_recherche_login']; } unset($_SESSION['edit_resp_critere_recherche_login']); } } //++++++++++++++++++++++++ if((isset($critere_id_classe))&&($critere_id_classe!="")) { $_SESSION['edit_resp_critere_id_classe']=$critere_id_classe; } if($critere_id_classe=="") { if(isset($_SESSION['edit_resp_critere_id_classe'])) { if(isset($_GET['test_recup_critere'])) { $critere_id_classe=$_SESSION['edit_resp_critere_id_classe']; } unset($_SESSION['edit_resp_critere_id_classe']); } } //++++++++++++++++++++++++ if((isset($critere_etat))&&($critere_etat!="")) { $_SESSION['edit_resp_critere_etat']=$critere_etat; } if($critere_etat=="") { if(isset($_SESSION['edit_resp_critere_etat'])) { if(isset($_GET['test_recup_critere'])) { $critere_etat=$_SESSION['edit_resp_critere_etat']; } unset($_SESSION['edit_resp_critere_etat']); } } //++++++++++++++++++++++++ if((isset($critere_auth_mode))&&(is_array($critere_auth_mode))&&(count($critere_auth_mode)>0)) { $_SESSION['edit_resp_critere_auth_mode']=$critere_auth_mode; } if(count($critere_auth_mode)==0) { if(isset($_SESSION['edit_resp_critere_auth_mode'])) { if(isset($_GET['test_recup_critere'])) { $critere_auth_mode=$_SESSION['edit_resp_critere_auth_mode']; } unset($_SESSION['edit_resp_critere_auth_mode']); } } if((isset($critere_etat))&&($critere_etat!="")) { $_SESSION['edit_resp_critere_etat']=$critere_etat; } //++++++++++++++++++++++++ if((isset($critere_limit))&&($critere_limit!="")&&($critere_limit>19)) { $_SESSION['edit_resp_critere_limit']=$critere_limit; } if($critere_limit=="") { if(isset($_SESSION['edit_resp_critere_limit'])) { if(isset($_GET['test_recup_critere'])) { $critere_limit=$_SESSION['edit_resp_critere_limit']; } unset($_SESSION['edit_resp_critere_limit']); } } //++++++++++++++++++++++++ $rowspan=6; $sql="SELECT DISTINCT u.*,rp.pers_id FROM utilisateurs u, resp_pers rp, responsables2 r, eleves e WHERE u.statut='responsable' AND rp.login=u.login AND rp.pers_id=r.pers_id AND r.ele_id=e.ele_id AND e.login NOT IN (SELECT login FROM j_eleves_classes) ORDER BY u.nom,u.prenom;"; //echo "$sql\n"; ?> Pour créer de nouveaux comptes d'accès associés aux responsables d'élèves définis dans Gepi, vous devez cliquer sur le lien 'Ajouter de nouveaux comptes' ci-dessus."; } echo "
"; $test_parents = mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test_parents)>0) { $rowspan++; } echo "\n"; //==================================== echo "
\n"; echo " \n"; ?>$compteur_resp ligne(s)".$complement_nb_lignes." affichée(s).
\n"; echo "
NOTES :
\n"; echo "Si vous générez des Fiches bienvenue avec Bloc adresse du responsable de l'élève, il peut arriver que si les paramètres sont mal choisis, l'adresse n'apparaisse pas... ou hors champ.
\n"; echo "Contrôler les paramétrages aberrants pour un format A4 ou un un format A3
"; if(isset($_GET['check_param_bloc_adresse_html'])) { if($_GET['check_param_bloc_adresse_html']=='a4') { echo "Contrôle des paramètres pour la version A4 :
"; $retour_check=check_param_bloc_adresse_html('a4'); } else { echo "Contrôle des paramètres pour la version A3 :
"; $retour_check=check_param_bloc_adresse_html('a3'); } if($retour_check=='') { echo ""; echo "Pas de valeur aberrante trouvée."; } else { echo "
"; echo "".$retour_check; } echo "
"; } echo "Remarque : Le bloc adresse des responsables d'un élève est positionné dans les bulletins HTML et Fiches Bienvenue avec les mêmes paramètres.
\n"; echo "
Ils sont définis dans la page Paramètres d'impression des bulletins