diff --git a/js/actionScript.js b/js/actionScript.js index 9cad948..c9c8d14 100755 --- a/js/actionScript.js +++ b/js/actionScript.js @@ -205,11 +205,16 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); /* [3] GESTION DE L'AUTHENTIFICATION ==============================================================*/ +// ferme l'interface d'authentification quand clic autre part que sur zone AUTH +DOM.WRAPPER.addEventListener('mousedown', function(e){ remClass(DOM.WRAPPER, 'blurred'); }, false); + + + // ouvre l'interface d'authentification quand click sur bouton prévu à cet effet -DOM.LOGOUT.addEventListener('mouseup', function(e){ addClass(DOM.WRAPPER, 'blurred'); }, false); +DOM.LOGOUT.addEventListener('mouseup', function(e){ addClass(DOM.WRAPPER, 'blurred'); DOM.AUTH.children[1].focus(); }, false); if( !connected ) // sur zone verte si pas connecté - DOM.MENU.children[0].addEventListener('mouseup', function(e){ addClass(DOM.WRAPPER, 'blurred'); }, false); + DOM.MENU.children[0].addEventListener('mouseup', function(e){ addClass(DOM.WRAPPER, 'blurred'); DOM.AUTH.children[1].focus(); }, false); else // sinon amène sur le profil DOM.MENU.children[0].addEventListener('mouseup', function(e){ @@ -219,10 +224,6 @@ else // sinon amène sur le profil -// ferme l'interface d'authentification quand clic autre part que sur zone AUTH -DOM.WRAPPER.addEventListener('mousedown', function(e){ remClass(DOM.WRAPPER, 'blurred'); }, false); - - /* [4] GESTION DES FORMULAIRES diff --git a/manager/database.php b/manager/database.php index e9ddca5..3345ad8 100755 --- a/manager/database.php +++ b/manager/database.php @@ -716,6 +716,174 @@ class DataBase{ } + + + + + + + + + + + /**************************************************/ + /*** retourne les modules d'un étudiant par UEs ***/ + /**************************************************/ + public function getModulesByUEByEnseignant($enseignant, $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 annee = :annee"); + $getSemestreUID->execute(array( + ':annee' => $annee + )); + + // si on trouve, on le définit, sinon on retourne "unknown_group" + if( ! $getSemestreUID->fetch() ) + return 'unknown_year'; + + + /*** on cherche un utilisateur avec cet identifiant ***/ + $getEnseignantUID = $this->pdo->prepare("SELECT DISTINCT u.identifiant as id ". + "FROM utilisateur as u, enseignement as ens, semestre as s, mcc_module as mcc_m, mcc_ue ". + "WHERE u.identifiant = ens.id_enseignant ". + "AND ens.id_mcc_module = mcc_m.id_mcc_module ". + "AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ". + "AND mcc_ue.id_semestre = s.id_semestre ". + "AND s.annee = :annee ". + "AND u.identifiant = :enseignant"); + $getEnseignantUID->execute(array( + ':annee' => $annee, + ':enseignant' => $enseignant + )); + + // si on trouve, on le définit, sinon on retourne "unknown_user" + if( $enseignantUID = $getEnseignantUID->fetch()['id'] ) + $enseignantUID = $enseignantUID; + else + return 'unknown_teacher'; + + + + $UEList = $this->getUEsEnseignant($enseignant, $annee); // on récupère la liste des UEs + + foreach($UEList as $iter=>$UE){ + + // si on a l'UID utilisateur & l'UID groupe => on récupère les modules + $getModuleList = $this->pdo->prepare("SELECT DISTINCT m.id_module as id, m.nom as nom, m.libelle as libelle ". + "FROM enseignement as ens, semestre as s, ue, module as m, mcc_ue, mcc_module as mcc_m ". + "WHERE ens.id_mcc_module = mcc_m.id_mcc_module ". + "AND mcc_m.id_module = m.id_module ". + "AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ". + "AND mcc_ue.id_ue = ue.id_ue ". + + "AND ens.id_enseignant = :enseignantUID ". + "AND ue.id_ue = :UEUID ". + "AND s.annee = :annee ". + "ORDER BY m.nom, m.libelle ASC"); + $getModuleList->execute(array( + ':enseignantUID' => $enseignantUID, + ':UEUID' => $UE['id'], + ':annee' => $annee + )); + + $modulelist = $getModuleList->fetchAll(); // on récupère la liste des modules + + // on supprime les doublons des entrées (indice numérique) + for( $i = 0 ; $i < count($modulelist) ; $i++ ) // pour tout les modules + foreach($modulelist[$i] as $col => $val) // pour toutes les entrées + if( is_int($col) ) // si l'indice est un entier + unset( $modulelist[$i][$col] ); // on le supprime + + $UEList[$iter]['modules'] = $modulelist; // on ajoute la liste des mdules + } + + return $UEList; + } + + + /****************************************/ + /*** retourne les UEs d'un enseignant ***/ + /****************************************/ + public function getUEsEnseignant($enseignant, $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 annee = :annee"); + $getSemestreUID->execute(array( + ':annee' => $annee + )); + + // si on trouve, on le définit, sinon on retourne "unknown_group" + if( ! $getSemestreUID->fetch() ) + return 'unknown_year'; + + + + /*** on cherche un utilisateur avec cet identifiant ***/ + $getEnseignantUID = $this->pdo->prepare("SELECT DISTINCT u.identifiant as id ". + "FROM utilisateur as u, enseignement as ens, semestre as s, mcc_module as mcc_m, mcc_ue ". + "WHERE u.identifiant = ens.id_enseignant ". + "AND ens.id_mcc_module = mcc_m.id_mcc_module ". + "AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ". + "AND mcc_ue.id_semestre = s.id_semestre ". + "AND s.annee = :annee ". + "AND u.identifiant = :enseignant"); + $getEnseignantUID->execute(array( + ':annee' => $annee, + ':enseignant' => $enseignant + )); + + // si on trouve, on le définit, sinon on retourne "unknown_user" + if( $enseignantUID = $getEnseignantUID->fetch()['id'] ) + $enseignantUID = $enseignantUID; + else + return 'unknown_teacher'; + + + + // si on a l'UID enseignant => on récupère les UEs + $getUEList = $this->pdo->prepare("SELECT DISTINCT ue.id_ue as id, s.annee as annee, ue.nom as nom, ue.libelle as libelle ". + "FROM enseignement as ens, semestre as s, ue, mcc_ue, mcc_module as mcc_m ". + "WHERE ens.id_mcc_module = mcc_m.id_mcc_module ". + "AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ". + "AND mcc_ue.id_ue = ue.id_ue ". + + "AND ens.id_enseignant = :enseignantUID ". + "AND s.annee = :annee ". + + "ORDER BY ue.nom, ue.libelle ASC"); + $getUEList->execute(array( + ':enseignantUID' => $enseignantUID, + ':annee' => $annee + )); + + $UElist = $getUEList->fetchAll(); // on récupère la liste des modules + + // on supprime les doublons des entrées (indice numérique) + for( $i = 0 ; $i < count($UElist) ; $i++ ) // pour tout les modules + foreach($UElist[$i] as $col => $val) // pour toutes les entrées + if( is_int($col) ) // si l'indice est un entier + unset( $UElist[$i][$col] ); // on le supprime + + return $UElist; + } + + + + + + + + + + + + + + + + + + + + /**************************************/ /*** retourne les notes par modules ***/ /**************************************/ diff --git a/manager/modules.php b/manager/modules.php index 7078346..a8fbe63 100755 --- a/manager/modules.php +++ b/manager/modules.php @@ -33,36 +33,9 @@ require_once __ROOT__.'/manager/database.php'; switch( $request->level_1 ){ - /***********************************/ - /* liste des modules d'un ETUDIANT */ - /***********************************/ - // case 'getByEtudiant': - // $areSetParam = isset($request->etudiant) && isset($request->semestre) && isset($request->annee); // les arguments existent - // $typeOkParam = $areSetParam && is_string($request->etudiant) && is_string($request->semestre) && is_string($request->annee); // si c'est des strings - // $nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && is_numeric($request->semestre) && is_numeric($request->annee); // des bon types - // $etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{6,100}$/i', $request->etudiant); // nom bon format - // $semestreCheck = $etudiantCheck && 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( $anneeCheck ){ // si tout les paramètres sont bons - // $modules = DataBase::getInstance()->getModulesEtudiant($request->etudiant, $request->semestre, $request->annee); - - // // STRUCTURE - // // tableau d'UES contenant un tableau de MODULES - - // if( is_array($modules) ){ // si on a bien un tableau - // $answer->modules = $modules; // on renvoie dans answer->modules - // $answer->request = 'success'; // et on renvoie success - // }else // sinon si c'est pas un tableau - // $answer->request = $modules; // on retourne l'erreur - // }else - // $answer->request = 'param_error'; - // break; - - - /*******************************/ - /* liste des UES d'un ETUDIANT */ - /*******************************/ + /********************************************/ + /* liste des modules d'un ETUDIANT (par UE) */ + /********************************************/ case 'getByEtudiant': $areSetParam = isset($request->etudiant) && isset($request->semestre) && isset($request->annee); // les arguments existent $typeOkParam = $areSetParam && is_string($request->etudiant) && is_string($request->semestre) && is_string($request->annee); // si c'est des strings @@ -86,6 +59,31 @@ require_once __ROOT__.'/manager/database.php'; $answer->request = 'param_error'; break; + /**********************************************/ + /* liste des modules d'un ENSEIGNANT (par UE) */ + /**********************************************/ + case 'getByEnseignant': + $areSetParam = isset($request->enseignant)&& isset($request->annee); // les arguments existent + $typeOkParam = $areSetParam && is_string($request->enseignant) && is_string($request->annee); // si c'est des strings + $nEmptyParam = $typeOkParam && strlen($request->enseignant) > 0 && is_numeric($request->annee); // des bon types + $enseignantCheck = $nEmptyParam && preg_match('/^[\w -]{6,100}$/i', $request->enseignant); // nom bon format + $anneeCheck = $enseignantCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format + + if( $anneeCheck ){ // si tout les paramètres sont bons + $UEList = DataBase::getInstance()->getModulesByUEByEnseignant($request->enseignant, $request->annee); + + // STRUCTURE + // tableau d'UES contenant un tableau de MODULES + + if( is_array($UEList) ){ // si on a bien un tableau + $answer->UEs = $UEList; // on renvoie dans answer->ues + $answer->request = 'success'; // et on renvoie success + }else // sinon si c'est pas un tableau + $answer->request = $UEList; // on retourne l'erreur + }else + $answer->request = 'param_error'; + break; + diff --git a/manager/security.php b/manager/security.php index 1f0bb97..00bafb0 100755 --- a/manager/security.php +++ b/manager/security.php @@ -23,7 +23,30 @@ /* [0] CONSTANTES ============================================================*/ - function getPermissions(){ return array('student', 'teacher', 'master', 'admin'); } + function getPermissions(){ // retourne la liste des droits existants + return array('student', 'teacher', 'master', 'admin'); + } + + /** retourne l'état "connecté" de l'utilisateur courant + * + * @return state VRAI si connecté / FAUX si pas connecté + * + */ + function connected(){ + return $_SESSION['identifiant'] != null; + } + + + + /** retourne si un utilisateur a un droit ou non + * + * @return permission VRAI si l'utilisateur a ce droit / FAUX s'il ne l'a pas + * + * */ + function permission($perm){ + return connected() && is_int( array_search($perm, $_SESSION['droits']) ); + } + function debug(){ ini_set('display_errors',1); @@ -60,24 +83,21 @@ session_start(); // on démarre la session - $PERMISSIONS = getPermissions(); // on vérifie l'intégrité des variables session $identifiantDefinedProperly = isset($_SESSION['identifiant']) && !empty($_SESSION['identifiant']) && gettype($_SESSION['identifiant']) == 'string' && strlen($_SESSION['identifiant']) > 0; - $droitsDefinedProperly = isset($_SESSION['droits']) && !empty($_SESSION['droits']) && gettype($_SESSION['droits']) == 'string' && strlen($_SESSION['droits']) > 0; + $droitsDefinedProperly = isset($_SESSION['droits']) && !empty($_SESSION['droits']) && is_array($_SESSION['droits']) && count($_SESSION['droits']) > 0; + + if( $droitsDefinedProperly ) + foreach($_SESSION['droits'] as $droit) + if( !is_int( array_search($droit, getPermissions()) ) ) // si le droit n'est pas dans la liste des possibilitées, on retourne false + $droitsDefinedProperly = false; + // si les variables sessions ne sont pas toutes les 2 correctes - if( !($identifiantDefinedProperly && $droitsDefinedProperly) ){ + if( !$identifiantDefinedProperly || !$droitsDefinedProperly ){ $_SESSION['identifiant'] = null; // on les initialise à NULL - $_SESSION['droits'] = null; + $_SESSION['droits'] = array(); } - }session_init(); - - - - - - - - + }session_init(); ?> \ No newline at end of file diff --git a/manager/user.php b/manager/user.php index b4edfc9..6922aef 100755 --- a/manager/user.php +++ b/manager/user.php @@ -160,7 +160,7 @@ require_once __ROOT__.'/manager/database.php'; if( $userList->{$username}->password == $password ){ // on définit les variables session $_SESSION['identifiant'] = $username; - $_SESSION['droits'] = $userList->{$username}->permissions; + $_SESSION['droits'] = $userList->{$username}->permissions; // est un TABLEAU /******************************* TEMPO *********************************/ $_SESSION['semestre'] = '2'; diff --git a/page/career.php b/page/career.php index feb5918..1480316 100755 --- a/page/career.php +++ b/page/career.php @@ -28,7 +28,7 @@ require_once __ROOT__.'/manager/career.php'; /**************************************/ /*** MES MODULES (version étudiant) ***/ /**************************************/ -if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // si l'utilisateur est connecté et que c'est un élève +if( permission('student') ){ // si l'utilisateur est connecté et que c'est un élève $request = new stdClass(); $answer = new stdClass(); @@ -81,7 +81,7 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // s /**********************************/ /*** MES UEs (version étudiant) ***/ /**********************************/ -if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // si l'utilisateur est connecté et que c'est un élève +if( permission('student') ){ // si l'utilisateur est connecté et que c'est un élève $request = new stdClass(); $answer = new stdClass(); debug(); diff --git a/page/groups.php b/page/groups.php index 07508f4..c8ce13d 100755 --- a/page/groups.php +++ b/page/groups.php @@ -46,7 +46,7 @@ require_once __ROOT__.'/manager/groups.php'; * * */ -if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // si connecté && utilisateur +if( permission('student') ){ // si connecté && utilisateur echo "
"; $request = new stdClass(); @@ -116,7 +116,7 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // s * * */ -if( $_SESSION['identifiant'] != null && ($_SESSION['droits'] == 'teacher' || $_SESSION['droits'] == 'admin') ){ // si connecté && prof ou admin +if( permission('teacher') || permission('admin') ){ // si connecté && prof ou admin echo "
"; $request = new stdClass(); @@ -231,7 +231,7 @@ if( $_SESSION['identifiant'] != null && ($_SESSION['droits'] == 'teacher' || $_S * ETUDIANT -> son groupe de son semestre * */ -if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // si l'utilisateur est connecté et que c'est un élève +if( permission('student') ){ // si l'utilisateur est connecté et que c'est un élève echo "
"; $request = new stdClass(); $answer = new stdClass(); @@ -307,7 +307,7 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // s * PROFESSEUR -> les groupes inscrits aux modules qu'il enseigne * */ -if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'teacher' ){ // si l'utilisateur est connecté et que c'est un élève +if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un élève echo "
"; $request = new stdClass(); $answer = new stdClass(); @@ -415,7 +415,7 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'teacher' ){ // s /****************************/ /*** DEPLACEMENT D'ELEVES ***/ /****************************/ -if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'admin' ){ // si l'utilisateur est connecté et que c'est un élève +if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un élève echo "
"; for( $i = 2 ; $i <= 2 ; $i++ ){ // pour chaque semestre diff --git a/page/home.php b/page/home.php index 5731758..9bf38f0 100755 --- a/page/home.php +++ b/page/home.php @@ -16,7 +16,7 @@ require_once __ROOT__.'/manager/groups.php'; ?> -
+

