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_matieres; //**************** EN-TETE ***************** $titre_page = "Outil d'initialisation de l'année : Importation des matières"; require_once("../lib/header.inc.php"); //************** FIN EN-TETE *************** $en_tete=isset($_POST['en_tete']) ? $_POST['en_tete'] : "no"; ?>

Retour Retour accueil initialisation

Sixième phase d'initialisation
Importation des associations profs-matières-classes (enseignements)

\n"; if (!isset($_POST["action"])) { // // On sélectionne le fichier à importer // if(isset($_SESSION['init_csv_ligne_entete'])&&($_SESSION['init_csv_ligne_entete']=="no")) { $checked=""; } else { $checked=" checked"; } echo "

Vous allez effectuer la sixième étape : elle consiste à importer le fichier g_prof_disc_classes.csv contenant les données relatives aux enseignements.

\n"; echo "

ATTENTION ! Avec cette opération, vous effacez tous les groupes d'enseignement qui avaient été définis l'année dernière. Ils seront écrasés par ceux que vous allez importer avec la procédure courante.

\n"; echo "

Les champs suivants doivent être présents, dans l'ordre, et séparés par un point-virgule :

\n"; echo "\n"; echo "

Exemple de ligne pour un enseignement général :
\n" . "   DUPONT.JEAN;MATHS;1S1;CG
\n" . "Exemple de ligne pour un enseignement optionnel avec des élèves de plusieurs classes :
\n" . "   DURANT.PATRICE;ANGL2;1S1!1S2!1S3;OPT

\n"; echo "

Veuillez préciser le nom complet du fichier g_prof_disc_classes.csv.

\n"; echo "
\n"; echo add_token_field(); echo "\n"; echo "

\n"; echo "

 

\n"; echo "

\n"; echo "
\n"; } else { // // Quelque chose a été posté // if ($_POST['action'] == "save_data") { check_token(false); // // On enregistre les données dans la base. // Le fichier a déjà été affiché, et l'utilisateur est sûr de vouloir enregistrer // 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++; } // Ménage sur l'ordre des groupes dans l'affichage simplifié prof: // Sinon, on peut se retrouver avec des rangs aberrants liés à des groupes qui n'existent plus dans la table groupes. $sql="DELETE FROM preferences WHERE name LIKE 'accueil_simpl_id_groupe_order_%';"; $del=mysqli_query($GLOBALS["mysqli"], $sql); $sql="SELECT * FROM tempo4;"; $res_tempo4=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_tempo4)==0) { echo "

ERREUR : Aucune association professeur/matière/classe/type n'a été trouvée ???

\n"; echo "


\n"; require("../lib/footer.inc.php"); die(); } echo "
\n"; echo "

