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();
}
// Initialisation
$lcs_ldap_people_dn = 'ou=people,'.$lcs_ldap_base_dn;
$lcs_ldap_groups_dn = 'ou=groups,'.$lcs_ldap_base_dn;
//**************** EN-TETE *****************
$titre_page = "Outil d'initialisation de l'année : affectation des matières et des professeurs aux classes";
require_once("../lib/header.inc.php");
//**************** FIN EN-TETE *****************
echo "
Retour
";
function is_prof($login,$matiere) {
$test = sql_query1("select count(id_professeur) from j_professeurs_matieres where id_professeur = '".$login."' and id_matiere = '".$matiere."'");
if ($test > 0)
return true;
else
return false;
}
if (isset($_POST['is_posted'])) {
check_token();
// L'admin a validé la procédure, on procède donc...
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++;
}
// On se connecte au LDAP
$ds = connect_ldap($lcs_ldap_host,$lcs_ldap_port,"","");
echo "
\n";
echo "| Classe | Matière | identifiants prof. |
\n";
// Première boucle sur les classes :
//================================================
// Modif: boireaus 20091119
//$res = sql_query("select id, classe from classes");
$res = sql_query("select id, classe from classes");
//================================================
if (!$res) die("problème : impossible de sélectionner les classes.");
for ($i = 0; ($row = sql_row($res, $i)); $i++) {
$id_classe = $row[0];
$nom_classe = $row[1];
// Deuxième boucle sur les matières :
$res2 = sql_query("select matiere, nom_complet from matieres");
if (!$res2) die("problème : impossible de sélectionner les matières.");
for ($j = 0; ($row2 = sql_row($res2, $j)); $j++) {
$id_matiere = $row2[0];
$nom_complet = $row2[1];
// On cherche tous groupes qui commence par "Cours_Matiere_Classe"
//================================================
// Modif: boireaus 20091119
//$nom_cours = "Cours_".$id_matiere."_".$nom_classe."_";
$nom_cours = "Cours_".$id_matiere."_".$nom_classe;
//================================================
$sr = ldap_search($ds,$ldap_base,"(cn=".$nom_cours."*)");
$info = ldap_get_entries($ds,$sr);
$ordre = 0;
// boucle sur les "Cours_Matiere_Classe..."
for ($k=0;$k<$info["count"];$k++) {
// On récupère tous les membres de ces groupes
for ( $u = 0; $u < $info[$k]["memberuid"]["count"] ; $u++ ) {
$uid = $info[$k]["memberuid"][$u] ;
if (is_prof($uid,$id_matiere)) {
// On regarde si cette association correspond déjà à un groupe
$test = mysqli_query($GLOBALS["mysqli"], "SELECT g.id FROM groupes g, j_groupes_classes jgc, j_groupes_matieres jgm WHERE (" .
"g.id = jgc.id_groupe AND " .
"jgc.id_classe = '" . $id_classe . "' AND " .
"jgc.id_groupe = jgm.id_groupe AND " .
"jgm.id_matiere = '" . $id_matiere . "')");
if (mysqli_num_rows($test) != 0) {
$ordre++;
// Si un enregistrement existe déjà, ça veut dire que le groupe a déjà été traité
// il ne reste alors qu'à ajouter le professeur mentionné dans cette association
$group_id = old_mysql_result($test, 0, "id");
$insert_prof = mysqli_query($GLOBALS["mysqli"], "INSERT into j_groupes_professeurs SET id_groupe = '" . $group_id ."', login = '" . $uid . "', ordre_prof = '" . $ordre ."'");
} else {
// La première étape consiste à créer le nouveau groupe, pour obtenir son ID
$ordre++;
$new_group = create_group($nom_complet, $nom_complet, $id_matiere, array($id_classe));
// On ajoute le professeur
$insert_prof = mysqli_query($GLOBALS["mysqli"], "INSERT into j_groupes_professeurs SET id_groupe = '" . $new_group ."', login = '" . $uid . "', ordre_prof = '" . $ordre ."'");
// On s'occupe maintenant des élèves, période par période
$call_periodes = mysqli_query($GLOBALS["mysqli"], "select num_periode FROM periodes WHERE id_classe = '" . $id_classe . "'");
$nb_per = mysqli_num_rows($call_periodes);
for ($m=0;$m<$nb_per;$m++) {
$num_periode = old_mysql_result($call_periodes, $m, "num_periode");
$call_eleves = mysqli_query($GLOBALS["mysqli"], "SELECT login FROM j_eleves_classes WHERE (periode = '" . $num_periode . "' AND id_classe = '" . $id_classe ."')");
$eleves = array();
while ($row1 = mysqli_fetch_row($call_eleves)) {
$eleves[] = $row1[0];
}
foreach ($eleves as $login) {
if ($new_group == 0) echo "ERREUR! New_group ID = 0
";
// Appartenance au groupe
$insert = mysqli_query($GLOBALS["mysqli"], "INSERT into j_eleves_groupes SET login = '" . $login . "', id_groupe = '" . $new_group . "', periode = '" . $num_periode . "'");
// Mise à jour de la référence à la note du bulletin
$update = mysqli_query($GLOBALS["mysqli"], "UPDATE matieres_notes SET id_groupe = '" . $new_group . "' WHERE (login = '" . $login . "' AND periode = '" . $num_periode . "' AND matiere = '" . $id_matiere . "')");
// Mise à jour de la référence à l'appréciation du bulletin
$update = mysqli_query($GLOBALS["mysqli"], "UPDATE matieres_appreciations SET id_groupe = '" . $new_group . "' WHERE (login = '" . $login . "' AND periode = '" . $num_periode . "' AND matiere = '" . $id_matiere . "')");
}
}
// Et on fait les mises à jours de références pour les carnets de notes et cahiers de texte
$update_cn = mysqli_query($GLOBALS["mysqli"], "UPDATE cn_cahier_notes SET id_groupe = '" . $new_group . "' WHERE (matiere = '" . $id_matiere . "' AND id_classe = '" . $id_classe . "')");
$update_ct1 = mysqli_query($GLOBALS["mysqli"], "UPDATE ct_devoir_entry SET id_groupe = '" . $new_group . "' WHERE (id_matiere = '" . $id_matiere . "' AND id_classe = '" . $id_classe . "')");
$update_ct2 = mysqli_query($GLOBALS["mysqli"], "UPDATE ct_entry SET id_groupe = '" . $new_group . "' WHERE (id_matiere = '" . $id_matiere . "' AND id_classe = '" . $id_classe . "')");
echo "| ".$nom_classe." | ".$id_matiere." (".$nom_complet.") | ".$uid." |
\n";
}
}
}
}
}
}
echo "
";
echo "Opération effectuée.
";
// echo "Vous pouvez vérifier l'importation en allant sur la page de gestion des matières.
";
} else {
$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 "Cette procédure a pour but, à partir des données présentes dans l'annuaire LCS, d'affecter des matières aux classes et des professeurs aux matières.
";
echo "Pour chaque classe et chaque matière actuellement présentes dans la base GEPI, le script recherche les professeurs membres des groupes du type \"Cours_classe_matiere..\" et les affecte au couple (classe/matière).
";
echo "Tous les élèves sont systématiquement affectés pour toutes les périodes de l'année.
";
echo "Le résultat n'est pas parfait et vous aurez besoin de faire des ajustements classe par classe.
";
echo "";
}
require("../lib/footer.inc.php");
?>