From 7228ae443f33a322a8f11158d0057990478d2a42 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Thu, 19 Nov 2015 23:32:54 +0100 Subject: [PATCH] =?UTF-8?q?Prise=20en=20compte=20de=20la=20formation=20pou?= =?UTF-8?q?r=20un=20=C3=A9tudiant=20afin=20de=20ne=20pas=20confondre=20les?= =?UTF-8?q?=20semestres=20(de=20formations=20diff=C3=A9rentes)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 1 + manager/career.php | 13 +++++----- manager/database.php | 25 ++++++++++---------- manager/groups.php | 34 +++++++++++++------------- manager/modules.php | 2 +- manager/repo/semestre.php | 50 +++++++++++++++++++++++++++++---------- manager/security.php | 2 +- manager/user.php | 7 ++++-- page/career.php | 9 +++---- page/groups.php | 16 +++++++------ src/expand@grayscale.svg | 50 +++++++++++++++++++++++++++++++++++++++ 11 files changed, 147 insertions(+), 62 deletions(-) create mode 100644 src/expand@grayscale.svg diff --git a/css/global.css b/css/global.css index 59dcf79..1e30c91 100755 --- a/css/global.css +++ b/css/global.css @@ -218,6 +218,7 @@ select{ /* select grisé => selection modules existants par exemple */ tr.grayscale select{ border-color: #bdbdbd; + background-image: url(../src/expand@grayscale.svg); color: #4e4e4e; } diff --git a/manager/career.php b/manager/career.php index e1771c5..fccb380 100755 --- a/manager/career.php +++ b/manager/career.php @@ -38,15 +38,16 @@ require_once __ROOT__.'/manager/database.php'; /***************************/ case 'getNotesEtudiant': if( permission('student') ){ - $areSetParam = isset($request->etudiant) && isset($request->semestre) && isset($request->annee); // les arguments existent - $typeOkParam = $areSetParam && is_string($request->etudiant) && is_string($request->semestre) && is_string($request->annee); // si c'est des strings + $areSetParam = isset($request->etudiant) && isset($request->semestre) && isset($request->annee) && isset($request->formation); // les arguments existent + $typeOkParam = $areSetParam && is_string($request->etudiant) && is_string($request->semestre) && is_string($request->annee) && is_numeric($request->formation); // si c'est des strings $nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && is_numeric($request->semestre) && is_numeric($request->annee); // des bon types - $etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->etudiant); // nom bon format - $semestreCheck = $etudiantCheck && preg_match('/^[1-4]{1}$/i', $request->semestre); // semestre (semestre) bon format - $anneeCheck = $semestreCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format + $etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->etudiant); // nom bon format + $formationCheck = $etudiantCheck && preg_match('/^[1-4]{1}$/i', $request->formation); // formation (formation) bon format + $semestreCheck = $formationCheck && preg_match('/^[1-4]{1}$/i', $request->semestre); // semestre (semestre) bon format + $anneeCheck = $semestreCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons - $UEs = DataBase::getInstance()->getNotesEtudiant($request->etudiant, $request->semestre, $request->annee); + $UEs = DataBase::getInstance()->getNotesEtudiant($request->etudiant, $request->formation, $request->semestre, $request->annee); if( is_array($UEs) ){ // si on a bien un tableau $answer->UEs = $UEs; // on renvoie dans answer->note diff --git a/manager/database.php b/manager/database.php index d07958d..d4b2531 100755 --- a/manager/database.php +++ b/manager/database.php @@ -194,10 +194,10 @@ class DataBase{ /******************************************************/ /*** retourne la liste des utilisateurs d'un groupe ***/ /******************************************************/ - public function listeEtudiantsGroupe($groupe, $semestre, $annee){ + public function listeEtudiantsGroupe($formation, $groupe, $semestre, $annee){ // on vérifie que le groupe et le semestre existent if( !($groupeUID=groupRepo::UID($groupe)) ) return 'unknown_group'; else $groupeUID = (int) $groupeUID; - if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($formation, $semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; // on retourne la liste des utilisateurs et on supprime les doublons à indices numériques return DataBase::delNumeric( groupRepo::membres($groupeUID, $semestreUID) ); @@ -207,9 +207,9 @@ class DataBase{ /********************************************************************/ /*** retourne la liste des utilisateurs des groupes d'un semestre ***/ /********************************************************************/ - public function listeEtudiantsTousGroupesSemestre($semestre, $annee){ + public function listeEtudiantsTousGroupesSemestre($formation, $semestre, $annee){ // on vérifie que le semestre existe - if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($formation, $semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; // on cherche tout les groupes du même semestre de la même année @@ -280,10 +280,11 @@ class DataBase{ /***********************************************/ /*** retourne le nom du groupe d'un étudiant ***/ /***********************************************/ - public function getGroupeEtudiant($etudiant, $semestre, $annee){ + public function getGroupeEtudiant($etudiant, $formation, $semestre, $annee){ // on vérifie que le semestre et l'utilisateur existent - if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; - if( !($etudiantUID=userRepo::UID($etudiant)) ) return 'unknown_user'; + if( !($semestreUID=semestreRepo::UID($formation, $semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; + if( !($etudiantUID=userRepo::UID($etudiant, $semestreUID)) ) return 'unknown_user'; + // on retourne le nom if( $groupeObj = groupRepo::forStudent($etudiantUID, $semestreUID) ) @@ -333,10 +334,10 @@ class DataBase{ /**************************************************/ /*** retourne les modules d'un étudiant par UEs ***/ /**************************************************/ - public function getModulesByUEByEtudiant($etudiant, $semestre, $annee){ + public function getModulesByUEByEtudiant($etudiant, $formation, $semestre, $annee){ // on vérifie que le semestre et l'utilisateur existent - if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; - if( !($etudiantUID=userRepo::UID($etudiant)) ) return 'unknown_user'; + if( !($semestreUID=semestreRepo::UID($formation, $semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; + if( !($etudiantUID=userRepo::UID($etudiant, $semestreUID)) ) return 'unknown_user'; // on récupère la liste des UE $UEList = ueRepo::forStudent($etudiantUID, $semestreUID); @@ -492,9 +493,9 @@ class DataBase{ /****************************************/ /*** retourne les notes d'un étudiant ***/ /****************************************/ - public function getNotesEtudiant($etudiant, $semestre, $annee){ + public function getNotesEtudiant($etudiant, $formation, $semestre, $annee){ // on vérifie que le semestre exist et que l'étudiant est inscrit à ce semestre - if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($formation, $semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; if( !($etudiantUID=userRepo::UID($etudiant, $semestreUID)) ) return 'unknown_user'; diff --git a/manager/groups.php b/manager/groups.php index 69dd510..3ce130b 100755 --- a/manager/groups.php +++ b/manager/groups.php @@ -78,17 +78,18 @@ require_once __ROOT__.'/manager/database.php'; /*****************************************/ /* retourne les utilisateurs d'un groupe */ /*****************************************/ - case 'userlist': if( connected() ){ + case 'userlist': if( permission('student') ){ - $areSetParam = isset($request->groupe) && isset($request->semestre) && isset($request->annee); // les arguments existent - $typeOkParam = $areSetParam && is_string($request->groupe) && is_numeric($request->semestre) && is_numeric($request->annee); // si c'est des strings + $areSetParam = isset($request->groupe) && isset($request->semestre) && isset($request->annee) && isset($request->formation); // les arguments existent + $typeOkParam = $areSetParam && is_string($request->groupe) && is_numeric($request->semestre) && is_numeric($request->annee) && is_numeric($request->formation); // si c'est des strings $nEmptyParam = $typeOkParam && strlen($request->groupe) > 0; // d'au moins 1 caractère - $groupeCheck = $nEmptyParam && preg_match('/^[a-z0-9 -]{1,10}$/i', $request->groupe); // groupe (nom) bon format - $semestreCheck = $groupeCheck && preg_match('/^[1-4]{1}$/i', $request->semestre); // semestre (semestre) bon format - $anneeCheck = $semestreCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format + $groupeCheck = $nEmptyParam && preg_match('/^[a-z0-9 -]{1,10}$/i', $request->groupe); // groupe (nom) bon format + $formationCheck = $groupeCheck && preg_match('/^[1-4]{1}$/i', $request->formation); // formation (formation) bon format + $semestreCheck = $formationCheck && preg_match('/^[1-4]{1}$/i', $request->semestre); // semestre (semestre) bon format + $anneeCheck = $semestreCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons - $userlist = DataBase::getInstance()->listeEtudiantsGroupe($request->groupe, $request->semestre, $request->annee); + $userlist = DataBase::getInstance()->listeEtudiantsGroupe($request->formation, $request->groupe, $request->semestre, $request->annee); if( is_array($userlist) ){ // si on a récupéré la liste des utilisateurs $answer->userlist = $userlist; @@ -106,7 +107,7 @@ require_once __ROOT__.'/manager/database.php'; /**************************************/ /* retourne le semestre d'un étudiant */ /**************************************/ - case 'getSemestre': if( connected() ){ + case 'getSemestre': if( permission('student') ){ $areSetParam = isset($request->etudiant); // les arguments existent $typeOkParam = $areSetParam && is_string($request->etudiant); // si c'est des strings @@ -134,16 +135,17 @@ require_once __ROOT__.'/manager/database.php'; /*******************************************************************/ /* retourne les utilisateurs de tous les groupes du semestre donné */ /*******************************************************************/ - case 'grouplist': if( connected() ){ + case 'grouplist': if( permission('student') ){ - $areSetParam = isset($request->semestre) && isset($request->annee); // les arguments existent - $typeOkParam = $areSetParam && is_numeric($request->semestre) && is_numeric($request->annee); // si c'est des strings - $semestreCheck = $typeOkParam && preg_match('/^[1-4]{1}$/i', $request->semestre); // semestre (semestre) bon format - $anneeCheck = $semestreCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format + $areSetParam = isset($request->semestre) && isset($request->annee) && isset($request->formation); // les arguments existent + $typeOkParam = $areSetParam && is_numeric($request->semestre) && is_numeric($request->annee) && is_numeric($request->formation); // si c'est des strings + $formationCheck = $typeOkParam && preg_match('/^[1-4]{1}$/i', $request->formation); // formation (formation) bon format + $semestreCheck = $formationCheck && preg_match('/^[1-4]{1}$/i', $request->semestre); // semestre (semestre) bon format + $anneeCheck = $semestreCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format if( $anneeCheck ){ - $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesSemestre($request->semestre, $request->annee); + $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesSemestre($request->formation, $request->semestre, $request->annee); if( is_array($grouplist) ){ // si on a récupéré la liste des utilisateurs $answer->grouplist = $grouplist; @@ -228,7 +230,7 @@ require_once __ROOT__.'/manager/database.php'; /**********************************************/ /* retourne le nom du groupe d'un utilisateur */ /**********************************************/ - case 'get': if( connected() ){ + case 'get': if( permission('student') ){ $areSetParam = isset($request->etudiant) && isset($request->semestre) && isset($request->annee); // les arguments existent $typeOkParam = $areSetParam && is_string($request->etudiant) && is_numeric($request->semestre) && is_numeric($request->annee); // si c'est des strings @@ -238,7 +240,7 @@ require_once __ROOT__.'/manager/database.php'; $anneeCheck = $semestreCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format - $groupe = DataBase::getInstance()->getGroupeEtudiant($request->etudiant, $request->semestre, $request->annee); + $groupe = DataBase::getInstance()->getGroupeEtudiant($request->etudiant, $_SESSION['formation'], $request->semestre, $request->annee); if( $groupe != 'error' ){ // si on a récupéré quelque chose $answer->groupe = $groupe; diff --git a/manager/modules.php b/manager/modules.php index 0fdf249..f720394 100755 --- a/manager/modules.php +++ b/manager/modules.php @@ -53,7 +53,7 @@ require_once __ROOT__.'/manager/database.php'; if( $anneeCheck ){ // si tout les paramètres sont bons - $UEList = DataBase::getInstance()->getModulesByUEByEtudiant($request->etudiant, $request->semestre, $request->annee); + $UEList = DataBase::getInstance()->getModulesByUEByEtudiant($request->etudiant, $_SESSION['formation'], $request->semestre, $request->annee); // STRUCTURE // tableau d'UES contenant un tableau de MODULES diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 71fdb46..9e2e297 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -8,10 +8,30 @@ /* |____/|_____|_| |_|_____|____/ |_| |_| \_\_____| |_| \_\_____|_| \___/ */ /* */ /**************************************************************************************/ +/* +* CONTENU DU REPO +* +* [1] UID(formation, rang, annee) +* retourne l'UID d'un semestre pour un rang et une année donnée +* +* +* +* +* +* +* +* +* +* +* +* +* +*/ class semestreRepo extends DBAccess{ - /* VERIFIE L'EXISTENCE D'UN GROUPE DANS LA BDD + /* VERIFIE L'EXISTENCE D'UN SEMESTRE DANS LA BDD * + * @formation l'UID de la formation en question * @rang le rang du semestre dans le parcours (1<=>S1, 2<=>S2, ..) * @annee l'année du début du parcours * @@ -20,17 +40,19 @@ class semestreRepo extends DBAccess{ * @return FALSE FAUX si aucun semestre avec ce rang et annee n'est pas présent dans la BDD * */ - public static function UID($rang, $annee){ - // si les 2 ne sont pas des nombres (même dans une string) - if( !is_numeric($rang) || !is_numeric($annee) ) - return false; // aucun résultat possible - + public static function UID($formation, $rang, $annee){ /*** on cherche un semestre avec ce rang et cette année (qui est forcément unique) ***/ - $getSemestreUID = DataBase::getPDO()->prepare("SELECT id_semestre as id FROM semestre WHERE rang = :rang AND annee = :annee"); + $getSemestreUID = DataBase::getPDO()->prepare("SELECT s.id_semestre as id + FROM semestre as s, formation as f + WHERE s.id_formation = f.id_formation + AND s.id_formation = :formation + AND s.rang = :rang + AND s.annee = :annee"); $getSemestreUID->execute(array( - ':rang' => $rang, - ':annee' => $annee + ':formation' => $formation, + ':rang' => $rang, + ':annee' => $annee )); // on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID du semestre @@ -92,10 +114,12 @@ class semestreRepo extends DBAccess{ /* retourne le semestre courant d'un étudiant * - * @etudiant l'identifiant (UID) de l'étudiant à ajouter au groupe + * @etudiant l'identifiant (UID) de l'étudiant en question + * @semestre_pair VRAI si le semestre courant est pair + * @annee l'année en cours * * @return etudie FALSE si l'étudiant n'est dans aucun semestre en cours - * @return semestreUID l'UID du semestre courant + * @return semestre retourne les données relatives au semestre * */ public static function forStudent($etudiant, $semestre_pair, $annee){ @@ -117,8 +141,8 @@ class semestreRepo extends DBAccess{ ':semestre_pair' => $semestre_pair )); - // on retourne l'UID du semestre courant - return $getSemestreUID->fetch()['id']; + // on retourne les infos du semestre courant + return $getSemestreUID->fetch(); } diff --git a/manager/security.php b/manager/security.php index c1da7ee..949fe44 100755 --- a/manager/security.php +++ b/manager/security.php @@ -52,7 +52,7 @@ ini_set('display_errors',1); ini_set('display_startup_errors',1); error_reporting(-1); - } + }debug(); // function distinctArray($inArray){ // $outArray = array(); diff --git a/manager/user.php b/manager/user.php index e472417..75b0ef1 100755 --- a/manager/user.php +++ b/manager/user.php @@ -178,13 +178,16 @@ require_once __ROOT__.'/manager/database.php'; // on défini le semestre par défaut à NULL + $_SESSION['id_formation'] = null; $_SESSION['semestre'] = null; /* on récupère le semestre courant si c'est un étudiant */ if( permission('student') ){ $semestre = DataBase::studentSemestre( $_SESSION['identifiant'], $_SESSION['semestre_pair'], $_SESSION['annee']); - if( is_numeric($semestre) )// si on a bien récupéré le semestre - $_SESSION['semestre'] = ''.$semestre.''; + if( is_array($semestre) ){ // si on a bien récupéré le semestre + $_SESSION['formation'] = (String) $semestre['id_formation']; + $_SESSION['semestre'] = (String) $semestre['id']; + } } return 'success'; diff --git a/page/career.php b/page/career.php index ac9b264..b3a474a 100755 --- a/page/career.php +++ b/page/career.php @@ -72,10 +72,11 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un $request = new stdClass(); $answer = new stdClass(); - $request->level_1 = 'getNotesEtudiant'; - $request->etudiant = $_SESSION['identifiant']; - $request->semestre = $_SESSION['semestre']; - $request->annee = $_SESSION['annee']; + $request->level_1 = 'getNotesEtudiant'; + $request->etudiant = $_SESSION['identifiant']; + $request->formation = $_SESSION['formation']; + $request->semestre = $_SESSION['semestre']; + $request->annee = $_SESSION['annee']; career_switch_level_1($request, $answer); diff --git a/page/groups.php b/page/groups.php index 627caf9..fb05879 100755 --- a/page/groups.php +++ b/page/groups.php @@ -58,9 +58,10 @@ if( permission('student') ){ // si connecté && utilisateur $request = new stdClass(); $answer = new stdClass(); - $request->level_1 = 'grouplist'; - $request->semestre = $_SESSION['semestre']; - $request->annee = $_SESSION['annee']; + $request->level_1 = 'grouplist'; + $request->formation = $_SESSION['formation']; + $request->semestre = $_SESSION['semestre']; + $request->annee = $_SESSION['annee']; groups_switch_level_1($request, $answer); @@ -144,10 +145,11 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un $monGroupe = $answer->groupe; $request = new stdClass(); $answer = new stdClass(); - $request->level_1 = 'userlist'; - $request->groupe = $monGroupe; - $request->semestre = $_SESSION['semestre']; - $request->annee = $_SESSION['annee']; + $request->level_1 = 'userlist'; + $request->formation = $_SESSION['formation']; + $request->groupe = $monGroupe; + $request->semestre = $_SESSION['semestre']; + $request->annee = $_SESSION['annee']; groups_switch_level_1($request, $answer); if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe diff --git a/src/expand@grayscale.svg b/src/expand@grayscale.svg new file mode 100644 index 0000000..c81537c --- /dev/null +++ b/src/expand@grayscale.svg @@ -0,0 +1,50 @@ + +image/svg+xml \ No newline at end of file