On remplit les tables 'matieres', 'groupes', 'j_groupes_matieres', 'j_groupes_professeurs', 'j_groupes_classes' et 'j_eleves_groupes' : "; $i = 0; // Compteur d'erreurs $error = 0; // Compteur d'enregistrement $total = 0; while ($lig=mysqli_fetch_object($res_tempo4)) { $reg_prof = $lig->col1; $reg_matiere = $lig->col2; $reg_classes = $lig->col3; $reg_type = $lig->col4; // On nettoie et on vérifie : $reg_prof = preg_replace("/[^A-Za-z0-9._]/","",trim(my_strtoupper($reg_prof))); if (mb_strlen($reg_prof) > 50) $reg_prof = mb_substr($reg_prof, 0, 50); $reg_matiere = preg_replace("/[^A-Za-z0-9._\-]/","",trim(my_strtoupper($reg_matiere))); if (mb_strlen($reg_matiere) > 50) $reg_matiere = mb_substr($reg_matiere, 0, 50); $reg_classes = preg_replace("/[^A-Za-z0-9._ \-!]/","",trim($reg_classes)); if (mb_strlen($reg_classes) > 2000) $reg_classes = mb_substr($reg_classes, 0, 2000); // C'est juste pour éviter une tentative d'overflow... $reg_type = preg_replace("/[^A-Za-z]/","",trim(my_strtoupper($reg_type))); if ($reg_type != "CG" AND $reg_type != "OPT") $reg_type = ""; // Première étape : on s'assure que le prof existe. S'il n'existe pas, on laisse tomber. $sql="SELECT count(login) FROM utilisateurs WHERE login = '" . $reg_prof . "';"; //echo "$sql
"; $test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], $sql),0); if ($test == 1) { // Le prof existe. cool. Maintenant on récupère la matière. //$sql="SELECT nom_complet FROM matieres WHERE matiere = '" . mysqli_real_escape_string($GLOBALS["mysqli"], $reg_matiere) . "'"; $sql="SELECT nom_complet FROM matieres WHERE matiere = '" . $reg_matiere . "'"; //echo "$sql
"; $test = mysqli_query($GLOBALS["mysqli"], $sql); if (mysqli_num_rows($test) == 1) { // La matière existe // On récupère le nom complet de la matière $reg_matiere_complet = old_mysql_result($test, 0, "nom_complet"); // Maintenant on en arrive aux classes // On récupère un tableau : $reg_classes = explode("!", $reg_classes); // On détermine le type de groupe if (count($reg_classes) > 1) { // On force le type "OPT" s'il y a plusieurs classes $reg_type = "OPT"; } else { if ($reg_type == "") { // Si on n'a qu'une seule classe et que rien n'est spécifié, on a par défaut // un cours général $reg_type = "CG"; } } // Si on arrive ici, c'est que normalement tout est bon. // On va quand même s'assurer qu'on a des classes valides. $valid_classes = array(); foreach ($reg_classes as $classe) { $sql="SELECT id FROM classes WHERE classe = '" . $classe . "'"; //echo "$sql
"; $test = mysqli_query($GLOBALS["mysqli"], $sql); if (mysqli_num_rows($test) == 1) $valid_classes[] = old_mysql_result($test, 0, "id"); } if (count($valid_classes) > 0) { // C'est bon, on a au moins une classe valide. On peut créer le groupe ! $sql="INSERT INTO groupes SET name = '" . $reg_matiere . "', description = '" . mysqli_real_escape_string($GLOBALS["mysqli"], html_entity_decode($reg_matiere_complet)) . "'"; //echo "$sql
"; $new_group = mysqli_query($GLOBALS["mysqli"], $sql); $group_id = ((is_null($___mysqli_res = mysqli_insert_id($GLOBALS["mysqli"]))) ? false : $___mysqli_res); if (!$new_group) { echo "".mysqli_error($GLOBALS["mysqli"]).'
'; } // Le groupe est créé. On associe la matière. $sql="INSERT INTO j_groupes_matieres SET id_groupe = '".$group_id."', id_matiere = '" . $reg_matiere . "'"; //echo "$sql
"; $res = mysqli_query($GLOBALS["mysqli"], $sql); if (!$res) { echo "".mysqli_error($GLOBALS["mysqli"]).'
'; } // On associe le prof $sql="INSERT INTO j_groupes_professeurs SET id_groupe = '" . $group_id . "', login = '" . $reg_prof . "'"; //echo "$sql
"; $res = mysqli_query($GLOBALS["mysqli"], $sql); if (!$res) { echo "".mysqli_error($GLOBALS["mysqli"]).'
'; } // On associe la matière au prof $sql="INSERT INTO j_professeurs_matieres SET id_professeur = '" . $reg_prof . "', id_matiere = '" . $reg_matiere . "'"; //echo "$sql
"; $res = mysqli_query($GLOBALS["mysqli"], $sql); // On associe le groupe aux classes (ou à la classe) foreach ($valid_classes as $classe_id) { $sql="INSERT INTO j_groupes_classes SET id_groupe = '" . $group_id . "', id_classe = '" . $classe_id ."'"; //echo "$sql
"; $res = mysqli_query($GLOBALS["mysqli"], $sql); if (!$res) { echo "".mysqli_error($GLOBALS["mysqli"]).'
'; } } // Si le type est à "CG", on associe les élèves de la classe au groupe if ($reg_type == "CG") { // On récupère le nombre de périodes pour la classe $sql="SELECT count(num_periode) FROM periodes WHERE id_classe = '" . $valid_classes[0] . "'"; //echo "$sql
"; $periods = old_mysql_result(mysqli_query($GLOBALS["mysqli"], $sql), 0); $sql="SELECT DISTINCT(login) FROM j_eleves_classes WHERE id_classe = '" . $valid_classes[0] . "'"; //echo "$sql
"; $get_eleves = mysqli_query($GLOBALS["mysqli"], $sql); $nb = mysqli_num_rows($get_eleves); for ($e=0;$e<$nb;$e++) { $current_eleve = old_mysql_result($get_eleves, $e, "login"); for ($p=1;$p<=$periods;$p++) { $sql="INSERT INTO j_eleves_groupes SET login = '" . $current_eleve . "', id_groupe = '" . $group_id . "', periode = '" . $p . "'"; //echo "$sql
"; $res = mysqli_query($GLOBALS["mysqli"], $sql); if (!$res) { echo "".mysqli_error($GLOBALS["mysqli"]).'
'; } } } } if (!$new_group) { $error++; } else { $total++; } } // -> Fin du test si on a au moins une classe valide } // -> Fin du test où la matière existe } // -> Fin du test où le prof existe $i++; } echo "

Opération terminée.

\n"; if ($error > 0) echo "

Il y a eu " . $error . " erreurs.

\n"; if ($total > 0) echo "

" . $total . " groupes ont été enregistrés.

\n"; echo "

Revenir à la page précédente

