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 Retour

"; if (isset($_POST['step'])) { check_token(false); // L'admin a validé la procédure, on procède donc... // On se connecte au LDAP $ds = connect_ldap($lcs_ldap_host,$lcs_ldap_port,"",""); //----***** STEP 1 *****-----// if ($_POST['step'] == "1") { // La première étape consiste à importer les classes if ($_POST['record'] == "yes") { // Les données ont été postées, on les traite donc immédiatement echo "

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.
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;$loopErreur lors de l'enregistrement de la classe $classe."; // On enregistre les périodes pour cette classe // On teste d'abord : $id_classe = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "select id from classes where classe='$classe'"),0,'id'); $test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(*) FROM periodes WHERE (id_classe='$id_classe')"),0); if ($test == "0") { $j = '0'; while ($j < $_POST['reg_periodes_num'][$classe]) { $num = $j+1; $nom_per = "Période ".$num; if ($num == "1") { $ver = "N"; } else { $ver = 'O'; } $register = mysqli_query($GLOBALS["mysqli"], "INSERT INTO periodes SET num_periode='$num',nom_periode='$nom_per',verouiller='$ver',id_classe='$id_classe'"); if (!$register) echo "

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;$loopjourfin_calendrier."' WHERE id_classe='".$id_classe."' AND num_periode='".$lig_cal->numero_periode."';"; $update_per=mysqli_query($GLOBALS["mysqli"], $sql); } elseif($nb_edt_cal>0) { $info_action_titre="Dates de périodes pour la classe ".get_nom_classe($id_classe); $info_action_texte="Pensez à contrôler que la classe ".get_nom_classe($id_classe)." est bien associée aux périodes et vacances dans Emplois du temps/Gestion/Gestion du calendrier."; $info_action_destinataire=array("administrateur"); $info_action_mode="statut"; enregistre_infos_actions($info_action_titre,$info_action_texte,$info_action_destinataire,$info_action_mode); } } $j++; } } else { // on "démarque" les périodes des classes qui ne sont pas à supprimer $sql = mysqli_query($GLOBALS["mysqli"], "UPDATE periodes SET verouiller='N' where (id_classe='$id_classe' and num_periode='1')"); $sql = mysqli_query($GLOBALS["mysqli"], "UPDATE periodes SET verouiller='O' where (id_classe='$id_classe' and num_periode!='1')"); // $nb_per = mysqli_num_rows(mysqli_query($GLOBALS["mysqli"], "select num_periode from periodes where id_classe='$id_classe'")); if ($nb_per > $_POST['reg_periodes_num'][$classe]) { // Le nombre de périodes de la classe est inférieur au nombre enregistré // On efface les périodes en trop $k = 0; for ($k=$_POST['reg_periodes_num'][$classe]+1; $k<$nb_per+1; $k++) { $del = mysqli_query($GLOBALS["mysqli"], "delete from periodes where (id_classe='$id_classe' and num_periode='$k')"); } } if ($nb_per < $_POST['reg_periodes_num'][$classe]) { // Le nombre de périodes de la classe est supérieur au nombre enregistré // On enregistre les périodes $k = 0; $num = $nb_per; for ($k=$nb_per+1 ; $k < $_POST['reg_periodes_num'][$classe]+1; $k++) { $num++; $nom_per = "Période ".$num; if ($num == "1") { $ver = "N"; } else { $ver = 'O'; } $register = mysqli_query($GLOBALS["mysqli"], "INSERT INTO periodes SET num_periode='$num',nom_periode='$nom_per',verouiller='$ver',id_classe='$id_classe'"); if (!$register) echo "

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.
"; } 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 "

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.

"; echo "

ATTENTION :
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.

"; echo "
"; echo "
"; echo add_token_field(); echo ""; echo ""; echo ""; echo "
"; echo "
"; // On sauvegarde le témoin du fait qu'il va falloir // convertir pour générer l'ELE_ID et remplir ensuite les nouvelles tables responsables: saveSetting("conv_new_resp_table", 0); } else { // Les données n'ont pas encore été postées, on affiche donc le tableau des classes // On commence par "marquer" les classes existantes dans la base $sql = mysqli_query($GLOBALS["mysqli"], "UPDATE periodes SET verouiller='T'"); $sr = ldap_search($ds,$lcs_ldap_groups_dn,"(cn=Classe*)"); $data = ldap_get_entries($ds,$sr); // On va enregistrer la liste des classes, ainsi que les périodes qui leur seront attribuées echo "
"; echo add_token_field(); echo ""; echo ""; echo "

Les classes en vert indiquent des classes déjà existantes dans la base GEPI.
Les classes en rouge indiquent des classes nouvelles et qui vont être ajoutées à la base GEPI.

"; echo "

Pour les nouvelles classes, des noms standards sont utilisés pour les périodes (période 1, période 2...), et seule la première période n'est pas verrouillée. Vous pourrez modifier ces paramètres ultérieurement

"; echo "

Attention !!! Il n'y a pas de tests sur les champs entrés. Soyez vigilant à ne pas mettre des caractères spéciaux dans les champs ...

"; echo "

Essayez de remplir tous les champs, cela évitera d'avoir à le faire ultérieurement.

"; echo "

N'oubliez pas d'enregistrer les données en cliquant sur le bouton en bas de la page

"; ?>

Aide au remplissage
           
  Vous pouvez remplir les cases une à une et/ou globalement grâce aux fonctionnalités offertes ci-dessous :
  1) D'abord, cochez les lignes une à une
  Vous pouvez aussi   COCHER ou DECOCHER toutes les lignes , ou INVERSER la sélection
  2) Puis, pour les lignes cochées :
  le nom au bas du bulletin sera  : 
  la formule au bas du bulletin sera  : 
  3) Cliquez sur les boutons "Recopier" pour remplir les champs selectionnés.

