Correction du déplacement de groupe, cohérence du semestre pendant le déplacement
This commit is contained in:
parent
2aa3b093a9
commit
f83b0963fe
|
@ -278,23 +278,11 @@ class DataBase{
|
|||
if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID;
|
||||
if( !($etudiantUID=userRepo::UID($etudiant)) ) return 'unknown_user';
|
||||
|
||||
|
||||
// on cherche le groupe associé
|
||||
$getNomGroupe = DataBase::getPDO()->prepare("SELECT g.nom ".
|
||||
"FROM utilisateur as u, groupe as g, appartenance as app ".
|
||||
"WHERE app.id_etudiant = u.identifiant ".
|
||||
"AND app.id_groupe = g.id_groupe ".
|
||||
"AND u.identifiant = :etudiantUID ".
|
||||
|
||||
"AND app.id_semestre = :semestreUID ".
|
||||
"ORDER BY g.nom");
|
||||
$getNomGroupe->execute(array( ':etudiantUID' => $etudiantUID, ':semestreUID' => $semestreUID ));
|
||||
|
||||
// si on a un résultat
|
||||
if( $nomGroupe = $getNomGroupe->fetch()['nom'] )
|
||||
return $nomGroupe;
|
||||
else
|
||||
return 'error';
|
||||
// on retourne le nom
|
||||
if( $groupeObj = groupRepo::forStudent($etudiantUID, $semestreUID) )
|
||||
return $groupeObj['nom'];
|
||||
else // si on a pas trouvé de groupe pour cet étudiant à ce semestre
|
||||
return 'unknown_group';
|
||||
}
|
||||
|
||||
|
||||
|
@ -304,98 +292,13 @@ class DataBase{
|
|||
/******************************************************/
|
||||
/***** déplace un étudiant d'un groupe à un autre *****/
|
||||
/******************************************************/
|
||||
public function deplacerEtudiant($etudiant, $groupe, $annee){
|
||||
public function deplacerEtudiant($etudiant, $groupe, $semestre){
|
||||
|
||||
// on vérifie que le semestre et que le groupe de destination existent
|
||||
if( !($semestreUID=semestreRepo::info($semestre)['id']) ) return 'unknown_semestre';
|
||||
if( !($destGroupeUID=groupRepo::UID($groupe)) ) return 'unknown_newgroup';
|
||||
|
||||
/*** on cherche le nouveau groupe pour cet utilisateur ***/
|
||||
$getNouveauGroupeUID = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as semestre, g.id_groupe as id, u.identifiant as etuUID ".
|
||||
"FROM groupe as g, appartenance as app, appartenance as myapp, utilisateur as u, semestre as s ".
|
||||
"WHERE g.nom = :groupe ".
|
||||
"AND u.identifiant = :etudiant ".
|
||||
|
||||
"AND myapp.id_etudiant = u.identifiant ".
|
||||
"AND myapp.id_semestre = s.id_semestre ".
|
||||
|
||||
"AND app.id_groupe = g.id_groupe ".
|
||||
"AND app.id_semestre = s.id_semestre");
|
||||
$getNouveauGroupeUID->execute(array(
|
||||
':groupe' => $groupe,
|
||||
':etudiant' => $etudiant
|
||||
));
|
||||
|
||||
// si on trouve, on le définit, sinon on retourne "unknown_user"
|
||||
if( $data = $getNouveauGroupeUID->fetch() ){
|
||||
$nouveauGroupeUID = (int) $data['id'];
|
||||
$semestreUID = $data['semestre'];
|
||||
$etudiantUID = $data['etuUID'];
|
||||
}
|
||||
else
|
||||
return 'unknown_newgroup';
|
||||
|
||||
|
||||
/*** on cherche le groupe de cet utilisateur ***/
|
||||
$getGroupeUID = DataBase::getPDO()->prepare("SELECT g.id_groupe as id ".
|
||||
"FROM utilisateur as u, groupe as g, appartenance as app, semestre as s ".
|
||||
"WHERE app.id_etudiant = u.identifiant ".
|
||||
"AND app.id_groupe = g.id_groupe ".
|
||||
"AND app.id_semestre = s.id_semestre ".
|
||||
|
||||
"AND u.identifiant = :etudiantUID ".
|
||||
"AND app.id_semestre = :semestreUID");
|
||||
$getGroupeUID->execute(array(
|
||||
':etudiantUID' => $etudiantUID,
|
||||
':semestreUID' => $semestreUID,
|
||||
));
|
||||
|
||||
// si on trouve, on le définit, sinon on retourne "unknown_user"
|
||||
if( $groupeUID = $getGroupeUID->fetch()['id'] ){
|
||||
$groupeUID = $groupeUID;
|
||||
|
||||
/***************************************************************/
|
||||
/*** CAS 1 : l'utilisateur a déjà un groupe pour ce semestre ***/
|
||||
/***************************************************************/
|
||||
|
||||
// il suffit donc maintenant de modifier l' "appartenance"
|
||||
$updateGroupe = DataBase::getPDO()->prepare("UPDATE appartenance SET id_groupe = :nouveauGroupeUID ".
|
||||
"WHERE id_etudiant = :etudiantUID ".
|
||||
"AND id_groupe = :groupeUID ".
|
||||
"AND id_semestre = :semestreUID");
|
||||
$updateGroupe->execute(array(
|
||||
':nouveauGroupeUID' => $nouveauGroupeUID,
|
||||
':etudiantUID' => $etudiantUID,
|
||||
':groupeUID' => $groupeUID,
|
||||
':semestreUID' => $semestreUID
|
||||
));
|
||||
|
||||
}
|
||||
else{
|
||||
/****************************************************/
|
||||
/*** CAS 2 : l'utilisateur n'a pas encore de groupe */
|
||||
/****************************************************/
|
||||
$insertGroupe = DataBase::getPDO()->prepare("INSERT INTO appartenance(id_appartenance, id_etudiant, id_groupe, id_semestre) ".
|
||||
"VALUES(NULL, :etudiantUID, :nouveauGroupeUID, :semestreUID)");
|
||||
$insertGroupe->execute(array(
|
||||
':etudiantUID' => $etudiantUID,
|
||||
':nouveauGroupeUID' => $nouveauGroupeUID,
|
||||
':semestreUID' => $semestreUID
|
||||
));
|
||||
}
|
||||
|
||||
/* Vérification de l'entrée dans la table */
|
||||
$verif = DataBase::getPDO()->prepare("SELECT count(id_appartenance) as count ".
|
||||
"FROM appartenance ".
|
||||
"WHERE id_etudiant = :etudiantUID ".
|
||||
"AND id_groupe = :nouveauGroupeUID ".
|
||||
"AND id_semestre = :semestreUID");
|
||||
$verif->execute(array(
|
||||
':etudiantUID' => $etudiantUID,
|
||||
':nouveauGroupeUID' => $nouveauGroupeUID,
|
||||
':semestreUID' => $semestreUID
|
||||
));
|
||||
|
||||
$verifFetch = $verif->fetch();
|
||||
|
||||
if( $verifFetch && $verifFetch['count'] == '1' )
|
||||
if( groupRepo::ajouterMembre($etudiant, $destGroupeUID, $semestreUID) )
|
||||
return 'success';
|
||||
else
|
||||
return 'error';
|
||||
|
|
|
@ -267,14 +267,14 @@ require_once __ROOT__.'/manager/database.php';
|
|||
/************************************************/
|
||||
case 'move': if( permission('admin') ){
|
||||
|
||||
$areSetParam = isset($request->etudiant) && isset($request->groupe); // les arguments existent
|
||||
$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; // d'au moins 1 caractère
|
||||
$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
|
||||
|
||||
if( $groupeCheck ){ // si param ok
|
||||
$answer->request = DataBase::getInstance()->deplacerEtudiant($request->etudiant, $request->groupe, $_SESSION['annee']);
|
||||
$answer->request = DataBase::getInstance()->deplacerEtudiant($request->etudiant, $request->groupe, $request->semestre);
|
||||
}else
|
||||
$answer->request = 'param_error';
|
||||
|
||||
|
|
|
@ -110,7 +110,7 @@ class groupRepo extends DBAccess{
|
|||
}
|
||||
|
||||
|
||||
/* AJOUTER UN MEMBRE A UN GROUPE
|
||||
/* AJOUTER UN MEMBRE A UN GROUPE / DEPLACER UN MEMBRE VERS UN GROUPE DONNE (si déjà dans un groupe)
|
||||
*
|
||||
* @etudiant<String> l'identifiant (UID) de l'étudiant à ajouter au groupe
|
||||
* @groupe<int> l'UID du groupe auquel on veut le ratacher
|
||||
|
@ -121,18 +121,10 @@ 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
|
||||
===========================================================================*/
|
||||
$dejaMembre = DataBase::getPDO()->prepare("SELECT id_appartenance as id ".
|
||||
"FROM appartenance ".
|
||||
"WHERE id_etudiant = :etudiant ".
|
||||
"AND id_semestre = :semestre ");
|
||||
$dejaMembre->execute(array(
|
||||
':etudiant' => $etudiant,
|
||||
':semestre' => $semestre
|
||||
));
|
||||
|
||||
if( $appartenanceUID = $dejaMembre->fetch()['id'] ){ // si c'est le cas
|
||||
if( $appartenanceUID = groupRepo::forStudent($etudiant, $semestre)['id_appartenance'] ){ // si c'est le cas
|
||||
|
||||
/* [2] On modifie l'appartenance
|
||||
==============================*/
|
||||
|
@ -140,8 +132,8 @@ class groupRepo extends DBAccess{
|
|||
$ajouterMembres = DataBase::getPDO()->prepare("UPDATE appartenance ".
|
||||
"SET id_groupe = :groupe ".
|
||||
"WHERE id_appartenance = :appartenanceUID");
|
||||
$ajouterMembre->execute(array(
|
||||
':groupe' => $groupeUID,
|
||||
$ajouterMembres->execute(array(
|
||||
':groupe' => $groupe,
|
||||
':appartenanceUID' => $appartenanceUID
|
||||
));
|
||||
|
||||
|
@ -156,9 +148,9 @@ class groupRepo extends DBAccess{
|
|||
"(SELECT id_groupe FROM groupe WHERE id_groupe = :groupe), ".
|
||||
"(SELECT id_semestre FROM semestre WHERE id_semestre = :semestre) ".
|
||||
" )");
|
||||
$ajouterMembre->execute(array(
|
||||
':etudiant' => $etudiantUID,
|
||||
':groupe' => $groupeUID,
|
||||
$ajouterMembres->execute(array(
|
||||
':etudiant' => $etudiant,
|
||||
':groupe' => $groupe,
|
||||
':semestre' => $semestre
|
||||
));
|
||||
|
||||
|
@ -213,17 +205,16 @@ class groupRepo extends DBAccess{
|
|||
*
|
||||
*/
|
||||
public static function forStudent($etudiant, $semestre){
|
||||
$getGroupe = DataBase::getPDO()->prepare("SELECT g.id_groupe as id, g.nom, g.libelle ".
|
||||
"FROM utilisateur as u, groupe as g, appartenance as app ".
|
||||
"WHERE app.id_etudiant = u.identifiant ".
|
||||
"AND app.id_groupe = g.id_groupe ".
|
||||
"AND u.identifiant = :etudiantUID ".
|
||||
$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 ".
|
||||
|
||||
"AND app.id_semestre = :semestreUID ".
|
||||
"AND app.id_etudiant = :etudiant ".
|
||||
"AND app.id_semestre = :semestre ".
|
||||
"ORDER BY g.nom");
|
||||
$getGroupe->execute(array( ':etudiantUID' => $etudiantUID, ':semestreUID' => $semestreUID ));
|
||||
$getGroupe->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre ));
|
||||
|
||||
return DataBase::delNumeric( $getGroupe->fetch() );
|
||||
return $getGroupe->fetch();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ /
|
|||
select: deplacementElements[i], // le <select> en question
|
||||
initval: deplacementElements[i].value, // la valeur initiale du <select>
|
||||
button: deplacementElements[i].parentNode.children[1], // le bouton de validation pour ce <select>
|
||||
streid: deplacementElements[i].dataset.stre, // l'UID du semestre associé au groupe
|
||||
userid: deplacementElements[i].parentNode.parentNode.children[0].children[0].innerHTML // l'identifiant de l'utilisateur associé à ce <select>
|
||||
};
|
||||
|
||||
|
@ -81,7 +82,8 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ /
|
|||
level_0: 'groups',
|
||||
level_1: 'move',
|
||||
etudiant: obj.userid,
|
||||
groupe: obj.select.value
|
||||
groupe: obj.select.value,
|
||||
semestre: obj.streid
|
||||
};
|
||||
|
||||
API.send(request, function(response){ // on gère la réponse de API, si déplacement effectué, on recharge la page
|
||||
|
|
|
@ -527,13 +527,15 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm
|
|||
// echo '<td><strong><span>'.$group['nom'].'</span></strong></td>';
|
||||
// changement de groupe
|
||||
echo '<td>';
|
||||
echo "<select class='deplacement_groupe'>";
|
||||
echo "<select data-stre='".$group['id_semestre']."' class='deplacement_groupe'>";
|
||||
|
||||
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
|
||||
if( $groupemodif['semestre'] == $group['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 // s'il s'agit d'un autre groupe, c'est normal
|
||||
else
|
||||
echo "<option value='".$groupemodif['nom']."'>".$groupemodif['nom']."</option>";
|
||||
|
||||
echo '</select>';
|
||||
echo "<div class='confirm'>déplacer</div>";
|
||||
echo '</td>';
|
||||
|
|
Loading…
Reference in New Issue