Prise en compte de la formation pour un étudiant afin de ne pas confondre les semestres (de formations différentes)

This commit is contained in:
xdrm-brackets 2015-11-19 23:32:54 +01:00
parent 38c09f2376
commit 7228ae443f
11 changed files with 147 additions and 62 deletions

View File

@ -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;
}

View File

@ -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
$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

View File

@ -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';

View File

@ -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
$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
$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;

View File

@ -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

View File

@ -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<int> l'UID de la formation en question
* @rang<int> le rang du semestre dans le parcours (1<=>S1, 2<=>S2, ..)
* @annee<int> l'année du début du parcours
*
@ -20,15 +40,17 @@ class semestreRepo extends DBAccess{
* @return FALSE<Boolean> 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(
':formation' => $formation,
':rang' => $rang,
':annee' => $annee
));
@ -92,10 +114,12 @@ class semestreRepo extends DBAccess{
/* retourne le semestre courant d'un étudiant
*
* @etudiant<String> l'identifiant (UID) de l'étudiant à ajouter au groupe
* @etudiant<String> l'identifiant (UID) de l'étudiant en question
* @semestre_pair<Boolean> VRAI si le semestre courant est pair
* @annee<String> l'année en cours
*
* @return etudie<Boolean> FALSE si l'étudiant n'est dans aucun semestre en cours
* @return semestreUID<int> l'UID du semestre courant
* @return semestre<Array> 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();
}

View File

@ -52,7 +52,7 @@
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
}
}debug();
// function distinctArray($inArray){
// $outArray = array();

View File

@ -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';

View File

@ -74,6 +74,7 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un
$request->level_1 = 'getNotesEtudiant';
$request->etudiant = $_SESSION['identifiant'];
$request->formation = $_SESSION['formation'];
$request->semestre = $_SESSION['semestre'];
$request->annee = $_SESSION['annee'];

View File

@ -59,6 +59,7 @@ if( permission('student') ){ // si connecté && utilisateur
$answer = new stdClass();
$request->level_1 = 'grouplist';
$request->formation = $_SESSION['formation'];
$request->semestre = $_SESSION['semestre'];
$request->annee = $_SESSION['annee'];
@ -145,6 +146,7 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un
$request = new stdClass(); $answer = new stdClass();
$request->level_1 = 'userlist';
$request->formation = $_SESSION['formation'];
$request->groupe = $monGroupe;
$request->semestre = $_SESSION['semestre'];
$request->annee = $_SESSION['annee'];

50
src/expand@grayscale.svg Normal file
View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
enable-background="new 0 0 24 24"
id="Layer_1"
version="1.0"
viewBox="0 0 19.4375 11.125"
xml:space="preserve"
inkscape:version="0.48.4 r9939"
width="100%"
height="100%"
sodipodi:docname="expand.svg"><metadata
id="metadata3039"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs3037" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="789"
inkscape:window-height="480"
id="namedview3035"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="9.8333333"
inkscape:cx="-10.010064"
inkscape:cy="6.90625"
inkscape:window-x="534"
inkscape:window-y="198"
inkscape:window-maximized="0"
inkscape:current-layer="Layer_1" /><polyline
points="21,8.5 12,17.5 3,8.5 "
stroke-miterlimit="10"
id="polyline3033"
style="fill:none;stroke:#bdbdbd;stroke-width:2;stroke-miterlimit:10;stroke-opacity:1"
transform="translate(-2.28125,-7.78125)" /></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB