Correction de la liste de proposition de changement de groupe (maintenant exhaustive) + correction de relation dans requête d'affichage des manager/repo@membres

This commit is contained in:
xdrm-brackets 2015-11-26 00:18:50 +01:00
parent 917fdec52f
commit 853f2ec03e
5 changed files with 229 additions and 183 deletions

View File

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

View File

@ -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 */
/***********/

View File

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

View File

@ -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 "<section name='movestudents' data-title='Tous les groupes' class='basic'>";
/* 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 "<section name='movestudents' data-title='Tous les groupes' class='basic'>";
/* 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 "<table class='partlist' name='formation'><tbody><tr>";
foreach($answer->grouplist as $groupe){ if( !in_array($groupe['id_formation'], $ListeUIDFormations) ){
/**************************/
/* AFFINAGE PAR FORMATION */
/**************************/
echo "<table class='partlist' name='formation'><tbody><tr>";
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 "<td data-value='".$groupe['id_formation']."' class='active'>".$groupe['formation'].'</td>';
else echo "<td data-value='".$groupe['id_formation']."'>".$groupe['formation'].'</td>';
// si c'est la formation séléctionnée
if( $groupe['id_formation'] == $moveStudentsFormationOpt ) echo "<td data-value='".$groupe['id_formation']."' class='active'>".$groupe['formation'].'</td>';
else echo "<td data-value='".$groupe['id_formation']."'>".$groupe['formation'].'</td>';
// on ajoute la formation à la liste pour ne pas la répéter
array_push($ListeUIDFormations, $groupe['id_formation']);
}}
echo "</tr></tbody></table>";
// on ajoute la formation à la liste pour ne pas la répéter
array_push($ListeUIDFormations, $groupe['id_formation']);
}}
echo "</tr></tbody></table>";
/*************************/
/* AFFINAGE PAR SEMESTRE */
/*************************/
echo "<table class='partlist' name='semestre'><tbody><tr>";
if( $semestreOpt == null ) echo "<td data-value='*' class='active'>Tous</td>";
else echo "<td data-value='*'>Tous</td>";
/*************************/
/* AFFINAGE PAR SEMESTRE */
/*************************/
echo "<table class='partlist' name='semestre'><tbody><tr>";
if( $semestreOpt == null ) echo "<td data-value='*' class='active'>Tous</td>";
else echo "<td data-value='*'>Tous</td>";
/* 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 "<td data-value='".$groupe['id_semestre']."' class='active'>".$groupe['semestre'].'</td>';
else echo "<td data-value='".$groupe['id_semestre']."'>".$groupe['semestre'].'</td>';
// on ajoute le semestre à la liste pour ne pas le répéter
array_push($ListeUIDSemestres, $groupe['id_semestre']);
}}
echo "</tr></tbody></table>";
/***********************/
/* AFFINAGE PAR GROUPE */
/***********************/
echo "<select name='groupe'>";
if( $groupeOpt == null ) echo "<option value='*' selected>Tous les groupes</option>";
else echo "<option value='*'>Tous les groupes</option>";
/* 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'] == $moveStudentsFormationOpt && in_array($groupe['id_semestre'], $ListeUIDSemestres) && !in_array($groupe['id'], $ListeUIDGroupes) ){
// si c'est le groupe sélectionné
if( $groupe['id'] == $groupeOpt ) echo "<option value='".$groupe['id']."' selected>".$groupe['nom'].'</option>';
else echo "<option value='".$groupe['id']."'>".$groupe['nom'].'</option>';
// on ajoute le semestre à la liste pour ne pas le répéter
array_push($ListeUIDGroupes, $groupe['id']);
}}
echo "</select>";
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 "<table class='basic col5'>";
echo '<thead>';
echo '<tr>';
echo '<th colspan=5>';
echo 'Groupe <span>'.$group['nom'].'</span>';
echo '</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
// si c'est le semestre séléctionné
if( $groupe['id_semestre'] == $semestreOpt ) echo "<td data-value='".$groupe['id_semestre']."' class='active'>".$groupe['semestre'].'</td>';
else echo "<td data-value='".$groupe['id_semestre']."'>".$groupe['semestre'].'</td>';
// pour chaque utilisateur
foreach($group['userlist'] as $user){
echo '<tr>';
echo "<td><span class=link>".$user['identifiant'].'</span></td>';
echo '<td>'.$user['prenom'].'</td>';
echo '<td>'.$user['nom'].'</td>';
echo '<td>'.$group['nom'].'</td>';
echo '<td>';
// on ajoute le semestre à la liste pour ne pas le répéter
array_push($ListeUIDSemestres, $groupe['id_semestre']);
}}
echo "</tr></tbody></table>";
/* CHANGEMENT DE GROUPE */
echo "<select data-stre='".$group['id_semestre']."' class='deplacement_groupe'>";
// on affiche le groupe courant
echo "<option value='".$group['id']."' selected>".$group['nom']."</option>";
foreach($answerAllGroups->grouplist as $groupemodif) // pour tous les groupes
if( $groupemodif['rang'] == $group['rang'] && $groupemodif['id'] != $group['id'] ) // si c'est un groupe du même rang et pas le groupe actuel
echo "<option value='".$groupemodif['id']."'>".$groupemodif['nom']."</option>";
echo '</select>';
echo "<div class='confirm'>déplacer</div>";
/***********************/
/* AFFINAGE PAR GROUPE */
/***********************/
echo "<select name='groupe'>";
if( $groupeOpt == null ) echo "<option value='*' selected>Tous les groupes</option>";
else echo "<option value='*'>Tous les groupes</option>";
/* 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'] == $moveStudentsFormationOpt && in_array($groupe['id_semestre'], $ListeUIDSemestres) && !in_array($groupe['id'], $ListeUIDGroupes) ){
// si c'est le groupe sélectionné
if( $groupe['id'] == $groupeOpt ) echo "<option value='".$groupe['id']."' selected>".$groupe['nom'].'</option>';
else echo "<option value='".$groupe['id']."'>".$groupe['nom'].'</option>';
// on ajoute le semestre à la liste pour ne pas le répéter
array_push($ListeUIDGroupes, $groupe['id']);
}}
echo "</select>";
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 "<table class='basic col4'>";
echo '<thead>';
echo '<tr>';
echo '<th colspan=5>';
echo 'Groupe <span>'.$group['nom'].'</span>';
echo '</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
// pour chaque utilisateur
foreach($group['userlist'] as $user){
echo '<tr>';
echo "<td><span class=link>".$user['identifiant'].'</span></td>';
echo '<td>'.$user['prenom'].'</td>';
echo '<td>'.$user['nom'].'</td>';
// echo '<td><strong><span>'.$group['nom'].'</span></strong></td>';
// changement de groupe
echo '<td>';
echo "<select data-stre='".$group['id_semestre']."' class='deplacement_groupe'>";
foreach($answer->grouplist as $groupemodif) // pour tous les groupes
if( $groupemodif['id_semestre'] == $group['id_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 "<option value='".$groupemodif['nom']."' selected>".$groupemodif['nom']."</option>";
else
echo "<option value='".$groupemodif['nom']."'>".$groupemodif['nom']."</option>";
echo '</select>';
echo "<div class='confirm'>déplacer</div>";
echo '</td>';
echo '</tr>';
}
// echo '<tr><td colspan=5 class=more></td></tr>';
echo '</tbody>';
echo '</table>';
echo '</td>';
echo '</tr>';
}
}
// echo '<tr><td colspan=5 class=more></td></tr>';
echo '</tbody>';
echo '</table>';
}
echo '</section>';
////////////////////////////////////////////////////////
}else
echo "<section name='movestudents' data-title='Tous les groupes' class='basic'><table class=basic><tbody><tr><td>Aucun groupe trouvé</td></tr></tbody></table></section>";
}
}
echo '</section>';
////////////////////////////////////////////////////////
}else
echo "<section name='movestudents' data-title='Tous les groupes' class='basic'><table class=basic><tbody><tr><td>Aucun groupe trouvé</td></tr></tbody></table></section>";
} ?>

View File

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