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; //**************** 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... include "../lib/eole_sync_functions.inc.php"; // On se connecte au LDAP $ldap_server = new LDAPServer; //----***** 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 $j=0; while ($j < count($liste_tables_del)) { 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++; } // On va enregistrer la liste des classes, ainsi que les périodes qui leur seront attribuées $sr = ldap_search($ldap_server->ds,$ldap_server->base_dn,"(description=Classe*)"); $data = ldap_get_entries($ldap_server->ds,$sr); for ($i=0;$i<$data["count"];$i++) { $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); if ($test == "0") { //$reg_classe = mysql_query("INSERT INTO classes SET classe='".traitement_magic_quotes(corriger_caracteres($classe))."',nom_complet='".traitement_magic_quotes(corriger_caracteres($_POST['reg_nom_complet'][$classe]))."',suivi_par='".traitement_magic_quotes(corriger_caracteres($_POST['reg_suivi'][$classe]))."',formule='".traitement_magic_quotes(corriger_caracteres($_POST['reg_formule'][$classe]))."', format_nom='np'"); $reg_classe = mysqli_query($GLOBALS["mysqli"], "INSERT INTO classes SET classe='".traitement_magic_quotes(corriger_caracteres($classe))."',nom_complet='".traitement_magic_quotes(corriger_caracteres($_POST['reg_nom_complet'][$classe]))."',suivi_par='".traitement_magic_quotes(corriger_caracteres($_POST['reg_suivi'][$classe]))."',formule='".html_entity_decode(traitement_magic_quotes(corriger_caracteres($_POST['reg_formule'][$classe])))."', format_nom='np'"); } else { //$reg_classe = mysql_query("UPDATE classes SET classe='".traitement_magic_quotes(corriger_caracteres($classe))."',nom_complet='".traitement_magic_quotes(corriger_caracteres($_POST['reg_nom_complet'][$classe]))."',suivi_par='".traitement_magic_quotes(corriger_caracteres($_POST['reg_suivi'][$classe]))."',formule='".traitement_magic_quotes(corriger_caracteres($_POST['reg_formule'][$classe]))."', format_nom='np' WHERE classe='$classe'"); $reg_classe = mysqli_query($GLOBALS["mysqli"], "UPDATE classes SET classe='".traitement_magic_quotes(corriger_caracteres($classe))."',nom_complet='".traitement_magic_quotes(corriger_caracteres($_POST['reg_nom_complet'][$classe]))."',suivi_par='".traitement_magic_quotes(corriger_caracteres($_POST['reg_suivi'][$classe]))."',formule='".html_entity_decode(traitement_magic_quotes(corriger_caracteres($_POST['reg_formule'][$classe])))."', format_nom='np' WHERE classe='$classe'"); } if (!$reg_classe) echo "

Erreur 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"; $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 les groupes $sql = mysqli_query($GLOBALS["mysqli"], "select distinct id_classe from periodes where verouiller='T'"); $k = 0; while ($k < mysqli_num_rows($sql)) { $id_classe = old_mysql_result($sql, $k); $res1 = mysqli_query($GLOBALS["mysqli"], "delete from classes where id='".$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 . "'"); } } $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 "

