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(); } //**************** EN-TETE ***************** $titre_page = "Outil d'initialisation de l'année : Importation des matières"; require_once("../lib/header.inc.php"); //************** FIN EN-TETE *************** ?>
Vous allez effectuer la cinquième et dernière étape : elle consiste à importer le fichier eleves_options.csv contenant les associations des élèves et des enseignements de type 'groupe', c'est-à-dire qui ne corerespondent pas à un enseignement de classe entière."; echo "
Les champs suivants doivent être présents, dans l'ordre, et séparés par un point-virgule : "; echo "
Remarque : vous pouvez ne spécifier qu'une seule ligne par élève, en indiquant toutes les matières suivies dans le deuxième champ en séparant les identifiants de matières avec un point d'exclamation, mais vous pouvez également avoir une ligne pour une association simple, et avoir autant de lignes que d'enseignements suivis par l'élève.
"; echo "Veuillez préciser le nom complet du fichier eleves_options.csv."; echo "
"; } else { check_token(false); // // Quelque chose a été posté // if ($_POST['action'] == "save_data") { // // On enregistre les données dans la base. // Le fichier a déjà été affiché, et l'utilisateur est sûr de vouloir enregistrer // $go = true; $i = 0; // Compteur d'erreurs $error = 0; // Compteur d'enregistrement $total = 0; while ($go) { $reg_login = $_POST["ligne".$i."_login"]; $reg_options = $_POST["ligne".$i."_options"]; // On nettoie et on vérifie : $reg_login = preg_replace("/[^0-9A-Za-z_\.\-]/","",trim($reg_login)); $reg_login = preg_replace("/\./", "_", $reg_login); $reg_options = preg_replace("/[^A-Za-z0-9.\-!]/","",trim($reg_options)); if (mb_strlen($reg_options) > 2000) $reg_options = mb_substr($reg_options, 0, 2000); // Juste pour éviter une tentative d'overflow... // Première étape : on s'assure que l'élève existe... S'il n'existe pas, on laisse tomber. $test = mysqli_query($GLOBALS["mysqli"], "SELECT login FROM eleves WHERE login = '" . $reg_login . "'"); if (mysqli_num_rows($test) == 1) { $login_eleve = $reg_login; // Maintenant on récupère les différentes matières, et on vérifie qu'elles existent $reg_options = explode("!", $reg_options); $valid_options = array(); foreach ($reg_options as $option) { $option = strtoupper($option); $test = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(matiere) FROM matieres WHERE matiere = '" . $option ."'"), 0); if ($test == 1) { $valid_options[] = $option; } } // On a maintenant un tableau avec les options que l'élève doit suivre. // On récupère la classe de l'élève. $test = mysqli_query($GLOBALS["mysqli"], "SELECT DISTINCT(id_classe) FROM j_eleves_classes WHERE login = '" . $login_eleve . "'"); if (mysqli_num_rows($test) != 0) { // L'élève fait bien parti d'une classe $id_classe = old_mysql_result($test, 0, "id_classe"); // Maintenant on a tout : les options, la classe de l'élève, et son login // Enfin il reste quand même un truc à récupérer : le nombre de périodes : $num_periods = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(num_periode) FROM periodes WHERE id_classe = '" . $id_classe . "'"), 0); // Bon cette fois c'est bon, on a tout. On va donc procéder de la manière suivante : // - on regarde s'il existe un groupe pour la classe dans la matière considérée // - on teste pour voir si l'élève n'est pas déjà inscrit dans ce groupe // - s'il ne l'est pas, on l'inscrit ! // Simple, non ? // On procède matière par matière : foreach ($valid_options as $matiere) { $test = mysqli_query($GLOBALS["mysqli"], "SELECT jgc.id_groupe FROM j_groupes_classes jgc, j_groupes_matieres jgm WHERE (" . "jgc.id_classe = '" . $id_classe . "' AND " . "jgc.id_groupe = jgm.id_groupe AND " . "jgm.id_matiere = '" . $matiere . "')"); if (mysqli_num_rows($test) > 0) { // Au moins un groupe existe, c'est bon signe // On passe groupe par groupe pour vérifier si l'élève est déjà inscrit ou pas // Si plusieurs groupes existent, l'élève sera inscrit à tous les groupes... for ($j=0;$jIl y a eu " . $error . " erreurs.
"; if ($total > 0) echo "" . $total . " associations élèves-options ont été enregistrées.
"; echo ""; } else if ($_POST['action'] == "upload_file") { // // 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 // $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(mb_strtolower($csv_file['name']) == "eleves_options.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 !
"; echo "Cliquer ici pour recommencer !
"; } 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: $ligne = fgets($fp, 4096); //========================= $k = 0; while (!feof($fp)) { $ligne = fgets($fp, 4096); if(trim($ligne)!="") { $tabligne=explode(";",$ligne); // 0 : Login de l'élève // 1 : Identifiants de matières // On nettoie et on vérifie : $tabligne[0] = preg_replace("/[^0-9A-Za-z_\.\-]/","",trim($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($tabligne[1])); if (mb_strlen($tabligne[1]) > 2000) $tabligne[1] = mb_substr($tabligne[1], 0, 2000); $data_tab[$k] = array(); $data_tab[$k]["login"] = $tabligne[0]; $data_tab[$k]["options"] = $tabligne[1]; } $k++; } fclose($fp); // Fin de l'analyse du fichier. // Maintenant on va afficher tout ça. echo ""; } } else if (trim($csv_file['name'])=='') { echo "Aucun fichier n'a été sélectionné !
";
echo "Cliquer ici pour recommencer !
Le fichier sélectionné n'est pas valide !
";
echo "Cliquer ici pour recommencer !