From 853f2ec03e6c5014a51aad77bc40c7fe0ef90b2a Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Thu, 26 Nov 2015 00:18:50 +0100 Subject: [PATCH] =?UTF-8?q?Correction=20de=20la=20liste=20de=20proposition?= =?UTF-8?q?=20de=20changement=20de=20groupe=20(maintenant=20exhaustive)=20?= =?UTF-8?q?+=20correction=20de=20relation=20dans=20requ=C3=AAte=20d'affich?= =?UTF-8?q?age=20des=20manager/repo@membres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 31 +++-- manager/groups.php | 29 ++++- manager/repo/group.php | 53 ++++---- page/groups.php | 267 +++++++++++++++++++++-------------------- test.php | 32 ++--- 5 files changed, 229 insertions(+), 183 deletions(-) diff --git a/manager/database.php b/manager/database.php index c1b4595..325b17e 100755 --- a/manager/database.php +++ b/manager/database.php @@ -465,12 +465,6 @@ class DataBase{ /*** retourne la liste des utilisateurs des groupes d'une année ***/ /******************************************************************/ 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 )); - if( !( $checkAnnee->fetch()['id'] ) ) return 'unknown_year'; - - // on récupère la liste des groupes $grouplist = DataBase::delNumeric( groupRepo::forYear($semestre_pair, $annee) ); @@ -512,9 +506,9 @@ class DataBase{ // on vérifie que le semestre et que le groupe de destination existent if( !($semestreInfo=semestreRepo::info($semestre)) ) return 'unknown_semestre'; - if( !($destGroupeUID=groupRepo::UID($groupe)) ) return 'unknown_newgroup'; + if( !($destGroupeInfo=groupRepo::info($groupe)) ) return 'unknown_newgroup'; - if( groupRepo::ajouterMembre($etudiant, $destGroupeUID, $semestreInfo['id']) ) + if( groupRepo::ajouterMembre($etudiant, $destGroupeInfo['id'], $semestreInfo['id']) ) return 'success'; else return 'error'; @@ -523,6 +517,27 @@ class DataBase{ + /* retourne la liste exhaustive des groupes de la BDD + * + * @return grouplist la liste de tous les groupes de la BDD + * + */ + public function getExhaustiveGroupList(){ + $grouplist = groupRepo::getAllGroups(); + + // on essaie de supposer le semestre en fonction du nom + foreach($grouplist as $i=>$group) + if( preg_match('/^(?:.+)?S(\d)(?:.+)?$/', $group['nom'], $m) ) // si le semestre est dans le nom + $grouplist[$i]['rang'] = intval($m[1]); // on récupère le rang + else + $grouplist[$i]['rang'] = null; // sinon rang = null + + + return $grouplist; + } + + + diff --git a/manager/groups.php b/manager/groups.php index 527fb02..ec73b1b 100755 --- a/manager/groups.php +++ b/manager/groups.php @@ -231,12 +231,11 @@ require_once __ROOT__.'/manager/database.php'; case 'move': if( permission('admin') ){ $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 && 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 + $typeOkParam = $areSetParam && is_string($request->etudiant) && is_numeric($request->groupe); // si c'est des strings + $nEmptyParam = $typeOkParam && strlen($request->etudiant) > 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 - if( $groupeCheck ){ // si param ok + if( $etudiantCheck ){ // si param ok $answer->request = DataBase::getInstance()->deplacerEtudiant($request->etudiant, $request->groupe, $request->semestre); }else $answer->request = 'param_error'; @@ -247,6 +246,21 @@ require_once __ROOT__.'/manager/database.php'; + /******************************************/ + /* la liste de TOUS les groupes de la BDD */ + /******************************************/ + case 'exhaustiveList': if( permission('admin') ){ + + $answer->grouplist = DataBase::getInstance()->getExhaustiveGroupList(); + $answer->request = 'success'; + + }else + $answer->request = 'permission_error'; + break; + + + + /*******************************************/ /* intégration des élèves pour un semestre */ /*******************************************/ @@ -262,6 +276,11 @@ require_once __ROOT__.'/manager/database.php'; $answer->request = 'permission_error'; break; + + + + + /***********/ /* DEFAULT */ /***********/ diff --git a/manager/repo/group.php b/manager/repo/group.php index 9e9009c..bbe4631 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -41,7 +41,7 @@ class groupRepo extends DBAccess{ */ public static function info($groupeUID){ // on considère que le groupe existe - $getGroupeInfo = DataBase::getPDO()->prepare("SELECT id_groupe as id, nom, libelle FROM groupe WHERE id_groupe = :groupeUID"); + $getGroupeInfo = DataBase::getPDO()->prepare("SELECT id_groupe as id, nom FROM groupe WHERE id_groupe = :groupeUID"); $getGroupeInfo->execute(array( ':groupeUID' => $groupeUID )); return DataBase::delNumeric( $getGroupeInfo->fetch(), true ); @@ -121,7 +121,7 @@ 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 ===========================================================================*/ if( $appartenanceUID = groupRepo::forStudent($etudiant, $semestre)['id_appartenance'] ){ // si c'est le cas @@ -143,11 +143,7 @@ class groupRepo extends DBAccess{ ==============================*/ // création et exécution de la requête de création d'appartenance $ajouterMembres = DataBase::getPDO()->prepare("INSERT INTO appartenance(id_etudiant, id_groupe, id_semestre) - VALUES( - (SELECT identifiant FROM utilisateur WHERE identifiant = :etudiant), - (SELECT id_groupe FROM groupe WHERE id_groupe = :groupe), - (SELECT id_semestre FROM semestre WHERE id_semestre = :semestre) - )"); + VALUES(:etudiant, :groupe, :semestre)"); $ajouterMembres->execute(array( ':etudiant' => $etudiant, ':groupe' => $groupe, @@ -179,7 +175,7 @@ class groupRepo extends DBAccess{ 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 + AND app.id_semestre = s.id_semestre AND g.id_groupe = :groupeUID AND s.id_semestre = :semestreUID @@ -241,23 +237,23 @@ class groupRepo extends DBAccess{ $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 + 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 AND mcc_m.id_mcc_module = ens.id_mcc_module - - AND ens.id_enseignant = u.identifiant - AND ens.correcteur = 1 - - AND app.id_etudiant = eleve.identifiant - AND app.id_semestre = s.id_semestre - AND app.id_groupe = g.id_groupe - - AND u.identifiant = :enseignant + + AND ens.id_enseignant = u.identifiant + AND ens.correcteur = 1 + + AND app.id_etudiant = eleve.identifiant + AND app.id_semestre = s.id_semestre + AND app.id_groupe = g.id_groupe + + AND u.identifiant = :enseignant AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) - AND s.annee = :annee + AND s.annee = :annee ORDER BY s.rang, g.nom"); $getGroupeList->execute(array( ':enseignant' => $enseignant, ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee )); @@ -325,6 +321,17 @@ class groupRepo extends DBAccess{ + /* retourne la liste exhaustive des groupes + * + * @return groupes retourne la liste des groupes de la BDD + * + */ + public static function getAllGroups(){ + $getGroupList = DataBase::getPDO()->query("SELECT id_groupe as id, nom FROM groupe ORDER BY nom ASC"); + // $getGroupList = DataBase::getPDO()->query("SELECT id_groupe as id, nom FROM groupe WHERE length(nom) <= 6 ORDER BY nom ASC"); + + return DataBase::delNumeric( $getGroupList->fetchAll() ); + } diff --git a/page/groups.php b/page/groups.php index 9783e34..4f6ecc9 100755 --- a/page/groups.php +++ b/page/groups.php @@ -362,164 +362,169 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un /****************************/ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un admin - for( $i = 2 ; $i <= 2 ; $i++ ){ // pour chaque semestre - $request = new stdClass(); - $answer = new stdClass(); + $requestAllGroups = new stdClass(); $answerAllGroups = new stdClass(); + // on récupère la liste de tous les groupes (pour le déplacement) + $requestAllGroups->level_1 = 'exhaustiveList'; - $request->level_1 = 'grouplistForYear'; - $request->annee = $_SESSION['annee']; + groups_switch_level_1($requestAllGroups, $answerAllGroups); - groups_switch_level_1($request, $answer); // on fait la requête pour les groupes en fonction des filtres si définis + // on récupère les groupes affichés sur la page + $request = new stdClass(); $answer = new stdClass(); + $request->level_1 = 'grouplistForYear'; + $request->annee = $_SESSION['annee']; - if( $answer->request == 'success' && $answer->request == 'success' ){ // si pas d'erreur - ////////////////////////////////////////////////////////////// - echo "
"; - - /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ - $ListeUIDFormations = array(); - $ListeUIDSemestres = array(); - $ListeUIDGroupes = array(); + groups_switch_level_1($request, $answer); // on fait la requête pour les groupes en fonction des filtres si définis - // 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']); - $moveStudentsFormationOpt = $formationOpt; - // si la formation optionnelle n'est pas définie ou incohérente, on le fait (première valeur trouvée) - if( $moveStudentsFormationOpt == null || !in_array($moveStudentsFormationOpt, $verificationUIDFormations) ) - $moveStudentsFormationOpt = $verificationUIDFormations[0]; + if( $answer->request == 'success' && $answerAllGroups->request == 'success' ){ // si pas d'erreur + ////////////////////////////////////////////////////////////// + echo "
"; + + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDGroupes = array(); + + // 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']); + + $moveStudentsFormationOpt = $formationOpt; + // si la formation optionnelle n'est pas définie ou incohérente, on le fait (première valeur trouvée) + if( $moveStudentsFormationOpt == null || !in_array($moveStudentsFormationOpt, $verificationUIDFormations) ) + $moveStudentsFormationOpt = $verificationUIDFormations[0]; - /**************************/ - /* AFFINAGE PAR FORMATION */ - /**************************/ - echo ""; - foreach($answer->grouplist as $groupe){ if( !in_array($groupe['id_formation'], $ListeUIDFormations) ){ + /**************************/ + /* AFFINAGE PAR FORMATION */ + /**************************/ + echo "
"; + foreach($answer->grouplist as $groupe){ if( !in_array($groupe['id_formation'], $ListeUIDFormations) ){ - // si c'est la formation séléctionnée - if( $groupe['id_formation'] == $moveStudentsFormationOpt ) echo "'; - else echo "'; + // si c'est la formation séléctionnée + if( $groupe['id_formation'] == $moveStudentsFormationOpt ) echo "'; + else 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'].'".$groupe['formation'].'".$groupe['formation'].'
"; + // on ajoute la formation à la liste pour ne pas la répéter + array_push($ListeUIDFormations, $groupe['id_formation']); + }} + echo ""; - /*************************/ - /* AFFINAGE PAR SEMESTRE */ - /*************************/ - echo ""; - if( $semestreOpt == null ) echo ""; - else echo ""; + /*************************/ + /* AFFINAGE PAR SEMESTRE */ + /*************************/ + echo "
TousTous
"; + 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'] == $moveStudentsFormationOpt && !in_array($groupe['id_semestre'], $ListeUIDSemestres) ){ + /* 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'] == $moveStudentsFormationOpt && !in_array($groupe['id_semestre'], $ListeUIDSemestres) ){ + + // si c'est le semestre séléctionné + if( $groupe['id_semestre'] == $semestreOpt ) echo "'; + else echo "'; + + + // on ajoute le semestre à la liste pour ne pas le répéter + array_push($ListeUIDSemestres, $groupe['id_semestre']); + }} + echo "
TousTous".$groupe['semestre'].'".$groupe['semestre'].'
"; + + + + + /***********************/ + /* AFFINAGE PAR GROUPE */ + /***********************/ + echo ""; + + + + + + foreach($answer->grouplist as $group){ // pour chaque groupe + + if( $group['id_formation'] == $moveStudentsFormationOpt && ($semestreOpt==null || $semestreOpt==$group['id_semestre']) && ($groupeOpt==null || $groupeOpt==$group['id']) ){ + + if( count($group['userlist']) > 0 ){ // s'il y a des utilisateurs + + echo ""; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + + + echo ''; - // si c'est le semestre séléctionné - if( $groupe['id_semestre'] == $semestreOpt ) echo "'; - else echo "'; + // pour chaque utilisateur + foreach($group['userlist'] as $user){ + echo ''; + echo "'; + echo ''; + echo ''; + echo ''; + echo '
'; + echo 'Groupe '.$group['nom'].''; + echo '
".$groupe['semestre'].'".$groupe['semestre'].'
".$user['identifiant'].''.$user['prenom'].''.$user['nom'].''.$group['nom'].''; - // on ajoute le semestre à la liste pour ne pas le répéter - array_push($ListeUIDSemestres, $groupe['id_semestre']); - }} - echo "
"; + /* CHANGEMENT DE GROUPE */ + echo "'; + echo "
déplacer
"; - - - /***********************/ - /* AFFINAGE PAR GROUPE */ - /***********************/ - echo ""; - - - - - - foreach($answer->grouplist as $group){ // pour chaque groupe - - if( $group['id_formation'] == $moveStudentsFormationOpt && ($semestreOpt==null || $semestreOpt==$group['id_semestre']) && ($groupeOpt==null || $groupeOpt==$group['id']) ){ - - if( count($group['userlist']) > 0 ){ // s'il y a des utilisateurs - - echo ""; - - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - - - - echo ''; - - - // pour chaque utilisateur - foreach($group['userlist'] as $user){ - echo ''; - echo "'; - echo ''; - echo ''; - // echo ''; - // changement de groupe - echo ''; - echo ''; - } - - // echo ''; - - echo ''; - - echo '
'; - echo 'Groupe '.$group['nom'].''; - echo '
".$user['identifiant'].''.$user['prenom'].''.$user['nom'].''.$group['nom'].''; - echo "'; - echo "
déplacer
"; - echo '
'; - + echo ''; + echo ''; } - } + // echo ''; + + echo ''; + + echo ''; + } - echo '
'; - //////////////////////////////////////////////////////// - }else - echo "
Aucun groupe trouvé
"; + + } } + echo '
'; + //////////////////////////////////////////////////////// + }else + echo "
Aucun groupe trouvé
"; } ?> diff --git a/test.php b/test.php index e9cb280..a52858e 100755 --- a/test.php +++ b/test.php @@ -46,30 +46,30 @@ require_once __ROOT__.'/manager/security.php'; debug(); -$_SESSION['annee'] = 2018; +$_SESSION['annee'] = 2019; -require_once __ROOT__.'/manager/phpExcel.php'; -require_once __ROOT__.'/manager/groups.php'; +// require_once __ROOT__.'/manager/phpExcel.php'; +// require_once __ROOT__.'/manager/groups.php'; -$r1 = new stdClass(); $a1 = new stdClass(); -$r1->level_1 = 'import_inscrits'; -$r1->docPath = __ROOT__.'/src/files/modele_import_inscrits.xlsx'; +// $r1 = new stdClass(); $a1 = new stdClass(); +// $r1->level_1 = 'import_inscrits'; +// $r1->docPath = __ROOT__.'/src/files/modele_import_inscrits.xlsx'; -xlsx_switch_lvl1($r1, $a1); +// xlsx_switch_lvl1($r1, $a1); -if( $a1->request == 'success' ){ +// if( $a1->request == 'success' ){ - $r2 = new stdClass(); $a2 = new stdClass(); - $r2->level_1 = 'addUserlist'; - $r2->rang = 1; - $r2->annee = 2018; - $r2->formationList = $a1->formationList; +// $r2 = new stdClass(); $a2 = new stdClass(); +// $r2->level_1 = 'addUserlist'; +// $r2->rang = 1; +// $r2->annee = 2018; +// $r2->formationList = $a1->formationList; - groups_switch_level_1($r2, $a2); +// groups_switch_level_1($r2, $a2); - var_dump( $a2 ); -} +// var_dump( $a2 ); +// }