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(); } //================================================ // Fonction de génération de mot de passe récupérée sur TotallyPHP // Aucune mention de licence pour ce script... /* * The letter l (lowercase L) and the number 1 * have been removed, as they can be mistaken * for each other. */ function createRandomPassword() { $chars = "abcdefghijkmnopqrstuvwxyz023456789"; srand((double)microtime()*1000000); $i = 0; $pass = '' ; //while ($i <= 7) { while ($i <= 5) { $num = rand() % 33; $tmp = mb_substr($chars, $num, 1); $pass = $pass . $tmp; $i++; } return $pass; } //================================================ $auth_sso=getSettingValue("auth_sso") ? getSettingValue("auth_sso") : ""; $gepi_non_plugin_lcs_mais_recherche_ldap=false; if((getSettingAOui('gepi_non_plugin_lcs_mais_recherche_ldap'))&&(file_exists("../secure/config_ldap.inc.php"))) { include("../secure/config_ldap.inc.php"); $lcs_ldap_base_dn=$ldap_base_dn; $lcs_ldap_host=$ldap_host; $lcs_ldap_port=$ldap_port; $gepi_non_plugin_lcs_mais_recherche_ldap=true; $lcs_ldap_people_dn = 'ou=people,'.$lcs_ldap_base_dn; $lcs_ldap_groups_dn = 'ou=groups,'.$lcs_ldap_base_dn; } include("../lib/initialisation_annee.inc.php"); $liste_tables_del = $liste_tables_del_etape_professeurs; //**************** EN-TETE ***************** $titre_page = "Outil d'initialisation de l'année : Importation des professeurs"; require_once("../lib/header.inc.php"); //**************** FIN EN-TETE ***************** require_once("init_xml_lib.php"); ?>
Si vous poursuivez la procédure les données telles que notes, appréciations, ... seront effacées.
\n"; echo "Les tables vidées seront : $chaine_tables
\n"; echo "Création d'un fichier de sauvegarde de la matière principale de chaque professeur.
\n"; while($lig_mp=mysqli_fetch_object($res_matiere_principale)) { fwrite($fich_mp,"$lig_mp->id_professeur;$lig_mp->id_matiere\n"); } fclose($fich_mp); } else { echo "Echec de la création d'un fichier de sauvegarde de la matière principale de chaque professeur.
\n"; } } $sql="SELECT * FROM j_professeurs_matieres ORDER BY ordre_matieres;"; $res_matieres_profs=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_matieres_profs)>0) { $fich_mp=fopen("../temp/".$dirname."/matieres_profs_an_dernier.csv","w+"); if($fich_mp) { echo "Création d'un fichier de sauvegarde des matières (de l'an dernier) de chaque professeur.
\n"; while($lig_mp=mysqli_fetch_object($res_matieres_profs)) { fwrite($fich_mp,"$lig_mp->id_professeur;$lig_mp->id_matiere\n"); } fclose($fich_mp); } else { echo "Echec de la création d'un fichier de sauvegarde des matières (de l'an dernier) de chaque professeur.
\n"; } } check_token(false); $j=0; while ($j < count($liste_tables_del)) { $test = mysqli_num_rows(mysqli_query($GLOBALS["mysqli"], "SHOW TABLES LIKE '$liste_tables_del[$j]'")); if($test==1){ if (old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(*) FROM $liste_tables_del[$j]"),0)!=0) { $del = @mysqli_query($GLOBALS["mysqli"], "DELETE FROM $liste_tables_del[$j]"); } } $j++; } } $del = @mysqli_query($GLOBALS["mysqli"], "DELETE FROM tempo2"); echo "\n"; echo "Il semble que le dossier temporaire de l'utilisateur ".$_SESSION['login']." ne soit pas défini!?
\n"; // Il ne faut pas aller plus loin... // SITUATION A GERER } $dest_file="../temp/".$tempdir."/sts.xml"; $sts_xml=simplexml_load_file($dest_file); if(!$sts_xml) { echo "ECHEC du chargement du fichier avec simpleXML.
\n"; require("../lib/footer.inc.php"); die(); } $nom_racine=$sts_xml->getName(); if(my_strtoupper($nom_racine)!='STS_EDT') { echo "ERREUR: Le fichier XML fourni n'a pas l'air d'être un fichier XML STS_EMP_<RNE>_<ANNEE>.
Sa racine devrait être 'STS_EDT'.
";
echo "Analyse du fichier pour extraire les informations de la section INDIVIDUS... Dans le tableau ci-dessous, les identifiants en rouge correspondent à des professeurs nouveaux dans la base GEPI. les identifiants en vert correspondent à des professeurs détectés dans les fichiers CSV mais déjà présents dans la base GEPI. Identifiant du professeur Nom Prénom ".$prof[$k]["nom_usage"]." ".casse_mot($prof[$k]["prenom"],'majf2')." n'a pas de date de naissance renseignée. Non trouvé dans l'annuaire LDAP ".$prof[$k]["nom_usage"]." ".$premier_prenom." $lcs_prof_details_erreur ".$prof[$k]["nom_usage"]." ".$premier_prenom." ".$login_prof." ".$prof[$k]["nom_usage"]." ".$premier_prenom." ".$login_prof_gepi." ".$prof[$k]["nom_usage"]." ".$prof[$k]["prenom"]." Lors de l'enregistrement des données il y a eu $nb_reg_no erreurs. Essayez de trouvez la cause de l'erreur et recommencez la procédure avant de passer à l'étape suivante.\n";
}
else {
echo " L'importation des professeurs dans la base GEPI a été effectuée avec succès ! * Précision sur les mots de passe (en non-SSO) : Dans tous les cas le nouvel utilisateur est amené à changer son mot de passe lors de sa première connexion. Vous pouvez procéder à la cinquième phase d'affectation des matières à chaque professeur, d'affectation des professeurs dans chaque classe et de définition des options suivies par les élèves.
\n";
$prof=array();
$i=0;
$tab_champs_personnels=array("NOM_USAGE",
"NOM_PATRONYMIQUE",
"PRENOM",
"SEXE",
"CIVILITE",
"DATE_NAISSANCE",
"GRADE",
"FONCTION");
$prof=array();
$i=0;
foreach($sts_xml->DONNEES->INDIVIDUS->children() as $individu) {
$prof[$i]=array();
//echo "\$individu->NOM_USAGE=".$individu->NOM_USAGE."
";
foreach($individu->attributes() as $key => $value) {
//
";
}
}
if(isset($individu->PROFS_PRINC)) {
$j=0;
foreach($individu->PROFS_PRINC->children() as $prof_princ) {
//$prof[$i]["prof_princ"]=array();
foreach($prof_princ->children() as $key => $value) {
$prof[$i]["prof_princ"][$j][my_strtolower($key)]=trim(preg_replace('/"/',"",$value));
$temoin_au_moins_un_prof_princ="oui";
}
$j++;
}
}
if(isset($individu->DISCIPLINES)) {
$j=0;
foreach($individu->DISCIPLINES->children() as $discipline) {
foreach($discipline->attributes() as $key => $value) {
if(my_strtoupper($key)=='CODE') {
$prof[$i]["disciplines"][$j]["code"]=trim(preg_replace('/"/',"",$value));
break;
}
}
foreach($discipline->children() as $key => $value) {
$prof[$i]["disciplines"][$j][my_strtolower($key)]=trim(preg_replace('/"/',"",$value));
}
$j++;
}
}
if($debug_import=='y') {
echo "Tableau \$prof[$i] :";
print_r($prof[$i]);
echo "
";
}
$i++;
}
// Les $prof[$i]["disciplines"] ne sont pas utilisées sauf à titre informatif à l'affichage...
// Les $prof[$i]["prof_princ"][$j]["code_structure"] peuvent être exploitées à ce niveau pour désigner les profs principaux.
//========================================================
// On commence par rendre inactifs tous les professeurs
$req = mysqli_query($GLOBALS["mysqli"], "UPDATE utilisateurs set etat='inactif' where statut = 'professeur'");
// on efface la ligne "display_users" dans la table "setting" de façon à afficher tous les utilisateurs dans la page /utilisateurs/index.php
$req = mysqli_query($GLOBALS["mysqli"], "DELETE from setting where NAME = 'display_users'");
if(($auth_sso=='lcs')||($gepi_non_plugin_lcs_mais_recherche_ldap)) {
require_once("../lib/lcs.inc.php");
$ds = connect_ldap($lcs_ldap_host,$lcs_ldap_port,"","");
}
echo "
Il est possible que certains professeurs ci-dessous, bien que figurant dans le fichier CSV, ne soient plus en exercice dans votre établissement cette année. C'est pourquoi il vous sera proposé en fin de procédure d'initialsation, un nettoyage de la base afin de supprimer ces données inutiles.\n";
echo "
\n";
if((isset($tab_nouveaux_profs))&&(count($tab_nouveaux_profs)>0)) {
echo "\n";
}
if((isset($info_pb_mdp))&&($info_pb_mdp!="")) {
echo $info_pb_mdp;
}
if ($nb_reg_no != 0) {
echo " \n";
srand();
$nb_reg_no = 0;
$tab_nouveaux_profs=array();
$info_pb_mdp="";
$alt=1;
for($k=0;$kMot de passe *
Son mot de passe est généré aléatoirement.
\n";
//$chaine=$prof[$k]["nom_usage"].";".$prof[$k]["prenom"].";".$civi.";"."P".$prof[$k]["id"].";"."ENS".";".$mdp;
$prenoms = explode(" ",$prof[$k]["prenom"]);
$premier_prenom = $prenoms[0];
$prenom_compose = '';
if (isset($prenoms[1])) $prenom_compose = $prenoms[0]."-".$prenoms[1];
$lcs_prof_en_erreur="n";
if(($auth_sso=='lcs')||($gepi_non_plugin_lcs_mais_recherche_ldap)) {
$lcs_prof_en_erreur="y";
$lcs_prof_details_erreur="";
$exist = 'no';
if($prof[$k]["id"]!='') {
$login_prof_gepi=get_lcs_login($prof[$k]["id"], 'professeur');
//echo "get_lcs_login(".$prof[$k]["id"].", 'professeur')=".$login_prof_gepi."
";
if($login_prof_gepi!='') {
$lcs_prof_en_erreur="n";
//$sql="SELECT 1=1 FROM utilisateurs WHERE login='$login_prof_gepi';";
$sql="SELECT statut FROM utilisateurs WHERE login='$login_prof_gepi';";
$test_exist_prof=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test_exist_prof)>0) {
$lig_test_prof=mysqli_fetch_object($test_exist_prof);
if($lig_test_prof->statut!='professeur') {
$lcs_prof_en_erreur="yy";
$lcs_prof_details_erreur="Le compte $login_prof_gepi du LDAP correspond dans Gepi à un compte de statut ".$lig_test_prof->statut;
}
$exist = 'yes';
}
else {
$exist = 'no';
}
}
else {
$lcs_prof_en_erreur="y";
}
}
}
else {
// On effectue d'abord un test sur le NUMIND
$sql="select login from utilisateurs where (
numind='P".$prof[$k]["id"]."' and
numind!='' and
statut='professeur')";
//echo " ";
$test_exist = mysqli_query($GLOBALS["mysqli"], $sql);
$result_test = mysqli_num_rows($test_exist);
if ($result_test == 0) {
// On tente ensuite une reconnaissance sur nom/prénom, si le test NUMIND a échoué
$sql="select login from utilisateurs where (
nom='".mysqli_real_escape_string($GLOBALS["mysqli"], $prof[$k]["nom_usage"])."' and
prenom = '".mysqli_real_escape_string($GLOBALS["mysqli"], $premier_prenom)."' and
statut='professeur')";
// Pour debug:
//echo "$sql$sql
";
$test_exist = mysqli_query($GLOBALS["mysqli"], $sql);
$result_test = mysqli_num_rows($test_exist);
if ($result_test == 0) {
if ($prenom_compose != '') {
$test_exist2 = mysqli_query($GLOBALS["mysqli"], "select login from utilisateurs
where (
nom='".mysqli_real_escape_string($GLOBALS["mysqli"], $prof[$k]["nom_usage"])."' and
prenom = '".mysqli_real_escape_string($GLOBALS["mysqli"], $prenom_compose)."' and
statut='professeur'
)");
$result_test2 = mysqli_num_rows($test_exist2);
if ($result_test2 == 0) {
$exist = 'no';
} else {
$exist = 'yes';
$login_prof_gepi = old_mysql_result($test_exist2,0,'login');
}
} else {
$exist = 'no';
}
} else {
$exist = 'yes';
$login_prof_gepi = old_mysql_result($test_exist,0,'login');
}
} else {
$exist = 'yes';
$login_prof_gepi = old_mysql_result($test_exist,0,'login');
}
}
if($lcs_prof_en_erreur=="y") {
$alt=$alt*(-1);
echo "\n";
echo " \n";
}
elseif($lcs_prof_en_erreur=="yy") {
$alt=$alt*(-1);
echo " \n";
echo " \n";
}
/*
elseif(getSettingValue('auth_sso')=='lcs') {
if ($exist == 'no') {
// On devrait récupérer nom, prénom,... du LDAP du LCS...
}
else {
}
}
*/
else {
if ($exist == 'no') {
// Aucun professeur ne porte le même nom dans la base GEPI. On va donc rentrer ce professeur dans la base
$prof[$k]["prenom"]=nettoyer_caracteres_nom($prof[$k]["prenom"],"a"," _-","");
if($_POST['login_gen_type'] == 'ent'){
if ((getSettingValue("use_ent") == 'y')&&(getSettingValue('afficher_liaison_ent')!="netcollege")) {
// Charge à l'organisme utilisateur de pourvoir à cette fonctionnalité
// le code suivant n'est qu'une méthode proposée pour relier Gepi à un ENT
$bx = 'oui';
if (isset($bx) AND $bx == 'oui') {
// On va chercher le login de l'utilisateur dans la table créée
$sql_p = "SELECT login_u FROM ldap_bx
WHERE nom_u = '".my_strtoupper($prof[$k]["nom_usage"])."'
AND prenom_u = '".my_strtoupper($prof[$k]["prenom"])."'
AND statut_u = 'teacher'";
$query_p = mysqli_query($GLOBALS["mysqli"], $sql_p);
$nbre = mysqli_num_rows($query_p);
if ($nbre >= 1 AND $nbre < 2) {
$temp1 = old_mysql_result($query_p, 0,"login_u");
}else{
// Il faudrait alors proposer une alternative à ce cas
$temp1 = "erreur_".$k;
}
}
}
else{
die('Vous n\'avez pas autorisé Gepi à utiliser un ENT');
}
}
else {
$temp1=generate_unique_login($prof[$k]["nom_usage"], $prof[$k]["prenom"], $_POST['login_gen_type'], $_POST['login_gen_type_casse']);
}
if(($auth_sso=='lcs')||($gepi_non_plugin_lcs_mais_recherche_ldap)) {
// On ne devrait jamais arriver là.
$login_prof=$login_prof_gepi;
}
else {
if((!$temp1)||($temp1=="")) {
$temp1="erreur_";
}
$login_prof = $temp1;
//$login_prof = remplace_accents($temp1,"all");
// On teste l'unicité du login que l'on vient de créer
$m = 2;
$test_unicite = 'no';
$temp = $login_prof;
while ($test_unicite != 'yes') {
$test_unicite = test_unique_login($login_prof);
if ($test_unicite != 'yes') {
$login_prof = $temp.$m;
$m++;
}
}
}
$prof[$k]["nom_usage"] = nettoyer_caracteres_nom($prof[$k]["nom_usage"],"a"," _-","");
// Mot de passe et change_mdp
$changemdp = 'y';
if(($auth_sso=='lcs')||($gepi_non_plugin_lcs_mais_recherche_ldap)) {
$pwd = '';
$mess_mdp = "aucun (sso)";
$changemdp = 'n';
}
elseif (mb_strlen($mdp)>2 and (!isset($prof[$k]["fonction"]) or $prof[$k]["fonction"]=="ENS") and $_POST['sso'] == "no") {
//
$pwd = md5(trim($mdp));
//$mess_mdp = "NUMEN";
if($_POST['mode_mdp']=='alea'){
$mess_mdp = "$mdp";
}
elseif(!isset($prof[$k]["date_naissance"])) {
$mess_mdp = "$mdp";
}
else{
$mess_mdp = "Mot de passe d'après la date de naissance";
}
//echo " ";
} elseif ($_POST['sso']== "no") {
$pwd = md5(rand (1,9).rand (1,9).rand (1,9).rand (1,9).rand (1,9).rand (1,9));
$mess_mdp = $pwd;
//echo "NUMEN: $affiche[5] $pwd ";
// $mess_mdp = "Inconnu (compte bloqué)";
} elseif ($_POST['sso'] == "yes") {
$pwd = '';
$mess_mdp = "aucun (sso)";
$changemdp = 'n';
//echo "Choix 2: $pwd ";
}
// utilise le prénom composé s'il existe, plutôt que le premier prénom
$sql="INSERT INTO utilisateurs SET login='$login_prof', nom='".mysqli_real_escape_string($GLOBALS["mysqli"], $prof[$k]["nom_usage"])."', prenom='".mysqli_real_escape_string($GLOBALS["mysqli"], $premier_prenom)."', civilite='$civilite', password='$pwd', statut='professeur', etat='actif', change_mdp='".$changemdp."', numind='P".$prof[$k]["id"]."', type='".$prof[$k]["type"]."'";
if(($auth_sso=='lcs')||($gepi_non_plugin_lcs_mais_recherche_ldap)) {
$sql.=", auth_mode='sso'";
}
$res = mysqli_query($GLOBALS["mysqli"], $sql);
// Pour debug:
//echo "sso ";
$tab_nouveaux_profs[]="$login_prof|$mess_mdp";
if(!$res){$nb_reg_no++;}
$res = mysqli_query($GLOBALS["mysqli"], "INSERT INTO tempo2 VALUES ('".$login_prof."', '"."P".$prof[$k]["id"]."')");
$alt=$alt*(-1);
echo "$sql \n";
echo " \n";
} else {
// On corrige aussi les nom/prénom/civilité et numind parce que la reconnaissance a aussi pu se faire sur le nom/prénom
$sql="UPDATE utilisateurs set etat='actif', nom='".mysqli_real_escape_string($GLOBALS["mysqli"], $prof[$k]["nom_usage"])."', prenom='".mysqli_real_escape_string($GLOBALS["mysqli"], $premier_prenom)."', civilite='$civilite', numind='P".$prof[$k]["id"]."', type='".$prof[$k]["type"]."'";
if(($auth_sso=='lcs')||($gepi_non_plugin_lcs_mais_recherche_ldap)) {
$sql.=", auth_mode='sso'";
}
$sql.=" where login = '".$login_prof_gepi."';";
$res = mysqli_query($GLOBALS["mysqli"], $sql);
if(!$res) $nb_reg_no++;
$res = mysqli_query($GLOBALS["mysqli"], "INSERT INTO tempo2 VALUES ('".$login_prof_gepi."', '"."P".$prof[$k]["id"]."')");
$alt=$alt*(-1);
echo "".$mess_mdp." \n";
echo " \n";
}
}
//}
}
}
echo "Inchangé
\n";
if ($_POST['sso'] != "yes") {
echo "
(il est alors conseillé d'imprimer cette page)
\n
\n");
$fich=fopen("../temp/$tempdir/f_div.csv","w+");
$chaine="DIVCOD;NUMIND";
if($fich){
fwrite($fich,html_entity_decode($chaine)."\n");
}
affiche_debug($chaine."
\n");
$tabchaine=array();
for($m=0;$m
La création des enseignements peut se faire de trois façons différentes (par ordre de préférence) :
\n"; echo "";
echo "Si votre emploi du temps est remonté vers STS, vous disposez d'un fichier sts_emp_RNE_ANNEE.xml :";
echo "
";
echo "Procéder à la cinquième phase d'initialisation
Si la remontée vers STS n'a pas encore été effectuée, vous pouvez effectuer l'initialisation des enseignements à partir d'un export CSV de UnDeuxTemps :
Procéder à la cinquième phase d'initialisation
(procédure encore expérimentale... il se peut que vous ayez des groupes en trop)
Si la remontée vers STS n'a pas encore été effectuée, vous pouvez effectuer l'initialisation des enseignements à partir d'un export XML (EXP_COURS.xml) d'IndexEducation :
Procéder à la cinquième phase d'initialisation
(procédure encore expérimentale (vous pourrez compléter à la main s'il manque des groupes))
Si vous n'avez pas non plus d'export CSV d'UnDeuxTemps ou d'IndexEducation :
Initialisation alternative des enseignements
(le mode le plus fastidieux)