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

Retour Retour accueil initialisation

Cinquième phase d'initialisation
Importation des associations élèves-classes

"; 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 cinquième étape : elle consiste à importer le fichier g_eleves_classes.csv contenant les données relatives aux disciplines.

\n"; echo "

Remarque : cette opération n'efface par les classes. Elle ne fait qu'une mise à jour, le cas échéant, de la liste des matières.

\n"; echo "

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

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

Veuillez préciser le nom complet du fichier g_eleves_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++; } $sql="SELECT * FROM tempo2;"; $res_temp=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_temp)==0) { echo "

ERREUR : Aucune association élève/classe n'a été trouvée ???

\n"; echo "


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

On remplit les tables 'classes', 'periodes' et 'j_eleves_classes' : "; // Pour ne pas mettre une info_action par classe si aucune période edt_calendrier n'est encore saisie $sql="SELECT 1=1 FROM edt_calendrier WHERE classe_concerne_calendrier!=';' AND classe_concerne_calendrier!='';"; $test_cal=mysqli_query($GLOBALS["mysqli"], $sql); $nb_edt_cal=mysqli_num_rows($test_cal); // On ne met alors qu'une seule info_action if($nb_edt_cal==0) { $info_action_titre="Dates de périodes et de vacances"; $info_action_texte="Pensez à importer les périodes de vacances et saisir ou mettre à jour les dates de périodes et les classes associées dans Emplois du temps/Gestion/Gestion du calendrier.
Les dates de vacances sont notamment utilisées pour les totaux d'absences."; $info_action_destinataire=array("administrateur"); $info_action_mode="statut"; enregistre_infos_actions($info_action_titre,$info_action_texte,$info_action_destinataire,$info_action_mode); } $i = 0; // Compteur d'erreurs $error = 0; // Compteur d'enregistrement $total = 0; while ($lig=mysqli_fetch_object($res_temp)) { $reg_id_int = $lig->col1; $reg_classe = $lig->col2; // On nettoie et on vérifie : $reg_id_int = preg_replace("/[^0-9]/","",trim($reg_id_int)); if (mb_strlen($reg_id_int) > 50) $reg_id_int = mb_substr($reg_id_int, 0, 50); $reg_classe = preg_replace("/[^A-Za-z0-9._ \-]/","",trim($reg_classe)); //$reg_classe=nettoyer_caracteres_nom($reg_classe, "an", " _-", ""); if (mb_strlen($reg_classe) > 100) $reg_classe = mb_substr($reg_classe, 0, 100); if(($reg_id_int!='')&&($reg_classe!='')){ // Première étape : on s'assure que l'élève existe et on récupère son login... S'il n'existe pas, on laisse tomber. $sql="SELECT login FROM eleves WHERE elenoet = '" . $reg_id_int . "'"; //echo "$sql
"; $test = mysqli_query($GLOBALS["mysqli"], $sql); if (mysqli_num_rows($test) == 1) { $login_eleve = old_mysql_result($test, 0, "login"); // Maintenant que tout est propre et que l'élève existe, on fait un test sur la table pour voir si la classe existe $sql="SELECT id FROM classes WHERE classe = '" . mysqli_real_escape_string($GLOBALS["mysqli"], $reg_classe) . "'"; //echo "$sql
"; $test = mysqli_query($GLOBALS["mysqli"], $sql); if (mysqli_num_rows($test) == 0) { // Test négatif : aucune classe avec ce nom court... on créé ! $sql="INSERT INTO classes SET " . "classe = '" . mysqli_real_escape_string($GLOBALS["mysqli"], $reg_classe) . "', " . "nom_complet = '" . mysqli_real_escape_string($GLOBALS["mysqli"], $reg_classe) . "', " . "format_nom = 'np', " . "format_nom_eleve = 'np', " . "display_rang = 'n', " . "display_address = 'n', " . "display_coef = 'y'"; echo "$sql
"; $insert1 = mysqli_query($GLOBALS["mysqli"], $sql); // On récupère l'ID de la classe nouvelle créée, pour enregistrer les périodes $classe_id = ((is_null($___mysqli_res = mysqli_insert_id($GLOBALS["mysqli"]))) ? false : $___mysqli_res); $tab_id_classe=array(); $sql="SELECT id FROM classes ORDER BY classe;"; $res_classe = mysqli_query($GLOBALS["mysqli"], $sql); while($lig_classe=mysqli_fetch_object($res_classe)) { $tab_id_classe[]=$lig_classe->id; } // Associer aux vacances: $sql="SELECT * FROM edt_calendrier WHERE numero_periode='0' AND etabvacances_calendrier='1';"; $res_cal = mysqli_query($GLOBALS["mysqli"], $sql); while($lig_cal=mysqli_fetch_object($res_cal)) { $chaine_id_classe=""; $tab_id_classe_deja=explode(";", $lig_cal->classe_concerne_calendrier); for($loop=0;$loop"; $insert2 = mysqli_query($GLOBALS["mysqli"], $sql); // 20150810 $sql="SELECT * FROM edt_calendrier WHERE numero_periode='".$p."';"; echo "$sql
"; $res_cal = mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_cal)==1) { $lig_cal=mysqli_fetch_object($res_cal); $tab_id_classe_deja=explode(";", $lig_cal->classe_concerne_calendrier); $chaine_id_classe=""; for($loop=0;$loop"; $update_cal = mysqli_query($GLOBALS["mysqli"], $sql); $sql="UPDATE periodes SET date_fin='".$lig_cal->jourfin_calendrier."' WHERE id_classe='".$classe_id."' AND num_periode='".$lig_cal->numero_periode."';"; echo "$sql
"; $update_per=mysqli_query($GLOBALS["mysqli"], $sql); } elseif($nb_edt_cal>0) { $info_action_titre="Dates de périodes pour la classe ".get_nom_classe($classe_id); $info_action_texte="Pensez à contrôler que la classe ".get_nom_classe($classe_id)." est bien associée aux périodes et vacances dans Emplois du temps/Gestion/Gestion du calendrier."; $info_action_destinataire=array("administrateur"); $info_action_mode="statut"; enregistre_infos_actions($info_action_titre,$info_action_texte,$info_action_destinataire,$info_action_mode); } } $num_periods = 3; } else { // La classe existe // On récupère son ID $classe_id = old_mysql_result($test, 0, "id"); $num_periods = old_mysql_result(mysqli_query($GLOBALS["mysqli"], "SELECT count(num_periode) FROM periodes WHERE id_classe = '" . $classe_id . "'"), 0); } // Maintenant qu'on a l'ID de la classe et le nombre de périodes, on enregistre l'association for ($p=1;$p<=$num_periods;$p++) { $sql="INSERT INTO j_eleves_classes SET login = '" . $login_eleve . "', " . "id_classe = '" . $classe_id . "', " . "periode = '" . $p . "'"; //echo "$sql
"; $insert = mysqli_query($GLOBALS["mysqli"], $sql); } if (!$insert) { $error++; echo "".mysqli_error($GLOBALS["mysqli"])."
\n"; } else { $total++; } } } $i++; //if (!isset($_POST['ligne'.$i.'_id_int'])) $go = false; } $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.
"; } if ($error > 0) echo "

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

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

" . $total . " associations eleves-classes ont été enregistrées.

\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_eleves_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 = trim(fgets($fp, 4096)); if($ligne!="") { $tabligne=explode(";",$ligne); // 0 : ID interne de l'élève // 1 : nom court de la classe // On nettoie et on vérifie : $tabligne[0] = preg_replace("/[^0-9]/","",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])); $tabligne[1]=preg_replace("/[^A-Za-z0-9._ \-]/","",trim(remplace_accents($tabligne[1]))); //$tabligne[1]=nettoyer_caracteres_nom($tabligne[1], "an", " _-", ""); if (mb_strlen($tabligne[1]) > 100) $tabligne[1] = mb_substr($tabligne[1], 0, 100); $data_tab[$k] = array(); $data_tab[$k]["id_int"] = $tabligne[0]; $data_tab[$k]["classe"] = $tabligne[1]; $k++; } } fclose($fp); // Fin de l'analyse du fichier. // Maintenant on va afficher tout ça. $sql="TRUNCATE TABLE tempo2;"; $vide_table = mysqli_query($GLOBALS["mysqli"], $sql); $nb_error=0; echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; $alt=1; for ($i=0;$i<$k;$i++) { if(isset($data_tab[$i]["id_int"])) { $alt=$alt*(-1); echo "\n"; echo "\n"; echo "\n"; echo "\n"; } } echo "
ID interne de l'élèveClasse
\n"; $sql="INSERT INTO tempo2 SET col1='".$data_tab[$i]["id_int"]."', col2='".mysqli_real_escape_string($GLOBALS["mysqli"], $data_tab[$i]["classe"])."';"; $insert=mysqli_query($GLOBALS["mysqli"], $sql); if(!$insert) { echo ""; echo $data_tab[$i]["id_int"]; echo ""; $nb_error++; } else { echo $data_tab[$i]["id_int"]; } echo "\n"; echo $data_tab[$i]["classe"]; 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"); ?>