diff --git a/manager/database.php b/manager/database.php index 52728ce..e9ddca5 100755 --- a/manager/database.php +++ b/manager/database.php @@ -1035,49 +1035,31 @@ class DataBase{ /******************************************************/ /***** déplace un étudiant d'un groupe à un autre *****/ /******************************************************/ - public function deplacerEtudiant($etudiant, $groupe, $semestre, $annee){ - /*** on cherche un semestre avec ce rang et cette année (qui est unique) ***/ - $getSemestreUID = $this->pdo->prepare("SELECT id_semestre as id FROM semestre WHERE rang = :rang AND annee = :annee"); - $getSemestreUID->execute(array( - ':rang' => $semestre, - ':annee' => $annee - )); - - // si on trouve, on le définit, sinon on retourne "unknown_group" - if( $semestreUID = $getSemestreUID->fetch()['id'] ) - $semestreUID = (int) $semestreUID; - else - return 'unknown_semestre'; - - - /*** on cherche un utilisateur avec cet identifiant ***/ - $getEtudiantUID = $this->pdo->prepare("SELECT identifiant as id FROM utilisateur as u, appartenance as app ". - "WHERE u.identifiant = app.id_etudiant ". - "AND u.identifiant = :etudiant ". - "AND app.id_semestre = :semestreUID"); - $getEtudiantUID->execute(array( - ':etudiant' => $etudiant, - ':semestreUID' => $semestreUID - )); - - // si on trouve, on le définit, sinon on retourne "unknown_user" - if( $etudiantUID = $getEtudiantUID->fetch()['id'] ) - $etudiantUID = $etudiantUID; - else - return 'unknown_user'; + public function deplacerEtudiant($etudiant, $groupe, $annee){ /*** on cherche le nouveau groupe pour cet utilisateur ***/ - $getNouveauGroupeUID = $this->pdo->prepare("SELECT g.id_groupe as id ". - "FROM groupe as g ". - "WHERE g.nom = :groupe"); + $getNouveauGroupeUID = $this->pdo->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 + ':groupe' => $groupe, + ':etudiant' => $etudiant )); // si on trouve, on le définit, sinon on retourne "unknown_user" - if( $nouveauGroupeUID = $getNouveauGroupeUID->fetch()['id'] ) - $nouveauGroupeUID = $nouveauGroupeUID; + if( $data = $getNouveauGroupeUID->fetch() ){ + $nouveauGroupeUID = (int) $data['id']; + $semestreUID = $data['semestre']; + $etudiantUID = $data['etuUID']; + } else return 'unknown_newgroup'; diff --git a/manager/groups.php b/manager/groups.php index f949e52..6f86771 100755 --- a/manager/groups.php +++ b/manager/groups.php @@ -210,16 +210,14 @@ require_once __ROOT__.'/manager/database.php'; /* déplace un étudiant de son groupe à un autre */ /************************************************/ case 'move': - $areSetParam = isset($request->etudiant) && isset($request->groupe) && isset($request->semestre) && isset($request->annee); // les arguments existent - $typeOkParam = $areSetParam && is_string($request->etudiant) && is_string($request->groupe) && is_numeric($request->semestre) && is_numeric($request->annee); // si c'est des strings + $areSetParam = isset($request->etudiant) && isset($request->groupe); // 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 $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 - $semestreCheck = $groupeCheck && preg_match('/^[1-4]{1}$/i', $request->semestre); // semestre (semestre) bon format - $anneeCheck = $semestreCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format if( $groupeCheck ){ // si param ok - $answer->request = DataBase::getInstance()->deplacerEtudiant($request->etudiant, $request->groupe, $request->semestre, $request->annee); + $answer->request = DataBase::getInstance()->deplacerEtudiant($request->etudiant, $request->groupe, $_SESSION['annee']); }else $answer->answer = 'param_error'; break; diff --git a/page/_JS/groups.js b/page/_JS/groups.js index 151a848..e418c67 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -57,9 +57,7 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / level_0: 'groups', level_1: 'move', etudiant: id_etudiant, - groupe: nom_groupe, - semestre: 2, - annee: 2015 + groupe: nom_groupe }; // l'ordre n'est pas alphabétique mais va à la fin @@ -81,7 +79,21 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / /***************************************************/ /*** GESTION DES SELECT POUR AFFINER LES GROUPES ***/ /***************************************************/ -var selectGroupes = document.querySelectorAll("#CONTAINER > section[name] > select"); -for( var i = 0 ; i < selectGroupes.length ; i++ ) - selectGroupes[i].associatedSection = selectGroupes[i].parentNode.getAttribute('name'); -console.log( selectGroupes ); \ No newline at end of file +var selectList = document.querySelectorAll("#CONTAINER > section[name] > select"); + + +// GESTION DE LA PRISE EN COMPTE DES SELECT // +DOM.CONTAINER.addEventListener('change', function(e){ + if( e.target.tagName == 'SELECT' && ['semestre', 'groupe'].indexOf(e.target.getAttribute('name')) > -1 ){ + if( e.target.getAttribute('name') == 'semestre' ){ // si modifie le semestre + pageM.vars[1] = e.target.value; // on selectionne semestre + pageM.vars[2] = '*'; // on désactive le groupe + }else{ + pageM.vars[1] = '*'; // on désactive le semestre + pageM.vars[2] = e.target.value; // on active le groupe + } + + selectSection( document.querySelector('#MENU > span[data-link='+pageM.page+']') ); + // console.log(e.target.getAttribute('name')+' = '+e.target.value); + } +}, false); \ No newline at end of file diff --git a/page/groups.php b/page/groups.php index 5c92adc..07508f4 100755 --- a/page/groups.php +++ b/page/groups.php @@ -24,14 +24,12 @@ require_once __ROOT__.'/manager/groups.php'; array_push($postVars, $k); - /* GESTION SEMESTRE OPTIONNEL */ if( isset($postVars[1]) && is_numeric($postVars[1]) ) $semestreOpt = $postVars[1]; else $semestreOpt = null; - echo 'semestre '.$semestreOpt; /* GESTION GROUPES OPTIONNEL */ if( isset($postVars[2]) && is_string($postVars[2]) && strlen($postVars[2]) > 1 ) @@ -39,8 +37,6 @@ require_once __ROOT__.'/manager/groups.php'; else $groupeOpt = null; - echo 'groupe '.$groupeOpt; - /************************/ /*** TOUS LES GROUPES ***/ @@ -128,6 +124,8 @@ if( $_SESSION['identifiant'] != null && ($_SESSION['droits'] == 'teacher' || $_S $request->level_1 = 'grouplistForYear'; $request->annee = $_SESSION['annee']; + if ( $semestreOpt != null ) $request->semestre = $semestreOpt; + elseif( $groupeOpt != null ) $request->groupe = $groupeOpt; groups_switch_level_1($request, $answer); @@ -137,11 +135,15 @@ if( $_SESSION['identifiant'] != null && ($_SESSION['droits'] == 'teacher' || $_S /* select pour SEMESTRES */ $lastSemestre = null; - echo ""; + echo ""; foreach($answer->grouplist as $group){ if( $lastSemestre == null || $lastSemestre != $group->semestre ){ - echo ''; + + if( $group->semestre[1] == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; $lastSemestre = $group->semestre; } } @@ -150,11 +152,16 @@ if( $_SESSION['identifiant'] != null && ($_SESSION['droits'] == 'teacher' || $_S /* select pour GROUPES */ $lastGroupe = null; - echo ""; + echo ""; foreach($answer->grouplist as $group){ if( $lastGroupe == null || $lastGroupe != $group->nom ){ - echo ''; + + if( $group->nom == $groupeOpt ) // si c'est le groupe séléctionné + echo "'; + else + echo "'; + $lastGroupe = $group->nom; } } @@ -307,6 +314,9 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'teacher' ){ // s $request->level_1 = 'grouplistForTeacher'; /******************************************************************************************************** A FAIRE **/ $request->enseignant = $_SESSION['identifiant']; $request->annee = $_SESSION['annee']; + if ( $semestreOpt != null ) $request->semestre = $semestreOpt; + elseif( $groupeOpt != null ) $request->groupe = $groupeOpt; + groups_switch_level_1($request, $answer); if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe @@ -315,11 +325,16 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'teacher' ){ // s /* select pour SEMESTRES */ $lastSemestre = null; - echo ""; + echo ""; foreach($answer->grouplist as $group){ if( $lastSemestre == null || $lastSemestre != $group->semestre ){ - echo ''; + + if( $group->semestre[1] == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + $lastSemestre = $group->semestre; } } @@ -328,11 +343,16 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'teacher' ){ // s /* select pour GROUPES */ $lastGroupe = null; - echo ""; + echo ""; foreach($answer->grouplist as $group){ if( $lastGroupe == null || $lastGroupe != $group->nom ){ - echo ''; + + if( $group->nom == $groupeOpt ) // si c'est le groupe séléctionné + echo "'; + else + echo "'; + $lastGroupe = $group->nom; } } @@ -404,14 +424,54 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'admin' ){ // si $answer = new stdClass(); $request->level_1 = 'grouplistForYear'; - $request->semestre = $i; $request->annee = $_SESSION['annee']; + if ( $semestreOpt != null ) $request->semestre = $semestreOpt; + elseif( $groupeOpt != null ) $request->groupe = $groupeOpt; groups_switch_level_1($request, $answer); if( $answer->request == 'success' ){ // si pas d'erreur ////////////////////////////////////////////////////////////// - + + /* select pour SEMESTRES */ + $lastSemestre = null; + + echo ""; + + /* select pour GROUPES */ + $lastGroupe = null; + + echo ""; + + + + foreach($answer->grouplist as $group){ // pour chaque groupe