Correction du déplacement de groupe, cohérence du semestre pendant le déplacement

This commit is contained in:
xdrm-brackets 2015-11-16 10:27:35 +01:00
parent 2aa3b093a9
commit f83b0963fe
5 changed files with 37 additions and 139 deletions

View File

@ -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';

View File

@ -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';

View File

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

View File

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

View File

@ -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>';