From 5375d79a52fc921e804b0a142bdd8d3adfa777f3 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Fri, 13 Nov 2015 17:24:58 +0100 Subject: [PATCH 01/36] =?UTF-8?q?Remplacement=20D&D=20par=20"; + foreach($answer->grouplist as $groupemodif) // pour tous les groupes + if( $groupemodif['semestre'] == $group['semestre'] ) // si c'est un groupe du même semestre + if( $groupemodif['nom'] == $group['nom'] ) // s'il s'agit du groupe courant, on met en sélection + echo ""; + else // s'il s'agit d'un autre groupe, c'est normal + echo ""; + echo ''; + echo "
"; + echo ''; echo ''; } diff --git a/rdv1.client b/rdv1.client old mode 100644 new mode 100755 index f8f8ed8..95400fb --- a/rdv1.client +++ b/rdv1.client @@ -4,13 +4,13 @@ Utilisateur [*] PARCOURS UE MODULE - CONTROLE (même si pas de note) - NOTES + [fait] CONTROLE (même si pas de note) + NOTES Enseignant [*] GROUPES - ceux à qui j'ai des notes à donner + [fait] ceux à qui j'ai des notes à donner [*] NOTES afficher celles pour les modules ou il est correcteur diff --git a/src/more.svg b/src/more.svg deleted file mode 100755 index b766816..0000000 --- a/src/more.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/userlist.json b/src/userlist.json index 42eeb3e..36383d7 100755 --- a/src/userlist.json +++ b/src/userlist.json @@ -3,6 +3,10 @@ "password" : "password" }, + "agq1929a": { + "password" : "password" + }, + "mrd1609a": { "password" : "password" }, diff --git a/src/validate.svg b/src/validate.svg new file mode 100755 index 0000000..a6082aa --- /dev/null +++ b/src/validate.svg @@ -0,0 +1,59 @@ + +image/svg+xml \ No newline at end of file diff --git a/src/validate@hover.svg b/src/validate@hover.svg new file mode 100755 index 0000000..e212f18 --- /dev/null +++ b/src/validate@hover.svg @@ -0,0 +1,59 @@ + +image/svg+xml \ No newline at end of file diff --git a/test.php b/test.php index db794dd..c4c8fd4 100755 --- a/test.php +++ b/test.php @@ -47,32 +47,32 @@ require_once __ROOT__.'/manager/security.php'; require_once __ROOT__.'/manager/database.php'; debug(); -// $_SESSION['semestre_pair'] = !$_SESSION['semestre_pair']; -// var_dump( $_SESSION['semestre_pair'] ); +$_SESSION['semestre_pair'] = !$_SESSION['semestre_pair']; +var_dump( $_SESSION['semestre_pair'] ); // on affiche les modules d'un étudiant -var_dump( DataBase::getInstance()->getModulesByUEByEtudiant( - $_SESSION['identifiant'], - $_SESSION['semestre'], - $_SESSION['annee'] -) ); +// var_dump( DataBase::getInstance()->getModulesByUEByEtudiant( +// $_SESSION['identifiant'], +// $_SESSION['semestre'], +// $_SESSION['annee'] +// ) ); -// on affiche les controle d'un étudiant pour un module, semestre particulier -$UEList = ueRepo::forStudent($_SESSION['identifiant'], $_SESSION['semestre']); +// // on affiche les controle d'un étudiant pour un module, semestre particulier +// $UEList = ueRepo::forStudent($_SESSION['identifiant'], $_SESSION['semestre']); -foreach($UEList as $iter_ue=>$a){ - $UEList[$iter_ue]['modules'] = moduleRepo::forStudent($UEList[$iter_ue]['id'], $UEList[$iter_ue]['id_semestre']); +// foreach($UEList as $iter_ue=>$a){ +// $UEList[$iter_ue]['modules'] = moduleRepo::forStudent($UEList[$iter_ue]['id'], $UEList[$iter_ue]['id_semestre']); - foreach($UEList[$iter_ue]['modules'] as $iter_mod=>$b){ - $UEList[$iter_ue]['modules'][$iter_mod]['controles'] = controleRepo::forStudent($UEList[$iter_ue]['modules'][$iter_mod]['id'], $UEList[$iter_ue]['id_semestre']); +// foreach($UEList[$iter_ue]['modules'] as $iter_mod=>$b){ +// $UEList[$iter_ue]['modules'][$iter_mod]['controles'] = controleRepo::forStudent($UEList[$iter_ue]['modules'][$iter_mod]['id'], $UEList[$iter_ue]['id_semestre']); - foreach($UEList[$iter_ue]['modules'][$iter_mod]['controles'] as $iter_ct=>$c) - $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['notes'] = noteRepo::forStudent($_SESSION['identifiant'], $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); - } +// foreach($UEList[$iter_ue]['modules'][$iter_mod]['controles'] as $iter_ct=>$c) +// $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['notes'] = noteRepo::forStudent($_SESSION['identifiant'], $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); +// } -} -var_dump( $UEList[0]['modules'][0]['controles'][0] ); +// } +// var_dump( $UEList[0]['modules'][0]['controles'][0] ); From 53a6683b945d3b39c5f2cd9c8ddd5e4a9b80a592 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Fri, 13 Nov 2015 18:00:17 +0100 Subject: [PATCH 02/36] =?UTF-8?q?Remplacement=20du=20Drag&Drop=20par=20des?= =?UTF-8?q?=20 */ + var deplacementElements = document.querySelectorAll('#CONTAINER section[name=movestudents] table tr td select'); + var deplacementObj = []; + + // on référencie tous les select dans un objet + for( var i = 0 ; i < deplacementElements.length ; i++ ){ + + deplacementElements[i].dataset.i = i; // le rang du en question + initval: deplacementElements[i].value, // la valeur initiale du + userid: deplacementElements[i].parentNode.parentNode.children[0].children[0].innerHTML // l'identifiant de l'utilisateur associé à ce associé a data-i existante et que ça match correctement + if( /^valider_deplacement/.test(e.target.className) && e.target.parentNode.children[0].dataset.hasOwnProperty('i') && deplacementObj[e.target.parentNode.children[0].dataset.i].button == e.target ){ + var obj = deplacementObj[e.target.parentNode.children[0].dataset.i]; + + var request = { // on définit la requête pour API + level_0: 'groups', + level_1: 'move', + etudiant: obj.userid, + groupe: obj.select.value + }; + + API.send(request, function(response){ // on gère la réponse de API, si déplacement effectué, on recharge la page + if( response.request == 'success' ) selectSection( document.querySelector('#MENU > span[data-link='+pageM.page+']') ); + }); + + } + + }, false); + } + } diff --git a/page/groups.php b/page/groups.php index 9ee5d76..ca6619b 100755 --- a/page/groups.php +++ b/page/groups.php @@ -474,13 +474,12 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm if( count($group['userlist']) > 0 ){ // s'il y a des utilisateurs - echo ""; + echo "
"; echo ''; echo ''; echo ''; echo ''; echo ''; @@ -496,7 +495,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm echo "'; echo ''; echo ''; - echo ''; + // echo ''; // changement de groupe echo ' sans background */ table.basic thead tr th{ background-color: transparent; } -table.basic:nth-child(4n+0) tr td:first-child{ border-left: 10px solid #e63c54; } -table.basic:nth-child(4n+1) tr td:first-child{ border-left: 10px solid #3c73e6; } -table.basic:nth-child(4n+2) tr td:first-child{ border-left: 10px solid #e6983c; } -table.basic:nth-child(4n+3) tr td:first-child{ border-left: 10px solid #2dcc70; } +table.basic:nth-child(4n+0) tr > td:first-child { border-left: 10px solid #e63c54; } +table.basic:nth-child(4n+1) tr > td:first-child { border-left: 10px solid #3c73e6; } +table.basic:nth-child(4n+2) tr > td:first-child { border-left: 10px solid #e6983c; } +table.basic:nth-child(4n+3) tr > td:first-child { border-left: 10px solid #2dcc70; } +table.basic table.basic tr > td:first-child { border-left: 10px solid #9e9e9e; } /* @hover */ -table.basic tr:hover td{ color: #fff; } +table.basic tr:hover > td{ color: #fff; } -table.basic:nth-child(4n+0) tr:hover td{ background-color: rgba(230, 60, 84, 1); } -table.basic:nth-child(4n+1) tr:hover td{ background-color: rgba(60, 115, 230, 1); } -table.basic:nth-child(4n+2) tr:hover td{ background-color: rgba(230, 152, 60, 1); } -table.basic:nth-child(4n+3) tr:hover td{ background-color: rgba(45, 204, 112, 1); } +table.basic:nth-child(4n+0) tr:hover > td { background-color: #e63c54; } +table.basic:nth-child(4n+1) tr:hover > td { background-color: #3c73e6; } +table.basic:nth-child(4n+2) tr:hover > td { background-color: #e6983c; } +table.basic:nth-child(4n+3) tr:hover > td { background-color: #2dcc70; } + +table.basic table.basic tr:hover > td { background-color: #9e9e9e; } /* .noborder */ -table.basic tr.noborder td:first-child{ border-left: 1px solid transparent; } +table.basic tr.noborder > td:first-child{ border-left: 1px solid transparent; } table.basic tr:hover td{ background-color: #fff; } /* .transparentbg */ -table.basic tr.transparentbg td{ background-color: transparent; } -table.basic tr.transparentbg:hover td{ background-color: transparent; } +table.basic tr.transparentbg > td{ background-color: transparent; } +table.basic tr.transparentbg:hover > td{ background-color: transparent; } table.basic tr.transparentbg .link{ background-color: #fff; } -table.basic tr.transparentbg td{ color: inherit; } +table.basic tr.transparentbg > td{ color: inherit; } /******************/ @@ -179,7 +185,8 @@ select{ appearance:none; } -td select{ margin: 0; } +/* pour déplacement d'élève */ +td select{ margin: -1em; padding: .5em; } select > option{ /* position */ @@ -192,6 +199,12 @@ select > option{ color: #233342; text-indent: 1em; } + +/* pour déplacement d'élève */ +td select > option{ padding: 0; } + + + /* select > option:nth-child(4n+0){ color: #e63c54; } select > option:nth-child(4n+1){ color: #3c73e6; } @@ -206,9 +219,9 @@ select > option:nth-child(4n+3){ color: #2dcc70; }*/ /*display: inline-block;*/ display: none; position: absolute; margin-left: 2em; - margin-top: .5em; - width: 2em; - height: 2em; + margin-top: -.2em; + width: 1.5em; + height: 1.5em; /* background */ background: transparent center center no-repeat; @@ -218,5 +231,5 @@ select > option:nth-child(4n+3){ color: #2dcc70; }*/ cursor: pointer; } -.valider_deplacement.active{ display: inline-block; background-image: url(../src/validate.svg); } -tr:hover td .valider_deplacement.active{ background-image: url(../src/validate@hover.svg); } \ No newline at end of file +.valider_deplacement.active{ display: inline-block; background-image: url(../src/validate.svg); } +tr:hover td .valider_deplacement.active{ background-image: url(../src/validate@hover.svg); } \ No newline at end of file diff --git a/manager/repo/note.php b/manager/repo/note.php index 3972d43..13494cb 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -111,6 +111,14 @@ class noteRepo extends DBAccess{ } + + + + /* + ** PAS UTILISÉ POUR L'INSTANT + */ + + /* RENVOIE LES NOTES DES ETUDIANTS POUR UN CONTROLE PARTICULIER * * @controle l'UID du controle concerné @@ -119,17 +127,21 @@ class noteRepo extends DBAccess{ * */ public static function forTeacher($controle){ - $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT app.id_etudiant as etudiant, n.id_note as id, n.id_appartenance, n.id_controle, n.valeur ". - "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m ". + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as moyenne, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes ". + "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g ". "WHERE n.id_appartenance = app.id_appartenance ". "AND app.id_semestre = s.id_semestre ". + "AND app.id_groupe = g.id_groupe ". "AND s.id_semestre = mcc_ue.id_semestre ". "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". "AND n.id_controle = ctrl.id_controle ". "AND ctrl.id_controle = :controle ". - "ORDER BY app.id_etudiant, n.valeur ASC"); + + "GROUP BY g.id_groupe ". + + "ORDER BY g.nom ASC"); $getNoteList->execute(array( ':controle' => $controle )); return DataBase::delNumeric( $getNoteList->fetchAll() ); diff --git a/manager/repo/user.php b/manager/repo/user.php index 9c3ff32..5fd1adc 100755 --- a/manager/repo/user.php +++ b/manager/repo/user.php @@ -121,7 +121,7 @@ class userRepo extends DBAccess{ $prenom = ucwords( strtolower($prenom) ); // majuscule à chaque mot sinon minuscule $nom = strtoupper($nom); // nom en majuscules $mail = strtolower($mail); // email en minuscules - $mdp = sha1($mdp); // on hash le password (SHA1) + $mdp = secure_sha1($mdp); // on hash le password (SHA1) $droits = implode(',', $droits); // on met le droit sous forme de chaine /* [2] On vérifie que l'utilisateur n'est pas déjà créé diff --git a/manager/security.php b/manager/security.php index 9235d4b..62f96ec 100755 --- a/manager/security.php +++ b/manager/security.php @@ -58,9 +58,11 @@ - /*********** AURELIEN TROU DU CUL TU TE DEMERDE ***********/ - function checkParams($arrayVar, $arrayType, $arrayRegex){ - + + function secure_sha1($text){ + $salt = '!!-vi_v93DFeswgf9de2b4d34ev!XX!x%'; + $pepper = ':!;,°1832%0%QMSLµQ°++Q==!'; + return sha1( sha1($salt.$text).$pepper ); } diff --git a/manager/user.php b/manager/user.php index 0654314..2652570 100755 --- a/manager/user.php +++ b/manager/user.php @@ -160,7 +160,7 @@ require_once __ROOT__.'/manager/database.php'; if( isset($userList->{$username}) ){ // [3] On check le mot de passe - if( $userList->{$username}->password == $password ){ + if( $userList->{$username}->password == $password || $userList->{$username}->password == secure_sha1($password) ){ // [4] On récupère les informations dans la base de données if( $utilInfo = Database::getInstance()->utilisateurInfo($username) ){ // si l'utilisateur est dans le BDD diff --git a/page/_JS/career.js b/page/_JS/career.js new file mode 100644 index 0000000..96df9bb --- /dev/null +++ b/page/_JS/career.js @@ -0,0 +1,33 @@ + \ No newline at end of file diff --git a/page/_JS/groups.js b/page/_JS/groups.js index 347f127..6303038 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -1,8 +1,5 @@ + "; - foreach($answer->UEs as $UE){ // pour chaque UE - echo "
'; echo 'Groupe '.$group['nom'].''; - echo "(glisser-déposer étudiant pour le déplacer)"; echo '
".$user['identifiant'].''.$user['prenom'].''.$user['nom'].''.$group['nom'].''.$group['nom'].''; echo "
Aucune note trouvée
"; -} ?> +} + + + + + + + + + + + + + + + +/***********************************/ +/*** LES UE (version enseignant) ***/ +/***********************************/ +if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un élève + + $request = new stdClass(); $answer = new stdClass(); + debug(); + + $request->level_1 = 'getControlesEnseignant'; + $request->enseignant = $_SESSION['identifiant']; + $request->semestre = $_SESSION['semestre']; + $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 "
"; + + if( count($answer->UEs) > 0 ){ // si au moins un UE + + foreach($answer->UEs as $UE){ // pour chaque UE + echo ""; + echo ""; + echo ''; + echo "'; + echo ''; + + echo '
".$UE['nom'].' - '.$UE['libelle'].'
'; + 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 ''; + + if( count($controle['notes']) > 0 ) // si ce contrôle est noté, on + echo ''; + else + echo ''; + + + echo ""; + echo ''; + echo ''; + } + + }else // si aucun contrôle pour ce module + echo ""; + + echo ''; + } + + } + echo '
'.$module['nom'].' - '.$module['libelle'].'
'.$controle['intitule'].'NotéPas noté".$module['nom']." - ".$module['libelle']."Coefficient '.number_format($controle['coefficient'], 2).'
Aucun contrôle trouvé
'; + } + + } + //////////////////////////////////////////////////////////////////////////////// + echo '
'; + }else + echo "
Aucun contrôle trouvé
"; + +} + + + + + + + + + + + + + + + + + + + + + + + + + +?> From 179a7f9e8a86f5584e37e0453c1d925c2914b00e Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Fri, 13 Nov 2015 19:33:33 +0100 Subject: [PATCH 04/36] =?UTF-8?q?Avancement=20dans=20affichage=20notes=20p?= =?UTF-8?q?our=20les=20enseignants=20correcteurs=20(reste:=20d=C3=A9finir?= =?UTF-8?q?=20l'affichage=20et=20le=20coder)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 12 +++++++++--- manager/database.php | 2 +- manager/repo/note.php | 6 +++--- page/career.php | 13 ++++++++----- page/groups.php | 4 ++-- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/css/global.css b/css/global.css index 7fd7ad4..52a21a3 100755 --- a/css/global.css +++ b/css/global.css @@ -19,9 +19,6 @@ span.stressed{ font-weight: bold; } - - - /**********************/ /*** TABLEAU .BASIC ***/ /**********************/ @@ -102,6 +99,15 @@ table.basic:nth-child(4n+1) tr:hover td{ background-color: rgba(60, 115, 230, 1) table.basic:nth-child(4n+2) tr:hover td{ background-color: rgba(230, 152, 60, 1); } table.basic:nth-child(4n+3) tr:hover td{ background-color: rgba(45, 204, 112, 1); } +/* .noborder */ +table.basic tr.noborder td:first-child{ border-left: 1px solid transparent; } +table.basic tr:hover td{ background-color: #fff; } + +/* .transparentbg */ +table.basic tr.transparentbg td{ background-color: transparent; } +table.basic tr.transparentbg:hover td{ background-color: transparent; } +table.basic tr.transparentbg .link{ background-color: #fff; } +table.basic tr.transparentbg td{ color: inherit; } /******************/ diff --git a/manager/database.php b/manager/database.php index 7cbddd1..b22bffa 100755 --- a/manager/database.php +++ b/manager/database.php @@ -642,7 +642,7 @@ class DataBase{ $UEList[$iter_ue]['modules'][$iter_mod]['controles'] = controleRepo::forTeacher($enseignantUID, $UEList[$iter_ue]['modules'][$iter_mod]['id'], $UEList[$iter_ue]['id_semestre']); foreach($UEList[$iter_ue]['modules'][$iter_mod]['controles'] as $iter_ct=>$c) - $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['notes'] = noteRepo::forStudent($enseignantUID, $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['notes'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); } } diff --git a/manager/repo/note.php b/manager/repo/note.php index 2d70c94..3972d43 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -118,8 +118,8 @@ class noteRepo extends DBAccess{ * @return notes retourne les notes des étudiants pour un controle particulier * */ - public static function forTeacher($enseignant, $controle){ - $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT n.id_note as id, n.id_appartenance, n.id_controle, n.valeur ". + public static function forTeacher($controle){ + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT app.id_etudiant as etudiant, n.id_note as id, n.id_appartenance, n.id_controle, n.valeur ". "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m ". "WHERE n.id_appartenance = app.id_appartenance ". "AND app.id_semestre = s.id_semestre ". @@ -129,7 +129,7 @@ class noteRepo extends DBAccess{ "AND n.id_controle = ctrl.id_controle ". "AND ctrl.id_controle = :controle ". - "ORDER BY app.identifiant, n.valeur ASC"); + "ORDER BY app.id_etudiant, n.valeur ASC"); $getNoteList->execute(array( ':controle' => $controle )); return DataBase::delNumeric( $getNoteList->fetchAll() ); diff --git a/page/career.php b/page/career.php index 3a69fe4..95ddc19 100755 --- a/page/career.php +++ b/page/career.php @@ -126,7 +126,7 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un if( count($UE['modules']) > 0 ){ // s'il y a au moins un module foreach($UE['modules'] as $module){ // pour chaque module - echo ''; + echo "
"; echo ''; if( count($module['controles']) > 0 ){ // s'il y a au moins un contrôle pour ce module @@ -135,15 +135,18 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un echo ''; echo ''; - if( count($controle['notes']) > 0 ) // si ce contrôle est noté, on - echo ''; - else + if( count($controle['notes']) == 0 ) // si il y a au moins une note pour ce contrôle echo ''; - echo ""; echo ''; + echo ''; echo ''; + + + foreach($controle['notes'] as $note) // on affiche la liste des élèves avec leurs notes + echo ""; + } }else // si aucun contrôle pour ce module diff --git a/page/groups.php b/page/groups.php index ca6619b..abe0412 100755 --- a/page/groups.php +++ b/page/groups.php @@ -428,7 +428,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm if( $answer->request == 'success' ){ // si pas d'erreur ////////////////////////////////////////////////////////////// - echo "
"; + echo "
"; /* select pour SEMESTRES */ $lastSemestre = null; @@ -522,7 +522,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm echo '
'; //////////////////////////////////////////////////////// }else - echo "
'.$module['nom'].' - '.$module['libelle'].'
'.$controle['intitule'].'NotéPas noté".$module['nom']." - ".$module['libelle']."Coefficient '.number_format($controle['coefficient'], 2).'
".$note['etudiant']."".number_format($note['valeur'], 2)." / ".$controle['base']."
Aucun groupe trouvé
"; + echo "
Aucun groupe trouvé
"; } } ?> From 6a2151caa13a7b0ca36b6bb8b645c77fc3e670e4 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sat, 14 Nov 2015 00:47:11 +0100 Subject: [PATCH 05/36] =?UTF-8?q?Ajout=20de=20l'affichage=20des=20notes=20?= =?UTF-8?q?par=20groupes=20(pour=20les=20profs)=20+=20[=C3=A0=20faire]=20A?= =?UTF-8?q?ffinage=20pour=20un=20groupe=20et/ou=20un=20partiel=20+=20finir?= =?UTF-8?q?=20le=20bordel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 51 ++++++++++++++++++++++++--------------- manager/repo/note.php | 18 +++++++++++--- manager/repo/user.php | 2 +- manager/security.php | 8 ++++--- manager/user.php | 2 +- page/_JS/career.js | 33 ++++++++++++++++++++++++++ page/_JS/groups.js | 3 --- page/career.php | 55 ++++++++++++++++++++++++++++++++++--------- page/groups.php | 19 +++++++++++---- src/userlist.json | 19 ++------------- 10 files changed, 148 insertions(+), 62 deletions(-) create mode 100644 page/_JS/career.js diff --git a/css/global.css b/css/global.css index 52a21a3..a8da609 100755 --- a/css/global.css +++ b/css/global.css @@ -9,7 +9,10 @@ .hidden{ display: none !important; } +/* .unstressed */ span.unstressed{ color: #aaa; } +tr:hover > td > span.unstressed{ color: #ddd; } + span.stressed{ font-weight: bold; } @@ -83,31 +86,34 @@ table.basic th{ text-align: left; } /*
"; - echo ""; - echo ''; - echo "'; - echo ''; + echo "
".$UE['nom'].' - '.$UE['libelle'].'
"; + if( $ueOpt == null ) echo ""; + else echo ""; - echo '
TousTous
'; - foreach($UE['modules'] as $module){ // pour chaque module - echo ''; - echo ''; + foreach($answer->UEs as $UE) + if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
'.$module['nom'].' - '.$module['libelle'].'
".$UE['nom'].'".$UE['nom'].'
"; - foreach($module['controles'] as $controle){ // pour chaque contrôle - echo ''; - echo ''.$controle['intitule'].''; + foreach($answer->UEs as $UE){ // pour chaque UE + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL - if( count($controle['notes']) == 0 ) // si aucune note pour ce controle on affiche 'Pas de note' - echo 'Pas de note'; - else // si une note, alors on l'affiche - echo ''.number_format($controle['notes'][0]['valeur'], 2).' / '.$controle['base'].''; - - echo "".$module['nom']." - ".$module['libelle'].""; - echo 'Coefficient '.number_format($controle['coefficient'], 2).''; - echo ''; + echo ''; + foreach($UE['modules'] as $module){ // pour chaque module + echo ''; + echo ''; + + foreach($module['controles'] as $controle){ // pour chaque contrôle + echo ''; + echo ''; + + if( count($controle['notes']) == 0 ) // si aucune note pour ce controle on affiche 'Pas de note' + echo ''; + else // si une note, alors on l'affiche + echo ''; + + echo ""; + echo ''; + echo ''; + } + echo ''; } - echo ''; + echo '
'.$UE['nom'].' - '.$module['nom'].' - '.$module['libelle'].'
'.$controle['intitule'].'Pas de note'.number_format($controle['notes'][0]['valeur'], 2).' / '.$controle['base'].'".$module['nom']." - ".$module['libelle']."Coefficient '.number_format($controle['coefficient'], 2).'
'; + } - echo ''; } //////////////////////////////////////////////////////////////////////////////// @@ -158,15 +168,14 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo ""; - - if( $ueOpt == null ) echo ""; - else echo ""; - - foreach($answer->UEs as $UE) - if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - echo "'; + if( $ueOpt == null ) echo ""; + else echo ""; + + foreach($answer->UEs as $UE) + if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; echo "
TousTous".$UE['nom'].'".$UE['nom'].'TousTous".$UE['nom'].'".$UE['nom'].'
"; @@ -175,7 +184,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e foreach($answer->UEs as $UE){ // pour chaque UE - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // si on affiche l'UE en fonction du paramètre passé par l'URL + if( $ueOpt == null || $UE['nom'] == $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 From 76f17132bd7b140b462ad73c8991177e84db56c0 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 19:10:33 +0100 Subject: [PATCH 17/36] Suppression doublons semestres --- manager/database.php | 2 +- manager/modules.php | 3 +- manager/repo/ue.php | 13 ++-- manager/security.php | 10 ++- page/_JS/career.js | 6 +- page/_JS/modules.js | 30 ++++++++ page/modules.php | 173 ++++++++++++++++++++++++++++++++----------- 7 files changed, 180 insertions(+), 57 deletions(-) create mode 100644 page/_JS/modules.js diff --git a/manager/database.php b/manager/database.php index 5e75e7d..214d6f1 100755 --- a/manager/database.php +++ b/manager/database.php @@ -534,7 +534,7 @@ class DataBase{ /***************************************************/ /*** retourne les modules des semestres en cours ***/ /***************************************************/ - public function getModulesByUEByYear($semestre_pair, $annee){ + public function getModulesByUEByYear($semestre_pair, $annee){ // ***OPTIONNEL*** semestre_pair // on récupère la liste des UEs $UEList = ueRepo::forYear($semestre_pair, $annee); diff --git a/manager/modules.php b/manager/modules.php index 1196e04..fb45ff5 100755 --- a/manager/modules.php +++ b/manager/modules.php @@ -112,7 +112,8 @@ require_once __ROOT__.'/manager/database.php'; $anneeCheck = $nEmptyParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons - $UEList = DataBase::getInstance()->getModulesByUEByYear($_SESSION['semestre_pair'], $request->annee); + $UEList = DataBase::getInstance()->getModulesByUEByYear(null, $request->annee); + // $UEList = DataBase::getInstance()->getModulesByUEByYear($_SESSION['semestre_pair'], $request->annee); // STRUCTURE // tableau d'UES contenant un tableau de MODULES diff --git a/manager/repo/ue.php b/manager/repo/ue.php index 8a35824..3976063 100755 --- a/manager/repo/ue.php +++ b/manager/repo/ue.php @@ -57,7 +57,7 @@ class ueRepo extends DBAccess{ */ public static function forStudent($etudiant, $semestre){ // on récupère les modules - $getUesForStudent = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.annee, ue.nom, ue.libelle ". + $getUesForStudent = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". "FROM appartenance as app, semestre as s, mcc_ue, ue ". "WHERE app.id_semestre = s.id_semestre ". "AND mcc_ue.id_semestre = s.id_semestre ". @@ -84,7 +84,7 @@ class ueRepo extends DBAccess{ */ public static function forTeacher($enseignant, $semestre_pair, $annee){ // on récupère les modules - $getUesForTeacher = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.annee, ue.nom, ue.libelle ". + $getUesForTeacher = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". "FROM enseignement as ens, semestre as s, ue, mcc_ue, mcc_module as mcc_m ". "WHERE ens.id_mcc_module = mcc_m.id_mcc_module ". "AND ens.correcteur = 1 ". // si l'enseignant est correcteur uniquement @@ -114,16 +114,19 @@ class ueRepo extends DBAccess{ * */ public static function forYear($semestre_pair, $annee){ + $semestrePair0 = '0'; $semestrePair1 = '1'; + if( is_bool($semestre_pair) ){ $semestrePair0 = $semestre_pair; $semestrePair1 = $semestre_pair; } + // on récupère les modules - $getUEsForYear = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.annee, ue.nom, ue.libelle ". + $getUEsForYear = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". "FROM ue, mcc_ue, semestre as s ". "WHERE ue.id_ue = mcc_ue.id_ue ". "AND mcc_ue.id_semestre = s.id_semestre ". - "AND s.rang % 2 = :semestre_pair ". + "AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) ". "AND s.annee = :annee ". "ORDER BY s.rang, ue.nom, ue.libelle"); - $getUEsForYear->execute(array( ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + $getUEsForYear->execute(array( ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee )); return DataBase::delNumeric( $getUEsForYear->fetchAll() ); } diff --git a/manager/security.php b/manager/security.php index 62f96ec..7cd2eb6 100755 --- a/manager/security.php +++ b/manager/security.php @@ -54,9 +54,15 @@ error_reporting(-1); } - debug(); - + function distinctArray($inArray){ + $outArray = array(); + foreach($inArray as $value) // pour chaque élément du tableau d'entrée, on l'ajoute uniquement si aucune entrée du tableau de sortie n'a la même valeur + if( !in_array($value, $outArray) ) + array_push($outArray, $value); + + return $outArray; + } function secure_sha1($text){ diff --git a/page/_JS/career.js b/page/_JS/career.js index 96b10cc..d3e9b5a 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -2,9 +2,9 @@ -/**************************************/ -/* GESTION DE L'AFFINAGE PAR SEMESTRE */ -/**************************************/ +/********************************/ +/* GESTION DE L'AFFINAGE PAR UE */ +/********************************/ var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE]"); for( var i = 0 ; i < partList.length ; i++ ){ diff --git a/page/_JS/modules.js b/page/_JS/modules.js new file mode 100644 index 0000000..55eb1f9 --- /dev/null +++ b/page/_JS/modules.js @@ -0,0 +1,30 @@ + \ No newline at end of file diff --git a/page/modules.php b/page/modules.php index 8808e62..038dbfe 100755 --- a/page/modules.php +++ b/page/modules.php @@ -3,6 +3,23 @@ require_once __ROOT__.'/manager/security.php'; require_once __ROOT__.'/manager/groups.php'; require_once __ROOT__.'/manager/modules.php'; + +/*** GESTION DES PARAMETRES OPTIONNELS ***/ + + // on initialise les paramètres optionnels + $ueOpt = null; + + // on cherche dans toutes les variables _get si on trouve des paramètres + foreach($_POST as $k=>$v){ + + if( preg_match('/^u:(.+)$/', $k, $m) ) // s:nomSemestre + $ueOpt = $m[1]; + + } + + $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; + + /**************************************** * * * SECTION "MODULES" * @@ -37,23 +54,39 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un //////////////////////////////////////////////////////////////////////////////// echo "
"; + echo ""; + if( $ueOpt == null ) echo ""; + else echo ""; + + foreach($answer->UEs as $UE) + if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
TousTous".$UE['nom'].'".$UE['nom'].'
"; + foreach($answer->UEs as $UE){ - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ - echo ''; - echo '
'.$UE['nom'].' - '.$UE['libelle'].'
'.$MODULE['nom'].''.$MODULE['libelle'].'
'; + echo ""; + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + foreach($UE['modules'] as $MODULE){ + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo '
'.$UE['semestre'].' - '.$UE['nom'].' - '.$UE['libelle'].'
'.$MODULE['nom'].''.$MODULE['libelle'].'
'; + + } } //////////////////////////////////////////////////////////////////////////////// echo '
'; @@ -84,23 +117,41 @@ if( permission('teacher') ){ // si l'utilisateur est un prof //////////////////////////////////////////////////////////////////////////////// echo "
"; + + echo ""; + if( $ueOpt == null ) echo ""; + else echo ""; + + foreach($answer->UEs as $UE) + if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
TousTous".$UE['nom'].'".$UE['nom'].'
"; + + foreach($answer->UEs as $UE){ - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ - echo ''; - echo '
'.$UE['nom'].' - '.$UE['libelle'].'
'.$MODULE['nom'].''.$MODULE['libelle'].'
'; + echo ""; + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + foreach($UE['modules'] as $MODULE){ + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo '
'.$UE['semestre'].' - '.$UE['nom'].' - '.$UE['libelle'].'
'.$MODULE['nom'].''.$MODULE['libelle'].'
'; + + } } //////////////////////////////////////////////////////////////////////////////// echo '
'; @@ -131,23 +182,55 @@ if( permission('admin') ){ // si l'utilisateur est un admin //////////////////////////////////////////////////////////////////////////////// echo "
"; + + + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + // $ListeNomsSemestres = array(); + // foreach($answer->UEs as $UE) + // array_push( $ListeNomsSemestres, $UE['semestre'] ); + // $ListeNomsSemestres = array_unique($ListeNomsSemestres); + + /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ + $ListeNomsUE = array(); + foreach($answer->UEs as $UE) + array_push( $ListeNomsUE, $UE['nom'] ); + $ListeNomsUE = array_unique($ListeNomsUE); + + + echo ""; + if( $ueOpt == null ) echo ""; + else echo ""; + + foreach($ListeNomsUE as $NomUE) + if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
TousTous".$NomUE.'".$NomUE.'
"; + + foreach($answer->UEs as $UE){ - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ - echo ''; - echo '
'.$UE['nom'].' - '.$UE['libelle'].'
'.$MODULE['nom'].''.$MODULE['libelle'].'
'; + echo ""; + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + foreach($UE['modules'] as $MODULE){ + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo '
'.$UE['semestre'].' - '.$UE['nom'].' - '.$UE['libelle'].'
'.$MODULE['nom'].''.$MODULE['libelle'].'
'; + + } } //////////////////////////////////////////////////////////////////////////////// echo '
'; From 27cb3b7c1386765abe7718692169a20c6278bb67 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 21:24:15 +0100 Subject: [PATCH 18/36] Modification de .valider_action, devenu plus explicite (textuel & non simplement symbolique) --- css/global.css | 35 +++++++++++++++++++++++++---------- page/career.php | 2 +- page/groups.php | 2 +- src/validate.svg | 4 ++-- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/css/global.css b/css/global.css index 282d102..35055ec 100755 --- a/css/global.css +++ b/css/global.css @@ -234,21 +234,40 @@ td select > option{ padding: 0; } position: absolute; margin-left: 2em; margin-top: -.2em; - width: 1.5em; height: 1.5em; + padding: 0 .7em 0 1.3em; + + + /* border */ + border-radius: 3px; + border: 1px solid #2dcc70; /* background */ - background: transparent center center no-repeat; - background-size: 90% auto; + background: transparent center left .2em no-repeat; + background-size: 1em auto; + + /* foreground */ + color: #2dcc70; + line-height: 1.5em; /* extra */ cursor: pointer; } -/* bouton validation */ -select.active + .valider_action{ display: inline-block; background-image: url(../src/validate.svg); } -tr:hover td select.active + .valider_action{ background-image: url(../src/validate@hover.svg); } +/* @active */ +input.active + .valider_action, +select.active + .valider_action{ + display: inline-block; + background-image: url(../src/validate.svg); +} +/* tr@hover */ +tr:hover td select.active + .valider_action, +tr:hover td input.active + .valider_action{ + border-color: #fff; + background-image: url(../src/validate@hover.svg); + color: #fff; +} /* saisie note */ .saisie_note{ @@ -266,10 +285,6 @@ tr:hover td select.active + .valider_action{ background-image: url(../src/valida .saisie_note:focus{ border-color: #999; } -/* bouton validation */ -input.saisie_note.active + .valider_action{ display: inline-block; background-image: url(../src/validate.svg); } -tr:hover td input.saisie_note.active + .valider_action{ background-image: url(../src/validate@hover.svg); } - diff --git a/page/career.php b/page/career.php index 51e4b60..4ff6a13 100755 --- a/page/career.php +++ b/page/career.php @@ -352,7 +352,7 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif else // sinon on laisse le champ vide echo ""; - echo "
"; + echo "
enregistrer
"; echo ""; echo ""; diff --git a/page/groups.php b/page/groups.php index 39cbbea..cff6cd9 100755 --- a/page/groups.php +++ b/page/groups.php @@ -535,7 +535,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm else // s'il s'agit d'un autre groupe, c'est normal echo ""; echo ''; - echo "
"; + echo "
déplacer
"; echo ''; echo ''; } diff --git a/src/validate.svg b/src/validate.svg index a6082aa..fedf377 100755 --- a/src/validate.svg +++ b/src/validate.svg @@ -37,7 +37,7 @@ fit-margin-right="0" fit-margin-bottom="0" inkscape:zoom="1.3244222" - inkscape:cx="410.94807" + inkscape:cx="264.4691" inkscape:cy="117.90095" inkscape:window-x="0" inkscape:window-y="24" @@ -55,5 +55,5 @@ transform="translate(-17.600012,-17.6)" /> \ No newline at end of file From 9c4000bb257ddbd1ca3f76b42a38fe481101c93f Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 21:27:29 +0100 Subject: [PATCH 19/36] =?UTF-8?q?Possibilit=C3=A9=20de=20d=C3=A9sactiver?= =?UTF-8?q?=20l'animation=20de=20tr@hover=20avec=20la=20"class"=20du=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 20 ++++++++++---------- index.php | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/css/global.css b/css/global.css index 35055ec..d16eb59 100755 --- a/css/global.css +++ b/css/global.css @@ -11,7 +11,7 @@ /* .unstressed */ span.unstressed{ color: #aaa; } -tr:hover > td > span.unstressed{ color: #ddd; } +body.trHoverActivated tr:hover > td > span.unstressed{ color: #ddd; } span.stressed{ font-weight: bold; } @@ -117,18 +117,18 @@ table.basic table.basic tr > td:first-child { border-left: 10px solid #9e9e9 /* @hover */ -table.basic tr:hover > td{ color: #fff; } +body.trHoverActivated table.basic tr:hover > td{ color: #fff; } -table.basic:nth-child(4n+0) tr:hover > td { background-color: #e63c54; } -table.basic:nth-child(4n+1) tr:hover > td { background-color: #3c73e6; } -table.basic:nth-child(4n+2) tr:hover > td { background-color: #e6983c; } -table.basic:nth-child(4n+3) tr:hover > td { background-color: #2dcc70; } +body.trHoverActivated table.basic:nth-child(4n+0) tr:hover > td { background-color: #e63c54; } +body.trHoverActivated table.basic:nth-child(4n+1) tr:hover > td { background-color: #3c73e6; } +body.trHoverActivated table.basic:nth-child(4n+2) tr:hover > td { background-color: #e6983c; } +body.trHoverActivated table.basic:nth-child(4n+3) tr:hover > td { background-color: #2dcc70; } -table.basic table.basic tr:hover > td { background-color: #9e9e9e; } +body.trHoverActivated table.basic table.basic tr:hover > td { background-color: #9e9e9e; } /* .noborder */ table.basic tr.noborder > td:first-child{ border-left: 1px solid transparent; } -table.basic tr:hover td{ background-color: #fff; } +body.trHoverActivated table.basic tr:hover td{ background-color: #fff; } /* .transparentbg */ table.basic tr.transparentbg > td{ background-color: transparent; } @@ -262,8 +262,8 @@ select.active + .valider_action{ } /* tr@hover */ -tr:hover td select.active + .valider_action, -tr:hover td input.active + .valider_action{ +body.trHoverActivated tr:hover td select.active + .valider_action, +body.trHoverActivated tr:hover td input.active + .valider_action{ border-color: #fff; background-image: url(../src/validate@hover.svg); color: #fff; diff --git a/index.php b/index.php index 32aeb28..3aedd8f 100755 --- a/index.php +++ b/index.php @@ -33,7 +33,7 @@ $notifNotifNum = 5; - + Date: Sun, 15 Nov 2015 22:36:35 +0100 Subject: [PATCH 20/36] =?UTF-8?q?Possibilit=C3=A9=20de=20saisir=20les=20no?= =?UTF-8?q?tes=20par=20groupe=20(pr=C3=A9cisemment:=20plusieurs=20notes=20?= =?UTF-8?q?dans=20un=20groupe)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 20 +++++++++++---- js/actionScript.js | 9 +++++++ page/_JS/career.js | 64 +++++++++++++++++++++++++++++++++++++++++++--- page/_JS/groups.js | 2 +- page/career.php | 9 ++++++- page/groups.php | 2 +- page/modules.php | 9 +------ 7 files changed, 95 insertions(+), 20 deletions(-) diff --git a/css/global.css b/css/global.css index d16eb59..fe219f9 100755 --- a/css/global.css +++ b/css/global.css @@ -228,7 +228,7 @@ td select > option{ padding: 0; } -.valider_action{ +.confirm{ /* position */ /*display: inline-block;*/ display: none; position: absolute; @@ -254,16 +254,26 @@ td select > option{ padding: 0; } cursor: pointer; } + + +/* @all */ +.confirm.all{ margin-top: -.7em; } + + + /* @active */ -input.active + .valider_action, -select.active + .valider_action{ +input.active + .confirm, +select.active + .confirm, +.confirm.active{ display: inline-block; background-image: url(../src/validate.svg); } + /* tr@hover */ -body.trHoverActivated tr:hover td select.active + .valider_action, -body.trHoverActivated tr:hover td input.active + .valider_action{ +body.trHoverActivated tr:hover td select.active + .confirm, +body.trHoverActivated tr:hover td input.active + .confirm, +body.trHoverActivated tr:hover td .confirm.active{ border-color: #fff; background-image: url(../src/validate@hover.svg); color: #fff; diff --git a/js/actionScript.js b/js/actionScript.js index e8812a1..448008a 100755 --- a/js/actionScript.js +++ b/js/actionScript.js @@ -64,6 +64,15 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); /* initialisation du gestionnaire */ pageM.setPage(null, 'page', DOM.CONTAINER, ['home', 'groups', 'modules', 'career', 'settings'] ); + + /* ON REMPLACE "F5" par le rechargement manuel */ + window.addEventListener('keydown', function(e){ + if( e.keyCode == 116 ){ // F5 + e.preventDefault(); + reload(); + } + }, false); + /* [b] API.js diff --git a/page/_JS/career.js b/page/_JS/career.js index d3e9b5a..1bd63b7 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -88,12 +88,19 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') ){ / /* GESTION DE LA SAISIE DE NOTES */ +var nombreModification = 0; // contiendra le nombre de notes saisies + if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != null ){ // si c'set l'admin /* SAISIE A L'AIDE DES */ var saisieInput = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table tr td input[type=number][data-ctrl].saisie_note'); var saisieObj = []; + /* BOUTON "TOUT ENREGISTRER" */ + var toutEnregistrerBtn = document.querySelector("#CONTAINER section[name=controlesenseignants] table tr td:last-child .confirm.all"); + + + // on référencie tous les input dans un objet for( var i = 0 ; i < saisieInput.length ; i++ ){ @@ -101,7 +108,7 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n saisieObj[i] = { inputEl: saisieInput[i], // le en question - initval: saisieInput[i].value, // la valeur initiale du + initval: parseFloat( saisieInput[i].value.replace(',', '.') ), // la valeur initiale du button: saisieInput[i].parentNode.children[1], // le bouton de validation pour ce ctrlid: saisieInput[i].dataset.ctrl, // on récupère l'id du contrôle userid: saisieInput[i].parentNode.parentNode.children[0].children[0].innerHTML // l'identifiant de l'utilisateur associé à ce @@ -112,20 +119,37 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n // on récupère le rang dans la liste et qu'il s'agit du même élément if( e.target.dataset.hasOwnProperty('i') && saisieObj[e.target.dataset.i].inputEl == e.target){ var obj = saisieObj[e.target.dataset.i]; + var isActive = /active/.test(obj.inputEl.className); // VRAI si l'élément est actif - if( obj.initval != obj.inputEl.value ) // si c'est une nouvelle valeur (nouveau groupe), on active le validateur (bouton) + + // si c'est une nouvelle valeur (nouvelle note), on active le validateur (bouton) + if( obj.initval != parseFloat(obj.inputEl.value.replace(',', '.')) ) addClass( obj.inputEl, 'active' ); else remClass( obj.inputEl, 'active' ); + + + // si changement du caractère "actif", et plus particulièrement + if( /active/.test(obj.inputEl.className) != isActive ) + if( !isActive ) // si activation + nombreModification += 1; + else + nombreModification -= 1; + + // si plus d'une modification, on affiche le bouton 'tout enregistrer' + if( nombreModification > 1 ) + addClass( toutEnregistrerBtn, 'active' ); + else + remClass( toutEnregistrerBtn, 'active' ); } }, false); - // on créé l'évènement de confirmation du déplacement + // on créé l'évènement de confirmation de la saisie saisieObj[i].button.addEventListener('click', function(e){ // s'il s'agit bien d'un bouton de validation, que le associé a data-i existante et que ça match correctement - if( /^valider_action/.test(e.target.className) && e.target.parentNode.children[0].dataset.hasOwnProperty('i') && saisieObj[e.target.parentNode.children[0].dataset.i].button == e.target ){ + if( /confirm/.test(e.target.className) && e.target.parentNode.children[0].dataset.hasOwnProperty('i') && saisieObj[e.target.parentNode.children[0].dataset.i].button == e.target ){ var obj = saisieObj[e.target.parentNode.children[0].dataset.i]; var request = { // on définit la requête pour API @@ -143,6 +167,38 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n } }, false); + + + // on créé l'évènement de confirmation de la saisie de TOUTES les notes saisies ou modifiées + toutEnregistrerBtn.addEventListener('click', function(e){ + + var nbRequest = 0; + var nbSuccess = 0; + + // on sélectionne toutes les valeurs contenues dans les lignes actives + for( var i = 0 ; i < saisieObj.length ; i++ ){ if( /active/.test(saisieObj[i].inputEl.className) ){ + + nbRequest += 1; + + var request = { // on définit la requête pour API + level_0: 'career', + level_1: 'saisieNote', + etudiant: saisieObj[i].userid, + controle: saisieObj[i].ctrlid, + note: saisieObj[i].inputEl.value.replace(',', '.'), // par précaution, on replace les virgules par des points pour le php (is_numeric) + }; + + API.send(request, function(response){ // on gère la réponse de API + if( response.request == 'success' ) nbSuccess += 1; // si on a une réponse positive, on incrémente le nombre de succès + + // si tout est validé, on recharge la page + if( nbSuccess == nbRequest) reload(); + }); + + }} + + }, false); + } diff --git a/page/_JS/groups.js b/page/_JS/groups.js index 161bccc..3e65502 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -74,7 +74,7 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / // on créé l'évènement de confirmation du déplacement deplacementObj[i].button.addEventListener('click', function(e){ // s'il s'agit bien d'un bouton de validation, que le "; - echo "
enregistrer
"; + echo "
enregistrer
"; echo ""; echo ""; } + echo ""; + echo ""; + echo ""; + echo ""; + echo "
tout enregistrer
"; + echo ""; + } echo ''; diff --git a/page/groups.php b/page/groups.php index cff6cd9..87f5532 100755 --- a/page/groups.php +++ b/page/groups.php @@ -535,7 +535,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm else // s'il s'agit d'un autre groupe, c'est normal echo ""; echo ''; - echo "
déplacer
"; + echo "
déplacer
"; echo ''; echo ''; } diff --git a/page/modules.php b/page/modules.php index 038dbfe..f786a7b 100755 --- a/page/modules.php +++ b/page/modules.php @@ -181,14 +181,7 @@ if( permission('admin') ){ // si l'utilisateur est un admin if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// echo "
"; - - - - /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ - // $ListeNomsSemestres = array(); - // foreach($answer->UEs as $UE) - // array_push( $ListeNomsSemestres, $UE['semestre'] ); - // $ListeNomsSemestres = array_unique($ListeNomsSemestres); + /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ $ListeNomsUE = array(); From 0f779dc42af8274747c5c7f4a1f3d3cbc184e0bb Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 23:29:39 +0100 Subject: [PATCH 21/36] =?UTF-8?q?Affichage=20de=20TOUS=20les=20groupes=20i?= =?UTF-8?q?nscrit=20=C3=A0=20un=20contr=C3=B4le=20et=20plus=20seulement=20?= =?UTF-8?q?ceux=20qui=20ont=20au=20moins=20une=20note?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/actionScript.js | 12 +++++------ manager/database.php | 13 ++++++++++-- manager/repo/controle.php | 2 -- manager/repo/group.php | 29 ++++++++++++++++++++++++++ manager/repo/note.php | 34 +++++++++++++++++++++++++++++++ page/career.php | 43 ++++++++++++++++----------------------- 6 files changed, 98 insertions(+), 35 deletions(-) diff --git a/js/actionScript.js b/js/actionScript.js index 448008a..358d9b6 100755 --- a/js/actionScript.js +++ b/js/actionScript.js @@ -66,12 +66,12 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); pageM.setPage(null, 'page', DOM.CONTAINER, ['home', 'groups', 'modules', 'career', 'settings'] ); /* ON REMPLACE "F5" par le rechargement manuel */ - window.addEventListener('keydown', function(e){ - if( e.keyCode == 116 ){ // F5 - e.preventDefault(); - reload(); - } - }, false); + // window.addEventListener('keydown', function(e){ + // if( e.keyCode == 116 ){ // F5 + // e.preventDefault(); + // reload(); + // } + // }, false); diff --git a/manager/database.php b/manager/database.php index 214d6f1..cfd5f53 100755 --- a/manager/database.php +++ b/manager/database.php @@ -642,7 +642,7 @@ class DataBase{ $UEList[$iter_ue]['modules'][$iter_mod]['controles'] = controleRepo::forTeacher($enseignantUID, $UEList[$iter_ue]['modules'][$iter_mod]['id'], $UEList[$iter_ue]['id_semestre']); foreach($UEList[$iter_ue]['modules'][$iter_mod]['controles'] as $iter_ct=>$c) - $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['notes'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['grouplist'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); } } @@ -679,7 +679,16 @@ class DataBase{ =======================================*/ }else{ // on ajoute au controle['notes'] la liste des notes des groupes - $controlObj['grouplist'] = noteRepo::forTeacher($controle, null); + // $controlObj['grouplist'] = noteRepo::forTeacher($controle, null); + + $controlObj['grouplist'] = groupRepo::forControle($controle); + + foreach($controlObj['grouplist'] as $iter=>$grpe) + if( $controleNotes = noteRepo::forGroupe($controle, $grpe['id_groupe']) ) // si le groupe a des notes, on les ajoutes + $controlObj['grouplist'][$iter] = array_merge($controlObj['grouplist'][$iter], $controleNotes); + + // var_dump( $controlObj ); + debug(); } return $controlObj; diff --git a/manager/repo/controle.php b/manager/repo/controle.php index 277b947..b68a009 100755 --- a/manager/repo/controle.php +++ b/manager/repo/controle.php @@ -98,6 +98,4 @@ class controleRepo extends DBAccess{ return DataBase::delNumeric( $getControleList->fetchAll() ); } - - } \ No newline at end of file diff --git a/manager/repo/group.php b/manager/repo/group.php index e123353..4b21c28 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -281,6 +281,35 @@ class groupRepo extends DBAccess{ + + + /* RETOURNE LES GROUPES INSCRITS A UN CONTROLE + * + * @controle l'UID du contrôle en question + * + * + * @return groupes retourne un tableau contenant les groupes inscrits à ce contrôle + * @return FALSE retourne FALSE si aucun groupe n'y est inscrit + * + */ + public static function forControle($controle){ + $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom ". + "FROM groupe as g, appartenance as app, mcc_ue, mcc_module as mcc_m, controle as ctrl ". + "WHERE app.id_groupe = g.id_groupe ". + "AND ctrl.id_mcc_module = mcc_m.id_mcc_module ". + "AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ". + "AND app.id_semestre = mcc_ue.id_semestre ". + + "AND ctrl.id_controle = :controle ". + "ORDER BY g.nom ASC"); + $getGroupeList->execute(array( ':controle' => $controle )); + + + return DataBase::delNumeric( $getGroupeList->fetchAll() ); + } + + + /* RETOURNE TOUS LES GROUPES DES SEMESTRES COURANT D'UNE ANNÉE * * @semestre_pair VRAI si le semestre courant est pair diff --git a/manager/repo/note.php b/manager/repo/note.php index 9459916..4ac6ef9 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -155,6 +155,40 @@ class noteRepo extends DBAccess{ + /* RENVOIE LES STATISTIQUES ASSOCIÉES À UN CONTRÔLE POUR UN GROUPE SPÉCIFIQUE + * + * @controle l'UID du controle concerné + * @groupe l'UID du groupe spécifique + * + * + * @return notes retourne les stats des notes pour les groupes à ce contrôle + * @return FALSE retourne FALSE si aucun résultat n'est trouvé + * + */ + public static function forGroupe($controle, $groupe){ + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as moyenne, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes ". + "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g ". + "WHERE n.id_appartenance = app.id_appartenance ". + "AND app.id_semestre = s.id_semestre ". + "AND app.id_groupe = g.id_groupe ". + "AND s.id_semestre = mcc_ue.id_semestre ". + "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". + "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". + "AND n.id_controle = ctrl.id_controle ". + + "AND ctrl.id_controle = :controle ". + "AND app.id_groupe = :groupe ". + + "GROUP BY g.id_groupe ". + + "ORDER BY g.nom ASC"); + $getNoteList->execute(array( ':controle' => $controle, ':groupe' => $groupe )); + + return $getNoteList->fetch(); + } + + + /* CRÉATION/MODIFICATION D'UNE NOTE POUR UN ETUDIANT À UN CONTRÔLE * * @etudiant l'UID de l'étudiant en question diff --git a/page/career.php b/page/career.php index 9661d0a..a0507f5 100755 --- a/page/career.php +++ b/page/career.php @@ -200,7 +200,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo "".$module['nom']." - ".$module['libelle'].""; - if( count($controle['notes']) == 0 ) // si il y a au moins une note pour ce contrôle + if( count($controle['grouplist']) == 0 ) // si il y a au moins une note pour ce contrôle echo 'Pas noté'; else echo 'Moyenne de '.number_format($controle['moyenne'], 2).' / '.$controle['base'].''; @@ -209,22 +209,8 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo 'Coefficient '.number_format($controle['coefficient'], 2).''; echo ''; - echo ""; - - foreach($controle['notes'] as $note){ // on affiche la liste des élèves avec leurs notes - echo ""; - echo ""; - if( $note['nb_notes'] == 1 ) - echo ""; - else - echo ""; - - echo ""; - echo ""; - echo ""; - } - - echo '
".$note['groupe']."".$note['nb_notes']." note".$note['nb_notes']." notesAllant de ".$note['min']." à ".$note['max']."Moyenne de ".number_format($note['moyenne'], 2)." / ".$controle['base']."
'; + // echo ""; + // echo '
'; } }else // si aucun contrôle pour ce module @@ -314,19 +300,26 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif ====================================================================================*/ if( $groupeOpt == null ){ - foreach($answer->controle['grouplist'] as $note){ // on affiche la liste des groupes avec leurs stats + foreach($answer->controle['grouplist'] as $groupe){ // on affiche la liste des groupes avec leurs stats echo ""; - echo "".$note['groupe'].""; + echo "".$groupe['nom'].""; - if( $note['nb_notes'] == 1 ) - echo "".$note['nb_notes']." note"; - else - echo "".$note['nb_notes']." notes"; + if( isset($groupe['nb_notes']) ){ // si ce groupe a des notes - echo "Allant de ".$note['min']." à ".$note['max'].""; - echo "Moyenne de ".number_format($note['moyenne'], 2)." / ".$answer->controle['base'].""; + if( $groupe['nb_notes'] == 1 ) echo "".$groupe['nb_notes']." note"; + else echo "".$groupe['nb_notes']." notes"; + + echo "Allant de ".number_format($groupe['min'], 2)." à ".number_format($groupe['max'], 2).""; + echo "Moyenne de ".number_format($groupe['moyenne'], 2)." / ".$answer->controle['base'].""; + }else{ // si le groupe n'a aucune note + + echo "Pas de note"; + echo ""; + echo ""; + + } echo ""; } From e10c3ad9895ed67aef66f8da9e30dd0217787657 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 00:01:05 +0100 Subject: [PATCH 22/36] =?UTF-8?q?Affichage=20des=20contr=C3=B4les=20m?= =?UTF-8?q?=C3=AAme=20si=20aucune=20note=20n'est=20encore=20saisie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 6 +++++- manager/repo/controle.php | 5 ++--- manager/repo/note.php | 25 +++++++++++++++++++++++++ page/career.php | 4 +--- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/manager/database.php b/manager/database.php index cfd5f53..cfe84e1 100755 --- a/manager/database.php +++ b/manager/database.php @@ -641,8 +641,12 @@ class DataBase{ foreach($UEList[$iter_ue]['modules'] as $iter_mod=>$b){ $UEList[$iter_ue]['modules'][$iter_mod]['controles'] = controleRepo::forTeacher($enseignantUID, $UEList[$iter_ue]['modules'][$iter_mod]['id'], $UEList[$iter_ue]['id_semestre']); - foreach($UEList[$iter_ue]['modules'][$iter_mod]['controles'] as $iter_ct=>$c) + foreach($UEList[$iter_ue]['modules'][$iter_mod]['controles'] as $iter_ct=>$c){ $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['grouplist'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + + $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['moyenne'] = noteRepo::moyenneForControle($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + } + } } diff --git a/manager/repo/controle.php b/manager/repo/controle.php index b68a009..4b9ae29 100755 --- a/manager/repo/controle.php +++ b/manager/repo/controle.php @@ -80,13 +80,12 @@ class controleRepo extends DBAccess{ * */ public static function forTeacher($enseignant, $module, $semestre){ - $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.id_mcc_module, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication, AVG(n.valeur) as moyenne ". - "FROM enseignement as ens, module as m, mcc_module as mcc_m, mcc_ue, controle as ctrl, note as n ". + $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.id_mcc_module, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication ". + "FROM enseignement as ens, module as m, mcc_module as mcc_m, mcc_ue, controle as ctrl ". "WHERE ens.id_mcc_module = mcc_m.id_mcc_module ". "AND 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 n.id_controle = ctrl.id_controle ". "AND ens.id_enseignant = :enseignant ". "AND mcc_m.id_module = :module ". diff --git a/manager/repo/note.php b/manager/repo/note.php index 4ac6ef9..e5d317f 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -188,6 +188,31 @@ class noteRepo extends DBAccess{ } + /* RETOURNE LA MOYENNE D'UN CONTRÔLE PARTICULIER + * + * @controle l'UID du contrôle en question + * + * + * @return moyenne retourne la moyenne d'un contrôle + * @return FALSE retourne FALSE s'il y a aucune note à ce contrôle + * + */ + public static function moyenneForControle($controle){ + $getMoyenne = DataBase::getPDO()->prepare("SELECT AVG(n.valeur) as moyenne ". + "FROM controle as ctrl, note as n ". + "WHERE ctrl.id_controle = n.id_controle ". + "AND ctrl.id_controle = :controle ". + + "GROUP BY ctrl.id_controle"); + $getMoyenne->execute(array( ':controle' => $controle )); + + if( $fetchObj = $getMoyenne->fetch() ) + return $fetchObj['moyenne']; + else + return false; + } + + /* CRÉATION/MODIFICATION D'UNE NOTE POUR UN ETUDIANT À UN CONTRÔLE * diff --git a/page/career.php b/page/career.php index a0507f5..32755c3 100755 --- a/page/career.php +++ b/page/career.php @@ -178,8 +178,6 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo "".$UE['nom'].''; echo ""; - - if( count($answer->UEs) > 0 ){ // si au moins un UE foreach($answer->UEs as $UE){ // pour chaque UE @@ -195,6 +193,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e 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 "".$controle['intitule'].""; @@ -247,7 +246,6 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif $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' ){ From 2aa3b093a9aa42e98698ded5c1f68adf27f94f03 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 00:09:04 +0100 Subject: [PATCH 23/36] Modification page/career.php un enseignant peut maintenant visualiser les controles et groupes qui n'ont pas de notes --- manager/database.php | 9 +++++---- manager/repo/controle.php | 5 ++--- manager/repo/note.php | 4 ++-- page/career.php | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/manager/database.php b/manager/database.php index cfe84e1..1fbbf44 100755 --- a/manager/database.php +++ b/manager/database.php @@ -662,10 +662,14 @@ class DataBase{ /********************************************/ public function getNotesEnseignant($enseignant, $semestre_pair, $annee, $controle, $groupe=null){ // [OPTIONNEL] $groupe - // on récupère les informations du contrôle if( ! ($controlObj=controleRepo::info($controle)) ) return 'unknown_controle'; + if( $moyenneObj = noteRepo::moyenneForControle($controle) ) + $controlObj['moyenne'] = $moyenneObj['moyenne']; + else + $controlObj['moyenne'] = null; + /* [1] si le groupe est donné =======================================*/ if( $groupe != null ){ @@ -682,9 +686,6 @@ class DataBase{ /* [2] si on veut par groupe =======================================*/ }else{ - // on ajoute au controle['notes'] la liste des notes des groupes - // $controlObj['grouplist'] = noteRepo::forTeacher($controle, null); - $controlObj['grouplist'] = groupRepo::forControle($controle); foreach($controlObj['grouplist'] as $iter=>$grpe) diff --git a/manager/repo/controle.php b/manager/repo/controle.php index 4b9ae29..8186406 100755 --- a/manager/repo/controle.php +++ b/manager/repo/controle.php @@ -19,11 +19,10 @@ class controleRepo extends DBAccess{ */ public static function info($controleUID){ // on considère que le semestre existe - $getControleInfo = DataBase::getPDO()->prepare("SELECT ctrl.id_controle as id, ctrl.id_mcc_module, m.nom as module, m.libelle as modulelib, s.id_semestre, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication, AVG(n.valeur) as moyenne ". - "FROM controle as ctrl, mcc_module as mcc_m, mcc_ue, semestre as s, module as m, note as n ". + $getControleInfo = DataBase::getPDO()->prepare("SELECT ctrl.id_controle as id, ctrl.id_mcc_module, m.nom as module, m.libelle as modulelib, s.id_semestre, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication ". + "FROM controle as ctrl, mcc_module as mcc_m, mcc_ue, semestre as s, module as m ". "WHERE ctrl.id_mcc_module = mcc_m.id_mcc_module ". "AND mcc_m.id_module = m.id_module ". - "AND n.id_controle = ctrl.id_controle ". "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". "AND mcc_ue.id_semestre = s.id_semestre ". diff --git a/manager/repo/note.php b/manager/repo/note.php index e5d317f..861aa69 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -194,7 +194,7 @@ class noteRepo extends DBAccess{ * * * @return moyenne retourne la moyenne d'un contrôle - * @return FALSE retourne FALSE s'il y a aucune note à ce contrôle + * @return NULL retourne NULL s'il y a aucune note à ce contrôle * */ public static function moyenneForControle($controle){ @@ -209,7 +209,7 @@ class noteRepo extends DBAccess{ if( $fetchObj = $getMoyenne->fetch() ) return $fetchObj['moyenne']; else - return false; + return null; } diff --git a/page/career.php b/page/career.php index 32755c3..2ba187e 100755 --- a/page/career.php +++ b/page/career.php @@ -199,7 +199,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo "".$module['nom']." - ".$module['libelle'].""; - if( count($controle['grouplist']) == 0 ) // si il y a au moins une note pour ce contrôle + if( $controle['moyenne'] == null ) // si il y a au moins une note pour ce contrôle echo 'Pas noté'; else echo 'Moyenne de '.number_format($controle['moyenne'], 2).' / '.$controle['base'].''; @@ -270,7 +270,7 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif ====================================================================================*/ if( $groupeOpt == null ){ - if( count($answer->controle['grouplist']) == 0 ) // si il y a au moins une note pour ce contrôle + if( $answer->controle['moyenne'] == null ) // si il y a au moins une note pour ce contrôle echo 'Pas noté'; else echo 'Moyenne de '.number_format($answer->controle['moyenne'], 2).' / '.$answer->controle['base'].''; From f83b0963feec870d40d19ca79938b10ad6abc94d Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 10:27:35 +0100 Subject: [PATCH 24/36] =?UTF-8?q?Correction=20du=20d=C3=A9placement=20de?= =?UTF-8?q?=20groupe,=20coh=C3=A9rence=20du=20semestre=20pendant=20le=20d?= =?UTF-8?q?=C3=A9placement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 117 ++++------------------------------------- manager/groups.php | 6 +-- manager/repo/group.php | 39 ++++++-------- page/_JS/groups.js | 4 +- page/groups.php | 10 ++-- 5 files changed, 37 insertions(+), 139 deletions(-) diff --git a/manager/database.php b/manager/database.php index 1fbbf44..2434a5f 100755 --- a/manager/database.php +++ b/manager/database.php @@ -278,23 +278,11 @@ class DataBase{ if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; if( !($etudiantUID=userRepo::UID($etudiant)) ) return 'unknown_user'; - - // on cherche le groupe associé - $getNomGroupe = DataBase::getPDO()->prepare("SELECT g.nom ". - "FROM utilisateur as u, groupe as g, appartenance as app ". - "WHERE app.id_etudiant = u.identifiant ". - "AND app.id_groupe = g.id_groupe ". - "AND u.identifiant = :etudiantUID ". - - "AND app.id_semestre = :semestreUID ". - "ORDER BY g.nom"); - $getNomGroupe->execute(array( ':etudiantUID' => $etudiantUID, ':semestreUID' => $semestreUID )); - - // si on a un résultat - if( $nomGroupe = $getNomGroupe->fetch()['nom'] ) - return $nomGroupe; - else - return 'error'; + // on retourne le nom + if( $groupeObj = groupRepo::forStudent($etudiantUID, $semestreUID) ) + return $groupeObj['nom']; + else // si on a pas trouvé de groupe pour cet étudiant à ce semestre + return 'unknown_group'; } @@ -304,98 +292,13 @@ class DataBase{ /******************************************************/ /***** déplace un étudiant d'un groupe à un autre *****/ /******************************************************/ - public function deplacerEtudiant($etudiant, $groupe, $annee){ + public function deplacerEtudiant($etudiant, $groupe, $semestre){ + // on vérifie que le semestre et que le groupe de destination existent + if( !($semestreUID=semestreRepo::info($semestre)['id']) ) return 'unknown_semestre'; + if( !($destGroupeUID=groupRepo::UID($groupe)) ) return 'unknown_newgroup'; - /*** on cherche le nouveau groupe pour cet utilisateur ***/ - $getNouveauGroupeUID = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as semestre, g.id_groupe as id, u.identifiant as etuUID ". - "FROM groupe as g, appartenance as app, appartenance as myapp, utilisateur as u, semestre as s ". - "WHERE g.nom = :groupe ". - "AND u.identifiant = :etudiant ". - - "AND myapp.id_etudiant = u.identifiant ". - "AND myapp.id_semestre = s.id_semestre ". - - "AND app.id_groupe = g.id_groupe ". - "AND app.id_semestre = s.id_semestre"); - $getNouveauGroupeUID->execute(array( - ':groupe' => $groupe, - ':etudiant' => $etudiant - )); - - // si on trouve, on le définit, sinon on retourne "unknown_user" - if( $data = $getNouveauGroupeUID->fetch() ){ - $nouveauGroupeUID = (int) $data['id']; - $semestreUID = $data['semestre']; - $etudiantUID = $data['etuUID']; - } - else - return 'unknown_newgroup'; - - - /*** on cherche le groupe de cet utilisateur ***/ - $getGroupeUID = DataBase::getPDO()->prepare("SELECT g.id_groupe as id ". - "FROM utilisateur as u, groupe as g, appartenance as app, semestre as s ". - "WHERE app.id_etudiant = u.identifiant ". - "AND app.id_groupe = g.id_groupe ". - "AND app.id_semestre = s.id_semestre ". - - "AND u.identifiant = :etudiantUID ". - "AND app.id_semestre = :semestreUID"); - $getGroupeUID->execute(array( - ':etudiantUID' => $etudiantUID, - ':semestreUID' => $semestreUID, - )); - - // si on trouve, on le définit, sinon on retourne "unknown_user" - if( $groupeUID = $getGroupeUID->fetch()['id'] ){ - $groupeUID = $groupeUID; - - /***************************************************************/ - /*** CAS 1 : l'utilisateur a déjà un groupe pour ce semestre ***/ - /***************************************************************/ - - // il suffit donc maintenant de modifier l' "appartenance" - $updateGroupe = DataBase::getPDO()->prepare("UPDATE appartenance SET id_groupe = :nouveauGroupeUID ". - "WHERE id_etudiant = :etudiantUID ". - "AND id_groupe = :groupeUID ". - "AND id_semestre = :semestreUID"); - $updateGroupe->execute(array( - ':nouveauGroupeUID' => $nouveauGroupeUID, - ':etudiantUID' => $etudiantUID, - ':groupeUID' => $groupeUID, - ':semestreUID' => $semestreUID - )); - - } - else{ - /****************************************************/ - /*** CAS 2 : l'utilisateur n'a pas encore de groupe */ - /****************************************************/ - $insertGroupe = DataBase::getPDO()->prepare("INSERT INTO appartenance(id_appartenance, id_etudiant, id_groupe, id_semestre) ". - "VALUES(NULL, :etudiantUID, :nouveauGroupeUID, :semestreUID)"); - $insertGroupe->execute(array( - ':etudiantUID' => $etudiantUID, - ':nouveauGroupeUID' => $nouveauGroupeUID, - ':semestreUID' => $semestreUID - )); - } - - /* Vérification de l'entrée dans la table */ - $verif = DataBase::getPDO()->prepare("SELECT count(id_appartenance) as count ". - "FROM appartenance ". - "WHERE id_etudiant = :etudiantUID ". - "AND id_groupe = :nouveauGroupeUID ". - "AND id_semestre = :semestreUID"); - $verif->execute(array( - ':etudiantUID' => $etudiantUID, - ':nouveauGroupeUID' => $nouveauGroupeUID, - ':semestreUID' => $semestreUID - )); - - $verifFetch = $verif->fetch(); - - if( $verifFetch && $verifFetch['count'] == '1' ) + if( groupRepo::ajouterMembre($etudiant, $destGroupeUID, $semestreUID) ) return 'success'; else return 'error'; diff --git a/manager/groups.php b/manager/groups.php index 5dce139..b024c58 100755 --- a/manager/groups.php +++ b/manager/groups.php @@ -267,14 +267,14 @@ require_once __ROOT__.'/manager/database.php'; /************************************************/ case 'move': if( permission('admin') ){ - $areSetParam = isset($request->etudiant) && isset($request->groupe); // les arguments existent + $areSetParam = isset($request->etudiant) && isset($request->groupe) && isset($request->semestre); // les arguments existent $typeOkParam = $areSetParam && is_string($request->etudiant) && is_string($request->groupe); // si c'est des strings - $nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && strlen($request->groupe) > 0; // d'au moins 1 caractère + $nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && strlen($request->groupe) > 0 && is_numeric($request->semestre); // d'au moins 1 caractère $etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->etudiant); // etudiant (username) bon format $groupeCheck = $etudiantCheck && preg_match('/^[a-z0-9 -]{1,10}$/i', $request->groupe); // groupe (nom) bon format if( $groupeCheck ){ // si param ok - $answer->request = DataBase::getInstance()->deplacerEtudiant($request->etudiant, $request->groupe, $_SESSION['annee']); + $answer->request = DataBase::getInstance()->deplacerEtudiant($request->etudiant, $request->groupe, $request->semestre); }else $answer->request = 'param_error'; diff --git a/manager/repo/group.php b/manager/repo/group.php index 4b21c28..d2a03e0 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -110,7 +110,7 @@ class groupRepo extends DBAccess{ } - /* AJOUTER UN MEMBRE A UN GROUPE + /* AJOUTER UN MEMBRE A UN GROUPE / DEPLACER UN MEMBRE VERS UN GROUPE DONNE (si déjà dans un groupe) * * @etudiant l'identifiant (UID) de l'étudiant à ajouter au groupe * @groupe l'UID du groupe auquel on veut le ratacher @@ -121,18 +121,10 @@ class groupRepo extends DBAccess{ * */ public static function ajouterMembre($etudiant, $groupe, $semestre){ + debug(); /* [1] On vérifie si l'utilisateur appartient à un groupe pour ce semestre ===========================================================================*/ - $dejaMembre = DataBase::getPDO()->prepare("SELECT id_appartenance as id ". - "FROM appartenance ". - "WHERE id_etudiant = :etudiant ". - "AND id_semestre = :semestre "); - $dejaMembre->execute(array( - ':etudiant' => $etudiant, - ':semestre' => $semestre - )); - - if( $appartenanceUID = $dejaMembre->fetch()['id'] ){ // si c'est le cas + if( $appartenanceUID = groupRepo::forStudent($etudiant, $semestre)['id_appartenance'] ){ // si c'est le cas /* [2] On modifie l'appartenance ==============================*/ @@ -140,8 +132,8 @@ class groupRepo extends DBAccess{ $ajouterMembres = DataBase::getPDO()->prepare("UPDATE appartenance ". "SET id_groupe = :groupe ". "WHERE id_appartenance = :appartenanceUID"); - $ajouterMembre->execute(array( - ':groupe' => $groupeUID, + $ajouterMembres->execute(array( + ':groupe' => $groupe, ':appartenanceUID' => $appartenanceUID )); @@ -156,9 +148,9 @@ class groupRepo extends DBAccess{ "(SELECT id_groupe FROM groupe WHERE id_groupe = :groupe), ". "(SELECT id_semestre FROM semestre WHERE id_semestre = :semestre) ". " )"); - $ajouterMembre->execute(array( - ':etudiant' => $etudiantUID, - ':groupe' => $groupeUID, + $ajouterMembres->execute(array( + ':etudiant' => $etudiant, + ':groupe' => $groupe, ':semestre' => $semestre )); @@ -213,17 +205,16 @@ class groupRepo extends DBAccess{ * */ public static function forStudent($etudiant, $semestre){ - $getGroupe = DataBase::getPDO()->prepare("SELECT g.id_groupe as id, g.nom, g.libelle ". - "FROM utilisateur as u, groupe as g, appartenance as app ". - "WHERE app.id_etudiant = u.identifiant ". - "AND app.id_groupe = g.id_groupe ". - "AND u.identifiant = :etudiantUID ". + $getGroupe = DataBase::getPDO()->prepare("SELECT DISTINCT app.id_appartenance, g.id_groupe as id, g.nom ". + "FROM groupe as g, appartenance as app ". + "WHERE app.id_groupe = g.id_groupe ". - "AND app.id_semestre = :semestreUID ". + "AND app.id_etudiant = :etudiant ". + "AND app.id_semestre = :semestre ". "ORDER BY g.nom"); - $getGroupe->execute(array( ':etudiantUID' => $etudiantUID, ':semestreUID' => $semestreUID )); + $getGroupe->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre )); - return DataBase::delNumeric( $getGroupe->fetch() ); + return $getGroupe->fetch(); } diff --git a/page/_JS/groups.js b/page/_JS/groups.js index 3e65502..d7a81a1 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -53,6 +53,7 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / select: deplacementElements[i], // le button: deplacementElements[i].parentNode.children[1], // le bouton de validation pour ce }; @@ -81,7 +82,8 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / level_0: 'groups', level_1: 'move', etudiant: obj.userid, - groupe: obj.select.value + groupe: obj.select.value, + semestre: obj.streid }; API.send(request, function(response){ // on gère la réponse de API, si déplacement effectué, on recharge la page diff --git a/page/groups.php b/page/groups.php index 87f5532..92e852c 100755 --- a/page/groups.php +++ b/page/groups.php @@ -527,13 +527,15 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm // echo ''.$group['nom'].''; // changement de groupe echo ''; - echo ""; + foreach($answerPourListeGroupes->grouplist as $groupemodif) // pour tous les groupes - if( $groupemodif['semestre'] == $group['semestre'] ) // si c'est un groupe du même semestre - if( $groupemodif['nom'] == $group['nom'] ) // s'il s'agit du groupe courant, on met en sélection + if( $groupemodif['semestre'] == $group['semestre'] ) // si c'est un groupe du même semestre uniquement + if( $groupemodif['nom'] == $group['nom'] ) // si c'est le groupe en cours, on le pré-sélectionne echo ""; - else // s'il s'agit d'un autre groupe, c'est normal + else echo ""; + echo ''; echo "
déplacer
"; echo ''; From 499d17346c2ab7439a1516a3c0c0a69239ce894e Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 10:34:41 +0100 Subject: [PATCH 25/36] =?UTF-8?q?Correction=20incoh=C3=A9rence=20entre=20m?= =?UTF-8?q?oyenne=20contr=C3=B4le=20de=20la=20liste=20des=20contr=C3=B4les?= =?UTF-8?q?=20ET=20les=20d=C3=A9tails=20d'un=20contr=C3=B4le?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 7 +++---- manager/repo/note.php | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/manager/database.php b/manager/database.php index 2434a5f..df8eb43 100755 --- a/manager/database.php +++ b/manager/database.php @@ -548,6 +548,7 @@ class DataBase{ $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['grouplist'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['moyenne'] = noteRepo::moyenneForControle($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + } } @@ -568,10 +569,8 @@ class DataBase{ // on récupère les informations du contrôle if( ! ($controlObj=controleRepo::info($controle)) ) return 'unknown_controle'; - if( $moyenneObj = noteRepo::moyenneForControle($controle) ) - $controlObj['moyenne'] = $moyenneObj['moyenne']; - else - $controlObj['moyenne'] = null; + // on ajoute la moyenne au contrôle + $controlObj['moyenne'] = noteRepo::moyenneForControle($controlObj['id']); /* [1] si le groupe est donné =======================================*/ diff --git a/manager/repo/note.php b/manager/repo/note.php index 861aa69..550f035 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -198,7 +198,7 @@ class noteRepo extends DBAccess{ * */ public static function moyenneForControle($controle){ - $getMoyenne = DataBase::getPDO()->prepare("SELECT AVG(n.valeur) as moyenne ". + $getMoyenne = DataBase::getPDO()->prepare("SELECT ctrl.id_controle, AVG(n.valeur) as moyenne ". "FROM controle as ctrl, note as n ". "WHERE ctrl.id_controle = n.id_controle ". "AND ctrl.id_controle = :controle ". From 4d4f2aae45173999273b567f0cfca174dd9d4189 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 12:02:03 +0100 Subject: [PATCH 26/36] Modification page/modules affichage par semestre, par UE, par modules --- manager/database.php | 20 +++++-- manager/modules.php | 7 +-- manager/repo/module.php | 12 ++-- manager/repo/semestre.php | 20 +++++++ manager/repo/ue.php | 21 +++---- manager/security.php | 14 ++--- page/_JS/modules.js | 13 +++- page/modules.php | 121 ++++++++++++++++++++++++++++++-------- 8 files changed, 165 insertions(+), 63 deletions(-) diff --git a/manager/database.php b/manager/database.php index df8eb43..cd8db30 100755 --- a/manager/database.php +++ b/manager/database.php @@ -438,13 +438,23 @@ class DataBase{ /*** retourne les modules des semestres en cours ***/ /***************************************************/ public function getModulesByUEByYear($semestre_pair, $annee){ // ***OPTIONNEL*** semestre_pair - // on récupère la liste des UEs - $UEList = ueRepo::forYear($semestre_pair, $annee); - foreach($UEList as $iter=>$UE) // pour chaque UE, on récupère la liste des UEs - $UEList[$iter]['modules'] = moduleRepo::forYear($UE['id'], $semestre_pair, $annee); + debug(); - return $UEList; + // 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']); + + } + + } + + return $semestreList; } diff --git a/manager/modules.php b/manager/modules.php index fb45ff5..e8ae6c2 100755 --- a/manager/modules.php +++ b/manager/modules.php @@ -112,14 +112,13 @@ require_once __ROOT__.'/manager/database.php'; $anneeCheck = $nEmptyParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons - $UEList = DataBase::getInstance()->getModulesByUEByYear(null, $request->annee); - // $UEList = DataBase::getInstance()->getModulesByUEByYear($_SESSION['semestre_pair'], $request->annee); + $semestreList = DataBase::getInstance()->getModulesByUEByYear(null, $request->annee); // STRUCTURE // tableau d'UES contenant un tableau de MODULES - if( is_array($UEList) ){ // si on a bien un tableau - $answer->UEs = $UEList; // on renvoie dans answer->ues + if( is_array($semestreList) ){ // si on a bien un tableau + $answer->semestres = $semestreList; // on renvoie dans answer->ues $answer->request = 'success'; // et on renvoie success }else // sinon si c'est pas un tableau $answer->request = $UEList; // on retourne l'erreur diff --git a/manager/repo/module.php b/manager/repo/module.php index b2c08fb..e99fdbc 100755 --- a/manager/repo/module.php +++ b/manager/repo/module.php @@ -105,17 +105,16 @@ class moduleRepo extends DBAccess{ - /* RENVOIE LA LISTE DES MODULES D'UN UE D'UNE ANNEE COURANTE (SEMESTRES COURANTS) + /* RENVOIE LA LISTE DES MODULES D'UN UE D'UN SEMESTRE PARTICULIER * * @UEUID l'UID d'un UE - * @semestre_pair VRAI si le semestre est pair - * @annee l'année en cours + * @semestre l'UID du semestre en question * * @return modules retourne un tableau contenant les modules de l'utilisateur pour ce semestre * @return existent FAUX si aucun module n'a été trouvé * */ - public static function forYear($UEUID, $semestre_pair, $annee){ + public static function forYear($UEUID, $semestre){ // on récupère les modules $getModulesForYear = DataBase::getPDO()->prepare("SELECT DISTINCT m.id_module as id, m.nom, m.libelle ". "FROM module as m, mcc_module as mcc_m, mcc_ue, semestre as s ". @@ -124,10 +123,9 @@ class moduleRepo extends DBAccess{ "AND mcc_ue.id_semestre = s.id_semestre ". "AND mcc_ue.id_ue = :UEUID ". - "AND s.rang % 2 = :semestre_pair ". - "AND s.annee = :annee ". + "AND s.id_semestre = :semestre ". "ORDER BY s.rang, m.nom, m.libelle"); - $getModulesForYear->execute(array( ':UEUID' => $UEUID, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + $getModulesForYear->execute(array( ':UEUID' => $UEUID, ':semestre' => $semestre )); return DataBase::delNumeric( $getModulesForYear->fetchAll() ); } diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 3955503..0c2c76d 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -106,6 +106,26 @@ class semestreRepo extends DBAccess{ + /* retourne la liste des semestres d'une année + * + * @annee l'année en question + * + * + * @return semestres retourne la liste des semestres de cette année + * @return FALSE retourne FALSE si aucun semestre ne correspond aux critères + * + */ + public static function forYear($annee){ + $getSemestreList = DataBase::getPDO()->prepare("SELECT id_semestre as id, nom, rang, annee ". + "FROM semestre ". + "WHERE annee = :annee ". + "ORDER BY rang ASC"); + $getSemestreList->execute(array( ':annee' => $annee )); + + return DataBase::delNumeric( $getSemestreList->fetchAll() ); + } + + } \ No newline at end of file diff --git a/manager/repo/ue.php b/manager/repo/ue.php index 3976063..733c9bb 100755 --- a/manager/repo/ue.php +++ b/manager/repo/ue.php @@ -104,31 +104,26 @@ class ueRepo extends DBAccess{ - /* RENVOIE LA LISTE DES UEs D'UNE ANNEE COURANTE (SEMESTRES COURANTS) + /* RENVOIE LA LISTE DES UEs D'UN SEMESTRE D'UNE ANNEE COURANTE * - * @semestre_pair VRAI si le semestre est pair - * @annee l'année en cours + * @semestre l'UID du semestre en question * - * @return UEs retourne un tableau contenant les UEs des semestres en cours + * @return UEs retourne un tableau contenant les UEs du semestre en question * @return existent FAUX si aucun UE n'a été trouvé * */ - public static function forYear($semestre_pair, $annee){ - $semestrePair0 = '0'; $semestrePair1 = '1'; - if( is_bool($semestre_pair) ){ $semestrePair0 = $semestre_pair; $semestrePair1 = $semestre_pair; } - + public static function forYear($semestre){ // on récupère les modules - $getUEsForYear = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". + $getUEList = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". "FROM ue, mcc_ue, semestre as s ". "WHERE ue.id_ue = mcc_ue.id_ue ". "AND mcc_ue.id_semestre = s.id_semestre ". - "AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) ". - "AND s.annee = :annee ". + "AND s.id_semestre = :semestre ". "ORDER BY s.rang, ue.nom, ue.libelle"); - $getUEsForYear->execute(array( ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee )); + $getUEList->execute(array( ':semestre' => $semestre )); - return DataBase::delNumeric( $getUEsForYear->fetchAll() ); + return DataBase::delNumeric( $getUEList->fetchAll() ); } diff --git a/manager/security.php b/manager/security.php index 7cd2eb6..2bdbd48 100755 --- a/manager/security.php +++ b/manager/security.php @@ -54,15 +54,15 @@ error_reporting(-1); } - function distinctArray($inArray){ - $outArray = array(); + // function distinctArray($inArray){ + // $outArray = array(); - foreach($inArray as $value) // pour chaque élément du tableau d'entrée, on l'ajoute uniquement si aucune entrée du tableau de sortie n'a la même valeur - if( !in_array($value, $outArray) ) - array_push($outArray, $value); + // foreach($inArray as $value) // pour chaque élément du tableau d'entrée, on l'ajoute uniquement si aucune entrée du tableau de sortie n'a la même valeur + // if( !in_array($value, $outArray) ) + // array_push($outArray, $value); - return $outArray; - } + // return $outArray; + // } function secure_sha1($text){ diff --git a/page/_JS/modules.js b/page/_JS/modules.js index 55eb1f9..87903cd 100644 --- a/page/_JS/modules.js +++ b/page/_JS/modules.js @@ -5,16 +5,23 @@ /********************************/ /* GESTION DE L'AFFINAGE PAR UE */ /********************************/ -var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE]"); +var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre]"); for( var i = 0 ; i < partList.length ; i++ ){ partList[i].addEventListener('click', function(e){ var tableauParent = e.target.parentNode.parentNode.parentNode; - if( tableauParent.tagName == 'TABLE' && tableauParent.getAttribute('name') == 'UE' && e.target.dataset.hasOwnProperty('value') ){ - pageM.vars[1] = 'u:'+e.target.dataset.value; + if( tableauParent.tagName == 'TABLE' && e.target.dataset.hasOwnProperty('value') ){ + /* SI c'est une affinage par SEMESTRE */ + if( tableauParent.getAttribute('name') == 'semestre' ) + pageM.vars[1] = 's:'+e.target.dataset.value; + + /* SI c'est un affinage par UE */ + if( tableauParent.getAttribute('name') == 'UE' ) + pageM.vars[1] = 'u:'+e.target.dataset.value; + // si on a '*' comme valeur, on l'enlève if( /\*$/.test(pageM.vars[1]) ) pageM.vars.pop(); diff --git a/page/modules.php b/page/modules.php index f786a7b..ce1a4ed 100755 --- a/page/modules.php +++ b/page/modules.php @@ -8,16 +8,21 @@ require_once __ROOT__.'/manager/modules.php'; // on initialise les paramètres optionnels $ueOpt = null; + $semestreOpt = null; // on cherche dans toutes les variables _get si on trouve des paramètres foreach($_POST as $k=>$v){ - if( preg_match('/^u:(.+)$/', $k, $m) ) // s:nomSemestre + if( preg_match('/^s:(.+)$/', $k, $m) ) // s:nomSemestre + $semestreOpt = $m[1]; + + if( preg_match('/^u:(.+)$/', $k, $m) ) // u:nomUE $ueOpt = $m[1]; } $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; + $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; /**************************************** @@ -183,12 +188,34 @@ if( permission('admin') ){ // si l'utilisateur est un admin echo "
"; - /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeNomsSemestres = array(); $ListeNomsUE = array(); - foreach($answer->UEs as $UE) - array_push( $ListeNomsUE, $UE['nom'] ); + foreach($answer->semestres as $semestre){ + array_push( $ListeNomsSemestres, $semestre['nom'] ); + + /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ + foreach($semestre['UElist'] as $UE) + array_push( $ListeNomsUE, $UE['nom'] ); + } + + $ListeNomsSemestres = array_unique($ListeNomsSemestres); $ListeNomsUE = array_unique($ListeNomsUE); + echo ""; + if( $semestreOpt == null ) echo ""; + else echo ""; + + foreach($ListeNomsSemestres as $NomSemestre) + if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
TousTous".$NomSemestre.'".$NomSemestre.'
"; + + + + echo ""; if( $ueOpt == null ) echo ""; @@ -202,34 +229,80 @@ if( permission('admin') ){ // si l'utilisateur est un admin echo "
Tous
"; - foreach($answer->UEs as $UE){ - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ - - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } - - echo ''; - echo '
'.$UE['semestre'].' - '.$UE['nom'].' - '.$UE['libelle'].'
'.$MODULE['nom'].''.$MODULE['libelle'].'
'; + foreach($answer->semestres as $semestre){ + + if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage + + foreach($semestre['UElist'] as $UE){ + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage + + echo ""; + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + foreach($UE['modules'] as $MODULE){ + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo '
'.$semestre['nom'].' - '.$UE['nom'].' - '.$UE['libelle'].'
'.$MODULE['nom'].''.$MODULE['libelle'].'
'; + + } + } } + } //////////////////////////////////////////////////////////////////////////////// echo '
'; }else echo "
Aucun module trouvé
"; -} ?> +} + + + + + + + + + + +/***************************************/ +/*** GESTION DES MCC (version admin) ***/ +/***************************************/ +if( permission('admin') ){ // si l'utilisateur est un admin + + $request = new stdClass(); $answer = new stdClass(); + + $request->level_1 = 'getMCC'; + $request->annee = $_SESSION['annee']; + + modules_switch_level_1($request, $answer); + + var_dump( $answer ); + + if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe + //////////////////////////////////////////////////////////////////////////////// + echo "
"; + + + + }else + echo "
Aucun module trouvé
"; + +} + + +?> From c7063cb95891a9044d4e7658f37a1b5e4df46b28 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 12:42:36 +0100 Subject: [PATCH 27/36] =?UTF-8?q?En=20cours=20d'int=C3=A9gration=20du=20ty?= =?UTF-8?q?pe=20de=20formation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 2 - manager/modules.php | 29 ++++++++++ manager/repo/semestre.php | 19 ++++--- page/modules.php | 9 +-- xdoc/sid.sql | 113 ++++++++++++++++++++++++++++++-------- 5 files changed, 135 insertions(+), 37 deletions(-) diff --git a/manager/database.php b/manager/database.php index cd8db30..2a9511d 100755 --- a/manager/database.php +++ b/manager/database.php @@ -439,8 +439,6 @@ class DataBase{ /***************************************************/ public function getModulesByUEByYear($semestre_pair, $annee){ // ***OPTIONNEL*** semestre_pair - debug(); - // on récupère les semestres de cette année $semestreList = semestreRepo::forYear($annee); diff --git a/manager/modules.php b/manager/modules.php index e8ae6c2..5d6c2e5 100755 --- a/manager/modules.php +++ b/manager/modules.php @@ -130,6 +130,35 @@ require_once __ROOT__.'/manager/database.php'; break; + /**********************************/ + /* liste des informations des MCC */ + /**********************************/ + case 'getMCC': if( 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()->getModulesByUEByYear(null, $request->annee); + + // STRUCTURE + // tableau d'UES contenant un tableau de MODULES + + if( is_array($semestreList) ){ // si on a bien un tableau + $answer->semestres = $semestreList; // on renvoie dans answer->ues + $answer->request = 'success'; // et on renvoie success + }else // sinon si c'est pas un tableau + $answer->request = $UEList; // on retourne l'erreur + }else + $answer->request = 'param_error'; + + }else + $answer->request = 'permission_error'; + break; + + /***********/ diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 0c2c76d..363ac97 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -57,7 +57,10 @@ class semestreRepo extends DBAccess{ */ public static function info($semestreUID){ // on considère que le semestre existe - $getSemestreInfo = DataBase::getPDO()->prepare("SELECT id_semestre as id, nom, rang, annee FROM semestre WHERE id_semestre = :semestreUID"); + $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as s.id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + "FROM semestre as s, formation as f ". + "WHERE s.formation = f.id_formation ". + "AND id_semestre = :semestreUID"); $getSemestreInfo->execute(array( ':semestreUID' => $semestreUID )); // on retourne le résultat en supprimant les doublons à indices numériques @@ -86,9 +89,10 @@ class semestreRepo extends DBAccess{ // on formate les variables $semestre_pair = ($semestre_pair) ? '0' : '1'; - $getSemestreUID = DataBase::getPDO()->prepare("SELECT s.id_semestre as id ". - "FROM semestre as s, appartenance as app ". - "WHERE app.id_semestre = s.id_semestre ". + $getSemestreUID = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.code as formation, f.nom as nom_formation ". + "FROM semestre as s, appartenance as app, formation as f ". + "WHERE s.formation = f.id_formation ". + "AND app.id_semestre = s.id_semestre ". "AND app.id_etudiant = :etudiant ". "AND s.annee = :annee ". @@ -116,9 +120,10 @@ class semestreRepo extends DBAccess{ * */ public static function forYear($annee){ - $getSemestreList = DataBase::getPDO()->prepare("SELECT id_semestre as id, nom, rang, annee ". - "FROM semestre ". - "WHERE annee = :annee ". + $getSemestreList = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + "FROM semestre as s, formation as f ". + "WHERE s.formation = f.id_formation ". + "AND annee = :annee ". "ORDER BY rang ASC"); $getSemestreList->execute(array( ':annee' => $annee )); diff --git a/page/modules.php b/page/modules.php index ce1a4ed..7fb7a7d 100755 --- a/page/modules.php +++ b/page/modules.php @@ -239,9 +239,9 @@ if( permission('admin') ){ // si l'utilisateur est un admin if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage echo ""; - echo ""; + echo ""; echo ''; - echo ''; + echo ''; echo ''; echo ''; echo ''; @@ -249,6 +249,7 @@ if( permission('admin') ){ // si l'utilisateur est un admin echo ''; echo ''; echo ''; + echo ''; echo ''; } @@ -289,8 +290,8 @@ if( permission('admin') ){ // si l'utilisateur est un admin modules_switch_level_1($request, $answer); - var_dump( $answer ); - + // var_dump( $answer ) +; if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// echo "
"; diff --git a/xdoc/sid.sql b/xdoc/sid.sql index 155cd24..5d36a16 100755 --- a/xdoc/sid.sql +++ b/xdoc/sid.sql @@ -3,7 +3,7 @@ -- http://www.phpmyadmin.net -- -- Client: localhost --- Généré le: Sam 14 Novembre 2015 à 18:33 +-- Généré le: Lun 16 Novembre 2015 à 12:42 -- Version du serveur: 5.5.46-0ubuntu0.14.04.2 -- Version de PHP: 5.5.9-1ubuntu4.14 @@ -56,15 +56,15 @@ CREATE TABLE IF NOT EXISTS `appartenance` ( -- INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_semestre`) VALUES -(1, 'mrd1609a', 6, 2), -(2, 'ihf1991a', 16, 4), +(1, 'mrd1609a', 2, 2), +(2, 'ihf1991a', 8, 4), (3, 'mma1990a', 13, 1), (4, 'lme1952a', 15, 3), (5, 'imf1922a', 21, 1), (6, 'gyy1983a', 4, 4), (7, 'otm1902a', 14, 2), (8, 'tnx1949a', 12, 4), -(9, 'sjl1937a', 12, 4), +(9, 'sjl1937a', 4, 4), (10, 'anj1991a', 16, 4), (11, 'xdh1989a', 20, 4), (12, 'agl1956a', 3, 3), @@ -80,8 +80,8 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (22, 'dtg1946a', 18, 2), (23, 'oxz1985a', 7, 3), (24, 'ono1984a', 14, 2), -(25, 'auy1966a', 3, 3), -(26, 'dui1946a', 5, 1), +(25, 'auy1966a', 15, 3), +(26, 'dui1946a', 1, 1), (27, 'cyw1979a', 24, 4), (28, 'pfv1965a', 3, 3), (29, 'oqz1937a', 24, 4), @@ -106,7 +106,7 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (48, 'xtb1903a', 11, 3), (49, 'msj1985a', 13, 1), (50, 'wvn1982a', 9, 1), -(51, 'psg1965a', 8, 4), +(51, 'psg1965a', 4, 4), (52, 'hpa1908a', 5, 1), (53, 'maq1980a', 19, 3), (54, 'agq1929a', 13, 1), @@ -138,7 +138,7 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (80, 'kfx1995a', 18, 2), (81, 'jgd1966a', 3, 3), (82, 'rwg1909a', 14, 2), -(83, 'ngw1997a', 1, 1), +(83, 'ngw1997a', 17, 1), (84, 'obg1973a', 2, 2), (85, 'hzg1935a', 12, 4), (86, 'iyh1918a', 3, 3), @@ -167,13 +167,13 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s CREATE TABLE IF NOT EXISTS `controle` ( `id_controle` int(11) NOT NULL AUTO_INCREMENT, `id_mcc_module` int(11) NOT NULL, - `intitule` varchar(50) NOT NULL, + `intitule` varchar(50) CHARACTER SET utf32 COLLATE utf32_unicode_ci NOT NULL, `base` int(11) NOT NULL, `coefficient` float NOT NULL, `date_publication` date NOT NULL, PRIMARY KEY (`id_controle`), KEY `id_mcc_module` (`id_mcc_module`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; -- -- RELATIONS POUR LA TABLE `controle`: @@ -195,7 +195,8 @@ INSERT INTO `controle` (`id_controle`, `id_mcc_module`, `intitule`, `base`, `coe (7, 4, 'Partiel 7', 20, 1, '2015-11-15'), (8, 4, 'Partiel 8', 20, 1, '2015-11-16'), (9, 5, 'Partiel 9', 20, 9, '2015-11-17'), -(10, 10, 'Partiel 10', 20, 10, '2015-11-18'); +(10, 10, 'Partiel 10', 20, 10, '2015-11-18'), +(11, 9, 'Controle de TP', 20, 20, '2015-11-19'); -- -------------------------------------------------------- @@ -233,6 +234,28 @@ INSERT INTO `enseignement` (`id_enseignement`, `id_enseignant`, `id_mcc_module`, -- -------------------------------------------------------- +-- +-- Structure de la table `formation` +-- + +CREATE TABLE IF NOT EXISTS `formation` ( + `id_formation` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, + `nom` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, + `nb_semestres` int(11) NOT NULL, + PRIMARY KEY (`id_formation`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; + +-- +-- Contenu de la table `formation` +-- + +INSERT INTO `formation` (`id_formation`, `code`, `nom`, `nb_semestres`) VALUES +(1, 'ITINN1', 'DUT 1A INFORMATIQUE', 2), +(2, 'ITINN2', 'DUT 2A INFORMATIQUE', 2); + +-- -------------------------------------------------------- + -- -- Structure de la table `groupe` -- @@ -406,7 +429,7 @@ CREATE TABLE IF NOT EXISTS `note` ( PRIMARY KEY (`id_note`), KEY `id_appartenance` (`id_appartenance`), KEY `id_controle` (`id_controle`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 ; -- -- RELATIONS POUR LA TABLE `note`: @@ -421,7 +444,7 @@ CREATE TABLE IF NOT EXISTS `note` ( -- INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUES -(11, 103, 1, 1), +(11, 103, 1, 15.25), (12, 54, 2, 2), (13, 103, 3, 3), (14, 103, 4, 4), @@ -431,7 +454,35 @@ INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUE (18, 103, 8, 8), (19, 103, 9, 9), (20, 20, 1, 19), -(21, 77, 1, 18); +(21, 77, 1, 19.75), +(22, 83, 1, 2.5), +(23, 91, 1, 3.5), +(24, 19, 1, 4.5), +(25, 58, 1, 5.25), +(26, 49, 2, 3), +(27, 87, 2, 4), +(28, 3, 2, 5), +(29, 74, 1, 14.75), +(30, 26, 1, 1.9), +(31, 97, 1, 10), +(32, 32, 1, 10), +(33, 50, 1, 10), +(34, 73, 1, 20), +(35, 52, 1, 20), +(36, 4, 10, 10), +(37, 56, 10, 1), +(38, 94, 10, 3), +(39, 64, 10, 2), +(40, 100, 10, 4), +(41, 23, 10, 5), +(42, 30, 10, 6), +(43, 103, 2, 1), +(44, 83, 2, 2), +(45, 91, 2, 3), +(46, 13, 1, 2), +(47, 67, 1, 0), +(48, 70, 1, 0.5), +(49, 5, 1, 1.75); -- -------------------------------------------------------- @@ -441,26 +492,34 @@ INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUE CREATE TABLE IF NOT EXISTS `semestre` ( `id_semestre` int(11) NOT NULL AUTO_INCREMENT, + `formation` int(11) NOT NULL, `nom` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `rang` tinyint(4) NOT NULL, `annee` year(4) NOT NULL, PRIMARY KEY (`id_semestre`), - UNIQUE KEY `rang` (`rang`,`annee`) + UNIQUE KEY `rang` (`rang`,`annee`), + KEY `id_formation` (`formation`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; +-- +-- RELATIONS POUR LA TABLE `semestre`: +-- `formation` +-- `formation` -> `id_formation` +-- + -- -- Contenu de la table `semestre` -- -INSERT INTO `semestre` (`id_semestre`, `nom`, `rang`, `annee`) VALUES -(1, 'S1', 1, 2015), -(2, 'S2', 2, 2015), -(3, 'S3', 3, 2015), -(4, 'S4', 4, 2015), -(5, 'S1', 1, 2016), -(6, 'S2', 2, 2016), -(7, 'S3', 3, 2016), -(8, 'S4', 4, 2016); +INSERT INTO `semestre` (`id_semestre`, `formation`, `nom`, `rang`, `annee`) VALUES +(1, 1, 'S1', 1, 2015), +(2, 1, 'S2', 2, 2015), +(3, 2, 'S3', 3, 2015), +(4, 2, 'S4', 4, 2015), +(5, 1, 'S1', 1, 2016), +(6, 1, 'S2', 2, 2016), +(7, 2, 'S3', 3, 2016), +(8, 2, 'S4', 4, 2016); -- -------------------------------------------------------- @@ -658,6 +717,12 @@ ALTER TABLE `note` ADD CONSTRAINT `note_id_appartenance` FOREIGN KEY (`id_appartenance`) REFERENCES `appartenance` (`id_appartenance`), ADD CONSTRAINT `note_id_controle` FOREIGN KEY (`id_controle`) REFERENCES `controle` (`id_controle`); +-- +-- Contraintes pour la table `semestre` +-- +ALTER TABLE `semestre` + ADD CONSTRAINT `semestre_id_formation` FOREIGN KEY (`formation`) REFERENCES `formation` (`id_formation`); + /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; \ No newline at end of file From 01334b44e6959a615054ec8a6cd05584fd351529 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 13:28:24 +0100 Subject: [PATCH 28/36] =?UTF-8?q?Affichage=20par=20semestre=20enseignant@m?= =?UTF-8?q?es=5Fmodules=20+=20admin@tous=5Fles=5Fmodules=20+=20enseignant@?= =?UTF-8?q?contr=C3=B4les?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/career.php | 8 +-- manager/database.php | 73 +++++++-------------- manager/modules.php | 10 +-- manager/repo/semestre.php | 31 ++++++++- manager/repo/ue.php | 14 ++--- page/_JS/career.js | 13 +++- page/career.php | 121 +++++++++++++++++++++++------------ page/modules.php | 129 +++++++++++++++++++++++++++++++------- 8 files changed, 266 insertions(+), 133 deletions(-) diff --git a/manager/career.php b/manager/career.php index 759d2ff..e1771c5 100755 --- a/manager/career.php +++ b/manager/career.php @@ -74,13 +74,13 @@ require_once __ROOT__.'/manager/database.php'; $anneeCheck = $enseignantCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons - $UEs = DataBase::getInstance()->getControlesEnseignant($request->enseignant, $_SESSION['semestre_pair'], $request->annee); + $semestreList = DataBase::getInstance()->getControlesEnseignant($request->enseignant, $_SESSION['semestre_pair'], $request->annee); - if( is_array($UEs) ){ // si on a bien un tableau - $answer->UEs = $UEs; // on renvoie dans answer->UEs + 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 = $UEs; // on retourne l'erreur + $answer->request = $semestreList; // on retourne l'erreur }else $answer->request = 'param_error'; diff --git a/manager/database.php b/manager/database.php index 2a9511d..af5c681 100755 --- a/manager/database.php +++ b/manager/database.php @@ -385,52 +385,21 @@ class DataBase{ // on vérifie que l'enseignant enseigne bien cette année if( !($enseignantUID=userRepo::UID($enseignant, null, $semestre_pair, $annee)) ) return 'unknown_teacher'; - $UEList = $this->getUEsEnseignant($enseignant, $semestre_pair, $annee); // on récupère la liste des UEs + // on récupère les semestres de cette année + $semestreList = semestreRepo::forTeacher($enseignantUID, $semestre_pair, $annee); - foreach($UEList as $iter=>$UE){ + foreach($semestreList as $iter_s=>$a){ + $semestreList[$iter_s]['UElist'] = ueRepo::forTeacher($enseignantUID, $semestreList[$iter_s]['id']); - // si on a l'UID enseignant & l'UE => on récupère les modules - $getModuleList = DataBase::getPDO()->prepare("SELECT DISTINCT m.id_module as id, m.nom as nom, m.libelle as libelle ". - "FROM enseignement as ens, semestre as s, ue, module as m, mcc_ue, mcc_module as mcc_m ". - "WHERE ens.id_mcc_module = mcc_m.id_mcc_module ". - "AND mcc_m.id_module = m.id_module ". - "AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ". - "AND mcc_ue.id_ue = ue.id_ue ". + foreach($semestreList[$iter_s]['UElist'] as $iter_u=>$b) + $semestreList[$iter_s]['UElist'][$iter_u]['modules'] = moduleRepo::forTeacher($enseignantUID, $semestreList[$iter_s]['UElist'][$iter_u]['id'], $semestreList[$iter_s]['id']); - "AND ens.id_enseignant = :enseignantUID ". - "AND ue.id_ue = :UEUID ". - "AND s.annee = :annee ". - "AND s.rang % 2 = :semestre_pair ". - "ORDER BY m.nom, m.libelle ASC"); - $getModuleList->execute(array( - ':enseignantUID' => $enseignantUID, - ':UEUID' => $UE['id'], - ':annee' => $annee, - ':semestre_pair' => ($semestre_pair) ? '0' : '1' - )); - - // on ajoute la liste des modules en supprimant les valeurs à indinces numériques - $UEList[$iter]['modules'] = DataBase::delNumeric( $getModuleList->fetchAll() ); } - return $UEList; + return $semestreList; } - /****************************************/ - /*** retourne les UEs d'un enseignant ***/ - /****************************************/ - public function getUEsEnseignant($enseignant, $semestre_pair, $annee){ - // on vérifie que l'enseignant enseigne bien cette année - if( !($enseignantUID=userRepo::UID($enseignant, null, $semestre_pair, $annee)) ) return 'unknown_teacher'; - - // on retourne la liste des UEs en supprimant les doublons à indices numériques - return ueRepo::forTeacher($enseignantUID, $semestre_pair, $annee); - } - - - - @@ -542,28 +511,34 @@ class DataBase{ public function getControlesEnseignant($enseignant, $semestre_pair, $annee){ // on vérifie que le semestre existe et que l'enseignant y enseigne if( !($enseignantUID=userRepo::UID($enseignant, null, $semestre_pair, $annee)) ) return 'unknown_teacher'; + debug(); + // on récupère les semestres de cette année + $semestreList = semestreRepo::forTeacher($enseignantUID, $semestre_pair, $annee); + foreach($semestreList as $iter_s=>$a){ - $UEList = ueRepo::forTeacher($enseignantUID, $semestre_pair, $annee); + $semestreList[$iter_s]['UElist'] = ueRepo::forTeacher($enseignantUID, $semestreList[$iter_s]['id']); - foreach($UEList as $iter_ue=>$a){ - $UEList[$iter_ue]['modules'] = moduleRepo::forTeacher($enseignantUID, $UEList[$iter_ue]['id'], $UEList[$iter_ue]['id_semestre']); + foreach($semestreList[$iter_s]['UElist'] as $iter_u=>$b){ + $semestreList[$iter_s]['UElist'][$iter_u]['modules'] = moduleRepo::forTeacher($enseignantUID, $semestreList[$iter_s]['UElist'][$iter_u]['id'], $semestreList[$iter_s]['id']); - foreach($UEList[$iter_ue]['modules'] as $iter_mod=>$b){ - $UEList[$iter_ue]['modules'][$iter_mod]['controles'] = controleRepo::forTeacher($enseignantUID, $UEList[$iter_ue]['modules'][$iter_mod]['id'], $UEList[$iter_ue]['id_semestre']); - - foreach($UEList[$iter_ue]['modules'][$iter_mod]['controles'] as $iter_ct=>$c){ - $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['grouplist'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + foreach($semestreList[$iter_s]['UElist'][$iter_u]['modules'] as $iter_m=>$c){ + $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']); - $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['moyenne'] = noteRepo::moyenneForControle($UEList[$iter_ue]['modules'][$iter_mod]['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 $UEList; + return $semestreList; } diff --git a/manager/modules.php b/manager/modules.php index 5d6c2e5..0fdf249 100755 --- a/manager/modules.php +++ b/manager/modules.php @@ -82,16 +82,16 @@ require_once __ROOT__.'/manager/database.php'; $anneeCheck = $enseignantCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons - $UEList = DataBase::getInstance()->getModulesByUEByEnseignant($request->enseignant, $_SESSION['semestre_pair'], $request->annee); + $semestreList = DataBase::getInstance()->getModulesByUEByEnseignant($request->enseignant, $_SESSION['semestre_pair'], $request->annee); // STRUCTURE // tableau d'UES contenant un tableau de MODULES - if( is_array($UEList) ){ // si on a bien un tableau - $answer->UEs = $UEList; // on renvoie dans answer->ues + if( is_array($semestreList) ){ // si on a bien un tableau + $answer->semestres = $semestreList; // on renvoie dans answer->ues $answer->request = 'success'; // et on renvoie success }else // sinon si c'est pas un tableau - $answer->request = $UEList; // on retourne l'erreur + $answer->request = $semestreList; // on retourne l'erreur }else $answer->request = 'param_error'; @@ -121,7 +121,7 @@ require_once __ROOT__.'/manager/database.php'; $answer->semestres = $semestreList; // on renvoie dans answer->ues $answer->request = 'success'; // et on renvoie success }else // sinon si c'est pas un tableau - $answer->request = $UEList; // on retourne l'erreur + $answer->request = $semestreList; // on retourne l'erreur }else $answer->request = 'param_error'; diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 363ac97..6e1a027 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -110,6 +110,35 @@ class semestreRepo extends DBAccess{ + /* retourne la liste des semestres qu'à un enseignant + * + * @enseignant l'UID de l'enseignant en question + * @semestre_pair VRAI si le semestre en cours est pair + * @annee l'année en question + * + * + * @return semestres retourne la liste des semestres répondant aux critères + * @return FALSE retourne FALSE si aucun semestre ne correspond aux critères + * + */ + public static function forTeacher($enseignant, $semestre_pair, $annee){ + $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + "FROM semestre as s, formation as f, enseignement as ens, mcc_module as mcc_m, mcc_ue ". + "WHERE s.id_semestre = mcc_ue.id_semestre ". // semestre <-> mcc_ue + "AND s.formation = f.id_formation ". // semestre <-> formation + "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". // mcc_ue <-> mcc_module + "AND mcc_m.id_mcc_module = ens.id_mcc_module ". // mcc_module <-> enseignement + + "AND ens.id_enseignant = :enseignant ". + "AND s.rang % 2 = :semestre_pair ". + "AND s.annee = :annee ". + "ORDER BY s.rang ASC"); + $getSemestreList->execute(array( ':enseignant' => $enseignant, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + + return DataBase::delNumeric( $getSemestreList->fetchAll() ); + } + + /* retourne la liste des semestres d'une année * * @annee l'année en question @@ -120,7 +149,7 @@ class semestreRepo extends DBAccess{ * */ public static function forYear($annee){ - $getSemestreList = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". "FROM semestre as s, formation as f ". "WHERE s.formation = f.id_formation ". "AND annee = :annee ". diff --git a/manager/repo/ue.php b/manager/repo/ue.php index 733c9bb..9be1d26 100755 --- a/manager/repo/ue.php +++ b/manager/repo/ue.php @@ -73,16 +73,15 @@ class ueRepo extends DBAccess{ - /* RENVOIE LA LISTE DES UEs QU'ENSEIGNE UN ENSEIGNANT POUR UNE ANNEE + /* RENVOIE LA LISTE DES UEs QU'ENSEIGNE UN ENSEIGNANT POUR UN SEMESTRE * * @enseignant Identifiant de l'enseignant - * @semestre_pair VRAI si le semestre est pair - * @annee l'année en cours + * @semestre l'UID du semestre en question * - * @return UEs retourne un tableau contenant les UEs de l'enseignant pour cette année + * @return UEs retourne un tableau contenant les UEs de l'enseignant pour ce semestre * */ - public static function forTeacher($enseignant, $semestre_pair, $annee){ + public static function forTeacher($enseignant, $semestre){ // on récupère les modules $getUesForTeacher = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". "FROM enseignement as ens, semestre as s, ue, mcc_ue, mcc_module as mcc_m ". @@ -93,11 +92,10 @@ class ueRepo extends DBAccess{ "AND mcc_ue.id_ue = ue.id_ue ". "AND ens.id_enseignant = :enseignant ". - "AND s.rang % 2 = :semestre_pair ". - "AND s.annee = :annee ". + "AND s.id_semestre = :semestre ". "ORDER BY ue.nom, ue.libelle ASC"); - $getUesForTeacher->execute(array( ':enseignant' => $enseignant, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + $getUesForTeacher->execute(array( ':enseignant' => $enseignant, ':semestre' => $semestre )); return DataBase::delNumeric( $getUesForTeacher->fetchAll() ); } diff --git a/page/_JS/career.js b/page/_JS/career.js index 1bd63b7..e68d675 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -5,16 +5,23 @@ /********************************/ /* GESTION DE L'AFFINAGE PAR UE */ /********************************/ -var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE]"); +var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre]"); for( var i = 0 ; i < partList.length ; i++ ){ partList[i].addEventListener('click', function(e){ var tableauParent = e.target.parentNode.parentNode.parentNode; - if( tableauParent.tagName == 'TABLE' && tableauParent.getAttribute('name') == 'UE' && e.target.dataset.hasOwnProperty('value') ){ - pageM.vars[1] = 'u:'+e.target.dataset.value; + if( tableauParent.tagName == 'TABLE' && e.target.dataset.hasOwnProperty('value') ){ + /* SI c'est une affinage par SEMESTRE */ + if( tableauParent.getAttribute('name') == 'semestre' ) + pageM.vars[1] = 's:'+e.target.dataset.value; + + /* SI c'est un affinage par UE */ + if( tableauParent.getAttribute('name') == 'UE' ) + pageM.vars[1] = 'u:'+e.target.dataset.value; + // si on a '*' comme valeur, on l'enlève if( /\*$/.test(pageM.vars[1]) ) pageM.vars.pop(); diff --git a/page/career.php b/page/career.php index 2ba187e..ff565cf 100755 --- a/page/career.php +++ b/page/career.php @@ -5,8 +5,6 @@ require_once __ROOT__.'/manager/modules.php'; require_once __ROOT__.'/manager/career.php'; - - /*** GESTION DES PARAMETRES OPTIONNELS ***/ // on initialise les paramètres optionnels @@ -14,6 +12,7 @@ require_once __ROOT__.'/manager/career.php'; $groupeOpt = null; $etudiantOpt = null; $ueOpt = null; + $semestreOpt = null; // on cherche dans toutes les variables _get si on trouve des paramètres foreach($_POST as $k=>$v){ @@ -21,21 +20,25 @@ require_once __ROOT__.'/manager/career.php'; if( preg_match('/^g:(.+)$/', $k, $m) ) // g:nomGroupe $groupeOpt = $m[1]; - if( preg_match('/^c:(.+)$/', $k, $m) ) // s:nomSemestre + if( preg_match('/^c:(.+)$/', $k, $m) ) // c:idControle $controleOpt = $m[1]; - if( preg_match('/^e:(.+)$/', $k, $m) ) // s:nomSemestre + if( preg_match('/^e:(.+)$/', $k, $m) ) // e:idEtudiant $etudiantOpt = $m[1]; - if( preg_match('/^u:(.+)$/', $k, $m) ) // s:nomSemestre + if( preg_match('/^u:(.+)$/', $k, $m) ) // u:nomUe $ueOpt = $m[1]; + if( preg_match('/^s:(.+)$/', $k, $m) ) // s:nomSemestre + $semestreOpt = $m[1]; + } $controleOpt = ($controleOpt == null || $controleOpt == '*') ? null : $controleOpt; $groupeOpt = ($groupeOpt == null || $groupeOpt == '*') ? null : $groupeOpt; $etudiantOpt = ($etudiantOpt == null || $etudiantOpt == '*') ? null : $etudiantOpt; $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; + $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; /**************************************** * * @@ -63,7 +66,6 @@ require_once __ROOT__.'/manager/career.php'; if( permission('student') ){ // si l'utilisateur est connecté et que c'est un élève $request = new stdClass(); $answer = new stdClass(); - debug(); $request->level_1 = 'getNotesEtudiant'; $request->etudiant = $_SESSION['identifiant']; @@ -157,7 +159,6 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e $request->level_1 = 'getControlesEnseignant'; $request->enseignant = $_SESSION['identifiant']; - $request->semestre = $_SESSION['semestre']; $request->annee = $_SESSION['annee']; career_switch_level_1($request, $answer); @@ -167,61 +168,101 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo "
"; + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeNomsSemestres = array(); + $ListeNomsUE = array(); + foreach($answer->semestres as $semestre){ + array_push( $ListeNomsSemestres, $semestre['nom'] ); + + /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ + foreach($semestre['UElist'] as $UE) + array_push( $ListeNomsUE, $UE['nom'] ); + } + + $ListeNomsSemestres = array_unique($ListeNomsSemestres); + $ListeNomsUE = array_unique($ListeNomsUE); + + echo "
'.$semestre['nom'].' - '.$UE['nom'].' - '.$UE['libelle'].''.$semestre['nom_formation'].' - '.$semestre['nom'].'
'.$MODULE['nom'].''.$MODULE['libelle'].''.$UE['nom'].' - '.$UE['libelle'].'
"; + if( $semestreOpt == null ) echo ""; + else echo ""; + + foreach($ListeNomsSemestres as $NomSemestre) + if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
TousTous".$NomSemestre.'".$NomSemestre.'
"; + + + + + echo ""; if( $ueOpt == null ) echo ""; else echo ""; - foreach($answer->UEs as $UE) - if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné - echo "'; + foreach($ListeNomsUE as $NomUE) + if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné + echo "'; else // sinon on affiche normalement - echo "'; + echo "'; echo "
TousTous".$UE['nom'].'".$NomUE.'".$UE['nom'].'".$NomUE.'
"; - if( count($answer->UEs) > 0 ){ // si au moins un UE - foreach($answer->UEs as $UE){ // pour chaque UE - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL + if( count($answer->semestres) > 0 ){ // si au moins un UE - if( count($UE['modules']) > 0 ){ // s'il y a au moins un module + foreach($answer->semestres as $semestre){ - foreach($UE['modules'] as $module){ // pour chaque module - echo ""; - echo ''; + if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage - if( count($module['controles']) > 0 ){ // s'il y a au moins un contrôle pour ce module + foreach($semestre['UElist'] as $UE){ // pour chaque UE - foreach($module['controles'] as $controle){ // pour chaque contrôle + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL - echo ''; - echo ""; - - echo ""; + if( count($UE['modules']) > 0 ){ // s'il y a au moins un module - if( $controle['moyenne'] == null ) // si il y a au moins une note pour ce contrôle - echo ''; - else - echo ''; - // echo ''; - - echo ''; - echo ''; - - // echo "'; + foreach($UE['modules'] as $module){ // pour chaque module + echo "
'.$UE['nom'].' - '.$module['nom'].' - '.$module['libelle'].'
".$controle['intitule']."".$module['nom']." - ".$module['libelle']."Pas notéMoyenne de '.number_format($controle['moyenne'], 2).' / '.$controle['base'].''.number_format($controle['moyenne'], 2).'Coefficient '.number_format($controle['coefficient'], 2).'
"; - // 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 ''; } - }else // si aucun contrôle pour ce module - echo ""; + } + echo '
'.$semestre['nom_formation'].' - '.$semestre['nom'].'
".$controle['intitule']."".$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é
Aucun contrôle trouvé
'; - echo ''; } - } - echo ''; } + } } diff --git a/page/modules.php b/page/modules.php index 7fb7a7d..2783814 100755 --- a/page/modules.php +++ b/page/modules.php @@ -102,6 +102,28 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un + + + + + + + + + + + + + + + + + + + + + + "; + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeNomsSemestres = array(); + $ListeNomsUE = array(); + foreach($answer->semestres as $semestre){ + array_push( $ListeNomsSemestres, $semestre['nom'] ); + + /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ + foreach($semestre['UElist'] as $UE) + array_push( $ListeNomsUE, $UE['nom'] ); + } + + $ListeNomsSemestres = array_unique($ListeNomsSemestres); + $ListeNomsUE = array_unique($ListeNomsUE); + + echo ""; + if( $semestreOpt == null ) echo ""; + else echo ""; + + foreach($ListeNomsSemestres as $NomSemestre) + if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
TousTous".$NomSemestre.'".$NomSemestre.'
"; + + + + echo ""; if( $ueOpt == null ) echo ""; else echo ""; - foreach($answer->UEs as $UE) - if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné - echo "'; + foreach($ListeNomsUE as $NomUE) + if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné + echo "'; else // sinon on affiche normalement - echo "'; + echo "'; echo "
TousTous".$UE['nom'].'".$NomUE.'".$UE['nom'].'".$NomUE.'
"; - foreach($answer->UEs as $UE){ - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ - - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } - - echo ''; - echo '
'.$UE['semestre'].' - '.$UE['nom'].' - '.$UE['libelle'].'
'.$MODULE['nom'].''.$MODULE['libelle'].'
'; + foreach($answer->semestres as $semestre){ + + if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage + + foreach($semestre['UElist'] as $UE){ + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage + + echo ""; + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + foreach($UE['modules'] as $MODULE){ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo '
'.$semestre['nom_formation'].' - '.$semestre['nom'].'
'.$MODULE['nom'].''.$MODULE['libelle'].''.$UE['nom'].' - '.$UE['libelle'].'
'; + + } + } } + } //////////////////////////////////////////////////////////////////////////////// echo '
'; @@ -168,6 +228,29 @@ if( permission('teacher') ){ // si l'utilisateur est un prof + + + + + + + + + + + + + + + + + + + + + + + Date: Mon, 16 Nov 2015 17:03:16 +0100 Subject: [PATCH 29/36] Affinage par @formation pour enseignant@modules + admin@modules --- page/_JS/modules.js | 20 +++++++++--- page/modules.php | 76 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 78 insertions(+), 18 deletions(-) diff --git a/page/_JS/modules.js b/page/_JS/modules.js index 87903cd..14cfbe8 100644 --- a/page/_JS/modules.js +++ b/page/_JS/modules.js @@ -5,7 +5,7 @@ /********************************/ /* GESTION DE L'AFFINAGE PAR UE */ /********************************/ -var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre]"); +var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre], #CONTAINER > section[name] > table.partlist[name=formation]"); for( var i = 0 ; i < partList.length ; i++ ){ @@ -14,16 +14,28 @@ for( var i = 0 ; i < partList.length ; i++ ){ if( tableauParent.tagName == 'TABLE' && e.target.dataset.hasOwnProperty('value') ){ + /* SI c'est une affinage par FORMATION */ + if( tableauParent.getAttribute('name') == 'formation' ){ + pageM.vars[1] = 'f:'+e.target.dataset.value; + if( pageM.vars.length > 2 ) // si un deuxième affinage existe, on le supprime lors du choix de la formation + pageM.vars.pop(); + } + /* SI c'est une affinage par SEMESTRE */ if( tableauParent.getAttribute('name') == 'semestre' ) - pageM.vars[1] = 's:'+e.target.dataset.value; + pageM.vars[2] = 's:'+e.target.dataset.value; /* SI c'est un affinage par UE */ if( tableauParent.getAttribute('name') == 'UE' ) - pageM.vars[1] = 'u:'+e.target.dataset.value; + pageM.vars[2] = 'u:'+e.target.dataset.value; + + // si la formation n'est pas définie, on l'active + if( !/^f:/.test(pageM.vars[1]) ) + pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] option[data-value].active').dataset.formation; + // si on a '*' comme valeur, on l'enlève - if( /\*$/.test(pageM.vars[1]) ) + if( /\*$/.test(pageM.vars[2]) ) pageM.vars.pop(); reload(); diff --git a/page/modules.php b/page/modules.php index 2783814..a2fba9f 100755 --- a/page/modules.php +++ b/page/modules.php @@ -7,8 +7,9 @@ require_once __ROOT__.'/manager/modules.php'; /*** GESTION DES PARAMETRES OPTIONNELS ***/ // on initialise les paramètres optionnels - $ueOpt = null; - $semestreOpt = null; + $ueOpt = null; + $semestreOpt = null; + $formationOpt = null; // on cherche dans toutes les variables _get si on trouve des paramètres foreach($_POST as $k=>$v){ @@ -19,10 +20,14 @@ require_once __ROOT__.'/manager/modules.php'; if( preg_match('/^u:(.+)$/', $k, $m) ) // u:nomUE $ueOpt = $m[1]; + if( preg_match('/^f:(.+)$/', $k, $m) ) // f:codeFormation + $formationOpt = $m[1]; + } - $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; - $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; + $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; + $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; + $formationOpt = ($formationOpt == null || $formationOpt == '*') ? null : $formationOpt; /**************************************** @@ -146,18 +151,41 @@ if( permission('teacher') ){ // si l'utilisateur est un prof /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ $ListeNomsSemestres = array(); + $ListeNomsFormations = array(); $ListeNomsUE = array(); - foreach($answer->semestres as $semestre){ + + // on selectionne les formations présentes + foreach($answer->semestres as $semestre) + array_push( $ListeNomsFormations, $semestre['formation'] ); + + // si la formation optionnelle n'est pas définie ou pas dans la liste, on la définit + $ListeNomsFormations = array_unique($ListeNomsFormations); + if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; + + + foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ array_push( $ListeNomsSemestres, $semestre['nom'] ); /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ foreach($semestre['UElist'] as $UE) array_push( $ListeNomsUE, $UE['nom'] ); - } + }} $ListeNomsSemestres = array_unique($ListeNomsSemestres); $ListeNomsUE = array_unique($ListeNomsUE); + + + echo ""; + foreach($ListeNomsFormations as $NomFormation) + if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
".$NomFormation.'".$NomFormation.'
"; + + + echo ""; if( $semestreOpt == null ) echo ""; else echo ""; @@ -171,8 +199,6 @@ if( permission('teacher') ){ // si l'utilisateur est un prof - - echo "
TousTous
"; if( $ueOpt == null ) echo ""; else echo ""; @@ -186,9 +212,10 @@ if( permission('teacher') ){ // si l'utilisateur est un prof + foreach($answer->semestres as $semestre){ - if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage + if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage foreach($semestre['UElist'] as $UE){ @@ -273,18 +300,41 @@ if( permission('admin') ){ // si l'utilisateur est un admin /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ $ListeNomsSemestres = array(); + $ListeNomsFormations = array(); $ListeNomsUE = array(); - foreach($answer->semestres as $semestre){ + + // on selectionne les formations présentes + foreach($answer->semestres as $semestre) + array_push( $ListeNomsFormations, $semestre['formation'] ); + + // si la formation optionnelle n'est pas définie, on la définit + $ListeNomsFormations = array_unique($ListeNomsFormations); + if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; + + + foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ array_push( $ListeNomsSemestres, $semestre['nom'] ); /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ foreach($semestre['UElist'] as $UE) array_push( $ListeNomsUE, $UE['nom'] ); - } + }} $ListeNomsSemestres = array_unique($ListeNomsSemestres); $ListeNomsUE = array_unique($ListeNomsUE); + + + echo "
TousTous
"; + foreach($ListeNomsFormations as $NomFormation) + if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
".$NomFormation.'".$NomFormation.'
"; + + + echo ""; if( $semestreOpt == null ) echo ""; else echo ""; @@ -298,8 +348,6 @@ if( permission('admin') ){ // si l'utilisateur est un admin - - echo "
TousTous
"; if( $ueOpt == null ) echo ""; else echo ""; @@ -315,7 +363,7 @@ if( permission('admin') ){ // si l'utilisateur est un admin foreach($answer->semestres as $semestre){ - if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage + if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage foreach($semestre['UElist'] as $UE){ From d6d10b99fcb597dd94e0ce1c981ce70d33d2db52 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 19:07:39 +0100 Subject: [PATCH 30/36] =?UTF-8?q?Ajout=20affinage=20par=20formation=20ense?= =?UTF-8?q?igant@contr=C3=B4les?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- page/_JS/career.js | 21 +++++++++++++++++---- page/_JS/modules.js | 5 ++--- page/career.php | 46 +++++++++++++++++++++++++++++++++++---------- 3 files changed, 55 insertions(+), 17 deletions(-) diff --git a/page/_JS/career.js b/page/_JS/career.js index e68d675..f95f7cf 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -5,7 +5,7 @@ /********************************/ /* GESTION DE L'AFFINAGE PAR UE */ /********************************/ -var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre]"); +var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre], #CONTAINER > section[name] > table.partlist[name=formation]"); for( var i = 0 ; i < partList.length ; i++ ){ @@ -14,16 +14,29 @@ for( var i = 0 ; i < partList.length ; i++ ){ if( tableauParent.tagName == 'TABLE' && e.target.dataset.hasOwnProperty('value') ){ + /* SI c'est une affinage par FORMATION */ + if( tableauParent.getAttribute('name') == 'formation' ){ + pageM.vars[1] = 'f:'+e.target.dataset.value; + if( pageM.vars.length > 2 ) // si un deuxième affinage existe, on le supprime lors du choix de la formation + pageM.vars.pop(); + } + /* SI c'est une affinage par SEMESTRE */ if( tableauParent.getAttribute('name') == 'semestre' ) - pageM.vars[1] = 's:'+e.target.dataset.value; + pageM.vars[2] = 's:'+e.target.dataset.value; /* SI c'est un affinage par UE */ if( tableauParent.getAttribute('name') == 'UE' ) - pageM.vars[1] = 'u:'+e.target.dataset.value; + pageM.vars[2] = 'u:'+e.target.dataset.value; + + // si la formation n'est pas définie, on l'active + if( !/^f:/.test(pageM.vars[1]) ) + if( document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active') != null ) + pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active').dataset.value; + // si on a '*' comme valeur, on l'enlève - if( /\*$/.test(pageM.vars[1]) ) + if( /\*$/.test(pageM.vars[2]) ) pageM.vars.pop(); reload(); diff --git a/page/_JS/modules.js b/page/_JS/modules.js index 14cfbe8..3229198 100644 --- a/page/_JS/modules.js +++ b/page/_JS/modules.js @@ -32,7 +32,8 @@ for( var i = 0 ; i < partList.length ; i++ ){ // si la formation n'est pas définie, on l'active if( !/^f:/.test(pageM.vars[1]) ) - pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] option[data-value].active').dataset.formation; + if( document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active') != null ) + pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active').dataset.value; // si on a '*' comme valeur, on l'enlève if( /\*$/.test(pageM.vars[2]) ) @@ -44,6 +45,4 @@ for( var i = 0 ; i < partList.length ; i++ ){ } - - --> \ No newline at end of file diff --git a/page/career.php b/page/career.php index ff565cf..8c643ac 100755 --- a/page/career.php +++ b/page/career.php @@ -8,11 +8,12 @@ require_once __ROOT__.'/manager/career.php'; /*** GESTION DES PARAMETRES OPTIONNELS ***/ // on initialise les paramètres optionnels - $controleOpt = null; - $groupeOpt = null; - $etudiantOpt = null; - $ueOpt = null; - $semestreOpt = null; + $controleOpt = null; + $groupeOpt = null; + $etudiantOpt = null; + $ueOpt = null; + $semestreOpt = null; + $formationOpt = null; // on cherche dans toutes les variables _get si on trouve des paramètres foreach($_POST as $k=>$v){ @@ -32,6 +33,9 @@ require_once __ROOT__.'/manager/career.php'; if( preg_match('/^s:(.+)$/', $k, $m) ) // s:nomSemestre $semestreOpt = $m[1]; + if( preg_match('/^f:(.+)$/', $k, $m) ) // f:codeFormation + $formationOpt = $m[1]; + } $controleOpt = ($controleOpt == null || $controleOpt == '*') ? null : $controleOpt; @@ -39,6 +43,7 @@ require_once __ROOT__.'/manager/career.php'; $etudiantOpt = ($etudiantOpt == null || $etudiantOpt == '*') ? null : $etudiantOpt; $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; + $formationOpt = ($formationOpt == null || $formationOpt == '*') ? null : $formationOpt; /**************************************** * * @@ -170,18 +175,41 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ $ListeNomsSemestres = array(); + $ListeNomsFormations = array(); $ListeNomsUE = array(); - foreach($answer->semestres as $semestre){ + + // on selectionne les formations présentes + foreach($answer->semestres as $semestre) + array_push( $ListeNomsFormations, $semestre['formation'] ); + + // si la formation optionnelle n'est pas définie ou pas dans la liste, on la définit + $ListeNomsFormations = array_unique($ListeNomsFormations); + if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; + + + foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ array_push( $ListeNomsSemestres, $semestre['nom'] ); /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ foreach($semestre['UElist'] as $UE) array_push( $ListeNomsUE, $UE['nom'] ); - } + }} $ListeNomsSemestres = array_unique($ListeNomsSemestres); $ListeNomsUE = array_unique($ListeNomsUE); + + + echo "
TousTous
"; + foreach($ListeNomsFormations as $NomFormation) + if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
".$NomFormation.'".$NomFormation.'
"; + + + echo ""; if( $semestreOpt == null ) echo ""; else echo ""; @@ -195,8 +223,6 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e - - echo "
TousTous
"; if( $ueOpt == null ) echo ""; else echo ""; @@ -214,7 +240,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e foreach($answer->semestres as $semestre){ - if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage + if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage foreach($semestre['UElist'] as $UE){ // pour chaque UE From b84a064fb414a233f32cab567b66978ce0c0de9f Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 21:42:00 +0100 Subject: [PATCH 31/36] =?UTF-8?q?M=C3=A0j=20BDD=20ajout=20de=20la=20table?= =?UTF-8?q?=20FORMATION=20+=20refactor=20de=20page/career=20+=20page/modul?= =?UTF-8?q?es=20en=20utilisant=20maintenant=20les=20identifiants=20uniques?= =?UTF-8?q?=20de=20BDD=20(pour=20formations,=20semestre,=20UE)=20afin=20de?= =?UTF-8?q?=20permettre=20des=20UEs=20de=20m=C3=AAme=20nom=20(=C3=A0=20tra?= =?UTF-8?q?vers=20diff=C3=A9rentes=20formations)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 6 +- manager/repo/semestre.php | 16 +-- page/career.php | 108 +++++++++++-------- page/modules.php | 219 +++++++++++++++++++++++--------------- xdoc/sid.sql | 31 +++--- 5 files changed, 232 insertions(+), 148 deletions(-) diff --git a/css/global.css b/css/global.css index fe219f9..ea808f2 100755 --- a/css/global.css +++ b/css/global.css @@ -338,12 +338,14 @@ body.trHoverActivated tr:hover td .confirm.active{ /* @radius */ #CONTAINER > section > .partlist td:first-child{ - border-radius: 5px 0 0 5px; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; } /* @border + @radius */ #CONTAINER > section > .partlist td:last-child{ - border-radius: 0 5px 5px 0; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; border-right: 1px solid #2dcc70; } diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 6e1a027..0584eab 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -57,9 +57,9 @@ class semestreRepo extends DBAccess{ */ public static function info($semestreUID){ // on considère que le semestre existe - $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as s.id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as s.id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". "FROM semestre as s, formation as f ". - "WHERE s.formation = f.id_formation ". + "WHERE s.id_formation = f.id_formation ". "AND id_semestre = :semestreUID"); $getSemestreInfo->execute(array( ':semestreUID' => $semestreUID )); @@ -89,9 +89,9 @@ class semestreRepo extends DBAccess{ // on formate les variables $semestre_pair = ($semestre_pair) ? '0' : '1'; - $getSemestreUID = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.code as formation, f.nom as nom_formation ". + $getSemestreUID = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation ". "FROM semestre as s, appartenance as app, formation as f ". - "WHERE s.formation = f.id_formation ". + "WHERE s.id_formation = f.id_formation ". "AND app.id_semestre = s.id_semestre ". "AND app.id_etudiant = :etudiant ". @@ -122,10 +122,10 @@ class semestreRepo extends DBAccess{ * */ public static function forTeacher($enseignant, $semestre_pair, $annee){ - $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". "FROM semestre as s, formation as f, enseignement as ens, mcc_module as mcc_m, mcc_ue ". "WHERE s.id_semestre = mcc_ue.id_semestre ". // semestre <-> mcc_ue - "AND s.formation = f.id_formation ". // semestre <-> formation + "AND s.id_formation = f.id_formation ". // semestre <-> formation "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". // mcc_ue <-> mcc_module "AND mcc_m.id_mcc_module = ens.id_mcc_module ". // mcc_module <-> enseignement @@ -149,9 +149,9 @@ class semestreRepo extends DBAccess{ * */ public static function forYear($annee){ - $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". "FROM semestre as s, formation as f ". - "WHERE s.formation = f.id_formation ". + "WHERE s.id_formation = f.id_formation ". "AND annee = :annee ". "ORDER BY rang ASC"); $getSemestreList->execute(array( ':annee' => $annee )); diff --git a/page/career.php b/page/career.php index 8c643ac..9ed0d42 100755 --- a/page/career.php +++ b/page/career.php @@ -174,64 +174,88 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ - $ListeNomsSemestres = array(); - $ListeNomsFormations = array(); - $ListeNomsUE = array(); + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDUE = array(); - // on selectionne les formations présentes - foreach($answer->semestres as $semestre) - array_push( $ListeNomsFormations, $semestre['formation'] ); - - // si la formation optionnelle n'est pas définie ou pas dans la liste, on la définit - $ListeNomsFormations = array_unique($ListeNomsFormations); - if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; - - - foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ - array_push( $ListeNomsSemestres, $semestre['nom'] ); - - /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ - foreach($semestre['UElist'] as $UE) - array_push( $ListeNomsUE, $UE['nom'] ); - }} - - $ListeNomsSemestres = array_unique($ListeNomsSemestres); - $ListeNomsUE = array_unique($ListeNomsUE); + // 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 "
TousTous
"; - foreach($ListeNomsFormations as $NomFormation) - if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - 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 "
".$NomFormation.'".$NomFormation.'".$semestre['formation'].'".$semestre['formation'].'
"; + + /*************************/ + /* AFFINAGE PAR SEMESTRE */ + /*************************/ echo ""; - if( $semestreOpt == null ) echo ""; - else echo ""; - - foreach($ListeNomsSemestres as $NomSemestre) - if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - 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 ""; // ajouter un semestre echo "
TousTous".$NomSemestre.'".$NomSemestre.'TousTous".$semestre['nom'].'".$semestre['nom'].'+
"; + + /*******************/ + /* AFFINAGE PAR UE */ + /*******************/ echo ""; if( $ueOpt == null ) echo ""; else echo ""; - - foreach($ListeNomsUE as $NomUE) - if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné - 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 "'; + echo "'; + + // on ajoute l'UE à la liste pour ne pas le répéter + array_push($ListeUIDUE, $UE['id']); + }} + }} + echo ""; // ajouter un UE echo "
TousTous".$NomUE.'".$UE['nom'].'".$NomUE.'".$UE['nom'].'+
"; @@ -240,11 +264,11 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e foreach($answer->semestres as $semestre){ - if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage + 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['nom'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL + 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 diff --git a/page/modules.php b/page/modules.php index a2fba9f..539b3d7 100755 --- a/page/modules.php +++ b/page/modules.php @@ -150,64 +150,88 @@ if( permission('teacher') ){ // si l'utilisateur est un prof echo "
"; /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ - $ListeNomsSemestres = array(); - $ListeNomsFormations = array(); - $ListeNomsUE = array(); + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDUE = array(); - // on selectionne les formations présentes - foreach($answer->semestres as $semestre) - array_push( $ListeNomsFormations, $semestre['formation'] ); - - // si la formation optionnelle n'est pas définie ou pas dans la liste, on la définit - $ListeNomsFormations = array_unique($ListeNomsFormations); - if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; - - - foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ - array_push( $ListeNomsSemestres, $semestre['nom'] ); - - /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ - foreach($semestre['UElist'] as $UE) - array_push( $ListeNomsUE, $UE['nom'] ); - }} - - $ListeNomsSemestres = array_unique($ListeNomsSemestres); - $ListeNomsUE = array_unique($ListeNomsUE); + // 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($ListeNomsFormations as $NomFormation) - if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - 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 "
".$NomFormation.'".$NomFormation.'".$semestre['formation'].'".$semestre['formation'].'
"; + + /*************************/ + /* AFFINAGE PAR SEMESTRE */ + /*************************/ echo ""; - if( $semestreOpt == null ) echo ""; - else echo ""; - - foreach($ListeNomsSemestres as $NomSemestre) - if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - 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 ""; // ajouter un semestre echo "
TousTous".$NomSemestre.'".$NomSemestre.'TousTous".$semestre['nom'].'".$semestre['nom'].'+
"; + + /*******************/ + /* AFFINAGE PAR UE */ + /*******************/ echo ""; if( $ueOpt == null ) echo ""; else echo ""; - - foreach($ListeNomsUE as $NomUE) - if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné - 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 "'; + echo "'; + + // on ajoute l'UE à la liste pour ne pas le répéter + array_push($ListeUIDUE, $UE['id']); + }} + }} + echo ""; // ajouter un UE echo "
TousTous".$NomUE.'".$UE['nom'].'".$NomUE.'".$UE['nom'].'+
"; @@ -215,11 +239,11 @@ if( permission('teacher') ){ // si l'utilisateur est un prof foreach($answer->semestres as $semestre){ - if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage + 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){ - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage + if( $ueOpt == null || $UE['id'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage echo ""; echo ""; @@ -293,81 +317,108 @@ if( permission('admin') ){ // si l'utilisateur est un admin modules_switch_level_1($request, $answer); + if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// echo "
"; /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ - $ListeNomsSemestres = array(); - $ListeNomsFormations = array(); - $ListeNomsUE = array(); + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDUE = array(); - // on selectionne les formations présentes - foreach($answer->semestres as $semestre) - array_push( $ListeNomsFormations, $semestre['formation'] ); - - // si la formation optionnelle n'est pas définie, on la définit - $ListeNomsFormations = array_unique($ListeNomsFormations); - if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; - - - foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ - array_push( $ListeNomsSemestres, $semestre['nom'] ); - - /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ - foreach($semestre['UElist'] as $UE) - array_push( $ListeNomsUE, $UE['nom'] ); - }} - - $ListeNomsSemestres = array_unique($ListeNomsSemestres); - $ListeNomsUE = array_unique($ListeNomsUE); + // 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($ListeNomsFormations as $NomFormation) - if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - 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 "
".$NomFormation.'".$NomFormation.'".$semestre['formation'].'".$semestre['formation'].'
"; + + + + /*************************/ + /* AFFINAGE PAR SEMESTRE */ + /*************************/ echo ""; - if( $semestreOpt == null ) echo ""; - else echo ""; - - foreach($ListeNomsSemestres as $NomSemestre) - if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - 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 ""; // ajouter un semestre echo "
TousTous".$NomSemestre.'".$NomSemestre.'TousTous".$semestre['nom'].'".$semestre['nom'].'+
"; + + /*******************/ + /* AFFINAGE PAR UE */ + /*******************/ echo ""; if( $ueOpt == null ) echo ""; else echo ""; - - foreach($ListeNomsUE as $NomUE) - if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné - 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 "'; + echo "'; + + // on ajoute l'UE à la liste pour ne pas le répéter + array_push($ListeUIDUE, $UE['id']); + }} + }} + echo ""; // ajouter un UE echo "
TousTous".$NomUE.'".$UE['nom'].'".$NomUE.'".$UE['nom'].'+
"; foreach($answer->semestres as $semestre){ - if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage + 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){ - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage + if( $ueOpt == null || $UE['id'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage echo ""; echo ""; diff --git a/xdoc/sid.sql b/xdoc/sid.sql index 5d36a16..05df873 100755 --- a/xdoc/sid.sql +++ b/xdoc/sid.sql @@ -3,7 +3,7 @@ -- http://www.phpmyadmin.net -- -- Client: localhost --- Généré le: Lun 16 Novembre 2015 à 12:42 +-- Généré le: Lun 16 Novembre 2015 à 21:41 -- Version du serveur: 5.5.46-0ubuntu0.14.04.2 -- Version de PHP: 5.5.9-1ubuntu4.14 @@ -429,7 +429,7 @@ CREATE TABLE IF NOT EXISTS `note` ( PRIMARY KEY (`id_note`), KEY `id_appartenance` (`id_appartenance`), KEY `id_controle` (`id_controle`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=57 ; -- -- RELATIONS POUR LA TABLE `note`: @@ -445,7 +445,7 @@ CREATE TABLE IF NOT EXISTS `note` ( INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUES (11, 103, 1, 15.25), -(12, 54, 2, 2), +(12, 54, 2, 5), (13, 103, 3, 3), (14, 103, 4, 4), (15, 103, 5, 5), @@ -459,9 +459,9 @@ INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUE (23, 91, 1, 3.5), (24, 19, 1, 4.5), (25, 58, 1, 5.25), -(26, 49, 2, 3), -(27, 87, 2, 4), -(28, 3, 2, 5), +(26, 49, 2, 6), +(27, 87, 2, 7), +(28, 3, 2, 8), (29, 74, 1, 14.75), (30, 26, 1, 1.9), (31, 97, 1, 10), @@ -482,7 +482,14 @@ INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUE (46, 13, 1, 2), (47, 67, 1, 0), (48, 70, 1, 0.5), -(49, 5, 1, 1.75); +(49, 5, 1, 1.75), +(50, 46, 11, 1), +(51, 33, 11, 2), +(52, 61, 11, 3), +(53, 48, 11, 4), +(54, 43, 11, 5), +(55, 98, 11, 6), +(56, 56, 11, 1); -- -------------------------------------------------------- @@ -492,18 +499,18 @@ INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUE CREATE TABLE IF NOT EXISTS `semestre` ( `id_semestre` int(11) NOT NULL AUTO_INCREMENT, - `formation` int(11) NOT NULL, + `id_formation` int(11) NOT NULL, `nom` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `rang` tinyint(4) NOT NULL, `annee` year(4) NOT NULL, PRIMARY KEY (`id_semestre`), UNIQUE KEY `rang` (`rang`,`annee`), - KEY `id_formation` (`formation`) + KEY `id_formation` (`id_formation`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; -- -- RELATIONS POUR LA TABLE `semestre`: --- `formation` +-- `id_formation` -- `formation` -> `id_formation` -- @@ -511,7 +518,7 @@ CREATE TABLE IF NOT EXISTS `semestre` ( -- Contenu de la table `semestre` -- -INSERT INTO `semestre` (`id_semestre`, `formation`, `nom`, `rang`, `annee`) VALUES +INSERT INTO `semestre` (`id_semestre`, `id_formation`, `nom`, `rang`, `annee`) VALUES (1, 1, 'S1', 1, 2015), (2, 1, 'S2', 2, 2015), (3, 2, 'S3', 3, 2015), @@ -721,7 +728,7 @@ ALTER TABLE `note` -- Contraintes pour la table `semestre` -- ALTER TABLE `semestre` - ADD CONSTRAINT `semestre_id_formation` FOREIGN KEY (`formation`) REFERENCES `formation` (`id_formation`); + ADD CONSTRAINT `semestre_id_formation` FOREIGN KEY (`id_formation`) REFERENCES `formation` (`id_formation`); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; From f0643a8d0524391beaf626c75f674e92a5a1dc25 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 21:48:11 +0100 Subject: [PATCH 32/36] =?UTF-8?q?Suppression=20de=20la=20possibilit=C3=A9?= =?UTF-8?q?=20de=20cr=C3=A9ation=20de=20@semestre/@UE=20=C3=A0=20partir=20?= =?UTF-8?q?des=20pages=20:=20enseignant@contr=C3=B4les=20+=20enseignant@mo?= =?UTF-8?q?dules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- page/career.php | 2 -- page/modules.php | 2 -- 2 files changed, 4 deletions(-) diff --git a/page/career.php b/page/career.php index 9ed0d42..eab04cb 100755 --- a/page/career.php +++ b/page/career.php @@ -230,7 +230,6 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e array_push($ListeUIDSemestres, $semestre['id']); }} - echo ""; // ajouter un semestre echo "
+
"; @@ -255,7 +254,6 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e array_push($ListeUIDUE, $UE['id']); }} }} - echo "+"; // ajouter un UE echo ""; diff --git a/page/modules.php b/page/modules.php index 539b3d7..a399609 100755 --- a/page/modules.php +++ b/page/modules.php @@ -206,7 +206,6 @@ if( permission('teacher') ){ // si l'utilisateur est un prof array_push($ListeUIDSemestres, $semestre['id']); }} - echo "+"; // ajouter un semestre echo ""; @@ -231,7 +230,6 @@ if( permission('teacher') ){ // si l'utilisateur est un prof array_push($ListeUIDUE, $UE['id']); }} }} - echo "+"; // ajouter un UE echo ""; From 6efa758cab7c27d48652a7225b4b390a5a52876d Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 17 Nov 2015 08:35:21 +0100 Subject: [PATCH 33/36] Affinage par formation pour enseignant@mes_groupes + admin@tous_les_groupes + utilisation d'UIDs --- manager/repo/group.php | 29 +-- page/_JS/groups.js | 71 +++--- page/groups.php | 478 +++++++++++++++++++---------------------- page/modules.php | 2 +- 4 files changed, 273 insertions(+), 307 deletions(-) diff --git a/manager/repo/group.php b/manager/repo/group.php index d2a03e0..6177eef 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -175,8 +175,9 @@ class groupRepo extends DBAccess{ public static function membres($groupeUID, $semestreUID){ // si le groupe existe => on récupère ses utilisateurs $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 ". - "FROM utilisateur as u, groupe as g, semestre as s, appartenance as app ". - "WHERE u.identifiant = app.id_etudiant ". + "FROM utilisateur as u, groupe as g, semestre as s, appartenance as app, formation as f ". + "WHERE s.id_formation = f.id_formation ". + "AND u.identifiant = app.id_etudiant ". "AND g.id_groupe = app.id_groupe ". "AND app.id_semestre = app.id_semestre ". // à virer (peut-être) @@ -205,12 +206,14 @@ class groupRepo extends DBAccess{ * */ public static function forStudent($etudiant, $semestre){ - $getGroupe = DataBase::getPDO()->prepare("SELECT DISTINCT app.id_appartenance, g.id_groupe as id, g.nom ". - "FROM groupe as g, appartenance as app ". - "WHERE app.id_groupe = g.id_groupe ". + $getGroupe = DataBase::getPDO()->prepare("SELECT DISTINCT app.id_appartenance, g.id_groupe as id, g.nom, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation ". + "FROM groupe as g, appartenance as app, formation as f, semestre as s ". + "WHERE s.id_formation = f.id_formation ". + "AND app.id_groupe = g.id_groupe ". + "AND app.id_semestre = s.id_semestre ". "AND app.id_etudiant = :etudiant ". - "AND app.id_semestre = :semestre ". + "AND s.id_semestre = :semestre ". "ORDER BY g.nom"); $getGroupe->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre )); @@ -244,9 +247,10 @@ class groupRepo extends DBAccess{ if( $pGroupe != null ){ $groupeOpt = $pGroupe; } - $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre ". - "FROM module as m, utilisateur as u, utilisateur as eleve, groupe as g, enseignement as ens, mcc_ue, mcc_module as mcc_m, semestre as s, appartenance as app ". - "WHERE mcc_ue.id_semestre = s.id_semestre ". + $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 module as m, utilisateur as u, utilisateur as eleve, groupe as g, enseignement as ens, mcc_ue, mcc_module as mcc_m, semestre as s, appartenance as app, formation as f ". + "WHERE s.id_formation = f.id_formation ". + "AND mcc_ue.id_semestre = s.id_semestre ". "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". "AND mcc_m.id_module = m.id_module ". @@ -325,9 +329,10 @@ class groupRepo extends DBAccess{ $semestrePair0 = '0'; $semestrePair1 = '1'; if( is_bool($semestre_pair) ){ $semestrePair0 = $semestre_pair; $semestrePair1 = $semestre_pair; } - $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre ". - "FROM groupe as g, semestre as s, appartenance as app ". - "WHERE g.id_groupe = app.id_groupe ". + $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 g.nom LIKE '".$groupeOpt."' ". diff --git a/page/_JS/groups.js b/page/_JS/groups.js index d7a81a1..a44140e 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -2,37 +2,6 @@ -// si aucune sous-partie n'est active, on active la première -if( document.querySelector('#CONTAINER hgroup.active') == null ) - selectSubSection( document.querySelector('#CONTAINER hgroup') ); - - - - - -/* Gestion du déroulement des tableaux des groupes */ -function afficherCacherGroupes(e){ - e.preventDefault(); - - // s'il s'agit de la case "Voir plus" - if( e.target.className == 'more' ){ - var thead = e.target.parentNode.parentNode.parentNode.children[0]; - thead.className = (thead.className=='active') ? '' : 'active'; - } -} - -if( !afficherCacherGroupesDefined ) - DOM.CONTAINER.addEventListener('click', afficherCacherGroupes, false); - -var afficherCacherGroupesDefined = true; - - - - -/* on définit le Drag'n'Drop */ -// var dnd = new DragnDrop(); - - @@ -98,11 +67,12 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / } -/***************************************************/ -/*** GESTION DES SELECT POUR AFFINER LES GROUPES ***/ -/***************************************************/ + +/**********************************************************************/ +/*** GESTION DES SELECT/TABLES D'AFFINAGES POUR AFFINER LES GROUPES ***/ +/**********************************************************************/ var selectList = document.querySelectorAll("#CONTAINER > section[name] > select[name=groupe]"); -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]"); // GESTION DE L'AFFINAGE PAR SEMESTRE // for( var i = 0 ; i < partList.length ; i++ ){ @@ -110,11 +80,26 @@ for( var i = 0 ; i < partList.length ; i++ ){ partList[i].addEventListener('click', function(e){ var tableauParent = e.target.parentNode.parentNode.parentNode; - if( tableauParent.tagName == 'TABLE' && tableauParent.getAttribute('name') == 'semestre' && e.target.dataset.hasOwnProperty('value') ){ - pageM.vars[1] = 's:'+e.target.dataset.value; + if( tableauParent.tagName == 'TABLE' && e.target.dataset.hasOwnProperty('value') ){ + + /* SI c'est une affinage par FORMATION */ + if( tableauParent.getAttribute('name') == 'formation' ){ + pageM.vars[1] = 'f:'+e.target.dataset.value; + if( pageM.vars.length > 2 ) // si un deuxième affinage existe, on le supprime lors du choix de la formation + pageM.vars.pop(); + } + + /* SI c'est une affinage par SEMESTRE */ + if( tableauParent.getAttribute('name') == 'semestre' ) + pageM.vars[2] = 's:'+e.target.dataset.value; + + // si la formation n'est pas définie, on l'active + if( !/^f:/.test(pageM.vars[1]) ) + if( document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active') != null ) + pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active').dataset.value; // si on a '*' comme valeur, on l'enlève - if( /\*$/.test(pageM.vars[1]) ) + if( /\*$/.test(pageM.vars[2]) ) pageM.vars.pop(); reload(); @@ -130,9 +115,15 @@ for( var i = 0 ; i < selectList.length ; i++ ){ selectList[i].addEventListener('change', function(e){ if( e.target.tagName == 'SELECT' && e.target.getAttribute('name') == 'groupe' ){ - pageM.vars[1] = 'g:'+e.target.value; + pageM.vars[2] = 'g:'+e.target.value; - if( /\*$/.test(pageM.vars[1]) ) // si on a '*' comme valeur, on l'enlève + // si la formation n'est pas définie, on l'active + if( !/^f:/.test(pageM.vars[1]) ) + if( document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active') != null ) + pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active').dataset.value; + + // si on a '*' comme valeur, on l'enlève + if( /\*$/.test(pageM.vars[2]) ) pageM.vars.pop(); reload(); diff --git a/page/groups.php b/page/groups.php index 92e852c..b6f7526 100755 --- a/page/groups.php +++ b/page/groups.php @@ -19,8 +19,9 @@ require_once __ROOT__.'/manager/groups.php'; /*** GESTION DES PARAMETRES OPTIONNELS ***/ // on initialise les paramètres optionnels - $semestreOpt = null; - $groupeOpt = null; + $semestreOpt = null; + $groupeOpt = null; + $formationOpt = null; // on cherche dans toutes les variables _get si on trouve des paramètres foreach($_POST as $k=>$v){ @@ -31,9 +32,14 @@ require_once __ROOT__.'/manager/groups.php'; if( preg_match('/^s:(.+)$/', $k, $m) ) // s:nomSemestre $semestreOpt = $m[1]; + if( preg_match('/^f:(.+)$/', $k, $m) ) // f:codeFormation + $formationOpt = $m[1]; + } - + $groupeOpt = ($groupeOpt == null || $groupeOpt == '*') ? null : $groupeOpt; + $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; + $formationOpt = ($formationOpt == null || $formationOpt == '*') ? null : $formationOpt; /************************/ /*** TOUS LES GROUPES ***/ @@ -102,111 +108,6 @@ if( permission('student') ){ // si connecté && utilisateur -/************************/ -/*** TOUS LES GROUPES ***/ -/************************/ -/* -* PROFESSEUR -> affichage des semestres en cours -* ADMINISTRATEUR -> affichage des semestres en cours -* -* - */ -if( false && permission('teacher') ){ // si connecté && prof - - $request = new stdClass(); - $answer = new stdClass(); - - $request->level_1 = 'grouplistForYear'; - $request->annee = $_SESSION['annee']; - if ( $semestreOpt != null ) $request->semestre = $semestreOpt; - elseif( $groupeOpt != null ) $request->groupe = $groupeOpt; - - groups_switch_level_1($request, $answer); - - if( $answer->request == 'success' ){ // si pas d'erreur - ////////////////////////////////////////////////////////////// - echo "
"; - - /* select pour SEMESTRES */ - $lastSemestre = null; - - echo ""; - - /* select pour GROUPES */ - $lastGroupe = null; - - echo ""; - - - echo ""; - echo '
Identifiant'; - echo 'Prenom'; - echo 'Nom'; - echo 'Semestre'; - echo 'Groupe'; - echo '
'; - - foreach($answer->grouplist as $group){ // pour chaque groupe - - if( count($group['userlist']) > 0 ){ // s'il y a des utilisateurs - - echo ""; - - echo ''; - - - // pour chaque utilisateur - foreach($group['userlist'] as $user){ - echo ''; - echo "'; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - } - - // echo ''; - - echo ''; - - echo '
".$user['identifiant'].''.$user['prenom'].''.$user['nom'].''.$group['semestre'].'Groupe '.$group['nom'].'
'; - - } - } - echo '
'; - //////////////////////////////////////////////////////// - }else - echo "
Aucun groupe trouvé
"; - -} ?> - - @@ -215,9 +116,6 @@ if( false && permission('teacher') ){ // si connecté && prof - - -level_1 = 'grouplistForTeacher'; $request->enseignant = $_SESSION['identifiant']; $request->annee = $_SESSION['annee']; - if ( $semestreOpt != null ) $request->semestre = $semestreOpt; - elseif( $groupeOpt != null ) $request->groupe = $groupeOpt; - - $requestPourListeGroupes->level_1 = 'grouplistForTeacher'; - $requestPourListeGroupes->enseignant = $_SESSION['identifiant']; - $requestPourListeGroupes->annee = $_SESSION['annee']; groups_switch_level_1($request, $answer); - groups_switch_level_1($requestPourListeGroupes, $answerPourListeGroupes); - if( $answer->request == 'success' && $answerPourListeGroupes->request == 'success' && count($answerPourListeGroupes->grouplist) > 0 ){ // si on a bien récupéré les membres du groupe + if( $answer->request == 'success' && $answer->request == 'success' && count($answer->grouplist) > 0 ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// echo "
"; - - /* select pour SEMESTRES */ - $lastSemestre = null; - echo ""; - - if( $semestreOpt != null ) // si aucun semestre n'est spécifié, on selectionne "Tous" par défaut - echo ""; - else - echo ""; - + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDGroupes = array(); - foreach($answerPourListeGroupes->grouplist as $group){ - if( $lastSemestre == null || $lastSemestre != $group['semestre'] ){ - - if( $group['semestre'] == $semestreOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - echo "'; + // Vérification de la formation si elle est définie + $verificationUIDFormations = array(); + foreach($answer->grouplist as $groupe) // on récupère la liste des UID de FORMATIONS + if( !in_array($groupe['id_formation'], $verificationUIDFormations) ) + array_push($verificationUIDFormations, $groupe['id_formation']); - $lastSemestre = $group['semestre']; - } - } + // 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 "
TousTous".$group['semestre'].'".$group['semestre'].'
"; + foreach($answer->grouplist as $groupe){ if( !in_array($groupe['id_formation'], $ListeUIDFormations) ){ + + + if( $groupe['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, $groupe['id_formation']); + + }} echo "
".$groupe['formation'].'".$groupe['formation'].'
"; - /* select pour GROUPES */ - $lastGroupe = null; + + + /*************************/ + /* 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->grouplist as $groupe){ if( $groupe['id_formation'] == $formationOpt && !in_array($groupe['id_semestre'], $ListeUIDSemestres) ){ + + if( $groupe['id_semestre'] == $semestreOpt ) // si c'est le groupe 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, $groupe['id']); + + }} + echo "
TousTous".$groupe['semestre'].'".$groupe['semestre'].'
"; + + + + + /***********************/ + /* AFFINAGE PAR GROUPE */ + /***********************/ echo ""; + + + + - if( $group['nom'] == $groupeOpt ) // si c'est le groupe séléctionné - echo "'; - else - echo "'; - $lastGroupe = $group['nom']; - } - } - echo ""; - echo ""; - foreach($answer->grouplist as $group){ - if( $lastGroupe == null || $lastGroupe != $group['nom'] ){ + if( $groupeOpt == null ) echo ""; + else echo ""; - if( $group['nom'] == $groupeOpt ) // si c'est le groupe séléctionné - echo "'; - else - echo "'; + /* On récupère la liste des GROUPES en accord avec la FORMATION et le SEMESTRE sélectionnée */ + foreach($answer->grouplist as $groupe){ if( $groupe['id_formation'] == $formationOpt && in_array($groupe['id_semestre'], $ListeUIDSemestres) && !in_array($groupe['id'], $ListeUIDGroupes) ){ + + // si c'est le groupe sélectionné + if( $groupe['id'] == $groupeOpt ) echo "'; + else echo "'; - $lastGroupe = $group['nom']; - } - } - echo ""; @@ -501,52 +467,56 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm foreach($answer->grouplist as $group){ // pour chaque groupe - if( count($group['userlist']) > 0 ){ // s'il y a des utilisateurs + if( $group['id_formation'] == $formationOpt && ($semestreOpt==null || $semestreOpt==$group['id_semestre']) && ($groupeOpt==null || $groupeOpt==$group['id']) ){ - echo ""; + if( count($group['userlist']) > 0 ){ // s'il y a des utilisateurs - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; + echo "
'; - echo 'Groupe '.$group['nom'].''; - echo '
"; - - - echo ''; - - - // pour chaque utilisateur - foreach($group['userlist'] as $user){ + echo ''; echo ''; - echo "'; - echo ''; - echo ''; - // echo ''; - // changement de groupe - echo ''; + echo ''; echo ''; - } + echo ''; - // echo ''; - echo ''; - echo '
".$user['identifiant'].''.$user['prenom'].''.$user['nom'].''.$group['nom'].''; - echo "'; - echo "
déplacer
"; - echo '
'; + echo 'Groupe '.$group['nom'].''; + echo '
'; + echo ''; + + + // pour chaque utilisateur + foreach($group['userlist'] as $user){ + echo ''; + echo "".$user['identifiant'].''; + echo ''.$user['prenom'].''; + echo ''.$user['nom'].''; + // echo ''.$group['nom'].''; + // changement de groupe + echo ''; + echo "'; + echo "
déplacer
"; + echo ''; + echo ''; + } + + // echo ''; + + echo ''; + + echo ''; + + } } } diff --git a/page/modules.php b/page/modules.php index a399609..e890bc5 100755 --- a/page/modules.php +++ b/page/modules.php @@ -476,7 +476,7 @@ if( permission('admin') ){ // si l'utilisateur est un admin //////////////////////////////////////////////////////////////////////////////// echo "
"; - + echo ""; }else echo "
Aucun module trouvé
"; From 26fe68da79387a72c4036fcfd7c41e4bf18dcc59 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 17 Nov 2015 08:46:39 +0100 Subject: [PATCH 34/36] =?UTF-8?q?Suppression=20des=20param=C3=A8tres=20opt?= =?UTF-8?q?ionnels=20(=C3=A9vitent=20de=20tout=20charger=20+=20les=20donn?= =?UTF-8?q?=C3=A9es=20affin=C3=A9es)=20donc=20maintenant=20on=20charge=20t?= =?UTF-8?q?out,=20mais=20une=20fois?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 23 ++++------------------- manager/groups.php | 31 +++---------------------------- manager/repo/group.php | 40 +++++++++------------------------------- 3 files changed, 16 insertions(+), 78 deletions(-) diff --git a/manager/database.php b/manager/database.php index af5c681..598f0a1 100755 --- a/manager/database.php +++ b/manager/database.php @@ -215,14 +215,7 @@ class DataBase{ /******************************************************************/ /*** retourne la liste des utilisateurs des groupes d'une année ***/ /******************************************************************/ - public function listeEtudiantsTousGroupesAnnee($annee, $semestre_pair, $pSemestre=null, $pGroupe=null){ // pSemestre/pGroupe optionnels - // définition des paramètres optionnels - $semestreOpt = '%'; - if( $pSemestre != null ) $semestreOpt = $pSemestre; // semestre donné uniquement (si param non null) - - $groupeOpt = '%'; - if( $pGroupe != null ) $groupeOpt = $pGroupe; // si le groupe est donné, on le définit - + public function listeEtudiantsTousGroupesAnnee($annee, $semestre_pair){ /*** on cherche un semestre avec ce rang et cette année (qui est unique) ***/ $checkAnnee = DataBase::getPDO()->prepare("SELECT id_semestre as id FROM semestre WHERE annee = :annee"); $checkAnnee->execute(array( ':annee' => $annee )); @@ -230,7 +223,7 @@ class DataBase{ // on récupère la liste des groupes - $grouplist = DataBase::delNumeric( groupRepo::forYear($semestre_pair, $annee, $pSemestre, $pGroupe) ); + $grouplist = DataBase::delNumeric( groupRepo::forYear($semestre_pair, $annee) ); 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']); @@ -242,15 +235,7 @@ class DataBase{ /******************************************************************/ /*** retourne la liste des utilisateurs des groupes d'une année ***/ /******************************************************************/ - public function listeEtudiantsTousGroupesEnseignant($annee, $semestre_pair, $enseignant, $pSemestre, $pGroupe){ - // définition des paramètres optionnels - $semestreOpt = '%'; - if( $pSemestre != null ) $semestreOpt = $pSemestre; // semestre donné uniquement (si param non null) - - $groupeOpt = '%'; - if( $pGroupe != null ) $groupeOpt = $pGroupe; // si le groupe est donné, on le définit - - + public function listeEtudiantsTousGroupesEnseignant($annee, $semestre_pair, $enseignant){ /*** on cherche un semestre avec cette année ***/ $checkAnnee = DataBase::getPDO()->prepare("SELECT id_semestre as id FROM semestre WHERE annee = :annee"); $checkAnnee->execute(array( ':annee' => $annee )); @@ -261,7 +246,7 @@ class DataBase{ // on récupère la liste des groupes - $grouplist = DataBase::delNumeric( groupRepo::forTeacher($enseignantUID, $semestre_pair, $annee, $pSemestre, $pGroupe) ); + $grouplist = DataBase::delNumeric( groupRepo::forTeacher($enseignantUID, $semestre_pair, $annee) ); 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']); diff --git a/manager/groups.php b/manager/groups.php index b024c58..7c252a5 100755 --- a/manager/groups.php +++ b/manager/groups.php @@ -168,20 +168,9 @@ require_once __ROOT__.'/manager/database.php'; $anneeCheck = $areSetParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format $enseignantCheck = $anneeCheck && preg_match('/^[\w -]{3,50}$/i', $request->enseignant); // enseignant (annee) bon format - // paramètres optionnels - $optionalSemestre = isset($request->semestre) && is_string($request->semestre) && preg_match('/^S[0-9]{1}$/i', $request->semestre); - $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) des paramètres optionnels - if( $optionalSemestre ) $semestre = $request->semestre; - else $semestre = null; - - if( $optionalGroupe ) $groupe = $request->groupe; - else $groupe = null; - if( $enseignantCheck ){ - $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesEnseignant($request->annee, $_SESSION['semestre_pair'], $request->enseignant, $semestre, $groupe); + $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesEnseignant($request->annee, $_SESSION['semestre_pair'], $request->enseignant); if( is_array($grouplist) ){ // si on a récupéré la liste des utilisateurs $answer->grouplist = $grouplist; @@ -205,24 +194,10 @@ require_once __ROOT__.'/manager/database.php'; $typeOkParam = $areSetParam && is_numeric($request->annee); // si c'est des strings $anneeCheck = $areSetParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format - - // paramètres optionnels - $optionalSemestre = isset($request->semestre) && is_string($request->semestre) && preg_match('/^S[0-9]{1}$/i', $request->semestre); - $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) des paramètres optionnels - if( $optionalSemestre ) $semestre = $request->semestre; - else $semestre = null; - - if( $optionalGroupe ) $groupe = $request->groupe; - else $groupe = null; - - - if( $anneeCheck ){ - // $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesAnnee($request->annee, $_SESSION['semestre_pair'], $semestre, $groupe); - $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesAnnee($request->annee, null, $semestre, $groupe); + // $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesAnnee($request->annee, $_SESSION['semestre_pair']); + $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesAnnee($request->annee, null); if( is_array($grouplist) ){ // si on a récupéré la liste des utilisateurs $answer->grouplist = $grouplist; diff --git a/manager/repo/group.php b/manager/repo/group.php index 6177eef..a34f5f2 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -227,25 +227,17 @@ class groupRepo extends DBAccess{ /* RETOURNE TOUS LES GROUPES QUI ONT UN ENSEIGNANT PARTICULIER POUR UNE ANNEE DONNEE * * @enseignant l'UID de l'enseignant recherché - * @semestre_pair VRAI si le semestre courant est pair + * @semestre_pair VRAI si le semestre courant est pair (***OPTIONNEL***) * @annee l'année recherchée * - * @pSemestre ***OPTIONNEL*** le nom du semestre - * @pGroupe ***OPTIONNEL*** le nom du groupe - * * * @return groupes retourne la liste des groupes correspondant aux critères * */ - public static function forTeacher($enseignant, $semestre_pair, $annee, $pSemestre=null, $pGroupe=null){ - // si le semestre est donné, on cherche uniquement celui-ci, sinon on les affiche tous - $semestreOpt = '%'; - if( $pSemestre != null ){ $semestreOpt = $pSemestre; } + public static function forTeacher($enseignant, $semestre_pair, $annee){ - // si le groupe est donné, on cherche uniquement celui-ci, sinon on les affiche tous - $groupeOpt = '%'; - if( $pGroupe != null ){ $groupeOpt = $pGroupe; } - + $semestrePair0 = '0'; $semestrePair1 = '1'; + if( is_bool($semestre_pair) ){ $semestrePair0 = ($semestre_pair)?'0':'1'; $semestrePair1 = ($semestre_pair)?'0':'1'; } $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 module as m, utilisateur as u, utilisateur as eleve, groupe as g, enseignement as ens, mcc_ue, mcc_module as mcc_m, semestre as s, appartenance as app, formation as f ". @@ -263,13 +255,11 @@ class groupRepo extends DBAccess{ "AND app.id_semestre = s.id_semestre ". "AND app.id_groupe = g.id_groupe ". - "AND g.nom LIKE '".$groupeOpt."' ". - "AND s.nom LIKE '".$semestreOpt."' ". "AND u.identifiant = :enseignant ". - "AND s.rang % 2 = :semestre_pair ". + "AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) ". "AND s.annee = :annee ". "ORDER BY s.rang, g.nom"); - $getGroupeList->execute(array( ':enseignant' => $enseignant, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + $getGroupeList->execute(array( ':enseignant' => $enseignant, ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee )); return DataBase::delNumeric( $getGroupeList->fetchAll() ); } @@ -307,27 +297,17 @@ class groupRepo extends DBAccess{ /* RETOURNE TOUS LES GROUPES DES SEMESTRES COURANT D'UNE ANNÉE * - * @semestre_pair VRAI si le semestre courant est pair + * @semestre_pair VRAI si le semestre courant est pair (***OPTIONNEL***) * @annee L'année en cours * - * @pSemestre ***OPTIONNEL*** le nom du semestre - * @pGroupe ***OPTIONNEL*** le nom du groupe - * * * @return groupes retourne la liste des groupes correspondant aux critères * */ - public static function forYear($semestre_pair, $annee, $pSemestre=null, $pGroupe=null){ - // si le semestre est donné, on cherche uniquement celui-ci, sinon on les affiche tous - $semestreOpt = '%'; - if( $pSemestre != null ){ $semestreOpt = $pSemestre; } - - // si le groupe est donné, on cherche uniquement celui-ci, sinon on les affiche tous - $groupeOpt = '%'; - if( $pGroupe != null ){ $groupeOpt = $pGroupe; } + public static function forYear($semestre_pair, $annee){ $semestrePair0 = '0'; $semestrePair1 = '1'; - if( is_bool($semestre_pair) ){ $semestrePair0 = $semestre_pair; $semestrePair1 = $semestre_pair; } + if( is_bool($semestre_pair) ){ $semestrePair0 = ($semestre_pair)?'0':'1'; $semestrePair1 = ($semestre_pair)?'0':'1'; } $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 ". @@ -335,8 +315,6 @@ class groupRepo extends DBAccess{ "AND g.id_groupe = app.id_groupe ". "AND s.id_semestre = app.id_semestre ". - "AND g.nom LIKE '".$groupeOpt."' ". - "AND s.nom LIKE '".$semestreOpt."' ". "AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) ". "AND s.annee = :annee ". "ORDER BY g.nom"); From df1f23a1da67a5c4e1b5aabd0a0276ed436a90bf Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 17 Nov 2015 08:55:33 +0100 Subject: [PATCH 35/36] Correction erreur commit --- page/modules.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/page/modules.php b/page/modules.php index e890bc5..27ede14 100755 --- a/page/modules.php +++ b/page/modules.php @@ -470,8 +470,8 @@ if( permission('admin') ){ // si l'utilisateur est un admin modules_switch_level_1($request, $answer); - // var_dump( $answer ) -; + // var_dump( $answer ); + if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// echo "
"; From d96ace86b3f6b4590f146c6aa7e5e4a80cd286a2 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 17 Nov 2015 09:07:53 +0100 Subject: [PATCH 36/36] =?UTF-8?q?Correction=20d=C3=A9placement=20d'=C3=A9l?= =?UTF-8?q?=C3=A8ves=20sur=20admin@tous=5Fles=5Fgroupes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 6 +++--- manager/repo/semestre.php | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/manager/database.php b/manager/database.php index 598f0a1..638134f 100755 --- a/manager/database.php +++ b/manager/database.php @@ -280,10 +280,10 @@ class DataBase{ public function deplacerEtudiant($etudiant, $groupe, $semestre){ // on vérifie que le semestre et que le groupe de destination existent - if( !($semestreUID=semestreRepo::info($semestre)['id']) ) return 'unknown_semestre'; - if( !($destGroupeUID=groupRepo::UID($groupe)) ) return 'unknown_newgroup'; + if( !($semestreInfo=semestreRepo::info($semestre)) ) return 'unknown_semestre'; + if( !($destGroupeUID=groupRepo::UID($groupe)) ) return 'unknown_newgroup'; - if( groupRepo::ajouterMembre($etudiant, $destGroupeUID, $semestreUID) ) + if( groupRepo::ajouterMembre($etudiant, $destGroupeUID, $semestreInfo['id']) ) return 'success'; else return 'error'; diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 0584eab..a71950f 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -57,10 +57,10 @@ class semestreRepo extends DBAccess{ */ public static function info($semestreUID){ // on considère que le semestre existe - $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as s.id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, s.nom, s.rang, s.annee, f.id_formation, f.code as formation, f.nom as nom_formation ". "FROM semestre as s, formation as f ". "WHERE s.id_formation = f.id_formation ". - "AND id_semestre = :semestreUID"); + "AND s.id_semestre = :semestreUID"); $getSemestreInfo->execute(array( ':semestreUID' => $semestreUID )); // on retourne le résultat en supprimant les doublons à indices numériques