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();
}
include("../lib/initialisation_annee.inc.php");
$liste_tables_del = $liste_tables_del_etape_eleves;
// Initialisation
$lcs_ldap_people_dn = 'ou=people,'.$lcs_ldap_base_dn;
$lcs_ldap_groups_dn = 'ou=groups,'.$lcs_ldap_base_dn;
function add_eleve($_login, $_nom, $_prenom, $_civilite, $_naissance, $_elenoet = 0) {
// Fonction d'ajout d'un élève dans la base Gepi
if ($_civilite != "M" && $_civilite != "F") {
if ($_civilite == 1) {
$_civilite = "M";
} elseif ($_civilite == 0) {
$_civilite = "F";
} else {
$_civilite = "F";
}
}
// Si l'élève existe déjà, on met simplement à jour ses informations...
$test = mysqli_query($GLOBALS["mysqli"], "SELECT login FROM eleves WHERE login = '" . $_login . "'");
if (mysqli_num_rows($test) > 0) {
$record = mysqli_query($GLOBALS["mysqli"], "UPDATE eleves SET nom = '" . $_nom . "', prenom = '" . $_prenom . "', sexe = '" . $_civilite . "', naissance = '" . $_naissance . "', elenoet = '" . $_elenoet . "' WHERE login = '" . $_login . "'");
} else {
$query = "INSERT into eleves SET
login= '" . $_login . "',
nom = '" . $_nom . "',
prenom = '" . $_prenom . "',
sexe = '" . $_civilite . "',
naissance = '". $_naissance ."',
elenoet = '".$_elenoet."'";
$record = mysqli_query($GLOBALS["mysqli"], $query);
}
if ($record) {
return true;
} else {
return false;
}
}
//**************** EN-TETE *****************
$titre_page = "Outil d'initialisation de l'année : Importation des élèves";
require_once("../lib/header.inc.php");
//**************** FIN EN-TETE *****************
?>
Retour
On vide d'abord les tables suivantes : ";
$j=0;
$k=0;
while ($j < count($liste_tables_del)) {
$sql="SHOW TABLES LIKE '".$liste_tables_del[$j]."';";
//echo "$sql
";
$test = sql_query1($sql);
if ($test != -1) {
if($k>0) {echo ", ";}
$sql="SELECT 1=1 FROM $liste_tables_del[$j];";
$res_test_tab=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_test_tab)>0) {
$sql="DELETE FROM $liste_tables_del[$j];";
$del = @mysqli_query($GLOBALS["mysqli"], $sql);
echo "".$liste_tables_del[$j]."";
echo " (".mysqli_num_rows($res_test_tab).")";
}
else {
echo $liste_tables_del[$j];
}
$k++;
}
$j++;
}
// Suppression des comptes d'élèves:
echo "
\n";
echo "
On supprime les anciens comptes élèves dans Gepi... ";
$sql="DELETE FROM utilisateurs WHERE statut='eleve';";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
// Pour ne pas mettre une info_action par classe si aucune période edt_calendrier n'est encore saisie
$sql="SELECT 1=1 FROM edt_calendrier WHERE classe_concerne_calendrier!=';' AND classe_concerne_calendrier!='';";
$test_cal=mysqli_query($GLOBALS["mysqli"], $sql);
$nb_edt_cal=mysqli_num_rows($test_cal);
// On ne met alors qu'une seule info_action
if($nb_edt_cal==0) {
$info_action_titre="Dates de périodes et de vacances";
$info_action_texte="Pensez à importer les périodes de vacances et saisir ou mettre à jour les dates de périodes et les classes associées dans Emplois du temps/Gestion/Gestion du calendrier. Erreur lors de l'enregistrement d'une période pour la classe $classe";
// 20150810
if($insert_ou_update_classe=="insert") {
$sql="SELECT * FROM edt_calendrier WHERE numero_periode='".$num."';";
$res_cal = mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_cal)==1) {
$lig_cal=mysqli_fetch_object($res_cal);
$tab_id_classe_deja=explode(";", $lig_cal->classe_concerne_calendrier);
$chaine_id_classe="";
for($loop=0;$loop Erreur lors de l'enregistrement d'une période pour la classe $classe";
}
}
}
}
$sql="update periodes set date_verrouillage='0000-00-00 00:00:00';";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if($res) {
echo "Réinitialisation des dates de verrouillage de périodes effectuée. Vous venez d'effectuer l'enregistrement des données concernant les classes. S'il n'y a pas eu d'erreurs, vous pouvez aller à l'étape suivante pour enregistrer les données concernant les élèves. ATTENTION : Opération effectuée. Avant de passer à l'étape suivante, vous devez procéder à la conversion de la table \"eleves\" et à l'importation des données manquantes :
Conversion et importation des données manquantes. L'opération d'importation des élèves depuis le LDAP de LCS va effectuer les opérations suivantes :
Les dates de vacances sont notamment utilisées pour les totaux d'absences.";
$info_action_destinataire=array("administrateur");
$info_action_mode="statut";
enregistre_infos_actions($info_action_titre,$info_action_texte,$info_action_destinataire,$info_action_mode);
}
// On va enregistrer la liste des classes, ainsi que les périodes qui leur seront attribuées
$sr = ldap_search($ds,$lcs_ldap_groups_dn,"(cn=Classe*)");
$data = ldap_get_entries($ds,$sr);
for ($i=0;$i<$data["count"];$i++) {
$classe=preg_replace("/Classe_/","",$data[$i]["cn"][0]);
// On enregistre la classe
// On teste d'abord :
$test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(*) FROM classes WHERE (classe='$classe')"),0);
$insert_ou_update_classe="";
if ($test == "0") {
$insert_ou_update_classe="insert";
//$reg_classe = mysql_query("INSERT INTO classes SET classe='".$classe."',nom_complet='".$_POST['reg_nom_complet'][$classe]."',suivi_par='".$_POST['reg_suivi'][$classe]."',formule='".$_POST['reg_formule'][$classe]."', format_nom='np'");
$reg_classe = mysqli_query($GLOBALS["mysqli"], "INSERT INTO classes SET classe='".$classe."',nom_complet='".$_POST['reg_nom_complet'][$classe]."',suivi_par='".$_POST['reg_suivi'][$classe]."',formule='".html_entity_decode($_POST['reg_formule'][$classe])."', format_nom='np'");
$tab_id_classe=array();
$sql="SELECT id FROM classes ORDER BY classe;";
$res_classe = mysqli_query($GLOBALS["mysqli"], $sql);
while($lig_classe=mysqli_fetch_object($res_classe)) {
$tab_id_classe[]=$lig_classe->id;
}
// Associer aux vacances:
$sql="SELECT * FROM edt_calendrier WHERE numero_periode='0' AND etabvacances_calendrier='1';";
$res_cal = mysqli_query($GLOBALS["mysqli"], $sql);
while($lig_cal=mysqli_fetch_object($res_cal)) {
$chaine_id_classe="";
$tab_id_classe_deja=explode(";", $lig_cal->classe_concerne_calendrier);
for($loop=0;$loop
";
}
else {
echo "Erreur lors de la réinitialisation des dates de verrouillage de périodes.
";
}
// On efface les classes qui ne sont pas réutilisées cette année ainsi que les entrées correspondantes dans j_classes_matieres_professeurs
$res_menage = mysqli_query($GLOBALS["mysqli"], "select distinct id_classe from periodes where verouiller='T'");
$k = 0;
while ($k < mysqli_num_rows($res_menage)) {
$id_classe = old_mysql_result($res_menage, $k);
$res1 = mysqli_query($GLOBALS["mysqli"], "delete from classes where id='".$id_classe."'");
$res2 = mysqli_query($GLOBALS["mysqli"], "delete from j_classes_matieres_professeurs where id_classe='".$id_classe."'");
$res3 = mysqli_query($GLOBALS["mysqli"], "delete from d_dates_evenements_classes where id_classe='".$id_classe."'");
// On supprime les groupes qui étaient liées à la classe
$get_groupes = mysqli_query($GLOBALS["mysqli"], "SELECT id_groupe FROM j_groupes_classes WHERE id_classe = '" . $id_classe . "'");
for ($l=0;$l<$nb_groupes;$l++) {
$id_groupe = old_mysql_result($get_groupes, $l, "id_groupe");
$delete2 = mysqli_query($GLOBALS["mysqli"], "delete from j_groupes_classes WHERE id_groupe = '" . $id_groupe . "'");
// On regarde si le groupe est toujours lié à une autre classe ou pas
$check = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(*) FROM j_groupes_classes WHERE id_groupe = '" . $id_groupe . "'"), 0);
if ($check == "0") {
$delete1 = mysqli_query($GLOBALS["mysqli"], "delete from groupes WHERE id = '" . $id_groupe . "'");
$delete2 = mysqli_query($GLOBALS["mysqli"], "delete from j_groupes_matieres WHERE id_groupe = '" . $id_groupe . "'");
$delete2 = mysqli_query($GLOBALS["mysqli"], "delete from j_groupes_professeurs WHERE id_groupe = '" . $id_groupe . "'");
}
}
// 20150810
$sql="SELECT * FROM edt_calendrier WHERE classe_concerne_calendrier LIKE '".$id_classe.";%' OR classe_concerne_calendrier LIKE '%;".$id_classe.";%';";
$res_edt=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_edt)>0) {
while($lig_edt=mysqli_fetch_object($res_edt)) {
$sql="UPDATE edt_calendrier SET classe_concerne_calendrier='".preg_replace("/^$id_classe;/", "", preg_replace("/;$id_classe;/", ";", $lig_edt->classe_concerne_calendrier))."' WHERE classe_concerne_calendrier LIKE '".$id_classe.";%' OR classe_concerne_calendrier LIKE '%;".$id_classe.";%';";
$update=mysqli_query($GLOBALS["mysqli"], $sql);
}
}
$k++;
}
$res = mysqli_query($GLOBALS["mysqli"], "delete from periodes where verouiller='T'");
echo "
Les champs \"régime\" (demi-pensionnaire, externe, ...), \"doublant\" et \"identifiant national\" ne sont pas présents dans l'annuaire LDAP.
Il en est de même de toutes les informations sur les responsables des élèves.
A l'issue de cette étape, vous devrez donc procéder à une opération consistant à convertir la table \"eleves\" et à importer les informations manquantes.
Vous devrez pour cela fournir des fichiers CSV (ELEVES.CSV, PERSONNES.CSV, RESPONSABLES.CSV et ADRESSES.CSV) générés ici depuis des fichiers XML extraits de SCONET.\n
\n";
for ($i=0;$i<$nb_classes;$i++) {
$current_classe = old_mysql_result($classes, $i, "classe");
$current_classe_id = old_mysql_result($classes, $i, "id");
$filtre = "(cn=Classe_".$current_classe.")";
$result= ldap_search ($ds, $lcs_ldap_groups_dn, $filtre);
if ($result) {
$info = @ldap_get_entries( $ds, $result );
for ( $u = 0; $u < $info[0]["memberuid"]["count"] ; $u++ ) {
$uid = $info[0]["memberuid"][$u] ;
if (trim($uid) !="") {
$eleve_de[$current_classe_id]=$uid;
// Extraction des infos sur l'élève :
$result2 = @ldap_read ( $ds, "uid=".$uid.",".$lcs_ldap_people_dn, "(objectclass=posixAccount)", $ldap_people_attr );
if ($result2) {
$info2 = @ldap_get_entries ( $ds, $result2 );
if ( $info2["count"]) {
// Traitement du champ gecos pour extraction de date de naissance, sexe
$gecos = $info2[0]["gecos"][0];
$tmp = split ("[\,\]",$info2[0]["gecos"][0],4);
$ret_people = array (
"uid" => $info2[0]["uid"][0],
"nom" => stripslashes($info2[0]["sn"][0]),
"fullname" => stripslashes($info2[0]["cn"][0]),
"pseudo" => $info2[0]["givenname"][0],
"email" => $info2[0]["mail"][0],
"homedirectory" => $info2[0]["homedirectory"][0],
"description" => $info2[0]["description"][0],
"shell" => $info2[0]["loginshell"][0],
"sexe" => $tmp[2],
"naissance" => $tmp[1],
"no_gep" => $info2[0]["employeenumber"][0]
);
$long = mb_strlen($ret_people["fullname"]) - mb_strlen($ret_people["nom"]);
$prenom = mb_substr($ret_people["fullname"], 0, $long) ;
$add = add_eleve($uid,$ret_people["nom"],$prenom,$tmp[2],$tmp[1],$ret_people["no_gep"]);
$get_periode_num = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(*) FROM periodes WHERE (id_classe = '" . $current_classe_id . "')"), 0);
$check = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(*) FROM j_eleves_classes WHERE (login = '" . $uid . "')"), 0);
if ($check > 0)
$del = mysqli_query($GLOBALS["mysqli"], "DELETE from j_eleves_classes WHERE login = '" . $uid . "'");
for ($k=1;$k<$get_periode_num+1;$k++) {
$res = mysqli_query($GLOBALS["mysqli"], "INSERT into j_eleves_classes SET login = '" . $uid . "', id_classe = '" . $current_classe_id . "', periode = '" . $k . "'");
}
$check = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(*) FROM j_eleves_regime WHERE (login = '" . $uid . "')"), 0);
if ($check > 0)
$del = mysqli_query($GLOBALS["mysqli"], "DELETE from j_eleves_regime WHERE login = '" . $uid . "'");
$res = mysqli_query($GLOBALS["mysqli"], "INSERT into j_eleves_regime SET login = '" . $uid . "',
regime = 'd/p',
doublant = '-'");
}
@ldap_free_result ( $result2 );
}
$date_naissance = mb_substr($tmp[1],6,2)."-".mb_substr($tmp[1],4,2)."-".mb_substr($tmp[1],0,4) ;
echo "Nom de la classe Login élève Nom Prénom Sexe Date de naissance Numéro GEP \n";
}
}
}
@ldap_free_result ( $result );
}
echo "".$current_classe." ".$uid." ".$ret_people["nom"]." ".$prenom." ".$tmp[2]." ".$date_naissance." ".$ret_people["no_gep"]." ";
echo "
";
echo "";
}
require("../lib/footer.inc.php");
?>