[x] Export groupes

+ format
	+ excelManager
	+ génération
	+ téléchargement
This commit is contained in:
xdrm-brackets 2016-01-02 18:43:33 +01:00
parent 9e9356d95f
commit 7863168646
9 changed files with 152 additions and 95 deletions

View File

@ -3,7 +3,6 @@ require_once __ROOT__.'/manager/security.php';
/* VARIABLES DES NOTIFICATIONS */ /* VARIABLES DES NOTIFICATIONS */
$notifNotifNum = 5; $notifNotifNum = 5;
?> ?>

View File

@ -549,19 +549,7 @@ class DataBase{
if( !semestreRepo::exists($semestre) ) return 'unknown_semestre'; if( !semestreRepo::exists($semestre) ) return 'unknown_semestre';
else $semestreUID = $semestre; else $semestreUID = $semestre;
// on cherche tout les groupes du même semestre de la même année $grouplist = groupRepo::forSemestre($semestreUID); // contiendra tout les groupes
$getGroupesUID = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.nom as semestre
FROM groupe as g, semestre as s, appartenance as app
WHERE g.id_groupe = app.id_groupe
AND s.id_semestre = app.id_semestre
AND s.id_semestre = :semestreUID
ORDER BY g.nom");
$getGroupesUID->execute(array(
':semestreUID' => $semestreUID
));
$grouplist = DataBase::delNumeric( $getGroupesUID->fetchAll() ); // contiendra tout les groupes
// on parcourt tous les groupes // on parcourt tous les groupes
foreach($grouplist as $iter=>$val) foreach($grouplist as $iter=>$val)
@ -576,7 +564,7 @@ class DataBase{
/******************************************************************/ /******************************************************************/
public function listeEtudiantsTousGroupesAnnee($annee, $semestre_pair){ public function listeEtudiantsTousGroupesAnnee($annee, $semestre_pair){
// on récupère la liste des groupes // on récupère la liste des groupes
$grouplist = DataBase::delNumeric( groupRepo::forYear($semestre_pair, $annee) ); $grouplist = groupRepo::forYear($semestre_pair, $annee);
foreach($grouplist as $iter=>$val) // pour chaque groupe un récupère la liste des utilisateurs foreach($grouplist as $iter=>$val) // pour chaque groupe un récupère la liste des utilisateurs
$grouplist[$iter]['userlist'] = groupRepo::membres($grouplist[$iter]['id'], $grouplist[$iter]['id_semestre']); $grouplist[$iter]['userlist'] = groupRepo::membres($grouplist[$iter]['id'], $grouplist[$iter]['id_semestre']);

View File

@ -1,5 +1,6 @@
<?php require_once __ROOT__.'/manager/security.php'; <?php require_once __ROOT__.'/manager/security.php';
chdir( __ROOT__.'/src/files/' ); define('__EXCEL_PATH__', __ROOT__.'/src/files/');
chdir( __EXCEL_PATH__ );
@ -20,94 +21,78 @@ class excelManager{
switch($request->level_1){ switch($request->level_1){
/***************************************************/ /*****************************************************/
/* Export la liste des étudiants d'un groupe donné */ /* Export la liste des étudiants d'un semestre donné */
/***************************************************/ /*****************************************************/
case 'export_userlist_group': case 'export_grouplist':
// Vérification de la présence des groupes // Vérification de la présence des groupes
if( isset($request->grouplist) && $request->grouplist != null ){ if( isset($request->grouplist) ){
//On crée une instance du fichier xls,activation de la feuille
// [1] On crée une instance du fichier xls, activation de la feuille
$workbook = new PHPExcel(); $workbook = new PHPExcel();
$sheet = $workbook->getActiveSheet(); $sheet = $workbook->getActiveSheet();
$writer = new PHPExcel_Writer_Excel2007($workbook); $writer = new PHPExcel_Writer_Excel2007($workbook);
// Définition des paramètres du document // [2] Définition des paramètres du document
$workbook->getProperties()->setCreator($_SESSION['identifiant']); $workbook->getProperties()->setCreator($_SESSION['identifiant']);
$workbook->getProperties()->setLastModifiedBy('ACGA'); $workbook->getProperties()->setLastModifiedBy('ACGA');
$workbook->getProperties()->setTitle('Liste étudiants '.$_SESSION['annee']); $workbook->getProperties()->setTitle('Liste étudiants '.$_SESSION['annee']);
// Définition du format des cellules (document Excel) // [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);
$sheet->getColumnDimension('B')->setWidth(20); // [4] Écriture des colonnes du tableau
$sheet->getColumnDimension('C')->setWidth(20); $sheet->setCellValue('B1', "");
$sheet->getColumnDimension('D')->setWidth(15);
$sheet->getColumnDimension('E')->setWidth(8);
$sheet->getColumnDimension('F')->setWidth(35);
$sheet->getColumnDimension('G')->setWidth(12);
$sheet->getColumnDimension('H')->setWidth(12);
// Écriture des colonnes du tableau
$sheet->setCellValue('B1', "GROUPE DES ETUDIANTS DE L'ANNEE ".$_SESSION['annee']);
$sheet->setCellValue('A2', date("d/m/Y G:m")); $sheet->setCellValue('A2', date("d/m/Y G:m"));
$sheet->setCellValue('A4', 'Numéro'); $sheet->setCellValue('A4', 'Identifiant');
$sheet->setCellValue('B4', 'Nom'); $sheet->setCellValue('B4', 'Prénom');
$sheet->setCellValue('C4', 'Prénom'); $sheet->setCellValue('C4', 'Nom');
$sheet->setCellValue('D4', 'Identifiant'); $sheet->setCellValue('D4', 'Sexe');
$sheet->setCellValue('E4', 'Sexe'); $sheet->setCellValue('E4', 'Mail étudiant');
$sheet->setCellValue('F4', 'Mail étudiant'); $sheet->setCellValue('F4', 'Groupe');
$sheet->setCellValue('G4', 'Code IAE'); $sheet->setCellValue('G4', 'Formation');
$sheet->setCellValue('H4', 'IAE Etape');
// Écriture des valeurs dans le document Excel
// [5] Écriture des valeurs dans le document Excel
$index = 5; $index = 5;
foreach ( $request->grouplist as $group ) { foreach($request->grouplist as $group){
$index++;
$groupeName = $group['nom']; foreach($group->userlist as $student){
$formation = $group['formation'];
foreach ( $group['userlist'] as $student ) { $sheet->setCellValue('A'.$index, $student->identifiant);
$sheet->setCellValue('B'.$index, $student->prenom);
$sheet->setCellValue('A'.$index, $index-4); $sheet->setCellValue('C'.$index, $student->nom);
$sheet->setCellValue('B'.$index, $student['nom']); $sheet->setCellValue('D'.$index, ($student->sexe)?'M':'F');
$sheet->setCellValue('C'.$index, $student['prenom']); $sheet->setCellValue('E'.$index, $student->mail);
$sheet->setCellValue('D'.$index, $student['identifiant']); $sheet->setCellValue('F'.$index, $group->nom);
$sheet->setCellValue('E'.$index, $student['sexe']); $sheet->setCellValue('G'.$index, $group->formation);
$sheet->setCellValue('F'.$index, $student['mail']);
$sheet->setCellValue('G'.$index, $formation);
$sheet->setCellValue('H'.$index, $groupeName);
$index++; $index++;
} }
} }
//On enregistre ce nouveau fichier, et on lance son téléchargement // [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 );
$docPath = DIRECTORY_SEPARATOR.join(DIRECTORY_SEPARATOR, array("page", "excelTemplates",
"Liste Etudiant ".$_SESSION['annee'].".xlsx")); // [7] On retourne l'état du traitement 'success'
if(file_exists (__ROOT__.$docPath)){ $answer->request = 'success';
$index = 1;
$titleLen = strlen($docPath) - 5; // [8] On retourne le chemin relatif du serveur
while(file_exists (__ROOT__.$docPath)){ $answer->pathfile = '/src/files/'.$_SESSION['identifiant'].'_export_liste_etudiants.xlsx';
$docPath = mb_strimwidth($docPath, 0, $titleLen, "")." (".$index.").xlsx";
$index++;
}
}
$writer->save(__ROOT__.$docPath);
$answer->docPath = $docPath;
} }
// Erreur de paramètre(s) // [7] On retourne l'état du traitement 'param_error'
else
else {
$answer->request = 'param_error'; $answer->request = 'param_error';
}
break; break;
@ -118,7 +103,7 @@ class excelManager{
case 'import_inscrits': case 'import_inscrits':
// Récupération du nom du fichier // Récupération du nom du fichier
$filePath = __ROOT__.'/src/files/'.$_SESSION['identifiant'].'_import_inscrits.xlsx'; $filePath = __EXCEL_PATH__.$_SESSION['identifiant'].'_import_inscrits.xlsx';
// si on a pas le droit d'écriture, on quitte // // si on a pas le droit d'écriture, on quitte //
if( !is_readable($filePath) ){ $answer->request = 'read_permission'; return; } if( !is_readable($filePath) ){ $answer->request = 'read_permission'; return; }
@ -236,7 +221,7 @@ class excelManager{
// // Écriture des valeurs dans le document Excel // // Écriture des valeurs dans le document Excel
// $index = 5; // $index = 5;
// foreach ( $request->resultat as $eleve ) { // foreach( $request->resultat as $eleve ) {
// $sheet->setCellValue('A'.$index,$eleve->nom); // $sheet->setCellValue('A'.$index,$eleve->nom);
// $sheet->setCellValue('B'.$index,$eleve->prenom); // $sheet->setCellValue('B'.$index,$eleve->prenom);
@ -320,17 +305,17 @@ class excelManager{
case 'import_mcc': case 'import_mcc':
$filePath = __ROOT__.'/src/files/'.$_SESSION['identifiant'].'_import_mcc.xlsx'; $filePath = __EXCEL_PATH__.$_SESSION['identifiant'].'_import_mcc.xlsx';
// si on a pas le droit d'écriture, on quitte // // si on a pas le droit d'écriture, on quitte //
if( !is_readable($filePath) ){ $answer->request = 'read_permission'; return; } if( !is_readable($filePath) ){ $answer->request = 'read_permission'; return; }
// Charger le fichier en tant que document Excel // Charger le fichier en tant que document Excel
$objPHPExcel = PHPExcel_IOFactory::load($filePath); $objPHPExcel = PHPExcel_IOFactory::load($filePath);
// Get sur la première case // Get sur la première case
$sheet = $objPHPExcel->getSheet(0); $sheet = $objPHPExcel->getSheet(0);
$mccData = $sheet->rangeToArray('A2:'.$sheet->getHighestColumn().''.$sheet->getHighestRow()); $mccData = $sheet->rangeToArray('A2:'.$sheet->getHighestColumn().''.$sheet->getHighestRow());
/* permet d'éviter les doublons */ /* permet d'éviter les doublons */

View File

@ -126,7 +126,7 @@ class groupsManager{
/*******************************************************************/ /*******************************************************************/
/* retourne les utilisateurs de tous les groupes du semestre donné */ /* retourne les utilisateurs de tous les groupes du semestre donné */
/*******************************************************************/ /*******************************************************************/
case 'grouplist': if( permission('student') ){ case 'grouplist': if( permission('student') || permission('master') || permission('admin') ){
$areSetParam = isset($request->semestre); // les arguments existent $areSetParam = isset($request->semestre); // les arguments existent
// $formationCheck = $areSetParam && checkParam($request->formation, 'auto_increment_id'); // formation (formation) bon format // $formationCheck = $areSetParam && checkParam($request->formation, 'auto_increment_id'); // formation (formation) bon format

View File

@ -171,7 +171,7 @@ class groupRepo{
public static function membres($groupeUID, $semestreUID){ public static function membres($groupeUID, $semestreUID){
// si le groupe existe => on récupère ses utilisateurs // si le groupe existe => on récupère ses utilisateurs
// var_dump($groupeUID.' - '.$semestreUID); // var_dump($groupeUID.' - '.$semestreUID);
$getMembres = DataBase::getPDO()->prepare("SELECT u.identifiant, u.prenom, u.nom, u.mail, u.droits, s.nom as semestre, g.id_groupe, g.nom as groupe $getMembres = DataBase::getPDO()->prepare("SELECT u.identifiant, u.prenom, u.nom, u.sexe, u.mail, u.droits, s.nom as semestre, g.id_groupe, g.nom as groupe
FROM utilisateur as u, groupe as g, semestre as s, appartenance as app, formation as f FROM utilisateur as u, groupe as g, semestre as s, appartenance as app, formation as f
WHERE s.id_formation = f.id_formation WHERE s.id_formation = f.id_formation
AND u.identifiant = app.id_etudiant AND u.identifiant = app.id_etudiant
@ -318,6 +318,30 @@ class groupRepo{
/* RETOURNE TOUS LES GROUPES DU SEMESTRE SPÉCIFIÉ
*
* @semestreUID<int> L'UID du semestre en question
*
*
* @return groupes<Array> retourne la liste des groupes correspondant aux critères
*
*/
public static function forSemestre($semestreUID){
$getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation
FROM groupe as g, semestre as s, appartenance as app, formation as f
WHERE s.id_formation = f.id_formation
AND g.id_groupe = app.id_groupe
AND s.id_semestre = app.id_semestre
AND s.id_semestre = :semestreUID
ORDER BY g.nom");
$getGroupeList->execute(array( ':semestreUID' => $semestreUID ));
return DataBase::delNumeric( $getGroupeList->fetchAll() );
}
/* RETOURNE TOUS LES GROUPES DES SEMESTRES COURANT D'UNE ANNÉE /* RETOURNE TOUS LES GROUPES DES SEMESTRES COURANT D'UNE ANNÉE
* *
* @semestre_pair<Boolean> VRAI si le semestre courant est pair (***OPTIONNEL***) * @semestre_pair<Boolean> VRAI si le semestre courant est pair (***OPTIONNEL***)

View File

@ -46,7 +46,8 @@ for( var i = 0 ; i < partList.length ; i++ ){
reload(); reload();
// import/export affinage par semestre // import/export affinage par semestre
}else if( e.target.parentNode.getAttribute('name') == 'semestre' && e.target.dataset.hasOwnProperty('stre') ){ }else if( e.target.parentNode.getAttribute('name') == 'semestre' && e.target.dataset.hasOwnProperty('stre') && e.target.dataset.hasOwnProperty('year') ){
pageM.vars[1] = 'a:'+e.target.dataset.year;
pageM.vars[2] = 's:'+e.target.dataset.stre; pageM.vars[2] = 's:'+e.target.dataset.stre;
reload(); reload();
} }

View File

@ -98,7 +98,7 @@ if( canMoveStudents ){ // si c'set l'admin
var selectList = document.querySelectorAll("#CONTAINER > section[name] > select[name=groupe], #CONTAINER > section[name] > .p > select[name=annee]"); var selectList = document.querySelectorAll("#CONTAINER > section[name] > select[name=groupe], #CONTAINER > section[name] > .p > select[name=annee]");
var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=semestre], "+ var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=semestre], "+
"#CONTAINER > section[name] > table.partlist[name=formation], "+ "#CONTAINER > section[name] > table.partlist[name=formation], "+
"#CONTAINER > section[name] > .p > div.partlist[name=semestre] > span[data-stre]"); "#CONTAINER > section[name] > .p > div.partlist[name=semestre] > span[data-stre][data-year]");
// GESTION DE L'AFFINAGE PAR FORMATION/SEMESTRE // // GESTION DE L'AFFINAGE PAR FORMATION/SEMESTRE //
for( var i = 0 ; i < partList.length ; i++ ){ for( var i = 0 ; i < partList.length ; i++ ){
@ -121,7 +121,8 @@ for( var i = 0 ; i < partList.length ; i++ ){
pageM.vars[2] = 's:'+e.target.dataset.value; pageM.vars[2] = 's:'+e.target.dataset.value;
// affinage par semestre (exportation) // affinage par semestre (exportation)
}else if( e.target.parentNode.getAttribute('name') == 'semestre' && e.target.dataset.hasOwnProperty('stre') ){ }else if( e.target.parentNode.getAttribute('name') == 'semestre' && e.target.dataset.hasOwnProperty('stre') && e.target.dataset.hasOwnProperty('year') ){
pageM.vars[1] = 'a:'+e.target.dataset.year;
pageM.vars[2] = 's:'+e.target.dataset.stre; pageM.vars[2] = 's:'+e.target.dataset.stre;
} }
@ -179,9 +180,68 @@ for( var i = 0 ; i < selectList.length ; i++ ){
/********************************/
/* GESTION DE L'EXPORT DE LISTE */
/********************************/
var exportInscrits = document.getElementById('export_grouplist');
if( exportInscrits != null ){
exportInscrits.addEventListener('click', function(e){
var selectedSemestre = document.querySelector("#CONTAINER > section[name] > .p > div.partlist[name] > span[data-stre][data-year].active");
// on récupère l'année et le semestre selectionnés
var fSemestre = (selectedSemestre!=null) ? selectedSemestre.dataset.stre : null;
var fAnnee = (selectedSemestre!=null) ? selectedSemestre.dataset.year : null;
console.log(fSemestre);
console.log(fAnnee);
/* [1] On récupère la liste des groupes en question (groupManager)
===================================================================*/
/* (1) Tous les semestres */
var request1;
if( fSemestre == '*' ){
request1 = {
level_0: 'groups',
level_1: 'grouplistForYear',
annee: fAnnee,
};
}else{
request1 = {
level_0: 'groups',
level_1: 'grouplist',
semestre: fSemestre,
};
}
API.send(request1, function(answer1){
// si on a bien récupéré les étudiants
if( answer1.request == 'success' ){
console.log( answer1.grouplist );
/* [2] On génère le fichier associé (excelManager)
===================================================================*/
var request2 = {
level_0: 'excel',
level_1: 'export_grouplist',
grouplist: answer1.grouplist // on envoie la liste qu'on vient de récupérer
};
API.send(request2, function(answer2){
if( answer2.request == 'success' ){ // le fichier a bien été généré, on lance le téléchargement
document.location = answer2.pathfile;
reload();
}
});
}
});
}, false);
}

View File

@ -605,17 +605,17 @@ if( permission('master') || permission('admin') ){
if( !in_array($semestreOpt, $semestresListe) ) $semestreOpt = null; if( !in_array($semestreOpt, $semestresListe) ) $semestreOpt = null;
echo "<div class='partlist' name='semestre'>"; echo "<div class='partlist' name='semestre'>";
if( $semestreOpt == null ) echo "<span data-stre='*' data-frm='*' class='active'>Tous</span>"; if( $semestreOpt == null ) echo "<span data-stre='*' data-year='".$anneeOpt."' class='active'>Tous</span>";
else echo "<span data-stre='*' data-frm='*' >Tous</span>"; else echo "<span data-stre='*' data-year='".$anneeOpt."' >Tous</span>";
/* On récupère la liste des SEMESTRES en accord avec l'ANNEE sélectionnée */ /* On récupère la liste des SEMESTRES en accord avec l'ANNEE sélectionnée */
foreach($answer->yearList as $annee){ if( $anneeOpt == $annee['annee'] ){ foreach($answer->yearList as $annee){ if( $anneeOpt == $annee['annee'] ){
foreach($annee['semestres'] as $semestre){ if( in_array($semestre['id'], $semestresListe) ){ foreach($annee['semestres'] as $semestre){ if( in_array($semestre['id'], $semestresListe) ){
if( $semestre['id'] == $semestreOpt ) // si c'est le semestre séléctionné if( $semestre['id'] == $semestreOpt ) // si c'est le semestre séléctionné
echo "<span data-year='".$annee['annee']."' data-frm='".$semestre['id_formation']."' data-stre='".$semestre['id']."' class='active'>".$semestre['formation']." - ".$semestre['nom'].'</span>'; echo "<span data-year='".$annee['annee']."' data-stre='".$semestre['id']."' class='active'>".$semestre['formation']." - ".$semestre['nom'].'</span>';
else // sinon on affiche normalement else // sinon on affiche normalement
echo "<span data-year='".$annee['annee']."' data-frm='".$semestre['id_formation']."' data-stre='".$semestre['id']."'>".$semestre['formation']." - ".$semestre['nom'].'</span>'; echo "<span data-year='".$annee['annee']."' data-stre='".$semestre['id']."'>".$semestre['formation']." - ".$semestre['nom'].'</span>';
}} }}
}} }}
echo "</div><br><br>"; echo "</div><br><br>";
@ -635,8 +635,8 @@ if( permission('master') || permission('admin') ){
} }
echo "<div data-year='".$anneeOpt."' data-stre='".$semestreOpt."' class='confirm active center'>Générer le fichier</div>"; echo "<div data-year='".$anneeOpt."' data-stre='".$semestreOpt."' class='confirm active center' id='generate_export'>Générer le fichier</div>";
echo "<div data-year='".$anneeOpt."' data-stre='".$semestreOpt."' class='confirm active center'>Télécharger le fichier</div>"; echo "<div data-year='".$anneeOpt."' data-stre='".$semestreOpt."' class='confirm active center' id='export_grouplist'>Télécharger le fichier</div>";
echo "</div>"; echo "</div>";

Binary file not shown.