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 $create_mode = isset($_POST["mode"]) ? $_POST["mode"] : NULL; $_POST['reg_auth_mode'] = (!isset($_POST['reg_auth_mode']) OR !in_array($_POST['reg_auth_mode'], array("auth_locale", "auth_ldap", "auth_sso"))) ? "auth_locale" : $_POST['reg_auth_mode']; $mdp_INE=isset($_POST["mdp_INE"]) ? $_POST["mdp_INE"] : (isset($_GET["mdp_INE"]) ? $_GET["mdp_INE"] : NULL); $order_by=isset($_GET['order_by']) ? $_GET['order_by'] : "nom_prenom"; if(!in_array($order_by, array('nom_prenom', 'classe'))) { $order_by='nom_prenom'; } if ($create_mode == "classe" OR $create_mode == "individual") { // On a une demande de création, on continue check_token(); // On veut alimenter la variable $quels_eleves avec un résultat mysql qui contient // la liste des élèves pour lesquels on veut créer un compte $error = false; $msg = ""; if ($create_mode == "individual") { $test = mysqli_query($GLOBALS["mysqli"], "SELECT count(e.login) FROM eleves e WHERE (e.login = '" . $_POST['eleve_login'] ."')"); if (old_mysql_result($test, 0) == "0") { $error = true; $msg .= "Erreur lors de la création de l'utilisateur : aucun élève avec ce login n'a été trouvé !
"; } else { $quels_eleves = mysqli_query($GLOBALS["mysqli"], "SELECT e.* FROM eleves e WHERE (" . "e.login = '" . $_POST['eleve_login'] ."')"); } } else { // On est en mode 'classe' if ($_POST['classe'] == "all") { $quels_eleves = mysqli_query($GLOBALS["mysqli"], "SELECT distinct(e.login), e.nom, e.prenom, e.sexe, e.email " . "FROM classes c, j_eleves_classes jec, eleves e WHERE (" . "e.login = jec.login AND " . "jec.id_classe = c.id)"); if (!$quels_eleves) $msg .= mysqli_error($GLOBALS["mysqli"]); } elseif (is_numeric($_POST['classe'])) { $quels_eleves = mysqli_query($GLOBALS["mysqli"], "SELECT distinct(e.login), e.nom, e.prenom, e.sexe, e.email " . "FROM classes c, j_eleves_classes jec, eleves e WHERE (" . "e.login = jec.login AND " . "jec.id_classe = '" . $_POST['classe']."')"); if (!$quels_eleves) $msg .= mysqli_error($GLOBALS["mysqli"]); } else { $error = true; $msg .= "Vous devez sélectionner au moins une classe !
"; } } if (!$error) { //check_token(); $nb_comptes_preexistants=0; $liste_compte_crees_liens_vers_modify_ele=""; $nb_comptes = 0; while ($current_eleve = mysqli_fetch_object($quels_eleves)) { // Création du compte utilisateur pour l'élève considéré $reg = true; $civilite = ''; if ($current_eleve->sexe == "M") { $civilite = "M."; } elseif ($current_eleve->sexe == "F") { $civilite = "Mlle"; } // Si on a un accès LDAP en écriture, on créé le compte sur le LDAP // On ne procède que si le LDAP est configuré en écriture, qu'on a activé // l'auth LDAP ou SSO, et que c'est un de ces deux modes qui a été choisi pour cet utilisateur. if (LDAPServer::is_setup() && $gepiSettings["ldap_write_access"] == "yes" && ($session_gepi->auth_ldap || $session_gepi->auth_sso) && ($_POST['reg_auth_mode'] == 'auth_ldap' || $_POST['reg_auth_mode'] == 'auth_sso')) { $write_ldap = true; $write_ldap_success = false; // On tente de créer l'utilisateur sur l'annuaire LDAP $ldap_server = new LDAPServer(); if ($ldap_server->test_user($current_eleve->login)) { // L'utilisateur a été trouvé dans l'annuaire. On ne l'enregistre pas. $write_ldap_success = true; $msg.= "L'utilisateur n'a pas pu être ajouté à l'annuaire LDAP, car il y est déjà présent. Il va néanmoins être créé dans la base Gepi."; } else { $write_ldap_success = $ldap_server->add_user($current_eleve->login, $current_eleve->nom, $current_eleve->prenom, $current_eleve->email, $civilite, '', 'eleve'); } } else { $write_ldap = false; } if (!$write_ldap || ($write_ldap && $write_ldap_success)) { if ($_POST['reg_auth_mode'] == "auth_locale") { $reg_auth = "gepi"; } elseif ($_POST['reg_auth_mode'] == "auth_ldap") { $reg_auth = "ldap"; } elseif ($_POST['reg_auth_mode'] == "auth_sso") { $reg_auth = "sso"; } $sql="SELECT 1=1 FROM utilisateurs WHERE login='".$current_eleve->login."';"; //echo "$sql
"; $test_existence_compte=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test_existence_compte)==0) { $reg = mysqli_query($GLOBALS["mysqli"], "INSERT INTO utilisateurs SET " . "login = '" . $current_eleve->login . "', " . "nom = '" . addslashes($current_eleve->nom) . "', " . "prenom = '". addslashes($current_eleve->prenom) ."', " . "password = '', " . "civilite = '" . $civilite."', " . "email = '" . $current_eleve->email . "', " . "statut = 'eleve', " . "etat = 'actif', " . "auth_mode = '".$reg_auth."', ". "change_mdp = 'n'"); if (!$reg) { $msg .= "Erreur lors de la création du compte ".$current_eleve->login."
"; } else { // Ménage: $sql="SELECT id FROM infos_actions WHERE titre LIKE 'Nouvel %l%ve%($current_eleve->login)';"; $res_actions=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_actions)>0) { while($lig_action=mysqli_fetch_object($res_actions)) { $menage=del_info_action($lig_action->id); if(!$menage) {$msg.="Erreur lors de la suppression de l'action en attente en page d'accueil à propos de $current_eleve->login
";} } } // Génération de l'URI RSS si l'accès y est donné directement dans la page d'accueil pour le compte élève/resp connecté: if((getSettingValue('rss_acces_ele')=='direct')&&((getSettingAOui('rss_cdt_ele'))||(getSettingAOui('rss_cdt_responsable')))) { $sql="SELECT 1=1 FROM rss_users WHERE user_login='".$current_eleve->login."';"; $test_rss = mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test_rss)==0) { $uri_el = md5($current_eleve->login.getSettingValue("gepiSchoolRne").mt_rand()); $sql = "INSERT INTO rss_users (id, user_login, user_uri) VALUES ('', '".$current_eleve->login."', '".$uri_el."');"; $insert_rss = mysqli_query($GLOBALS["mysqli"], $sql); if (!$insert_rss) { $msg.="Erreur lors de l'initialisation de l'URI RSS pour ".$current_eleve->login."
"; } } } if($liste_compte_crees_liens_vers_modify_ele!="") { $liste_compte_crees_liens_vers_modify_ele.=", "; } $liste_compte_crees_liens_vers_modify_ele.="".casse_mot($current_eleve->nom, "maj")." ".casse_mot($current_eleve->prenom, "majf2").""; $nb_comptes++; } } else { // On compte les comptes existants $nb_comptes_preexistants++; } } else { $msg .= "Erreur lors de la création du compte ".$current_eleve->login." : l'utilisateur n'a pas pu être créé sur l'annuaire LDAP.
"; } } if ($nb_comptes == 1) { $msg .= "Un compte a été créé avec succès.
"; if($liste_compte_crees_liens_vers_modify_ele!="") { $msg.="Le voici ".$liste_compte_crees_liens_vers_modify_ele."
"; } } elseif ($nb_comptes > 1) { $msg .= $nb_comptes." comptes ont été créés avec succès.
"; if($liste_compte_crees_liens_vers_modify_ele!="") { $msg.="Les voici ".$liste_compte_crees_liens_vers_modify_ele."
"; } } if ($nb_comptes > 0 && ($_POST['reg_auth_mode'] == "auth_locale" || $gepiSettings['ldap_write_access'] == "yes")) { if(isset($mdp_INE)) { $chaine_mdp_INE="&mdp_INE=$mdp_INE"; } else { $chaine_mdp_INE=""; } if ($create_mode == "individual") { // Mode de création de compte individuel. On fait un lien spécifique pour la fiche de bienvenue $msg .= "Imprimer la fiche 'identifiants'"; } else { // On est ici en mode de création par classe // Si on opère sur toutes les classes, on ne spécifie aucune classe if ($_POST['classe'] == "all") { $msg .= "
Imprimer la ou les fiche(s) 'identifiants' (Impression HTML)"; $msg .= "
Imprimer la ou les fiche(s) 'identifiants' (Export CSV)"; $msg .= "
Imprimer la ou les fiche(s) 'identifiants' (Impression PDF)"; } elseif (is_numeric($_POST['classe'])) { $msg .= "
Imprimer la ou les fiche(s) 'identifiants' (Impression HTML)"; $msg .= "
Imprimer la ou les fiche(s) 'identifiants' (Export CSV)"; $msg .= "
Imprimer la ou les fiche(s) 'identifiants' (Impression PDF)"; } } $msg .= "
Vous devez effectuer cette opération maintenant !"; } else { if ($nb_comptes > 0) { $msg .= "Vous avez créé un ou des comptes d'accès en mode SSO ou LDAP, mais sans avoir configuré l'accès LDAP en écriture. En conséquence, vous ne pouvez pas générer de mot de passe pour les utilisateurs.
"; } } if($nb_comptes_preexistants>0) { if($nb_comptes_preexistants==1) { $msg.="Un compte existait déjà pour la sélection.
"; } else { $msg.="$nb_comptes_preexistants comptes existaient déjà pour la sélection.
"; } } } } //**************** EN-TETE ***************** $titre_page = "Créer des comptes d'accès élèves"; require_once("../lib/header.inc.php"); //**************** FIN EN-TETE ***************** //debug_var(); ?>

Retour Retour

Tous les élèves ont un compte utilisateur, ou bien aucun élève n'a encore été créé.

\n"; } else{ //echo "

Les $nb élèves ci-dessous n'ont pas encore de compte d'accès à Gepi.

\n"; echo "

$nb élèves n'ont pas encore de compte d'accès à Gepi.

\n"; if (!$session_gepi->auth_locale && $gepiSettings['ldap_write_access'] != "yes") { echo "

Note : Vous utilisez une authentification externe à Gepi (LDAP ou SSO) sans avoir défini d'accès en écriture à l'annuaire LDAP. Aucun mot de passe ne sera donc assigné aux utilisateurs que vous vous apprêtez à créer. Soyez certain de générer les login selon le même format que pour votre source d'authentification SSO.

\n"; } echo "

Créer des comptes par lot :

\n"; echo "
\n"; echo "

Sélectionnez le mode d'authentification appliqué aux comptes :

"; echo "
\n"; echo add_token_field(); echo ""; echo "

Sélectionnez une classe ou bien l'ensemble des classes puis cliquez sur 'valider'.

\n"; echo "\n"; echo "\n"; echo "\n"; echo "

\n"; echo "
\n"; include("randpass.php"); echo "

Lors de la création, les comptes reçoivent un mot de passe aléatoire choisi parmi les caractères suivants: "; if (LOWER_AND_UPPER) { if(EXCLURE_CARACT_CONFUS) { $alphabet = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); } else { $alphabet = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); } } else { if(EXCLURE_CARACT_CONFUS) { $alphabet = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'); } else { $alphabet = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'); } } $cpt=0; foreach($alphabet as $key => $value) { if($cpt>0) {echo ", ";} echo $value; $cpt++; } if(EXCLURE_CARACT_CONFUS) { $cpt=2; } else { $cpt=0; } for($i=$cpt;$i<=9;$i++) { echo ", $i"; } echo ".

\n"; echo "
\n"; echo "
\n"; echo "

Créer des comptes individuellement :

\n"; echo "
\n"; $afficher_tous_les_eleves=isset($_POST['afficher_tous_les_eleves']) ? $_POST['afficher_tous_les_eleves'] : (isset($_GET['afficher_tous_les_eleves']) ? $_GET['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); if($order_by=='classe') { $sql="SELECT DISTINCT e.* FROM j_eleves_classes jec, classes c, eleves e LEFT JOIN utilisateurs u ON e.login=u.login WHERE (u.login IS NULL AND jec.login=e.login AND jec.id_classe=c.id"; if($afficher_tous_les_eleves!='y'){ if($critere_recherche!=""){ $sql.=" AND e.nom like '%".$critere_recherche."%'"; } } $sql.=") ORDER BY c.classe, e.nom,e.prenom"; if($afficher_tous_les_eleves!='y'){ if($critere_recherche==""){ $sql.=" LIMIT 20"; } } } else { $sql="SELECT e.* FROM eleves e LEFT JOIN utilisateurs u ON e.login=u.login WHERE (u.login IS NULL"; if($afficher_tous_les_eleves!='y'){ if($critere_recherche!=""){ $sql.=" AND e.nom like '%".$critere_recherche."%'"; } } $sql.=") ORDER BY e.nom,e.prenom"; if($afficher_tous_les_eleves!='y'){ if($critere_recherche==""){ $sql.=" LIMIT 20"; } } } //echo "$sql
"; $quels_eleves = mysqli_query($GLOBALS["mysqli"], $sql); $nb2=mysqli_num_rows($quels_eleves); echo "

"; if(($afficher_tous_les_eleves!='y')&&($critere_recherche=="")){ echo "Au plus $nb2 élèves sont affichés ci-dessous (pour limiter le temps de chargement de la page).
\n"; } echo "Utilisez le formulaire de recherche pour adapter la recherche."; echo "

\n"; //==================================== echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "Filtrage:"; echo "\n"; echo " les élèves sans compte d'utilisateur dont le nom contient: "; echo "\n"; echo "
\n"; echo "ou"; echo "
\n"; echo "\n"; echo "
\n"; echo "\n"; echo "
\n"; //==================================== echo "
\n"; echo "

Cliquez sur le bouton 'Créer' d'un élève pour créer un compte associé.

\n"; echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; // A REVOIR: Le $reg_auth_mode n'a pas l'air initialisé $sql="SELECT DISTINCT auth_mode FROM utilisateurs WHERE statut='eleve';"; $test_auth_mode=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test_auth_mode)==1) { $lig_auth_mode=mysqli_fetch_object($test_auth_mode); if($lig_auth_mode->auth_mode=="gepi") { $reg_auth_mode="auth_locale"; } elseif($lig_auth_mode->auth_mode=="sso") { $reg_auth_mode="auth_sso"; } } // Sélection du mode d'authentification echo "

Mode d'authentification : "; echo "

"; echo "\n"; $alt=1; while ($current_eleve = mysqli_fetch_object($quels_eleves)) { $alt=$alt*(-1); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; } echo "
Création du compte Nom prénom Classe
\n"; echo "login."';$('indiv_mdp_INE').value='n'; $('form_create_one_eleve').submit();\" />\n"; echo "\n"; if($current_eleve->no_gep!="") { echo "login."';$('indiv_mdp_INE').value='y'; $('form_create_one_eleve').submit();\" />\n"; } else { echo "INE non renseigné"; } echo "".$current_eleve->nom." ".$current_eleve->prenom."\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 "

$nb2 élèves affichés.

"; echo "
"; echo "
\n"; } require("../lib/footer.inc.php"); ?>