Bienvenue sur la plateforme de gestion des étudiants de l'IUT Informatique de l'université Paul Sabatier, Toulouse 3
Seuls les étudiants et enseignants du département ont un accès à cette plateforme. Si vous êtes étudiant ou enseignant et que vous n'avez pas de compte, veuillez contacter le chef de département.

@@ -36,7 +36,7 @@ require_once __ROOT__.'/manager/groups.php'; +if( connected() ){ // si on est connecté ?>

Notification 3

Notification 2

diff --git a/page/modules.php b/page/modules.php index 908eab2..6b3a4ba 100755 --- a/page/modules.php +++ b/page/modules.php @@ -22,7 +22,7 @@ require_once __ROOT__.'/manager/modules.php'; /**************************************/ /*** MES MODULES (version étudiant) ***/ /**************************************/ -if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // si l'utilisateur est connecté et que c'est un élève +if( permission('student') ){ // si l'utilisateur est connecté et que c'est un élève $request = new stdClass(); $answer = new stdClass(); @@ -61,3 +61,52 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // s echo "Erreur interne."; } ?> + + + + + +level_1 = 'getByEnseignant'; + $request->enseignant = $_SESSION['identifiant']; + $request->annee = $_SESSION['annee']; + + modules_switch_level_1($request, $answer); + + if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe + //////////////////////////////////////////////////////////////////////////////// + echo "
"; + + foreach($answer->UEs as $UE){ + echo ""; + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + foreach($UE['modules'] as $MODULE){ + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo '
'.$UE['nom'].' - '.$UE['libelle'].'
'.$MODULE['nom'].''.$MODULE['libelle'].'
'; + } + //////////////////////////////////////////////////////////////////////////////// + echo '
'; + }else + echo "Erreur interne."; + +} ?> + + diff --git a/page/settings.php b/page/settings.php index 595b338..01d1b7f 100755 --- a/page/settings.php +++ b/page/settings.php @@ -5,7 +5,7 @@ require_once __ROOT__.'/manager/security.php'; /***************/ /*** PROFILE ***/ /***************/ -if( $_SESSION['identifiant'] != null ){ // si l'utilisateur est connecté +if( connected() ){ // si l'utilisateur est connecté echo "
"; echo 'profil'; echo '
'; diff --git a/src/userlist.json b/src/userlist.json index c39e836..392db0b 100755 --- a/src/userlist.json +++ b/src/userlist.json @@ -1,36 +1,36 @@ { "eleve1": { - "permissions": "student", + "permissions": ["student"], "password" : "password" }, "mrd1609a": { - "permissions": "student", + "permissions": ["student"], "password" : "password" }, "eleve2": { - "permissions": "student", + "permissions": ["student"], "password" : "password" }, "lbh1609a": { - "permissions": "teacher", + "permissions": ["teacher"], "password" : "password" }, "prof2": { - "permissions": "master", + "permissions": ["master"], "password" : "password" }, "admin1": { - "permissions": "admin", + "permissions": ["admin"], "password" : "password" }, "admin2": { - "permissions": "admin", + "permissions": ["admin"], "password" : "password" } diff --git a/test.php b/test.php index 57cc5f9..4444cde 100755 --- a/test.php +++ b/test.php @@ -1,6 +1,7 @@ level_1 = 'grouplistForYear'; - $request->semestre = '3'; // groupe.nom // OPTIONNEL - $request->annee = '2015'; // annee - // $request->groupe = 'S3A'; // OPTIONNEL + // $request->level_1 = 'grouplistForYear'; + // $request->semestre = '3'; // groupe.nom // OPTIONNEL + // $request->annee = '2015'; // annee + // // $request->groupe = 'S3A'; // OPTIONNEL - groups_switch_level_1($request, $answer); - - var_dump( $answer ); - - echo "






It works !"; + // groups_switch_level_1($request, $answer); + // var_dump( $answer ); + // echo "






It works !";