diff --git a/manager/database.php b/manager/database.php index 1fbbf44..2434a5f 100755 --- a/manager/database.php +++ b/manager/database.php @@ -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'; diff --git a/manager/groups.php b/manager/groups.php index 5dce139..b024c58 100755 --- a/manager/groups.php +++ b/manager/groups.php @@ -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'; diff --git a/manager/repo/group.php b/manager/repo/group.php index 4b21c28..d2a03e0 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -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 l'identifiant (UID) de l'étudiant à ajouter au groupe * @groupe 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(); } diff --git a/page/_JS/groups.js b/page/_JS/groups.js index 3e65502..d7a81a1 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -53,6 +53,7 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / select: deplacementElements[i], // le button: deplacementElements[i].parentNode.children[1], // le bouton de validation pour ce }; @@ -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 diff --git a/page/groups.php b/page/groups.php index 87f5532..92e852c 100755 --- a/page/groups.php +++ b/page/groups.php @@ -527,13 +527,15 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm // echo ''.$group['nom'].''; // changement de groupe echo ''; - echo ""; + 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 ""; - else // s'il s'agit d'un autre groupe, c'est normal + else echo ""; + echo ''; echo "
déplacer
"; echo '';