560 lines
18 KiB
PHP
Executable File
560 lines
18 KiB
PHP
Executable File
<?php require_once __ROOT__.'/manager/security.php';
|
|
define('__EXCEL_PATH__', __ROOT__.'/src/files/');
|
|
chdir( __EXCEL_PATH__ );
|
|
|
|
|
|
|
|
|
|
|
|
class excelManager{
|
|
|
|
public static function switch_level_1($request, $answer){
|
|
|
|
//inclusion des classes de PHPExcel et des fichiers necessaires
|
|
|
|
require_once __ROOT__.'/src/phpexcel/Classes/PHPExcel.php';
|
|
require_once __ROOT__.'/src/phpexcel/Classes/PHPExcel/Writer/Excel2007.php';
|
|
|
|
|
|
/* [1] TABLE DE ROUTAGE
|
|
============================================================*/
|
|
|
|
switch($request->level_1){
|
|
|
|
/*****************************************************/
|
|
/* Export la liste des étudiants d'un semestre donné */
|
|
/*****************************************************/
|
|
case 'export_grouplist':
|
|
|
|
// Vérification de la présence des groupes
|
|
|
|
if( isset($request->grouplist) ){
|
|
|
|
// [1] On crée une instance du fichier xls, activation de la feuille
|
|
$workbook = new PHPExcel();
|
|
$sheet = $workbook->getActiveSheet();
|
|
$writer = new PHPExcel_Writer_Excel2007($workbook);
|
|
|
|
// [2] Définition des paramètres du document
|
|
$workbook->getProperties()->setCreator($_SESSION['identifiant']);
|
|
$workbook->getProperties()->setLastModifiedBy('ACGA');
|
|
$workbook->getProperties()->setTitle('Liste étudiants '.$_SESSION['annee']);
|
|
|
|
// [3] Définition du format des cellules (document Excel)
|
|
$sheet->getColumnDimension('A')->setWidth(15);
|
|
$sheet->getColumnDimension('B')->setWidth(15);
|
|
$sheet->getColumnDimension('C')->setWidth(15);
|
|
$sheet->getColumnDimension('D')->setWidth(5);
|
|
$sheet->getColumnDimension('E')->setWidth(15);
|
|
$sheet->getColumnDimension('F')->setWidth(10);
|
|
$sheet->getColumnDimension('G')->setWidth(10);
|
|
|
|
// [4] Écriture des colonnes du tableau
|
|
$sheet->setCellValue('A1', date("d/m/Y"));
|
|
$sheet->setCellValue('A4', 'Identifiant');
|
|
$sheet->setCellValue('B4', 'Prénom');
|
|
$sheet->setCellValue('C4', 'Nom');
|
|
$sheet->setCellValue('D4', 'Sexe');
|
|
$sheet->setCellValue('E4', 'Mail étudiant');
|
|
$sheet->setCellValue('F4', 'Groupe');
|
|
$sheet->setCellValue('G4', 'Formation');
|
|
|
|
// [5] Écriture des valeurs dans le document Excel
|
|
$index = 5;
|
|
foreach($request->grouplist as $group){
|
|
$index++;
|
|
|
|
foreach($group->userlist as $student){
|
|
|
|
$sheet->setCellValue('A'.$index, $student->identifiant);
|
|
$sheet->setCellValue('B'.$index, $student->prenom);
|
|
$sheet->setCellValue('C'.$index, $student->nom);
|
|
$sheet->setCellValue('D'.$index, ($student->sexe)?'M':'F');
|
|
$sheet->setCellValue('E'.$index, $student->mail);
|
|
$sheet->setCellValue('F'.$index, $group->nom);
|
|
$sheet->setCellValue('G'.$index, $group->formation);
|
|
$index++;
|
|
}
|
|
}
|
|
|
|
// [6] On enregistre ce nouveau fichier, et on lance son téléchargement
|
|
$filePath = __EXCEL_PATH__.$_SESSION['identifiant'].'_export_liste_etudiants.xlsx';
|
|
$writer->save( $filePath );
|
|
|
|
|
|
// [7] On retourne l'état du traitement 'success'
|
|
$answer->request = 'success';
|
|
|
|
// [8] On retourne le chemin relatif du serveur
|
|
$answer->pathfile = '/src/files/'.$_SESSION['identifiant'].'_export_liste_etudiants.xlsx';
|
|
}
|
|
|
|
// [7] On retourne l'état du traitement 'param_error'
|
|
else
|
|
$answer->request = 'param_error';
|
|
break;
|
|
|
|
|
|
|
|
/***************************************************************/
|
|
/* Importation des listes d'élèves de l'année en format Excel */
|
|
/***************************************************************/
|
|
case 'import_inscrits':
|
|
|
|
// Récupération du nom du fichier
|
|
$filePath = __EXCEL_PATH__.$_SESSION['identifiant'].'_import_inscrits.xlsx';
|
|
|
|
// si on a pas le droit d'écriture, on quitte //
|
|
if( !is_readable($filePath) ){ $answer->request = 'read_permission'; return; }
|
|
|
|
// Chargement du fichier
|
|
$objPHPExcel = PHPExcel_IOFactory::load($filePath);
|
|
|
|
// Placement du curseur sur la première case
|
|
$sheet = $objPHPExcel->getSheet(0);
|
|
$userlistData = $sheet->rangeToArray('B2:'.$sheet->getHighestColumn().''.$sheet->getHighestRow());
|
|
|
|
|
|
// Variables stack pour la liste de élèves
|
|
$listeFormations = array();
|
|
|
|
|
|
// "IUT" | formation+ver. | formationCode | formationLibellé | Inscript. en cours | Redoublant | ident. | nom | prenom | sexe | naiss. | mail | sport
|
|
|
|
$formationCodes = array();
|
|
|
|
// on parcourt toutes les lignes pour lesquelles il y a en 2ème cellule "IUT"
|
|
foreach($userlistData as $line){ if( $line[0] == 'IUT' ){
|
|
|
|
/* [1] On récupère la formation (code, libellé)
|
|
========================================================================*/
|
|
if( $line[2] != null && $line[3] != null ){ // si aucune des cases ne sont vides
|
|
|
|
if( !in_array($line[2], $formationCodes) ){ // si on n'a toujours pas créé cette formation
|
|
array_push( // on ajoute la formation à la liste
|
|
$listeFormations,
|
|
array(
|
|
'nom' => $line[2],
|
|
'libelle' => $line[3],
|
|
'userlist' => array() // contiendra les étudiants de cette formation
|
|
)
|
|
);
|
|
|
|
// on signale pour ne pas répéter
|
|
array_push($formationCodes, $line[2]);
|
|
}
|
|
|
|
|
|
// on récupère l'index de la formation dans le tableau de retour
|
|
$formIndex = array_search($line[2], $formationCodes);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* [2] On ajoute l'élève courant dans la formation
|
|
========================================================================*/
|
|
if( $line[6] != null && $line[7] != null && $line[8] != null && $line[9] != null && $line[1] != null ){
|
|
|
|
array_push(
|
|
$listeFormations[$formIndex]['userlist'], array(
|
|
'identifiant' => $line[6],
|
|
'nom' => $line[7],
|
|
'prenom' => $line[8],
|
|
'sexe' => $line[9] == 'M',
|
|
'mail' => $line[11]
|
|
)
|
|
);
|
|
|
|
}
|
|
|
|
}}
|
|
|
|
|
|
// on vérifie qu'on a récupéré qqch
|
|
if( count($listeFormations) > 0 ){
|
|
$answer->formationList = $listeFormations;
|
|
$answer->request = 'success';
|
|
}else
|
|
$answer->request = 'corrupted_format';
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// EXPORTATION DE NOTES POUR UN CONTROLE DONNEE, UNE FORMATION DONNEE ET UN GROUPE DONNE
|
|
case 'export_notes':
|
|
|
|
//vérificationd des paramètres en entrée
|
|
|
|
// if(isset($request->formation) && isset($request->groupe) && isset($request->controle) && isset($request->resultat)){
|
|
|
|
|
|
// // Création de la fiche
|
|
|
|
// $workbook = new PHPExcel();
|
|
// $sheet = $workbook->getActiveSheet();
|
|
// $writer = new PHPExcel_Writer_Excel2007($workbook);
|
|
|
|
// // Titre du document
|
|
|
|
// $workbook->getProperties()->setTitle($request->formation.$request->groupe.$request->controle);
|
|
|
|
// // Taille des cases
|
|
|
|
// $sheet->getColumnDimension('A')->setWidth(20);
|
|
// $sheet->getColumnDimension('B')->setWidth(20);
|
|
// $sheet->getColumnDimension('C')->setWidth(10);
|
|
|
|
// // Écriture des colonnes du tableau
|
|
|
|
// $sheet->setCellValue('A1', $request->groupe);
|
|
// $sheet->setCellValue('B1', date("d/m/Y G:m"));
|
|
// $sheet->setCellValue('C1', $request->controle);
|
|
// $sheet->setCellValue('A3', 'Nom');
|
|
// $sheet->setCellValue('B3', 'Prénom');
|
|
// $sheet->setCellValue('C3', 'Note');
|
|
|
|
|
|
// // Écriture des valeurs dans le document Excel
|
|
|
|
// $index = 5;
|
|
// foreach( $request->resultat as $eleve ) {
|
|
|
|
// $sheet->setCellValue('A'.$index,$eleve->nom);
|
|
// $sheet->setCellValue('B'.$index,$eleve->prenom);
|
|
// $sheet->setCellValue('C'.$index,$eleve->note);
|
|
// }
|
|
// }
|
|
// //On enregistre ce nouveau fichier, et on lance son téléchargement
|
|
|
|
// $docPath = DIRECTORY_SEPARATOR.join(DIRECTORY_SEPARATOR, array("page", "excelTemplates", $request->formation.$request->groupe.$request->controle".xlsx"));
|
|
// if(file_exists (__ROOT__.$docPath)){
|
|
// $index = 1;
|
|
// $titleLen = strlen($docPath) - 5;
|
|
// while(file_exists (__ROOT__.$docPath)){
|
|
// $docPath = mb_strimwidth($docPath, 0, $titleLen, "")." (".$index.").xlsx";
|
|
// $index++;
|
|
// }
|
|
// }
|
|
// $writer->save(__ROOT__.$docPath);
|
|
// $answer->docPath = $docPath;
|
|
// }
|
|
|
|
// // Erreur de paramètre(s)
|
|
|
|
// else {
|
|
|
|
// $answer->request = 'param_error';
|
|
// }
|
|
|
|
break;
|
|
|
|
|
|
/******************************************/
|
|
/* Importation des notes pour un contrôle */
|
|
/******************************************/
|
|
case 'import_notes':
|
|
|
|
|
|
$filePath = __EXCEL_PATH__.$_SESSION['identifiant'].'_import_notes.xlsx';
|
|
|
|
// si on a pas le droit d'écriture, on quitte //
|
|
if( !is_readable($filePath) ){ $answer->request = 'read_permission'; return; }
|
|
|
|
// Charger le fichier en tant que document Excel
|
|
$objPHPExcel = PHPExcel_IOFactory::load($filePath);
|
|
|
|
// Get sur la première case
|
|
$sheet = $objPHPExcel->getSheet(0);
|
|
$notesData = $sheet->rangeToArray('A1:'.'B'.$sheet->getHighestRow());
|
|
|
|
|
|
$notes = array(); // contiendra le tableau de retour
|
|
|
|
/****************************/
|
|
/* TRAITEMENT SUR LES CASES */
|
|
/****************************/
|
|
foreach($notesData as $line){
|
|
|
|
/* [1] On récupère pour chaque étudiant si le format est bon
|
|
=========================================================================*/
|
|
// si la case qui doit contenir la note n'est pas vide, on met au bon format numérique
|
|
if( $line[1] != null ) $line[1] = str_replace(',', '.', $line[1]);
|
|
|
|
if( checkParam($line[0], 'utilisateur.identifiant') && is_numeric($line[1]) ){ // bon format pour l'identifiant et la note
|
|
|
|
array_push( // on ajoute l'étudiant et sa note
|
|
$notes,
|
|
array(
|
|
'etudiant' => $line[0],
|
|
'valeur' => $line[1]
|
|
)
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$answer->notes = $notes;
|
|
$answer->request = 'success';
|
|
|
|
break;
|
|
|
|
|
|
|
|
/***********************/
|
|
/* Importation du MCC */
|
|
/**********************/
|
|
case 'import_mcc':
|
|
|
|
|
|
$filePath = __EXCEL_PATH__.$_SESSION['identifiant'].'_import_mcc.xlsx';
|
|
|
|
// si on a pas le droit d'écriture, on quitte //
|
|
if( !is_readable($filePath) ){ $answer->request = 'read_permission'; return; }
|
|
|
|
// Charger le fichier en tant que document Excel
|
|
$objPHPExcel = PHPExcel_IOFactory::load($filePath);
|
|
|
|
// Get sur la première case
|
|
$sheet = $objPHPExcel->getSheet(0);
|
|
$mccData = $sheet->rangeToArray('A2:'.$sheet->getHighestColumn().''.$sheet->getHighestRow());
|
|
|
|
|
|
/* permet d'éviter les doublons */
|
|
$mcc = array(); // contiendra le tableau de retour
|
|
$ueuid = array();
|
|
|
|
/****************************/
|
|
/* TRAITEMENT SUR LES CASES */
|
|
/****************************/
|
|
foreach($mccData as $line){
|
|
if( $line[6] != null ){ // uniquement les lignes non vides
|
|
|
|
|
|
/* [1] On récupère les données de l'UE, si les champs sont définis
|
|
=========================================================================*/
|
|
if( /*$line[0] != null && */ $line[1] != null && $line[2] != null ){
|
|
|
|
if( $line[0] != null && !in_array($line[0], $ueuid) ){ // on créé l'UE dans la liste s'il n'y est pas déjà
|
|
|
|
array_push( // on ajoute l'UE
|
|
$mcc,
|
|
array(
|
|
'nom' => $line[0],
|
|
'libelle' => $line[1],
|
|
'coefficient' => $line[2],
|
|
'modules' => array(),
|
|
'moduid' => array()
|
|
)
|
|
);
|
|
|
|
array_push($ueuid, $line[0]); // on dis qu'on a déjà enregistré l'ue
|
|
}
|
|
|
|
}
|
|
|
|
if( $line[0] != null )
|
|
$ueIndex = array_search($line[0], $ueuid);
|
|
|
|
/* [2] On récupère les données du module, si les champs sont définis
|
|
=========================================================================*/
|
|
if( /*$line[3] != null && */ $line[4] != null && $line[5] != null ){
|
|
|
|
if( $line[3] != null && !in_array($line[3], $mcc[$ueIndex]['moduid']) ){ // on créé le module dans la liste de cet UE s'il n'y est pas déjà
|
|
array_push( // on ajoute l'UE
|
|
$mcc[$ueIndex]['modules'],
|
|
array(
|
|
'nom' => $line[3],
|
|
'libelle' => $line[4],
|
|
'coefficient' => $line[5],
|
|
'controles' => array(),
|
|
'ctrluid' => array()
|
|
)
|
|
);
|
|
|
|
array_push($mcc[$ueIndex]['moduid'], $line[3]); // on dis qu'on a déjà enregistré le module
|
|
}
|
|
}
|
|
|
|
if( $line[3] != null )
|
|
$modIndex = array_search($line[3], $mcc[$ueIndex]['moduid']);
|
|
|
|
/* [3] On récupère les contrôles du module, si les champs sont définis
|
|
=========================================================================*/
|
|
if( $line[6] != null && $line[7] != null && $line[8] != null ){
|
|
|
|
if( !in_array($line[6], $mcc[$ueIndex]['modules'][$modIndex]['ctrluid']) ){ // on créé le contrôle dans la liste de ce module s'il n'y est pas déjà
|
|
array_push( // on ajoute l'UE
|
|
$mcc[$ueIndex]['modules'][$modIndex]['controles'],
|
|
array(
|
|
'nom' => $line[6],
|
|
'libelle' => $line[7],
|
|
'coefficient' => $line[8]
|
|
)
|
|
);
|
|
|
|
array_push($mcc[$ueIndex]['modules'][$modIndex]['ctrluid'], $line[6]); // on dis qu'on a déjà enregistré le module
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* [4] Affinage des données, on supprime les données temporaires
|
|
=========================================================================*/
|
|
foreach($mcc as $iter_ue=>$ue){
|
|
unset( $mcc[$iter_ue]['moduid'] );
|
|
|
|
foreach($mcc[$iter_ue]['modules'] as $iter_m=>$mod)
|
|
unset( $mcc[$iter_ue]['modules'][$iter_m]['ctrluid'] );
|
|
}
|
|
|
|
|
|
$answer->mcc = $mcc;
|
|
$answer->request = 'success';
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/**********************************************/
|
|
/* Export la liste des étudiants pour le jury */
|
|
/**********************************************/
|
|
case 'export_jury':
|
|
|
|
// Vérification de la présence des groupes
|
|
|
|
if( isset($request->grouplist) ){
|
|
|
|
// [1] On crée une instance du fichier xls, activation de la feuille
|
|
$workbook = new PHPExcel();
|
|
$sheet = $workbook->getActiveSheet();
|
|
$writer = new PHPExcel_Writer_Excel2007($workbook);
|
|
|
|
// [2] Définition des paramètres du document
|
|
$workbook->getProperties()->setCreator($_SESSION['identifiant']);
|
|
$workbook->getProperties()->setLastModifiedBy('ACGA');
|
|
$workbook->getProperties()->setTitle('Liste étudiants jury');
|
|
|
|
// [3] Définition du format des cellules (document Excel)
|
|
$sheet->getColumnDimension('A')->setWidth(15);
|
|
$sheet->getColumnDimension('B')->setWidth(15);
|
|
$sheet->getColumnDimension('C')->setWidth(15);
|
|
$sheet->getColumnDimension('D')->setWidth(15);
|
|
|
|
// [4] Écriture des colonnes du tableau
|
|
$sheet->setCellValue('B1', "" );
|
|
$sheet->setCellValue('A2', date("d/m/Y G:m") );
|
|
$sheet->setCellValue('A4', 'Identifiant' );
|
|
$sheet->setCellValue('B4', 'Formation' );
|
|
$sheet->setCellValue('C4', 'Groupe' );
|
|
$sheet->setCellValue('D4', 'Mention' );
|
|
|
|
// [5] Écriture des valeurs dans le document Excel
|
|
$index = 5;
|
|
foreach($request->grouplist as $GROUP){
|
|
$index++;
|
|
|
|
foreach($GROUP->userlist as $USER){
|
|
$sheet->setCellValue('A'.$index, $USER->identifiant);
|
|
$sheet->setCellValue('B'.$index, $GROUP->formation);
|
|
$sheet->setCellValue('C'.$index, $GROUP->nom);
|
|
if( $USER->mention != null ) // si mention déjà spécifiée, on l'affiche
|
|
$sheet->setCellValue('D'.$index, $USER->mention);
|
|
else // sinon, on met "[À compléter]"
|
|
$sheet->setCellValue('D'.$index, '[À compléter]');
|
|
|
|
|
|
$index++;
|
|
}
|
|
}
|
|
|
|
// [6] On enregistre ce nouveau fichier, et on lance son téléchargement
|
|
$filePath = __EXCEL_PATH__.$_SESSION['identifiant'].'_export_jury.xlsx';
|
|
$writer->save( $filePath );
|
|
|
|
|
|
// [7] On retourne l'état du traitement 'success'
|
|
$answer->request = 'success';
|
|
|
|
// [8] On retourne le chemin relatif du serveur
|
|
$answer->pathfile = '/src/files/'.$_SESSION['identifiant'].'_export_jury.xlsx';
|
|
}
|
|
|
|
// [7] On retourne l'état du traitement 'param_error'
|
|
else
|
|
$answer->request = 'param_error';
|
|
break;
|
|
|
|
|
|
/************************************/
|
|
/* Importation des résulats du jury */
|
|
/************************************/
|
|
case 'import_jury':
|
|
|
|
|
|
$filePath = __EXCEL_PATH__.$_SESSION['identifiant'].'_import_jury.xlsx';
|
|
|
|
// si on a pas le droit d'écriture, on quitte //
|
|
if( !is_readable($filePath) ){ $answer->request = 'read_permission'; return; }
|
|
|
|
// Charger le fichier en tant que document Excel
|
|
$objPHPExcel = PHPExcel_IOFactory::load($filePath);
|
|
|
|
// Get sur la première case
|
|
$sheet = $objPHPExcel->getSheet(0);
|
|
$juryData = $sheet->rangeToArray('A6:'.'D'.$sheet->getHighestRow());
|
|
|
|
|
|
$jury = array(); // contiendra le tableau de retour
|
|
$mentionsPossibles = array('ADM', 'ADJ', 'ATT', 'NAR', 'DEM', 'AJ');
|
|
|
|
/****************************/
|
|
/* TRAITEMENT SUR LES CASES */
|
|
/****************************/
|
|
foreach($juryData as $line){
|
|
|
|
/* [1] On récupère pour chaque étudiant si le format est bon
|
|
=========================================================================*/
|
|
if( checkParam($line[0], 'utilisateur.identifiant') && in_array($line[3], $mentionsPossibles) ){ // bon format pour l'identifiant et la mention
|
|
|
|
array_push( // on ajoute l'étudiant et sa mention
|
|
$jury,
|
|
array(
|
|
'etudiant' => $line[0],
|
|
'mention' => $line[3]
|
|
)
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$answer->jury = $jury;
|
|
$answer->request = 'success';
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// DEFAULT
|
|
default:
|
|
$answer->request = 'unknown_level_1';
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
?>
|