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();
}
$sql="SELECT 1=1 FROM droits WHERE id='/init_xml2/traite_csv_udt.php';";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)==0) {
$sql="INSERT INTO droits SET id='/init_xml2/traite_csv_udt.php',
administrateur='V',
professeur='F',
cpe='F',
scolarite='F',
eleve='F',
responsable='F',
secours='F',
autre='F',
description='Import des enseignements via un Export CSV UDT',
statut='';";
$insert=mysqli_query($GLOBALS["mysqli"], $sql);
}
if (!checkAccess()) {
header("Location: ../logout.php?auto=1");
die();
}
check_token();
function get_nom_complet_from_matiere($mat) {
$sql="SELECT nom_complet FROM matieres WHERE matiere='$mat';";
$res_mat=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_mat)>0) {
$lig_mat=mysqli_fetch_object($res_mat);
return $lig_mat->nom_complet;
}
}
//**************** EN-TETE *****************
$titre_page = "Outil d'initialisation de l'année : Importation CSV UDT";
require_once("../lib/header.inc.php");
//**************** FIN EN-TETE *****************
include("init_xml_lib.php");
//debug_var();
/*
function affiche_debug($texte) {
// Passer à 1 la variable pour générer l'affichage des infos de debug...
$debug=0;
if($debug==1) {
echo "".$texte."";
flush();
}
}
*/
// Etape...
$step=isset($_POST['step']) ? $_POST['step'] : (isset($_GET['step']) ? $_GET['step'] : NULL);
if(isset($_GET['ad_retour'])) {
$_SESSION['ad_retour']=$_GET['ad_retour'];
}
//echo "\$_SESSION['ad_retour']=".$_SESSION['ad_retour']."
";
$mysql_collate=getSettingValue("mysql_collate") ? getSettingValue("mysql_collate") : "";
$chaine_mysql_collate="";
if($mysql_collate!="") {$chaine_mysql_collate="COLLATE $mysql_collate";}
//unset($remarques);
//$remarques=array();
// On va uploader le CSV dans le tempdir de l'utilisateur (administrateur)
$tempdir=get_user_temp_directory();
if(!$tempdir) {
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 } // ======================================================= // EST-CE ENCORE UTILE? if(isset($_GET['nettoyage'])) { //echo "
Retour";
echo " | Autre import
Si le CSV d'UDT est présent, il sera supprimé...
\n"; //$tabfich=array("f_ele.csv","f_ere.csv"); $tabfich=array("export_udt.csv"); for($i=0;$i
Retour";
//echo " | Autre import";
echo " | Suppression d'un CSV existant";
echo "
Upload du fichier d'export d'UDT.
\n"; echo "\n"; echo "Remarques :
\n"; echo "L'upload du fichier a échoué.
\n"; echo "Les variables du php.ini peuvent peut-être expliquer le problème:
\n";
echo "post_max_size=$post_max_size
\n";
echo "upload_max_filesize=$upload_max_filesize
\n";
echo "
Le fichier aurait été uploadé... mais ne serait pas présent/conservé.
\n"; echo "Les variables du php.ini peuvent peut-être expliquer le problème:
\n";
echo "post_max_size=$post_max_size
\n";
echo "upload_max_filesize=$upload_max_filesize
\n";
echo "et le volume de ".$csv_file['name']." serait
\n";
echo "\$csv_file['size']=".volume_human($csv_file['size'])."
\n";
echo "
Le fichier a été uploadé.
\n"; //$source_file=stripslashes($csv_file['tmp_name']); $source_file=$csv_file['tmp_name']; $dest_file="../temp/".$tempdir."/export_udt.csv"; $res_copy=copy("$source_file" , "$dest_file"); if(!$res_copy) { echo "La copie du fichier vers le dossier temporaire a échoué.
Vérifiez que l'utilisateur ou le groupe apache ou www-data a accès au dossier temp/$tempdir
La copie du fichier vers le dossier temporaire a réussi.
\n"; echo "Veuillez maintenant compléter les correspondances utiles entre UDT et GEPI :
\n"; //$sql="DROP TABLE IF EXISTS udt_corresp;"; //$suppr_table = mysql_query($sql); $sql="CREATE TABLE IF NOT EXISTS udt_corresp ( champ varchar(255) $chaine_mysql_collate NOT NULL default '', nom_udt varchar(255) $chaine_mysql_collate NOT NULL default '', nom_gepi varchar(255) $chaine_mysql_collate NOT NULL default '' ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; $create_table = mysqli_query($GLOBALS["mysqli"], $sql); //$sql="TRUNCATE TABLE udt_corresp;"; //$vide_table = mysql_query($sql); //$sql="DROP TABLE IF EXISTS udt_lignes;"; //$suppr_table = mysql_query($sql); $sql="CREATE TABLE IF NOT EXISTS udt_lignes ( id INT(11) unsigned NOT NULL auto_increment, division varchar(255) $chaine_mysql_collate NOT NULL default '', matiere varchar(255) $chaine_mysql_collate NOT NULL default '', prof varchar(255) $chaine_mysql_collate NOT NULL default '', groupe varchar(255) $chaine_mysql_collate NOT NULL default '', regroup varchar(255) $chaine_mysql_collate NOT NULL default '', mo varchar(255) $chaine_mysql_collate NOT NULL default '', PRIMARY KEY id (id) ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; //echo "$sqlERREUR lors de la tentative d'ouverture du fichier $dest_file
\n"; require("../lib/footer.inc.php"); die(); } // Lecture de la ligne 1 et la mettre dans $temp $temp=fgets($fp,4096); $en_tete=explode(";",$temp); $tabindice=array(); // On range dans tabindice les indices des champs retenus for ($k = 0; $k < count($tabchamps); $k++) { for ($i = 0; $i < count($en_tete); $i++) { if (remplace_accents($en_tete[$i]) == remplace_accents($tabchamps[$k])) { $tabindice[] = $i; } } } if(count($tabindice)!=count($tabchamps)) { echo "ERREUR : ".count($tabindice)." champs sur un total de ".count($tabchamps)." ont été identifiés.
Les champs sont habituellement :
Jour;Heure;Div;Matière;Professeur;Salle;Groupe;Regroup;Eff;Mo;Freq;Aire
Sur ces champs, seuls Div, Matière, Professeur, Groupe, Regroup, Mo sont requis
On suppose pour la suite que les champs sont
Jour;Heure;Div;Matière;Professeur;Salle;Groupe;Regroup;Eff;Mo;Freq;Aire
Si ce n'est pas le cas, ajoutez à la main la ligne d'entête dans votre fichier et refaites cette étape.
ERREUR : Il n'existe aucune classe dans la base.
\n"; require("../lib/footer.inc.php"); die(); } while($lig=mysqli_fetch_object($res)) { $tab_id_classe[]=$lig->id; $tab_classe[]=$lig->classe; $tab_classe_nom_complet[]=$lig->nom_complet; } echo "\n"; //echo "A FAIRE: Pouvoir n'afficher que les comptes actifs
\n"; echo "Si vous ne souhaitez pas créer de groupes de VIE DE CLASSE, REMEDIATION, SOUTIEN,... parce qu'aucune note ne doit être saisie dans ces 'matières', il suffit de ne faire correspondre aucune matière GEPI avec la matière UDT.
\n"; } } } elseif($step==1) { if(!isset($_POST['is_posted'])) { echo "ERREUR : Une partie des variables n'as pas été POSTée.
Vous avez probablement un module PHP qui limite le nombre de variables transmises (suhosin?)
Suppression des enseignements, associations élèves/enseignements, classes/enseignements et professeurs/enseignements.
\n"; $del = @mysqli_query($GLOBALS["mysqli"], "DELETE FROM groupes;"); $del = @mysqli_query($GLOBALS["mysqli"], "DELETE FROM j_eleves_groupes;"); $del = @mysqli_query($GLOBALS["mysqli"], "DELETE FROM j_groupes_classes;"); $del = @mysqli_query($GLOBALS["mysqli"], "DELETE FROM j_groupes_professeurs;"); $del = @mysqli_query($GLOBALS["mysqli"], "DELETE FROM j_groupes_matieres;"); $del = @mysqli_query($GLOBALS["mysqli"], "DELETE FROM j_signalement;"); $del = @mysqli_query($GLOBALS["mysqli"], "DELETE FROM j_groupes_visibilite;"); $del = @mysqli_query($GLOBALS["mysqli"], "DELETE FROM acces_cdt_groupes;"); // On conserve les associations profs/matières //$del = @mysql_query("DELETE FROM j_professeurs_matieres;"); /* mar aoû 31 22:11:47 steph@hpcrob:~/2010_01_02/hameau $ grep SVT udt_20100826.csv |egrep "(3 B1|3 B2)" Mardi;11H00;3 B2;SVT;FERMANEL CHRISTINE;32;;;29;CG;sb;; Mercredi;10H00;3 B2;SVT;FERMANEL CHRISTINE;32;;;29;CG;;; Jeudi;08H00;3 B1;SVT;KERAUDREN DELPHINE;32;;;28;CG;;; Vendredi;09H00;3 B1;SVT;KERAUDREN DELPHINE;32;;;28;CG;sa;; mar aoû 31 22:12:01 steph@hpcrob:~/2010_01_02/hameau $ */ $sql="TRUNCATE TABLE udt_corresp;"; $vide_table=mysqli_query($GLOBALS["mysqli"], $sql); for($i=0;$iAucune classe n'existe encore.
\n"; require("../lib/footer.inc.php"); die(); } while($lig_classe=mysqli_fetch_object($res_classes)) { $nom_classe[$lig_classe->id]=$lig_classe->classe; } $nom_prenom_prof=array(); $sql="SELECT login, civilite, nom, prenom FROM utilisateurs WHERE statut='professeur';"; $res_profs=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_profs)==0) { echo "Aucun prof n'existe encore.
\n"; require("../lib/footer.inc.php"); die(); } while($lig_profs=mysqli_fetch_object($res_profs)) { $nom_prenom_prof[$lig_profs->login]=$lig_profs->civilite." ".my_strtoupper($lig_profs->nom)." ".casse_mot($lig_profs->prenom,'majf2'); } $lignes_deja_traitees=array(); //$sql="SELECT * FROM udt_lignes;"; $sql="SELECT * FROM udt_lignes ORDER BY regroup, division, matiere;"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)>0) { while($lig=mysqli_fetch_object($res)) { if(in_array($lig->id,$lignes_deja_traitees)) { /*echo "Ligne $lig->id déjà traitée.
\n";
echo "division=$lig->division
\n";
echo "matiere=$lig->matiere
\n";
echo "prof=$lig->prof
\n";
echo "groupe=$lig->groupe
\n";
echo "regroup=$lig->regroup
\n";
echo "mo=$lig->mo
\n";
*/
echo "
L'association $lig->division/$lig->matiere/$lig->prof"; if($lig->groupe!="") {echo " ($lig->groupe)";} if($lig->regroup!="") {echo " ($lig->regroup)";} echo " est déjà traitée."; echo "
\n";
echo "id=$lig->id
\n";
echo "division=$lig->division
\n";
echo "matiere=$lig->matiere
\n";
echo "prof=$lig->prof
\n";
echo "groupe=$lig->groupe
\n";
echo "regroup=$lig->regroup
\n";
echo "mo=$lig->mo
\n";
*/
if(!isset($tab_ele[$lig->division])) {
$tab_ele[$lig->division]=array();
//$sql="SELECT DISTINCT jec.login, c.classe FROM j_eleves_classes jec, classes c, udt_corresp uc WHERE jec.id_classe=c.id AND c.classe=uc.nom_gepi AND uc.champ='classe' AND classe_udt='$lig' ORDER BY jec.login;";
//$sql="SELECT DISTINCT jec.login FROM j_eleves_classes jec, classes c, udt_corresp uc WHERE jec.id_classe=c.id AND c.classe=uc.nom_gepi AND uc.champ='classe' AND uc.nom_udt='$lig->division' ORDER BY jec.login;";
$sql="SELECT DISTINCT jec.login, c.id FROM j_eleves_classes jec, classes c, udt_corresp uc WHERE jec.id_classe=c.id AND c.classe=uc.nom_gepi AND uc.champ='classe' AND uc.nom_udt='$lig->division' ORDER BY jec.login;";
//echo "$sql
\n";
$res_ele=mysqli_query($GLOBALS["mysqli"], $sql);
while($lig_ele=mysqli_fetch_object($res_ele)) {
//$tab_ele[$lig->division][]=$lig_ele->login;
$tab_ele[$lig_ele->id][]=$lig_ele->login;
}
}
//echo "
Aucune classe n'est associée à $lig->division dans Gepi.
\n"; } elseif(mysqli_num_rows($res_clas)>1) { echo "ANOMALIE: Plus d'une classe est associée à $lig->division dans Gepi.
\n"; } else { $lig_clas=mysqli_fetch_object($res_clas); $id_classe=$lig_clas->id; //echo "\$id_classe=$id_classeAucune matière n'est associée dans Gepi à la matière $lig->matiere d'UDT.
\n"; } elseif(mysqli_num_rows($res_mat)>1) { echo "ANOMALIE: Plus d'une matière est associée dans Gepi à la matière $lig->matiere d'UDT.
\n"; } else { $lig_mat=mysqli_fetch_object($res_mat); $mat=$lig_mat->matiere; $mat_nom_complet=$lig_mat->nom_complet; //echo "\$mat=$matAucune classe n'est associée au groupe de $mat.
\n"; } else { //echo "Récapitulatif avant création du groupe :\n"; echo "Création du groupe $nom_grp ($descr_grp) associé à la matière $mat ";
$cpt_clas=0;
echo "(";
foreach($tab_clas as $key => $value) {
if($cpt_clas>0) {echo ", ";}
//echo "\$tab_clas[$key]=$value Import des professeurs principaux
\n";
//echo get_class_from_id($value);
echo $nom_classe[$value];
$cpt_clas++;
}
echo ") : ";
if($id_groupe=create_group($nom_grp, $descr_grp, $mat, $tab_clas)) {
//echo "Création du groupe $nom_grp ($descr_grp) avec l'id_groupe $id_groupe
\n";
echo "SUCCES : Groupe créé avec l'id_groupe $id_groupe
\n";
if($debug_import=="y") {
echo "Nom du groupe : $nom_grp
";
echo "Description du groupe : $descr_grp
";
}
// Récupérer les profs
$tab_prof=array();
/*
// CA NE FONCTIONNE PAS
// J'AI
mysql> select * from udt_lignes where matiere='IDARH';
+-----+----------+---------+-----------------+--------+----------+----+
| id | division | matiere | prof | groupe | regroup | mo |
+-----+----------+---------+-----------------+--------+----------+----+
| 151 | 5 A1 | IDARH | ORELLANA NICOLE | IDARH1 | IDARH1 | CG |
| 157 | 5 A2 | IDARH | ORELLANA NICOLE | IDARH1 | IDARH1 | CG |
| 163 | 5 B1 | IDARH | ORELLANA NICOLE | IDARH1 | IDARH1 | CG |
| 169 | 5 B2 | IDARH | ORELLANA NICOLE | IDARH1 | IDARH1 | CG |
| 175 | 5 C | IDARH | ORELLANA NICOLE | IDARH1 | IDARH1 | CG |
| 296 | 5 A1 | IDARH | CAUSSE JOSIANE | IDARH | 5IDARH-1 | CG |
| 303 | 5 A2 | IDARH | CAUSSE JOSIANE | IDARH | 5IDARH-1 | CG |
| 309 | 5 B1 | IDARH | CAUSSE JOSIANE | IDARH | 5IDARH-1 | CG |
| 315 | 5 B2 | IDARH | CAUSSE JOSIANE | IDARH | 5IDARH-1 | CG |
| 321 | 5 C | IDARH | CAUSSE JOSIANE | IDARH | 5IDARH-1 | CG |
+-----+----------+---------+-----------------+--------+----------+----+
10 rows in set (0.00 sec)
mysql>
// Les noms de groupes et regroup ne coïncident pas.
// Si on considère qu'on a un seul enseignement d'une matière par classe, on va fusionner les groupes d'AGL1 (alors que plusieurs profs se répartissent les élèves de plusieurs classes)
if($lig->regroup=="") {
// Ce n'est pas un groupe/regroupement, on ne teste pas si plusieurs profs sont associés
// S'il y a plusieurs enseignements de MATHS avec plusieurs profs sans groupes, on considère que tout les élèves sont dans chacun des groupes
// Il faudra fusionner après coup si ce n'est pas le cas
$sql="SELECT DISTINCT uc.nom_gepi FROM udt_corresp uc WHERE uc.nom_udt='$lig->prof' AND uc.champ='prof';";
echo "$sql
\n";
$res_prof=mysql_query($sql);
if(mysql_num_rows($res_prof)>0) {
// On ne fait qu'un tour dans la boucle
while($lig_prof=mysql_fetch_object($res_prof)) {
$tab_prof[]=$lig_prof->nom_gepi;
echo "\$tab_prof[]=$lig_prof->nom_gepi
\n";
// Contrôler l'association avec la matière ou bien le update_group() le fait?
$sql="SELECT 1=1 FROM j_professeurs_matieres WHERE id_professeur='$lig_prof->nom_gepi' AND id_matiere='$mat';";
$test=mysql_query($sql);
if(mysql_num_rows($test)==0) {
$sql="INSERT INTO j_professeurs_matieres SET id_professeur='$lig_prof->nom_gepi', id_matiere='$mat';";
$insert=mysql_query($sql);
if(!$insert) {echo "ERREUR lors de l'association du professeur $lig_prof->nom_gepi avec la matière $mat
\n";}
}
}
}
}
else {
// Dans le cas d'un groupe/regroupement, on contrôle s'il y a plusieurs profs associés
$sql="SELECT DISTINCT uc.nom_gepi FROM udt_corresp uc WHERE uc.nom_udt='$lig->prof' AND uc.champ='prof';";
echo "$sql
\n";
$res_prof=mysql_query($sql);
if(mysql_num_rows($res_prof)>0) {
while($lig_prof=mysql_fetch_object($res_prof)) {
$tab_prof[]=$lig_prof->nom_gepi;
echo "\$tab_prof[]=$lig_prof->nom_gepi
\n";
// Contrôler l'association avec la matière ou bien le update_group() le fait?
$sql="SELECT 1=1 FROM j_professeurs_matieres WHERE id_professeur='$lig_prof->nom_gepi' AND id_matiere='$mat';";
$test=mysql_query($sql);
if(mysql_num_rows($test)==0) {
$sql="INSERT INTO j_professeurs_matieres SET id_professeur='$lig_prof->nom_gepi', id_matiere='$mat';";
$insert=mysql_query($sql);
if(!$insert) {echo "ERREUR lors de l'association du professeur $lig_prof->nom_gepi avec la matière $mat
\n";}
}
}
}
}
*/
$sql="SELECT DISTINCT uc.nom_gepi FROM udt_corresp uc WHERE uc.nom_udt='$lig->prof' AND uc.champ='prof';";
//echo "$sql
\n";
$res_prof=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_prof)>0) {
echo "Association des professeurs au groupe : ";
$cpt_prof=0;
while($lig_prof=mysqli_fetch_object($res_prof)) {
if($cpt_prof>0) {echo ", ";}
$tab_prof[]=$lig_prof->nom_gepi;
//echo "\$tab_prof[]=$lig_prof->nom_gepi
\n";
echo $nom_prenom_prof[$lig_prof->nom_gepi];
// Contrôler l'association avec la matière ou bien le update_group() le fait?
$sql="SELECT 1=1 FROM j_professeurs_matieres WHERE id_professeur='$lig_prof->nom_gepi' AND id_matiere='$mat';";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)==0) {
$sql="SELECT ordre_matieres FROM j_professeurs_matieres WHERE id_professeur='$lig_prof->nom_gepi' ORDER BY ordre_matieres DESC LIMIT 1;";
$res_max_ordre_matiere=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_max_ordre_matiere)==0) {
$ordre_mat=1;
}
else {
$lig_ordre_mat=mysqli_fetch_object($res_max_ordre_matiere);
$ordre_mat=$lig_ordre_mat->ordre_matieres+1;
}
$sql="INSERT INTO j_professeurs_matieres SET id_professeur='$lig_prof->nom_gepi', id_matiere='$mat', ordre_matieres='$ordre_mat';";
$insert=mysqli_query($GLOBALS["mysqli"], $sql);
if(!$insert) {echo "
ERREUR lors de l'association du professeur $lig_prof->nom_gepi avec la matière $mat
\n";}
else {echo " (association du professeur avec la matière $mat)";}
}
$cpt_prof++;
}
}
else {
echo "Aucun professeur n'est associé au groupe.\n";
}
echo "
\n";
$temoin_aucun_eleve_dans_l_enseignement="y";
if($lig->groupe!="") {
for($loop=0;$loop
\n";
// PROBLEME: Les cours qui se font à la fois en classe entière et en groupe se retrouvent avec un effectif de zéro... d'où l'ajout du test sur aucun élève dans le groupe...
if($temoin_aucun_eleve_dans_l_enseignement=="y") {
$temoin_enseignement_suivi="y";
}
else {
$temoin_enseignement_suivi="n";
if($lig->groupe=="") {
$temoin_enseignement_suivi="y";
}
else {
$sql="SELECT 1=1 FROM temp_gep_import2 WHERE (ELEOPT1='$mat' OR ELEOPT2='$mat' OR ELEOPT3='$mat' OR ELEOPT4='$mat' OR ELEOPT5='$mat' OR ELEOPT6='$mat' OR ELEOPT7='$mat' OR ELEOPT8='$mat' OR ELEOPT9='$mat' OR ELEOPT10='$mat' OR ELEOPT11='$mat' OR ELEOPT12='$mat') AND LOGIN='$value';";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
$temoin_enseignement_suivi="y";
}
}
}
if($temoin_enseignement_suivi=="y") {
for($n_per=1;$n_per<=$tab_per[$tab_clas[$loop]];$n_per++) {
$reg_eleves[$n_per][]=$value;
if(!in_array($value, $tab_eleves_groupe_toutes_periodes)) {
$tab_eleves_groupe_toutes_periodes[]=$value;
}
}
if($debug_import=="y") {echo "$value suit l'enseignement n°$id_groupe de $mat
";}
}
elseif($debug_import=="y") {echo "$value ne suit pas l'enseignement n°$id_groupe de $mat
";}
}
}
$code_modalite_elect_eleves=array();
for($loop=0;$loop
\n";
}
}
else {
echo "ERREUR lors de la création du groupe pour...
\n";
}
}
}
echo "
\n";
}
}
}
echo "
Il est probable que cette information n'était pas dans le fichier de STS, l'import des professeurs principaux risque de ne rien donner... mais qui ne tente rien...