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 'Groupe '.$monGroupe.' | ';
+ echo 'Groupe '.$monGroupe.' | ';
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 "".$value.' | ';
+ elseif( $key == 'prenom' || $key == 'nom' )
echo ''.$value.' | ';
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 "";
+ if( count($group->userlist) > 0 ){ // s'il y a des utilisateurs
- echo '';
- echo '';
- echo 'Groupe '.$group->nom.' | ';
- echo '
';
- echo '';
+ echo "";
-
-
- echo '';
-
-
- // pour chaque utilisateur
- foreach($group->userlist as $user){
-
+ echo '';
echo '';
-
- foreach($user as $key=>$value)
- if( $key == 'prenom' || $key == 'nom' )
- echo ''.$value.' | ';
+ echo 'Groupe '.$group->nom.' | ';
echo '
';
- }
+ echo '';
- echo ' |
';
- echo '';
- echo '
';
+ 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