$titre = "Gestion des données de test"; $expli = "Permet d'inserer des données de test dans la base. Ne pas utiliser sur une base de production."; $ancre = "gestion_base_test"; $tbs_menu[$nummenu]['entree'][] = array('lien' => $chemin, 'titre' => $titre, 'expli' => $expli, 'ancre' => $ancre); } $nummenu = 3; $tbs_menu[$nummenu] = array('classe' => 'accueil', 'image' => '../images/icons/package.png', 'texte' => "Outils d'initialisation"); $chemin = array(); $titre = array(); $expli = array(); $chemin = "changement_d_annee.php"; $titre = "Changement d'année"; $expli = "Permet d'effectuer les opérations d'archivage de fin d'année et les opérations précédent l'initialisation de la nouvelle année."; $ancre = "chgt_annee"; $tbs_menu[$nummenu]['entree'][] = array('lien' => $chemin, 'titre' => $titre, 'expli' => $expli, 'ancre' => $ancre); if (LDAPServer::is_setup()) { $chemin = "../init_scribe_ng/index.php"; $titre = "Initialisation à partir de l'annuaire LDAP du serveur Eole Scribe NG"; $expli = "Permet d'importer les données " . $gepiSettings['denomination_eleves'] . ", classes, " . $gepiSettings['denomination_professeurs'] . ", matières directement depuis le serveur LDAP de Scribe NG."; $ancre = "init_scribe_ng"; $tbs_menu[$nummenu]['entree'][] = array('lien' => $chemin, 'titre' => $titre, 'expli' => $expli, 'ancre' => $ancre); } if (file_exists("../secure/config_lcs.inc.php")) { $chemin = "../init_lcs/index.php"; $titre = "Initialisation à partir de l'annuaire LDAP du serveur LCS"; $expli = "Permet d'importer les données " . $gepiSettings['denomination_eleves'] . ", classes, " . $gepiSettings['denomination_professeurs'] . ", matières directement depuis le serveur LDAP de LCS."; $ancre = "init_lcs"; $tbs_menu[$nummenu]['entree'][] = array('lien' => $chemin, 'titre' => $titre, 'expli' => $expli, 'ancre' => $ancre); } $chemin = "../init_csv/index.php"; $titre = "Initialisation des données à partir de fichiers CSV";
} elseif ($mode == "classe") { if ($_POST['classe'] == "all") { $msg .= "Vous allez réinitialiser les mots de passe de tous les utilisateurs ayant le statut 'responsable'.<br />Si vous êtes vraiment sûr de vouloir effectuer cette opération, cliquez sur le lien ci-dessous :"; $msg .= "<br /><a href=\"reset_passwords.php?user_status=responsable&mode=html".add_token_in_url()."\" target='_blank'>Réinitialiser les mots de passe (Impression HTML)</a> - ou (<a href=\"reset_passwords.php?user_status=responsable&mode=html&affiche_adresse_resp=y".add_token_in_url()."\" target='_blank'>Impression HTML avec adresse</a>)"; $msg .= "<br /><a href=\"reset_passwords.php?user_status=responsable&mode=csv".add_token_in_url()."\" target='_blank'>Réinitialiser les mots de passe (Export CSV)</a>"; } 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']).".<br />Si vous êtes vraiment sûr de vouloir effectuer cette opération, cliquez sur le lien ci-dessous :"; $msg .= "<br /><a href=\"reset_passwords.php?user_status=responsable&user_classe=".$_POST['classe']."&mode=html".add_token_in_url()."\" target='_blank'>Réinitialiser les mots de passe (Impression HTML)</a> - ou (<a href=\"reset_passwords.php?user_status=responsable&user_classe=".$_POST['classe']."&mode=html&affiche_adresse_resp=y".add_token_in_url()."\" target='_blank'>Impression HTML avec adresse</a>)"; $msg .= "<br /><a href=\"reset_passwords.php?user_status=responsable&user_classe=".$_POST['classe']."&mode=csv".add_token_in_url()."\" target='_blank'>Réinitialiser les mots de passe (Export CSV)</a>"; } } }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 = '******'"), 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++;
) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; $query = mysqli_query($GLOBALS["mysqli"], $sql); if ($query) { $msg = "<font style=\"color: green;\">Ok !</font><br />"; } else { $msg = "<font style=\"color: red;\">Erreur</font><br />"; } }else{ $msg = "<font style=\"color: blue;\">La table existe déjà.</font><br />"; } // On truncate la table $tr = mysqli_query($GLOBALS["mysqli"], "TRUNCATE TABLE ldap_bx"); // On ouvre une connexion avec le ldap $ldap = new LDAPServer; $info = $ldap->get_all_users('rne', $RNE); // $infos est donc un tableau de tous les utilisateurs du LDAP qui ont ce $RNE en attribut (sic) for($a=0; $a < $info["count"]; $a++){ if (file_exists("../secure/config_ldap.inc.php")) { require("../secure/config_ldap.inc.php"); } $ldap_login = (isset($ldap_champ_login) AND $ldap_champ_login != '') ? $ldap_champ_login : '******'; $ldap_nom = (isset($ldap_champ_nom) AND $ldap_champ_nom != '') ? $ldap_champ_nom : 'sn'; $ldap_prenom = (isset($ldap_champ_prenom) AND $ldap_champ_prenom != '') ? $ldap_champ_prenom : 'givenname'; $ldap_statut = (isset($ldap_champ_statut) AND $ldap_champ_statut != '') ? $ldap_champ_statut : 'edupersonaffiliation'; $ldap_numero = (isset($ldap_champ_numero) AND $ldap_champ_numero != '') ? $ldap_champ_numero : 'employeenumber'; if (isset($info[$a][$ldap_numero][0])) {
echo "<p><span style='color: red'><strong>Attention !</strong></span> Ne modifiez ces paramètres que si vous savez vraiment ce que vous faites ! Si vous activez l'authentification SSO et que vous ne pouvez plus vous connecter à Gepi en administrateur, vous pouvez utiliser la variable \$block_sso dans le fichier /lib/global.inc pour désactiver le SSO et rebasculer en authentification locale. Il est donc vivement recommandé de créer un compte administrateur local (<em>dont le login n'interfèrera pas avec un login SSO</em>) avant d'activer le SSO.</p>\n"; echo "<p>Gepi permet d'utiliser plusieurs modes d'authentification en parallèle. Les combinaisons les plus courantes seront une authentification locale avec une authentification LDAP, ou bien une authentification locale et une authentification unique (<em>utilisant un serveur d'authentification distinct</em>).</p>\n"; echo "<p>Le mode d'authentification est explicitement spécifié pour chaque utilisateur dans la base de données de Gepi. Assurez-vous que le mode défini correspond effectivement au mode utilisé par l'utilisateur.</p>\n"; echo "<p>Dans le cas d'une authentification externe (<em>LDAP ou SSO</em>), aucun mot de passe n'est stocké dans la base de données de Gepi.</p>\n"; echo "<p>Si vous paramétrez un accès LDAP en écriture, les mots de passe des utilisateurs pourront être modifiés directement à travers Gepi, même pour les modes LDAP et SSO. L'administrateur pourra également éditer les données de base de l'utilisateur (<em>nom, prénom, email</em>). Lorsque vous activez l'accès LDAP en écriture, assurez-vous que le paramétrage sur le serveur LDAP permet à l'utilisateur de connexion LDAP de modifier les champs login, mot de passe, nom, prénom et email.</p>\n"; echo "<p>Si vous utilisez CAS, vous devez entrer les informations de configuration du serveur CAS dans le fichier /secure/config_cas.inc.php (<em>un modèle de configuration se trouve dans le fichier /secure/modeles/config_cas-modele.inc.php</em>).</p>\n"; echo "<p>Si vous utilisez l'authentification sur serveur LDAP, ou bien que vous activez l'accès LDAP en écriture, vous devez renseigner le fichier /secure/config_ldap.inc.php avec les informations nécessaires pour se connecter au serveur (<em>un modèle se trouve dans /secure/modeles/config_ldap-modele.inc.php</em>).</p>\n"; echo "<form action=\"options_connect.php\" name=\"form_auth\" method=\"post\">\n\t<fieldset id='mdp_perdus' style='border: 1px solid grey; background-image: url(\"../images/background/opacite50.png\");'>\n\t<legend style='border: 1px solid grey; background-color: white;'>Mode d'authentification</legend>\n"; echo add_token_field(); echo "<p><strong>Modes d'authentification :</strong></p>\n"; echo "<p><input type='checkbox' name='auth_locale' value='yes' id='label_auth_locale'"; if (getSettingValue("auth_locale") == 'yes') { echo " checked "; } echo " /> <label for='label_auth_locale' style='cursor: pointer;'>Authentification autonome (sur la base de données de Gepi)</label>\n"; $ldap_setup_valid = LDAPServer::is_setup(); echo "<br/><input type='checkbox' name='auth_ldap' value='yes' id='label_auth_ldap'"; if (getSettingValue("auth_ldap") == 'yes' && $ldap_setup_valid) { echo " checked "; } if (!$ldap_setup_valid) { echo " disabled"; } echo " /> <label for='label_auth_ldap' style='cursor: pointer;'>Authentification LDAP"; if (!$ldap_setup_valid) { echo " <em>(sélection impossible : le fichier /secure/config_ldap.inc.php n'est pas présent)</em>\n"; } echo "</label>\n"; //on va voir si il y a simplesaml de configuré if (file_exists(dirname(__FILE__) . '/../lib/simplesaml/config/authsources.php')) { echo "<br/><input type='checkbox' name='auth_simpleSAML' value='yes' id='label_auth_simpleSAML'";
$msg = "Erreur lors de l'enregistrement du mot de passe !"; } else { $msg="Le mot de passe a été changé ($user_login:$ine_password) !"; } } else { if ($_POST['no_anti_inject_password'] != $_POST['reg_password2']) { $msg = "Erreur lors de la saisie : les deux mots de passe ne sont pas identiques, veuillez recommencer !"; } else if (!(verif_mot_de_passe($NON_PROTECT['password'],$flag))) { $msg = "Erreur lors de la saisie du mot de passe (<em>voir les recommandations</em>), veuillez recommencer !"; if((isset($info_verif_mot_de_passe))&&($info_verif_mot_de_passe!="")) {$msg.="<br />".$info_verif_mot_de_passe;} } else { $auth_mode = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT auth_mode FROM utilisateurs WHERE login = '******'"), 0); if ($auth_mode != "gepi" && $gepiSettings['ldap_write_access'] == 'yes') { // On est en mode d'écriture LDAP $ldap_server = new LDAPServer; $reg_data = $ldap_server->update_user($user_login, '', '', '', '', $NON_PROTECT['password'],''); } else { // On est en mode base de données $reg_data = Session::change_password_gepi($user_login,$NON_PROTECT['password']); } //ajout Eric En cas de réinitialisation par l'admin, il faut forcer à la première connexion la changement du mot de passe if ($_SESSION['statut'] == 'administrateur') { $reg_data = mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs SET change_mdp = 'y' WHERE login='******'"); } if (!$reg_data) { $msg = "Erreur lors de l'enregistrement du mot de passe !"; } else { $msg="Le mot de passe a été changé !";
$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";
private function import_user_profile_from_scribe() { global $mysqli; # On ne peut arriver ici quand dans le cas où on a une authentification réussie. # L'import d'un utilisateur ne peut se faire qu'à partir d'un LDAP de Scribe, ici. if (!LDAPServer::is_setup()) { return false; die(); } else { // config_cas.inc.php est le fichier d'informations de connexions au serveur cas $path = dirname(__FILE__)."/LDAPServerScribe.class.php"; include($path); # Le serveur LDAP est configuré, on y va. # Encore un dernier petit test quand même : est-ce que l'utilisateur # est bien absent de la base. $sql = "SELECT login FROM utilisateurs WHERE (login = '******')"; $resultat = mysqli_query($mysqli, $sql); if ($resultat->num_rows != "0") { $resultat->close(); return false; die(); } $resultat->close(); $ldap_server = new LDAPServerScribe; $user = $ldap_server->get_user_profile($this->login); if ($user) { # On ne refait pas de tests ou de formattage. La méthode get_user_profile # s'occupe de tout. $errors = false; // On s'occupe de tous les traitements spécifiques à chaque statut // Eleve if ($user['statut'] == 'eleve') { // On a un élève : on vérifie s'il existe dans la table 'eleves', // sur la base de son INE, ou nom et prénom. $sql_test = "SELECT * FROM eleves WHERE (no_gep = '".$user['raw']['ine'][0]."' OR (nom = '".$user['nom']."' AND prenom = '".$user['prenom']."'))"; $resultat = mysqli_query($mysqli, $sql); $test = $resultat->num_rows; $resultat->close(); if ($test == 0) { // L'élève n'existe pas du tout. On va donc le créer. $nouvel_eleve = new Eleve(); $nouvel_eleve->setLogin($this->login); $nouvel_eleve->setNom($user['nom']); $nouvel_eleve->setPrenom($user['prenom']); $nouvel_eleve->setSexe($user['raw']['entpersonsexe'][0]); $naissance = $user['raw']['entpersondatenaissance'][0]; if ($naissance != '') { $annee = mb_substr($naissance, 0, 4); $mois = mb_substr($naissance, 4, 2); $jour = mb_substr($naissance, 6, 2); } else { $annee = '0000'; $mois = '00'; $jour = '00'; } $nouvel_eleve->setNaissance("$annee-$mois-$jour"); $nouvel_eleve->setLieuNaissance(''); $nouvel_eleve->setElenoet($user['raw']['employeenumber'][0] || ''); $nouvel_eleve->setEreno(''); $nouvel_eleve->setEleid($user['raw']['intid'][0] || ''); $nouvel_eleve->setNoGep($user['raw']['ine'][0] || ''); $nouvel_eleve->setEmail($user['email']); if (!$nouvel_eleve->save()) $errors = true; /* * Récupération des CLASSES de l'eleve : * Pour chaque eleve, on parcours ses classes, et on ne prend que celles * qui correspondent à la branche de l'établissement courant, et on les stocke */ $nb_classes = $user['raw']['enteleveclasses']['count']; // Pour chaque classe trouvée.. $eleve_added_to_classe = false; for ($cpt=0; $cpt<$nb_classes; $cpt++) { if ($eleve_added_to_classe) break; $classe_from_ldap = explode("$", $user['raw']['enteleveclasses'][$cpt]); // $classe_from_ldap[0] contient le DN de l'établissement // $classe_from_ldap[1] contient l'id de la classe $code_classe = $classe_from_ldap[1]; // Si le SIREN de la classe trouvée correspond bien au SIREN de l'établissement courant, // on crée une entrée correspondante dans le tableau des classes disponibles // Sinon c'est une classe d'un autre établissement, on ne doit donc pas en tenir compte if (strcmp($classe_from_ldap[0], $ldap_server->get_base_branch()) == 0) { /* * On test si la classe que l'on souhaite ajouter existe déjà * en la cherchant dans la base ( */ $classe_courante = ClasseQuery::create() ->filterByClasse($code_classe) ->findOne(); if ($classe_courante) { foreach($classe_courante->getPeriodeNotes() as $periode) { // On associe l'élève à la classe $sql_classe = "INSERT INTO j_eleves_classes SET login = '******', id_classe = '".$classe_courante->getId()."', periode = '".$periode->getNumPeriode()."'"; $res = mysqli_query($mysqli, $sql); $res->close(); } // Fin boucle périodes $eleve_added_to_classe = true; } // Fin test classe } //Fin du if classe appartient a l'etablissement courant } //Fin du parcours des classes de l'eleve // On a maintenant un élève en base, qui appartient à sa classe // pour toutes les périodes à partir de la période courante // On ne l'associe pas aux enseignements, car c'est un peu trop // risqué et bancal pour être réalisé dynamiquement ici, dans // la mesure où l'on n'a pas une information précise sur la // composition des groupes. } else { // L'élève existe déjà dans la base. On ne créé que l'utilisateur correspondant. // Pour ça, on va devoir s'assurer que l'identifiant est identique ! $sql_login = "******".$user['raw']['ine'][0]."' OR (nom = '".$user['nom']."' AND prenom = '".$user['prenom']."'))"; $resultat = mysqli_query($mysqli, $sql); $res = $resultatè->fetch_object(); $test_login = $res->login; $resultat->close(); if ($test_login != $this->login) { // Le login est différent, on ne peut rien faire... Il faudrait renommer // le login partout dans l'application, mais il n'existe pas de mécanisme // pour le faire de manière fiable. $errors = true; } } } elseif ($user['statut'] == 'responsable') { // Si on a un responsable, il faut l'associer à un élève $resp = new ResponsableEleve(); $resp->setLogin($this->login); $resp->setNom($user['nom']); $resp->setPrenom($user['prenom']); $resp->setCivilite($user['raw']['personaltitle'][0]); $resp->setTelPers($user['raw']['homephone'][0]); $resp->setTelProf($user['raw']['telephonenumber'][0]); $resp->setTelPort($user['raw']['mobile'][0]); $resp->setMel($user['email']); $resp->setAdresseId($user['raw']['intid'][0]); // On créé l'adresse associée $adr = new Adresse(); $adr->setAdresseId($user['raw']['intid'][0]); $adr->setAdr1($user['raw']['entpersonadresse'][0]); $adr->setAdr2(''); $adr->setAdr3(''); $adr->setAdr4(''); $adr->setCommune($user['raw']['entpersonville'][0]); $adr->setCp($user['raw']['entpersoncodepostal'][0]); $adr->setPays($user['raw']['entpersonpays'][0]); $resp->setAdresse($adr); $resp->save(); $nb_eleves_a_charge = $user['raw']['entauxpersreleleveeleve']['count']; //pour chaque dn d'eleve for ($i=0;$i<$nb_eleves_a_charge;$i++) { $eleve_uid = explode(",",$user['raw']['entauxpersreleleveeleve'][$i]); $eleve_associe_login = mb_substr($eleve_uid[0], 4); $eleve_sql = "SELECT ele_id FROM eleves WHERE login = '******'"; $eleve_query = mysqli_query($mysqli, $sql); if ($eleve_query->num_rows == 1) { $eleve_associe_obj = $eleve_query->fetch_object(); $eleve_associe_ele_id = $eleve_associe_obj->ele_id; // Gepi donne un ordre aux responsables, il faut donc verifier combien de responsables sont deja enregistres pour l'eleve // On initialise le numero de responsable $numero_responsable = 1; $req_nb_resp_deja_presents = "SELECT count(*) FROM responsables2 WHERE ele_id = '$eleve_associe_ele_id'"; $res_nb_resp = mysqli_query($mysqli, $req_nb_resp_deja_presents); $nb_resp = $res_nb_resp->fetch_array($res_nb_resp); if ($nb_resp[0] > 0) { // Si deja 1 ou plusieurs responsables legaux pour cet eleve,on ajoute le nouveau responsable en incrementant son numero $numero_responsable += $nb_resp[0]; //-- // TODO: tester si on a des adresses identiques, et n'utiliser qu'un seul objet adresse dans ce cas. //-- } // Ajout de la relation entre Responsable et Eleve dans la table "responsables2" pour chaque eleve $req_ajout_lien_eleve_resp = "INSERT INTO responsables2 VALUES('$eleve_associe_ele_id','".$resp->getResponsableEleveId()."','$numero_responsable','')"; $insert_lien = mysqli_query($mysqli, $req_ajout_lien_eleve_resp); } } } elseif ($user['statut'] == 'professeur') { // Rien de spécial à ce stade. } else { // Ici : que fait-on si l'on n'a pas un statut directement reconnu // et compatible Gepi ? // On applique le statut par défaut, configuré par l'admin. $user['statut'] = getSettingValue("statut_utilisateur_defaut"); } // On créé l'utilisateur, s'il n'y a pas eu d'erreurs. if (!$errors) { $new_compte_utilisateur = new UtilisateurProfessionnel(); $new_compte_utilisateur->setAuthMode('sso'); $new_compte_utilisateur->setCivilite($user['civilite']); $new_compte_utilisateur->setEmail($user['email']); $new_compte_utilisateur->setEtat('actif'); $new_compte_utilisateur->setLogin($this->login); $new_compte_utilisateur->setNom($user['nom']); $new_compte_utilisateur->setPrenom($user['prenom']); $new_compte_utilisateur->setShowEmail('no'); $new_compte_utilisateur->setStatut($user['statut']); //$new_compte_utilisateur->save(); if ($new_compte_utilisateur->save()) { return true; } else { return false; } } } else { return false; } } }
function import_user_profile() { # On ne peut arriver ici quand dans le cas où on a une authentification réussie. # L'import d'un utilisateur ne peut se faire qu'à partir d'un LDAP if (!LDAPServer::is_setup()) { return false; die(); } else { # Le serveur LDAP est configuré, on y va. # Encore un dernier petit test quand même : est-ce que l'utilisateur # est bien absent de la base. $sql = mysql_query("SELECT login FROM utilisateurs WHERE (login = '******')"); if (mysql_num_rows($sql) != "0") { return false; die(); } $ldap_server = new LDAPServer; $user = $ldap_server->get_user_profile($this->login); if ($user) { # On ne refait pas de tests ou de formattage. La méthode get_user_profile # s'occupe de tout. $res = mysql_query("INSERT INTO utilisateurs SET login = '******', prenom = '".$user["prenom"]."', nom = '".$user["nom"]."', email = '".$user["email"]."', civilite = '".$user["civilite"]."', statut = '".$user["statut"]."', password = '', etat = 'actif', auth_mode = '".$this->current_auth_mode."', change_mdp = 'n'"); if (!$res) { return false; } else { return true; } } else { return false; } } }
function load_config() { $ldap_config = array(); if (LDAPServer::is_setup()) { $path = dirname(__FILE__) . "/../" . LDAPServer::config_file(); include $path; $available_settings = get_class_vars(get_class($this)); foreach ($available_settings as $key => $value) { $varname = "ldap_" . $key; if (isset(${$varname})) { $this->{$key} = ${$varname}; } } } }
$msg .= "Vous allez réinitialiser les mots de passe de tous les utilisateurs ayant le statut 'eleve'.<br/>Si vous êtes vraiment sûr de vouloir effectuer cette opération, cliquez sur le lien ci-dessous :"; $msg .= "<br/><a href=\"reset_passwords.php?user_status=eleve&mode=html$chaine_mdp_INE".add_token_in_url()."\" target='_blank'>Réinitialiser les mots de passe (Impression HTML)</a>"; $msg .= "<br/><a href=\"reset_passwords.php?user_status=eleve&mode=csv$chaine_mdp_INE".add_token_in_url()."\" target='_blank'>Réinitialiser les mots de passe (Export CSV)</a>"; $msg .= "<br/><a href=\"reset_passwords.php?user_status=eleve&mode=pdf$chaine_mdp_INE".add_token_in_url()."\" target='_blank'>Réinitialiser les mots de passe (Impression PDF)</a>"; } 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.<br/>Si vous êtes vraiment sûr de vouloir effectuer cette opération, cliquez sur le lien ci-dessous :"; $msg .= "<br/><a href=\"reset_passwords.php?user_status=eleve&user_classe=".$_POST['classe']."&mode=html$chaine_mdp_INE".add_token_in_url()."\" target='_blank'>Réinitialiser les mots de passe (Impression HTML)</a>"; $msg .= "<br/><a href=\"reset_passwords.php?user_status=eleve&user_classe=".$_POST['classe']."&mode=csv$chaine_mdp_INE".add_token_in_url()."\" target='_blank'>Réinitialiser les mots de passe (Export CSV)</a>"; $msg .= "<br/><a href=\"reset_passwords.php?user_status=eleve&user_classe=".$_POST['classe']."&mode=pdf$chaine_mdp_INE".add_token_in_url()."\" target='_blank'>Réinitialiser les mots de passe (Impression PDF)</a>"; } } } 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 = '******'"), 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++;
$destinataire_mail=$user_email; envoi_mail($sujet_mail, $message_mail, $destinataire_mail); } } } } } } elseif(($_SESSION['statut']=='eleve')&&((getSettingValue('mode_email_ele')=='')||(getSettingValue('mode_email_ele')=='mon_compte'))) { if ($user_email != $reg_email) { if(($reg_email!="")&&(!check_mail($reg_email, "full"))) { $msg.="L'adresse mail proposée '$reg_email' n'est pas valide.<br />"; } else { if ($user_auth_mode != "gepi" && $gepiSettings['ldap_write_access'] == "yes") { if (!isset($ldap_server)) $ldap_server = new LDAPServer; $write_ldap_success = $ldap_server->update_user($session_gepi->login, '', '', $reg_email, '', '', ''); } $reg = mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs SET email = '$reg_email' WHERE login = '******'login'] . "'"); if ($reg) { if($msg!="") {$msg.="<br />";} $msg.="L'adresse e_mail a été modifiéé !"; $no_modif = "no"; $_SESSION['email']=$reg_email; if((getSettingValue('mode_email_ele')=='mon_compte')) { $sql="UPDATE eleves SET email='$reg_email' WHERE login='******'login']."';"; $update_eleve=mysqli_query($GLOBALS["mysqli"], $sql); if(!$update_eleve) {$msg.="<br />Erreur lors de la mise à jour de la table 'eleves'.";} if((getSettingValue('envoi_mail_actif')!='n')&&(getSettingValue('informer_scolarite_modif_mail')!='n')) {
// On effectue les opérations LDAP if (isset($create_ldap_user) && $create_ldap_user) { $ldap_server = new LDAPServer; if ($ldap_server->test_user($user_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.<br/>"; } else { $write_ldap_success = $ldap_server->add_user($user_login, $_POST['reg_nom'], $_POST['reg_prenom'], $_POST['reg_email'], $_POST['reg_civilite'], md5(rand()), $_POST['reg_statut']); // On transfert le mot de passe à la main $ldap_server->set_manual_password($user_login, "{MD5}".base64_encode(pack("H*",$oldmd5password))); } } if (isset($delete_ldap_user) && $delete_ldap_user) { $ldap_server = new LDAPServer; if (!$ldap_server->test_user($user_login)) { // L'utilisateur n'a pas été trouvé dans l'annuaire. $write_ldap_success = true; } else { $write_ldap_success = $ldap_server->delete_user($user_login); } } $reg_data = mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs SET nom='".$_POST['reg_nom']."',prenom='".$_POST['reg_prenom']."',civilite='".$_POST['reg_civilite']."', login='******'reg_login']."',statut='".$_POST['reg_statut']."',email='".$_POST['reg_email']."',etat='".$_POST['reg_etat']."',auth_mode='".$_POST['reg_auth_mode']."' WHERE login='******'"); $del = mysqli_query($GLOBALS["mysqli"], "DELETE FROM j_professeurs_matieres WHERE id_professeur = '".$user_login."'"); $m = 0; while ($m < $_POST['max_mat']) { $num=$m+1; if ($reg_matiere[$m] != '') {
} // 20121115 if((!isset($u_login))|| (in_array($user_login, $u_login))) { $tab_password[$user_login]=$new_password; if ($user_auth_mode != "gepi") { // L'utilisateur est un utilisateur SSO. On enregistre un mot de passe vide. if(!getSettingAOui('auth_sso_ne_pas_vider_MDP_gepi')) { $save_new_pass = mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs SET password='', change_mdp = 'n' WHERE login='******'"); } // Si l'accès LDAP en écriture est paramétré, on va mettre à jour le mot de passe de l'utilisateur // directement dans l'annuaire. if ($gepiSettings['ldap_write_access'] == "yes") { if ($ecraser_passwd_user) { $ldap_server = new LDAPServer; $reg_data = $ldap_server->update_user($user_login, '', '', '', '', $new_password,''); } else { // On réinitialise la variable $new_password à zéro, pour être sûr // qu'il n'y ait pas de confusion par la suite. $new_password = ''; } } else { // On réinitialise la variable $new_password à zéro, pour être sûr // qu'il n'y ait pas de confusion par la suite. $new_password = ''; } } else { if ($ecraser_passwd_user) { $save_new_pass = Session::change_password_gepi($user_login,$new_password); if ($save_new_pass) {
//echo "\$reg_login = generate_unique_login($current_parent->nom, $current_parent->prenom, ".getSettingValue("mode_generation_login").");<br />\n"; $reg_login = generate_unique_login($current_parent->nom, $current_parent->prenom, getSettingValue("mode_generation_login_responsable"), getSettingValue("mode_generation_login_responsable_casse")); // generate_unique_login() peut retourner 'false' en cas de pb } if(($reg_login)&&($reg_login!='')) { //check_token(); // 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($_POST['new_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($reg_login, $current_parent->nom, $current_parent->prenom, $current_parent->mel, $current_parent->civilite, '', 'responsable'); } } else { $write_ldap = false; } if (!$write_ldap || ($write_ldap && $write_ldap_success)) { $reg = true; if ($_POST['reg_auth_mode'] == "auth_locale") { $reg_auth = "gepi";