Ajout de l'affichage des notes par groupes (pour les profs) + [à faire] Affinage pour un groupe et/ou un partiel + finir le bordel

This commit is contained in:
xdrm-brackets 2015-11-14 00:47:11 +01:00
parent 179a7f9e8a
commit 6a2151caa1
10 changed files with 148 additions and 62 deletions

View File

@ -9,7 +9,10 @@
.hidden{ display: none !important; } .hidden{ display: none !important; }
/* .unstressed */
span.unstressed{ color: #aaa; } span.unstressed{ color: #aaa; }
tr:hover > td > span.unstressed{ color: #ddd; }
span.stressed{ font-weight: bold; } span.stressed{ font-weight: bold; }
@ -83,31 +86,34 @@ table.basic th{ text-align: left; }
/* <thead> sans background */ /* <thead> sans background */
table.basic thead tr th{ background-color: transparent; } 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+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+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+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+3) tr > td:first-child { border-left: 10px solid #2dcc70; }
table.basic table.basic tr > td:first-child { border-left: 10px solid #9e9e9e; }
/* @hover */ /* @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+0) tr:hover > td { background-color: #e63c54; }
table.basic:nth-child(4n+1) tr:hover td{ background-color: rgba(60, 115, 230, 1); } table.basic:nth-child(4n+1) tr:hover > td { background-color: #3c73e6; }
table.basic:nth-child(4n+2) tr:hover td{ background-color: rgba(230, 152, 60, 1); } table.basic:nth-child(4n+2) tr:hover > td { background-color: #e6983c; }
table.basic:nth-child(4n+3) tr:hover td{ background-color: rgba(45, 204, 112, 1); } table.basic:nth-child(4n+3) tr:hover > td { background-color: #2dcc70; }
table.basic table.basic tr:hover > td { background-color: #9e9e9e; }
/* .noborder */ /* .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; } table.basic tr:hover td{ background-color: #fff; }
/* .transparentbg */ /* .transparentbg */
table.basic tr.transparentbg 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:hover > td{ background-color: transparent; }
table.basic tr.transparentbg .link{ background-color: #fff; } 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; appearance:none;
} }
td select{ margin: 0; } /* pour déplacement d'élève */
td select{ margin: -1em; padding: .5em; }
select > option{ select > option{
/* position */ /* position */
@ -192,6 +199,12 @@ select > option{
color: #233342; color: #233342;
text-indent: 1em; 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+0){ color: #e63c54; }
select > option:nth-child(4n+1){ color: #3c73e6; } 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; /*display: inline-block;*/ display: none;
position: absolute; position: absolute;
margin-left: 2em; margin-left: 2em;
margin-top: .5em; margin-top: -.2em;
width: 2em; width: 1.5em;
height: 2em; height: 1.5em;
/* background */ /* background */
background: transparent center center no-repeat; background: transparent center center no-repeat;

View File

@ -111,6 +111,14 @@ class noteRepo extends DBAccess{
} }
/*
** PAS UTILISÉ POUR L'INSTANT
*/
/* RENVOIE LES NOTES DES ETUDIANTS POUR UN CONTROLE PARTICULIER /* RENVOIE LES NOTES DES ETUDIANTS POUR UN CONTROLE PARTICULIER
* *
* @controle<int> l'UID du controle concerné * @controle<int> l'UID du controle concerné
@ -119,17 +127,21 @@ class noteRepo extends DBAccess{
* *
*/ */
public static function forTeacher($controle){ 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 ". $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 ". "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 ". "WHERE n.id_appartenance = app.id_appartenance ".
"AND app.id_semestre = s.id_semestre ". "AND app.id_semestre = s.id_semestre ".
"AND app.id_groupe = g.id_groupe ".
"AND s.id_semestre = mcc_ue.id_semestre ". "AND s.id_semestre = mcc_ue.id_semestre ".
"AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ".
"AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ".
"AND n.id_controle = ctrl.id_controle ". "AND n.id_controle = ctrl.id_controle ".
"AND ctrl.id_controle = :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 )); $getNoteList->execute(array( ':controle' => $controle ));
return DataBase::delNumeric( $getNoteList->fetchAll() ); return DataBase::delNumeric( $getNoteList->fetchAll() );

View File

@ -121,7 +121,7 @@ class userRepo extends DBAccess{
$prenom = ucwords( strtolower($prenom) ); // majuscule à chaque mot sinon minuscule $prenom = ucwords( strtolower($prenom) ); // majuscule à chaque mot sinon minuscule
$nom = strtoupper($nom); // nom en majuscules $nom = strtoupper($nom); // nom en majuscules
$mail = strtolower($mail); // email en minuscules $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 $droits = implode(',', $droits); // on met le droit sous forme de chaine
/* [2] On vérifie que l'utilisateur n'est pas déjà créé /* [2] On vérifie que l'utilisateur n'est pas déjà créé

View File

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

View File

@ -160,7 +160,7 @@ require_once __ROOT__.'/manager/database.php';
if( isset($userList->{$username}) ){ if( isset($userList->{$username}) ){
// [3] On check le mot de passe // [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 // [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 if( $utilInfo = Database::getInstance()->utilisateurInfo($username) ){ // si l'utilisateur est dans le BDD

33
page/_JS/career.js Normal file
View File

@ -0,0 +1,33 @@
<!--
/***********************************************/
/* GESTION DE LE FILTRAGE POUR LES ENSEIGNANTS */
/***********************************************/
if( document.querySelector('#CONTAINER section[name=controlesenseignants]') ){ // on traite uniquement si la section est définie
// on récupère les liens
var groupLinks = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table.basic table.basic tr td span.link.group');
for( var i = 0 ; i < groupLinks.length ; i++ ) // on active un évènement pour le clic sur les nom de groupes
groupLinks[i].addEventListener('click', function(e){
if( e.target.className == 'link group' && e.target.dataset.hasOwnProperty('grp') && e.target.dataset.hasOwnProperty('ctrl') ){ // s'il s'agit bien d'un nom de groupe
console.log('id_groupe: '+ e.target.dataset.grp +', id_controle: '+ e.target.dataset.ctrl );
}
}, false);
console.log(groupLinks);
}
-->

View File

@ -1,8 +1,5 @@
<!-- <!--
var subSections = document.querySelectorAll('hgroup');
// si aucune sous-partie n'est active, on active la première // si aucune sous-partie n'est active, on active la première

View File

@ -4,6 +4,24 @@ require_once __ROOT__.'/manager/groups.php';
require_once __ROOT__.'/manager/modules.php'; require_once __ROOT__.'/manager/modules.php';
require_once __ROOT__.'/manager/career.php'; require_once __ROOT__.'/manager/career.php';
/*** GESTION DES PARAMETRES OPTIONNELS ***/
$postVars = array(); // on récupère les variables post
foreach($_POST as $k=>$v)
array_push($postVars, $k);
/* GESTION GROUPE OPTIONNEL */
if( isset($postVars[1]) && is_string($postVars[1]) && strlen($postVars[1]) > 1 )
$groupeOpt = $postVars[1];
else
$groupeOpt = null;
/**************************************** /****************************************
* * * *
* SECTION "PARCOURS" * * SECTION "PARCOURS" *
@ -111,7 +129,7 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un
if( $answer->request == 'success' ){ // si on a bien récupéré les UE/notes if( $answer->request == 'success' ){ // si on a bien récupéré les UE/notes
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
echo "<section name='controlesbyue' title='Contrôles' class='basic'>"; echo "<section name='controlesenseignants' title='Contrôles' class='basic'>";
if( count($answer->UEs) > 0 ){ // si au moins un UE if( count($answer->UEs) > 0 ){ // si au moins un UE
@ -126,8 +144,8 @@ 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 if( count($UE['modules']) > 0 ){ // s'il y a au moins un module
foreach($UE['modules'] as $module){ // pour chaque module foreach($UE['modules'] as $module){ // pour chaque module
echo "<table class='basic col5'><thead>"; echo "<table class='basic col4'><thead>";
echo '<tr><th colspan=5>'.$module['nom'].' - '.$module['libelle'].'</th></tr></thead><tbody>'; echo '<tr><th colspan=4>'.$module['nom'].' - '.$module['libelle'].'</th></tr></thead><tbody>';
if( count($module['controles']) > 0 ){ // s'il y a au moins un contrôle pour ce module if( count($module['controles']) > 0 ){ // s'il y a au moins un contrôle pour ce module
@ -135,18 +153,33 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un
echo '<tr>'; echo '<tr>';
echo '<td><span class=link>'.$controle['intitule'].'</span></td>'; echo '<td><span class=link>'.$controle['intitule'].'</span></td>';
echo "<td>".$module['nom']." - ".$module['libelle']."</td>";
if( count($controle['notes']) == 0 ) // si il y a au moins une note pour ce contrôle if( count($controle['notes']) == 0 ) // si il y a au moins une note pour ce contrôle
echo '<td><span class=unstressed>Pas noté</span></td>'; echo '<td><span class=unstressed>Pas noté</span></td>';
else
echo '<td><span class=unstressed>Moyenne de</span> 10 <span class=unstressed>/</span> 20</td>';
// echo '<td>'.number_format($controle['moyenne'], 2).'</td>';
echo "<td>".$module['nom']." - ".$module['libelle']."</td>"; echo '<td><span class=unstressed>Coefficient</span> '.number_format($controle['coefficient'], 2).'</td>';
echo '<td>Coefficient '.number_format($controle['coefficient'], 2).'</td>';
echo '<td></td><td></td>';
echo '</tr>'; echo '</tr>';
echo "<tr class='noborder transparentbg'><td></td><td colspan=3><table class='basic col4'><tbody>";
foreach($controle['notes'] as $note) // on affiche la liste des élèves avec leurs notes foreach($controle['notes'] as $note){ // on affiche la liste des élèves avec leurs notes
echo "<tr class='noborder transparentbg'><td></td><td></td><td></td><td><span class=link>".$note['etudiant']."</span></td><td>".number_format($note['valeur'], 2)." <span class=unstressed>/</span> ".$controle['base']."</td></tr>"; echo "<tr>";
echo "<td><span class='link group' data-grp='".$note['id_groupe']."' data-ctrl='".$controle['id']."'>".$note['groupe']."</span></td>";
if( $note['nb_notes'] == 1 )
echo "<td>".$note['nb_notes']." <span class=unstressed>note</span></td>";
else
echo "<td>".$note['nb_notes']." <span class=unstressed>notes</span></td>";
echo "<td><span class=unstressed>Allant de</span> ".$note['min']." <span class=unstressed>à</span> ".$note['max']."</td>";
echo "<td><span class=unstressed>Moyenne de </span>".number_format($note['moyenne'], 2)." <span class=unstressed>/</span> ".$controle['base']."</td>";
echo "</tr>";
}
echo '</tbody></table></td></tr>';
} }
}else // si aucun contrôle pour ce module }else // si aucun contrôle pour ce module
@ -163,7 +196,7 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
echo '</section>'; echo '</section>';
}else }else
echo "<section name='controlesbyue' title='Contrôles' class='basic'><table class=basic><tbody><tr><td>Aucun contrôle trouvé</td></tr></tbody></table></section>"; echo "<section name='controlesenseignants' title='Contrôles' class='basic'><table class=basic><tbody><tr><td>Aucun contrôle trouvé</td></tr></tbody></table></section>";
} }

View File

@ -419,14 +419,25 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm
$request = new stdClass(); $request = new stdClass();
$answer = new stdClass(); $answer = new stdClass();
/* ce jeu de données sert à récupérer la liste des groupes (même quand on applique un filtrage) */
$requestPourListeGroupes = new stdClass();
$answerPourListeGroupes = new stdClass();
$request->level_1 = 'grouplistForYear'; $request->level_1 = 'grouplistForYear';
$request->annee = $_SESSION['annee']; $request->annee = $_SESSION['annee'];
if ( $semestreOpt != null ) $request->semestre = $semestreOpt; if ( $semestreOpt != null ) $request->semestre = $semestreOpt;
elseif( $groupeOpt != null ) $request->groupe = $groupeOpt; elseif( $groupeOpt != null ) $request->groupe = $groupeOpt;
groups_switch_level_1($request, $answer); groups_switch_level_1($request, $answer); // on fait la requête pour les groupes en fonction des filtres si définis
if( $answer->request == 'success' ){ // si pas d'erreur
$requestPourListeGroupes->level_1 = 'grouplistForYear';
$requestPourListeGroupes->annee = $_SESSION['annee'];
groups_switch_level_1($requestPourListeGroupes, $answerPourListeGroupes); // on fait la requête pour avoir la liste des groupes quel que soit le filtrage
if( $answer->request == 'success' && $answerPourListeGroupes->request == 'success' ){ // si pas d'erreur
////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////
echo "<section name='movestudents' title='Tous les groupes' class='basic'>"; echo "<section name='movestudents' title='Tous les groupes' class='basic'>";
@ -499,14 +510,14 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm
// changement de groupe // changement de groupe
echo '<td>'; echo '<td>';
echo "<select class='deplacement_groupe'>"; echo "<select class='deplacement_groupe'>";
foreach($answer->grouplist as $groupemodif) // pour tous les groupes 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['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['nom'] == $group['nom'] ) // s'il s'agit du groupe courant, on met en sélection
echo "<option value='".$groupemodif['nom']."' selected>".$groupemodif['nom']."</option>"; echo "<option value='".$groupemodif['nom']."' selected>".$groupemodif['nom']."</option>";
else // s'il s'agit d'un autre groupe, c'est normal else // s'il s'agit d'un autre groupe, c'est normal
echo "<option value='".$groupemodif['nom']."'>".$groupemodif['nom']."</option>"; echo "<option value='".$groupemodif['nom']."'>".$groupemodif['nom']."</option>";
echo '</select>'; echo '</select>';
echo "<div class='valider_deplacement'></div>"; echo "<div class='valider_deplacement' data-info='cliquer pour valider'></div>";
echo '</td>'; echo '</td>';
echo '</tr>'; echo '</tr>';
} }

View File

@ -1,34 +1,19 @@
{ {
"eleve1": {
"password" : "password"
},
"agq1929a": { "agq1929a": {
"password" : "password" "password" : "password"
}, },
"mrd1609a": { "mrd1609a": {
"password" : "password" "password" : "0c443b41ddfc6327efa3cfff9337c6dcdb6bf0dc"
},
"eleve2": {
"password" : "password"
}, },
"lbh1609a": { "lbh1609a": {
"password" : "password" "password" : "password"
}, },
"prof2": {
"password" : "password"
},
"admin": { "admin": {
"password" : "password" "password" : "0c443b41ddfc6327efa3cfff9337c6dcdb6bf0dc"
},
"admin2": {
"password" : "password"
} }
} }