From c0acb839310b15ed4998409487fb69995d85c0f7 Mon Sep 17 00:00:00 2001 From: Fauvet Date: Fri, 13 Nov 2015 14:55:48 +0100 Subject: [PATCH 01/39] Ajout du nouveau modele Excel dans le src. Modele non fini. --- manager/database.php | 4 ++-- src/nouveau_modele.xlsx | Bin 0 -> 9501 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 src/nouveau_modele.xlsx diff --git a/manager/database.php b/manager/database.php index 6895310..a77d16a 100755 --- a/manager/database.php +++ b/manager/database.php @@ -38,7 +38,7 @@ class DataBase{ /* retourne une instance de la classe */ public static function getInstance(){ if( DataBase::$instance == null ) - DataBase::$instance = new DataBase("localhost", "sid2", "php", "Qt358nUdyeTxLDM8"); + DataBase::$instance = new DataBase("localhost", "sid2", "root", ""); return DataBase::$instance; } @@ -761,4 +761,4 @@ class DataBase{ } -?> \ No newline at end of file +?> diff --git a/src/nouveau_modele.xlsx b/src/nouveau_modele.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c0fd80adf641682bc6b9031fb397b0ba86ae3090 GIT binary patch literal 9501 zcmeHt1zTI$+IA>z!HX8BXelm*QYc>B-QAtyTHM{;B~Y9K#ogWAU5fjg&YbyXrZe9! zIA~54r3i0l3RnWv|f7{h_ zNYR3g8*Qtqa*~OO&&!Cbr4?qF0!Xx}>yTv;SmXOtif4@VlE-T!ZN5hlZKeAgQn6|w zXYWGWs-)sF8b^Q81nR~Z#-ynUwX5d&#v4(n5K`C0myViw(j>}q)Vi|YZ0{1pn(e6S znWwb%UMw^CM}7w`4X?m7HnS5-u;5h|1z!}ac1N1gwz#RgxwKG)hg?YCHLzhBYrRoR z=k+G>8J`76n}t-r1Tk5TxOaZQ$`KzpZ6{v3r&z-v=v=|qZ%B`b)R)8|wV+$g>q!@o z;$)}s@hIr+tLJEyI?^L>v&QZ|Q%Y|EG@s#X9(xTQ7~4 zkm_JS@;?!I2)74!%K7#r6w$g9Dk{Wk^og6&lghI^Sj4G|H2Y? z*nTg`)jCUQ2s$PgS?y<#f5M%O11!yJ+jt?H(zQ-B$EnMyt0du1&Qy-yBWOzM3$w)f zR>*`V&IBq@N9dLC;4$(D{9nFL@>cDZP+8W!DTA2$D0c+%|60eMxgRr<;yDwazlZ!G zkW>6{JPE7UPS2Wy{COXAw-4CU=Q_ACGqBoO*jXyNCQ|&@BnZSPUdfa z*OSjywr09kR%SoF*B?3q0d`?vDgWI^sjP%pCj;tt#HRp;&nb>rXmj>&Ne>kcP~iHi zsTW?8Fne6A;L|i{C{K&Mg|zZ_J{jt9yk-TiLtpKw824V@1`!s#A? z2z`X1G0+e94@!;@fys6l-*}>X>C!Pdwr{8?a07DkNd+#xjr+5h4l_6~nc9uM>IZXX zpnB8m?u*S(*I?4(A8lQsK~_x;o@3qR-vE=~+L`+BBU zz&rg<%3Lha(lUbS;tLLUP{1?5l=&-JO63Q_Cm1l7$j(sWuhY1b2diab#x5AM(Ld&7 ziL)=&hfgS9lFb55{BAy5qQCI7glT)-Tx%76!nreFbsvMdi^v>r7Pr3I-4jS%Y*z-P zeyVmRkYK0`FHD64DF=@XuHPRXrKsc#*_2ldG>0k}#IHjS99=tC^~b<*TFUCK3bt>nO?(y;L7ht{WkBz2P#AtSAm@fCxAb-8rMSkB8ND`pVD@N_=G8`E;q2_>kyPIN;_jtpdKQK!1#v$(Q~S#Lo*g{k#FSCZV1^o-`HTl@RWju#Pwc4 zJ;;+n&?@SJEi96zFkGnQ*>5x z%w#~JECsW}fJ3WOqONJ{8?78c_#@oaea+`kqE89ydrs&MMq0d|kx_*0$z;>UB9Q2i zRt;+sbe3F#qC`2M4AWp=wV&cs`1n*DjZ$>$5ZL1$ZZ4}O3~572I0v`DL_J&YNaaMe z;PvDfGa(Dd7!!oQ9Ai@N`dqSQO6YmtVu3XMx_HsE)^2sSboV0K~t&MrG+9a{r^IeS|ZOC!6V_Q)-E#B!1WwfjV* zsiPN`!=dWAP+C+r?ugW;WcLa}oT)JgbD?cR{%FBEmmSCr;mp`QCu@9oktn)--~GWe z=Hfw;)jA~JG>5q&aR@q-UR>pX|FxxKhU79LF{J}FehwqXwa7ZR=OYb;ZR_`BCK=9| zbP9MZEE-YfiR^85SG_p<2V)fYnwJKmSlMzCm8m0A7!+o2G8xhwlaxWw_6<+dYuiPU z1@b#Z12bBdwIPDZ_1qF}28AvM%%%oyWEE^#-vy)21FT;VQIPNjjW&TUZ4k1_wL55+jUsW zK5#;PiU1yD=E&Eiw}lAlRdAdcRo|V2s0h&yd3E;jqH!;dWx!cnN{#W_pm^W80T

~+C?HP=#xzWPmYm$T9 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 F{{cRktTF%q literal 0 HcmV?d00001 From ff7758b9ecd10ed512df88a406037655af9197a4 Mon Sep 17 00:00:00 2001 From: Fauvet Date: Sat, 14 Nov 2015 14:42:30 +0100 Subject: [PATCH 02/39] =?UTF-8?q?Nouveau=20mod=C3=A8le=20MCC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/nouveau_modele.xlsx | Bin 9501 -> 14298 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/nouveau_modele.xlsx b/src/nouveau_modele.xlsx index c0fd80adf641682bc6b9031fb397b0ba86ae3090..3fd843089fdf62ad49f771f815aef50197dba2a3 100644 GIT binary patch delta 8836 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%0A)Z#NVdN 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 Xe{7JZDi!q~Jl(|(z95Hl{ki=Q5uR#i From 334272f0d18448f22c9e164dde1d7142757f273e Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sat, 14 Nov 2015 18:33:06 +0100 Subject: [PATCH 03/39] =?UTF-8?q?Ajout=20de=20page/career=20vision=20profe?= =?UTF-8?q?sseur=20correcteur=20sur=20ses=20modules=20et=20les=20notes=20d?= =?UTF-8?q?onn=C3=A9es=20aux=20groupes=20s'il=20y=20en=20a=20(moyenne,=20n?= =?UTF-8?q?ote=20min,=20max,=20..)=20et=20possibilit=C3=A9=20d'affinage=20?= =?UTF-8?q?et=20donc=20d'afficher=20les=20=C3=A9l=C3=A8ves=20d'un=20groupe?= =?UTF-8?q?=20pour=20un=20partiel=20particulier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 5 +- js/actionScript.js | 11 +++- manager/career.php | 33 +++++++++++ manager/database.php | 25 ++++++++ manager/repo/controle.php | 12 +++- manager/repo/note.php | 73 ++++++++++++++++------- page/_JS/career.js | 85 ++++++++++++++++++++++++-- page/_JS/groups.js | 4 +- page/career.php | 121 ++++++++++++++++++++++++++++++++++---- 9 files changed, 318 insertions(+), 51 deletions(-) diff --git a/css/global.css b/css/global.css index a8da609..1bb72f2 100755 --- a/css/global.css +++ b/css/global.css @@ -112,7 +112,6 @@ table.basic tr:hover td{ background-color: #fff; } /* .transparentbg */ table.basic tr.transparentbg > td{ background-color: transparent; } table.basic tr.transparentbg:hover > td{ background-color: transparent; } -table.basic tr.transparentbg .link{ background-color: #fff; } table.basic tr.transparentbg > td{ color: inherit; } @@ -150,7 +149,7 @@ span.link{ box-shadow: inset 0 0 1px #f5f5f5; /* background */ - background: #eee; + background: #fff; /* foreground */ color: #333; @@ -158,7 +157,7 @@ span.link{ /* extra */ cursor: pointer; } - +table.basic td > span.link{ background: #eee; } span.link:hover{ color: #000; } /*********************/ diff --git a/js/actionScript.js b/js/actionScript.js index 49cfbd4..95e424a 100755 --- a/js/actionScript.js +++ b/js/actionScript.js @@ -93,16 +93,20 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); /* GESTION DES CATEGORIES (SECTIONS) * * @param section l'élément à activer + * @param clearParam VRAI si on doit supprimer les variables de l'URL * * [1] selectionne l'élément, l'affichage de la page associée est géré par pageManager.js * [2] déselectionne l'élément précédemment selectioné * */ - function selectSection(section){ + function selectSection(section, clearParam){ // si @subSection est un de type

  • qui a la propriété "data-link" [ET] section pas déjà active if( section instanceof Element && section.tagName == 'SPAN' && section.dataset.hasOwnProperty('link') ){ + if( clearParam === true ) // si clearParam est vrai + pageM.vars = new Array(pageM.vars[0]); // on efface les paramètres de l'URL + // on charge la page pageM.setPage( section.dataset.link ); @@ -146,13 +150,16 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); } + // permet de recharger la page courante + function reload(){ selectSection( document.querySelector('#MENU span[data-link='+pageM.page+']') ); } + /* activation au chargement en fonction de la page courante de pageManager.js */ var lastSection = document.querySelector('#MENU span[data-link='+pageM.page+']'); if( lastSection != null ) selectSection(lastSection); // on l'active /* Gestion des liens du menu */ - DOM.MENU.addEventListener('click', function(e){ selectSection( e.target ); }, false); + DOM.MENU.addEventListener('click', function(e){ selectSection( e.target, true); }, false); diff --git a/manager/career.php b/manager/career.php index 65d0348..f8c7541 100755 --- a/manager/career.php +++ b/manager/career.php @@ -89,6 +89,39 @@ require_once __ROOT__.'/manager/database.php'; break; + /************************************/ + /* liste des notes pour un contrôle */ + /************************************/ + case 'getNotesEnseignant': if( permission('teacher') ){ + + $areSetParam = isset($request->enseignant) && isset($request->controle); // les arguments existent + $typeOkParam = $areSetParam && is_string($request->enseignant); // si c'est des strings + $nEmptyParam = $typeOkParam && strlen($request->enseignant) > 0 && is_numeric($request->controle); // des bon types + $enseignantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->enseignant); // nom bon format + + // paramètre optionnel + $optionalGroupe = isset($request->groupe) && is_string($request->groupe) && strlen($request->groupe) > 1 && preg_match('/^[a-z0-9 -]{1,10}$/i', $request->groupe); + + // définition (ou pas) du paramètre optionnel + if( $optionalGroupe ) $groupe = $request->groupe; + else $groupe = null; + + if( $enseignantCheck ){ // si tout les paramètres sont bons + $controle = DataBase::getInstance()->getNotesEnseignant($request->enseignant, $request->controle, $groupe); + + if( is_array($controle) ){ // si on a bien un tableau + $answer->controle = $controle; // on renvoie dans answer->controle + $answer->request = 'success'; // et on renvoie success + }else // sinon si c'est pas un tableau + $answer->request = $controle; // on retourne l'erreur + }else + $answer->request = 'param_error'; + + }else + $answer->request = 'permission_error'; + break; + + /***********/ diff --git a/manager/database.php b/manager/database.php index b22bffa..68def46 100755 --- a/manager/database.php +++ b/manager/database.php @@ -652,6 +652,31 @@ class DataBase{ + + /********************************************/ + /*** retourne les notes pour un contrôle ***/ + /********************************************/ + public function getNotesEnseignant($enseignant, $controle, $groupe=null){ // [OPTIONNEL] $groupe + + // on récupère l'UID du contrôle, s'il existe + if( $groupe != null ) + if( !($groupeUID=groupRepo::UID($groupe)) ) return 'unknown_group'; else $groupeUID = (int) $groupeUID; + else + $groupeUID = null; + + // on récupère les informations du contrôle + if( ! ($noteList=controleRepo::info($controle)) ) return 'unknown_controle'; + + $noteList['notes'] = noteRepo::forTeacher($controle, $groupeUID); + + + return $noteList; + } + + + + + /**************************************/ /*** retourne les notes d'un module ***/ /**************************************/ diff --git a/manager/repo/controle.php b/manager/repo/controle.php index 58f28a8..91c9267 100755 --- a/manager/repo/controle.php +++ b/manager/repo/controle.php @@ -14,12 +14,17 @@ class controleRepo extends DBAccess{ * * @controleUID l'UID du controle duquel on veut les infos * - * @return controle tableau associatif contenant tout les champs de la BDD pour ce controle + * @return controle tableau associatif contenant tout les champs de la BDD pour ce controle * */ public static function info($controleUID){ // on considère que le semestre existe - $getControleInfo = DataBase::getPDO()->prepare("SELECT id_controle as id, id_mcc_module, intitule, base, coefficient, date_publication FROM controle WHERE id_controle = :controleUID"); + $getControleInfo = DataBase::getPDO()->prepare("SELECT ctrl.id_controle as id, ctrl.id_mcc_module, m.nom as module, m.libelle as modulelib, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication ". + "FROM controle as ctrl, mcc_module as mcc_m, module as m ". + "WHERE ctrl.id_mcc_module = mcc_m.id_mcc_module ". + "AND mcc_m.id_module = m.id_module ". + + "AND id_controle = :controleUID"); $getControleInfo->execute(array( ':controleUID' => $controleUID )); @@ -71,9 +76,10 @@ class controleRepo extends DBAccess{ */ public static function forTeacher($enseignant, $module, $semestre){ $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.id_mcc_module, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication ". - "FROM enseignement as ens, mcc_module as mcc_m, mcc_ue, controle as ctrl ". + "FROM enseignement as ens, module as m, mcc_module as mcc_m, mcc_ue, controle as ctrl ". "WHERE ens.id_mcc_module = mcc_m.id_mcc_module ". "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". + "AND mcc_m.id_module = m.id_module ". "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". "AND ens.id_enseignant = :enseignant ". diff --git a/manager/repo/note.php b/manager/repo/note.php index 13494cb..bfa8a9b 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -114,39 +114,68 @@ class noteRepo extends DBAccess{ - /* - ** PAS UTILISÉ POUR L'INSTANT - */ - - - /* RENVOIE LES NOTES DES ETUDIANTS POUR UN CONTROLE PARTICULIER + /* RENVOIE LES NOTES POUR UN CONTROLE PARTICULIER * + * [1] Par groupe si aucun groupe spécifié (statistiques: moyenne, min, max, nb notes, ...) + * [2] Liste des élèves d'un groupe si aucun groupe spécifié + * + * * @controle l'UID du controle concerné * - * @return notes retourne les notes des étudiants pour un controle particulier + * @groupe ***OPTIONNEL*** l'UID du groupe spécifique + * + * + * @return notes [1] retourne les stats des notes pour les groupes à ce contrôle + * [2] retourne les notes des étudiants du groupe spécifié pour ce contrôle * */ - public static function forTeacher($controle){ - $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as moyenne, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes ". - "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g ". - "WHERE n.id_appartenance = app.id_appartenance ". - "AND app.id_semestre = s.id_semestre ". - "AND app.id_groupe = g.id_groupe ". - "AND s.id_semestre = mcc_ue.id_semestre ". - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". - "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". - "AND n.id_controle = ctrl.id_controle ". + public static function forTeacher($controle, $groupe=null){ + /* [1] Statistiques des groupes + ============================================================*/ + if( !is_int($groupe) ){ - "AND ctrl.id_controle = :controle ". + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as valeur, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes ". + "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g ". + "WHERE n.id_appartenance = app.id_appartenance ". + "AND app.id_semestre = s.id_semestre ". + "AND app.id_groupe = g.id_groupe ". + "AND s.id_semestre = mcc_ue.id_semestre ". + "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". + "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". + "AND n.id_controle = ctrl.id_controle ". - "GROUP BY g.id_groupe ". + "AND ctrl.id_controle = :controle ". - "ORDER BY g.nom ASC"); - $getNoteList->execute(array( ':controle' => $controle )); + "GROUP BY g.id_groupe ". + + "ORDER BY g.nom ASC"); + $getNoteList->execute(array( ':controle' => $controle )); + + + /* [2] Notes des étudiants d'un groupe + ============================================================*/ + }else{ + + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT n.id_note as id, g.nom as groupe, app.id_etudiant as etudiant, n.id_appartenance, n.id_controle, n.valeur ". + "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g ". + "WHERE n.id_appartenance = app.id_appartenance ". + "AND app.id_semestre = s.id_semestre ". + "AND app.id_groupe = g.id_groupe ". + "AND s.id_semestre = mcc_ue.id_semestre ". + "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". + "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". + "AND n.id_controle = ctrl.id_controle ". + + "AND ctrl.id_controle = :controle ". + "AND app.id_groupe = :groupe ". + + "ORDER BY g.nom ASC"); + $getNoteList->execute(array( ':controle' => $controle, ':groupe' => $groupe )); + + } return DataBase::delNumeric( $getNoteList->fetchAll() ); } - } \ No newline at end of file diff --git a/page/_JS/career.js b/page/_JS/career.js index 96df9bb..da4285a 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -5,17 +5,90 @@ /***********************************************/ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') ){ // on traite uniquement si la section est définie // on récupère les liens - var groupLinks = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table.basic table.basic tr td span.link.group'); + + // /**************************************************/ + // /* GESTION DES LIENS POUR LES CONTRÔLES & GROUPES */ + // /**************************************************/ + // var groupControlList = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table.basic table.basic tr td span.link.grp.ctrl'); - for( var i = 0 ; i < groupLinks.length ; i++ ) // on active un évènement pour le clic sur les nom de groupes - groupLinks[i].addEventListener('click', function(e){ + // for( var i = 0 ; i < groupControlList.length ; i++ ) // on active un évènement pour le clic sur les nom de groupes + // groupControlList[i].addEventListener('click', function(e){ + + // if( e.target.className == 'link grp ctrl' && e.target.dataset.hasOwnProperty('grp') && e.target.dataset.hasOwnProperty('ctrl') ){ // s'il s'agit bien d'un nom de groupe + // pageM.vars[2] = e.target.dataset.grp; // le groupe en question + // pageM.vars[1] = e.target.dataset.ctrl; // le contrôle en question + // reload(); + // } + // }, false); + + + + // /****************************************/ + // /* GESTION DES LIENS POUR LES CONTRÔLES */ + // /****************************************/ + // // on récupère les liens + // var controleLinks = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table.basic span.link.ctrl'); + + // for( var i = 0 ; i < controleLinks.length ; i++ ) // on active un évènement pour le clic sur les nom de groupes + // controleLinks[i].addEventListener('click', function(e){ + + // if( e.target.className == 'link ctrl' && e.target.dataset.hasOwnProperty('ctrl') ){ // s'il s'agit bien d'un nom de groupe + // if( pageM.vars.length > 2 ) // si le groupe est défini, on le dé-défini + // pageM.vars.pop(); + + // pageM.vars[1] = e.target.dataset.ctrl; // le contrôle en question + // reload(); + // } + // }, false); + + // /**************************************/ + // /* GESTION DES LIENS POUR LES GROUPES */ + // /**************************************/ + // // on récupère les liens + // var groupList = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table.basic span.link.grp'); + + // for( var i = 0 ; i < groupList.length ; i++ ) // on active un évènement pour le clic sur les nom de groupes + // groupList[i].addEventListener('click', function(e){ + + // if( e.target.className == 'link grp' && e.target.dataset.hasOwnProperty('grp') ){ // s'il s'agit bien d'un nom de groupe + // pageM.vars[2] = e.target.dataset.grp; // le contrôle en question + // console.log( e.target.dataset.grp ); + // reload(); + // } + // }, false); + + controlesenseignantSection = document.querySelector('#CONTAINER section[name=controlesenseignants]'); + if( controlesenseignantSection != null ){ // si la section enseignant est présente sur la page + + controlesenseignantSection.addEventListener('click', function(e){ // on créé l'évènement + + /* LIENS POUR LES GROUPES ET CONTRÔLES */ + if( e.target.className == 'link grp ctrl' && e.target.dataset.hasOwnProperty('grp') && e.target.dataset.hasOwnProperty('ctrl') ){ + pageM.vars[1] = e.target.dataset.ctrl; + pageM.vars[2] = e.target.dataset.grp; + reload(); - if( e.target.className == 'link group' && e.target.dataset.hasOwnProperty('grp') && e.target.dataset.hasOwnProperty('ctrl') ){ // s'il s'agit bien d'un nom de groupe - console.log('id_groupe: '+ e.target.dataset.grp +', id_controle: '+ e.target.dataset.ctrl ); } + + /* LIENS POUR LES GROUPES */ + if( e.target.className == 'link grp' && e.target.dataset.hasOwnProperty('grp') ){ + pageM.vars[2] = e.target.dataset.grp; + reload(); + } + + /* LIENS POUR LES CONTRÔLES */ + if( e.target.className == 'link ctrl' && e.target.dataset.hasOwnProperty('ctrl') ){ + pageM.vars[1] = e.target.dataset.ctrl; + + if( pageM.vars[2] != null ) + pageM.vars.pop(); + + reload(); + } + }, false); - console.log(groupLinks); + } } diff --git a/page/_JS/groups.js b/page/_JS/groups.js index 6303038..49c60aa 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -119,7 +119,7 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / }; API.send(request, function(response){ // on gère la réponse de API, si déplacement effectué, on recharge la page - if( response.request == 'success' ) selectSection( document.querySelector('#MENU > span[data-link='+pageM.page+']') ); + if( response.request == 'success' ) reload(); }); } @@ -147,7 +147,7 @@ DOM.CONTAINER.addEventListener('change', function(e){ pageM.vars[2] = e.target.value; // on active le groupe } - selectSection( document.querySelector('#MENU > span[data-link='+pageM.page+']') ); + reload(); // console.log(e.target.getAttribute('name')+' = '+e.target.value); } }, false); diff --git a/page/career.php b/page/career.php index 2e24baf..abb8244 100755 --- a/page/career.php +++ b/page/career.php @@ -14,14 +14,19 @@ require_once __ROOT__.'/manager/career.php'; foreach($_POST as $k=>$v) array_push($postVars, $k); + /* GESTION CONTRÔLE OPTIONNEL */ + if( isset($postVars[1]) && is_int($postVars[1]) ) + $controleOpt = (String) $postVars[1]; + else + $controleOpt = null; + + /* GESTION GROUPE OPTIONNEL */ - if( isset($postVars[1]) && is_string($postVars[1]) && strlen($postVars[1]) > 1 ) - $groupeOpt = $postVars[1]; + if( isset($postVars[2]) && is_string($postVars[2]) && strlen($postVars[2]) > 1 ) + $groupeOpt = $postVars[2]; else $groupeOpt = null; - - /**************************************** * * * SECTION "PARCOURS" * @@ -112,13 +117,23 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un -/***********************************/ -/*** LES UE (version enseignant) ***/ -/***********************************/ -if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un élève +/******************************************/ +/*** LES CONTRÔLES (version enseignant) ***/ +/******************************************/ +/* +* +* [1] Tous les contrôles +* [2] Un contrôle particulier( avec ou sans groupe particulier ) +* +*/ + +/* [1] Tous les contrôles +==================================================================*/ +if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant et qu'aucun contrôle n'est spécifié + + $request = new stdClass(); $answer = new stdClass(); - debug(); $request->level_1 = 'getControlesEnseignant'; $request->enseignant = $_SESSION['identifiant']; @@ -151,7 +166,7 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un foreach($module['controles'] as $controle){ // pour chaque contrôle echo ''; - echo ''.$controle['intitule'].''; + echo "".$controle['intitule'].""; echo "".$module['nom']." - ".$module['libelle'].""; @@ -168,14 +183,14 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un foreach($controle['notes'] as $note){ // on affiche la liste des élèves avec leurs notes echo ""; - echo "".$note['groupe'].""; + echo "".$note['groupe'].""; if( $note['nb_notes'] == 1 ) echo "".$note['nb_notes']." note"; else echo "".$note['nb_notes']." notes"; echo "Allant de ".$note['min']." à ".$note['max'].""; - echo "Moyenne de ".number_format($note['moyenne'], 2)." / ".$controle['base'].""; + echo "Moyenne de ".number_format($note['valeur'], 2)." / ".$controle['base'].""; echo ""; } @@ -198,6 +213,87 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un }else echo "
    Aucun contrôle trouvé
    "; + + +} + +/* [2] Un contrôle particulier( avec ou sans groupe particulier ) +==================================================================*/ +elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécifié + + + $request = new stdClass(); $answer = new stdClass(); + + $request->level_1 = 'getNotesEnseignant'; + $request->enseignant = $_SESSION['identifiant']; + $request->controle = $controleOpt; + if( $groupeOpt != null ) $request->groupe = $groupeOpt; // on définit le groupe s'il est spécifié + + + career_switch_level_1($request, $answer); + + if( $answer->request == 'success' ){ + echo "
    "; + + + // bouton retour + // echo "
    Retour
    "; + // echo "
    "; + + + echo ""; + + echo ''; + echo ""; + + echo ""; + + if( count($answer->controle['notes']) == 0 ) // si il y a au moins une note pour ce contrôle + echo ''; + else + echo ''; + // echo ''; + + echo ''; + + echo ''; + + echo ""; + + foreach($answer->controle['notes'] as $note){ // on affiche la liste des élèves avec leurs notes + echo ""; + + /* 1) s'il s'agit d'afficher par groupe */ + if( isset($note['nb_notes']) ){ + + echo ""; + + if( $note['nb_notes'] == 1 ) + echo ""; + else + echo ""; + + echo ""; + echo ""; + + /* 2) s'il s'agit d'afficher par élève */ + }else{ + + echo ""; + echo ""; + echo ""; + echo ""; + + } + + echo ""; + } + + echo '
    ".$answer->controle['intitule']."".$answer->controle['module']." - ".$answer->controle['modulelib']."Pas notéMoyenne de 10 / 20'.number_format($answer->controle['moyenne'], 2).'Coefficient '.number_format($answer->controle['coefficient'], 2).'
    ".$note['groupe']."".$note['nb_notes']." note".$note['nb_notes']." notesAllant de ".$note['min']." à ".$note['max']."Moyenne de ".number_format($note['valeur'], 2)." / ".$answer->controle['base']."".$note['etudiant']."".$note['groupe']."".number_format($note['valeur'], 2)." / ".$answer->controle['base']."
    '; + + } + + } @@ -221,7 +317,6 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un - ?> From 6d24b03256fba50f8128f84813b4172c48785c3b Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sat, 14 Nov 2015 18:34:03 +0100 Subject: [PATCH 04/39] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20xdoc/sid.sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xdoc/sid.sql | 101 ++++++++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 46 deletions(-) diff --git a/xdoc/sid.sql b/xdoc/sid.sql index 43a087d..155cd24 100755 --- a/xdoc/sid.sql +++ b/xdoc/sid.sql @@ -3,7 +3,7 @@ -- http://www.phpmyadmin.net -- -- Client: localhost --- Généré le: Lun 09 Novembre 2015 à 12:49 +-- Généré le: Sam 14 Novembre 2015 à 18:33 -- Version du serveur: 5.5.46-0ubuntu0.14.04.2 -- Version de PHP: 5.5.9-1ubuntu4.14 @@ -39,7 +39,7 @@ CREATE TABLE IF NOT EXISTS `appartenance` ( KEY `id_etudiant_2` (`id_etudiant`), KEY `id_groupe_2` (`id_groupe`), KEY `id_semestre_2` (`id_semestre`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=103 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=104 ; -- -- RELATIONS POUR LA TABLE `appartenance`: @@ -60,7 +60,7 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (2, 'ihf1991a', 16, 4), (3, 'mma1990a', 13, 1), (4, 'lme1952a', 15, 3), -(5, 'imf1922a', 9, 1), +(5, 'imf1922a', 21, 1), (6, 'gyy1983a', 4, 4), (7, 'otm1902a', 14, 2), (8, 'tnx1949a', 12, 4), @@ -74,14 +74,14 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (16, 'pdi1904a', 19, 3), (17, 'cuk1947a', 10, 2), (18, 'non1968a', 22, 2), -(19, 'hmn1970a', 21, 1), +(19, 'hmn1970a', 1, 1), (20, 'hth1975a', 5, 1), (21, 'liw1940a', 6, 2), (22, 'dtg1946a', 18, 2), (23, 'oxz1985a', 7, 3), (24, 'ono1984a', 14, 2), (25, 'auy1966a', 3, 3), -(26, 'dui1946a', 9, 1), +(26, 'dui1946a', 5, 1), (27, 'cyw1979a', 24, 4), (28, 'pfv1965a', 3, 3), (29, 'oqz1937a', 24, 4), @@ -95,13 +95,13 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (37, 'zgy1948a', 10, 2), (38, 'vau1957a', 23, 3), (39, 'hsx1927a', 19, 3), -(40, 'eca1977a', 11, 3), +(40, 'eca1977a', 3, 3), (41, 'wpa1966a', 20, 4), (42, 'qoe1974a', 20, 4), (43, 'tkz1955a', 11, 3), (44, 'wnx1995a', 16, 4), (45, 'sft1994a', 2, 2), -(46, 'vgb1979a', 3, 3), +(46, 'vgb1979a', 11, 3), (47, 'wbt1993a', 19, 3), (48, 'xtb1903a', 11, 3), (49, 'msj1985a', 13, 1), @@ -109,7 +109,7 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (51, 'psg1965a', 8, 4), (52, 'hpa1908a', 5, 1), (53, 'maq1980a', 19, 3), -(54, 'agq1929a', 5, 1), +(54, 'agq1929a', 13, 1), (55, 'gwe1975a', 18, 2), (56, 'gdb1939a', 7, 3), (57, 'jrc1974a', 10, 2), @@ -117,8 +117,8 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (59, 'buz1982a', 24, 4), (60, 'mhr1952a', 7, 3), (61, 'pos1958a', 11, 3), -(62, 'xdi1926a', 7, 3), -(63, 'awl1901a', 1, 1), +(62, 'xdi1926a', 3, 3), +(63, 'awl1901a', 17, 1), (64, 'uix1942a', 7, 3), (65, 'ngz1932a', 19, 3), (66, 'kpf1942a', 15, 3), @@ -141,7 +141,7 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (83, 'ngw1997a', 1, 1), (84, 'obg1973a', 2, 2), (85, 'hzg1935a', 12, 4), -(86, 'iyh1918a', 11, 3), +(86, 'iyh1918a', 3, 3), (87, 'tdc1978a', 13, 1), (88, 'swd1951a', 2, 2), (89, 'vdj1905a', 22, 2), @@ -153,9 +153,10 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (95, 'bky1924a', 22, 2), (96, 'vul1953a', 5, 1), (97, 'ssr1906a', 9, 1), -(98, 'yjh1944a', 3, 3), +(98, 'yjh1944a', 11, 3), (99, 'ste1994a', 10, 2), -(100, 'ypo1964a', 7, 3); +(100, 'ypo1964a', 7, 3), +(103, 'mrd1609a', 1, 1); -- -------------------------------------------------------- @@ -172,7 +173,7 @@ CREATE TABLE IF NOT EXISTS `controle` ( `date_publication` date NOT NULL, PRIMARY KEY (`id_controle`), KEY `id_mcc_module` (`id_mcc_module`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ; -- -- RELATIONS POUR LA TABLE `controle`: @@ -185,14 +186,16 @@ CREATE TABLE IF NOT EXISTS `controle` ( -- INSERT INTO `controle` (`id_controle`, `id_mcc_module`, `intitule`, `base`, `coefficient`, `date_publication`) VALUES -(1, 5, 'Partiel 1', 20, 1, '2015-11-09'), -(2, 5, 'Partiel 2', 20, 1, '2015-11-10'), -(3, 6, 'Partiel 3', 20, 1, '2015-11-11'), -(4, 6, 'Partiel 4', 20, 1, '2015-11-12'), -(5, 7, 'Partiel 5', 20, 1, '2015-11-13'), -(6, 7, 'Partiel 6', 20, 1, '2015-11-14'), -(7, 8, 'Partiel 7', 20, 1, '2015-11-15'), -(8, 8, 'Partiel 8', 20, 1, '2015-11-16'); +(1, 1, 'Partiel 1', 20, 1, '2015-11-09'), +(2, 1, 'Partiel 2', 20, 1, '2015-11-10'), +(3, 2, 'Partiel 3', 20, 1, '2015-11-11'), +(4, 2, 'Partiel 4', 20, 1, '2015-11-12'), +(5, 3, 'Partiel 5', 20, 1, '2015-11-13'), +(6, 3, 'Partiel 6', 20, 1, '2015-11-14'), +(7, 4, 'Partiel 7', 20, 1, '2015-11-15'), +(8, 4, 'Partiel 8', 20, 1, '2015-11-16'), +(9, 5, 'Partiel 9', 20, 9, '2015-11-17'), +(10, 10, 'Partiel 10', 20, 10, '2015-11-18'); -- -------------------------------------------------------- @@ -208,7 +211,7 @@ CREATE TABLE IF NOT EXISTS `enseignement` ( PRIMARY KEY (`id_enseignement`), KEY `id_enseignant` (`id_enseignant`), KEY `id_mcc_module` (`id_mcc_module`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; -- -- RELATIONS POUR LA TABLE `enseignement`: @@ -223,8 +226,10 @@ CREATE TABLE IF NOT EXISTS `enseignement` ( -- INSERT INTO `enseignement` (`id_enseignement`, `id_enseignant`, `id_mcc_module`, `correcteur`) VALUES -(1, 'lbh1609a', 5, 0), -(2, 'lbh1609a', 10, 0); +(1, 'lbh1609a', 5, 1), +(2, 'lbh1609a', 10, 1), +(3, 'admin', 9, 1), +(4, 'admin', 1, 1); -- -------------------------------------------------------- @@ -286,10 +291,10 @@ CREATE TABLE IF NOT EXISTS `mcc_module` ( -- -- RELATIONS POUR LA TABLE `mcc_module`: --- `id_module` --- `module` -> `id_module` -- `id_mcc_ue` -- `mcc_ue` -> `id_mcc_ue` +-- `id_module` +-- `module` -> `id_module` -- -- @@ -332,10 +337,10 @@ CREATE TABLE IF NOT EXISTS `mcc_ue` ( -- -- RELATIONS POUR LA TABLE `mcc_ue`: --- `id_ue` --- `ue` -> `id_ue` -- `id_semestre` -- `semestre` -> `id_semestre` +-- `id_ue` +-- `ue` -> `id_ue` -- -- @@ -401,14 +406,14 @@ CREATE TABLE IF NOT EXISTS `note` ( PRIMARY KEY (`id_note`), KEY `id_appartenance` (`id_appartenance`), KEY `id_controle` (`id_controle`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ; -- -- RELATIONS POUR LA TABLE `note`: --- `id_controle` --- `controle` -> `id_controle` -- `id_appartenance` -- `appartenance` -> `id_appartenance` +-- `id_controle` +-- `controle` -> `id_controle` -- -- @@ -416,14 +421,17 @@ CREATE TABLE IF NOT EXISTS `note` ( -- INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUES -(11, 1, 1, 1), -(12, 1, 2, 2), -(13, 1, 3, 3), -(14, 1, 4, 4), -(15, 1, 5, 5), -(16, 1, 6, 6), -(17, 1, 7, 7), -(18, 1, 8, 8); +(11, 103, 1, 1), +(12, 54, 2, 2), +(13, 103, 3, 3), +(14, 103, 4, 4), +(15, 103, 5, 5), +(16, 103, 6, 6), +(17, 103, 7, 7), +(18, 103, 8, 8), +(19, 103, 9, 9), +(20, 20, 1, 19), +(21, 77, 1, 18); -- -------------------------------------------------------- @@ -500,6 +508,7 @@ CREATE TABLE IF NOT EXISTS `utilisateur` ( INSERT INTO `utilisateur` (`identifiant`, `prenom`, `nom`, `mail`, `mdp`, `droits`) VALUES ('admin', 'monsieur', 'administrateur', 'admin@iut-tlse3.fr', 'lkjdsqlkjdlqksjdlqksjdqlksdjlqksjdqj', 'admin,teacher'), +('admin2', 'madame', 'administratrice', 'mme.admin@iut-tlse3.fr', 'lkjdsqlkjdlqksjdlqksjdqlksdjlqksjdqj', 'admin'), ('aft1950a', 'Rachel', 'DAVENPORT', 'rachel.davenport@etu.iut-tlse3.fr', '68724b2da1b628fd37116d3abae9c4233aa9fa56', 'student'), ('agl1956a', 'Cruz', 'HOWE', 'cruz.howe@etu.iut-tlse3.fr', 'c3f22ac779a9e0e276acdc9933cdcdb2f054e317', 'student'), ('agq1929a', 'Althea', 'POOLE', 'althea.poole@etu.iut-tlse3.fr', 'f20feea8f16e481683d420f8c97c4366d4941f4c', 'student'), @@ -632,22 +641,22 @@ ALTER TABLE `enseignement` -- Contraintes pour la table `mcc_module` -- ALTER TABLE `mcc_module` - ADD CONSTRAINT `mcc_module_id_module` FOREIGN KEY (`id_module`) REFERENCES `module` (`id_module`), - ADD CONSTRAINT `mcc_module_id_mcc_ue` FOREIGN KEY (`id_mcc_ue`) REFERENCES `mcc_ue` (`id_mcc_ue`); + ADD CONSTRAINT `mcc_module_id_mcc_ue` FOREIGN KEY (`id_mcc_ue`) REFERENCES `mcc_ue` (`id_mcc_ue`), + ADD CONSTRAINT `mcc_module_id_module` FOREIGN KEY (`id_module`) REFERENCES `module` (`id_module`); -- -- Contraintes pour la table `mcc_ue` -- ALTER TABLE `mcc_ue` - ADD CONSTRAINT `mcc_ue_id_ue` FOREIGN KEY (`id_ue`) REFERENCES `ue` (`id_ue`), - ADD CONSTRAINT `mcc_ue_id_semestre` FOREIGN KEY (`id_semestre`) REFERENCES `semestre` (`id_semestre`); + ADD CONSTRAINT `mcc_ue_id_semestre` FOREIGN KEY (`id_semestre`) REFERENCES `semestre` (`id_semestre`), + ADD CONSTRAINT `mcc_ue_id_ue` FOREIGN KEY (`id_ue`) REFERENCES `ue` (`id_ue`); -- -- Contraintes pour la table `note` -- ALTER TABLE `note` - ADD CONSTRAINT `note_id_controle` FOREIGN KEY (`id_controle`) REFERENCES `controle` (`id_controle`), - ADD CONSTRAINT `note_id_appartenance` FOREIGN KEY (`id_appartenance`) REFERENCES `appartenance` (`id_appartenance`); + ADD CONSTRAINT `note_id_appartenance` FOREIGN KEY (`id_appartenance`) REFERENCES `appartenance` (`id_appartenance`), + ADD CONSTRAINT `note_id_controle` FOREIGN KEY (`id_controle`) REFERENCES `controle` (`id_controle`); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; From e51c3443561e7874373c691274d0acbae5a69764 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 12:15:30 +0100 Subject: [PATCH 05/39] =?UTF-8?q?Ajout=20de=20l'affichage=20des=20=C3=A9tu?= =?UTF-8?q?diants=20m=C3=AAme=20s'ils=20n'ont=20pas=20de=20note?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/career.php | 2 +- manager/database.php | 32 +++++++++----- manager/repo/controle.php | 20 ++++++--- manager/repo/group.php | 2 +- manager/repo/note.php | 2 +- page/career.php | 90 ++++++++++++++++++++++++++------------- 6 files changed, 100 insertions(+), 48 deletions(-) diff --git a/manager/career.php b/manager/career.php index f8c7541..f88e206 100755 --- a/manager/career.php +++ b/manager/career.php @@ -107,7 +107,7 @@ require_once __ROOT__.'/manager/database.php'; else $groupe = null; if( $enseignantCheck ){ // si tout les paramètres sont bons - $controle = DataBase::getInstance()->getNotesEnseignant($request->enseignant, $request->controle, $groupe); + $controle = DataBase::getInstance()->getNotesEnseignant($request->enseignant, $_SESSION['semestre_pair'], $_SESSION['annee'], $request->controle, $groupe); if( is_array($controle) ){ // si on a bien un tableau $answer->controle = $controle; // on renvoie dans answer->controle diff --git a/manager/database.php b/manager/database.php index 68def46..ecf9082 100755 --- a/manager/database.php +++ b/manager/database.php @@ -656,21 +656,33 @@ class DataBase{ /********************************************/ /*** retourne les notes pour un contrôle ***/ /********************************************/ - public function getNotesEnseignant($enseignant, $controle, $groupe=null){ // [OPTIONNEL] $groupe + public function getNotesEnseignant($enseignant, $semestre_pair, $annee, $controle, $groupe=null){ // [OPTIONNEL] $groupe - // on récupère l'UID du contrôle, s'il existe - if( $groupe != null ) - if( !($groupeUID=groupRepo::UID($groupe)) ) return 'unknown_group'; else $groupeUID = (int) $groupeUID; - else - $groupeUID = null; // on récupère les informations du contrôle - if( ! ($noteList=controleRepo::info($controle)) ) return 'unknown_controle'; - - $noteList['notes'] = noteRepo::forTeacher($controle, $groupeUID); + if( ! ($controlObj=controleRepo::info($controle)) ) return 'unknown_controle'; + /* [1] si le groupe est donné + =======================================*/ + if( $groupe != null ){ + if( !($groupeUID=groupRepo::UID($groupe)) ) return 'unknown_group'; else $groupeUID = (int) $groupeUID; // on récupère l'UID du groupe - return $noteList; + $controlObj['userlist'] = groupRepo::membres($groupeUID, $controlObj['id_semestre']); // on récupère la liste des étudiants de ce groupe + + foreach($controlObj['userlist'] as $iter=>$note) + if( $resultNote = noteRepo::forStudent($controlObj['userlist'][$iter]['identifiant'], $controle) ) // si l'étudiant a une note pour ce controle + $controlObj['userlist'][$iter]['note'] = $resultNote[0]['valeur']; + else + $controlObj['userlist'][$iter]['note'] = null; + + /* [2] si on veut par groupe + =======================================*/ + }else{ + // on ajoute au controle['notes'] la liste des notes des groupes + $controlObj['grouplist'] = noteRepo::forTeacher($controle, null); + } + + return $controlObj; } diff --git a/manager/repo/controle.php b/manager/repo/controle.php index 91c9267..277b947 100755 --- a/manager/repo/controle.php +++ b/manager/repo/controle.php @@ -19,12 +19,17 @@ class controleRepo extends DBAccess{ */ public static function info($controleUID){ // on considère que le semestre existe - $getControleInfo = DataBase::getPDO()->prepare("SELECT ctrl.id_controle as id, ctrl.id_mcc_module, m.nom as module, m.libelle as modulelib, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication ". - "FROM controle as ctrl, mcc_module as mcc_m, module as m ". + $getControleInfo = DataBase::getPDO()->prepare("SELECT ctrl.id_controle as id, ctrl.id_mcc_module, m.nom as module, m.libelle as modulelib, s.id_semestre, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication, AVG(n.valeur) as moyenne ". + "FROM controle as ctrl, mcc_module as mcc_m, mcc_ue, semestre as s, module as m, note as n ". "WHERE ctrl.id_mcc_module = mcc_m.id_mcc_module ". "AND mcc_m.id_module = m.id_module ". + "AND n.id_controle = ctrl.id_controle ". + "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". + "AND mcc_ue.id_semestre = s.id_semestre ". - "AND id_controle = :controleUID"); + "AND ctrl.id_controle = :controleUID ". + + "GROUP BY ctrl.id_controle"); $getControleInfo->execute(array( ':controleUID' => $controleUID )); @@ -75,16 +80,19 @@ class controleRepo extends DBAccess{ * */ public static function forTeacher($enseignant, $module, $semestre){ - $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.id_mcc_module, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication ". - "FROM enseignement as ens, module as m, mcc_module as mcc_m, mcc_ue, controle as ctrl ". + $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.id_mcc_module, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication, AVG(n.valeur) as moyenne ". + "FROM enseignement as ens, module as m, mcc_module as mcc_m, mcc_ue, controle as ctrl, note as n ". "WHERE ens.id_mcc_module = mcc_m.id_mcc_module ". "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". "AND mcc_m.id_module = m.id_module ". "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". + "AND n.id_controle = ctrl.id_controle ". "AND ens.id_enseignant = :enseignant ". "AND mcc_m.id_module = :module ". - "AND mcc_ue.id_semestre = :semestre"); + "AND mcc_ue.id_semestre = :semestre ". + + "GROUP BY ctrl.id_controle"); $getControleList->execute(array( ':enseignant' => $enseignant, ':module' => $module, ':semestre' => $semestre )); return DataBase::delNumeric( $getControleList->fetchAll() ); diff --git a/manager/repo/group.php b/manager/repo/group.php index 07cd798..e123353 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -182,7 +182,7 @@ class groupRepo extends DBAccess{ */ public static function membres($groupeUID, $semestreUID){ // si le groupe existe => on récupère ses utilisateurs - $getMembres = DataBase::getPDO()->prepare("SELECT u.identifiant, u.prenom, u.nom, u.mail, u.droits, s.nom as semestre ". + $getMembres = DataBase::getPDO()->prepare("SELECT u.identifiant, u.prenom, u.nom, u.mail, u.droits, s.nom as semestre, g.id_groupe, g.nom as groupe ". "FROM utilisateur as u, groupe as g, semestre as s, appartenance as app ". "WHERE u.identifiant = app.id_etudiant ". "AND g.id_groupe = app.id_groupe ". diff --git a/manager/repo/note.php b/manager/repo/note.php index bfa8a9b..363e614 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -134,7 +134,7 @@ class noteRepo extends DBAccess{ ============================================================*/ if( !is_int($groupe) ){ - $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as valeur, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes ". + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as moyenne, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes ". "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g ". "WHERE n.id_appartenance = app.id_appartenance ". "AND app.id_semestre = s.id_semestre ". diff --git a/page/career.php b/page/career.php index abb8244..6e5d375 100755 --- a/page/career.php +++ b/page/career.php @@ -173,7 +173,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e if( count($controle['notes']) == 0 ) // si il y a au moins une note pour ce contrôle echo 'Pas noté'; else - echo 'Moyenne de 10 / 20'; + echo 'Moyenne de '.number_format($controle['moyenne'], 2).' / '.$controle['base'].''; // echo ''.number_format($controle['moyenne'], 2).''; echo 'Coefficient '.number_format($controle['coefficient'], 2).''; @@ -242,51 +242,83 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif echo ""; + echo "'; echo ''; echo ""; echo ""; - if( count($answer->controle['notes']) == 0 ) // si il y a au moins une note pour ce contrôle - echo ''; - else - echo ''; - // echo ''; - + + /* [1] Affichage par groupes + ====================================================================================*/ + if( $groupeOpt == null ){ + + if( count($answer->controle['grouplist']) == 0 ) // si il y a au moins une note pour ce contrôle + echo ''; + else + echo ''; + + /* [2] Affichage par élèves + ====================================================================================*/ + }else{ + + if( count($answer->controle['userlist']) == 0 ) // si il y a au moins une note pour ce contrôle + echo ''; + else + echo ''; + + } + + echo ''; echo ''; echo ""; - foreach($answer->controle['notes'] as $note){ // on affiche la liste des élèves avec leurs notes - echo ""; - - /* 1) s'il s'agit d'afficher par groupe */ - if( isset($note['nb_notes']) ){ - - echo ""; - - if( $note['nb_notes'] == 1 ) - echo ""; - else - echo ""; - echo ""; - echo ""; - - /* 2) s'il s'agit d'afficher par élève */ - }else{ + /* [1] Affichage par groupes + ====================================================================================*/ + if( $groupeOpt == null ){ + + foreach($answer->controle['grouplist'] as $note){ // on affiche la liste des groupes avec leurs stats + echo ""; + + echo ""; + + if( $note['nb_notes'] == 1 ) + echo ""; + else + echo ""; + + echo ""; + echo ""; + + + echo ""; + } + + /* [2] Affichage par élèves + ====================================================================================*/ + }else{ + + foreach($answer->controle['userlist'] as $user){ // on affiche la liste des élèves avec leurs notes + echo ""; + + echo ""; + echo ""; + + if( $user['note'] == null ) // si pas de note + echo ""; + else // si noté + echo ""; - echo ""; - echo ""; - echo ""; echo ""; - } + echo ""; + } - echo ""; } echo '
    ".$answer->controle['module'].' - '.$answer->controle['intitule'].'
    ".$answer->controle['intitule']."".$answer->controle['module']." - ".$answer->controle['modulelib']."Pas notéMoyenne de 10 / 20'.number_format($answer->controle['moyenne'], 2).'Pas notéMoyenne de '.number_format($answer->controle['moyenne'], 2).' / '.$answer->controle['base'].'Pas notéMoyenne de '.number_format($answer->controle['moyenne'], 2).' / '.$answer->controle['base'].'Coefficient '.number_format($answer->controle['coefficient'], 2).'
    ".$note['groupe']."".$note['nb_notes']." note".$note['nb_notes']." notesAllant de ".$note['min']." à ".$note['max']."Moyenne de ".number_format($note['valeur'], 2)." / ".$answer->controle['base']."
    ".$note['groupe']."".$note['nb_notes']." note".$note['nb_notes']." notesAllant de ".$note['min']." à ".$note['max']."Moyenne de ".number_format($note['moyenne'], 2)." / ".$answer->controle['base']."
    ".$user['identifiant']."".$user['groupe']."".number_format($user['note'], 2)." / ".$answer->controle['base']."Pas noté".$note['etudiant']."".$note['groupe']."".number_format($note['valeur'], 2)." / ".$answer->controle['base']."
    '; From 60b484dae608c3937bba10f3f8b5d022989ff9d9 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 12:20:24 +0100 Subject: [PATCH 06/39] Correction erreur de modification attribut tableau --- page/career.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/page/career.php b/page/career.php index 6e5d375..dcfc37c 100755 --- a/page/career.php +++ b/page/career.php @@ -190,7 +190,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo "".$note['nb_notes']." notes"; echo "Allant de ".$note['min']." à ".$note['max'].""; - echo "Moyenne de ".number_format($note['valeur'], 2)." / ".$controle['base'].""; + echo "Moyenne de ".number_format($note['moyenne'], 2)." / ".$controle['base'].""; echo ""; } From 92435df36248a15d2d93b1348b4e5577ac211140 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 12:30:35 +0100 Subject: [PATCH 07/39] Ajout raccourci-clavier pour dev: ctrl+alt+e pour ouvrir box connection --- js/actionScript.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/js/actionScript.js b/js/actionScript.js index 95e424a..b5bb95f 100755 --- a/js/actionScript.js +++ b/js/actionScript.js @@ -348,16 +348,15 @@ initForm( // initialisation du formulaire de connection * * */ -Shortcut('ctrl+alt+n', function(){ - pageM.vars[0] = 'notifications'; - selectSection( document.querySelector('#MENU > span[data-link=home]') ); -}); - -// Shortcut('ctrl+alt+e', function(){ -// console.log(DOM.LOGOUT); -// DOM.LOGOUT.click(); +// Shortcut('ctrl+alt+n', function(){ +// pageM.vars[0] = 'notifications'; +// selectSection( document.querySelector('#MENU > span[data-link=home]') ); // }); +Shortcut('ctrl+alt+e', function(){ + addClass(DOM.WRAPPER, 'blurred'); +}); + /* [6] GESTION DES LIENS SPÉCIFIQUES ==============================================================*/ From f5ae82feba90c4c77197dfe748d7ce4f7df6f6db Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 13:02:34 +0100 Subject: [PATCH 08/39] =?UTF-8?q?Correction=20affichage=20notes=20=C3=A9tu?= =?UTF-8?q?diants,=20+=20saisie=20en=20cours?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 34 ++++++++++---- manager/career.php | 34 ++++++++++++++ page/_JS/career.js | 111 ++++++++++++++++++++++++--------------------- page/_JS/groups.js | 42 ++--------------- page/career.php | 7 ++- page/groups.php | 2 +- 6 files changed, 128 insertions(+), 102 deletions(-) diff --git a/css/global.css b/css/global.css index 1bb72f2..1dda044 100755 --- a/css/global.css +++ b/css/global.css @@ -204,16 +204,10 @@ td select > option{ padding: 0; } -/* -select > option:nth-child(4n+0){ color: #e63c54; } -select > option:nth-child(4n+1){ color: #3c73e6; } -select > option:nth-child(4n+2){ color: #e6983c; } -select > option:nth-child(4n+3){ color: #2dcc70; }*/ - -.valider_deplacement{ +.valider_action{ /* position */ /*display: inline-block;*/ display: none; position: absolute; @@ -230,5 +224,27 @@ select > option:nth-child(4n+3){ color: #2dcc70; }*/ cursor: pointer; } -.valider_deplacement.active{ display: inline-block; background-image: url(../src/validate.svg); } -tr:hover td .valider_deplacement.active{ background-image: url(../src/validate@hover.svg); } \ No newline at end of file +/* bouton validation */ +select.active + .valider_action{ display: inline-block; background-image: url(../src/validate.svg); } +tr:hover td select.active + .valider_action{ background-image: url(../src/validate@hover.svg); } + + +/* saisie note */ +.saisie_note{ + /* position */ + margin: -.5em; + width: 4em; + padding: .5em 1em; + + /* border */ + border-radius: 3px; + border: 1px solid #bdbdbd; +} + +/* @focus */ +.saisie_note:focus{ border-color: #999; } + + +/* bouton validation */ +input.saisie_note.active + .valider_action{ display: inline-block; background-image: url(../src/validate.svg); } +tr:hover td input.saisie_note.active + .valider_action{ background-image: url(../src/validate@hover.svg); } diff --git a/manager/career.php b/manager/career.php index f88e206..a570978 100755 --- a/manager/career.php +++ b/manager/career.php @@ -123,6 +123,40 @@ require_once __ROOT__.'/manager/database.php'; + /****************************************************/ + /* saisie d'une note pour un étudiant à un contrôle */ + /****************************************************/ + case 'saisieNote': if( permission('teacher') ){ + + $areSetParam = isset($request->etudiant) && isset($request->controle); // les arguments existent + $typeOkParam = $areSetParam && is_string($request->enseignant); // si c'est des strings + $nEmptyParam = $typeOkParam && strlen($request->enseignant) > 0 && is_numeric($request->controle); // des bon types + $enseignantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->enseignant); // nom bon format + + // paramètre optionnel + $optionalGroupe = isset($request->groupe) && is_string($request->groupe) && strlen($request->groupe) > 1 && preg_match('/^[a-z0-9 -]{1,10}$/i', $request->groupe); + + // définition (ou pas) du paramètre optionnel + if( $optionalGroupe ) $groupe = $request->groupe; + else $groupe = null; + + if( $enseignantCheck ){ // si tout les paramètres sont bons + $controle = DataBase::getInstance()->getNotesEnseignant($request->enseignant, $_SESSION['semestre_pair'], $_SESSION['annee'], $request->controle, $groupe); + + if( is_array($controle) ){ // si on a bien un tableau + $answer->controle = $controle; // on renvoie dans answer->controle + $answer->request = 'success'; // et on renvoie success + }else // sinon si c'est pas un tableau + $answer->request = $controle; // on retourne l'erreur + }else + $answer->request = 'param_error'; + + }else + $answer->request = 'permission_error'; + break; + + + /***********/ /* DEFAULT */ diff --git a/page/_JS/career.js b/page/_JS/career.js index da4285a..fc4e973 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -4,58 +4,6 @@ /* GESTION DE LE FILTRAGE POUR LES ENSEIGNANTS */ /***********************************************/ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') ){ // on traite uniquement si la section est définie - // on récupère les liens - - // /**************************************************/ - // /* GESTION DES LIENS POUR LES CONTRÔLES & GROUPES */ - // /**************************************************/ - // var groupControlList = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table.basic table.basic tr td span.link.grp.ctrl'); - - // for( var i = 0 ; i < groupControlList.length ; i++ ) // on active un évènement pour le clic sur les nom de groupes - // groupControlList[i].addEventListener('click', function(e){ - - // if( e.target.className == 'link grp ctrl' && e.target.dataset.hasOwnProperty('grp') && e.target.dataset.hasOwnProperty('ctrl') ){ // s'il s'agit bien d'un nom de groupe - // pageM.vars[2] = e.target.dataset.grp; // le groupe en question - // pageM.vars[1] = e.target.dataset.ctrl; // le contrôle en question - // reload(); - // } - // }, false); - - - - // /****************************************/ - // /* GESTION DES LIENS POUR LES CONTRÔLES */ - // /****************************************/ - // // on récupère les liens - // var controleLinks = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table.basic span.link.ctrl'); - - // for( var i = 0 ; i < controleLinks.length ; i++ ) // on active un évènement pour le clic sur les nom de groupes - // controleLinks[i].addEventListener('click', function(e){ - - // if( e.target.className == 'link ctrl' && e.target.dataset.hasOwnProperty('ctrl') ){ // s'il s'agit bien d'un nom de groupe - // if( pageM.vars.length > 2 ) // si le groupe est défini, on le dé-défini - // pageM.vars.pop(); - - // pageM.vars[1] = e.target.dataset.ctrl; // le contrôle en question - // reload(); - // } - // }, false); - - // /**************************************/ - // /* GESTION DES LIENS POUR LES GROUPES */ - // /**************************************/ - // // on récupère les liens - // var groupList = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table.basic span.link.grp'); - - // for( var i = 0 ; i < groupList.length ; i++ ) // on active un évènement pour le clic sur les nom de groupes - // groupList[i].addEventListener('click', function(e){ - - // if( e.target.className == 'link grp' && e.target.dataset.hasOwnProperty('grp') ){ // s'il s'agit bien d'un nom de groupe - // pageM.vars[2] = e.target.dataset.grp; // le contrôle en question - // console.log( e.target.dataset.grp ); - // reload(); - // } - // }, false); controlesenseignantSection = document.querySelector('#CONTAINER section[name=controlesenseignants]'); if( controlesenseignantSection != null ){ // si la section enseignant est présente sur la page @@ -92,7 +40,66 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') ){ / } +/* GESTION DE LA SAISIE DE NOTES */ +if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != null ){ // si c'set l'admin + /* SAISIE A L'AIDE DES */ + var saisieInput = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table tr td input[type=number][data-ctrl].saisie_note'); + var saisieObj = []; + + // on référencie tous les input dans un objet + for( var i = 0 ; i < saisieInput.length ; i++ ){ + + saisieInput[i].dataset.i = i; // le rang du dans la liste + + saisieObj[i] = { + inputEl: saisieInput[i], // le en question + initval: saisieInput[i].value, // la valeur initiale du + button: saisieInput[i].parentNode.children[1], // le bouton de validation pour ce + ctrlid: saisieInput[i].dataset.ctrl, // on récupère l'id du contrôle + userid: saisieInput[i].parentNode.parentNode.children[0].children[0].innerHTML // l'identifiant de l'utilisateur associé à ce + }; + + // on créé l'évènement qui affiche le validateur dès le changement de valeur + saisieObj[i].inputEl.addEventListener('change', function(e){ + // on récupère le rang dans la liste et qu'il s'agit du même élément + if( e.target.dataset.hasOwnProperty('i') && saisieObj[e.target.dataset.i].inputEl == e.target){ + var obj = saisieObj[e.target.dataset.i]; + + if( obj.initval != obj.inputEl.value ) // si c'est une nouvelle valeur (nouveau groupe), on active le validateur (bouton) + addClass( obj.inputEl, 'active' ); + else + remClass( obj.inputEl, 'active' ); + + } + }, false); + + + // on créé l'évènement de confirmation du déplacement + saisieObj[i].button.addEventListener('click', function(e){ + // s'il s'agit bien d'un bouton de validation, que le associé a data-i existante et que ça match correctement + if( /^valider_action/.test(e.target.className) && e.target.parentNode.children[0].dataset.hasOwnProperty('i') && saisieObj[e.target.parentNode.children[0].dataset.i].button == e.target ){ + var obj = saisieObj[e.target.parentNode.children[0].dataset.i]; + + var request = { // on définit la requête pour API + level_0: 'career', + level_1: 'saisieNote', + etudiant: obj.userid, + controle: obj.ctrlid, + note: obj.inputEl.value, + }; + + API.send(request, function(response){ // on gère la réponse de API, si déplacement effectué, on recharge la page + if( response.request == 'success' ) reload(); + }); + + } + + }, false); + } + + +} diff --git a/page/_JS/groups.js b/page/_JS/groups.js index 49c60aa..86c6961 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -37,43 +37,9 @@ var afficherCacherGroupesDefined = true; -/* GESTION DU DRAG N DROP */ +/* GESTION DU DEPLACEMENT D'ELEVES */ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ // si c'set l'admin - // var members = document.querySelectorAll('#CONTAINER section[name=movestudents] table tr td:not(.more)'); - // for( var i = 0 ; i < members.length ; i++ ) - // dnd.setDraggable(members[i]); - - // var groups = document.querySelectorAll('#CONTAINER section[name=movestudents] table thead th:first-child'); - // for( var i = 0 ; i < groups.length ; i++ ) - // dnd.setDroppable(groups[i]); - - // dnd.init(function(input, output){ // on demande un déplacement - // var id_etudiant = input.children[0].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 - // }; - - // // l'ordre n'est pas alphabétique mais va à la fin - - // API.send(request, function(response){ // on gère la réponse de API - // if( response.request == 'success' ){ - // input.parentNode.removeChild( input ); // on supprime le membre de l'ancien groupe - - // var tableauDestination = output.parentNode.parentNode.parentNode.children[1]; // destination - // tableauDestination.appendChild( input ); // on ajoute le membre au nouveau groupe - - // // selectSection( document.querySelector('#MENU span[data-link=groups]') ); - // } - // }); - // }); - // - /* DEPLACEMENT A L'AIDE DES associé a data-i existante et que ça match correctement - if( /^valider_deplacement/.test(e.target.className) && e.target.parentNode.children[0].dataset.hasOwnProperty('i') && deplacementObj[e.target.parentNode.children[0].dataset.i].button == e.target ){ + if( /^valider_action/.test(e.target.className) && e.target.parentNode.children[0].dataset.hasOwnProperty('i') && deplacementObj[e.target.parentNode.children[0].dataset.i].button == e.target ){ var obj = deplacementObj[e.target.parentNode.children[0].dataset.i]; var request = { // on définit la requête pour API diff --git a/page/career.php b/page/career.php index dcfc37c..b65c503 100755 --- a/page/career.php +++ b/page/career.php @@ -309,12 +309,15 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif echo "".$user['identifiant'].""; echo "".$user['groupe'].""; - if( $user['note'] == null ) // si pas de note + if( $user['note'] != null ) // si on a une note echo "".number_format($user['note'], 2)." / ".$answer->controle['base'].""; else // si noté echo "Pas noté"; - echo ""; + echo ""; + echo ""; + echo "
    "; + echo ""; echo ""; } diff --git a/page/groups.php b/page/groups.php index a5c5fc0..67595d2 100755 --- a/page/groups.php +++ b/page/groups.php @@ -517,7 +517,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm else // s'il s'agit d'un autre groupe, c'est normal echo ""; echo ''; - echo "
    "; + echo "
    "; echo ''; echo ''; } From 97bc41d54e9abb568b031eb15710b754acdd643d Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 15:12:26 +0100 Subject: [PATCH 09/39] Saisie note individuelle OP --- manager/career.php | 25 ++------ manager/database.php | 141 +++++------------------------------------- manager/repo/note.php | 99 ++++++++++++++++++----------- page/_JS/career.js | 2 +- page/career.php | 6 +- 5 files changed, 89 insertions(+), 184 deletions(-) diff --git a/manager/career.php b/manager/career.php index a570978..30c60dd 100755 --- a/manager/career.php +++ b/manager/career.php @@ -128,26 +128,13 @@ require_once __ROOT__.'/manager/database.php'; /****************************************************/ case 'saisieNote': if( permission('teacher') ){ - $areSetParam = isset($request->etudiant) && isset($request->controle); // les arguments existent - $typeOkParam = $areSetParam && is_string($request->enseignant); // si c'est des strings - $nEmptyParam = $typeOkParam && strlen($request->enseignant) > 0 && is_numeric($request->controle); // des bon types - $enseignantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->enseignant); // nom bon format - - // paramètre optionnel - $optionalGroupe = isset($request->groupe) && is_string($request->groupe) && strlen($request->groupe) > 1 && preg_match('/^[a-z0-9 -]{1,10}$/i', $request->groupe); - - // définition (ou pas) du paramètre optionnel - if( $optionalGroupe ) $groupe = $request->groupe; - else $groupe = null; + $areSetParam = isset($request->etudiant) && isset($request->controle) && isset($request->note); // les arguments existent + $typeOkParam = $areSetParam && is_string($request->etudiant); // si c'est des strings + $nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && is_numeric($request->controle) && is_numeric($request->note); // des bon types + $etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->etudiant); // nom bon format - if( $enseignantCheck ){ // si tout les paramètres sont bons - $controle = DataBase::getInstance()->getNotesEnseignant($request->enseignant, $_SESSION['semestre_pair'], $_SESSION['annee'], $request->controle, $groupe); - - if( is_array($controle) ){ // si on a bien un tableau - $answer->controle = $controle; // on renvoie dans answer->controle - $answer->request = 'success'; // et on renvoie success - }else // sinon si c'est pas un tableau - $answer->request = $controle; // on retourne l'erreur + if( $etudiantCheck ){ // si tout les paramètres sont bons + $answer->request = DataBase::getInstance()->saisieNote($request->etudiant, $request->controle, $request->note); }else $answer->request = 'param_error'; diff --git a/manager/database.php b/manager/database.php index ecf9082..5e75e7d 100755 --- a/manager/database.php +++ b/manager/database.php @@ -686,136 +686,23 @@ class DataBase{ } + /******************************************/ + /*** saisie note étudiant à un contrôle ***/ + /******************************************/ + public function saisieNote($etudiant, $controle, $note){ + // on vérifie l'existence de l'étudiant et du contrôle, ainsi que la cohérence de la note (pas supérieure à la base) + if( !($etudiantUID=userRepo::UID($etudiant)) ) return 'unknown_user'; + if( !($controleInfo=controleRepo::info($controle)) ) return 'unknown_controle'; + if( $note > $controleInfo['base'] ) return 'unknown_note'; - - - /**************************************/ - /*** retourne les notes d'un module ***/ - /**************************************/ - public function getModuleNotes($etudiant, $module, $semestre, $annee){ - // on vérifie que le module, le semestre existent et que l'étudiant est inscrit à ce semestre - if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; - if( !($etudiantUID=userRepo::UID($etudiant, $semestreUID)) ) return 'unknown_user'; - if( !($moduleUID=moduleRepo::UID($module)) ) return 'unknown_module'; - - - /*** on cherche un module avec ce nom, en accord avec le semestre et l'étudiant ***/ - $getModuleUID = DataBase::getPDO()->prepare("SELECT m.id_module as id FROM module as m, appartenance as app, ue, mcc_ue, mcc_module as mcc_m ". - "WHERE app.id_etudiant = :etudiantUID ". - - "AND mcc_ue.id_ue = ue.id_ue ". - "AND mcc_ue.id_semestre = app.id_semestre ". - "AND mcc_ue.id_semestre = :semestreUID ". - - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". - - "AND mcc_m.id_module = m.id_module ". - - "AND m.nom = :module "); - $getModuleUID->execute(array( - ':module' => $module, - ':etudiantUID' => $etudiantUID, - ':semestreUID' => $semestreUID - )); - - // si on trouve, on le définit, sinon on retourne "unknown_group" - if( $moduleUID = $getModuleUID->fetch()['id'] ) - $moduleUID = (int) $moduleUID; + // saisie de la note + $rep = noteRepo::creer($etudiantUID, $controleInfo['id'], $controleInfo['id_semestre'], $note); + + if( $rep ) + return 'success'; else - return 'unknown_module'; + return 'error'; - - - $EtudiantInscritAuModule = false; // par défaut on dit que l'étudiant n'est pas inscrit à ce module - foreach(moduleRepo::forStudent($etudiant, $semestreUID) as $module ) // on récupère parmi les modules auquel est inscrit l'utilisateur - if( $module['id'] == $moduleUID ){ // s'il est inscrit au module donné - $EtudiantInscritAuModule = true; - break; - } - - // si l'étudiant n'a pas ce module dans ceux auxquels il est inscrit - if( !$EtudiantInscritAuModule ) return 'unknown_module'; - - - // si on a l'UID utilisateur & l'UID groupe => on récupère les modules - $getNoteList = DataBase::getPDO()->prepare("SELECT m.nom as module, m.libelle as modulelib, ctrl.intitule, note.valeur, ctrl.base, ctrl.coefficient ". - "FROM note, appartenance as app, semestre as s, module as m, mcc_ue, mcc_module as mcc_m, controle as ctrl ". - "WHERE note.id_appartenance = app.id_appartenance ". - "AND ctrl.id_controle = note.id_controle ". - "AND ctrl.id_mcc_module = mcc_m.id_mcc_module ". - - "AND mcc_ue.id_semestre = app.id_semestre ". - "AND mcc_ue.id_semestre = s.id_semestre ". - - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". - - "AND mcc_m.id_module = m.id_module ". - - "AND m.id_module = :moduleUID ". - "AND app.id_etudiant = :etudiantUID ". - "AND s.id_semestre = :semestreUID ". - "ORDER BY ctrl.date_publication ASC"); - $getNoteList->execute(array( - ':moduleUID' => $moduleUID, - ':etudiantUID' => $etudiantUID, - ':semestreUID' => $semestreUID - )); - - // on retourne la liste des notes et supprime les doublons à indices numériques - return DataBase::delNumeric( $getNoteList->fetchAll() ); - } - - - - - - /**********************************/ - /*** retourne les notes d'un UE ***/ - /**********************************/ - public function getUENotes($etudiant, $UE, $semestre, $annee){ - // on vérifie que l'UE, le semestre existent et que l'étudiant est inscrit à ce semestre - if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; - if( !($etudiantUID=userRepo::UID($etudiant, $semestreUID)) ) return 'unknown_user'; - if( !($UEUID=ueRepo::UID($UE)) ) return 'unknown_ue'; - - - $EtudiantInscritAlUE = false; // par défaut on dit que l'étudiant n'est pas inscrit à cet UE - foreach(ueRepo::forStudent($etudiant, $semestreUID) as $UE ) // on récupère parmi les UEs auquel est inscrit l'utilisateur - if( $UE['id'] == $UEUID ){ // s'il est inscrit à l'UE donnée - $EtudiantInscritAlUE = true; - break; - } - - // si l'étudiant n'a pas ce module dans ceux auxquels il est inscrit - if( !$EtudiantInscritAlUE ) return 'unknown_module'; - - // si on a l'UID utilisateur & l'UID UE => on récupère les notes - $getNoteList = DataBase::getPDO()->prepare("SELECT m.nom as module, m.libelle as modulelib, ctrl.intitule, note.valeur, ctrl.base, ctrl.coefficient ". - "FROM note, appartenance as app, semestre as s, module as m, ue, mcc_ue, mcc_module as mcc_m, controle as ctrl ". - "WHERE note.id_appartenance = app.id_appartenance ". - "AND ctrl.id_mcc_module = mcc_m.id_mcc_module ". - "AND ctrl.id_controle = note.id_controle ". - - "AND mcc_ue.id_ue = ue.id_ue ". - "AND mcc_ue.id_semestre = app.id_semestre ". - "AND mcc_ue.id_semestre = s.id_semestre ". - - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". - - "AND mcc_m.id_module = m.id_module ". - - "AND ue.id_ue = :UEUID ". - "AND app.id_etudiant = :etudiantUID ". - "AND s.id_semestre = :semestreUID ". - "ORDER BY m.nom, ctrl.date_publication ASC"); - $getNoteList->execute(array( - ':UEUID' => $UEUID, - ':etudiantUID' => $etudiantUID, - ':semestreUID' => $semestreUID - )); - - // on retourne la liste de notes et supprime les doublons à indices numériques - return DataBase::delNumeric( $getNoteList->fetchAll() ); } } diff --git a/manager/repo/note.php b/manager/repo/note.php index 363e614..9459916 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -15,47 +15,22 @@ class noteRepo extends DBAccess{ * @etudiant l'identifiant de l'étudiant recherché * @controle l'UID du contrôle * - * @return UID si l'utilisateur est dans la BDD, retourne son UID - * @return FALSE FAUX si l'utilisateur n'est pas présent dans la BDD + * @return UID l'UID de la note si elle existe pour ces critères + * @return FALSE FAUX si aucune note répondant à ces critères n'est pas présente dans la BDD * */ - public static function UID($identifiant, $semestre=null, $annee=null){ - if( $semestre == null && $annee == null ){ // on cherche un utilisateur avec cet identifiant - - /* [1] Cas où on cherche juste si l'utilisateur existe - =============================================================*/ - $getUtilisateurUID = DataBase::getPDO()->prepare("SELECT identifiant as id FROM utilisateur WHERE identifiant = :identifiant"); - $getUtilisateurUID->execute(array( ':identifiant' => $identifiant )); - - }elseif( $semestre != null ){ - - /* [2] Cas où on cherche si un étudiant est inscrit à un semestre - ==============================================================*/ - $getUtilisateurUID = DataBase::getPDO()->prepare("SELECT u.identifiant as id ". - "FROM utilisateur as u, appartenance as app ". - "WHERE u.identifiant = app.id_etudiant ". - "AND u.identifiant = :identifiant ". - "AND app.id_semestre = :semestre"); - $getUtilisateurUID->execute(array( ':identifiant' => $identifiant, ':semestre' => $semestre )); + public static function UID($etudiant, $controle){ + $getNoteUID = DataBase::getPDO()->prepare("SELECT note.id_note as id ". + "FROM appartenance as app, note, controle as ctrl ". + "WHERE app.id_appartenance = note.id_appartenance ". + "AND ctrl.id_controle = note.id_controle ". - }else{ - - /* [2] Cas où on cherche si un enseignant enseigne l'année donnée - ==============================================================*/ - $getUtilisateurUID = DataBase::getPDO()->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 = :identifiant"); - $getUtilisateurUID->execute(array( ':identifiant' => $identifiant, ':annee' => $annee )); - - } + "AND app.id_etudiant = :etudiant ". + "AND ctrl.id_controle = :controle"); + $getNoteUID->execute(array( ':etudiant' => $etudiant, ':controle' => $controle )); // on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID de l'utilisateur - return $getUtilisateurUID->fetch()['id']; + return $getNoteUID->fetch()['id']; } @@ -178,4 +153,56 @@ class noteRepo extends DBAccess{ } + + + /* CRÉATION/MODIFICATION D'UNE NOTE POUR UN ETUDIANT À UN CONTRÔLE + * + * @etudiant l'UID de l'étudiant en question + * @controle l'UID du contrôle en question + * @semestre l'UID du semestre en question + * @valeur valeur de la note à saisir + * + * + * @return noteUID l'UID de la note si elle a bien été créé + * @return cree FALSE si la note n'a pas été créé + * + */ + public static function creer($etudiant, $controle, $semestre, $valeur){ + /* [1] Premier cas : il faut créer la note de cet étudiant pour ce contrôle + ============================================================================*/ + if( !($noteUID=noteRepo::UID($etudiant, $controle)) ){ + + $creationNote = DataBase::getPDO()->prepare("INSERT INTO note(id_note, id_appartenance, id_controle, valeur) ". + "VALUES(". + "DEFAULT, ". + "(SELECT id_appartenance FROM appartenance WHERE id_etudiant = :etudiant AND id_semestre = :semestre), ". + ":controle, ". + ":valeur". + ")"); + $creationNote->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre, ':controle' => $controle, ':valeur' => $valeur )); + + + /* [2] Second cas : il faut modifier la note de cet étudiant + ============================================================================*/ + }else{ + + $modificationNote = DataBase::getPDO()->prepare("UPDATE note SET valeur = :valeur WHERE id_note = :noteUID"); + $modificationNote->execute(array( ':valeur' => $valeur, ':noteUID' => $noteUID )); + + } + + /* [3] On vérifie que la note a bien été créé pour cet étudiant et ce contrôle + =================================================================================*/ + if( !($noteUID=noteRepo::UID($etudiant, $controle)) ) return false; + + + /* [4] On vérifie que la note créée a bien la valeur qu'on a attribuée + =================================================================================*/ + $verificationValeur = DataBase::getPDO()->prepare("SELECT note.valeur FROM note WHERE id_note = :noteUID"); + $verificationValeur->execute(array( ':noteUID' => $noteUID )); + + return ( $verificationValeur->fetch()['valeur'] == $valeur ); + } + + } \ No newline at end of file diff --git a/page/_JS/career.js b/page/_JS/career.js index fc4e973..e6b1cc7 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -86,7 +86,7 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n level_1: 'saisieNote', etudiant: obj.userid, controle: obj.ctrlid, - note: obj.inputEl.value, + note: obj.inputEl.value.replace(',', '.'), // par précaution, on replace les virgules par des points pour le php (is_numeric) }; 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/career.php b/page/career.php index b65c503..5ce2ea0 100755 --- a/page/career.php +++ b/page/career.php @@ -315,7 +315,11 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif echo "Pas noté"; echo ""; - echo ""; + if( $user['note'] != null ) // s'il a déjà une note, on la met par défaut + echo ""; + else // sinon on laisse le champ vide + echo ""; + echo "
    "; echo ""; From 33fcc681e3444fa2a44cfc5e5cc1ede5506c7a75 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 15:42:12 +0100 Subject: [PATCH 10/39] Modification JS attribute pour navigation (section name='' data-title) au lien de 'title' --- css/global.css | 21 +++++++++++++++++++++ js/actionScript.js | 14 +++++++++----- page/career.php | 14 +++++++------- page/groups.php | 24 ++++++++++++------------ page/home.php | 4 ++-- page/modules.php | 12 ++++++------ page/settings.php | 2 +- 7 files changed, 58 insertions(+), 33 deletions(-) diff --git a/css/global.css b/css/global.css index 1dda044..dde0e75 100755 --- a/css/global.css +++ b/css/global.css @@ -17,8 +17,29 @@ span.stressed{ font-weight: bold; } +/*************************/ +/*** TITLE PERSONALISÉ ***/ +/*************************/ +#CONTAINER [data-info]:after{ + content: attr(data-info); + /* position */ + /*display: block;*/ display: none; + position: absolute; + margin-left: 4em; + padding: .3em; + /* border */ + border-radius: 3px; + /* background */ + background-color: #233342; + + /* foreground */ + color: #fff; +} + +/* INFO SURVOL */ +#CONTAINER [data-info]:hover:after{ display: block; } diff --git a/js/actionScript.js b/js/actionScript.js index b5bb95f..e8812a1 100755 --- a/js/actionScript.js +++ b/js/actionScript.js @@ -101,6 +101,10 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); */ function selectSection(section, clearParam){ + // si la section est une string, on essaie de trouver l'élémnent associé + if( typeof section == 'string' ) + section = document.querySelector('#MENU span[data-link='+section+']'); + // si @subSection est un de type
  • qui a la propriété "data-link" [ET] section pas déjà active if( section instanceof Element && section.tagName == 'SPAN' && section.dataset.hasOwnProperty('link') ){ @@ -114,16 +118,16 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); pageM.xhr[pageM.xhr.length-1].addEventListener('load', function(){ // on récupère les sections du document - var sections = document.querySelectorAll('#CONTAINER section[name]'); + var sections = document.querySelectorAll('#CONTAINER section[name][data-title]'); if( sections != null ){ // si on en trouve DOM.SUBSECTIONS.innerHTML = ""; // on efface le #SUBHEADER > nav <=> les liens des sous-parties for( var i = 0 ; i < sections.length ; i++ ) // pour chaque section, on créé un lien correspondant if( i == 0 ) // on active le premier - DOM.SUBSECTIONS.innerHTML += "" +sections[i].title+ ""; + DOM.SUBSECTIONS.innerHTML += "" +sections[i].getAttribute('data-title')+ ""; else // pas les autres - DOM.SUBSECTIONS.innerHTML += "" +sections[i].title+ ""; + DOM.SUBSECTIONS.innerHTML += "" +sections[i].getAttribute('data-title')+ ""; } // si dans pageManager.js, on a une sous-partie et qu'elle existe physiquement @@ -151,7 +155,7 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); } // permet de recharger la page courante - function reload(){ selectSection( document.querySelector('#MENU span[data-link='+pageM.page+']') ); } + function reload(){ selectSection(pageM.page); } /* activation au chargement en fonction de la page courante de pageManager.js */ var lastSection = document.querySelector('#MENU span[data-link='+pageM.page+']'); @@ -192,7 +196,7 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); remClass(lastSection, 'active'); // on la désactive // on active la page associée - var target = document.querySelector('#CONTAINER section[name='+subSection.dataset.sectname+']'); + var target = document.querySelector('#CONTAINER section[name='+subSection.dataset.sectname+'][data-title]'); if( target != null ) addClass(target, 'active'); diff --git a/page/career.php b/page/career.php index 5ce2ea0..102368f 100755 --- a/page/career.php +++ b/page/career.php @@ -64,7 +64,7 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un if( $answer->request == 'success' ){ // si on a bien récupéré les UE/notes //////////////////////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; foreach($answer->UEs as $UE){ // pour chaque UE echo ""; @@ -99,7 +99,7 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un //////////////////////////////////////////////////////////////////////////////// echo ''; }else - echo "
    Aucune note trouvée
    "; + echo "
    Aucune note trouvée
    "; } @@ -144,7 +144,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e if( $answer->request == 'success' ){ // si on a bien récupéré les UE/notes //////////////////////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; if( count($answer->UEs) > 0 ){ // si au moins un UE @@ -211,7 +211,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e //////////////////////////////////////////////////////////////////////////////// echo '
    '; }else - echo "
    Aucun contrôle trouvé
    "; + echo "
    Aucun contrôle trouvé
    "; @@ -233,7 +233,7 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif career_switch_level_1($request, $answer); if( $answer->request == 'success' ){ - echo "
    "; + echo "
    "; // bouton retour @@ -306,7 +306,7 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif foreach($answer->controle['userlist'] as $user){ // on affiche la liste des élèves avec leurs notes echo ""; - echo "".$user['identifiant'].""; + echo "".$user['identifiant'].""; echo "".$user['groupe'].""; if( $user['note'] != null ) // si on a une note @@ -320,7 +320,7 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif else // sinon on laisse le champ vide echo ""; - echo "
    "; + echo "
    "; echo ""; echo ""; diff --git a/page/groups.php b/page/groups.php index 67595d2..096ea54 100755 --- a/page/groups.php +++ b/page/groups.php @@ -58,7 +58,7 @@ if( permission('student') ){ // si connecté && utilisateur if( $answer->request == 'success' ){ // si pas d'erreur ////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; echo ""; echo ''; - echo ''; + foreach($answer->UEs as $UE){ // pour chaque UE + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL - if( count($controle['notes']) == 0 ) // si aucune note pour ce controle on affiche 'Pas de note' - echo ''; - else // si une note, alors on l'affiche - echo ''; - - echo ""; - echo ''; - echo ''; + echo '
    Identifiant'; @@ -99,7 +99,7 @@ if( permission('student') ){ // si connecté && utilisateur echo ''; //////////////////////////////////////////////////////// }else - echo "
    Aucun groupe trouvé
    "; + echo "
    Aucun groupe trouvé
    "; } @@ -128,7 +128,7 @@ if( false && permission('teacher') ){ // si connecté && prof if( $answer->request == 'success' ){ // si pas d'erreur ////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; /* select pour SEMESTRES */ $lastSemestre = null; @@ -205,7 +205,7 @@ if( false && permission('teacher') ){ // si connecté && prof echo '
    '; //////////////////////////////////////////////////////// }else - echo "
    Aucun groupe trouvé
    "; + echo "
    Aucun groupe trouvé
    "; } ?> @@ -252,7 +252,7 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; echo ""; echo ''; @@ -283,9 +283,9 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un echo ''; //////////////////////////////////////////////////////////////////////////////// }else - echo "
    Aucun groupe trouvé
    "; + echo "
    Aucun groupe trouvé
    "; }else - echo "
    Aucun groupe trouvé
    "; + echo "
    Aucun groupe trouvé
    "; echo '
    '; } ?> @@ -319,7 +319,7 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un if( $answer->request == 'success' && count($answer->grouplist) > 0 ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; /* select pour SEMESTRES */ $lastSemestre = null; @@ -395,7 +395,7 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un echo '
    '; //////////////////////////////////////////////////////////////////////////////// }else - echo "
    Aucun groupe trouvé
    "; + echo "
    Aucun groupe trouvé
    "; } ?> @@ -439,7 +439,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm if( $answer->request == 'success' && $answerPourListeGroupes->request == 'success' ){ // si pas d'erreur ////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; /* select pour SEMESTRES */ $lastSemestre = null; @@ -533,7 +533,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm echo '
    '; //////////////////////////////////////////////////////// }else - echo "
    Aucun groupe trouvé
    "; + echo "
    Aucun groupe trouvé
    "; } } ?> @@ -545,7 +545,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm /*** IMPORTATION FICHIER EXCEL ***/ /*********************************/ // if( permission('admin') ){ -// echo "
    "; +// echo "
    "; // //inclusion des classes de PHPExcel // include __ROOT__.DIRECTORY_SEPARATOR.join(DIRECTORY_SEPARATOR, array("src", "phpexcel", "Classes", "PHPExcel.php")); diff --git a/page/home.php b/page/home.php index 9bf38f0..c009445 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.

    @@ -37,7 +37,7 @@ require_once __ROOT__.'/manager/groups.php'; -
    +

    Notification 3

    Notification 2

    Notification 1

    diff --git a/page/modules.php b/page/modules.php index e246804..8808e62 100755 --- a/page/modules.php +++ b/page/modules.php @@ -35,7 +35,7 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; foreach($answer->UEs as $UE){ echo ""; @@ -58,7 +58,7 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un //////////////////////////////////////////////////////////////////////////////// echo ''; }else - echo "
    Aucun module trouvé
    "; + echo "
    Aucun module trouvé
    "; } ?> @@ -82,7 +82,7 @@ if( permission('teacher') ){ // si l'utilisateur est un prof if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; foreach($answer->UEs as $UE){ echo ""; @@ -105,7 +105,7 @@ if( permission('teacher') ){ // si l'utilisateur est un prof //////////////////////////////////////////////////////////////////////////////// echo ''; }else - echo "
    Aucun module trouvé
    "; + echo "
    Aucun module trouvé
    "; } ?> @@ -129,7 +129,7 @@ if( permission('admin') ){ // si l'utilisateur est un admin if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; foreach($answer->UEs as $UE){ echo ""; @@ -152,7 +152,7 @@ if( permission('admin') ){ // si l'utilisateur est un admin //////////////////////////////////////////////////////////////////////////////// echo ''; }else - echo "
    Aucun module trouvé
    "; + echo "
    Aucun module trouvé
    "; } ?> diff --git a/page/settings.php b/page/settings.php index 01d1b7f..84a6795 100755 --- a/page/settings.php +++ b/page/settings.php @@ -6,7 +6,7 @@ require_once __ROOT__.'/manager/security.php'; /*** PROFILE ***/ /***************/ if( connected() ){ // si l'utilisateur est connecté - echo "
    "; + echo "
    "; echo 'profil'; echo '
    '; From 59d1e454cea43d69546ea8855049ce37c289bb3f Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 16:12:48 +0100 Subject: [PATCH 11/39] =?UTF-8?q?M=C3=A0k=20xdoc/linecount?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xdoc/linecount | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/xdoc/linecount b/xdoc/linecount index 7fce13e..cc4c7e8 100755 --- a/xdoc/linecount +++ b/xdoc/linecount @@ -1,11 +1,11 @@ -| css | 954 | -| js | 822 | -| manager | 2011 | -| repo | 407 | -| page | 919 | -| _JS | 98 | +| css | 1036 | +| js | 866 | +| manager | 1774 | +| repo | 1248 | +| page | 1235 | +| _JS | 250 | | API.js | 77 | | API.php | 104 | | index.php | 141 | +-----------+-------+ -| TOTAL | 5533 | \ No newline at end of file +| TOTAL | 6731 | \ No newline at end of file From fb37b5aeeb1262c16c5a6881d46418bfea32deb3 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 18:12:49 +0100 Subject: [PATCH 12/39] Modification du select par partlist et filtrage PHP sur page/*.php plus efficace qu'au niveau de database et des managers --- css/global.css | 68 +++++++++++++-- js/pageManager.js | 21 +++-- manager/career.php | 51 +++++++++++ page/_JS/career.js | 55 +++++++++++- page/_JS/groups.js | 50 ++++++++--- page/career.php | 198 ++++++++++++++++++++++++++++++------------ page/groups.php | 212 ++++++++++++++++++++++++--------------------- 7 files changed, 470 insertions(+), 185 deletions(-) diff --git a/css/global.css b/css/global.css index dde0e75..282d102 100755 --- a/css/global.css +++ b/css/global.css @@ -15,7 +15,7 @@ tr:hover > td > span.unstressed{ color: #ddd; } span.stressed{ font-weight: bold; } - +thead.normal > tr > th{ font-weight: normal; } /*************************/ /*** TITLE PERSONALISÉ ***/ @@ -186,18 +186,18 @@ span.link:hover{ color: #000; } /*********************/ select{ /* position */ - margin: 2em 0; + margin: 2em; padding: 0 1em; /* border */ border-radius: 5px; - border: 1px solid #ddd; + border: 1px solid #2dcc70; /* background */ background-color: #fff; /* foreground */ - color: #233342; + color: #2dcc70; /* select */ -webkit-appearance:none; @@ -216,7 +216,7 @@ select > option{ background-color: #fff; /* foreground */ - color: #233342; + color: #555; text-indent: 1em; } @@ -269,3 +269,61 @@ tr:hover td select.active + .valider_action{ background-image: url(../src/valida /* bouton validation */ input.saisie_note.active + .valider_action{ display: inline-block; background-image: url(../src/validate.svg); } tr:hover td input.saisie_note.active + .valider_action{ background-image: url(../src/validate@hover.svg); } + + + + +/******************************/ +/*** SELECTIONS DES PARTIES ***/ +/******************************/ +#CONTAINER > section > .partlist{ + /* position */ + display: table; + margin: 2em; + + /* border */ + border-spacing: 0; + +} + +#CONTAINER > section > .partlist td{ + /* position */ + padding: .7em 2em; + + /* border */ + border: 1px solid #2dcc70; + border-right: 0; + + /* background */ + background-color: #fff; + + /* foreground */ + color: #2dcc70; + + /* extra */ + cursor: pointer; + + /* animation */ + transition: .2s ease-in-out; + -moz-transition: .2s ease-in-out; + -webkit-transition: .2s ease-in-out; + -ms-transition: .2s ease-in-out; + -o-transition: .2s ease-in-out; +} + +/* @radius */ +#CONTAINER > section > .partlist td:first-child{ + border-radius: 5px 0 0 5px; +} + +/* @border + @radius */ +#CONTAINER > section > .partlist td:last-child{ + border-radius: 0 5px 5px 0; + border-right: 1px solid #2dcc70; +} + + +#CONTAINER > section > .partlist td.active{ + background-color: #2dcc70; + color: #fff; +} \ No newline at end of file diff --git a/js/pageManager.js b/js/pageManager.js index eff3a10..45163bc 100755 --- a/js/pageManager.js +++ b/js/pageManager.js @@ -22,23 +22,22 @@ pageManager.prototype = { ajax: function(pLink, pHandler, pMethod, pForm){ // on efface les requêtes qui sont terminées et on push une nouvelle for( var i = 0 ; i < this.xhr.length ; i++ ){ - if( this.xhr[i].readyState == 4 ) // si terminée + // if( this.xhr[i].readyState == 4 ) // si terminée this.xhr = this.xhr.slice(0,i-1).concat(this.xhr.slice(i,this.xhr.length-1)); // suppression entrée } - this.xhr.push(true); - i = this.xhr.length-1; + var index; if(window.XMLHttpRequest) // IE7+, Firefox, Chrome, Opera, Safari - this.xhr[i] = new XMLHttpRequest(); + index = this.xhr.push( new XMLHttpRequest() ) -1; else // IE5, IE6 - this.xhr[i] = new ActiveXObject('Microsoft.XMLHttpRequest'); + index = this.xhr.push( new ActiveXObject('Microsoft.XMLHttpRequest') ) -1; var ptrPageManager = this; - this.xhr[i].onreadystatechange = function(){ - if( ptrPageManager.xhr[i].readyState == 4 ) // si la requête est terminée - if( [0,200].indexOf(ptrPageManager.xhr[i].status) > -1 ) // si fichier existe et reçu - pHandler(ptrPageManager.xhr[i].responseText); + this.xhr[index].onreadystatechange = function(){ + if( ptrPageManager.xhr[index].readyState == 4 ) // si la requête est terminée + if( [0,200].indexOf(ptrPageManager.xhr[index].status) > -1 ) // si fichier existe et reçu + pHandler(ptrPageManager.xhr[index].responseText); else // si code d'erreur retourne null pHandler(); } @@ -49,8 +48,8 @@ pageManager.prototype = { // gestion du formulaire si la méthode est POST var form = ( method == 'POST' && typeof pForm == 'object' && pForm instanceof FormData ) ? pForm : null; - this.xhr[i].open( method, pLink, true); - this.xhr[i].send( form ); + this.xhr[index].open( method, pLink, true ); + this.xhr[index].send( form ); }, /***************************************************** [APPLICATION] Ajax() ******************************************************/ // EXEMPLES DE FONCTIONS POUR pHandler // diff --git a/manager/career.php b/manager/career.php index 30c60dd..759d2ff 100755 --- a/manager/career.php +++ b/manager/career.php @@ -122,6 +122,27 @@ require_once __ROOT__.'/manager/database.php'; break; + /**********************************************/ + /* informations relatives au dossier étudiant */ + /**********************************************/ + case 'studentcase': if( permission('teacher') ){ + + $areSetParam = isset($request->etudiant) && isset($request->controle) && isset($request->note); // les arguments existent + $typeOkParam = $areSetParam && is_string($request->etudiant); // si c'est des strings + $nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && is_numeric($request->controle) && is_numeric($request->note); // des bon types + $etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->etudiant); // nom bon format + + if( $etudiantCheck ){ // si tout les paramètres sont bons + $answer->request = DataBase::getInstance()->saisieNote($request->etudiant, $request->controle, $request->note); + }else + $answer->request = 'param_error'; + + }else + $answer->request = 'permission_error'; + + break; + + /****************************************************/ /* saisie d'une note pour un étudiant à un contrôle */ @@ -145,6 +166,36 @@ require_once __ROOT__.'/manager/database.php'; + +/* _ ____ ___ _____ _____ _ _ ____ _____ ____ +/* / \ | _ \_ _| ___| ___| | | / ___|| ____| _ \ +/* / _ \ | | | | || |_ | |_ | | | \___ \| _| | |_) | +/* / ___ \ | |_| | || _| | _| | |_| |___) | |___| _ < +/* /_/ \_\ |____/___|_| |_| \___/|____/|_____|_| \_\ +/* + + /****************************************************/ + /* saisie d'une note pour un groupe à un contrôle */ + /****************************************************/ + case 'saisieNoteGroupe': if( permission('teacher') ){ + + $areSetParam = isset($request->etudiant) && isset($request->controle) && isset($request->note); // les arguments existent + $typeOkParam = $areSetParam && is_string($request->etudiant); // si c'est des strings + $nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && is_numeric($request->controle) && is_numeric($request->note); // des bon types + $etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->etudiant); // nom bon format + + if( $etudiantCheck ){ // si tout les paramètres sont bons + $answer->request = DataBase::getInstance()->saisieNoteGroupe($request->etudiant, $request->controle, $request->note); + }else + $answer->request = 'param_error'; + + }else + $answer->request = 'permission_error'; + break; + + + + /***********/ /* DEFAULT */ /***********/ diff --git a/page/_JS/career.js b/page/_JS/career.js index e6b1cc7..96b10cc 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -1,5 +1,37 @@ + "; - foreach($answer->UEs as $UE){ // pour chaque UE - echo ""; - echo ""; - echo ''; - echo "'; - echo ''; + echo "
    ".$UE['nom'].' - '.$UE['libelle'].'
    "; + if( $ueOpt == null ) echo ""; + else echo ""; - echo '
    TousTous
    '; - foreach($UE['modules'] as $module){ // pour chaque module - echo ''; - echo ''; + foreach($answer->UEs as $UE) + if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
    '.$module['nom'].' - '.$module['libelle'].'
    ".$UE['nom'].'".$UE['nom'].'
    "; - foreach($module['controles'] as $controle){ // pour chaque contrôle - echo '
    '.$controle['intitule'].'Pas de note'.number_format($controle['notes'][0]['valeur'], 2).' / '.$controle['base'].'".$module['nom']." - ".$module['libelle']."Coefficient '.number_format($controle['coefficient'], 2).'
    '; + foreach($UE['modules'] as $module){ // pour chaque module + echo ''; + echo ''; + + foreach($module['controles'] as $controle){ // pour chaque contrôle + echo ''; + echo ''; + + if( count($controle['notes']) == 0 ) // si aucune note pour ce controle on affiche 'Pas de note' + echo ''; + else // si une note, alors on l'affiche + echo ''; + + echo ""; + echo ''; + echo ''; + } + echo ''; } - echo ''; + echo '
    '.$UE['nom'].' - '.$module['nom'].' - '.$module['libelle'].'
    '.$controle['intitule'].'Pas de note'.number_format($controle['notes'][0]['valeur'], 2).' / '.$controle['base'].'".$module['nom']." - ".$module['libelle']."Coefficient '.number_format($controle['coefficient'], 2).'
    '; + } - echo ''; } //////////////////////////////////////////////////////////////////////////////// @@ -158,15 +168,14 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo ""; - - if( $ueOpt == null ) echo ""; - else echo ""; - - foreach($answer->UEs as $UE) - if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - echo "'; + if( $ueOpt == null ) echo ""; + else echo ""; + + foreach($answer->UEs as $UE) + if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; echo "
    TousTous".$UE['nom'].'".$UE['nom'].'TousTous".$UE['nom'].'".$UE['nom'].'
    "; @@ -175,7 +184,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e foreach($answer->UEs as $UE){ // pour chaque UE - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // si on affiche l'UE en fonction du paramètre passé par l'URL + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL if( count($UE['modules']) > 0 ){ // s'il y a au moins un module From 76f17132bd7b140b462ad73c8991177e84db56c0 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 19:10:33 +0100 Subject: [PATCH 14/39] Suppression doublons semestres --- manager/database.php | 2 +- manager/modules.php | 3 +- manager/repo/ue.php | 13 ++-- manager/security.php | 10 ++- page/_JS/career.js | 6 +- page/_JS/modules.js | 30 ++++++++ page/modules.php | 173 ++++++++++++++++++++++++++++++++----------- 7 files changed, 180 insertions(+), 57 deletions(-) create mode 100644 page/_JS/modules.js diff --git a/manager/database.php b/manager/database.php index 5e75e7d..214d6f1 100755 --- a/manager/database.php +++ b/manager/database.php @@ -534,7 +534,7 @@ class DataBase{ /***************************************************/ /*** retourne les modules des semestres en cours ***/ /***************************************************/ - public function getModulesByUEByYear($semestre_pair, $annee){ + public function getModulesByUEByYear($semestre_pair, $annee){ // ***OPTIONNEL*** semestre_pair // on récupère la liste des UEs $UEList = ueRepo::forYear($semestre_pair, $annee); diff --git a/manager/modules.php b/manager/modules.php index 1196e04..fb45ff5 100755 --- a/manager/modules.php +++ b/manager/modules.php @@ -112,7 +112,8 @@ require_once __ROOT__.'/manager/database.php'; $anneeCheck = $nEmptyParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons - $UEList = DataBase::getInstance()->getModulesByUEByYear($_SESSION['semestre_pair'], $request->annee); + $UEList = DataBase::getInstance()->getModulesByUEByYear(null, $request->annee); + // $UEList = DataBase::getInstance()->getModulesByUEByYear($_SESSION['semestre_pair'], $request->annee); // STRUCTURE // tableau d'UES contenant un tableau de MODULES diff --git a/manager/repo/ue.php b/manager/repo/ue.php index 8a35824..3976063 100755 --- a/manager/repo/ue.php +++ b/manager/repo/ue.php @@ -57,7 +57,7 @@ class ueRepo extends DBAccess{ */ public static function forStudent($etudiant, $semestre){ // on récupère les modules - $getUesForStudent = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.annee, ue.nom, ue.libelle ". + $getUesForStudent = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". "FROM appartenance as app, semestre as s, mcc_ue, ue ". "WHERE app.id_semestre = s.id_semestre ". "AND mcc_ue.id_semestre = s.id_semestre ". @@ -84,7 +84,7 @@ class ueRepo extends DBAccess{ */ public static function forTeacher($enseignant, $semestre_pair, $annee){ // on récupère les modules - $getUesForTeacher = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.annee, ue.nom, ue.libelle ". + $getUesForTeacher = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.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 ens.correcteur = 1 ". // si l'enseignant est correcteur uniquement @@ -114,16 +114,19 @@ class ueRepo extends DBAccess{ * */ public static function forYear($semestre_pair, $annee){ + $semestrePair0 = '0'; $semestrePair1 = '1'; + if( is_bool($semestre_pair) ){ $semestrePair0 = $semestre_pair; $semestrePair1 = $semestre_pair; } + // on récupère les modules - $getUEsForYear = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.annee, ue.nom, ue.libelle ". + $getUEsForYear = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". "FROM ue, mcc_ue, semestre as s ". "WHERE ue.id_ue = mcc_ue.id_ue ". "AND mcc_ue.id_semestre = s.id_semestre ". - "AND s.rang % 2 = :semestre_pair ". + "AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) ". "AND s.annee = :annee ". "ORDER BY s.rang, ue.nom, ue.libelle"); - $getUEsForYear->execute(array( ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + $getUEsForYear->execute(array( ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee )); return DataBase::delNumeric( $getUEsForYear->fetchAll() ); } diff --git a/manager/security.php b/manager/security.php index 62f96ec..7cd2eb6 100755 --- a/manager/security.php +++ b/manager/security.php @@ -54,9 +54,15 @@ error_reporting(-1); } - debug(); - + function distinctArray($inArray){ + $outArray = array(); + foreach($inArray as $value) // pour chaque élément du tableau d'entrée, on l'ajoute uniquement si aucune entrée du tableau de sortie n'a la même valeur + if( !in_array($value, $outArray) ) + array_push($outArray, $value); + + return $outArray; + } function secure_sha1($text){ diff --git a/page/_JS/career.js b/page/_JS/career.js index 96b10cc..d3e9b5a 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -2,9 +2,9 @@ -/**************************************/ -/* GESTION DE L'AFFINAGE PAR SEMESTRE */ -/**************************************/ +/********************************/ +/* GESTION DE L'AFFINAGE PAR UE */ +/********************************/ var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE]"); for( var i = 0 ; i < partList.length ; i++ ){ diff --git a/page/_JS/modules.js b/page/_JS/modules.js new file mode 100644 index 0000000..55eb1f9 --- /dev/null +++ b/page/_JS/modules.js @@ -0,0 +1,30 @@ + \ No newline at end of file diff --git a/page/modules.php b/page/modules.php index 8808e62..038dbfe 100755 --- a/page/modules.php +++ b/page/modules.php @@ -3,6 +3,23 @@ require_once __ROOT__.'/manager/security.php'; require_once __ROOT__.'/manager/groups.php'; require_once __ROOT__.'/manager/modules.php'; + +/*** GESTION DES PARAMETRES OPTIONNELS ***/ + + // on initialise les paramètres optionnels + $ueOpt = null; + + // on cherche dans toutes les variables _get si on trouve des paramètres + foreach($_POST as $k=>$v){ + + if( preg_match('/^u:(.+)$/', $k, $m) ) // s:nomSemestre + $ueOpt = $m[1]; + + } + + $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; + + /**************************************** * * * SECTION "MODULES" * @@ -37,23 +54,39 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un //////////////////////////////////////////////////////////////////////////////// echo "
    "; + echo ""; + if( $ueOpt == null ) echo ""; + else echo ""; + + foreach($answer->UEs as $UE) + if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
    TousTous".$UE['nom'].'".$UE['nom'].'
    "; + foreach($answer->UEs as $UE){ - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ - echo ''; - echo '
    '.$UE['nom'].' - '.$UE['libelle'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].'
    '; + echo ""; + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + foreach($UE['modules'] as $MODULE){ + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo '
    '.$UE['semestre'].' - '.$UE['nom'].' - '.$UE['libelle'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].'
    '; + + } } //////////////////////////////////////////////////////////////////////////////// echo '
    '; @@ -84,23 +117,41 @@ if( permission('teacher') ){ // si l'utilisateur est un prof //////////////////////////////////////////////////////////////////////////////// echo "
    "; + + echo ""; + if( $ueOpt == null ) echo ""; + else echo ""; + + foreach($answer->UEs as $UE) + if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
    TousTous".$UE['nom'].'".$UE['nom'].'
    "; + + foreach($answer->UEs as $UE){ - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ - echo ''; - echo '
    '.$UE['nom'].' - '.$UE['libelle'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].'
    '; + echo ""; + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + foreach($UE['modules'] as $MODULE){ + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo '
    '.$UE['semestre'].' - '.$UE['nom'].' - '.$UE['libelle'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].'
    '; + + } } //////////////////////////////////////////////////////////////////////////////// echo '
    '; @@ -131,23 +182,55 @@ if( permission('admin') ){ // si l'utilisateur est un admin //////////////////////////////////////////////////////////////////////////////// echo "
    "; + + + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + // $ListeNomsSemestres = array(); + // foreach($answer->UEs as $UE) + // array_push( $ListeNomsSemestres, $UE['semestre'] ); + // $ListeNomsSemestres = array_unique($ListeNomsSemestres); + + /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ + $ListeNomsUE = array(); + foreach($answer->UEs as $UE) + array_push( $ListeNomsUE, $UE['nom'] ); + $ListeNomsUE = array_unique($ListeNomsUE); + + + echo ""; + if( $ueOpt == null ) echo ""; + else echo ""; + + foreach($ListeNomsUE as $NomUE) + if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
    TousTous".$NomUE.'".$NomUE.'
    "; + + foreach($answer->UEs as $UE){ - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ - echo ''; - echo '
    '.$UE['nom'].' - '.$UE['libelle'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].'
    '; + echo ""; + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + foreach($UE['modules'] as $MODULE){ + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo '
    '.$UE['semestre'].' - '.$UE['nom'].' - '.$UE['libelle'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].'
    '; + + } } //////////////////////////////////////////////////////////////////////////////// echo '
    '; From 27cb3b7c1386765abe7718692169a20c6278bb67 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 21:24:15 +0100 Subject: [PATCH 15/39] Modification de .valider_action, devenu plus explicite (textuel & non simplement symbolique) --- css/global.css | 35 +++++++++++++++++++++++++---------- page/career.php | 2 +- page/groups.php | 2 +- src/validate.svg | 4 ++-- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/css/global.css b/css/global.css index 282d102..35055ec 100755 --- a/css/global.css +++ b/css/global.css @@ -234,21 +234,40 @@ td select > option{ padding: 0; } position: absolute; margin-left: 2em; margin-top: -.2em; - width: 1.5em; height: 1.5em; + padding: 0 .7em 0 1.3em; + + + /* border */ + border-radius: 3px; + border: 1px solid #2dcc70; /* background */ - background: transparent center center no-repeat; - background-size: 90% auto; + background: transparent center left .2em no-repeat; + background-size: 1em auto; + + /* foreground */ + color: #2dcc70; + line-height: 1.5em; /* extra */ cursor: pointer; } -/* bouton validation */ -select.active + .valider_action{ display: inline-block; background-image: url(../src/validate.svg); } -tr:hover td select.active + .valider_action{ background-image: url(../src/validate@hover.svg); } +/* @active */ +input.active + .valider_action, +select.active + .valider_action{ + display: inline-block; + background-image: url(../src/validate.svg); +} +/* tr@hover */ +tr:hover td select.active + .valider_action, +tr:hover td input.active + .valider_action{ + border-color: #fff; + background-image: url(../src/validate@hover.svg); + color: #fff; +} /* saisie note */ .saisie_note{ @@ -266,10 +285,6 @@ tr:hover td select.active + .valider_action{ background-image: url(../src/valida .saisie_note:focus{ border-color: #999; } -/* bouton validation */ -input.saisie_note.active + .valider_action{ display: inline-block; background-image: url(../src/validate.svg); } -tr:hover td input.saisie_note.active + .valider_action{ background-image: url(../src/validate@hover.svg); } - diff --git a/page/career.php b/page/career.php index 51e4b60..4ff6a13 100755 --- a/page/career.php +++ b/page/career.php @@ -352,7 +352,7 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif else // sinon on laisse le champ vide echo ""; - echo "
    "; + echo "
    enregistrer
    "; echo ""; echo ""; diff --git a/page/groups.php b/page/groups.php index 39cbbea..cff6cd9 100755 --- a/page/groups.php +++ b/page/groups.php @@ -535,7 +535,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm else // s'il s'agit d'un autre groupe, c'est normal echo ""; echo ''; - echo "
    "; + echo "
    déplacer
    "; echo ''; echo ''; } diff --git a/src/validate.svg b/src/validate.svg index a6082aa..fedf377 100755 --- a/src/validate.svg +++ b/src/validate.svg @@ -37,7 +37,7 @@ fit-margin-right="0" fit-margin-bottom="0" inkscape:zoom="1.3244222" - inkscape:cx="410.94807" + inkscape:cx="264.4691" inkscape:cy="117.90095" inkscape:window-x="0" inkscape:window-y="24" @@ -55,5 +55,5 @@ transform="translate(-17.600012,-17.6)" /> \ No newline at end of file From 9c4000bb257ddbd1ca3f76b42a38fe481101c93f Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 21:27:29 +0100 Subject: [PATCH 16/39] =?UTF-8?q?Possibilit=C3=A9=20de=20d=C3=A9sactiver?= =?UTF-8?q?=20l'animation=20de=20tr@hover=20avec=20la=20"class"=20du=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 20 ++++++++++---------- index.php | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/css/global.css b/css/global.css index 35055ec..d16eb59 100755 --- a/css/global.css +++ b/css/global.css @@ -11,7 +11,7 @@ /* .unstressed */ span.unstressed{ color: #aaa; } -tr:hover > td > span.unstressed{ color: #ddd; } +body.trHoverActivated tr:hover > td > span.unstressed{ color: #ddd; } span.stressed{ font-weight: bold; } @@ -117,18 +117,18 @@ table.basic table.basic tr > td:first-child { border-left: 10px solid #9e9e9 /* @hover */ -table.basic tr:hover > td{ color: #fff; } +body.trHoverActivated table.basic tr:hover > td{ color: #fff; } -table.basic:nth-child(4n+0) tr:hover > td { background-color: #e63c54; } -table.basic:nth-child(4n+1) tr:hover > td { background-color: #3c73e6; } -table.basic:nth-child(4n+2) tr:hover > td { background-color: #e6983c; } -table.basic:nth-child(4n+3) tr:hover > td { background-color: #2dcc70; } +body.trHoverActivated table.basic:nth-child(4n+0) tr:hover > td { background-color: #e63c54; } +body.trHoverActivated table.basic:nth-child(4n+1) tr:hover > td { background-color: #3c73e6; } +body.trHoverActivated table.basic:nth-child(4n+2) tr:hover > td { background-color: #e6983c; } +body.trHoverActivated table.basic:nth-child(4n+3) tr:hover > td { background-color: #2dcc70; } -table.basic table.basic tr:hover > td { background-color: #9e9e9e; } +body.trHoverActivated table.basic table.basic tr:hover > td { background-color: #9e9e9e; } /* .noborder */ table.basic tr.noborder > td:first-child{ border-left: 1px solid transparent; } -table.basic tr:hover td{ background-color: #fff; } +body.trHoverActivated table.basic tr:hover td{ background-color: #fff; } /* .transparentbg */ table.basic tr.transparentbg > td{ background-color: transparent; } @@ -262,8 +262,8 @@ select.active + .valider_action{ } /* tr@hover */ -tr:hover td select.active + .valider_action, -tr:hover td input.active + .valider_action{ +body.trHoverActivated tr:hover td select.active + .valider_action, +body.trHoverActivated tr:hover td input.active + .valider_action{ border-color: #fff; background-image: url(../src/validate@hover.svg); color: #fff; diff --git a/index.php b/index.php index 32aeb28..3aedd8f 100755 --- a/index.php +++ b/index.php @@ -33,7 +33,7 @@ $notifNotifNum = 5; - + Date: Sun, 15 Nov 2015 22:36:35 +0100 Subject: [PATCH 17/39] =?UTF-8?q?Possibilit=C3=A9=20de=20saisir=20les=20no?= =?UTF-8?q?tes=20par=20groupe=20(pr=C3=A9cisemment:=20plusieurs=20notes=20?= =?UTF-8?q?dans=20un=20groupe)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 20 +++++++++++---- js/actionScript.js | 9 +++++++ page/_JS/career.js | 64 +++++++++++++++++++++++++++++++++++++++++++--- page/_JS/groups.js | 2 +- page/career.php | 9 ++++++- page/groups.php | 2 +- page/modules.php | 9 +------ 7 files changed, 95 insertions(+), 20 deletions(-) diff --git a/css/global.css b/css/global.css index d16eb59..fe219f9 100755 --- a/css/global.css +++ b/css/global.css @@ -228,7 +228,7 @@ td select > option{ padding: 0; } -.valider_action{ +.confirm{ /* position */ /*display: inline-block;*/ display: none; position: absolute; @@ -254,16 +254,26 @@ td select > option{ padding: 0; } cursor: pointer; } + + +/* @all */ +.confirm.all{ margin-top: -.7em; } + + + /* @active */ -input.active + .valider_action, -select.active + .valider_action{ +input.active + .confirm, +select.active + .confirm, +.confirm.active{ display: inline-block; background-image: url(../src/validate.svg); } + /* tr@hover */ -body.trHoverActivated tr:hover td select.active + .valider_action, -body.trHoverActivated tr:hover td input.active + .valider_action{ +body.trHoverActivated tr:hover td select.active + .confirm, +body.trHoverActivated tr:hover td input.active + .confirm, +body.trHoverActivated tr:hover td .confirm.active{ border-color: #fff; background-image: url(../src/validate@hover.svg); color: #fff; diff --git a/js/actionScript.js b/js/actionScript.js index e8812a1..448008a 100755 --- a/js/actionScript.js +++ b/js/actionScript.js @@ -64,6 +64,15 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); /* initialisation du gestionnaire */ pageM.setPage(null, 'page', DOM.CONTAINER, ['home', 'groups', 'modules', 'career', 'settings'] ); + + /* ON REMPLACE "F5" par le rechargement manuel */ + window.addEventListener('keydown', function(e){ + if( e.keyCode == 116 ){ // F5 + e.preventDefault(); + reload(); + } + }, false); + /* [b] API.js diff --git a/page/_JS/career.js b/page/_JS/career.js index d3e9b5a..1bd63b7 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -88,12 +88,19 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') ){ / /* GESTION DE LA SAISIE DE NOTES */ +var nombreModification = 0; // contiendra le nombre de notes saisies + if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != null ){ // si c'set l'admin /* SAISIE A L'AIDE DES */ var saisieInput = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table tr td input[type=number][data-ctrl].saisie_note'); var saisieObj = []; + /* BOUTON "TOUT ENREGISTRER" */ + var toutEnregistrerBtn = document.querySelector("#CONTAINER section[name=controlesenseignants] table tr td:last-child .confirm.all"); + + + // on référencie tous les input dans un objet for( var i = 0 ; i < saisieInput.length ; i++ ){ @@ -101,7 +108,7 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n saisieObj[i] = { inputEl: saisieInput[i], // le en question - initval: saisieInput[i].value, // la valeur initiale du + initval: parseFloat( saisieInput[i].value.replace(',', '.') ), // la valeur initiale du button: saisieInput[i].parentNode.children[1], // le bouton de validation pour ce ctrlid: saisieInput[i].dataset.ctrl, // on récupère l'id du contrôle userid: saisieInput[i].parentNode.parentNode.children[0].children[0].innerHTML // l'identifiant de l'utilisateur associé à ce @@ -112,20 +119,37 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n // on récupère le rang dans la liste et qu'il s'agit du même élément if( e.target.dataset.hasOwnProperty('i') && saisieObj[e.target.dataset.i].inputEl == e.target){ var obj = saisieObj[e.target.dataset.i]; + var isActive = /active/.test(obj.inputEl.className); // VRAI si l'élément est actif - if( obj.initval != obj.inputEl.value ) // si c'est une nouvelle valeur (nouveau groupe), on active le validateur (bouton) + + // si c'est une nouvelle valeur (nouvelle note), on active le validateur (bouton) + if( obj.initval != parseFloat(obj.inputEl.value.replace(',', '.')) ) addClass( obj.inputEl, 'active' ); else remClass( obj.inputEl, 'active' ); + + + // si changement du caractère "actif", et plus particulièrement + if( /active/.test(obj.inputEl.className) != isActive ) + if( !isActive ) // si activation + nombreModification += 1; + else + nombreModification -= 1; + + // si plus d'une modification, on affiche le bouton 'tout enregistrer' + if( nombreModification > 1 ) + addClass( toutEnregistrerBtn, 'active' ); + else + remClass( toutEnregistrerBtn, 'active' ); } }, false); - // on créé l'évènement de confirmation du déplacement + // on créé l'évènement de confirmation de la saisie saisieObj[i].button.addEventListener('click', function(e){ // s'il s'agit bien d'un bouton de validation, que le associé a data-i existante et que ça match correctement - if( /^valider_action/.test(e.target.className) && e.target.parentNode.children[0].dataset.hasOwnProperty('i') && saisieObj[e.target.parentNode.children[0].dataset.i].button == e.target ){ + if( /confirm/.test(e.target.className) && e.target.parentNode.children[0].dataset.hasOwnProperty('i') && saisieObj[e.target.parentNode.children[0].dataset.i].button == e.target ){ var obj = saisieObj[e.target.parentNode.children[0].dataset.i]; var request = { // on définit la requête pour API @@ -143,6 +167,38 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n } }, false); + + + // on créé l'évènement de confirmation de la saisie de TOUTES les notes saisies ou modifiées + toutEnregistrerBtn.addEventListener('click', function(e){ + + var nbRequest = 0; + var nbSuccess = 0; + + // on sélectionne toutes les valeurs contenues dans les lignes actives + for( var i = 0 ; i < saisieObj.length ; i++ ){ if( /active/.test(saisieObj[i].inputEl.className) ){ + + nbRequest += 1; + + var request = { // on définit la requête pour API + level_0: 'career', + level_1: 'saisieNote', + etudiant: saisieObj[i].userid, + controle: saisieObj[i].ctrlid, + note: saisieObj[i].inputEl.value.replace(',', '.'), // par précaution, on replace les virgules par des points pour le php (is_numeric) + }; + + API.send(request, function(response){ // on gère la réponse de API + if( response.request == 'success' ) nbSuccess += 1; // si on a une réponse positive, on incrémente le nombre de succès + + // si tout est validé, on recharge la page + if( nbSuccess == nbRequest) reload(); + }); + + }} + + }, false); + } diff --git a/page/_JS/groups.js b/page/_JS/groups.js index 161bccc..3e65502 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -74,7 +74,7 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / // on créé l'évènement de confirmation du déplacement deplacementObj[i].button.addEventListener('click', function(e){ // s'il s'agit bien d'un bouton de validation, que le "; - echo "
    enregistrer
    "; + echo "
    enregistrer
    "; echo ""; echo ""; } + echo ""; + echo ""; + echo ""; + echo ""; + echo "
    tout enregistrer
    "; + echo ""; + } echo ''; diff --git a/page/groups.php b/page/groups.php index cff6cd9..87f5532 100755 --- a/page/groups.php +++ b/page/groups.php @@ -535,7 +535,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm else // s'il s'agit d'un autre groupe, c'est normal echo ""; echo ''; - echo "
    déplacer
    "; + echo "
    déplacer
    "; echo ''; echo ''; } diff --git a/page/modules.php b/page/modules.php index 038dbfe..f786a7b 100755 --- a/page/modules.php +++ b/page/modules.php @@ -181,14 +181,7 @@ if( permission('admin') ){ // si l'utilisateur est un admin if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// echo "
    "; - - - - /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ - // $ListeNomsSemestres = array(); - // foreach($answer->UEs as $UE) - // array_push( $ListeNomsSemestres, $UE['semestre'] ); - // $ListeNomsSemestres = array_unique($ListeNomsSemestres); + /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ $ListeNomsUE = array(); From 0f779dc42af8274747c5c7f4a1f3d3cbc184e0bb Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 15 Nov 2015 23:29:39 +0100 Subject: [PATCH 18/39] =?UTF-8?q?Affichage=20de=20TOUS=20les=20groupes=20i?= =?UTF-8?q?nscrit=20=C3=A0=20un=20contr=C3=B4le=20et=20plus=20seulement=20?= =?UTF-8?q?ceux=20qui=20ont=20au=20moins=20une=20note?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/actionScript.js | 12 +++++------ manager/database.php | 13 ++++++++++-- manager/repo/controle.php | 2 -- manager/repo/group.php | 29 ++++++++++++++++++++++++++ manager/repo/note.php | 34 +++++++++++++++++++++++++++++++ page/career.php | 43 ++++++++++++++++----------------------- 6 files changed, 98 insertions(+), 35 deletions(-) diff --git a/js/actionScript.js b/js/actionScript.js index 448008a..358d9b6 100755 --- a/js/actionScript.js +++ b/js/actionScript.js @@ -66,12 +66,12 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); pageM.setPage(null, 'page', DOM.CONTAINER, ['home', 'groups', 'modules', 'career', 'settings'] ); /* ON REMPLACE "F5" par le rechargement manuel */ - window.addEventListener('keydown', function(e){ - if( e.keyCode == 116 ){ // F5 - e.preventDefault(); - reload(); - } - }, false); + // window.addEventListener('keydown', function(e){ + // if( e.keyCode == 116 ){ // F5 + // e.preventDefault(); + // reload(); + // } + // }, false); diff --git a/manager/database.php b/manager/database.php index 214d6f1..cfd5f53 100755 --- a/manager/database.php +++ b/manager/database.php @@ -642,7 +642,7 @@ class DataBase{ $UEList[$iter_ue]['modules'][$iter_mod]['controles'] = controleRepo::forTeacher($enseignantUID, $UEList[$iter_ue]['modules'][$iter_mod]['id'], $UEList[$iter_ue]['id_semestre']); foreach($UEList[$iter_ue]['modules'][$iter_mod]['controles'] as $iter_ct=>$c) - $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['notes'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['grouplist'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); } } @@ -679,7 +679,16 @@ class DataBase{ =======================================*/ }else{ // on ajoute au controle['notes'] la liste des notes des groupes - $controlObj['grouplist'] = noteRepo::forTeacher($controle, null); + // $controlObj['grouplist'] = noteRepo::forTeacher($controle, null); + + $controlObj['grouplist'] = groupRepo::forControle($controle); + + foreach($controlObj['grouplist'] as $iter=>$grpe) + if( $controleNotes = noteRepo::forGroupe($controle, $grpe['id_groupe']) ) // si le groupe a des notes, on les ajoutes + $controlObj['grouplist'][$iter] = array_merge($controlObj['grouplist'][$iter], $controleNotes); + + // var_dump( $controlObj ); + debug(); } return $controlObj; diff --git a/manager/repo/controle.php b/manager/repo/controle.php index 277b947..b68a009 100755 --- a/manager/repo/controle.php +++ b/manager/repo/controle.php @@ -98,6 +98,4 @@ class controleRepo extends DBAccess{ return DataBase::delNumeric( $getControleList->fetchAll() ); } - - } \ No newline at end of file diff --git a/manager/repo/group.php b/manager/repo/group.php index e123353..4b21c28 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -281,6 +281,35 @@ class groupRepo extends DBAccess{ + + + /* RETOURNE LES GROUPES INSCRITS A UN CONTROLE + * + * @controle l'UID du contrôle en question + * + * + * @return groupes retourne un tableau contenant les groupes inscrits à ce contrôle + * @return FALSE retourne FALSE si aucun groupe n'y est inscrit + * + */ + public static function forControle($controle){ + $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom ". + "FROM groupe as g, appartenance as app, mcc_ue, mcc_module as mcc_m, controle as ctrl ". + "WHERE app.id_groupe = g.id_groupe ". + "AND ctrl.id_mcc_module = mcc_m.id_mcc_module ". + "AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ". + "AND app.id_semestre = mcc_ue.id_semestre ". + + "AND ctrl.id_controle = :controle ". + "ORDER BY g.nom ASC"); + $getGroupeList->execute(array( ':controle' => $controle )); + + + return DataBase::delNumeric( $getGroupeList->fetchAll() ); + } + + + /* RETOURNE TOUS LES GROUPES DES SEMESTRES COURANT D'UNE ANNÉE * * @semestre_pair VRAI si le semestre courant est pair diff --git a/manager/repo/note.php b/manager/repo/note.php index 9459916..4ac6ef9 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -155,6 +155,40 @@ class noteRepo extends DBAccess{ + /* RENVOIE LES STATISTIQUES ASSOCIÉES À UN CONTRÔLE POUR UN GROUPE SPÉCIFIQUE + * + * @controle l'UID du controle concerné + * @groupe l'UID du groupe spécifique + * + * + * @return notes retourne les stats des notes pour les groupes à ce contrôle + * @return FALSE retourne FALSE si aucun résultat n'est trouvé + * + */ + public static function forGroupe($controle, $groupe){ + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as moyenne, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes ". + "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g ". + "WHERE n.id_appartenance = app.id_appartenance ". + "AND app.id_semestre = s.id_semestre ". + "AND app.id_groupe = g.id_groupe ". + "AND s.id_semestre = mcc_ue.id_semestre ". + "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". + "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". + "AND n.id_controle = ctrl.id_controle ". + + "AND ctrl.id_controle = :controle ". + "AND app.id_groupe = :groupe ". + + "GROUP BY g.id_groupe ". + + "ORDER BY g.nom ASC"); + $getNoteList->execute(array( ':controle' => $controle, ':groupe' => $groupe )); + + return $getNoteList->fetch(); + } + + + /* CRÉATION/MODIFICATION D'UNE NOTE POUR UN ETUDIANT À UN CONTRÔLE * * @etudiant l'UID de l'étudiant en question diff --git a/page/career.php b/page/career.php index 9661d0a..a0507f5 100755 --- a/page/career.php +++ b/page/career.php @@ -200,7 +200,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo "".$module['nom']." - ".$module['libelle'].""; - if( count($controle['notes']) == 0 ) // si il y a au moins une note pour ce contrôle + if( count($controle['grouplist']) == 0 ) // si il y a au moins une note pour ce contrôle echo 'Pas noté'; else echo 'Moyenne de '.number_format($controle['moyenne'], 2).' / '.$controle['base'].''; @@ -209,22 +209,8 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo 'Coefficient '.number_format($controle['coefficient'], 2).''; echo ''; - echo ""; - - foreach($controle['notes'] as $note){ // on affiche la liste des élèves avec leurs notes - echo ""; - echo ""; - if( $note['nb_notes'] == 1 ) - echo ""; - else - echo ""; - - echo ""; - echo ""; - echo ""; - } - - echo '
    ".$note['groupe']."".$note['nb_notes']." note".$note['nb_notes']." notesAllant de ".$note['min']." à ".$note['max']."Moyenne de ".number_format($note['moyenne'], 2)." / ".$controle['base']."
    '; + // echo ""; + // echo '
    '; } }else // si aucun contrôle pour ce module @@ -314,19 +300,26 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif ====================================================================================*/ if( $groupeOpt == null ){ - foreach($answer->controle['grouplist'] as $note){ // on affiche la liste des groupes avec leurs stats + foreach($answer->controle['grouplist'] as $groupe){ // on affiche la liste des groupes avec leurs stats echo ""; - echo "".$note['groupe'].""; + echo "".$groupe['nom'].""; - if( $note['nb_notes'] == 1 ) - echo "".$note['nb_notes']." note"; - else - echo "".$note['nb_notes']." notes"; + if( isset($groupe['nb_notes']) ){ // si ce groupe a des notes - echo "Allant de ".$note['min']." à ".$note['max'].""; - echo "Moyenne de ".number_format($note['moyenne'], 2)." / ".$answer->controle['base'].""; + if( $groupe['nb_notes'] == 1 ) echo "".$groupe['nb_notes']." note"; + else echo "".$groupe['nb_notes']." notes"; + + echo "Allant de ".number_format($groupe['min'], 2)." à ".number_format($groupe['max'], 2).""; + echo "Moyenne de ".number_format($groupe['moyenne'], 2)." / ".$answer->controle['base'].""; + }else{ // si le groupe n'a aucune note + + echo "Pas de note"; + echo ""; + echo ""; + + } echo ""; } From e10c3ad9895ed67aef66f8da9e30dd0217787657 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 00:01:05 +0100 Subject: [PATCH 19/39] =?UTF-8?q?Affichage=20des=20contr=C3=B4les=20m?= =?UTF-8?q?=C3=AAme=20si=20aucune=20note=20n'est=20encore=20saisie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 6 +++++- manager/repo/controle.php | 5 ++--- manager/repo/note.php | 25 +++++++++++++++++++++++++ page/career.php | 4 +--- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/manager/database.php b/manager/database.php index cfd5f53..cfe84e1 100755 --- a/manager/database.php +++ b/manager/database.php @@ -641,8 +641,12 @@ class DataBase{ foreach($UEList[$iter_ue]['modules'] as $iter_mod=>$b){ $UEList[$iter_ue]['modules'][$iter_mod]['controles'] = controleRepo::forTeacher($enseignantUID, $UEList[$iter_ue]['modules'][$iter_mod]['id'], $UEList[$iter_ue]['id_semestre']); - foreach($UEList[$iter_ue]['modules'][$iter_mod]['controles'] as $iter_ct=>$c) + foreach($UEList[$iter_ue]['modules'][$iter_mod]['controles'] as $iter_ct=>$c){ $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['grouplist'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + + $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['moyenne'] = noteRepo::moyenneForControle($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + } + } } diff --git a/manager/repo/controle.php b/manager/repo/controle.php index b68a009..4b9ae29 100755 --- a/manager/repo/controle.php +++ b/manager/repo/controle.php @@ -80,13 +80,12 @@ class controleRepo extends DBAccess{ * */ public static function forTeacher($enseignant, $module, $semestre){ - $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.id_mcc_module, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication, AVG(n.valeur) as moyenne ". - "FROM enseignement as ens, module as m, mcc_module as mcc_m, mcc_ue, controle as ctrl, note as n ". + $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.id_mcc_module, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication ". + "FROM enseignement as ens, module as m, mcc_module as mcc_m, mcc_ue, controle as ctrl ". "WHERE ens.id_mcc_module = mcc_m.id_mcc_module ". "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". "AND mcc_m.id_module = m.id_module ". "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". - "AND n.id_controle = ctrl.id_controle ". "AND ens.id_enseignant = :enseignant ". "AND mcc_m.id_module = :module ". diff --git a/manager/repo/note.php b/manager/repo/note.php index 4ac6ef9..e5d317f 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -188,6 +188,31 @@ class noteRepo extends DBAccess{ } + /* RETOURNE LA MOYENNE D'UN CONTRÔLE PARTICULIER + * + * @controle l'UID du contrôle en question + * + * + * @return moyenne retourne la moyenne d'un contrôle + * @return FALSE retourne FALSE s'il y a aucune note à ce contrôle + * + */ + public static function moyenneForControle($controle){ + $getMoyenne = DataBase::getPDO()->prepare("SELECT AVG(n.valeur) as moyenne ". + "FROM controle as ctrl, note as n ". + "WHERE ctrl.id_controle = n.id_controle ". + "AND ctrl.id_controle = :controle ". + + "GROUP BY ctrl.id_controle"); + $getMoyenne->execute(array( ':controle' => $controle )); + + if( $fetchObj = $getMoyenne->fetch() ) + return $fetchObj['moyenne']; + else + return false; + } + + /* CRÉATION/MODIFICATION D'UNE NOTE POUR UN ETUDIANT À UN CONTRÔLE * diff --git a/page/career.php b/page/career.php index a0507f5..32755c3 100755 --- a/page/career.php +++ b/page/career.php @@ -178,8 +178,6 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo "".$UE['nom'].''; echo ""; - - if( count($answer->UEs) > 0 ){ // si au moins un UE foreach($answer->UEs as $UE){ // pour chaque UE @@ -195,6 +193,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e if( count($module['controles']) > 0 ){ // s'il y a au moins un contrôle pour ce module foreach($module['controles'] as $controle){ // pour chaque contrôle + echo ''; echo "".$controle['intitule'].""; @@ -247,7 +246,6 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif $request->controle = $controleOpt; if( $groupeOpt != null ) $request->groupe = $groupeOpt; // on définit le groupe s'il est spécifié - career_switch_level_1($request, $answer); if( $answer->request == 'success' ){ From 2aa3b093a9aa42e98698ded5c1f68adf27f94f03 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 00:09:04 +0100 Subject: [PATCH 20/39] Modification page/career.php un enseignant peut maintenant visualiser les controles et groupes qui n'ont pas de notes --- manager/database.php | 9 +++++---- manager/repo/controle.php | 5 ++--- manager/repo/note.php | 4 ++-- page/career.php | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/manager/database.php b/manager/database.php index cfe84e1..1fbbf44 100755 --- a/manager/database.php +++ b/manager/database.php @@ -662,10 +662,14 @@ class DataBase{ /********************************************/ public function getNotesEnseignant($enseignant, $semestre_pair, $annee, $controle, $groupe=null){ // [OPTIONNEL] $groupe - // on récupère les informations du contrôle if( ! ($controlObj=controleRepo::info($controle)) ) return 'unknown_controle'; + if( $moyenneObj = noteRepo::moyenneForControle($controle) ) + $controlObj['moyenne'] = $moyenneObj['moyenne']; + else + $controlObj['moyenne'] = null; + /* [1] si le groupe est donné =======================================*/ if( $groupe != null ){ @@ -682,9 +686,6 @@ class DataBase{ /* [2] si on veut par groupe =======================================*/ }else{ - // on ajoute au controle['notes'] la liste des notes des groupes - // $controlObj['grouplist'] = noteRepo::forTeacher($controle, null); - $controlObj['grouplist'] = groupRepo::forControle($controle); foreach($controlObj['grouplist'] as $iter=>$grpe) diff --git a/manager/repo/controle.php b/manager/repo/controle.php index 4b9ae29..8186406 100755 --- a/manager/repo/controle.php +++ b/manager/repo/controle.php @@ -19,11 +19,10 @@ class controleRepo extends DBAccess{ */ public static function info($controleUID){ // on considère que le semestre existe - $getControleInfo = DataBase::getPDO()->prepare("SELECT ctrl.id_controle as id, ctrl.id_mcc_module, m.nom as module, m.libelle as modulelib, s.id_semestre, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication, AVG(n.valeur) as moyenne ". - "FROM controle as ctrl, mcc_module as mcc_m, mcc_ue, semestre as s, module as m, note as n ". + $getControleInfo = DataBase::getPDO()->prepare("SELECT ctrl.id_controle as id, ctrl.id_mcc_module, m.nom as module, m.libelle as modulelib, s.id_semestre, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication ". + "FROM controle as ctrl, mcc_module as mcc_m, mcc_ue, semestre as s, module as m ". "WHERE ctrl.id_mcc_module = mcc_m.id_mcc_module ". "AND mcc_m.id_module = m.id_module ". - "AND n.id_controle = ctrl.id_controle ". "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". "AND mcc_ue.id_semestre = s.id_semestre ". diff --git a/manager/repo/note.php b/manager/repo/note.php index e5d317f..861aa69 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -194,7 +194,7 @@ class noteRepo extends DBAccess{ * * * @return moyenne retourne la moyenne d'un contrôle - * @return FALSE retourne FALSE s'il y a aucune note à ce contrôle + * @return NULL retourne NULL s'il y a aucune note à ce contrôle * */ public static function moyenneForControle($controle){ @@ -209,7 +209,7 @@ class noteRepo extends DBAccess{ if( $fetchObj = $getMoyenne->fetch() ) return $fetchObj['moyenne']; else - return false; + return null; } diff --git a/page/career.php b/page/career.php index 32755c3..2ba187e 100755 --- a/page/career.php +++ b/page/career.php @@ -199,7 +199,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo "".$module['nom']." - ".$module['libelle'].""; - if( count($controle['grouplist']) == 0 ) // si il y a au moins une note pour ce contrôle + if( $controle['moyenne'] == null ) // si il y a au moins une note pour ce contrôle echo 'Pas noté'; else echo 'Moyenne de '.number_format($controle['moyenne'], 2).' / '.$controle['base'].''; @@ -270,7 +270,7 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif ====================================================================================*/ if( $groupeOpt == null ){ - if( count($answer->controle['grouplist']) == 0 ) // si il y a au moins une note pour ce contrôle + if( $answer->controle['moyenne'] == null ) // si il y a au moins une note pour ce contrôle echo 'Pas noté'; else echo 'Moyenne de '.number_format($answer->controle['moyenne'], 2).' / '.$answer->controle['base'].''; From f83b0963feec870d40d19ca79938b10ad6abc94d Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 10:27:35 +0100 Subject: [PATCH 21/39] =?UTF-8?q?Correction=20du=20d=C3=A9placement=20de?= =?UTF-8?q?=20groupe,=20coh=C3=A9rence=20du=20semestre=20pendant=20le=20d?= =?UTF-8?q?=C3=A9placement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 117 ++++------------------------------------- manager/groups.php | 6 +-- manager/repo/group.php | 39 ++++++-------- page/_JS/groups.js | 4 +- page/groups.php | 10 ++-- 5 files changed, 37 insertions(+), 139 deletions(-) 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 ''; From 499d17346c2ab7439a1516a3c0c0a69239ce894e Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 10:34:41 +0100 Subject: [PATCH 22/39] =?UTF-8?q?Correction=20incoh=C3=A9rence=20entre=20m?= =?UTF-8?q?oyenne=20contr=C3=B4le=20de=20la=20liste=20des=20contr=C3=B4les?= =?UTF-8?q?=20ET=20les=20d=C3=A9tails=20d'un=20contr=C3=B4le?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 7 +++---- manager/repo/note.php | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/manager/database.php b/manager/database.php index 2434a5f..df8eb43 100755 --- a/manager/database.php +++ b/manager/database.php @@ -548,6 +548,7 @@ class DataBase{ $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['grouplist'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['moyenne'] = noteRepo::moyenneForControle($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + } } @@ -568,10 +569,8 @@ class DataBase{ // on récupère les informations du contrôle if( ! ($controlObj=controleRepo::info($controle)) ) return 'unknown_controle'; - if( $moyenneObj = noteRepo::moyenneForControle($controle) ) - $controlObj['moyenne'] = $moyenneObj['moyenne']; - else - $controlObj['moyenne'] = null; + // on ajoute la moyenne au contrôle + $controlObj['moyenne'] = noteRepo::moyenneForControle($controlObj['id']); /* [1] si le groupe est donné =======================================*/ diff --git a/manager/repo/note.php b/manager/repo/note.php index 861aa69..550f035 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -198,7 +198,7 @@ class noteRepo extends DBAccess{ * */ public static function moyenneForControle($controle){ - $getMoyenne = DataBase::getPDO()->prepare("SELECT AVG(n.valeur) as moyenne ". + $getMoyenne = DataBase::getPDO()->prepare("SELECT ctrl.id_controle, AVG(n.valeur) as moyenne ". "FROM controle as ctrl, note as n ". "WHERE ctrl.id_controle = n.id_controle ". "AND ctrl.id_controle = :controle ". From 4d4f2aae45173999273b567f0cfca174dd9d4189 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 12:02:03 +0100 Subject: [PATCH 23/39] Modification page/modules affichage par semestre, par UE, par modules --- manager/database.php | 20 +++++-- manager/modules.php | 7 +-- manager/repo/module.php | 12 ++-- manager/repo/semestre.php | 20 +++++++ manager/repo/ue.php | 21 +++---- manager/security.php | 14 ++--- page/_JS/modules.js | 13 +++- page/modules.php | 121 ++++++++++++++++++++++++++++++-------- 8 files changed, 165 insertions(+), 63 deletions(-) diff --git a/manager/database.php b/manager/database.php index df8eb43..cd8db30 100755 --- a/manager/database.php +++ b/manager/database.php @@ -438,13 +438,23 @@ class DataBase{ /*** retourne les modules des semestres en cours ***/ /***************************************************/ public function getModulesByUEByYear($semestre_pair, $annee){ // ***OPTIONNEL*** semestre_pair - // on récupère la liste des UEs - $UEList = ueRepo::forYear($semestre_pair, $annee); - foreach($UEList as $iter=>$UE) // pour chaque UE, on récupère la liste des UEs - $UEList[$iter]['modules'] = moduleRepo::forYear($UE['id'], $semestre_pair, $annee); + debug(); - return $UEList; + // on récupère les semestres de cette année + $semestreList = semestreRepo::forYear($annee); + + foreach($semestreList as $iter_s=>$a){ + $semestreList[$iter_s]['UElist'] = ueRepo::forYear($semestreList[$iter_s]['id']); + + foreach($semestreList[$iter_s]['UElist'] as $iter_u=>$b){ + $semestreList[$iter_s]['UElist'][$iter_u]['modules'] = moduleRepo::forYear($semestreList[$iter_s]['UElist'][$iter_u]['id'], $semestreList[$iter_s]['id']); + + } + + } + + return $semestreList; } diff --git a/manager/modules.php b/manager/modules.php index fb45ff5..e8ae6c2 100755 --- a/manager/modules.php +++ b/manager/modules.php @@ -112,14 +112,13 @@ require_once __ROOT__.'/manager/database.php'; $anneeCheck = $nEmptyParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons - $UEList = DataBase::getInstance()->getModulesByUEByYear(null, $request->annee); - // $UEList = DataBase::getInstance()->getModulesByUEByYear($_SESSION['semestre_pair'], $request->annee); + $semestreList = DataBase::getInstance()->getModulesByUEByYear(null, $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 + if( is_array($semestreList) ){ // si on a bien un tableau + $answer->semestres = $semestreList; // 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 diff --git a/manager/repo/module.php b/manager/repo/module.php index b2c08fb..e99fdbc 100755 --- a/manager/repo/module.php +++ b/manager/repo/module.php @@ -105,17 +105,16 @@ class moduleRepo extends DBAccess{ - /* RENVOIE LA LISTE DES MODULES D'UN UE D'UNE ANNEE COURANTE (SEMESTRES COURANTS) + /* RENVOIE LA LISTE DES MODULES D'UN UE D'UN SEMESTRE PARTICULIER * * @UEUID l'UID d'un UE - * @semestre_pair VRAI si le semestre est pair - * @annee l'année en cours + * @semestre l'UID du semestre en question * * @return modules retourne un tableau contenant les modules de l'utilisateur pour ce semestre * @return existent FAUX si aucun module n'a été trouvé * */ - public static function forYear($UEUID, $semestre_pair, $annee){ + public static function forYear($UEUID, $semestre){ // on récupère les modules $getModulesForYear = DataBase::getPDO()->prepare("SELECT DISTINCT m.id_module as id, m.nom, m.libelle ". "FROM module as m, mcc_module as mcc_m, mcc_ue, semestre as s ". @@ -124,10 +123,9 @@ class moduleRepo extends DBAccess{ "AND mcc_ue.id_semestre = s.id_semestre ". "AND mcc_ue.id_ue = :UEUID ". - "AND s.rang % 2 = :semestre_pair ". - "AND s.annee = :annee ". + "AND s.id_semestre = :semestre ". "ORDER BY s.rang, m.nom, m.libelle"); - $getModulesForYear->execute(array( ':UEUID' => $UEUID, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + $getModulesForYear->execute(array( ':UEUID' => $UEUID, ':semestre' => $semestre )); return DataBase::delNumeric( $getModulesForYear->fetchAll() ); } diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 3955503..0c2c76d 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -106,6 +106,26 @@ class semestreRepo extends DBAccess{ + /* retourne la liste des semestres d'une année + * + * @annee l'année en question + * + * + * @return semestres retourne la liste des semestres de cette année + * @return FALSE retourne FALSE si aucun semestre ne correspond aux critères + * + */ + public static function forYear($annee){ + $getSemestreList = DataBase::getPDO()->prepare("SELECT id_semestre as id, nom, rang, annee ". + "FROM semestre ". + "WHERE annee = :annee ". + "ORDER BY rang ASC"); + $getSemestreList->execute(array( ':annee' => $annee )); + + return DataBase::delNumeric( $getSemestreList->fetchAll() ); + } + + } \ No newline at end of file diff --git a/manager/repo/ue.php b/manager/repo/ue.php index 3976063..733c9bb 100755 --- a/manager/repo/ue.php +++ b/manager/repo/ue.php @@ -104,31 +104,26 @@ class ueRepo extends DBAccess{ - /* RENVOIE LA LISTE DES UEs D'UNE ANNEE COURANTE (SEMESTRES COURANTS) + /* RENVOIE LA LISTE DES UEs D'UN SEMESTRE D'UNE ANNEE COURANTE * - * @semestre_pair VRAI si le semestre est pair - * @annee l'année en cours + * @semestre l'UID du semestre en question * - * @return UEs retourne un tableau contenant les UEs des semestres en cours + * @return UEs retourne un tableau contenant les UEs du semestre en question * @return existent FAUX si aucun UE n'a été trouvé * */ - public static function forYear($semestre_pair, $annee){ - $semestrePair0 = '0'; $semestrePair1 = '1'; - if( is_bool($semestre_pair) ){ $semestrePair0 = $semestre_pair; $semestrePair1 = $semestre_pair; } - + public static function forYear($semestre){ // on récupère les modules - $getUEsForYear = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". + $getUEList = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". "FROM ue, mcc_ue, semestre as s ". "WHERE ue.id_ue = mcc_ue.id_ue ". "AND mcc_ue.id_semestre = s.id_semestre ". - "AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) ". - "AND s.annee = :annee ". + "AND s.id_semestre = :semestre ". "ORDER BY s.rang, ue.nom, ue.libelle"); - $getUEsForYear->execute(array( ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee )); + $getUEList->execute(array( ':semestre' => $semestre )); - return DataBase::delNumeric( $getUEsForYear->fetchAll() ); + return DataBase::delNumeric( $getUEList->fetchAll() ); } diff --git a/manager/security.php b/manager/security.php index 7cd2eb6..2bdbd48 100755 --- a/manager/security.php +++ b/manager/security.php @@ -54,15 +54,15 @@ error_reporting(-1); } - function distinctArray($inArray){ - $outArray = array(); + // function distinctArray($inArray){ + // $outArray = array(); - foreach($inArray as $value) // pour chaque élément du tableau d'entrée, on l'ajoute uniquement si aucune entrée du tableau de sortie n'a la même valeur - if( !in_array($value, $outArray) ) - array_push($outArray, $value); + // foreach($inArray as $value) // pour chaque élément du tableau d'entrée, on l'ajoute uniquement si aucune entrée du tableau de sortie n'a la même valeur + // if( !in_array($value, $outArray) ) + // array_push($outArray, $value); - return $outArray; - } + // return $outArray; + // } function secure_sha1($text){ diff --git a/page/_JS/modules.js b/page/_JS/modules.js index 55eb1f9..87903cd 100644 --- a/page/_JS/modules.js +++ b/page/_JS/modules.js @@ -5,16 +5,23 @@ /********************************/ /* GESTION DE L'AFFINAGE PAR UE */ /********************************/ -var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE]"); +var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre]"); for( var i = 0 ; i < partList.length ; i++ ){ partList[i].addEventListener('click', function(e){ var tableauParent = e.target.parentNode.parentNode.parentNode; - if( tableauParent.tagName == 'TABLE' && tableauParent.getAttribute('name') == 'UE' && e.target.dataset.hasOwnProperty('value') ){ - pageM.vars[1] = 'u:'+e.target.dataset.value; + if( tableauParent.tagName == 'TABLE' && e.target.dataset.hasOwnProperty('value') ){ + /* SI c'est une affinage par SEMESTRE */ + if( tableauParent.getAttribute('name') == 'semestre' ) + pageM.vars[1] = 's:'+e.target.dataset.value; + + /* SI c'est un affinage par UE */ + if( tableauParent.getAttribute('name') == 'UE' ) + pageM.vars[1] = 'u:'+e.target.dataset.value; + // si on a '*' comme valeur, on l'enlève if( /\*$/.test(pageM.vars[1]) ) pageM.vars.pop(); diff --git a/page/modules.php b/page/modules.php index f786a7b..ce1a4ed 100755 --- a/page/modules.php +++ b/page/modules.php @@ -8,16 +8,21 @@ require_once __ROOT__.'/manager/modules.php'; // on initialise les paramètres optionnels $ueOpt = null; + $semestreOpt = null; // on cherche dans toutes les variables _get si on trouve des paramètres foreach($_POST as $k=>$v){ - if( preg_match('/^u:(.+)$/', $k, $m) ) // s:nomSemestre + if( preg_match('/^s:(.+)$/', $k, $m) ) // s:nomSemestre + $semestreOpt = $m[1]; + + if( preg_match('/^u:(.+)$/', $k, $m) ) // u:nomUE $ueOpt = $m[1]; } $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; + $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; /**************************************** @@ -183,12 +188,34 @@ if( permission('admin') ){ // si l'utilisateur est un admin echo "
    "; - /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeNomsSemestres = array(); $ListeNomsUE = array(); - foreach($answer->UEs as $UE) - array_push( $ListeNomsUE, $UE['nom'] ); + foreach($answer->semestres as $semestre){ + array_push( $ListeNomsSemestres, $semestre['nom'] ); + + /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ + foreach($semestre['UElist'] as $UE) + array_push( $ListeNomsUE, $UE['nom'] ); + } + + $ListeNomsSemestres = array_unique($ListeNomsSemestres); $ListeNomsUE = array_unique($ListeNomsUE); + echo ""; + if( $semestreOpt == null ) echo ""; + else echo ""; + + foreach($ListeNomsSemestres as $NomSemestre) + if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
    TousTous".$NomSemestre.'".$NomSemestre.'
    "; + + + + echo ""; if( $ueOpt == null ) echo ""; @@ -202,34 +229,80 @@ if( permission('admin') ){ // si l'utilisateur est un admin echo "
    Tous
    "; - foreach($answer->UEs as $UE){ - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ - - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } - - echo ''; - echo '
    '.$UE['semestre'].' - '.$UE['nom'].' - '.$UE['libelle'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].'
    '; + foreach($answer->semestres as $semestre){ + + if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage + + foreach($semestre['UElist'] as $UE){ + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage + + echo ""; + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + foreach($UE['modules'] as $MODULE){ + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo '
    '.$semestre['nom'].' - '.$UE['nom'].' - '.$UE['libelle'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].'
    '; + + } + } } + } //////////////////////////////////////////////////////////////////////////////// echo '
    '; }else echo "
    Aucun module trouvé
    "; -} ?> +} + + + + + + + + + + +/***************************************/ +/*** GESTION DES MCC (version admin) ***/ +/***************************************/ +if( permission('admin') ){ // si l'utilisateur est un admin + + $request = new stdClass(); $answer = new stdClass(); + + $request->level_1 = 'getMCC'; + $request->annee = $_SESSION['annee']; + + modules_switch_level_1($request, $answer); + + var_dump( $answer ); + + if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe + //////////////////////////////////////////////////////////////////////////////// + echo "
    "; + + + + }else + echo "
    Aucun module trouvé
    "; + +} + + +?> From c7063cb95891a9044d4e7658f37a1b5e4df46b28 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 12:42:36 +0100 Subject: [PATCH 24/39] =?UTF-8?q?En=20cours=20d'int=C3=A9gration=20du=20ty?= =?UTF-8?q?pe=20de=20formation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 2 - manager/modules.php | 29 ++++++++++ manager/repo/semestre.php | 19 ++++--- page/modules.php | 9 +-- xdoc/sid.sql | 113 ++++++++++++++++++++++++++++++-------- 5 files changed, 135 insertions(+), 37 deletions(-) diff --git a/manager/database.php b/manager/database.php index cd8db30..2a9511d 100755 --- a/manager/database.php +++ b/manager/database.php @@ -439,8 +439,6 @@ class DataBase{ /***************************************************/ public function getModulesByUEByYear($semestre_pair, $annee){ // ***OPTIONNEL*** semestre_pair - debug(); - // on récupère les semestres de cette année $semestreList = semestreRepo::forYear($annee); diff --git a/manager/modules.php b/manager/modules.php index e8ae6c2..5d6c2e5 100755 --- a/manager/modules.php +++ b/manager/modules.php @@ -130,6 +130,35 @@ require_once __ROOT__.'/manager/database.php'; break; + /**********************************/ + /* liste des informations des MCC */ + /**********************************/ + case 'getMCC': if( permission('admin') ){ + + $areSetParam = isset($request->annee); // les arguments existent + $typeOkParam = $areSetParam && is_string($request->annee); // si c'est des strings + $nEmptyParam = $typeOkParam && is_numeric($request->annee); // des bon types + $anneeCheck = $nEmptyParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format + + if( $anneeCheck ){ // si tout les paramètres sont bons + $semestreList = DataBase::getInstance()->getModulesByUEByYear(null, $request->annee); + + // STRUCTURE + // tableau d'UES contenant un tableau de MODULES + + if( is_array($semestreList) ){ // si on a bien un tableau + $answer->semestres = $semestreList; // 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'; + + }else + $answer->request = 'permission_error'; + break; + + /***********/ diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 0c2c76d..363ac97 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -57,7 +57,10 @@ class semestreRepo extends DBAccess{ */ public static function info($semestreUID){ // on considère que le semestre existe - $getSemestreInfo = DataBase::getPDO()->prepare("SELECT id_semestre as id, nom, rang, annee FROM semestre WHERE id_semestre = :semestreUID"); + $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as s.id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + "FROM semestre as s, formation as f ". + "WHERE s.formation = f.id_formation ". + "AND id_semestre = :semestreUID"); $getSemestreInfo->execute(array( ':semestreUID' => $semestreUID )); // on retourne le résultat en supprimant les doublons à indices numériques @@ -86,9 +89,10 @@ class semestreRepo extends DBAccess{ // on formate les variables $semestre_pair = ($semestre_pair) ? '0' : '1'; - $getSemestreUID = DataBase::getPDO()->prepare("SELECT s.id_semestre as id ". - "FROM semestre as s, appartenance as app ". - "WHERE app.id_semestre = s.id_semestre ". + $getSemestreUID = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.code as formation, f.nom as nom_formation ". + "FROM semestre as s, appartenance as app, formation as f ". + "WHERE s.formation = f.id_formation ". + "AND app.id_semestre = s.id_semestre ". "AND app.id_etudiant = :etudiant ". "AND s.annee = :annee ". @@ -116,9 +120,10 @@ class semestreRepo extends DBAccess{ * */ public static function forYear($annee){ - $getSemestreList = DataBase::getPDO()->prepare("SELECT id_semestre as id, nom, rang, annee ". - "FROM semestre ". - "WHERE annee = :annee ". + $getSemestreList = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + "FROM semestre as s, formation as f ". + "WHERE s.formation = f.id_formation ". + "AND annee = :annee ". "ORDER BY rang ASC"); $getSemestreList->execute(array( ':annee' => $annee )); diff --git a/page/modules.php b/page/modules.php index ce1a4ed..7fb7a7d 100755 --- a/page/modules.php +++ b/page/modules.php @@ -239,9 +239,9 @@ if( permission('admin') ){ // si l'utilisateur est un admin if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage echo ""; - echo ""; + echo ""; echo ''; - echo ''; + echo ''; echo ''; echo ''; echo ''; @@ -249,6 +249,7 @@ if( permission('admin') ){ // si l'utilisateur est un admin echo ''; echo ''; echo ''; + echo ''; echo ''; } @@ -289,8 +290,8 @@ if( permission('admin') ){ // si l'utilisateur est un admin modules_switch_level_1($request, $answer); - var_dump( $answer ); - + // var_dump( $answer ) +; if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// echo "
    "; diff --git a/xdoc/sid.sql b/xdoc/sid.sql index 155cd24..5d36a16 100755 --- a/xdoc/sid.sql +++ b/xdoc/sid.sql @@ -3,7 +3,7 @@ -- http://www.phpmyadmin.net -- -- Client: localhost --- Généré le: Sam 14 Novembre 2015 à 18:33 +-- Généré le: Lun 16 Novembre 2015 à 12:42 -- Version du serveur: 5.5.46-0ubuntu0.14.04.2 -- Version de PHP: 5.5.9-1ubuntu4.14 @@ -56,15 +56,15 @@ CREATE TABLE IF NOT EXISTS `appartenance` ( -- INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_semestre`) VALUES -(1, 'mrd1609a', 6, 2), -(2, 'ihf1991a', 16, 4), +(1, 'mrd1609a', 2, 2), +(2, 'ihf1991a', 8, 4), (3, 'mma1990a', 13, 1), (4, 'lme1952a', 15, 3), (5, 'imf1922a', 21, 1), (6, 'gyy1983a', 4, 4), (7, 'otm1902a', 14, 2), (8, 'tnx1949a', 12, 4), -(9, 'sjl1937a', 12, 4), +(9, 'sjl1937a', 4, 4), (10, 'anj1991a', 16, 4), (11, 'xdh1989a', 20, 4), (12, 'agl1956a', 3, 3), @@ -80,8 +80,8 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (22, 'dtg1946a', 18, 2), (23, 'oxz1985a', 7, 3), (24, 'ono1984a', 14, 2), -(25, 'auy1966a', 3, 3), -(26, 'dui1946a', 5, 1), +(25, 'auy1966a', 15, 3), +(26, 'dui1946a', 1, 1), (27, 'cyw1979a', 24, 4), (28, 'pfv1965a', 3, 3), (29, 'oqz1937a', 24, 4), @@ -106,7 +106,7 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (48, 'xtb1903a', 11, 3), (49, 'msj1985a', 13, 1), (50, 'wvn1982a', 9, 1), -(51, 'psg1965a', 8, 4), +(51, 'psg1965a', 4, 4), (52, 'hpa1908a', 5, 1), (53, 'maq1980a', 19, 3), (54, 'agq1929a', 13, 1), @@ -138,7 +138,7 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s (80, 'kfx1995a', 18, 2), (81, 'jgd1966a', 3, 3), (82, 'rwg1909a', 14, 2), -(83, 'ngw1997a', 1, 1), +(83, 'ngw1997a', 17, 1), (84, 'obg1973a', 2, 2), (85, 'hzg1935a', 12, 4), (86, 'iyh1918a', 3, 3), @@ -167,13 +167,13 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s CREATE TABLE IF NOT EXISTS `controle` ( `id_controle` int(11) NOT NULL AUTO_INCREMENT, `id_mcc_module` int(11) NOT NULL, - `intitule` varchar(50) NOT NULL, + `intitule` varchar(50) CHARACTER SET utf32 COLLATE utf32_unicode_ci NOT NULL, `base` int(11) NOT NULL, `coefficient` float NOT NULL, `date_publication` date NOT NULL, PRIMARY KEY (`id_controle`), KEY `id_mcc_module` (`id_mcc_module`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; -- -- RELATIONS POUR LA TABLE `controle`: @@ -195,7 +195,8 @@ INSERT INTO `controle` (`id_controle`, `id_mcc_module`, `intitule`, `base`, `coe (7, 4, 'Partiel 7', 20, 1, '2015-11-15'), (8, 4, 'Partiel 8', 20, 1, '2015-11-16'), (9, 5, 'Partiel 9', 20, 9, '2015-11-17'), -(10, 10, 'Partiel 10', 20, 10, '2015-11-18'); +(10, 10, 'Partiel 10', 20, 10, '2015-11-18'), +(11, 9, 'Controle de TP', 20, 20, '2015-11-19'); -- -------------------------------------------------------- @@ -233,6 +234,28 @@ INSERT INTO `enseignement` (`id_enseignement`, `id_enseignant`, `id_mcc_module`, -- -------------------------------------------------------- +-- +-- Structure de la table `formation` +-- + +CREATE TABLE IF NOT EXISTS `formation` ( + `id_formation` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, + `nom` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, + `nb_semestres` int(11) NOT NULL, + PRIMARY KEY (`id_formation`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; + +-- +-- Contenu de la table `formation` +-- + +INSERT INTO `formation` (`id_formation`, `code`, `nom`, `nb_semestres`) VALUES +(1, 'ITINN1', 'DUT 1A INFORMATIQUE', 2), +(2, 'ITINN2', 'DUT 2A INFORMATIQUE', 2); + +-- -------------------------------------------------------- + -- -- Structure de la table `groupe` -- @@ -406,7 +429,7 @@ CREATE TABLE IF NOT EXISTS `note` ( PRIMARY KEY (`id_note`), KEY `id_appartenance` (`id_appartenance`), KEY `id_controle` (`id_controle`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 ; -- -- RELATIONS POUR LA TABLE `note`: @@ -421,7 +444,7 @@ CREATE TABLE IF NOT EXISTS `note` ( -- INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUES -(11, 103, 1, 1), +(11, 103, 1, 15.25), (12, 54, 2, 2), (13, 103, 3, 3), (14, 103, 4, 4), @@ -431,7 +454,35 @@ INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUE (18, 103, 8, 8), (19, 103, 9, 9), (20, 20, 1, 19), -(21, 77, 1, 18); +(21, 77, 1, 19.75), +(22, 83, 1, 2.5), +(23, 91, 1, 3.5), +(24, 19, 1, 4.5), +(25, 58, 1, 5.25), +(26, 49, 2, 3), +(27, 87, 2, 4), +(28, 3, 2, 5), +(29, 74, 1, 14.75), +(30, 26, 1, 1.9), +(31, 97, 1, 10), +(32, 32, 1, 10), +(33, 50, 1, 10), +(34, 73, 1, 20), +(35, 52, 1, 20), +(36, 4, 10, 10), +(37, 56, 10, 1), +(38, 94, 10, 3), +(39, 64, 10, 2), +(40, 100, 10, 4), +(41, 23, 10, 5), +(42, 30, 10, 6), +(43, 103, 2, 1), +(44, 83, 2, 2), +(45, 91, 2, 3), +(46, 13, 1, 2), +(47, 67, 1, 0), +(48, 70, 1, 0.5), +(49, 5, 1, 1.75); -- -------------------------------------------------------- @@ -441,26 +492,34 @@ INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUE CREATE TABLE IF NOT EXISTS `semestre` ( `id_semestre` int(11) NOT NULL AUTO_INCREMENT, + `formation` int(11) NOT NULL, `nom` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `rang` tinyint(4) NOT NULL, `annee` year(4) NOT NULL, PRIMARY KEY (`id_semestre`), - UNIQUE KEY `rang` (`rang`,`annee`) + UNIQUE KEY `rang` (`rang`,`annee`), + KEY `id_formation` (`formation`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; +-- +-- RELATIONS POUR LA TABLE `semestre`: +-- `formation` +-- `formation` -> `id_formation` +-- + -- -- Contenu de la table `semestre` -- -INSERT INTO `semestre` (`id_semestre`, `nom`, `rang`, `annee`) VALUES -(1, 'S1', 1, 2015), -(2, 'S2', 2, 2015), -(3, 'S3', 3, 2015), -(4, 'S4', 4, 2015), -(5, 'S1', 1, 2016), -(6, 'S2', 2, 2016), -(7, 'S3', 3, 2016), -(8, 'S4', 4, 2016); +INSERT INTO `semestre` (`id_semestre`, `formation`, `nom`, `rang`, `annee`) VALUES +(1, 1, 'S1', 1, 2015), +(2, 1, 'S2', 2, 2015), +(3, 2, 'S3', 3, 2015), +(4, 2, 'S4', 4, 2015), +(5, 1, 'S1', 1, 2016), +(6, 1, 'S2', 2, 2016), +(7, 2, 'S3', 3, 2016), +(8, 2, 'S4', 4, 2016); -- -------------------------------------------------------- @@ -658,6 +717,12 @@ ALTER TABLE `note` ADD CONSTRAINT `note_id_appartenance` FOREIGN KEY (`id_appartenance`) REFERENCES `appartenance` (`id_appartenance`), ADD CONSTRAINT `note_id_controle` FOREIGN KEY (`id_controle`) REFERENCES `controle` (`id_controle`); +-- +-- Contraintes pour la table `semestre` +-- +ALTER TABLE `semestre` + ADD CONSTRAINT `semestre_id_formation` FOREIGN KEY (`formation`) REFERENCES `formation` (`id_formation`); + /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; \ No newline at end of file From 01334b44e6959a615054ec8a6cd05584fd351529 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 13:28:24 +0100 Subject: [PATCH 25/39] =?UTF-8?q?Affichage=20par=20semestre=20enseignant@m?= =?UTF-8?q?es=5Fmodules=20+=20admin@tous=5Fles=5Fmodules=20+=20enseignant@?= =?UTF-8?q?contr=C3=B4les?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/career.php | 8 +-- manager/database.php | 73 +++++++-------------- manager/modules.php | 10 +-- manager/repo/semestre.php | 31 ++++++++- manager/repo/ue.php | 14 ++--- page/_JS/career.js | 13 +++- page/career.php | 121 +++++++++++++++++++++++------------ page/modules.php | 129 +++++++++++++++++++++++++++++++------- 8 files changed, 266 insertions(+), 133 deletions(-) diff --git a/manager/career.php b/manager/career.php index 759d2ff..e1771c5 100755 --- a/manager/career.php +++ b/manager/career.php @@ -74,13 +74,13 @@ require_once __ROOT__.'/manager/database.php'; $anneeCheck = $enseignantCheck && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format if( $anneeCheck ){ // si tout les paramètres sont bons - $UEs = DataBase::getInstance()->getControlesEnseignant($request->enseignant, $_SESSION['semestre_pair'], $request->annee); + $semestreList = DataBase::getInstance()->getControlesEnseignant($request->enseignant, $_SESSION['semestre_pair'], $request->annee); - if( is_array($UEs) ){ // si on a bien un tableau - $answer->UEs = $UEs; // on renvoie dans answer->UEs + if( is_array($semestreList) ){ // si on a bien un tableau + $answer->semestres = $semestreList; // on renvoie dans answer->semestreList $answer->request = 'success'; // et on renvoie success }else // sinon si c'est pas un tableau - $answer->request = $UEs; // on retourne l'erreur + $answer->request = $semestreList; // on retourne l'erreur }else $answer->request = 'param_error'; diff --git a/manager/database.php b/manager/database.php index 2a9511d..af5c681 100755 --- a/manager/database.php +++ b/manager/database.php @@ -385,52 +385,21 @@ class DataBase{ // on vérifie que l'enseignant enseigne bien cette année if( !($enseignantUID=userRepo::UID($enseignant, null, $semestre_pair, $annee)) ) return 'unknown_teacher'; - $UEList = $this->getUEsEnseignant($enseignant, $semestre_pair, $annee); // on récupère la liste des UEs + // on récupère les semestres de cette année + $semestreList = semestreRepo::forTeacher($enseignantUID, $semestre_pair, $annee); - foreach($UEList as $iter=>$UE){ + foreach($semestreList as $iter_s=>$a){ + $semestreList[$iter_s]['UElist'] = ueRepo::forTeacher($enseignantUID, $semestreList[$iter_s]['id']); - // si on a l'UID enseignant & l'UE => on récupère les modules - $getModuleList = DataBase::getPDO()->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 ". + foreach($semestreList[$iter_s]['UElist'] as $iter_u=>$b) + $semestreList[$iter_s]['UElist'][$iter_u]['modules'] = moduleRepo::forTeacher($enseignantUID, $semestreList[$iter_s]['UElist'][$iter_u]['id'], $semestreList[$iter_s]['id']); - "AND ens.id_enseignant = :enseignantUID ". - "AND ue.id_ue = :UEUID ". - "AND s.annee = :annee ". - "AND s.rang % 2 = :semestre_pair ". - "ORDER BY m.nom, m.libelle ASC"); - $getModuleList->execute(array( - ':enseignantUID' => $enseignantUID, - ':UEUID' => $UE['id'], - ':annee' => $annee, - ':semestre_pair' => ($semestre_pair) ? '0' : '1' - )); - - // on ajoute la liste des modules en supprimant les valeurs à indinces numériques - $UEList[$iter]['modules'] = DataBase::delNumeric( $getModuleList->fetchAll() ); } - return $UEList; + return $semestreList; } - /****************************************/ - /*** retourne les UEs d'un enseignant ***/ - /****************************************/ - public function getUEsEnseignant($enseignant, $semestre_pair, $annee){ - // on vérifie que l'enseignant enseigne bien cette année - if( !($enseignantUID=userRepo::UID($enseignant, null, $semestre_pair, $annee)) ) return 'unknown_teacher'; - - // on retourne la liste des UEs en supprimant les doublons à indices numériques - return ueRepo::forTeacher($enseignantUID, $semestre_pair, $annee); - } - - - - @@ -542,28 +511,34 @@ class DataBase{ public function getControlesEnseignant($enseignant, $semestre_pair, $annee){ // on vérifie que le semestre existe et que l'enseignant y enseigne if( !($enseignantUID=userRepo::UID($enseignant, null, $semestre_pair, $annee)) ) return 'unknown_teacher'; + debug(); + // on récupère les semestres de cette année + $semestreList = semestreRepo::forTeacher($enseignantUID, $semestre_pair, $annee); + foreach($semestreList as $iter_s=>$a){ - $UEList = ueRepo::forTeacher($enseignantUID, $semestre_pair, $annee); + $semestreList[$iter_s]['UElist'] = ueRepo::forTeacher($enseignantUID, $semestreList[$iter_s]['id']); - foreach($UEList as $iter_ue=>$a){ - $UEList[$iter_ue]['modules'] = moduleRepo::forTeacher($enseignantUID, $UEList[$iter_ue]['id'], $UEList[$iter_ue]['id_semestre']); + foreach($semestreList[$iter_s]['UElist'] as $iter_u=>$b){ + $semestreList[$iter_s]['UElist'][$iter_u]['modules'] = moduleRepo::forTeacher($enseignantUID, $semestreList[$iter_s]['UElist'][$iter_u]['id'], $semestreList[$iter_s]['id']); - foreach($UEList[$iter_ue]['modules'] as $iter_mod=>$b){ - $UEList[$iter_ue]['modules'][$iter_mod]['controles'] = controleRepo::forTeacher($enseignantUID, $UEList[$iter_ue]['modules'][$iter_mod]['id'], $UEList[$iter_ue]['id_semestre']); - - foreach($UEList[$iter_ue]['modules'][$iter_mod]['controles'] as $iter_ct=>$c){ - $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['grouplist'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + foreach($semestreList[$iter_s]['UElist'][$iter_u]['modules'] as $iter_m=>$c){ + $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'] = controleRepo::forTeacher($enseignantUID, $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['id'], $semestreList[$iter_s]['id']); + + foreach($semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'] as $iter_ct=>$c){ + $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['grouplist'] = noteRepo::forTeacher($semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['id']); - $UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['moyenne'] = noteRepo::moyenneForControle($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); + $semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['moyenne'] = noteRepo::moyenneForControle($semestreList[$iter_s]['UElist'][$iter_u]['modules'][$iter_m]['controles'][$iter_ct]['id']); + + } } } - } + } - return $UEList; + return $semestreList; } diff --git a/manager/modules.php b/manager/modules.php index 5d6c2e5..0fdf249 100755 --- a/manager/modules.php +++ b/manager/modules.php @@ -82,16 +82,16 @@ require_once __ROOT__.'/manager/database.php'; $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, $_SESSION['semestre_pair'], $request->annee); + $semestreList = DataBase::getInstance()->getModulesByUEByEnseignant($request->enseignant, $_SESSION['semestre_pair'], $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 + if( is_array($semestreList) ){ // si on a bien un tableau + $answer->semestres = $semestreList; // 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 + $answer->request = $semestreList; // on retourne l'erreur }else $answer->request = 'param_error'; @@ -121,7 +121,7 @@ require_once __ROOT__.'/manager/database.php'; $answer->semestres = $semestreList; // 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 + $answer->request = $semestreList; // on retourne l'erreur }else $answer->request = 'param_error'; diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 363ac97..6e1a027 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -110,6 +110,35 @@ class semestreRepo extends DBAccess{ + /* retourne la liste des semestres qu'à un enseignant + * + * @enseignant l'UID de l'enseignant en question + * @semestre_pair VRAI si le semestre en cours est pair + * @annee l'année en question + * + * + * @return semestres retourne la liste des semestres répondant aux critères + * @return FALSE retourne FALSE si aucun semestre ne correspond aux critères + * + */ + public static function forTeacher($enseignant, $semestre_pair, $annee){ + $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + "FROM semestre as s, formation as f, enseignement as ens, mcc_module as mcc_m, mcc_ue ". + "WHERE s.id_semestre = mcc_ue.id_semestre ". // semestre <-> mcc_ue + "AND s.formation = f.id_formation ". // semestre <-> formation + "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". // mcc_ue <-> mcc_module + "AND mcc_m.id_mcc_module = ens.id_mcc_module ". // mcc_module <-> enseignement + + "AND ens.id_enseignant = :enseignant ". + "AND s.rang % 2 = :semestre_pair ". + "AND s.annee = :annee ". + "ORDER BY s.rang ASC"); + $getSemestreList->execute(array( ':enseignant' => $enseignant, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + + return DataBase::delNumeric( $getSemestreList->fetchAll() ); + } + + /* retourne la liste des semestres d'une année * * @annee l'année en question @@ -120,7 +149,7 @@ class semestreRepo extends DBAccess{ * */ public static function forYear($annee){ - $getSemestreList = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". "FROM semestre as s, formation as f ". "WHERE s.formation = f.id_formation ". "AND annee = :annee ". diff --git a/manager/repo/ue.php b/manager/repo/ue.php index 733c9bb..9be1d26 100755 --- a/manager/repo/ue.php +++ b/manager/repo/ue.php @@ -73,16 +73,15 @@ class ueRepo extends DBAccess{ - /* RENVOIE LA LISTE DES UEs QU'ENSEIGNE UN ENSEIGNANT POUR UNE ANNEE + /* RENVOIE LA LISTE DES UEs QU'ENSEIGNE UN ENSEIGNANT POUR UN SEMESTRE * * @enseignant Identifiant de l'enseignant - * @semestre_pair VRAI si le semestre est pair - * @annee l'année en cours + * @semestre l'UID du semestre en question * - * @return UEs retourne un tableau contenant les UEs de l'enseignant pour cette année + * @return UEs retourne un tableau contenant les UEs de l'enseignant pour ce semestre * */ - public static function forTeacher($enseignant, $semestre_pair, $annee){ + public static function forTeacher($enseignant, $semestre){ // on récupère les modules $getUesForTeacher = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". "FROM enseignement as ens, semestre as s, ue, mcc_ue, mcc_module as mcc_m ". @@ -93,11 +92,10 @@ class ueRepo extends DBAccess{ "AND mcc_ue.id_ue = ue.id_ue ". "AND ens.id_enseignant = :enseignant ". - "AND s.rang % 2 = :semestre_pair ". - "AND s.annee = :annee ". + "AND s.id_semestre = :semestre ". "ORDER BY ue.nom, ue.libelle ASC"); - $getUesForTeacher->execute(array( ':enseignant' => $enseignant, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + $getUesForTeacher->execute(array( ':enseignant' => $enseignant, ':semestre' => $semestre )); return DataBase::delNumeric( $getUesForTeacher->fetchAll() ); } diff --git a/page/_JS/career.js b/page/_JS/career.js index 1bd63b7..e68d675 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -5,16 +5,23 @@ /********************************/ /* GESTION DE L'AFFINAGE PAR UE */ /********************************/ -var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE]"); +var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre]"); for( var i = 0 ; i < partList.length ; i++ ){ partList[i].addEventListener('click', function(e){ var tableauParent = e.target.parentNode.parentNode.parentNode; - if( tableauParent.tagName == 'TABLE' && tableauParent.getAttribute('name') == 'UE' && e.target.dataset.hasOwnProperty('value') ){ - pageM.vars[1] = 'u:'+e.target.dataset.value; + if( tableauParent.tagName == 'TABLE' && e.target.dataset.hasOwnProperty('value') ){ + /* SI c'est une affinage par SEMESTRE */ + if( tableauParent.getAttribute('name') == 'semestre' ) + pageM.vars[1] = 's:'+e.target.dataset.value; + + /* SI c'est un affinage par UE */ + if( tableauParent.getAttribute('name') == 'UE' ) + pageM.vars[1] = 'u:'+e.target.dataset.value; + // si on a '*' comme valeur, on l'enlève if( /\*$/.test(pageM.vars[1]) ) pageM.vars.pop(); diff --git a/page/career.php b/page/career.php index 2ba187e..ff565cf 100755 --- a/page/career.php +++ b/page/career.php @@ -5,8 +5,6 @@ require_once __ROOT__.'/manager/modules.php'; require_once __ROOT__.'/manager/career.php'; - - /*** GESTION DES PARAMETRES OPTIONNELS ***/ // on initialise les paramètres optionnels @@ -14,6 +12,7 @@ require_once __ROOT__.'/manager/career.php'; $groupeOpt = null; $etudiantOpt = null; $ueOpt = null; + $semestreOpt = null; // on cherche dans toutes les variables _get si on trouve des paramètres foreach($_POST as $k=>$v){ @@ -21,21 +20,25 @@ require_once __ROOT__.'/manager/career.php'; if( preg_match('/^g:(.+)$/', $k, $m) ) // g:nomGroupe $groupeOpt = $m[1]; - if( preg_match('/^c:(.+)$/', $k, $m) ) // s:nomSemestre + if( preg_match('/^c:(.+)$/', $k, $m) ) // c:idControle $controleOpt = $m[1]; - if( preg_match('/^e:(.+)$/', $k, $m) ) // s:nomSemestre + if( preg_match('/^e:(.+)$/', $k, $m) ) // e:idEtudiant $etudiantOpt = $m[1]; - if( preg_match('/^u:(.+)$/', $k, $m) ) // s:nomSemestre + if( preg_match('/^u:(.+)$/', $k, $m) ) // u:nomUe $ueOpt = $m[1]; + if( preg_match('/^s:(.+)$/', $k, $m) ) // s:nomSemestre + $semestreOpt = $m[1]; + } $controleOpt = ($controleOpt == null || $controleOpt == '*') ? null : $controleOpt; $groupeOpt = ($groupeOpt == null || $groupeOpt == '*') ? null : $groupeOpt; $etudiantOpt = ($etudiantOpt == null || $etudiantOpt == '*') ? null : $etudiantOpt; $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; + $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; /**************************************** * * @@ -63,7 +66,6 @@ require_once __ROOT__.'/manager/career.php'; if( permission('student') ){ // si l'utilisateur est connecté et que c'est un élève $request = new stdClass(); $answer = new stdClass(); - debug(); $request->level_1 = 'getNotesEtudiant'; $request->etudiant = $_SESSION['identifiant']; @@ -157,7 +159,6 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e $request->level_1 = 'getControlesEnseignant'; $request->enseignant = $_SESSION['identifiant']; - $request->semestre = $_SESSION['semestre']; $request->annee = $_SESSION['annee']; career_switch_level_1($request, $answer); @@ -167,61 +168,101 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e echo "
    "; + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeNomsSemestres = array(); + $ListeNomsUE = array(); + foreach($answer->semestres as $semestre){ + array_push( $ListeNomsSemestres, $semestre['nom'] ); + + /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ + foreach($semestre['UElist'] as $UE) + array_push( $ListeNomsUE, $UE['nom'] ); + } + + $ListeNomsSemestres = array_unique($ListeNomsSemestres); + $ListeNomsUE = array_unique($ListeNomsUE); + + echo "
    '.$semestre['nom'].' - '.$UE['nom'].' - '.$UE['libelle'].''.$semestre['nom_formation'].' - '.$semestre['nom'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].''.$UE['nom'].' - '.$UE['libelle'].'
    "; + if( $semestreOpt == null ) echo ""; + else echo ""; + + foreach($ListeNomsSemestres as $NomSemestre) + if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
    TousTous".$NomSemestre.'".$NomSemestre.'
    "; + + + + + echo ""; if( $ueOpt == null ) echo ""; else echo ""; - foreach($answer->UEs as $UE) - if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné - echo "'; + foreach($ListeNomsUE as $NomUE) + if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné + echo "'; else // sinon on affiche normalement - echo "'; + echo "'; echo "
    TousTous".$UE['nom'].'".$NomUE.'".$UE['nom'].'".$NomUE.'
    "; - if( count($answer->UEs) > 0 ){ // si au moins un UE - foreach($answer->UEs as $UE){ // pour chaque UE - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL + if( count($answer->semestres) > 0 ){ // si au moins un UE - if( count($UE['modules']) > 0 ){ // s'il y a au moins un module + foreach($answer->semestres as $semestre){ - foreach($UE['modules'] as $module){ // pour chaque module - echo ""; - echo ''; + if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage - if( count($module['controles']) > 0 ){ // s'il y a au moins un contrôle pour ce module + foreach($semestre['UElist'] as $UE){ // pour chaque UE - foreach($module['controles'] as $controle){ // pour chaque contrôle + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL - echo ''; - echo ""; - - echo ""; + if( count($UE['modules']) > 0 ){ // s'il y a au moins un module - if( $controle['moyenne'] == null ) // si il y a au moins une note pour ce contrôle - echo ''; - else - echo ''; - // echo ''; - - echo ''; - echo ''; - - // echo "'; + foreach($UE['modules'] as $module){ // pour chaque module + echo "
    '.$UE['nom'].' - '.$module['nom'].' - '.$module['libelle'].'
    ".$controle['intitule']."".$module['nom']." - ".$module['libelle']."Pas notéMoyenne de '.number_format($controle['moyenne'], 2).' / '.$controle['base'].''.number_format($controle['moyenne'], 2).'Coefficient '.number_format($controle['coefficient'], 2).'
    "; - // echo '
    "; + echo ''; + + if( count($module['controles']) > 0 ){ // s'il y a au moins un contrôle pour ce module + + foreach($module['controles'] as $controle){ // pour chaque contrôle + + echo ''; + echo ""; + + echo ""; + echo ""; + + if( $controle['moyenne'] == null ) // si il y a au moins une note pour ce contrôle + echo ''; + else + echo ''; + // echo ''; + + echo ''; + echo ''; + + // echo "'; + } + + }else // si aucun contrôle pour ce module + echo ""; + + echo ''; } - }else // si aucun contrôle pour ce module - echo ""; + } + echo '
    '.$semestre['nom_formation'].' - '.$semestre['nom'].'
    ".$controle['intitule']."".$module['nom']." - ".$module['libelle']."".$UE['nom']." - ".$UE['libelle']."Pas notéMoyenne de '.number_format($controle['moyenne'], 2).' / '.$controle['base'].''.number_format($controle['moyenne'], 2).'Coefficient '.number_format($controle['coefficient'], 2).'
    "; + // echo '
    Aucun contrôle trouvé
    Aucun contrôle trouvé
    '; - echo ''; } - } - echo ''; } + } } diff --git a/page/modules.php b/page/modules.php index 7fb7a7d..2783814 100755 --- a/page/modules.php +++ b/page/modules.php @@ -102,6 +102,28 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un + + + + + + + + + + + + + + + + + + + + + + "; + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeNomsSemestres = array(); + $ListeNomsUE = array(); + foreach($answer->semestres as $semestre){ + array_push( $ListeNomsSemestres, $semestre['nom'] ); + + /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ + foreach($semestre['UElist'] as $UE) + array_push( $ListeNomsUE, $UE['nom'] ); + } + + $ListeNomsSemestres = array_unique($ListeNomsSemestres); + $ListeNomsUE = array_unique($ListeNomsUE); + + echo ""; + if( $semestreOpt == null ) echo ""; + else echo ""; + + foreach($ListeNomsSemestres as $NomSemestre) + if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
    TousTous".$NomSemestre.'".$NomSemestre.'
    "; + + + + echo ""; if( $ueOpt == null ) echo ""; else echo ""; - foreach($answer->UEs as $UE) - if( $UE['nom'] == $ueOpt ) // si c'est le semestre séléctionné - echo "'; + foreach($ListeNomsUE as $NomUE) + if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné + echo "'; else // sinon on affiche normalement - echo "'; + echo "'; echo "
    TousTous".$UE['nom'].'".$NomUE.'".$UE['nom'].'".$NomUE.'
    "; - foreach($answer->UEs as $UE){ - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ - - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } - - echo ''; - echo '
    '.$UE['semestre'].' - '.$UE['nom'].' - '.$UE['libelle'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].'
    '; + foreach($answer->semestres as $semestre){ + + if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage + + foreach($semestre['UElist'] as $UE){ + + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage + + echo ""; + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + foreach($UE['modules'] as $MODULE){ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo '
    '.$semestre['nom_formation'].' - '.$semestre['nom'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].''.$UE['nom'].' - '.$UE['libelle'].'
    '; + + } + } } + } //////////////////////////////////////////////////////////////////////////////// echo '
    '; @@ -168,6 +228,29 @@ if( permission('teacher') ){ // si l'utilisateur est un prof + + + + + + + + + + + + + + + + + + + + + + + Date: Mon, 16 Nov 2015 17:03:16 +0100 Subject: [PATCH 26/39] Affinage par @formation pour enseignant@modules + admin@modules --- page/_JS/modules.js | 20 +++++++++--- page/modules.php | 76 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 78 insertions(+), 18 deletions(-) diff --git a/page/_JS/modules.js b/page/_JS/modules.js index 87903cd..14cfbe8 100644 --- a/page/_JS/modules.js +++ b/page/_JS/modules.js @@ -5,7 +5,7 @@ /********************************/ /* GESTION DE L'AFFINAGE PAR UE */ /********************************/ -var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre]"); +var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre], #CONTAINER > section[name] > table.partlist[name=formation]"); for( var i = 0 ; i < partList.length ; i++ ){ @@ -14,16 +14,28 @@ for( var i = 0 ; i < partList.length ; i++ ){ if( tableauParent.tagName == 'TABLE' && e.target.dataset.hasOwnProperty('value') ){ + /* SI c'est une affinage par FORMATION */ + if( tableauParent.getAttribute('name') == 'formation' ){ + pageM.vars[1] = 'f:'+e.target.dataset.value; + if( pageM.vars.length > 2 ) // si un deuxième affinage existe, on le supprime lors du choix de la formation + pageM.vars.pop(); + } + /* SI c'est une affinage par SEMESTRE */ if( tableauParent.getAttribute('name') == 'semestre' ) - pageM.vars[1] = 's:'+e.target.dataset.value; + pageM.vars[2] = 's:'+e.target.dataset.value; /* SI c'est un affinage par UE */ if( tableauParent.getAttribute('name') == 'UE' ) - pageM.vars[1] = 'u:'+e.target.dataset.value; + pageM.vars[2] = 'u:'+e.target.dataset.value; + + // si la formation n'est pas définie, on l'active + if( !/^f:/.test(pageM.vars[1]) ) + pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] option[data-value].active').dataset.formation; + // si on a '*' comme valeur, on l'enlève - if( /\*$/.test(pageM.vars[1]) ) + if( /\*$/.test(pageM.vars[2]) ) pageM.vars.pop(); reload(); diff --git a/page/modules.php b/page/modules.php index 2783814..a2fba9f 100755 --- a/page/modules.php +++ b/page/modules.php @@ -7,8 +7,9 @@ require_once __ROOT__.'/manager/modules.php'; /*** GESTION DES PARAMETRES OPTIONNELS ***/ // on initialise les paramètres optionnels - $ueOpt = null; - $semestreOpt = null; + $ueOpt = null; + $semestreOpt = null; + $formationOpt = null; // on cherche dans toutes les variables _get si on trouve des paramètres foreach($_POST as $k=>$v){ @@ -19,10 +20,14 @@ require_once __ROOT__.'/manager/modules.php'; if( preg_match('/^u:(.+)$/', $k, $m) ) // u:nomUE $ueOpt = $m[1]; + if( preg_match('/^f:(.+)$/', $k, $m) ) // f:codeFormation + $formationOpt = $m[1]; + } - $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; - $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; + $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; + $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; + $formationOpt = ($formationOpt == null || $formationOpt == '*') ? null : $formationOpt; /**************************************** @@ -146,18 +151,41 @@ if( permission('teacher') ){ // si l'utilisateur est un prof /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ $ListeNomsSemestres = array(); + $ListeNomsFormations = array(); $ListeNomsUE = array(); - foreach($answer->semestres as $semestre){ + + // on selectionne les formations présentes + foreach($answer->semestres as $semestre) + array_push( $ListeNomsFormations, $semestre['formation'] ); + + // si la formation optionnelle n'est pas définie ou pas dans la liste, on la définit + $ListeNomsFormations = array_unique($ListeNomsFormations); + if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; + + + foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ array_push( $ListeNomsSemestres, $semestre['nom'] ); /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ foreach($semestre['UElist'] as $UE) array_push( $ListeNomsUE, $UE['nom'] ); - } + }} $ListeNomsSemestres = array_unique($ListeNomsSemestres); $ListeNomsUE = array_unique($ListeNomsUE); + + + echo ""; + foreach($ListeNomsFormations as $NomFormation) + if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
    ".$NomFormation.'".$NomFormation.'
    "; + + + echo ""; if( $semestreOpt == null ) echo ""; else echo ""; @@ -171,8 +199,6 @@ if( permission('teacher') ){ // si l'utilisateur est un prof - - echo "
    TousTous
    "; if( $ueOpt == null ) echo ""; else echo ""; @@ -186,9 +212,10 @@ if( permission('teacher') ){ // si l'utilisateur est un prof + foreach($answer->semestres as $semestre){ - if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage + if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage foreach($semestre['UElist'] as $UE){ @@ -273,18 +300,41 @@ if( permission('admin') ){ // si l'utilisateur est un admin /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ $ListeNomsSemestres = array(); + $ListeNomsFormations = array(); $ListeNomsUE = array(); - foreach($answer->semestres as $semestre){ + + // on selectionne les formations présentes + foreach($answer->semestres as $semestre) + array_push( $ListeNomsFormations, $semestre['formation'] ); + + // si la formation optionnelle n'est pas définie, on la définit + $ListeNomsFormations = array_unique($ListeNomsFormations); + if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; + + + foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ array_push( $ListeNomsSemestres, $semestre['nom'] ); /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ foreach($semestre['UElist'] as $UE) array_push( $ListeNomsUE, $UE['nom'] ); - } + }} $ListeNomsSemestres = array_unique($ListeNomsSemestres); $ListeNomsUE = array_unique($ListeNomsUE); + + + echo "
    TousTous
    "; + foreach($ListeNomsFormations as $NomFormation) + if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
    ".$NomFormation.'".$NomFormation.'
    "; + + + echo ""; if( $semestreOpt == null ) echo ""; else echo ""; @@ -298,8 +348,6 @@ if( permission('admin') ){ // si l'utilisateur est un admin - - echo "
    TousTous
    "; if( $ueOpt == null ) echo ""; else echo ""; @@ -315,7 +363,7 @@ if( permission('admin') ){ // si l'utilisateur est un admin foreach($answer->semestres as $semestre){ - if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage + if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage foreach($semestre['UElist'] as $UE){ From d6d10b99fcb597dd94e0ce1c981ce70d33d2db52 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 19:07:39 +0100 Subject: [PATCH 27/39] =?UTF-8?q?Ajout=20affinage=20par=20formation=20ense?= =?UTF-8?q?igant@contr=C3=B4les?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- page/_JS/career.js | 21 +++++++++++++++++---- page/_JS/modules.js | 5 ++--- page/career.php | 46 +++++++++++++++++++++++++++++++++++---------- 3 files changed, 55 insertions(+), 17 deletions(-) diff --git a/page/_JS/career.js b/page/_JS/career.js index e68d675..f95f7cf 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -5,7 +5,7 @@ /********************************/ /* GESTION DE L'AFFINAGE PAR UE */ /********************************/ -var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre]"); +var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre], #CONTAINER > section[name] > table.partlist[name=formation]"); for( var i = 0 ; i < partList.length ; i++ ){ @@ -14,16 +14,29 @@ for( var i = 0 ; i < partList.length ; i++ ){ if( tableauParent.tagName == 'TABLE' && e.target.dataset.hasOwnProperty('value') ){ + /* SI c'est une affinage par FORMATION */ + if( tableauParent.getAttribute('name') == 'formation' ){ + pageM.vars[1] = 'f:'+e.target.dataset.value; + if( pageM.vars.length > 2 ) // si un deuxième affinage existe, on le supprime lors du choix de la formation + pageM.vars.pop(); + } + /* SI c'est une affinage par SEMESTRE */ if( tableauParent.getAttribute('name') == 'semestre' ) - pageM.vars[1] = 's:'+e.target.dataset.value; + pageM.vars[2] = 's:'+e.target.dataset.value; /* SI c'est un affinage par UE */ if( tableauParent.getAttribute('name') == 'UE' ) - pageM.vars[1] = 'u:'+e.target.dataset.value; + pageM.vars[2] = 'u:'+e.target.dataset.value; + + // si la formation n'est pas définie, on l'active + if( !/^f:/.test(pageM.vars[1]) ) + if( document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active') != null ) + pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active').dataset.value; + // si on a '*' comme valeur, on l'enlève - if( /\*$/.test(pageM.vars[1]) ) + if( /\*$/.test(pageM.vars[2]) ) pageM.vars.pop(); reload(); diff --git a/page/_JS/modules.js b/page/_JS/modules.js index 14cfbe8..3229198 100644 --- a/page/_JS/modules.js +++ b/page/_JS/modules.js @@ -32,7 +32,8 @@ for( var i = 0 ; i < partList.length ; i++ ){ // si la formation n'est pas définie, on l'active if( !/^f:/.test(pageM.vars[1]) ) - pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] option[data-value].active').dataset.formation; + if( document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active') != null ) + pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active').dataset.value; // si on a '*' comme valeur, on l'enlève if( /\*$/.test(pageM.vars[2]) ) @@ -44,6 +45,4 @@ for( var i = 0 ; i < partList.length ; i++ ){ } - - --> \ No newline at end of file diff --git a/page/career.php b/page/career.php index ff565cf..8c643ac 100755 --- a/page/career.php +++ b/page/career.php @@ -8,11 +8,12 @@ require_once __ROOT__.'/manager/career.php'; /*** GESTION DES PARAMETRES OPTIONNELS ***/ // on initialise les paramètres optionnels - $controleOpt = null; - $groupeOpt = null; - $etudiantOpt = null; - $ueOpt = null; - $semestreOpt = null; + $controleOpt = null; + $groupeOpt = null; + $etudiantOpt = null; + $ueOpt = null; + $semestreOpt = null; + $formationOpt = null; // on cherche dans toutes les variables _get si on trouve des paramètres foreach($_POST as $k=>$v){ @@ -32,6 +33,9 @@ require_once __ROOT__.'/manager/career.php'; if( preg_match('/^s:(.+)$/', $k, $m) ) // s:nomSemestre $semestreOpt = $m[1]; + if( preg_match('/^f:(.+)$/', $k, $m) ) // f:codeFormation + $formationOpt = $m[1]; + } $controleOpt = ($controleOpt == null || $controleOpt == '*') ? null : $controleOpt; @@ -39,6 +43,7 @@ require_once __ROOT__.'/manager/career.php'; $etudiantOpt = ($etudiantOpt == null || $etudiantOpt == '*') ? null : $etudiantOpt; $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; + $formationOpt = ($formationOpt == null || $formationOpt == '*') ? null : $formationOpt; /**************************************** * * @@ -170,18 +175,41 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ $ListeNomsSemestres = array(); + $ListeNomsFormations = array(); $ListeNomsUE = array(); - foreach($answer->semestres as $semestre){ + + // on selectionne les formations présentes + foreach($answer->semestres as $semestre) + array_push( $ListeNomsFormations, $semestre['formation'] ); + + // si la formation optionnelle n'est pas définie ou pas dans la liste, on la définit + $ListeNomsFormations = array_unique($ListeNomsFormations); + if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; + + + foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ array_push( $ListeNomsSemestres, $semestre['nom'] ); /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ foreach($semestre['UElist'] as $UE) array_push( $ListeNomsUE, $UE['nom'] ); - } + }} $ListeNomsSemestres = array_unique($ListeNomsSemestres); $ListeNomsUE = array_unique($ListeNomsUE); + + + echo "
    TousTous
    "; + foreach($ListeNomsFormations as $NomFormation) + if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + echo "
    ".$NomFormation.'".$NomFormation.'
    "; + + + echo ""; if( $semestreOpt == null ) echo ""; else echo ""; @@ -195,8 +223,6 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e - - echo "
    TousTous
    "; if( $ueOpt == null ) echo ""; else echo ""; @@ -214,7 +240,7 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e foreach($answer->semestres as $semestre){ - if( $semestreOpt == null || $semestre['nom'] == $semestreOpt ){ // on affiche les semestres en fonction de l'affinage + if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage foreach($semestre['UElist'] as $UE){ // pour chaque UE From b84a064fb414a233f32cab567b66978ce0c0de9f Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 21:42:00 +0100 Subject: [PATCH 28/39] =?UTF-8?q?M=C3=A0j=20BDD=20ajout=20de=20la=20table?= =?UTF-8?q?=20FORMATION=20+=20refactor=20de=20page/career=20+=20page/modul?= =?UTF-8?q?es=20en=20utilisant=20maintenant=20les=20identifiants=20uniques?= =?UTF-8?q?=20de=20BDD=20(pour=20formations,=20semestre,=20UE)=20afin=20de?= =?UTF-8?q?=20permettre=20des=20UEs=20de=20m=C3=AAme=20nom=20(=C3=A0=20tra?= =?UTF-8?q?vers=20diff=C3=A9rentes=20formations)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 6 +- manager/repo/semestre.php | 16 +-- page/career.php | 108 +++++++++++-------- page/modules.php | 219 +++++++++++++++++++++++--------------- xdoc/sid.sql | 31 +++--- 5 files changed, 232 insertions(+), 148 deletions(-) diff --git a/css/global.css b/css/global.css index fe219f9..ea808f2 100755 --- a/css/global.css +++ b/css/global.css @@ -338,12 +338,14 @@ body.trHoverActivated tr:hover td .confirm.active{ /* @radius */ #CONTAINER > section > .partlist td:first-child{ - border-radius: 5px 0 0 5px; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; } /* @border + @radius */ #CONTAINER > section > .partlist td:last-child{ - border-radius: 0 5px 5px 0; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; border-right: 1px solid #2dcc70; } diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 6e1a027..0584eab 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -57,9 +57,9 @@ class semestreRepo extends DBAccess{ */ public static function info($semestreUID){ // on considère que le semestre existe - $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as s.id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as s.id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". "FROM semestre as s, formation as f ". - "WHERE s.formation = f.id_formation ". + "WHERE s.id_formation = f.id_formation ". "AND id_semestre = :semestreUID"); $getSemestreInfo->execute(array( ':semestreUID' => $semestreUID )); @@ -89,9 +89,9 @@ class semestreRepo extends DBAccess{ // on formate les variables $semestre_pair = ($semestre_pair) ? '0' : '1'; - $getSemestreUID = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.code as formation, f.nom as nom_formation ". + $getSemestreUID = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation ". "FROM semestre as s, appartenance as app, formation as f ". - "WHERE s.formation = f.id_formation ". + "WHERE s.id_formation = f.id_formation ". "AND app.id_semestre = s.id_semestre ". "AND app.id_etudiant = :etudiant ". @@ -122,10 +122,10 @@ class semestreRepo extends DBAccess{ * */ public static function forTeacher($enseignant, $semestre_pair, $annee){ - $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". "FROM semestre as s, formation as f, enseignement as ens, mcc_module as mcc_m, mcc_ue ". "WHERE s.id_semestre = mcc_ue.id_semestre ". // semestre <-> mcc_ue - "AND s.formation = f.id_formation ". // semestre <-> formation + "AND s.id_formation = f.id_formation ". // semestre <-> formation "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". // mcc_ue <-> mcc_module "AND mcc_m.id_mcc_module = ens.id_mcc_module ". // mcc_module <-> enseignement @@ -149,9 +149,9 @@ class semestreRepo extends DBAccess{ * */ public static function forYear($annee){ - $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". "FROM semestre as s, formation as f ". - "WHERE s.formation = f.id_formation ". + "WHERE s.id_formation = f.id_formation ". "AND annee = :annee ". "ORDER BY rang ASC"); $getSemestreList->execute(array( ':annee' => $annee )); diff --git a/page/career.php b/page/career.php index 8c643ac..9ed0d42 100755 --- a/page/career.php +++ b/page/career.php @@ -174,64 +174,88 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ - $ListeNomsSemestres = array(); - $ListeNomsFormations = array(); - $ListeNomsUE = array(); + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDUE = array(); - // on selectionne les formations présentes - foreach($answer->semestres as $semestre) - array_push( $ListeNomsFormations, $semestre['formation'] ); - - // si la formation optionnelle n'est pas définie ou pas dans la liste, on la définit - $ListeNomsFormations = array_unique($ListeNomsFormations); - if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; - - - foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ - array_push( $ListeNomsSemestres, $semestre['nom'] ); - - /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ - foreach($semestre['UElist'] as $UE) - array_push( $ListeNomsUE, $UE['nom'] ); - }} - - $ListeNomsSemestres = array_unique($ListeNomsSemestres); - $ListeNomsUE = array_unique($ListeNomsUE); + // Vérification de la formation si elle est définie + $verificationUIDFormations = array(); + foreach($answer->semestres as $semestre) // on récupère la liste des UID de FORMATIONS + if( !in_array($semestre['id_formation'], $verificationUIDFormations) ) + array_push($verificationUIDFormations, $semestre['id_formation']); + // si la formation optionnelle n'est pas définie ou incohérente, on le fait (première valeur trouvée) + if( $formationOpt == null || !in_array($formationOpt, $verificationUIDFormations) ) + $formationOpt = $verificationUIDFormations[0]; + /**************************/ + /* AFFINAGE PAR FORMATION */ + /**************************/ echo "
    TousTous
    "; - foreach($ListeNomsFormations as $NomFormation) - if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - echo "'; + foreach($answer->semestres as $semestre){ if( !in_array($semestre['id_formation'], $ListeUIDFormations) ){ + + + if( $semestre['id_formation'] == $formationOpt ) // si c'est la formation séléctionnée + echo "'; + else // sinon on affiche normalement + echo "'; + + // on ajoute la formation à la liste pour ne pas la répéter + array_push($ListeUIDFormations, $semestre['id_formation']); + + }} echo "
    ".$NomFormation.'".$NomFormation.'".$semestre['formation'].'".$semestre['formation'].'
    "; + + /*************************/ + /* AFFINAGE PAR SEMESTRE */ + /*************************/ echo ""; - if( $semestreOpt == null ) echo ""; - else echo ""; - - foreach($ListeNomsSemestres as $NomSemestre) - if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - echo "'; + if( $semestreOpt == null ) echo ""; + else echo ""; + + /* On récupère la liste des SEMESTRES en accord avec la FORMATION sélectionnée */ + foreach($answer->semestres as $semestre){ if( $semestre['id_formation'] == $formationOpt && !in_array($semestre['id'], $ListeUIDSemestres) ){ + + if( $semestre['id'] == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + + + // on ajoute le semestre à la liste pour ne pas le répéter + array_push($ListeUIDSemestres, $semestre['id']); + + }} + echo ""; // ajouter un semestre echo "
    TousTous".$NomSemestre.'".$NomSemestre.'TousTous".$semestre['nom'].'".$semestre['nom'].'+
    "; + + /*******************/ + /* AFFINAGE PAR UE */ + /*******************/ echo ""; if( $ueOpt == null ) echo ""; else echo ""; - - foreach($ListeNomsUE as $NomUE) - if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné - echo "'; + + /* On récupère la liste des UEs en accord avec la FORMATION et le SEMESTRE sélectionnés */ + foreach($answer->semestres as $semestre){ if( $semestre['id_formation'] == $formationOpt && in_array($semestre['id'], $ListeUIDSemestres) ){ + foreach($semestre['UElist'] as $UE){ if( !in_array($UE['id'], $ListeUIDUE) ){ + if( $UE['id'] == $ueOpt ) // si c'est l'UE séléctionnée + echo "'; else // sinon on affiche normalement - echo "'; + echo "'; + + // on ajoute l'UE à la liste pour ne pas le répéter + array_push($ListeUIDUE, $UE['id']); + }} + }} + echo ""; // ajouter un UE echo "
    TousTous".$NomUE.'".$UE['nom'].'".$NomUE.'".$UE['nom'].'+
    "; @@ -240,11 +264,11 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e foreach($answer->semestres as $semestre){ - if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage + if( ($semestreOpt == null || $semestre['id'] == $semestreOpt) && ($formationOpt == null || $semestre['id_formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage foreach($semestre['UElist'] as $UE){ // pour chaque UE - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL + if( $ueOpt == null || $UE['id'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL if( count($UE['modules']) > 0 ){ // s'il y a au moins un module diff --git a/page/modules.php b/page/modules.php index a2fba9f..539b3d7 100755 --- a/page/modules.php +++ b/page/modules.php @@ -150,64 +150,88 @@ if( permission('teacher') ){ // si l'utilisateur est un prof echo "
    "; /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ - $ListeNomsSemestres = array(); - $ListeNomsFormations = array(); - $ListeNomsUE = array(); + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDUE = array(); - // on selectionne les formations présentes - foreach($answer->semestres as $semestre) - array_push( $ListeNomsFormations, $semestre['formation'] ); - - // si la formation optionnelle n'est pas définie ou pas dans la liste, on la définit - $ListeNomsFormations = array_unique($ListeNomsFormations); - if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; - - - foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ - array_push( $ListeNomsSemestres, $semestre['nom'] ); - - /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ - foreach($semestre['UElist'] as $UE) - array_push( $ListeNomsUE, $UE['nom'] ); - }} - - $ListeNomsSemestres = array_unique($ListeNomsSemestres); - $ListeNomsUE = array_unique($ListeNomsUE); + // Vérification de la formation si elle est définie + $verificationUIDFormations = array(); + foreach($answer->semestres as $semestre) // on récupère la liste des UID de FORMATIONS + if( !in_array($semestre['id_formation'], $verificationUIDFormations) ) + array_push($verificationUIDFormations, $semestre['id_formation']); + // si la formation optionnelle n'est pas définie ou incohérente, on le fait (première valeur trouvée) + if( $formationOpt == null || !in_array($formationOpt, $verificationUIDFormations) ) + $formationOpt = $verificationUIDFormations[0]; + /**************************/ + /* AFFINAGE PAR FORMATION */ + /**************************/ echo ""; - foreach($ListeNomsFormations as $NomFormation) - if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - echo "'; + foreach($answer->semestres as $semestre){ if( !in_array($semestre['id_formation'], $ListeUIDFormations) ){ + + + if( $semestre['id_formation'] == $formationOpt ) // si c'est la formation séléctionnée + echo "'; + else // sinon on affiche normalement + echo "'; + + // on ajoute la formation à la liste pour ne pas la répéter + array_push($ListeUIDFormations, $semestre['id_formation']); + + }} echo "
    ".$NomFormation.'".$NomFormation.'".$semestre['formation'].'".$semestre['formation'].'
    "; + + /*************************/ + /* AFFINAGE PAR SEMESTRE */ + /*************************/ echo ""; - if( $semestreOpt == null ) echo ""; - else echo ""; - - foreach($ListeNomsSemestres as $NomSemestre) - if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - echo "'; + if( $semestreOpt == null ) echo ""; + else echo ""; + + /* On récupère la liste des SEMESTRES en accord avec la FORMATION sélectionnée */ + foreach($answer->semestres as $semestre){ if( $semestre['id_formation'] == $formationOpt && !in_array($semestre['id'], $ListeUIDSemestres) ){ + + if( $semestre['id'] == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + + + // on ajoute le semestre à la liste pour ne pas le répéter + array_push($ListeUIDSemestres, $semestre['id']); + + }} + echo ""; // ajouter un semestre echo "
    TousTous".$NomSemestre.'".$NomSemestre.'TousTous".$semestre['nom'].'".$semestre['nom'].'+
    "; + + /*******************/ + /* AFFINAGE PAR UE */ + /*******************/ echo ""; if( $ueOpt == null ) echo ""; else echo ""; - - foreach($ListeNomsUE as $NomUE) - if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné - echo "'; + + /* On récupère la liste des UEs en accord avec la FORMATION et le SEMESTRE sélectionnés */ + foreach($answer->semestres as $semestre){ if( $semestre['id_formation'] == $formationOpt && in_array($semestre['id'], $ListeUIDSemestres) ){ + foreach($semestre['UElist'] as $UE){ if( !in_array($UE['id'], $ListeUIDUE) ){ + if( $UE['id'] == $ueOpt ) // si c'est l'UE séléctionnée + echo "'; else // sinon on affiche normalement - echo "'; + echo "'; + + // on ajoute l'UE à la liste pour ne pas le répéter + array_push($ListeUIDUE, $UE['id']); + }} + }} + echo ""; // ajouter un UE echo "
    TousTous".$NomUE.'".$UE['nom'].'".$NomUE.'".$UE['nom'].'+
    "; @@ -215,11 +239,11 @@ if( permission('teacher') ){ // si l'utilisateur est un prof foreach($answer->semestres as $semestre){ - if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage + if( ($semestreOpt == null || $semestre['id'] == $semestreOpt) && ($formationOpt == null || $semestre['id_formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage foreach($semestre['UElist'] as $UE){ - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage + if( $ueOpt == null || $UE['id'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage echo ""; echo ""; @@ -293,81 +317,108 @@ if( permission('admin') ){ // si l'utilisateur est un admin modules_switch_level_1($request, $answer); + if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// echo "
    "; /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ - $ListeNomsSemestres = array(); - $ListeNomsFormations = array(); - $ListeNomsUE = array(); + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDUE = array(); - // on selectionne les formations présentes - foreach($answer->semestres as $semestre) - array_push( $ListeNomsFormations, $semestre['formation'] ); - - // si la formation optionnelle n'est pas définie, on la définit - $ListeNomsFormations = array_unique($ListeNomsFormations); - if( $formationOpt == null || !in_array($formationOpt, $ListeNomsFormations) ) $formationOpt = $ListeNomsFormations[0]; - - - foreach($answer->semestres as $semestre){ if( $semestre['formation'] == $formationOpt ){ - array_push( $ListeNomsSemestres, $semestre['nom'] ); - - /* ON RECUPERE UNE LISTE UNIQUE DES UEs */ - foreach($semestre['UElist'] as $UE) - array_push( $ListeNomsUE, $UE['nom'] ); - }} - - $ListeNomsSemestres = array_unique($ListeNomsSemestres); - $ListeNomsUE = array_unique($ListeNomsUE); + // Vérification de la formation si elle est définie + $verificationUIDFormations = array(); + foreach($answer->semestres as $semestre) // on récupère la liste des UID de FORMATIONS + if( !in_array($semestre['id_formation'], $verificationUIDFormations) ) + array_push($verificationUIDFormations, $semestre['id_formation']); + // si la formation optionnelle n'est pas définie ou incohérente, on le fait (première valeur trouvée) + if( $formationOpt == null || !in_array($formationOpt, $verificationUIDFormations) ) + $formationOpt = $verificationUIDFormations[0]; + /**************************/ + /* AFFINAGE PAR FORMATION */ + /**************************/ echo "
    "; - foreach($ListeNomsFormations as $NomFormation) - if( $NomFormation == $formationOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - echo "'; + foreach($answer->semestres as $semestre){ if( !in_array($semestre['id_formation'], $ListeUIDFormations) ){ + + + if( $semestre['id_formation'] == $formationOpt ) // si c'est la formation séléctionnée + echo "'; + else // sinon on affiche normalement + echo "'; + + // on ajoute la formation à la liste pour ne pas la répéter + array_push($ListeUIDFormations, $semestre['id_formation']); + + }} echo "
    ".$NomFormation.'".$NomFormation.'".$semestre['formation'].'".$semestre['formation'].'
    "; + + + + /*************************/ + /* AFFINAGE PAR SEMESTRE */ + /*************************/ echo ""; - if( $semestreOpt == null ) echo ""; - else echo ""; - - foreach($ListeNomsSemestres as $NomSemestre) - if( $NomSemestre == $semestreOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - echo "'; + if( $semestreOpt == null ) echo ""; + else echo ""; + + /* On récupère la liste des SEMESTRES en accord avec la FORMATION sélectionnée */ + foreach($answer->semestres as $semestre){ if( $semestre['id_formation'] == $formationOpt && !in_array($semestre['id'], $ListeUIDSemestres) ){ + + if( $semestre['id'] == $semestreOpt ) // si c'est le semestre séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + + + // on ajoute le semestre à la liste pour ne pas le répéter + array_push($ListeUIDSemestres, $semestre['id']); + + }} + echo ""; // ajouter un semestre echo "
    TousTous".$NomSemestre.'".$NomSemestre.'TousTous".$semestre['nom'].'".$semestre['nom'].'+
    "; + + /*******************/ + /* AFFINAGE PAR UE */ + /*******************/ echo ""; if( $ueOpt == null ) echo ""; else echo ""; - - foreach($ListeNomsUE as $NomUE) - if( $NomUE == $ueOpt ) // si c'est le semestre séléctionné - echo "'; + + /* On récupère la liste des UEs en accord avec la FORMATION et le SEMESTRE sélectionnés */ + foreach($answer->semestres as $semestre){ if( $semestre['id_formation'] == $formationOpt && in_array($semestre['id'], $ListeUIDSemestres) ){ + foreach($semestre['UElist'] as $UE){ if( !in_array($UE['id'], $ListeUIDUE) ){ + if( $UE['id'] == $ueOpt ) // si c'est l'UE séléctionnée + echo "'; else // sinon on affiche normalement - echo "'; + echo "'; + + // on ajoute l'UE à la liste pour ne pas le répéter + array_push($ListeUIDUE, $UE['id']); + }} + }} + echo ""; // ajouter un UE echo "
    TousTous".$NomUE.'".$UE['nom'].'".$NomUE.'".$UE['nom'].'+
    "; foreach($answer->semestres as $semestre){ - if( ($semestreOpt == null || $semestre['nom'] == $semestreOpt) && ($formationOpt == null || $semestre['formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage + if( ($semestreOpt == null || $semestre['id'] == $semestreOpt) && ($formationOpt == null || $semestre['id_formation'] == $formationOpt) ){ // on affiche les semestres en fonction de l'affinage foreach($semestre['UElist'] as $UE){ - if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage + if( $ueOpt == null || $UE['id'] == $ueOpt ){ // on affiche les UEs en fonction de l'affinage echo ""; echo ""; diff --git a/xdoc/sid.sql b/xdoc/sid.sql index 5d36a16..05df873 100755 --- a/xdoc/sid.sql +++ b/xdoc/sid.sql @@ -3,7 +3,7 @@ -- http://www.phpmyadmin.net -- -- Client: localhost --- Généré le: Lun 16 Novembre 2015 à 12:42 +-- Généré le: Lun 16 Novembre 2015 à 21:41 -- Version du serveur: 5.5.46-0ubuntu0.14.04.2 -- Version de PHP: 5.5.9-1ubuntu4.14 @@ -429,7 +429,7 @@ CREATE TABLE IF NOT EXISTS `note` ( PRIMARY KEY (`id_note`), KEY `id_appartenance` (`id_appartenance`), KEY `id_controle` (`id_controle`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=57 ; -- -- RELATIONS POUR LA TABLE `note`: @@ -445,7 +445,7 @@ CREATE TABLE IF NOT EXISTS `note` ( INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUES (11, 103, 1, 15.25), -(12, 54, 2, 2), +(12, 54, 2, 5), (13, 103, 3, 3), (14, 103, 4, 4), (15, 103, 5, 5), @@ -459,9 +459,9 @@ INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUE (23, 91, 1, 3.5), (24, 19, 1, 4.5), (25, 58, 1, 5.25), -(26, 49, 2, 3), -(27, 87, 2, 4), -(28, 3, 2, 5), +(26, 49, 2, 6), +(27, 87, 2, 7), +(28, 3, 2, 8), (29, 74, 1, 14.75), (30, 26, 1, 1.9), (31, 97, 1, 10), @@ -482,7 +482,14 @@ INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUE (46, 13, 1, 2), (47, 67, 1, 0), (48, 70, 1, 0.5), -(49, 5, 1, 1.75); +(49, 5, 1, 1.75), +(50, 46, 11, 1), +(51, 33, 11, 2), +(52, 61, 11, 3), +(53, 48, 11, 4), +(54, 43, 11, 5), +(55, 98, 11, 6), +(56, 56, 11, 1); -- -------------------------------------------------------- @@ -492,18 +499,18 @@ INSERT INTO `note` (`id_note`, `id_appartenance`, `id_controle`, `valeur`) VALUE CREATE TABLE IF NOT EXISTS `semestre` ( `id_semestre` int(11) NOT NULL AUTO_INCREMENT, - `formation` int(11) NOT NULL, + `id_formation` int(11) NOT NULL, `nom` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `rang` tinyint(4) NOT NULL, `annee` year(4) NOT NULL, PRIMARY KEY (`id_semestre`), UNIQUE KEY `rang` (`rang`,`annee`), - KEY `id_formation` (`formation`) + KEY `id_formation` (`id_formation`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; -- -- RELATIONS POUR LA TABLE `semestre`: --- `formation` +-- `id_formation` -- `formation` -> `id_formation` -- @@ -511,7 +518,7 @@ CREATE TABLE IF NOT EXISTS `semestre` ( -- Contenu de la table `semestre` -- -INSERT INTO `semestre` (`id_semestre`, `formation`, `nom`, `rang`, `annee`) VALUES +INSERT INTO `semestre` (`id_semestre`, `id_formation`, `nom`, `rang`, `annee`) VALUES (1, 1, 'S1', 1, 2015), (2, 1, 'S2', 2, 2015), (3, 2, 'S3', 3, 2015), @@ -721,7 +728,7 @@ ALTER TABLE `note` -- Contraintes pour la table `semestre` -- ALTER TABLE `semestre` - ADD CONSTRAINT `semestre_id_formation` FOREIGN KEY (`formation`) REFERENCES `formation` (`id_formation`); + ADD CONSTRAINT `semestre_id_formation` FOREIGN KEY (`id_formation`) REFERENCES `formation` (`id_formation`); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; From f0643a8d0524391beaf626c75f674e92a5a1dc25 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 16 Nov 2015 21:48:11 +0100 Subject: [PATCH 29/39] =?UTF-8?q?Suppression=20de=20la=20possibilit=C3=A9?= =?UTF-8?q?=20de=20cr=C3=A9ation=20de=20@semestre/@UE=20=C3=A0=20partir=20?= =?UTF-8?q?des=20pages=20:=20enseignant@contr=C3=B4les=20+=20enseignant@mo?= =?UTF-8?q?dules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- page/career.php | 2 -- page/modules.php | 2 -- 2 files changed, 4 deletions(-) diff --git a/page/career.php b/page/career.php index 9ed0d42..eab04cb 100755 --- a/page/career.php +++ b/page/career.php @@ -230,7 +230,6 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e array_push($ListeUIDSemestres, $semestre['id']); }} - echo ""; // ajouter un semestre echo "
    +
    "; @@ -255,7 +254,6 @@ if( permission('teacher') && $controleOpt == null ){ // si c'est un enseignant e array_push($ListeUIDUE, $UE['id']); }} }} - echo "+"; // ajouter un UE echo ""; diff --git a/page/modules.php b/page/modules.php index 539b3d7..a399609 100755 --- a/page/modules.php +++ b/page/modules.php @@ -206,7 +206,6 @@ if( permission('teacher') ){ // si l'utilisateur est un prof array_push($ListeUIDSemestres, $semestre['id']); }} - echo "+"; // ajouter un semestre echo ""; @@ -231,7 +230,6 @@ if( permission('teacher') ){ // si l'utilisateur est un prof array_push($ListeUIDUE, $UE['id']); }} }} - echo "+"; // ajouter un UE echo ""; From 6efa758cab7c27d48652a7225b4b390a5a52876d Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 17 Nov 2015 08:35:21 +0100 Subject: [PATCH 30/39] Affinage par formation pour enseignant@mes_groupes + admin@tous_les_groupes + utilisation d'UIDs --- manager/repo/group.php | 29 +-- page/_JS/groups.js | 71 +++--- page/groups.php | 478 +++++++++++++++++++---------------------- page/modules.php | 2 +- 4 files changed, 273 insertions(+), 307 deletions(-) diff --git a/manager/repo/group.php b/manager/repo/group.php index d2a03e0..6177eef 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -175,8 +175,9 @@ class groupRepo extends DBAccess{ public static function membres($groupeUID, $semestreUID){ // si le groupe existe => on récupère ses utilisateurs $getMembres = DataBase::getPDO()->prepare("SELECT u.identifiant, u.prenom, u.nom, u.mail, u.droits, s.nom as semestre, g.id_groupe, g.nom as groupe ". - "FROM utilisateur as u, groupe as g, semestre as s, appartenance as app ". - "WHERE u.identifiant = app.id_etudiant ". + "FROM utilisateur as u, groupe as g, semestre as s, appartenance as app, formation as f ". + "WHERE s.id_formation = f.id_formation ". + "AND u.identifiant = app.id_etudiant ". "AND g.id_groupe = app.id_groupe ". "AND app.id_semestre = app.id_semestre ". // à virer (peut-être) @@ -205,12 +206,14 @@ class groupRepo extends DBAccess{ * */ public static function forStudent($etudiant, $semestre){ - $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 ". + $getGroupe = DataBase::getPDO()->prepare("SELECT DISTINCT app.id_appartenance, g.id_groupe as id, g.nom, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation ". + "FROM groupe as g, appartenance as app, formation as f, semestre as s ". + "WHERE s.id_formation = f.id_formation ". + "AND app.id_groupe = g.id_groupe ". + "AND app.id_semestre = s.id_semestre ". "AND app.id_etudiant = :etudiant ". - "AND app.id_semestre = :semestre ". + "AND s.id_semestre = :semestre ". "ORDER BY g.nom"); $getGroupe->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre )); @@ -244,9 +247,10 @@ class groupRepo extends DBAccess{ if( $pGroupe != null ){ $groupeOpt = $pGroupe; } - $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre ". - "FROM module as m, utilisateur as u, utilisateur as eleve, groupe as g, enseignement as ens, mcc_ue, mcc_module as mcc_m, semestre as s, appartenance as app ". - "WHERE mcc_ue.id_semestre = s.id_semestre ". + $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation ". + "FROM module as m, utilisateur as u, utilisateur as eleve, groupe as g, enseignement as ens, mcc_ue, mcc_module as mcc_m, semestre as s, appartenance as app, formation as f ". + "WHERE s.id_formation = f.id_formation ". + "AND mcc_ue.id_semestre = s.id_semestre ". "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". "AND mcc_m.id_module = m.id_module ". @@ -325,9 +329,10 @@ class groupRepo extends DBAccess{ $semestrePair0 = '0'; $semestrePair1 = '1'; if( is_bool($semestre_pair) ){ $semestrePair0 = $semestre_pair; $semestrePair1 = $semestre_pair; } - $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre ". - "FROM groupe as g, semestre as s, appartenance as app ". - "WHERE g.id_groupe = app.id_groupe ". + $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation ". + "FROM groupe as g, semestre as s, appartenance as app, formation as f ". + "WHERE s.id_formation = f.id_formation ". + "AND g.id_groupe = app.id_groupe ". "AND s.id_semestre = app.id_semestre ". "AND g.nom LIKE '".$groupeOpt."' ". diff --git a/page/_JS/groups.js b/page/_JS/groups.js index d7a81a1..a44140e 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -2,37 +2,6 @@ -// si aucune sous-partie n'est active, on active la première -if( document.querySelector('#CONTAINER hgroup.active') == null ) - selectSubSection( document.querySelector('#CONTAINER hgroup') ); - - - - - -/* Gestion du déroulement des tableaux des groupes */ -function afficherCacherGroupes(e){ - e.preventDefault(); - - // s'il s'agit de la case "Voir plus" - if( e.target.className == 'more' ){ - var thead = e.target.parentNode.parentNode.parentNode.children[0]; - thead.className = (thead.className=='active') ? '' : 'active'; - } -} - -if( !afficherCacherGroupesDefined ) - DOM.CONTAINER.addEventListener('click', afficherCacherGroupes, false); - -var afficherCacherGroupesDefined = true; - - - - -/* on définit le Drag'n'Drop */ -// var dnd = new DragnDrop(); - - @@ -98,11 +67,12 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / } -/***************************************************/ -/*** GESTION DES SELECT POUR AFFINER LES GROUPES ***/ -/***************************************************/ + +/**********************************************************************/ +/*** GESTION DES SELECT/TABLES D'AFFINAGES POUR AFFINER LES GROUPES ***/ +/**********************************************************************/ var selectList = document.querySelectorAll("#CONTAINER > section[name] > select[name=groupe]"); -var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=semestre]"); +var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=semestre], #CONTAINER > section[name] > table.partlist[name=formation]"); // GESTION DE L'AFFINAGE PAR SEMESTRE // for( var i = 0 ; i < partList.length ; i++ ){ @@ -110,11 +80,26 @@ for( var i = 0 ; i < partList.length ; i++ ){ partList[i].addEventListener('click', function(e){ var tableauParent = e.target.parentNode.parentNode.parentNode; - if( tableauParent.tagName == 'TABLE' && tableauParent.getAttribute('name') == 'semestre' && e.target.dataset.hasOwnProperty('value') ){ - pageM.vars[1] = 's:'+e.target.dataset.value; + if( tableauParent.tagName == 'TABLE' && e.target.dataset.hasOwnProperty('value') ){ + + /* SI c'est une affinage par FORMATION */ + if( tableauParent.getAttribute('name') == 'formation' ){ + pageM.vars[1] = 'f:'+e.target.dataset.value; + if( pageM.vars.length > 2 ) // si un deuxième affinage existe, on le supprime lors du choix de la formation + pageM.vars.pop(); + } + + /* SI c'est une affinage par SEMESTRE */ + if( tableauParent.getAttribute('name') == 'semestre' ) + pageM.vars[2] = 's:'+e.target.dataset.value; + + // si la formation n'est pas définie, on l'active + if( !/^f:/.test(pageM.vars[1]) ) + if( document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active') != null ) + pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active').dataset.value; // si on a '*' comme valeur, on l'enlève - if( /\*$/.test(pageM.vars[1]) ) + if( /\*$/.test(pageM.vars[2]) ) pageM.vars.pop(); reload(); @@ -130,9 +115,15 @@ for( var i = 0 ; i < selectList.length ; i++ ){ selectList[i].addEventListener('change', function(e){ if( e.target.tagName == 'SELECT' && e.target.getAttribute('name') == 'groupe' ){ - pageM.vars[1] = 'g:'+e.target.value; + pageM.vars[2] = 'g:'+e.target.value; - if( /\*$/.test(pageM.vars[1]) ) // si on a '*' comme valeur, on l'enlève + // si la formation n'est pas définie, on l'active + if( !/^f:/.test(pageM.vars[1]) ) + if( document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active') != null ) + pageM.vars[1] = 'f:'+document.querySelector('#CONTAINER > section[name] > table.partlist[name=formation] td[data-value].active').dataset.value; + + // si on a '*' comme valeur, on l'enlève + if( /\*$/.test(pageM.vars[2]) ) pageM.vars.pop(); reload(); diff --git a/page/groups.php b/page/groups.php index 92e852c..b6f7526 100755 --- a/page/groups.php +++ b/page/groups.php @@ -19,8 +19,9 @@ require_once __ROOT__.'/manager/groups.php'; /*** GESTION DES PARAMETRES OPTIONNELS ***/ // on initialise les paramètres optionnels - $semestreOpt = null; - $groupeOpt = null; + $semestreOpt = null; + $groupeOpt = null; + $formationOpt = null; // on cherche dans toutes les variables _get si on trouve des paramètres foreach($_POST as $k=>$v){ @@ -31,9 +32,14 @@ require_once __ROOT__.'/manager/groups.php'; if( preg_match('/^s:(.+)$/', $k, $m) ) // s:nomSemestre $semestreOpt = $m[1]; + if( preg_match('/^f:(.+)$/', $k, $m) ) // f:codeFormation + $formationOpt = $m[1]; + } - + $groupeOpt = ($groupeOpt == null || $groupeOpt == '*') ? null : $groupeOpt; + $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; + $formationOpt = ($formationOpt == null || $formationOpt == '*') ? null : $formationOpt; /************************/ /*** TOUS LES GROUPES ***/ @@ -102,111 +108,6 @@ if( permission('student') ){ // si connecté && utilisateur -/************************/ -/*** TOUS LES GROUPES ***/ -/************************/ -/* -* PROFESSEUR -> affichage des semestres en cours -* ADMINISTRATEUR -> affichage des semestres en cours -* -* - */ -if( false && permission('teacher') ){ // si connecté && prof - - $request = new stdClass(); - $answer = new stdClass(); - - $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); - - if( $answer->request == 'success' ){ // si pas d'erreur - ////////////////////////////////////////////////////////////// - echo "
    "; - - /* select pour SEMESTRES */ - $lastSemestre = null; - - echo ""; - - /* select pour GROUPES */ - $lastGroupe = null; - - echo ""; - - - echo ""; - echo '
    Identifiant'; - echo 'Prenom'; - echo 'Nom'; - echo 'Semestre'; - echo 'Groupe'; - echo '
    '; - - foreach($answer->grouplist as $group){ // pour chaque groupe - - if( count($group['userlist']) > 0 ){ // s'il y a des utilisateurs - - echo ""; - - echo ''; - - - // pour chaque utilisateur - foreach($group['userlist'] as $user){ - echo ''; - echo "'; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - } - - // echo ''; - - echo ''; - - echo '
    ".$user['identifiant'].''.$user['prenom'].''.$user['nom'].''.$group['semestre'].'Groupe '.$group['nom'].'
    '; - - } - } - echo '
    '; - //////////////////////////////////////////////////////// - }else - echo "
    Aucun groupe trouvé
    "; - -} ?> - - @@ -215,9 +116,6 @@ if( false && permission('teacher') ){ // si connecté && prof - - -level_1 = 'grouplistForTeacher'; $request->enseignant = $_SESSION['identifiant']; $request->annee = $_SESSION['annee']; - if ( $semestreOpt != null ) $request->semestre = $semestreOpt; - elseif( $groupeOpt != null ) $request->groupe = $groupeOpt; - - $requestPourListeGroupes->level_1 = 'grouplistForTeacher'; - $requestPourListeGroupes->enseignant = $_SESSION['identifiant']; - $requestPourListeGroupes->annee = $_SESSION['annee']; groups_switch_level_1($request, $answer); - groups_switch_level_1($requestPourListeGroupes, $answerPourListeGroupes); - if( $answer->request == 'success' && $answerPourListeGroupes->request == 'success' && count($answerPourListeGroupes->grouplist) > 0 ){ // si on a bien récupéré les membres du groupe + if( $answer->request == 'success' && $answer->request == 'success' && count($answer->grouplist) > 0 ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// echo "
    "; - - /* select pour SEMESTRES */ - $lastSemestre = null; - echo ""; - - if( $semestreOpt != null ) // si aucun semestre n'est spécifié, on selectionne "Tous" par défaut - echo ""; - else - echo ""; - + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDGroupes = array(); - foreach($answerPourListeGroupes->grouplist as $group){ - if( $lastSemestre == null || $lastSemestre != $group['semestre'] ){ - - if( $group['semestre'] == $semestreOpt ) // si c'est le semestre séléctionné - echo "'; - else // sinon on affiche normalement - echo "'; + // Vérification de la formation si elle est définie + $verificationUIDFormations = array(); + foreach($answer->grouplist as $groupe) // on récupère la liste des UID de FORMATIONS + if( !in_array($groupe['id_formation'], $verificationUIDFormations) ) + array_push($verificationUIDFormations, $groupe['id_formation']); - $lastSemestre = $group['semestre']; - } - } + // si la formation optionnelle n'est pas définie ou incohérente, on le fait (première valeur trouvée) + if( $formationOpt == null || !in_array($formationOpt, $verificationUIDFormations) ) + $formationOpt = $verificationUIDFormations[0]; + + + + + /**************************/ + /* AFFINAGE PAR FORMATION */ + /**************************/ + echo "
    TousTous".$group['semestre'].'".$group['semestre'].'
    "; + foreach($answer->grouplist as $groupe){ if( !in_array($groupe['id_formation'], $ListeUIDFormations) ){ + + + if( $groupe['id_formation'] == $formationOpt ) // si c'est la formation séléctionnée + echo "'; + else // sinon on affiche normalement + echo "'; + + // on ajoute la formation à la liste pour ne pas la répéter + array_push($ListeUIDFormations, $groupe['id_formation']); + + }} echo "
    ".$groupe['formation'].'".$groupe['formation'].'
    "; - /* select pour GROUPES */ - $lastGroupe = null; + + + /*************************/ + /* AFFINAGE PAR SEMESTRE */ + /*************************/ + echo ""; + if( $semestreOpt == null ) echo ""; + else echo ""; + + /* On récupère la liste des SEMESTRES en accord avec la FORMATION sélectionnée */ + foreach($answer->grouplist as $groupe){ if( $groupe['id_formation'] == $formationOpt && !in_array($groupe['id_semestre'], $ListeUIDSemestres) ){ + + if( $groupe['id_semestre'] == $semestreOpt ) // si c'est le groupe séléctionné + echo "'; + else // sinon on affiche normalement + echo "'; + + + // on ajoute le semestre à la liste pour ne pas le répéter + array_push($ListeUIDSemestres, $groupe['id']); + + }} + echo "
    TousTous".$groupe['semestre'].'".$groupe['semestre'].'
    "; + + + + + /***********************/ + /* AFFINAGE PAR GROUPE */ + /***********************/ echo ""; + + + + - if( $group['nom'] == $groupeOpt ) // si c'est le groupe séléctionné - echo "'; - else - echo "'; - $lastGroupe = $group['nom']; - } - } - echo ""; - echo ""; - foreach($answer->grouplist as $group){ - if( $lastGroupe == null || $lastGroupe != $group['nom'] ){ + if( $groupeOpt == null ) echo ""; + else echo ""; - if( $group['nom'] == $groupeOpt ) // si c'est le groupe séléctionné - echo "'; - else - echo "'; + /* On récupère la liste des GROUPES en accord avec la FORMATION et le SEMESTRE sélectionnée */ + foreach($answer->grouplist as $groupe){ if( $groupe['id_formation'] == $formationOpt && in_array($groupe['id_semestre'], $ListeUIDSemestres) && !in_array($groupe['id'], $ListeUIDGroupes) ){ + + // si c'est le groupe sélectionné + if( $groupe['id'] == $groupeOpt ) echo "'; + else echo "'; - $lastGroupe = $group['nom']; - } - } - echo ""; @@ -501,52 +467,56 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm foreach($answer->grouplist as $group){ // pour chaque groupe - if( count($group['userlist']) > 0 ){ // s'il y a des utilisateurs + if( $group['id_formation'] == $formationOpt && ($semestreOpt==null || $semestreOpt==$group['id_semestre']) && ($groupeOpt==null || $groupeOpt==$group['id']) ){ - echo ""; + if( count($group['userlist']) > 0 ){ // s'il y a des utilisateurs - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; + echo "
    '; - echo 'Groupe '.$group['nom'].''; - echo '
    "; - - - echo ''; - - - // pour chaque utilisateur - foreach($group['userlist'] as $user){ + echo ''; echo ''; - echo "'; - echo ''; - echo ''; - // echo ''; - // changement de groupe - echo ''; + echo ''; echo ''; - } + echo ''; - // echo ''; - echo ''; - echo '
    ".$user['identifiant'].''.$user['prenom'].''.$user['nom'].''.$group['nom'].''; - echo "'; - echo "
    déplacer
    "; - echo '
    '; + echo 'Groupe '.$group['nom'].''; + echo '
    '; + echo ''; + + + // pour chaque utilisateur + foreach($group['userlist'] as $user){ + echo ''; + echo "".$user['identifiant'].''; + echo ''.$user['prenom'].''; + echo ''.$user['nom'].''; + // echo ''.$group['nom'].''; + // changement de groupe + echo ''; + echo "'; + echo "
    déplacer
    "; + echo ''; + echo ''; + } + + // echo ''; + + echo ''; + + echo ''; + + } } } diff --git a/page/modules.php b/page/modules.php index a399609..e890bc5 100755 --- a/page/modules.php +++ b/page/modules.php @@ -476,7 +476,7 @@ if( permission('admin') ){ // si l'utilisateur est un admin //////////////////////////////////////////////////////////////////////////////// echo "
    "; - + echo ""; }else echo "
    Aucun module trouvé
    "; From 26fe68da79387a72c4036fcfd7c41e4bf18dcc59 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 17 Nov 2015 08:46:39 +0100 Subject: [PATCH 31/39] =?UTF-8?q?Suppression=20des=20param=C3=A8tres=20opt?= =?UTF-8?q?ionnels=20(=C3=A9vitent=20de=20tout=20charger=20+=20les=20donn?= =?UTF-8?q?=C3=A9es=20affin=C3=A9es)=20donc=20maintenant=20on=20charge=20t?= =?UTF-8?q?out,=20mais=20une=20fois?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 23 ++++------------------- manager/groups.php | 31 +++---------------------------- manager/repo/group.php | 40 +++++++++------------------------------- 3 files changed, 16 insertions(+), 78 deletions(-) diff --git a/manager/database.php b/manager/database.php index af5c681..598f0a1 100755 --- a/manager/database.php +++ b/manager/database.php @@ -215,14 +215,7 @@ class DataBase{ /******************************************************************/ /*** retourne la liste des utilisateurs des groupes d'une année ***/ /******************************************************************/ - public function listeEtudiantsTousGroupesAnnee($annee, $semestre_pair, $pSemestre=null, $pGroupe=null){ // pSemestre/pGroupe optionnels - // définition des paramètres optionnels - $semestreOpt = '%'; - if( $pSemestre != null ) $semestreOpt = $pSemestre; // semestre donné uniquement (si param non null) - - $groupeOpt = '%'; - if( $pGroupe != null ) $groupeOpt = $pGroupe; // si le groupe est donné, on le définit - + public function listeEtudiantsTousGroupesAnnee($annee, $semestre_pair){ /*** on cherche un semestre avec ce rang et cette année (qui est unique) ***/ $checkAnnee = DataBase::getPDO()->prepare("SELECT id_semestre as id FROM semestre WHERE annee = :annee"); $checkAnnee->execute(array( ':annee' => $annee )); @@ -230,7 +223,7 @@ class DataBase{ // on récupère la liste des groupes - $grouplist = DataBase::delNumeric( groupRepo::forYear($semestre_pair, $annee, $pSemestre, $pGroupe) ); + $grouplist = DataBase::delNumeric( groupRepo::forYear($semestre_pair, $annee) ); foreach($grouplist as $iter=>$val) // pour chaque groupe un récupère la liste des utilisateurs $grouplist[$iter]['userlist'] = groupRepo::membres($grouplist[$iter]['id'], $grouplist[$iter]['id_semestre']); @@ -242,15 +235,7 @@ class DataBase{ /******************************************************************/ /*** retourne la liste des utilisateurs des groupes d'une année ***/ /******************************************************************/ - public function listeEtudiantsTousGroupesEnseignant($annee, $semestre_pair, $enseignant, $pSemestre, $pGroupe){ - // définition des paramètres optionnels - $semestreOpt = '%'; - if( $pSemestre != null ) $semestreOpt = $pSemestre; // semestre donné uniquement (si param non null) - - $groupeOpt = '%'; - if( $pGroupe != null ) $groupeOpt = $pGroupe; // si le groupe est donné, on le définit - - + public function listeEtudiantsTousGroupesEnseignant($annee, $semestre_pair, $enseignant){ /*** on cherche un semestre avec cette année ***/ $checkAnnee = DataBase::getPDO()->prepare("SELECT id_semestre as id FROM semestre WHERE annee = :annee"); $checkAnnee->execute(array( ':annee' => $annee )); @@ -261,7 +246,7 @@ class DataBase{ // on récupère la liste des groupes - $grouplist = DataBase::delNumeric( groupRepo::forTeacher($enseignantUID, $semestre_pair, $annee, $pSemestre, $pGroupe) ); + $grouplist = DataBase::delNumeric( groupRepo::forTeacher($enseignantUID, $semestre_pair, $annee) ); foreach($grouplist as $iter=>$val) // pour chaque groupe un récupère la liste des utilisateurs $grouplist[$iter]['userlist'] = groupRepo::membres($grouplist[$iter]['id'], $grouplist[$iter]['id_semestre']); diff --git a/manager/groups.php b/manager/groups.php index b024c58..7c252a5 100755 --- a/manager/groups.php +++ b/manager/groups.php @@ -168,20 +168,9 @@ require_once __ROOT__.'/manager/database.php'; $anneeCheck = $areSetParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format $enseignantCheck = $anneeCheck && preg_match('/^[\w -]{3,50}$/i', $request->enseignant); // enseignant (annee) bon format - // paramètres optionnels - $optionalSemestre = isset($request->semestre) && is_string($request->semestre) && preg_match('/^S[0-9]{1}$/i', $request->semestre); - $optionalGroupe = isset($request->groupe) && is_string($request->groupe) && strlen($request->groupe) > 1 && preg_match('/^[a-z0-9 -]{1,10}$/i', $request->groupe); - - // définition (ou pas) des paramètres optionnels - if( $optionalSemestre ) $semestre = $request->semestre; - else $semestre = null; - - if( $optionalGroupe ) $groupe = $request->groupe; - else $groupe = null; - if( $enseignantCheck ){ - $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesEnseignant($request->annee, $_SESSION['semestre_pair'], $request->enseignant, $semestre, $groupe); + $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesEnseignant($request->annee, $_SESSION['semestre_pair'], $request->enseignant); if( is_array($grouplist) ){ // si on a récupéré la liste des utilisateurs $answer->grouplist = $grouplist; @@ -205,24 +194,10 @@ require_once __ROOT__.'/manager/database.php'; $typeOkParam = $areSetParam && is_numeric($request->annee); // si c'est des strings $anneeCheck = $areSetParam && preg_match('/^[0-9]{4}$/i', $request->annee); // semestre (annee) bon format - - // paramètres optionnels - $optionalSemestre = isset($request->semestre) && is_string($request->semestre) && preg_match('/^S[0-9]{1}$/i', $request->semestre); - $optionalGroupe = isset($request->groupe) && is_string($request->groupe) && strlen($request->groupe) > 1 && preg_match('/^[a-z0-9 -]{1,10}$/i', $request->groupe); - - // définition (ou pas) des paramètres optionnels - if( $optionalSemestre ) $semestre = $request->semestre; - else $semestre = null; - - if( $optionalGroupe ) $groupe = $request->groupe; - else $groupe = null; - - - if( $anneeCheck ){ - // $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesAnnee($request->annee, $_SESSION['semestre_pair'], $semestre, $groupe); - $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesAnnee($request->annee, null, $semestre, $groupe); + // $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesAnnee($request->annee, $_SESSION['semestre_pair']); + $grouplist = DataBase::getInstance()->listeEtudiantsTousGroupesAnnee($request->annee, null); if( is_array($grouplist) ){ // si on a récupéré la liste des utilisateurs $answer->grouplist = $grouplist; diff --git a/manager/repo/group.php b/manager/repo/group.php index 6177eef..a34f5f2 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -227,25 +227,17 @@ class groupRepo extends DBAccess{ /* RETOURNE TOUS LES GROUPES QUI ONT UN ENSEIGNANT PARTICULIER POUR UNE ANNEE DONNEE * * @enseignant l'UID de l'enseignant recherché - * @semestre_pair VRAI si le semestre courant est pair + * @semestre_pair VRAI si le semestre courant est pair (***OPTIONNEL***) * @annee l'année recherchée * - * @pSemestre ***OPTIONNEL*** le nom du semestre - * @pGroupe ***OPTIONNEL*** le nom du groupe - * * * @return groupes retourne la liste des groupes correspondant aux critères * */ - public static function forTeacher($enseignant, $semestre_pair, $annee, $pSemestre=null, $pGroupe=null){ - // si le semestre est donné, on cherche uniquement celui-ci, sinon on les affiche tous - $semestreOpt = '%'; - if( $pSemestre != null ){ $semestreOpt = $pSemestre; } + public static function forTeacher($enseignant, $semestre_pair, $annee){ - // si le groupe est donné, on cherche uniquement celui-ci, sinon on les affiche tous - $groupeOpt = '%'; - if( $pGroupe != null ){ $groupeOpt = $pGroupe; } - + $semestrePair0 = '0'; $semestrePair1 = '1'; + if( is_bool($semestre_pair) ){ $semestrePair0 = ($semestre_pair)?'0':'1'; $semestrePair1 = ($semestre_pair)?'0':'1'; } $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation ". "FROM module as m, utilisateur as u, utilisateur as eleve, groupe as g, enseignement as ens, mcc_ue, mcc_module as mcc_m, semestre as s, appartenance as app, formation as f ". @@ -263,13 +255,11 @@ class groupRepo extends DBAccess{ "AND app.id_semestre = s.id_semestre ". "AND app.id_groupe = g.id_groupe ". - "AND g.nom LIKE '".$groupeOpt."' ". - "AND s.nom LIKE '".$semestreOpt."' ". "AND u.identifiant = :enseignant ". - "AND s.rang % 2 = :semestre_pair ". + "AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) ". "AND s.annee = :annee ". "ORDER BY s.rang, g.nom"); - $getGroupeList->execute(array( ':enseignant' => $enseignant, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + $getGroupeList->execute(array( ':enseignant' => $enseignant, ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee )); return DataBase::delNumeric( $getGroupeList->fetchAll() ); } @@ -307,27 +297,17 @@ class groupRepo extends DBAccess{ /* RETOURNE TOUS LES GROUPES DES SEMESTRES COURANT D'UNE ANNÉE * - * @semestre_pair VRAI si le semestre courant est pair + * @semestre_pair VRAI si le semestre courant est pair (***OPTIONNEL***) * @annee L'année en cours * - * @pSemestre ***OPTIONNEL*** le nom du semestre - * @pGroupe ***OPTIONNEL*** le nom du groupe - * * * @return groupes retourne la liste des groupes correspondant aux critères * */ - public static function forYear($semestre_pair, $annee, $pSemestre=null, $pGroupe=null){ - // si le semestre est donné, on cherche uniquement celui-ci, sinon on les affiche tous - $semestreOpt = '%'; - if( $pSemestre != null ){ $semestreOpt = $pSemestre; } - - // si le groupe est donné, on cherche uniquement celui-ci, sinon on les affiche tous - $groupeOpt = '%'; - if( $pGroupe != null ){ $groupeOpt = $pGroupe; } + public static function forYear($semestre_pair, $annee){ $semestrePair0 = '0'; $semestrePair1 = '1'; - if( is_bool($semestre_pair) ){ $semestrePair0 = $semestre_pair; $semestrePair1 = $semestre_pair; } + if( is_bool($semestre_pair) ){ $semestrePair0 = ($semestre_pair)?'0':'1'; $semestrePair1 = ($semestre_pair)?'0':'1'; } $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation ". "FROM groupe as g, semestre as s, appartenance as app, formation as f ". @@ -335,8 +315,6 @@ class groupRepo extends DBAccess{ "AND g.id_groupe = app.id_groupe ". "AND s.id_semestre = app.id_semestre ". - "AND g.nom LIKE '".$groupeOpt."' ". - "AND s.nom LIKE '".$semestreOpt."' ". "AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) ". "AND s.annee = :annee ". "ORDER BY g.nom"); From df1f23a1da67a5c4e1b5aabd0a0276ed436a90bf Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 17 Nov 2015 08:55:33 +0100 Subject: [PATCH 32/39] Correction erreur commit --- page/modules.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/page/modules.php b/page/modules.php index e890bc5..27ede14 100755 --- a/page/modules.php +++ b/page/modules.php @@ -470,8 +470,8 @@ if( permission('admin') ){ // si l'utilisateur est un admin modules_switch_level_1($request, $answer); - // var_dump( $answer ) -; + // var_dump( $answer ); + if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// echo "
    "; From d96ace86b3f6b4590f146c6aa7e5e4a80cd286a2 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 17 Nov 2015 09:07:53 +0100 Subject: [PATCH 33/39] =?UTF-8?q?Correction=20d=C3=A9placement=20d'=C3=A9l?= =?UTF-8?q?=C3=A8ves=20sur=20admin@tous=5Fles=5Fgroupes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 6 +++--- manager/repo/semestre.php | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/manager/database.php b/manager/database.php index 598f0a1..638134f 100755 --- a/manager/database.php +++ b/manager/database.php @@ -280,10 +280,10 @@ class DataBase{ 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'; + if( !($semestreInfo=semestreRepo::info($semestre)) ) return 'unknown_semestre'; + if( !($destGroupeUID=groupRepo::UID($groupe)) ) return 'unknown_newgroup'; - if( groupRepo::ajouterMembre($etudiant, $destGroupeUID, $semestreUID) ) + if( groupRepo::ajouterMembre($etudiant, $destGroupeUID, $semestreInfo['id']) ) return 'success'; else return 'error'; diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 0584eab..a71950f 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -57,10 +57,10 @@ class semestreRepo extends DBAccess{ */ public static function info($semestreUID){ // on considère que le semestre existe - $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as s.id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". + $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, s.nom, s.rang, s.annee, f.id_formation, f.code as formation, f.nom as nom_formation ". "FROM semestre as s, formation as f ". "WHERE s.id_formation = f.id_formation ". - "AND id_semestre = :semestreUID"); + "AND s.id_semestre = :semestreUID"); $getSemestreInfo->execute(array( ':semestreUID' => $semestreUID )); // on retourne le résultat en supprimant les doublons à indices numériques From e32f90328cf62334316c354926fa9efd5793474f Mon Sep 17 00:00:00 2001 From: Fauvet Date: Tue, 17 Nov 2015 10:49:28 +0100 Subject: [PATCH 34/39] =?UTF-8?q?Nouveau=20mod=C3=A8le=20MCC=20pr=C3=AAt?= =?UTF-8?q?=20=C3=A0=20=C3=AAtre=20push?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xdoc/nouveau_modele.xlsx | Bin 0 -> 14298 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 xdoc/nouveau_modele.xlsx diff --git a/xdoc/nouveau_modele.xlsx b/xdoc/nouveau_modele.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3fd843089fdf62ad49f771f815aef50197dba2a3 GIT binary patch literal 14298 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 MG0+M0*?yh Date: Tue, 17 Nov 2015 13:00:50 +0100 Subject: [PATCH 35/39] =?UTF-8?q?Suppression=20(")=20dans=20requ=C3=AAtes?= =?UTF-8?q?=20des=20repos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/repo/controle.php | 50 +++++++-------- manager/repo/group.php | 126 ++++++++++++++++++------------------ manager/repo/module.php | 53 ++++++++------- manager/repo/note.php | 132 +++++++++++++++++++------------------- manager/repo/semestre.php | 54 ++++++++-------- manager/repo/ue.php | 51 ++++++++------- manager/repo/user.php | 32 ++++----- page/modules.php | 1 - 8 files changed, 248 insertions(+), 251 deletions(-) diff --git a/manager/repo/controle.php b/manager/repo/controle.php index 8186406..5bc71fc 100755 --- a/manager/repo/controle.php +++ b/manager/repo/controle.php @@ -19,16 +19,16 @@ class controleRepo extends DBAccess{ */ public static function info($controleUID){ // on considère que le semestre existe - $getControleInfo = DataBase::getPDO()->prepare("SELECT ctrl.id_controle as id, ctrl.id_mcc_module, m.nom as module, m.libelle as modulelib, s.id_semestre, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication ". - "FROM controle as ctrl, mcc_module as mcc_m, mcc_ue, semestre as s, module as m ". - "WHERE ctrl.id_mcc_module = mcc_m.id_mcc_module ". - "AND mcc_m.id_module = m.id_module ". - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". - "AND mcc_ue.id_semestre = s.id_semestre ". + $getControleInfo = DataBase::getPDO()->prepare("SELECT ctrl.id_controle as id, ctrl.id_mcc_module, m.nom as module, m.libelle as modulelib, s.id_semestre, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication + FROM controle as ctrl, mcc_module as mcc_m, mcc_ue, semestre as s, module as m + WHERE ctrl.id_mcc_module = mcc_m.id_mcc_module + AND mcc_m.id_module = m.id_module + AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue + AND mcc_ue.id_semestre = s.id_semestre - "AND ctrl.id_controle = :controleUID ". + AND ctrl.id_controle = :controleUID - "GROUP BY ctrl.id_controle"); + GROUP BY ctrl.id_controle"); $getControleInfo->execute(array( ':controleUID' => $controleUID )); @@ -51,14 +51,14 @@ class controleRepo extends DBAccess{ * */ public static function forStudent($module, $semestre){ - $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.id_mcc_module, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication ". - "FROM controle as ctrl, module as m, mcc_module as mcc_m, mcc_ue, semestre as s ". - "WHERE ctrl.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 ". + $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.id_mcc_module, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication + FROM controle as ctrl, module as m, mcc_module as mcc_m, mcc_ue, semestre as s + WHERE ctrl.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 mcc_m.id_module = :module ". - "AND s.id_semestre = :semestre"); + AND mcc_m.id_module = :module + AND s.id_semestre = :semestre"); $getControleList->execute(array( ':module' => $module, ':semestre' => $semestre )); return DataBase::delNumeric( $getControleList->fetchAll() ); @@ -79,18 +79,18 @@ class controleRepo extends DBAccess{ * */ public static function forTeacher($enseignant, $module, $semestre){ - $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.id_mcc_module, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication ". - "FROM enseignement as ens, module as m, mcc_module as mcc_m, mcc_ue, controle as ctrl ". - "WHERE ens.id_mcc_module = mcc_m.id_mcc_module ". - "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". - "AND mcc_m.id_module = m.id_module ". - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". + $getControleList = DataBase::getPDO()->prepare("SELECT DISTINCT ctrl.id_controle as id, ctrl.id_mcc_module, ctrl.intitule, ctrl.base, ctrl.coefficient, ctrl.date_publication + FROM enseignement as ens, module as m, mcc_module as mcc_m, mcc_ue, controle as ctrl + WHERE ens.id_mcc_module = mcc_m.id_mcc_module + AND mcc_m.id_mcc_module = ctrl.id_mcc_module + AND mcc_m.id_module = m.id_module + AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue - "AND ens.id_enseignant = :enseignant ". - "AND mcc_m.id_module = :module ". - "AND mcc_ue.id_semestre = :semestre ". + AND ens.id_enseignant = :enseignant + AND mcc_m.id_module = :module + AND mcc_ue.id_semestre = :semestre - "GROUP BY ctrl.id_controle"); + GROUP BY ctrl.id_controle"); $getControleList->execute(array( ':enseignant' => $enseignant, ':module' => $module, ':semestre' => $semestre )); return DataBase::delNumeric( $getControleList->fetchAll() ); diff --git a/manager/repo/group.php b/manager/repo/group.php index a34f5f2..97a2a74 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -60,11 +60,11 @@ class groupRepo extends DBAccess{ */ public static function appartenanceUID($etudiant, $groupe, $semestre){ /*** on cherche un groupe avec ce nom ***/ - $getAppartenanceUID = DataBase::getPDO()->prepare("SELECT id_appartenance as id ". - "FROM appartenance ". - "WHERE id_etudiant = :etudiant ". - "AND id_groupe = :groupe ". - "AND id_semestre = :semestre"); + $getAppartenanceUID = DataBase::getPDO()->prepare("SELECT id_appartenance as id + FROM appartenance + WHERE id_etudiant = :etudiant + AND id_groupe = :groupe + AND id_semestre = :semestre"); $getAppartenanceUID->execute(array( ':etudiant' => $etudiant, ':groupe' => $groupe, @@ -129,9 +129,9 @@ class groupRepo extends DBAccess{ /* [2] On modifie l'appartenance ==============================*/ // création et exécution de la requête de modification de l'appartenance - $ajouterMembres = DataBase::getPDO()->prepare("UPDATE appartenance ". - "SET id_groupe = :groupe ". - "WHERE id_appartenance = :appartenanceUID"); + $ajouterMembres = DataBase::getPDO()->prepare("UPDATE appartenance + SET id_groupe = :groupe + WHERE id_appartenance = :appartenanceUID"); $ajouterMembres->execute(array( ':groupe' => $groupe, ':appartenanceUID' => $appartenanceUID @@ -142,12 +142,12 @@ class groupRepo extends DBAccess{ /* [2] On créé l'appartenance ==============================*/ // création et exécution de la requête de création d'appartenance - $ajouterMembres = DataBase::getPDO()->prepare("INSERT INTO appartenance(id_etudiant, id_groupe, id_semestre) ". - "VALUES( ". - "(SELECT identifiant FROM utilisateur WHERE identifiant = :etudiant), ". - "(SELECT id_groupe FROM groupe WHERE id_groupe = :groupe), ". - "(SELECT id_semestre FROM semestre WHERE id_semestre = :semestre) ". - " )"); + $ajouterMembres = DataBase::getPDO()->prepare("INSERT INTO appartenance(id_etudiant, id_groupe, id_semestre) + VALUES( + (SELECT identifiant FROM utilisateur WHERE identifiant = :etudiant), + (SELECT id_groupe FROM groupe WHERE id_groupe = :groupe), + (SELECT id_semestre FROM semestre WHERE id_semestre = :semestre) + )"); $ajouterMembres->execute(array( ':etudiant' => $etudiant, ':groupe' => $groupe, @@ -174,16 +174,16 @@ class groupRepo extends DBAccess{ */ public static function membres($groupeUID, $semestreUID){ // si le groupe existe => on récupère ses utilisateurs - $getMembres = DataBase::getPDO()->prepare("SELECT u.identifiant, u.prenom, u.nom, u.mail, u.droits, s.nom as semestre, g.id_groupe, g.nom as groupe ". - "FROM utilisateur as u, groupe as g, semestre as s, appartenance as app, formation as f ". - "WHERE s.id_formation = f.id_formation ". - "AND u.identifiant = app.id_etudiant ". - "AND g.id_groupe = app.id_groupe ". - "AND app.id_semestre = app.id_semestre ". // à virer (peut-être) + $getMembres = DataBase::getPDO()->prepare("SELECT u.identifiant, u.prenom, u.nom, u.mail, u.droits, s.nom as semestre, g.id_groupe, g.nom as groupe + FROM utilisateur as u, groupe as g, semestre as s, appartenance as app, formation as f + WHERE s.id_formation = f.id_formation + AND u.identifiant = app.id_etudiant + AND g.id_groupe = app.id_groupe + AND app.id_semestre = app.id_semestre // à virer (peut-être) - "AND g.id_groupe = :groupeUID ". - "AND s.id_semestre = :semestreUID ". - "ORDER BY u.prenom, u.nom"); + AND g.id_groupe = :groupeUID + AND s.id_semestre = :semestreUID + ORDER BY u.prenom, u.nom"); $getMembres->execute(array( ':groupeUID' => $groupeUID, ':semestreUID' => $semestreUID @@ -206,15 +206,15 @@ class groupRepo extends DBAccess{ * */ public static function forStudent($etudiant, $semestre){ - $getGroupe = DataBase::getPDO()->prepare("SELECT DISTINCT app.id_appartenance, g.id_groupe as id, g.nom, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation ". - "FROM groupe as g, appartenance as app, formation as f, semestre as s ". - "WHERE s.id_formation = f.id_formation ". - "AND app.id_groupe = g.id_groupe ". - "AND app.id_semestre = s.id_semestre ". + $getGroupe = DataBase::getPDO()->prepare("SELECT DISTINCT app.id_appartenance, g.id_groupe as id, g.nom, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation + FROM groupe as g, appartenance as app, formation as f, semestre as s + WHERE s.id_formation = f.id_formation + AND app.id_groupe = g.id_groupe + AND app.id_semestre = s.id_semestre - "AND app.id_etudiant = :etudiant ". - "AND s.id_semestre = :semestre ". - "ORDER BY g.nom"); + AND app.id_etudiant = :etudiant + AND s.id_semestre = :semestre + ORDER BY g.nom"); $getGroupe->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre )); return $getGroupe->fetch(); @@ -239,26 +239,26 @@ class groupRepo extends DBAccess{ $semestrePair0 = '0'; $semestrePair1 = '1'; if( is_bool($semestre_pair) ){ $semestrePair0 = ($semestre_pair)?'0':'1'; $semestrePair1 = ($semestre_pair)?'0':'1'; } - $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation ". - "FROM module as m, utilisateur as u, utilisateur as eleve, groupe as g, enseignement as ens, mcc_ue, mcc_module as mcc_m, semestre as s, appartenance as app, formation as f ". - "WHERE s.id_formation = f.id_formation ". - "AND mcc_ue.id_semestre = s.id_semestre ". - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". + $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation + FROM module as m, utilisateur as u, utilisateur as eleve, groupe as g, enseignement as ens, mcc_ue, mcc_module as mcc_m, semestre as s, appartenance as app, formation as f + WHERE s.id_formation = f.id_formation + AND mcc_ue.id_semestre = s.id_semestre + AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue - "AND mcc_m.id_module = m.id_module ". - "AND mcc_m.id_mcc_module = ens.id_mcc_module ". + AND mcc_m.id_module = m.id_module + AND mcc_m.id_mcc_module = ens.id_mcc_module - "AND ens.id_enseignant = u.identifiant ". - "AND ens.correcteur = 1 ". // uniquement les groupes pour lesquels il est correcteur + AND ens.id_enseignant = u.identifiant + AND ens.correcteur = 1 // uniquement les groupes pour lesquels il est correcteur - "AND app.id_etudiant = eleve.identifiant ". - "AND app.id_semestre = s.id_semestre ". - "AND app.id_groupe = g.id_groupe ". + AND app.id_etudiant = eleve.identifiant + AND app.id_semestre = s.id_semestre + AND app.id_groupe = g.id_groupe - "AND u.identifiant = :enseignant ". - "AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) ". - "AND s.annee = :annee ". - "ORDER BY s.rang, g.nom"); + AND u.identifiant = :enseignant + AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) + AND s.annee = :annee + ORDER BY s.rang, g.nom"); $getGroupeList->execute(array( ':enseignant' => $enseignant, ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee )); return DataBase::delNumeric( $getGroupeList->fetchAll() ); @@ -278,15 +278,15 @@ class groupRepo extends DBAccess{ * */ public static function forControle($controle){ - $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom ". - "FROM groupe as g, appartenance as app, mcc_ue, mcc_module as mcc_m, controle as ctrl ". - "WHERE app.id_groupe = g.id_groupe ". - "AND ctrl.id_mcc_module = mcc_m.id_mcc_module ". - "AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ". - "AND app.id_semestre = mcc_ue.id_semestre ". + $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom + FROM groupe as g, appartenance as app, mcc_ue, mcc_module as mcc_m, controle as ctrl + WHERE app.id_groupe = g.id_groupe + AND ctrl.id_mcc_module = mcc_m.id_mcc_module + AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue + AND app.id_semestre = mcc_ue.id_semestre - "AND ctrl.id_controle = :controle ". - "ORDER BY g.nom ASC"); + AND ctrl.id_controle = :controle + ORDER BY g.nom ASC"); $getGroupeList->execute(array( ':controle' => $controle )); @@ -309,15 +309,15 @@ class groupRepo extends DBAccess{ $semestrePair0 = '0'; $semestrePair1 = '1'; if( is_bool($semestre_pair) ){ $semestrePair0 = ($semestre_pair)?'0':'1'; $semestrePair1 = ($semestre_pair)?'0':'1'; } - $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation ". - "FROM groupe as g, semestre as s, appartenance as app, formation as f ". - "WHERE s.id_formation = f.id_formation ". - "AND g.id_groupe = app.id_groupe ". - "AND s.id_semestre = app.id_semestre ". + $getGroupeList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation + FROM groupe as g, semestre as s, appartenance as app, formation as f + WHERE s.id_formation = f.id_formation + AND g.id_groupe = app.id_groupe + AND s.id_semestre = app.id_semestre - "AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) ". - "AND s.annee = :annee ". - "ORDER BY g.nom"); + AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) + AND s.annee = :annee + ORDER BY g.nom"); $getGroupeList->execute(array( ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee )); return DataBase::delNumeric( $getGroupeList->fetchAll() ); diff --git a/manager/repo/module.php b/manager/repo/module.php index e99fdbc..fec1ca8 100755 --- a/manager/repo/module.php +++ b/manager/repo/module.php @@ -58,15 +58,15 @@ class moduleRepo extends DBAccess{ */ public static function forStudent($UEUID, $semestre){ // on récupère les modules - $getModulesForStudent = DataBase::getPDO()->prepare("SELECT DISTINCT m.id_module as id, m.nom, m.libelle ". - "FROM module as m, semestre as s, mcc_ue, mcc_module as mcc_m ". - "WHERE mcc_ue.id_semestre = s.id_semestre ". - "AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ". - "AND mcc_m.id_module = m.id_module ". + $getModulesForStudent = DataBase::getPDO()->prepare("SELECT DISTINCT m.id_module as id, m.nom, m.libelle + FROM module as m, semestre as s, mcc_ue, mcc_module as mcc_m + WHERE mcc_ue.id_semestre = s.id_semestre + AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue + AND mcc_m.id_module = m.id_module - "AND mcc_ue.id_ue = :UEUID ". - "AND s.id_semestre = :semestre ". - "ORDER BY m.nom, m.libelle"); + AND mcc_ue.id_ue = :UEUID + AND s.id_semestre = :semestre + ORDER BY m.nom, m.libelle"); $getModulesForStudent->execute(array( ':UEUID' => $UEUID, ':semestre' => $semestre )); return DataBase::delNumeric( $getModulesForStudent->fetchAll() ); @@ -87,16 +87,16 @@ class moduleRepo extends DBAccess{ public static function forTeacher($enseignant, $UEUID, $semestre){ // on récupère les modules - $getModulesForTeacher = DataBase::getPDO()->prepare("SELECT DISTINCT m.id_module as id, m.nom, m.libelle ". - "FROM module as m, mcc_module as mcc_m, mcc_ue, enseignement as ens ". - "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 ". + $getModulesForTeacher = DataBase::getPDO()->prepare("SELECT DISTINCT m.id_module as id, m.nom, m.libelle + FROM module as m, mcc_module as mcc_m, mcc_ue, enseignement as ens + 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 ens.id_enseignant = :enseignant ". - "AND mcc_ue.id_ue = :UEUID ". - "AND mcc_ue.id_semestre = :semestre ". - "ORDER BY m.nom, m.libelle"); + AND ens.id_enseignant = :enseignant + AND mcc_ue.id_ue = :UEUID + AND mcc_ue.id_semestre = :semestre + ORDER BY m.nom, m.libelle"); $getModulesForTeacher->execute(array( ':enseignant' => $enseignant, ':UEUID' => $UEUID, ':semestre' => $semestre )); return DataBase::delNumeric( $getModulesForTeacher->fetchAll() ); @@ -116,15 +116,15 @@ class moduleRepo extends DBAccess{ */ public static function forYear($UEUID, $semestre){ // on récupère les modules - $getModulesForYear = DataBase::getPDO()->prepare("SELECT DISTINCT m.id_module as id, m.nom, m.libelle ". - "FROM module as m, mcc_module as mcc_m, mcc_ue, semestre as s ". - "WHERE m.id_module = mcc_m.id_module ". - "AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ". - "AND mcc_ue.id_semestre = s.id_semestre ". + $getModulesForYear = DataBase::getPDO()->prepare("SELECT DISTINCT m.id_module as id, m.nom, m.libelle + FROM module as m, mcc_module as mcc_m, mcc_ue, semestre as s + WHERE m.id_module = mcc_m.id_module + AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue + AND mcc_ue.id_semestre = s.id_semestre - "AND mcc_ue.id_ue = :UEUID ". - "AND s.id_semestre = :semestre ". - "ORDER BY s.rang, m.nom, m.libelle"); + AND mcc_ue.id_ue = :UEUID + AND s.id_semestre = :semestre + ORDER BY s.rang, m.nom, m.libelle"); $getModulesForYear->execute(array( ':UEUID' => $UEUID, ':semestre' => $semestre )); return DataBase::delNumeric( $getModulesForYear->fetchAll() ); @@ -156,8 +156,7 @@ class moduleRepo extends DBAccess{ /* [3] On créé le nouveu module =================================================================================================*/ - $creationModule = DataBase::getPDO()->prepare("INSERT INTO module(id_module, nom, libelle) ". - "VALUES(DEFAULT, :nom, :libelle)"); + $creationModule = DataBase::getPDO()->prepare("INSERT INTO module(id_module, nom, libelle) VALUES(DEFAULT, :nom, :libelle)"); $creationModule->execute(array( ':nom' => $nom, ':libelle' => $libelle diff --git a/manager/repo/note.php b/manager/repo/note.php index 550f035..534662a 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -20,13 +20,13 @@ class noteRepo extends DBAccess{ * */ public static function UID($etudiant, $controle){ - $getNoteUID = DataBase::getPDO()->prepare("SELECT note.id_note as id ". - "FROM appartenance as app, note, controle as ctrl ". - "WHERE app.id_appartenance = note.id_appartenance ". - "AND ctrl.id_controle = note.id_controle ". + $getNoteUID = DataBase::getPDO()->prepare("SELECT note.id_note as id + FROM appartenance as app, note, controle as ctrl + WHERE app.id_appartenance = note.id_appartenance + AND ctrl.id_controle = note.id_controle - "AND app.id_etudiant = :etudiant ". - "AND ctrl.id_controle = :controle"); + AND app.id_etudiant = :etudiant + AND ctrl.id_controle = :controle"); $getNoteUID->execute(array( ':etudiant' => $etudiant, ':controle' => $controle )); // on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID de l'utilisateur @@ -68,18 +68,18 @@ class noteRepo extends DBAccess{ * */ public static function forStudent($etudiant, $controle){ - $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT n.id_note as id, n.id_appartenance, n.id_controle, n.valeur ". - "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m ". - "WHERE n.id_appartenance = app.id_appartenance ". - "AND app.id_semestre = s.id_semestre ". - "AND s.id_semestre = mcc_ue.id_semestre ". - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". - "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". - "AND n.id_controle = ctrl.id_controle ". + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT n.id_note as id, n.id_appartenance, n.id_controle, n.valeur + FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m + WHERE n.id_appartenance = app.id_appartenance + AND app.id_semestre = s.id_semestre + AND s.id_semestre = mcc_ue.id_semestre + AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue + AND mcc_m.id_mcc_module = ctrl.id_mcc_module + AND n.id_controle = ctrl.id_controle - "AND app.id_etudiant = :etudiant ". - "AND ctrl.id_controle = :controle ". - "ORDER BY n.valeur ASC"); + AND app.id_etudiant = :etudiant + AND ctrl.id_controle = :controle + ORDER BY n.valeur ASC"); $getNoteList->execute(array( ':etudiant' => $etudiant, ':controle' => $controle )); return DataBase::delNumeric( $getNoteList->fetchAll() ); @@ -109,21 +109,21 @@ class noteRepo extends DBAccess{ ============================================================*/ if( !is_int($groupe) ){ - $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as moyenne, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes ". - "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g ". - "WHERE n.id_appartenance = app.id_appartenance ". - "AND app.id_semestre = s.id_semestre ". - "AND app.id_groupe = g.id_groupe ". - "AND s.id_semestre = mcc_ue.id_semestre ". - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". - "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". - "AND n.id_controle = ctrl.id_controle ". + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as moyenne, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes + FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g + WHERE n.id_appartenance = app.id_appartenance + AND app.id_semestre = s.id_semestre + AND app.id_groupe = g.id_groupe + AND s.id_semestre = mcc_ue.id_semestre + AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue + AND mcc_m.id_mcc_module = ctrl.id_mcc_module + AND n.id_controle = ctrl.id_controle - "AND ctrl.id_controle = :controle ". + AND ctrl.id_controle = :controle - "GROUP BY g.id_groupe ". + GROUP BY g.id_groupe - "ORDER BY g.nom ASC"); + ORDER BY g.nom ASC"); $getNoteList->execute(array( ':controle' => $controle )); @@ -131,20 +131,20 @@ class noteRepo extends DBAccess{ ============================================================*/ }else{ - $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT n.id_note as id, g.nom as groupe, app.id_etudiant as etudiant, n.id_appartenance, n.id_controle, n.valeur ". - "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g ". - "WHERE n.id_appartenance = app.id_appartenance ". - "AND app.id_semestre = s.id_semestre ". - "AND app.id_groupe = g.id_groupe ". - "AND s.id_semestre = mcc_ue.id_semestre ". - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". - "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". - "AND n.id_controle = ctrl.id_controle ". + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT n.id_note as id, g.nom as groupe, app.id_etudiant as etudiant, n.id_appartenance, n.id_controle, n.valeur + FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g + WHERE n.id_appartenance = app.id_appartenance + AND app.id_semestre = s.id_semestre + AND app.id_groupe = g.id_groupe + AND s.id_semestre = mcc_ue.id_semestre + AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue + AND mcc_m.id_mcc_module = ctrl.id_mcc_module + AND n.id_controle = ctrl.id_controle - "AND ctrl.id_controle = :controle ". - "AND app.id_groupe = :groupe ". + AND ctrl.id_controle = :controle + AND app.id_groupe = :groupe - "ORDER BY g.nom ASC"); + ORDER BY g.nom ASC"); $getNoteList->execute(array( ':controle' => $controle, ':groupe' => $groupe )); } @@ -166,22 +166,22 @@ class noteRepo extends DBAccess{ * */ public static function forGroupe($controle, $groupe){ - $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as moyenne, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes ". - "FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g ". - "WHERE n.id_appartenance = app.id_appartenance ". - "AND app.id_semestre = s.id_semestre ". - "AND app.id_groupe = g.id_groupe ". - "AND s.id_semestre = mcc_ue.id_semestre ". - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". - "AND mcc_m.id_mcc_module = ctrl.id_mcc_module ". - "AND n.id_controle = ctrl.id_controle ". + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as moyenne, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes + FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g + WHERE n.id_appartenance = app.id_appartenance + AND app.id_semestre = s.id_semestre + AND app.id_groupe = g.id_groupe + AND s.id_semestre = mcc_ue.id_semestre + AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue + AND mcc_m.id_mcc_module = ctrl.id_mcc_module + AND n.id_controle = ctrl.id_controle - "AND ctrl.id_controle = :controle ". - "AND app.id_groupe = :groupe ". + AND ctrl.id_controle = :controle + AND app.id_groupe = :groupe - "GROUP BY g.id_groupe ". + GROUP BY g.id_groupe - "ORDER BY g.nom ASC"); + ORDER BY g.nom ASC"); $getNoteList->execute(array( ':controle' => $controle, ':groupe' => $groupe )); return $getNoteList->fetch(); @@ -198,12 +198,12 @@ class noteRepo extends DBAccess{ * */ public static function moyenneForControle($controle){ - $getMoyenne = DataBase::getPDO()->prepare("SELECT ctrl.id_controle, AVG(n.valeur) as moyenne ". - "FROM controle as ctrl, note as n ". - "WHERE ctrl.id_controle = n.id_controle ". - "AND ctrl.id_controle = :controle ". + $getMoyenne = DataBase::getPDO()->prepare("SELECT ctrl.id_controle, AVG(n.valeur) as moyenne + FROM controle as ctrl, note as n + WHERE ctrl.id_controle = n.id_controle + AND ctrl.id_controle = :controle - "GROUP BY ctrl.id_controle"); + GROUP BY ctrl.id_controle"); $getMoyenne->execute(array( ':controle' => $controle )); if( $fetchObj = $getMoyenne->fetch() ) @@ -231,13 +231,13 @@ class noteRepo extends DBAccess{ ============================================================================*/ if( !($noteUID=noteRepo::UID($etudiant, $controle)) ){ - $creationNote = DataBase::getPDO()->prepare("INSERT INTO note(id_note, id_appartenance, id_controle, valeur) ". - "VALUES(". - "DEFAULT, ". - "(SELECT id_appartenance FROM appartenance WHERE id_etudiant = :etudiant AND id_semestre = :semestre), ". - ":controle, ". - ":valeur". - ")"); + $creationNote = DataBase::getPDO()->prepare("INSERT INTO note(id_note, id_appartenance, id_controle, valeur) + VALUES( + DEFAULT, + (SELECT id_appartenance FROM appartenance WHERE id_etudiant = :etudiant AND id_semestre = :semestre), + :controle, + :valeur. + )"); $creationNote->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre, ':controle' => $controle, ':valeur' => $valeur )); diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index a71950f..af54eba 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -57,10 +57,10 @@ class semestreRepo extends DBAccess{ */ public static function info($semestreUID){ // on considère que le semestre existe - $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, s.nom, s.rang, s.annee, f.id_formation, f.code as formation, f.nom as nom_formation ". - "FROM semestre as s, formation as f ". - "WHERE s.id_formation = f.id_formation ". - "AND s.id_semestre = :semestreUID"); + $getSemestreInfo = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, s.nom, s.rang, s.annee, f.id_formation, f.code as formation, f.nom as nom_formation + FROM semestre as s, formation as f + WHERE s.id_formation = f.id_formation + AND s.id_semestre = :semestreUID"); $getSemestreInfo->execute(array( ':semestreUID' => $semestreUID )); // on retourne le résultat en supprimant les doublons à indices numériques @@ -89,15 +89,15 @@ class semestreRepo extends DBAccess{ // on formate les variables $semestre_pair = ($semestre_pair) ? '0' : '1'; - $getSemestreUID = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation ". - "FROM semestre as s, appartenance as app, formation as f ". - "WHERE s.id_formation = f.id_formation ". - "AND app.id_semestre = s.id_semestre ". + $getSemestreUID = DataBase::getPDO()->prepare("SELECT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation + FROM semestre as s, appartenance as app, formation as f + WHERE s.id_formation = f.id_formation + AND app.id_semestre = s.id_semestre - "AND app.id_etudiant = :etudiant ". - "AND s.annee = :annee ". - "AND s.rang % 2 = :semestre_pair ". - "ORDER BY s.rang DESC"); + AND app.id_etudiant = :etudiant + AND s.annee = :annee + AND s.rang % 2 = :semestre_pair + ORDER BY s.rang DESC"); $getSemestreUID->execute(array( ':etudiant' => $etudiant, ':annee' => $annee, @@ -122,17 +122,17 @@ class semestreRepo extends DBAccess{ * */ public static function forTeacher($enseignant, $semestre_pair, $annee){ - $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". - "FROM semestre as s, formation as f, enseignement as ens, mcc_module as mcc_m, mcc_ue ". - "WHERE s.id_semestre = mcc_ue.id_semestre ". // semestre <-> mcc_ue - "AND s.id_formation = f.id_formation ". // semestre <-> formation - "AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ". // mcc_ue <-> mcc_module - "AND mcc_m.id_mcc_module = ens.id_mcc_module ". // mcc_module <-> enseignement + $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee + FROM semestre as s, formation as f, enseignement as ens, mcc_module as mcc_m, mcc_ue + WHERE s.id_semestre = mcc_ue.id_semestre + AND s.id_formation = f.id_formation + AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue + AND mcc_m.id_mcc_module = ens.id_mcc_module - "AND ens.id_enseignant = :enseignant ". - "AND s.rang % 2 = :semestre_pair ". - "AND s.annee = :annee ". - "ORDER BY s.rang ASC"); + AND ens.id_enseignant = :enseignant + AND s.rang % 2 = :semestre_pair + AND s.annee = :annee + ORDER BY s.rang ASC"); $getSemestreList->execute(array( ':enseignant' => $enseignant, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); return DataBase::delNumeric( $getSemestreList->fetchAll() ); @@ -149,11 +149,11 @@ class semestreRepo extends DBAccess{ * */ public static function forYear($annee){ - $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee ". - "FROM semestre as s, formation as f ". - "WHERE s.id_formation = f.id_formation ". - "AND annee = :annee ". - "ORDER BY rang ASC"); + $getSemestreList = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee + FROM semestre as s, formation as f + WHERE s.id_formation = f.id_formation + AND annee = :annee + ORDER BY rang ASC"); $getSemestreList->execute(array( ':annee' => $annee )); return DataBase::delNumeric( $getSemestreList->fetchAll() ); diff --git a/manager/repo/ue.php b/manager/repo/ue.php index 9be1d26..b3e36c9 100755 --- a/manager/repo/ue.php +++ b/manager/repo/ue.php @@ -57,15 +57,15 @@ class ueRepo extends DBAccess{ */ public static function forStudent($etudiant, $semestre){ // on récupère les modules - $getUesForStudent = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". - "FROM appartenance as app, semestre as s, mcc_ue, ue ". - "WHERE app.id_semestre = s.id_semestre ". - "AND mcc_ue.id_semestre = s.id_semestre ". - "AND mcc_ue.id_ue = ue.id_ue ". + $getUesForStudent = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle + FROM appartenance as app, semestre as s, mcc_ue, ue + WHERE app.id_semestre = s.id_semestre + AND mcc_ue.id_semestre = s.id_semestre + AND mcc_ue.id_ue = ue.id_ue - "AND app.id_etudiant = :etudiant ". - "AND s.id_semestre = :semestre ". - "ORDER BY ue.nom, ue.libelle"); + AND app.id_etudiant = :etudiant + AND s.id_semestre = :semestre + ORDER BY ue.nom, ue.libelle"); $getUesForStudent->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre )); return DataBase::delNumeric( $getUesForStudent->fetchAll() ); @@ -83,18 +83,18 @@ class ueRepo extends DBAccess{ */ public static function forTeacher($enseignant, $semestre){ // on récupère les modules - $getUesForTeacher = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.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 ens.correcteur = 1 ". // si l'enseignant est correcteur uniquement - "AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ". - "AND mcc_ue.id_semestre = s.id_semestre ". - "AND mcc_ue.id_ue = ue.id_ue ". + $getUesForTeacher = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.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 ens.correcteur = 1 + AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue + AND mcc_ue.id_semestre = s.id_semestre + AND mcc_ue.id_ue = ue.id_ue - "AND ens.id_enseignant = :enseignant ". - "AND s.id_semestre = :semestre ". + AND ens.id_enseignant = :enseignant + AND s.id_semestre = :semestre - "ORDER BY ue.nom, ue.libelle ASC"); + ORDER BY ue.nom, ue.libelle ASC"); $getUesForTeacher->execute(array( ':enseignant' => $enseignant, ':semestre' => $semestre )); return DataBase::delNumeric( $getUesForTeacher->fetchAll() ); @@ -112,13 +112,13 @@ class ueRepo extends DBAccess{ */ public static function forYear($semestre){ // on récupère les modules - $getUEList = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle ". - "FROM ue, mcc_ue, semestre as s ". - "WHERE ue.id_ue = mcc_ue.id_ue ". - "AND mcc_ue.id_semestre = s.id_semestre ". + $getUEList = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle + FROM ue, mcc_ue, semestre as s + WHERE ue.id_ue = mcc_ue.id_ue + AND mcc_ue.id_semestre = s.id_semestre - "AND s.id_semestre = :semestre ". - "ORDER BY s.rang, ue.nom, ue.libelle"); + AND s.id_semestre = :semestre + ORDER BY s.rang, ue.nom, ue.libelle"); $getUEList->execute(array( ':semestre' => $semestre )); return DataBase::delNumeric( $getUEList->fetchAll() ); @@ -155,8 +155,7 @@ class ueRepo extends DBAccess{ /* [3] On créé le nouvel UE =================================================================================================*/ - $creationUE = DataBase::getPDO()->prepare("INSERT INTO ue(id_ue, nom, libelle) ". - "VALUES(DEFAULT, :nom, :libelle)"); + $creationUE = DataBase::getPDO()->prepare("INSERT INTO ue(id_ue, nom, libelle) VALUES(DEFAULT, :nom, :libelle)"); $creationUE->execute(array( ':nom' => $nom, ':libelle' => $libelle diff --git a/manager/repo/user.php b/manager/repo/user.php index 5fd1adc..ac57665 100755 --- a/manager/repo/user.php +++ b/manager/repo/user.php @@ -36,27 +36,27 @@ class userRepo extends DBAccess{ /* [2] Cas où on cherche si un étudiant est inscrit à un semestre ==============================================================*/ - $getUtilisateurUID = DataBase::getPDO()->prepare("SELECT u.identifiant as id ". - "FROM utilisateur as u, appartenance as app ". - "WHERE u.identifiant = app.id_etudiant ". - "AND u.identifiant = :identifiant ". - "AND app.id_semestre = :semestre"); + $getUtilisateurUID = DataBase::getPDO()->prepare("SELECT u.identifiant as id + FROM utilisateur as u, appartenance as app + WHERE u.identifiant = app.id_etudiant + AND u.identifiant = :identifiant + AND app.id_semestre = :semestre"); $getUtilisateurUID->execute(array( ':identifiant' => $identifiant, ':semestre' => $semestre )); }elseif( is_bool($semestre_pair) && $annee != null ){ /* [2] Cas où on cherche si un enseignant enseigne l'année donnée ==============================================================*/ - $getUtilisateurUID = DataBase::getPDO()->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 ". + $getUtilisateurUID = DataBase::getPDO()->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 u.identifiant = :identifiant ". - "AND s.rang % 2 = :semestre_pair ". - "AND s.annee = :annee"); + AND u.identifiant = :identifiant + AND s.rang % 2 = :semestre_pair + AND s.annee = :annee"); $getUtilisateurUID->execute(array( ':identifiant' => $identifiant, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); }else // si les paramètres sont pas bons @@ -131,8 +131,8 @@ class userRepo extends DBAccess{ /* [3] On créé le nouvel utilisateur =================================================================================================*/ - $creationUtilisateur = DataBase::getPDO()->prepare("INSERT INTO utilisateur(identifiant, prenom, nom, mail, mdp, droits) ". - "VALUES(:identifiant, :prenom, :nom, :mail, :mdp, :droits)"); + $creationUtilisateur = DataBase::getPDO()->prepare("INSERT INTO utilisateur(identifiant, prenom, nom, mail, mdp, droits) + VALUES(:identifiant, :prenom, :nom, :mail, :mdp, :droits)"); $creationUtilisateur->execute(array( ':identifiant' => $identifiant, ':prenom' => $prenom, diff --git a/page/modules.php b/page/modules.php index 27ede14..c37c219 100755 --- a/page/modules.php +++ b/page/modules.php @@ -471,7 +471,6 @@ if( permission('admin') ){ // si l'utilisateur est un admin modules_switch_level_1($request, $answer); // var_dump( $answer ); - if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// echo "
    "; From 518280333a49bf206a891df71ab2a9f9ec93f331 Mon Sep 17 00:00:00 2001 From: Clecle Date: Tue, 17 Nov 2015 19:02:28 +0100 Subject: [PATCH 36/39] =?UTF-8?q?CheckParam()=20avec=20param=C3=A8tres=20v?= =?UTF-8?q?ariables?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/security.php | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/manager/security.php b/manager/security.php index 2bdbd48..56cfe2a 100755 --- a/manager/security.php +++ b/manager/security.php @@ -202,4 +202,39 @@ } + /*function checkParamBIS( ...$checkIt ) { + + + // checkIt[] Tableau | checkIT[][] Types des Variables | checkIt[][][] Formats des variables | checkIt[][][][] Valeur des varialbes + + + $checker = false; + + for( $i = 0; $i < func_num_args(); $i++) { + + for( $j = 0; $j < sizeof( $checkIt[$i] ); $j++) { + + switch ($checkIt[$i][$j]) { + + case 'string': if( is_string( $checkIt[$i][$j][$j][$j] ) ) + $checker = is_string( $checkIt[$i][$j][$j][$j] ) && preg_match( $checkIt[$i][$j][$j], (String) $checkIt[$i][$j][$j][$j] ); + break; + case 'int': if( is_string( $checkIt[$i][$j][$j][$j]) ) + $checker = is_int( $checkIt[$i][$j][$j][$j] ) && preg_match( $checkIt[$i][$j][$j], (String) $checkIt[$i][$j][$j][$j] ); + break; + case 'numeric': if( is_string( $checkIt[$i][$j][$j][$j]]) ) + $checker = is_numeric( $checkIt[$i][$j][$j][$j] ) && preg_match( $checkIt[$i][$j][$j], (String) $checkIt[$i][$j][$j][$j] ); + break; + case 'array': if( is_numeric( $checkIt[$i][$j][$j][$j]) ) + $checker = is_array( $checkIt[$i][$j][$j][$j] ) && count( $checkIt[$i][$j][$j] ) > 0; + break; + } + + } + } + + return $checker; + + }*/ + ?> From 4151f802422a8fc571e05e5c614b131b55d9512c Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 17 Nov 2015 21:26:08 +0100 Subject: [PATCH 37/39] =?UTF-8?q?Correction=20manager/groupRepo=20unificat?= =?UTF-8?q?ion=20des=20String(s)=20des=20requ=C3=AAtes=20SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/repo/group.php | 4 ++-- page/modules.php | 34 ---------------------------------- 2 files changed, 2 insertions(+), 36 deletions(-) diff --git a/manager/repo/group.php b/manager/repo/group.php index 97a2a74..f5a2815 100755 --- a/manager/repo/group.php +++ b/manager/repo/group.php @@ -179,7 +179,7 @@ class groupRepo extends DBAccess{ WHERE s.id_formation = f.id_formation AND u.identifiant = app.id_etudiant AND g.id_groupe = app.id_groupe - AND app.id_semestre = app.id_semestre // à virer (peut-être) + AND app.id_semestre = app.id_semestre AND g.id_groupe = :groupeUID AND s.id_semestre = :semestreUID @@ -249,7 +249,7 @@ class groupRepo extends DBAccess{ AND mcc_m.id_mcc_module = ens.id_mcc_module AND ens.id_enseignant = u.identifiant - AND ens.correcteur = 1 // uniquement les groupes pour lesquels il est correcteur + AND ens.correcteur = 1 AND app.id_etudiant = eleve.identifiant AND app.id_semestre = s.id_semestre diff --git a/page/modules.php b/page/modules.php index c37c219..c50c537 100755 --- a/page/modules.php +++ b/page/modules.php @@ -449,40 +449,6 @@ if( permission('admin') ){ // si l'utilisateur est un admin } - - - - - - - - - -/***************************************/ -/*** GESTION DES MCC (version admin) ***/ -/***************************************/ -if( permission('admin') ){ // si l'utilisateur est un admin - - $request = new stdClass(); $answer = new stdClass(); - - $request->level_1 = 'getMCC'; - $request->annee = $_SESSION['annee']; - - modules_switch_level_1($request, $answer); - - // var_dump( $answer ); - if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe - //////////////////////////////////////////////////////////////////////////////// - echo "
    "; - - echo ""; - - }else - echo "
    Aucun module trouvé
    "; - -} - - ?> From a44027bdb5cc1bd672f97869b6c9f64c0d8d8170 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 18 Nov 2015 09:37:36 +0100 Subject: [PATCH 38/39] =?UTF-8?q?Ajout=20des=20input=20pour=20ajouter=20un?= =?UTF-8?q?=20module=20=C3=A0=20un=20UE=20d'un=20Semestre?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/global.css | 18 +++++++++++++++--- manager/database.php | 8 ++++++-- manager/repo/module.php | 14 ++++++++++++++ page/modules.php | 18 +++++++++++++++++- 4 files changed, 52 insertions(+), 6 deletions(-) diff --git a/css/global.css b/css/global.css index ea808f2..c3acbd8 100755 --- a/css/global.css +++ b/css/global.css @@ -205,6 +205,12 @@ select{ appearance:none; } +/* select grisé => selection modules existants par exemple */ +tr.grayscale select{ + border-color: #bdbdbd; + color: #4e4e4e; +} + /* pour déplacement d'élève */ td select{ margin: -1em; padding: .5em; } @@ -257,7 +263,8 @@ td select > option{ padding: 0; } /* @all */ -.confirm.all{ margin-top: -.7em; } +.confirm.all, +tr.grayscale .confirm{ margin-top: -.7em; } @@ -280,7 +287,8 @@ body.trHoverActivated tr:hover td .confirm.active{ } /* saisie note */ -.saisie_note{ +.saisie_note, +tr.grayscale input{ /* position */ margin: -.5em; width: 4em; @@ -292,7 +300,11 @@ body.trHoverActivated tr:hover td .confirm.active{ } /* @focus */ -.saisie_note:focus{ border-color: #999; } +.saisie_note:focus, +tr.grayscale input:focus{ + border-color: #999; +} + diff --git a/manager/database.php b/manager/database.php index 638134f..6d526f2 100755 --- a/manager/database.php +++ b/manager/database.php @@ -355,8 +355,12 @@ class DataBase{ - - + /**********************************************************/ + /*** retourne la liste exhaustive des MODULES de la BDD ***/ + /**********************************************************/ + public function getExhaustiveModuleList(){ + return moduleRepo::exhaustiveList(); + } diff --git a/manager/repo/module.php b/manager/repo/module.php index fec1ca8..a5c4125 100755 --- a/manager/repo/module.php +++ b/manager/repo/module.php @@ -171,4 +171,18 @@ class moduleRepo extends DBAccess{ + + /* retourne la liste de tous les modules existants + * + * @return modules retourne la liste de tous les modules existant + * + */ + public static function exhaustiveList(){ + $getModuleList = DataBase::getPDO()->query("SELECT id_module as id, nom, libelle FROM module ORDER BY nom, libelle"); + + return DataBase::delNumeric( $getModuleList->fetchAll() ); + } + + + } \ No newline at end of file diff --git a/page/modules.php b/page/modules.php index c50c537..44f826c 100755 --- a/page/modules.php +++ b/page/modules.php @@ -432,7 +432,23 @@ if( permission('admin') ){ // si l'utilisateur est un admin echo ''.$UE['nom'].' - '.$UE['libelle'].''; echo ''; } - + + require_once __ROOT__.'/manager/database.php'; + debug(); + $completeModuleList = DataBase::getInstance()->getExhaustiveModuleList(); + // saisie d'un nouveau module + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
    Ajouter le module
    "; + echo ""; + echo ''; echo ''; From f0222656ab178a2a6936bb940fbd1cb6714e0c9c Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 18 Nov 2015 09:48:08 +0100 Subject: [PATCH 39/39] =?UTF-8?q?M=C3=A0j=20checkParam=20pour=20aur=C3=A9l?= =?UTF-8?q?ien?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/security.php | 91 +++++++++++--------------------------------- 1 file changed, 23 insertions(+), 68 deletions(-) diff --git a/manager/security.php b/manager/security.php index 56cfe2a..b6a348d 100755 --- a/manager/security.php +++ b/manager/security.php @@ -129,76 +129,31 @@ * @return toutOK VRAI si variables bonnes / FAUX sinon * */ - function checkParam($tabVar, $tabType, $tabForm) { - // FORMAT DE $tabVar - // - // $tabVar = array( - // $stringVar, // chaine de caractères - // $integerVar, // entier - // $numericVar, // nombre (sous forme d'entier ou de chaine) - // $arrayVar // tableau - // ); + function checkParam($variable, $type){ + $checker = isset($variable); - // FORMAT DE $tabType - // - // $tabType = array( - // 'string', // chaine de caractères - // 'int', // entier - // 'numeric', // nombre (sous forme d'entier ou de chaine) - // 'array' // tableau - // ); - - - // FORMAT DE $tabForm - // - // $tabType = array( - // '/^[a-z0-9]{1,5}$/i', // chaine de caractères - // '/^[0-9]+$/', // entier - // '/^[0-9]+$/', // nombre (sous forme d'entier ou de chaine) - // '??????' // tableau - // ); - - - - - - /* [1] Vérification de l'intégrité des tableaux - =============================================================================*/ - $areArrays = is_array($tabVar) && is_array($tabForm); // si ce sont bien des tabeaux - $areNEmpty = $areArrays && count($tabVar) > 0; // si ils ne sont pas vides - $haveEqLen = $areNEmpty && count($tabVar) == count($tabForm); // si ils ont la même taille - - if( !$haveEqLen ) // si toutes les conditions ne sont pas vérifiées - return false; // on retourne faux, car ne pourra pas être vrai - - - /* [2] Pour chaque variable on vérifie les données - =============================================================================*/ - $checker = false; // on définit le checker à VRAI - - // Vérification des types - - // pour chaque variable - for($i = 0 ; $i < count($tabVar) ; $i++) { - - switch($tabType[$i]) { - - case 'string': if( is_string($tabForm[$i]) ) - $checker = is_string($tabVar[$i]) && preg_match($tabForm[$i], (String) $tabVar[$i]); - break; - case 'int': if( is_string($tabForm[$i]) ) - $checker = is_int($tabVar[$i]) && preg_match($tabForm[$i], (String) $tabVar[$i]); - break; - case 'numeric': if( is_string($tabForm[$i]) ) - $checker = is_numeric($tabVar[$i]) && preg_match($tabForm[$i], (String) $tabVar[$i]); - break; - case 'array': if( is_numeric($tabForm[$i]) ) - $checker = is_array($tabVar[i]) && count($tabVar[$i]) > 0; - break; - } + // traitement en fonction du type + switch($type){ + case 'utilisateur.identifiant': + return $checker && is_string($variable) && preg_match('/^[\w -]{3,50}$/i', $variable); + break; + case '': + return $checker && is_string($variable); + break; + case '': + return $checker && is_int($variable); + break; + case '': + return $checker && is_numeric($variable); + break; + case '': + return $checker && is_array($variable); + break; + case '': + return $checker && is_bool($variable); + break; } - - return $checker; + }