"; 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($ldap_server->ds,$ldap_server->base_dn,"(description=Classe*)"); $data = ldap_get_entries($ldap_server->ds,$sr); 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 = $data[$i]["cn"][0]; $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 = $classe_id; $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 = "".$classe_id.""; $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") { // La deuxième étape consiste à importer les élèves et à les affecter dans les classes // On créé un tableau avec tous les professeurs principaux de chaque classe $classes = mysqli_query($GLOBALS["mysqli"], "SELECT id, classe FROM classes"); $nb_classes = mysqli_num_rows($classes); $pp = array(); for ($i=0;$i<$nb_classes;$i++) { $current_classe = old_mysql_result($classes, $i, "classe"); $current_classe_id = old_mysql_result($classes, $i, "id"); $sr = ldap_search($ldap_server->ds,$ldap_server->base_dn,"(&(objectClass=administrateur)(divcod=" . $current_classe ."))"); $prof = ldap_get_entries($ldap_server->ds,$sr); if (array_key_exists(0, $prof)) { $pp[$current_classe_id] = $prof[0]["uid"][0]; } } // Debug profs principaux //echo "
";
        //print_r($pp);
        //echo "
"; $sr = ldap_search($ldap_server->ds,$ldap_server->base_dn,"(&(uid=*)(objectClass=Eleves))"); $info = ldap_get_entries($ldap_server->ds,$sr); for($i=0;$i<$info["count"];$i++) { // On ajoute l'utilisateur. La fonction s'occupe toute seule de vérifier que // le login n'existe pas déjà dans la base. S'il existe, on met simplement à jour // les informations // function add_eleve($_login, $_nom, $_prenom, $_sexe, $_naissance, $_elenoet) { $date_naissance = mb_substr($info[$i]["datenaissance"][0], 0, 4) . "-" . mb_substr($info[$i]["datenaissance"][0], 4, 2) . "-" . mb_substr($info[$i]["datenaissance"][0], 6, 2); // ----- // DEPRECIATION : les lignes ci-dessous ne sont plus nécessaire, Gepi a été mis à jour // // Pour des raisons de compatibilité avec le code existant de Gepi, il n'est pas possible d'avoir // un point dans le login... (le point est transformé bizarrement en "_" dans les $_POST)... //$info[$i]["uid"][0] = preg_replace("/\./", "_", $info[$i]["uid"][0]); // ----- // En théorie ici chaque login est de toute façon unique. $add = add_eleve($info[$i]["uid"][0], $info[$i]["sn"][0], $info[$i]["givenname"][0], $info[$i]["codecivilite"][0], $date_naissance); //$info[$i]["employeenumber"]); $id_classe = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT id FROM classes WHERE classe = '" . $info[$i]["divcod"][0] . "'"), 0); $check = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(*) FROM j_eleves_professeurs WHERE (login = '" . $info[$i]["uid"][0] . "')"), 0); if ($check > 0) { $del = mysqli_query($GLOBALS["mysqli"], "DELETE from j_eleves_professeurs WHERE login = '" . $info[$i]["uid"][0] . "'"); } if (array_key_exists($id_classe, $pp)) { //echo "Debug : $pp[$id_classe]
"; $res = mysqli_query($GLOBALS["mysqli"], "INSERT INTO j_eleves_professeurs SET login = '" . $info[$i]["uid"][0] . "', id_classe = '" . $id_classe . "', professeur = '" . $pp[$id_classe] . "'"); } $get_periode_num = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(*) FROM periodes WHERE (id_classe = '" . $id_classe . "')"), 0); $check = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(*) FROM j_eleves_classes WHERE (login = '" . $info[$i]["uid"][0] . "')"), 0); if ($check > 0) { $del = mysqli_query($GLOBALS["mysqli"], "DELETE from j_eleves_classes WHERE login = '" . $info[$i]["uid"][0] . "'"); } for ($k=1;$k<$get_periode_num+1;$k++) { $res = mysqli_query($GLOBALS["mysqli"], "INSERT into j_eleves_classes SET login = '" . $info[$i]["uid"][0] . "', id_classe = '" . $id_classe . "', periode = '" . $k . "'"); } echo "
Login élève : " . $info[$i]["uid"][0] . " --- " . $date_naissance . " --- Classe " . $info[$i]["divcod"][0]; } echo "

Opération effectuée.

"; echo "

Vous pouvez vérifier l'importation en allant sur la page de gestion des eleves.

"; echo "
"; echo "

Phase suivante : importation des professeurs

"; } } else { echo "

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

"; echo ""; echo "
"; echo add_token_field(); echo ""; echo ""; $j=0; $flag=0; while (($j < count($liste_tables_del)) and ($flag==0)) { if (old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(*) FROM $liste_tables_del[$j]"),0)!=0) { $flag=1; } $j++; } 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 Scribe vers Gepi ?

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