"; echo "

Aide
Remplissage

Identifiant de la classe

Nom complet

Nom apparaissant au bas du bulletin

formule au bas du bulletin

Nombres de périodes

"; for ($i=0;$i<$data["count"];$i++) { $classe_id = preg_replace("/Classe_/","",$data[$i]["cn"][0]); $description= $data[$i]["description"][0]; if ($description == "") $description = $classe_id; $test_classe_exist = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM classes WHERE classe='$classe_id'"); $nb_test_classe_exist = mysqli_num_rows($test_classe_exist); if ($nb_test_classe_exist==0) { $nom_complet = $description; $nom_court = "".$classe_id.""; $suivi_par = getSettingValue("gepiAdminPrenom")." ".getSettingValue("gepiAdminNom").", ".getSettingValue("gepiAdminFonction"); $formule = ""; $nb_per = '3'; } else { $id_classe = old_mysql_result($test_classe_exist, 0, 'id'); $nb_per = mysqli_num_rows(mysqli_query($GLOBALS["mysqli"], "select num_periode from periodes where id_classe='$id_classe'")); $nom_court = "".$description.""; $nom_complet = old_mysql_result($test_classe_exist, 0, 'nom_complet'); $suivi_par = old_mysql_result($test_classe_exist, 0, 'suivi_par'); $formule = old_mysql_result($test_classe_exist, 0, 'formule'); } echo ""; echo "
\n"; echo ""; echo "

$nom_court

"; echo ""; echo ""; echo ""; echo "\n"; echo ""; echo ""; echo "\n"; echo ""; echo ""; echo "\n"; echo ""; echo ""; echo ""; echo ""; } echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; } //----***** STEP 2 *****-----// } elseif ($_POST['step'] == "2") { // LDAP attribute $ldap_people_attr = array( "uid", // login "cn", // Prenom Nom "sn", // Nom "givenname", // Pseudo "mail", // Mail "homedirectory", // Home directory personnal web space "description", "loginshell", "gecos", // Date de naissance,Sexe (F/M), "employeenumber" // identifiant gep ); // La deuxième étape consiste à importer les élèves et à les affecter dans les classes $classes = mysqli_query($GLOBALS["mysqli"], "SELECT id, classe FROM classes"); $nb_classes = mysqli_num_rows($classes); $eleves_de = array(); echo "\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 "\n"; } } } @ldap_free_result ( $result ); } echo "
Nom de la classeLogin élèveNom PrénomSexeDate de naissanceNuméro GEP
".$current_classe."".$uid."".$ret_people["nom"]."".$prenom."".$tmp[2]."".$date_naissance."".$ret_people["no_gep"]."

Opération effectuée.

"; echo "

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.

"; } } else { echo "

L'opération d'importation des élèves depuis le LDAP de LCS va effectuer les opérations suivantes :

"; echo ""; echo "
"; echo add_token_field(); echo ""; echo ""; $j=0; $flag=0; for($j=0;$j"; $test = sql_query1($sql); if ($test != -1) { $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) { $flag=1; break; } } //flush(); } if ($flag != 0){ echo "

ATTENTION ...
"; echo "Des données concernant la constitution des classes et l'affectation des élèves dans les classes sont présentes dans la base GEPI ! Si vous poursuivez la procédure, ces données seront définitivement effacées !

"; } echo "

Etes-vous sûr de vouloir importer tous les élèves depuis l'annuaire du serveur LCS vers Gepi ?

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