From c89c8ddfa4d7b873d056903557066c0731fccabb Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Thu, 26 Nov 2015 18:17:05 +0100 Subject: [PATCH] =?UTF-8?q?Affichage=20de=20tous=20les=20contr=C3=B4les=20?= =?UTF-8?q?pour=20"admin"=20/=20"master"=20reste=20=C3=A0=20emp=C3=AAcher?= =?UTF-8?q?=20la=20saisie=20par=20master?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/career.php | 73 +++++++- manager/database.php | 36 +++- manager/repo/controle.php | 30 ++++ manager/repo/note.php | 2 +- page/career.php | 349 +++++++++++++++++++++++++++++++++++++- 5 files changed, 478 insertions(+), 12 deletions(-) diff --git a/manager/career.php b/manager/career.php index 9463370..7582e11 100755 --- a/manager/career.php +++ b/manager/career.php @@ -63,9 +63,9 @@ require_once __ROOT__.'/manager/database.php'; - /***************************/ - /* liste des conetroles */ - /***************************/ + /***************************************/ + /* liste des contrôles d'un enseignant */ + /***************************************/ case 'getControlesEnseignant': if( permission('teacher') ){ $areSetParam = isset($request->enseignant) && isset($request->annee); // les arguments existent @@ -90,9 +90,37 @@ require_once __ROOT__.'/manager/database.php'; break; - /************************************/ - /* liste des notes pour un contrôle */ - /************************************/ + + + /**********************************/ + /* liste des contrôles de l'année */ + /**********************************/ + case 'getControlesForYear': if( permission('master') || permission('admin') ){ + + $areSetParam = isset($request->annee); // les arguments existent + $typeOkParam = $areSetParam && is_string($request->annee); // si c'est des strings + $nEmptyParam = $typeOkParam && is_numeric($request->annee); // des bon types + $anneeCheck = $nEmptyParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format + + if( $anneeCheck ){ // si tout les paramètres sont bons + $semestreList = DataBase::getInstance()->getControlesForYear($request->annee); + + if( is_array($semestreList) ){ // si on a bien un tableau + $answer->semestres = $semestreList; // on renvoie dans answer->semestreList + $answer->request = 'success'; // et on renvoie success + }else // sinon si c'est pas un tableau + $answer->request = $semestreList; // on retourne l'erreur + }else + $answer->request = 'param_error'; + + }else + $answer->request = 'permission_error'; + break; + + + /****************************************************/ + /* liste des notes pour un contrôle d'un enseignant */ + /****************************************************/ case 'getNotesEnseignant': if( permission('teacher') ){ $areSetParam = isset($request->enseignant) && isset($request->controle); // les arguments existent @@ -123,6 +151,39 @@ require_once __ROOT__.'/manager/database.php'; break; + + + /************************************/ + /* liste des notes pour un contrôle */ + /************************************/ + case 'getNotesForYear': if( permission('master') || permission('admin') ){ + + $areSetParam = isset($request->controle); // les arguments existent + $nEmptyParam = $areSetParam && is_numeric($request->controle); // des bon types + + // paramètre optionnel + $optionalGroupe = isset($request->groupe) && is_string($request->groupe) && strlen($request->groupe) > 1 && preg_match('/^[a-z0-9 -]{1,10}$/i', $request->groupe); + + // définition (ou pas) du paramètre optionnel + if( $optionalGroupe ) $groupe = $request->groupe; + else $groupe = null; + + if( $nEmptyParam ){ // si tout les paramètres sont bons + $controle = DataBase::getInstance()->getNotesForYear($_SESSION['annee'], $request->controle, $groupe); + + if( is_array($controle) ){ // si on a bien un tableau + $answer->controle = $controle; // on renvoie dans answer->controle + $answer->request = 'success'; // et on renvoie success + }else // sinon si c'est pas un tableau + $answer->request = $controle; // on retourne l'erreur + }else + $answer->request = 'param_error'; + + }else + $answer->request = 'permission_error'; + break; + + /**********************************************/ /* informations relatives au dossier étudiant */ /**********************************************/ diff --git a/manager/database.php b/manager/database.php index 19aaacd..b2177d2 100755 --- a/manager/database.php +++ b/manager/database.php @@ -761,7 +761,41 @@ class DataBase{ $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'] = controleRepo::forTeacher($enseignantUID, $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['id'], $semestreList[$iter_s]['id']); foreach($semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'] as $iter_ct=>$c){ - $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['grouplist'] = noteRepo::forTeacher($semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['id']); + $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['grouplist'] = noteRepo::forControle($semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['id']); + + $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['moyenne'] = noteRepo::moyenneForControle($semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['id']); + + } + + } + + } + + } + + return $semestreList; + } + + + + /***************************************/ + /*** retourne les notes d'une année ***/ + /***************************************/ + public function getControlesForYear($annee){ + // on récupère les semestres de cette année + $semestreList = semestreRepo::forYear($annee); + + foreach($semestreList as $iter_s=>$a){ + $semestreList[$iter_s]['UElist'] = ueRepo::forYear($semestreList[$iter_s]['id']); + + foreach($semestreList[$iter_s]['UElist'] as $iter_u=>$b){ + $semestreList[$iter_s]['UElist'][$iter_u]['modules'] = moduleRepo::forYear($semestreList[$iter_s]['UElist'][$iter_u]['id'], $semestreList[$iter_s]['id']); + + foreach($semestreList[$iter_s]['UElist'][$iter_u]['modules'] as $iter_m=>$c){ + $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'] = controleRepo::forYear($semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['id'], $semestreList[$iter_s]['id']); + + foreach($semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'] as $iter_ct=>$c){ + $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['grouplist'] = noteRepo::forControle($semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['id']); $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['moyenne'] = noteRepo::moyenneForControle($semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['id']); diff --git a/manager/repo/controle.php b/manager/repo/controle.php index 99a5d9a..e00eb3f 100755 --- a/manager/repo/controle.php +++ b/manager/repo/controle.php @@ -134,6 +134,36 @@ class controleRepo extends DBAccess{ + /* RENVOIE LES CONTROLES POUR UN MODULE ET SEMESTRE PARTICULIER + * + * @module l'UID du module concerné + * @semestre l'UID du semestre concerné + * + * @return controles retourne les controles pour un module d'un semestre + * + */ + public static function forYear($module, $semestre){ + $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.nom, ctrl.id_mcc_module, ctrl.libelle, ctrl.base, ctrl.coefficient, ctrl.date_publication + FROM module as m, mcc_module as mcc_m, mcc_ue, controle as ctrl + WHERE mcc_m.id_mcc_module = ctrl.id_mcc_module + AND mcc_m.id_module = m.id_module + AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue + + AND mcc_m.id_module = :module + AND mcc_ue.id_semestre = :semestre + + GROUP BY ctrl.id_controle"); + $getControleList->execute(array( ':module' => $module, ':semestre' => $semestre )); + + return DataBase::delNumeric( $getControleList->fetchAll() ); + } + + + + + + + /* retourne l'UID d'un contrôle s'il existe sinon créé tout ce qui a besoin et on retourne l'UID diff --git a/manager/repo/note.php b/manager/repo/note.php index fe02d29..d870baa 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -104,7 +104,7 @@ class noteRepo extends DBAccess{ * [2] retourne les notes des étudiants du groupe spécifié pour ce contrôle * */ - public static function forTeacher($controle, $groupe=null){ + public static function forControle($controle, $groupe=null){ /* [1] Statistiques des groupes ============================================================*/ if( !is_int($groupe) ){ diff --git a/page/career.php b/page/career.php index a0f620a..5c4da65 100755 --- a/page/career.php +++ b/page/career.php @@ -163,6 +163,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e $request = new stdClass(); $answer = new stdClass(); + $request->level_1 = 'getControlesEnseignant'; $request->enseignant = $_SESSION['identifiant']; $request->annee = $_SESSION['annee']; @@ -171,7 +172,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e if( $answer->request == 'success' ){ // si on a bien récupéré les UE/notes //////////////////////////////////////////////////////////////////////////////// - echo "
"; + echo "
"; /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ @@ -318,7 +319,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e //////////////////////////////////////////////////////////////////////////////// echo '
'; }else - echo "
Aucun contrôle trouvé
"; + echo "
Aucun contrôle trouvé
"; @@ -339,7 +340,7 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif career_switch_level_1($request, $answer); if( $answer->request == 'success' ){ - echo "
"; + echo "
"; // bouton retour @@ -451,7 +452,347 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif echo ''; }else - echo "
Aucun contrôle trouvé
"; + echo "
Aucun contrôle trouvé
"; + + + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/********************************************/ +/*** LES CONTRÔLES (version admin/master) ***/ +/********************************************/ +/* +* +* [1] Tous les contrôles +* [2] Un contrôle particulier( avec ou sans groupe particulier ) +* +*/ + + +/* [1] Tous les contrôles +==================================================================*/ +if( (permission('master') || permission('admin')) && $controleOpt == null ){ // si c'est un enseignant et qu'aucun contrôle n'est spécifié + + + $request = new stdClass(); $answer = new stdClass(); + + + $request->level_1 = 'getControlesForYear'; + $request->annee = $_SESSION['annee']; + + career_switch_level_1($request, $answer); + + if( $answer->request == 'success' ){ // si on a bien récupéré les UE/notes + //////////////////////////////////////////////////////////////////////////////// + echo "
"; + + + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDUE = array(); + + // Vérification de la formation si elle est définie + $verificationUIDFormations = array(); + foreach($answer->semestres as $semestre) // on récupère la liste des UID de FORMATIONS + if( !in_array($semestre['id_formation'], $verificationUIDFormations) ) + array_push($verificationUIDFormations, $semestre['id_formation']); + + // si la formation optionnelle n'est pas définie ou incohérente, on le fait (première valeur trouvée) + if( $formationOpt == null || !in_array($formationOpt, $verificationUIDFormations) ) + $formationOpt = $verificationUIDFormations[0]; + + + /**************************/ + /* AFFINAGE PAR FORMATION */ + /**************************/ + echo ""; + foreach($answer->semestres as $semestre){ if( !in_array($semestre['id_formation'], $ListeUIDFormations) ){ + + + if( $semestre['id_formation'] == $formationOpt ) // si c'est la formation séléctionnée + echo "'; + else // sinon on affiche normalement + echo "'; + + // on ajoute la formation à la liste pour ne pas la répéter + array_push($ListeUIDFormations, $semestre['id_formation']); + + }} + echo "
".$semestre['formation'].'".$semestre['formation'].'
"; + + + + + /*************************/ + /* AFFINAGE PAR SEMESTRE */ + /*************************/ + echo ""; + if( $semestreOpt == null ) echo ""; + else echo ""; + + /* On récupère la liste des SEMESTRES en accord avec la FORMATION sélectionnée */ + foreach($answer->semestres as $semestre){ if( $semestre['id_formation'] == $formationOpt && !in_array($semestre['id'], $ListeUIDSemestres) ){ + + if( $semestre['id'] == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + + + // on ajoute le semestre à la liste pour ne pas le répéter + array_push($ListeUIDSemestres, $semestre['id']); + + }} + echo "
TousTous".$semestre['nom'].'".$semestre['nom'].'
"; + + + + + /*******************/ + /* AFFINAGE PAR UE */ + /*******************/ + echo ""; + if( $ueOpt == null ) echo ""; + else echo ""; + + /* On récupère la liste des UEs en accord avec la FORMATION et le SEMESTRE sélectionnés */ + foreach($answer->semestres as $semestre){ if( $semestre['id_formation'] == $formationOpt && in_array($semestre['id'], $ListeUIDSemestres) ){ + foreach($semestre['UElist'] as $UE){ if( !in_array($UE['id'], $ListeUIDUE) ){ + if( $UE['id'] == $ueOpt ) // si c'est l'UE séléctionnée + echo "'; + else // sinon on affiche normalement + echo "'; + + // on ajoute l'UE à la liste pour ne pas le répéter + array_push($ListeUIDUE, $UE['id']); + }} + }} + echo "
TousTous".$UE['nom'].'".$UE['nom'].'
"; + + + + if( count($answer->semestres) > 0 ){ // si au moins un UE + + foreach($answer->semestres as $semestre){ + + if( ($semestreOpt == null || $semestre['id'] == $semestreOpt) && ($formationOpt == null || $semestre['id_formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage + + foreach($semestre['UElist'] as $UE){ // pour chaque UE + + if( $ueOpt == null || $UE['id'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL + + if( count($UE['modules']) > 0 ){ // s'il y a au moins un module + + foreach($UE['modules'] as $module){ // pour chaque module + echo ""; + echo ''; + + if( count($module['controles']) > 0 ){ // s'il y a au moins un contrôle pour ce module + + foreach($module['controles'] as $controle){ // pour chaque contrôle + + echo ''; + echo ""; + + echo ""; + echo ""; + + if( $controle['moyenne'] == null ) // si il y a au moins une note pour ce contrôle + echo ''; + else + echo ''; + // echo ''; + + echo ''; + echo ''; + + // echo "'; + } + + }else // si aucun contrôle pour ce module + echo ""; + + echo ''; + } + + } + echo '
'.$semestre['nom_formation'].' - '.$semestre['nom'].'
".$controle['libelle']."".$module['nom']." - ".$module['libelle']."".$UE['nom']." - ".$UE['libelle']."Pas notéMoyenne de '.number_format($controle['moyenne'], 2).' / '.$controle['base'].''.number_format($controle['moyenne'], 2).'Coefficient '.number_format($controle['coefficient'], 2).'
"; + // echo '
Aucun contrôle trouvé
'; + + } + } + + } + + } + + } + //////////////////////////////////////////////////////////////////////////////// + echo '
'; + }else + echo "
Aucun contrôle trouvé
"; + + + +} + +/* [2] Un contrôle particulier( avec ou sans groupe particulier ) +==================================================================*/ +elseif( permission('master') || permission('admin') ){ // si enseignant et qu'un contrôle est spécifié + + + $request = new stdClass(); $answer = new stdClass(); + + $request->level_1 = 'getNotesForYear'; + $request->controle = $controleOpt; + if( $groupeOpt != null ) $request->groupe = $groupeOpt; // on définit le groupe s'il est spécifié + + career_switch_level_1($request, $answer); + + if( $answer->request == 'success' ){ + echo "
"; + + + // bouton retour + // echo "
Retour
"; + // echo "
"; + + + echo ""; + echo "'; + + echo ''; + echo ""; + + echo ""; + + + /* [1] Affichage par groupes + ====================================================================================*/ + if( $groupeOpt == null ){ + + if( $answer->controle['moyenne'] == null ) // si il y a au moins une note pour ce contrôle + echo ''; + else + echo ''; + + /* [2] Affichage par élèves + ====================================================================================*/ + }else{ + + if( count($answer->controle['userlist']) == 0 ) // si il y a au moins une note pour ce contrôle + echo ''; + else + echo ''; + + } + + + echo ''; + + echo ''; + + echo ""; + + + /* [1] Affichage par groupes + ====================================================================================*/ + if( $groupeOpt == null ){ + + foreach($answer->controle['grouplist'] as $groupe){ // on affiche la liste des groupes avec leurs stats + echo ""; + + echo ""; + + if( isset($groupe['nb_notes']) ){ // si ce groupe a des notes + + if( $groupe['nb_notes'] == 1 ) echo ""; + else echo ""; + + echo ""; + echo ""; + + }else{ // si le groupe n'a aucune note + + echo ""; + echo ""; + echo ""; + + } + + echo ""; + } + + /* [2] Affichage par élèves + ====================================================================================*/ + }else{ + + foreach($answer->controle['userlist'] as $user){ // on affiche la liste des élèves avec leurs notes + echo ""; + + echo ""; + echo ""; + + if( $user['note'] != null ) // si on a une note + echo ""; + else // si noté + echo ""; + + echo ""; + + echo ""; + } + + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + + } + + echo '
".$answer->controle['nom'].' - '.$answer->controle['libelle'].'
".$answer->controle['libelle']."".$answer->controle['module']." - ".$answer->controle['modulelib']."Pas notéMoyenne de '.number_format($answer->controle['moyenne'], 2).' / '.$answer->controle['base'].'Pas notéMoyenne de '.number_format($answer->controle['moyenne'], 2).' / '.$answer->controle['base'].'Coefficient '.number_format($answer->controle['coefficient'], 2).'
".$groupe['nom']."".$groupe['nb_notes']." note".$groupe['nb_notes']." notesAllant de ".number_format($groupe['min'], 2)." à ".number_format($groupe['max'], 2)."Moyenne de ".number_format($groupe['moyenne'], 2)." / ".$answer->controle['base']."Pas de note
".$user['identifiant']."".$user['groupe']."".number_format($user['note'], 2)." / ".$answer->controle['base']."Pas noté"; + if( $user['note'] != null ) // s'il a déjà une note, on la met par défaut + echo ""; + else // sinon on laisse le champ vide + echo ""; + + echo "
enregistrer
"; + echo "
tout enregistrer
'; + + }else + echo "
Aucun contrôle trouvé
";