diff --git a/API.js b/API.js index a04ec9b..d5b8def 100755 --- a/API.js +++ b/API.js @@ -51,7 +51,7 @@ APIClass.prototype = { if( ptrAPI.xhr[i].readyState == 4 ){ // si la requête est terminée /* DEBUG : affiche la réponse BRUTE de API.php */ - console.log('API.php => '+ptrAPI.xhr[i].responseText); + // console.log('API.php => '+ptrAPI.xhr[i].responseText); console.log(JSON.parse(ptrAPI.xhr[i].responseText) ); /* si success de requête */ diff --git a/css/global.css b/css/global.css index 35073f1..6b6aba3 100755 --- a/css/global.css +++ b/css/global.css @@ -6,6 +6,20 @@ -o-user-select: none; } +.hidden{ display: none !important; } + + + + + + + + + + + + + @@ -112,10 +126,14 @@ table.basic tr:hover td:not(.more){ } -table.basic:nth-child(4n+0) thead th{ color: #e63c54; } -table.basic:nth-child(4n+1) thead th{ color: #3c73e6; } -table.basic:nth-child(4n+2) thead th{ color: #e6983c; } -table.basic:nth-child(4n+3) thead th{ color: #8b3ce6; } +table.basic:nth-child(4n+0) thead th{ color: #e63c54; } +table.basic:nth-child(4n+0) tr:hover td:not(.more) { background-color: #e63c54; } +table.basic:nth-child(4n+1) thead th{ color: #3c73e6; } +table.basic:nth-child(4n+1) tr:hover td:not(.more) { background-color: #3c73e6; } +table.basic:nth-child(4n+2) thead th{ color: #e6983c; } +table.basic:nth-child(4n+2) tr:hover td:not(.more) { background-color: #e6983c; } +table.basic:nth-child(4n+3) thead th{ color: #2dcc70; } +table.basic:nth-child(4n+3) tr:hover td:not(.more) { background-color: #2dcc70; } @@ -138,4 +156,8 @@ table.basic:nth-child(4n+3) thead th{ color: #8b3ce6; } #CONTAINER section > p:hover{ box-shadow: 1px 1px 3px #ddd; -} \ No newline at end of file +} + + + + diff --git a/css/layout.css b/css/layout.css index 60ba65c..7332947 100755 --- a/css/layout.css +++ b/css/layout.css @@ -134,6 +134,9 @@ body{ /* background */ background-color: #fff; + + /* scroll */ + overflow: hidden; /* Z */ z-index: 9; diff --git a/index.php b/index.php index 5d4e109..5a2c850 100755 --- a/index.php +++ b/index.php @@ -34,6 +34,15 @@ $notifNotifNum = 5; + + "; + echo ""; + echo ""; + echo ""; + } + ?>
diff --git a/js/dragndrop.js b/js/dragndrop.js index 539ef1c..1873951 100755 --- a/js/dragndrop.js +++ b/js/dragndrop.js @@ -6,6 +6,8 @@ DragnDrop.prototype = { state: false, dragElement: null, dropElement: null, + dropColors: [], // contiendra la valeur de départ de éléments acceptant + handler: null, absoluteOffset: function(element){ // retourne les offsets absolus de l'élément (absolus = par rapport à la page) if( element != document.body ){ @@ -35,9 +37,16 @@ DragnDrop.prototype = { - init: function(){ // initialise le système + init: function(handler){ // initialise le système var pointer = this; + this.handler = handler; + + + // on définit la couleur de départ + for( var i = 0 ; i < pointer.droppableElements.length ; i++ ) + pointer.dropColors[i] = window.getComputedStyle(pointer.droppableElements[i], null).getPropertyValue('color'); + // evenement mousedown document.body.addEventListener('mousedown', function(e){ if( pointer.draggableElements.indexOf(e.target) > -1 ){ // si l'élément est dans la liste des "draggables" @@ -50,21 +59,22 @@ DragnDrop.prototype = { DOM.DRAGNDROP.style.top = e.clientY + 'px'; DOM.DRAGNDROP.style.left = e.clientX + 'px'; DOM.DRAGNDROP.style.display = 'block'; - pointer.state = true; + pointer.state = true; } }, false); // evenement mousemove document.body.addEventListener('mousemove', function(e){ if( pointer.state ){ - DOM.DRAGNDROP.style.top = e.clientY + 'px'; - DOM.DRAGNDROP.style.left = e.clientX + 'px'; + DOM.DRAGNDROP.style.top = e.clientY + 3 + 'px'; + DOM.DRAGNDROP.style.left = e.clientX + 3 +'px'; + for( var i = 0 ; i < pointer.droppableElements.length ; i++ ) - pointer.droppableElements[i].style.color = '#777'; + pointer.droppableElements[i].style.color = pointer.dropColors[i]; if( pointer.droppableElements.indexOf(e.target) > -1 ) - e.target.style.color = 'red'; + e.target.style.color = '#777'; } }, false); @@ -77,12 +87,13 @@ DragnDrop.prototype = { if( pointer.droppableElements.indexOf(e.target) > -1 ){ // si l'élément est dans la liste des "draggables" et qu'il est "draggé" pointer.dropElement = e.target; - console.log('Source: '); console.log( pointer.dragElement ); - console.log('Dest. : '); console.log( pointer.dropElement ); + + // on exécute le handler avec le drag/drop + pointer.handler(pointer.dragElement, pointer.dropElement); } for( var i = 0 ; i < pointer.droppableElements.length ; i++ ) - pointer.droppableElements[i].style.color = '#777'; + pointer.droppableElements[i].style.color = pointer.dropColors[i]; } }, false); diff --git a/manager/database.php b/manager/database.php index b8af32d..6b41aa0 100755 --- a/manager/database.php +++ b/manager/database.php @@ -761,7 +761,7 @@ class DataBase{ /******************************************************/ /***** déplace un étudiant d'un groupe à un autre *****/ /******************************************************/ - public function deplacerEtudiant($nomEtudiant,$nouveauGroupe) { + public function deplacerEtudiant($etudiant,$groupe, $semestre, $annee){ // !!! Réfléchir à la gestion des AS, LP etc.. @@ -782,10 +782,121 @@ class DataBase{ // [3] ensuite tu peux écrire manager/database.php en vérifiant tout les cas (ceux que j'ai cité ou oublié) // // Inspire toi de ce qui a déjà été fait au dessus et essaie de - if(isset($nouveauGroupe) && is_string($nouveauGroupe) && $nouveauGroupe == 'A' || 'B' || 'C' || 'D' || 'E' || 'F') - return 'L\'étudiant a été déplacé'; + + + /*** 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 'L\'étudiant n\'a pas pu être déplacé'; + 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'; + + + /*** 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->execute(array( + ':groupe' => $groupe + )); + + // si on trouve, on le définit, sinon on retourne "unknown_user" + if( $nouveauGroupeUID = $getNouveauGroupeUID->fetch()['id'] ) + $nouveauGroupeUID = $nouveauGroupeUID; + else + return 'unknown_newgroup'; + + + /*** on cherche le groupe de cet utilisateur ***/ + $getGroupeUID = $this->pdo->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 = $this->pdo->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 = $this->pdo->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 = $this->pdo->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' ) + return 'success'; + else + return 'error'; + } } diff --git a/manager/groups.php b/manager/groups.php index 4b9cd6c..e6d7528 100755 --- a/manager/groups.php +++ b/manager/groups.php @@ -137,6 +137,25 @@ require_once __ROOT__.'/manager/database.php'; break; + /************************************************/ + /* 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 + $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); + }else + $answer->answer = 'param_error'; + break; + + diff --git a/manager/user.php b/manager/user.php index df09b47..b4edfc9 100755 --- a/manager/user.php +++ b/manager/user.php @@ -163,8 +163,8 @@ require_once __ROOT__.'/manager/database.php'; $_SESSION['droits'] = $userList->{$username}->permissions; /******************************* TEMPO *********************************/ - $_SESSION['annee'] = '2015'; $_SESSION['semestre'] = '2'; + $_SESSION['annee'] = '2015'; /***********************************************************************/ return 'success'; }else diff --git a/page/_JS/groups.js b/page/_JS/groups.js index 756dde4..a77d21c 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -14,38 +14,6 @@ if( document.querySelector('#CONTAINER hgroup.active') == null ) - - - - - - - - - -/*************************************************/ -/****************** EXEMPLE API ******************/ -/*************************************************/ - -// on récupère la liste des élèves du groupe E - -/* objet envoyé à API.php */ -var request = { - level_0: 'groups', - level_1: 'grouplist', - semestre: '3', - annee: '2015', -}; - -// console.log( request ); - -// envoi de la requête -// @ on envoie l'objet -// @ quand réception: affichage de l'objet reçu -// -API.send(request, function(r){} ); - - /* Gestion du déroulement des tableaux des groupes */ function afficherCacherGroupes(e){ // s'il s'agit de la case "Voir plus" @@ -55,7 +23,6 @@ function afficherCacherGroupes(e){ } } - DOM.CONTAINER.addEventListener('click', afficherCacherGroupes, false); @@ -63,6 +30,9 @@ DOM.CONTAINER.addEventListener('click', afficherCacherGroupes, false); + + + /* GESTION DU DRAG N DROP */ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ // si c'set l'admin var dnd = new DragnDrop(); @@ -75,5 +45,27 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / for( var i = 0 ; i < groups.length ; i++ ) dnd.setDroppable(groups[i]); - dnd.init(); + dnd.init(function(input, output){ // on demande un déplacement + var id_etudiant = input.children[0].innerHTML; + var nom_groupe = output.children[0].innerHTML; + + var request = { // on définit la requête pour API + level_0: 'groups', + level_1: 'move', + etudiant: id_etudiant, + groupe: nom_groupe, + semestre: 2, + annee: 2015 + }; + + API.send(request, function(response){ // on gère la réponse de API + if( response.request == 'success' ){ + pageM.setPage('groups'); + selectSection( document.querySelector('#MENU span[data-link=groups]') ); + } + }); + + + + }); } \ No newline at end of file diff --git a/page/groups.php b/page/groups.php index bb4c460..3bfe11f 100755 --- a/page/groups.php +++ b/page/groups.php @@ -43,7 +43,7 @@ require_once __ROOT__.'/manager/groups.php'; echo ''; echo ''; - echo 'Groupe '.$group->nom.''; + echo 'Groupe '.$group->nom.''; echo ''; echo ''; @@ -58,7 +58,9 @@ require_once __ROOT__.'/manager/groups.php'; echo ''; foreach($user as $key=>$value) - if( $key == 'prenom' || $key == 'nom' ) + if( $key == 'identifiant' ) + echo "".$value.''; + elseif( $key == 'prenom' || $key == 'nom' ) echo ''.$value.''; echo ''; } @@ -120,7 +122,7 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // s echo ""; echo ""; - echo ''; + echo ''; echo ''; echo ''; @@ -129,7 +131,9 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // s foreach($answer->userlist as $user){ echo ''; foreach($user as $key=>$value) - if( $key == 'prenom' || $key == 'nom' ) + if( $key == 'identifiant' ) + echo "'; + elseif( $key == 'prenom' || $key == 'nom' ) echo ''; echo ''; } @@ -159,57 +163,62 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // s if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'admin' ){ // si l'utilisateur est connecté et que c'est un élève echo "
"; - $request = new stdClass(); - $answer = new stdClass(); + for( $i = 2 ; $i <= 2 ; $i++ ){ // pour chaque semestre - $request->level_1 = 'grouplist'; - $request->semestre = $_SESSION['semestre']; - $request->annee = $_SESSION['annee']; + $request = new stdClass(); + $answer = new stdClass(); - groups_switch_level_1($request, $answer); + $request->level_1 = 'grouplist'; + $request->semestre = $i; + $request->annee = $_SESSION['annee']; - if( $answer->request == 'success' ){ // si pas d'erreur - ////////////////////////////////////////////////////////////// + groups_switch_level_1($request, $answer); - foreach($answer->grouplist as $group){ // pour chaque groupe + if( $answer->request == 'success' ){ // si pas d'erreur + ////////////////////////////////////////////////////////////// - if( count($group->userlist) > 0 ){ // s'il y a des utilisateurs + foreach($answer->grouplist as $group){ // pour chaque groupe - echo "
Groupe '.$monGroupe.'Groupe '.$monGroupe.'
'.$value.'
"; + if( count($group->userlist) > 0 ){ // s'il y a des utilisateurs - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; + echo "
Groupe '.$group->nom.'
"; - - - echo ''; - - - // pour chaque utilisateur - foreach($group->userlist as $user){ - + echo ''; echo ''; - - foreach($user as $key=>$value) - if( $key == 'prenom' || $key == 'nom' ) - echo ''; + echo ''; echo ''; - } + echo ''; - echo ''; - echo ''; - echo '
'.$value.'Groupe '.$group->nom.'
'; + echo ''; + + // pour chaque utilisateur + foreach($group->userlist as $user){ + + echo ''; + + foreach($user as $key=>$value) + if( $key == 'identifiant' ) + echo "".$value.''; + elseif( $key == 'prenom' || $key == 'nom' ) + echo ''.$value.''; + echo ''; + } + + echo ''; + + echo ''; + + echo ''; + + } } - } - //////////////////////////////////////////////////////// - }else - echo "Erreur interne..."; + //////////////////////////////////////////////////////// + }else + echo "Erreur interne..."; + } echo ''; } ?> \ No newline at end of file