From 6efa758cab7c27d48652a7225b4b390a5a52876d Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 17 Nov 2015 08:35:21 +0100 Subject: [PATCH] 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é
";