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; }
/* .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; }
/* <thead> 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); }
.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); }

View File

@ -111,6 +111,14 @@ class noteRepo extends DBAccess{
}
/*
** PAS UTILISÉ POUR L'INSTANT
*/
/* RENVOIE LES NOTES DES ETUDIANTS POUR UN CONTROLE PARTICULIER
*
* @controle<int> 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() );

View File

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

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}) ){
// [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

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

View File

@ -4,6 +4,24 @@ require_once __ROOT__.'/manager/groups.php';
require_once __ROOT__.'/manager/modules.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" *
@ -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
////////////////////////////////////////////////////////////////////////////////
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
@ -126,27 +144,42 @@ 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 "<table class='basic col5'><thead>";
echo '<tr><th colspan=5>'.$module['nom'].' - '.$module['libelle'].'</th></tr></thead><tbody>';
echo "<table class='basic col4'><thead>";
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
foreach($module['controles'] as $controle){ // pour chaque contrôle
echo '<tr>';
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
echo '<td><span class=unstressed>Pas noté</span></td>';
echo "<td>".$module['nom']." - ".$module['libelle']."</td>";
echo '<td>Coefficient '.number_format($controle['coefficient'], 2).'</td>';
echo '<td></td><td></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><span class=unstressed>Coefficient</span> '.number_format($controle['coefficient'], 2).'</td>';
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
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>";
foreach($controle['notes'] as $note){ // on affiche la liste des élèves avec leurs notes
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
@ -163,7 +196,7 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un
////////////////////////////////////////////////////////////////////////////////
echo '</section>';
}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();
$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->annee = $_SESSION['annee'];
if ( $semestreOpt != null ) $request->semestre = $semestreOpt;
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'>";
@ -499,14 +510,14 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm
// changement de groupe
echo '<td>';
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['nom'] == $group['nom'] ) // s'il s'agit du groupe courant, on met en sélection
echo "<option value='".$groupemodif['nom']."' selected>".$groupemodif['nom']."</option>";
else // s'il s'agit d'un autre groupe, c'est normal
echo "<option value='".$groupemodif['nom']."'>".$groupemodif['nom']."</option>";
echo '</select>';
echo "<div class='valider_deplacement'></div>";
echo "<div class='valider_deplacement' data-info='cliquer pour valider'></div>";
echo '</td>';
echo '</tr>';
}

View File

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