\n"; } else if ($_POST['action'] == "upload_file") { check_token(false); // // Le fichier vient d'être envoyé et doit être traité // On va donc afficher le contenu du fichier tel qu'il va être enregistré dans Gepi // en proposant des champs de saisie pour modifier les données si on le souhaite // if(isset($en_tete)) { $_SESSION['init_csv_ligne_entete']=$en_tete; } $csv_file = isset($_FILES["csv_file"]) ? $_FILES["csv_file"] : NULL; // On vérifie le nom du fichier... Ce n'est pas fondamentalement indispensable, mais // autant forcer l'utilisateur à être rigoureux if(my_strtolower($csv_file['name']) == "g_prof_disc_classes.csv") { // Le nom est ok. On ouvre le fichier $fp=fopen($csv_file['tmp_name'],"r"); if(!$fp) { // Aie : on n'arrive pas à ouvrir le fichier... Pas bon. echo "

Impossible d'ouvrir le fichier CSV !

\n"; echo "

Cliquer ici pour recommencer !

\n"; } else { // Fichier ouvert ! On attaque le traitement // On va stocker toutes les infos dans un tableau // Une ligne du CSV pour une entrée du tableau $data_tab = array(); //========================= // On lit une ligne pour passer la ligne d'entête: if($en_tete=="yes") { $ligne = fgets($fp, 4096); echo "

A titre d'information, la ligne d'entête passée est la suivante :
$ligne
Si il ne s'agit pas d'une ligne d'entête, vous pouvez refaire cette étape.

"; } //========================= $k = 0; while (!feof($fp)) { $ligne = fgets($fp, 4096); if(trim($ligne)!="") { $tabligne=explode(";",$ligne); // 0 : Login du prof // 1 : nom court de la matière // 2 : identifiant(s) de là (des) classe(s) (Format : 1S1!1S2!1S3) // 3 : type de groupe (CG || OPT) // On nettoie et on vérifie : $tabligne[0] = preg_replace("/[^A-Za-z0-9._]/","",trim(my_strtoupper($tabligne[0]))); if (mb_strlen($tabligne[0]) > 50) $tabligne[0] = mb_substr($tabligne[0], 0, 50); $tabligne[1] = preg_replace("/[^A-Za-z0-9._\-]/","",trim(my_strtoupper($tabligne[1]))); if (mb_strlen($tabligne[1]) > 50) $tabligne[1] = mb_substr($tabligne[1], 0, 50); $tabligne[2] = preg_replace("/[^A-Za-z0-9._ \-!]/","",trim($tabligne[2])); if (mb_strlen($tabligne[2]) > 2000) $tabligne[2] = mb_substr($tabligne[2], 0, 2000); $tabligne[3] = preg_replace("/[^A-Za-z]/","",trim(my_strtoupper($tabligne[3]))); if ($tabligne[3] != "CG" AND $tabligne[3] != "OPT") $tabligne[3] = ""; $data_tab[$k] = array(); $data_tab[$k]["prof"] = $tabligne[0]; $data_tab[$k]["matiere"] = $tabligne[1]; $data_tab[$k]["classes"] = $tabligne[2]; $data_tab[$k]["type"] = $tabligne[3]; } $k++; } fclose($fp); // Fin de l'analyse du fichier. // Maintenant on va afficher tout ça. $nb_error=0; $sql="CREATE TABLE IF NOT EXISTS tempo4 ( col1 varchar(100) NOT NULL default '', col2 varchar(100) NOT NULL default '', col3 varchar(100) NOT NULL default '', col4 varchar(100) NOT NULL default '');"; $res_tempo4=mysqli_query($GLOBALS["mysqli"], $sql); $sql="TRUNCATE tempo4;"; $res_tempo4=mysqli_query($GLOBALS["mysqli"], $sql); echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; $alt=1; for ($i=0;$i<$k-1;$i++) { $alt=$alt*(-1); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; } echo "
Login profMatièreClasse(s)Type
\n"; $sql="INSERT INTO tempo4 SET col1='".mysqli_real_escape_string($GLOBALS["mysqli"], $data_tab[$i]["prof"])."', col2='".mysqli_real_escape_string($GLOBALS["mysqli"], $data_tab[$i]["matiere"])."', col3='".mysqli_real_escape_string($GLOBALS["mysqli"], $data_tab[$i]["classes"])."', col4='".mysqli_real_escape_string($GLOBALS["mysqli"], $data_tab[$i]["type"])."';"; $insert=mysqli_query($GLOBALS["mysqli"], $sql); if(!$insert) { echo ""; echo $data_tab[$i]["prof"]; echo ""; $nb_error++; } else { echo $data_tab[$i]["prof"]; } echo "\n"; echo $data_tab[$i]["matiere"]; echo "\n"; echo $data_tab[$i]["classes"]; echo "\n"; echo $data_tab[$i]["type"]; echo "
\n"; if($nb_error>0) { echo "

$nb_error erreur(s) détectée(s) lors de la préparation.

\n"; } echo "

\n"; echo "
\n"; } } else if (trim($csv_file['name'])=='') { echo "

Aucun fichier n'a été sélectionné !
\n"; echo "Cliquer ici pour recommencer !

\n"; } else { echo "

Le fichier sélectionné n'est pas valide !
\n"; echo "Cliquer ici pour recommencer !

\n"; } } } echo "


\n"; require("../lib/footer.inc.php"); ?>