diff --git a/css/global.css b/css/global.css index a8da609..c3acbd8 100755 --- a/css/global.css +++ b/css/global.css @@ -11,14 +11,35 @@ /* .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; } +thead.normal > tr > th{ font-weight: normal; } +/*************************/ +/*** 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; } @@ -96,23 +117,22 @@ 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; } 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 +170,7 @@ span.link{ box-shadow: inset 0 0 1px #f5f5f5; /* background */ - background: #eee; + background: #fff; /* foreground */ color: #333; @@ -158,7 +178,7 @@ span.link{ /* extra */ cursor: pointer; } - +table.basic td > span.link{ background: #eee; } span.link:hover{ color: #000; } /*********************/ @@ -166,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; @@ -185,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; } @@ -196,7 +222,7 @@ select > option{ background-color: #fff; /* foreground */ - color: #233342; + color: #555; text-indent: 1em; } @@ -205,31 +231,138 @@ 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{ +.confirm{ /* position */ /*display: inline-block;*/ display: none; 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; } -.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 + + +/* @all */ +.confirm.all, +tr.grayscale .confirm{ margin-top: -.7em; } + + + +/* @active */ +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 + .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; +} + +/* saisie note */ +.saisie_note, +tr.grayscale input{ + /* position */ + margin: -.5em; + width: 4em; + padding: .5em 1em; + + /* border */ + border-radius: 3px; + border: 1px solid #bdbdbd; +} + +/* @focus */ +.saisie_note:focus, +tr.grayscale input:focus{ + border-color: #999; +} + + + + + + +/******************************/ +/*** 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-top-left-radius: 5px; + border-bottom-left-radius: 5px; +} + +/* @border + @radius */ +#CONTAINER > section > .partlist td:last-child{ + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + border-right: 1px solid #2dcc70; +} + + +#CONTAINER > section > .partlist td.active{ + background-color: #2dcc70; + color: #fff; +} \ No newline at end of file diff --git a/index.php b/index.php index 32aeb28..3aedd8f 100755 --- a/index.php +++ b/index.php @@ -33,7 +33,7 @@ $notifNotifNum = 5; - + 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 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') ){ + 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 ); @@ -110,16 +127,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 @@ -146,13 +163,16 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' ); } + // permet de recharger la page courante + 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+']'); 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); @@ -185,7 +205,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'); @@ -341,16 +361,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 ==============================================================*/ 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 65d0348..e1771c5 100755 --- a/manager/career.php +++ b/manager/career.php @@ -74,13 +74,118 @@ 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'; + + }else + $answer->request = 'permission_error'; + 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, $_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; + + + /**********************************************/ + /* 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 */ + /****************************************************/ + case 'saisieNote': 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 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'; diff --git a/manager/database.php b/manager/database.php index b22bffa..a9191fa 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; } @@ -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']); @@ -278,23 +263,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 +277,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( !($semestreInfo=semestreRepo::info($semestre)) ) 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, $semestreInfo['id']) ) return 'success'; else return 'error'; @@ -467,8 +355,12 @@ class DataBase{ - - + /**********************************************************/ + /*** retourne la liste exhaustive des MODULES de la BDD ***/ + /**********************************************************/ + public function getExhaustiveModuleList(){ + return moduleRepo::exhaustiveList(); + } @@ -482,66 +374,43 @@ 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); - } - - - - /***************************************************/ /*** retourne les modules des semestres en cours ***/ /***************************************************/ - public function getModulesByUEByYear($semestre_pair, $annee){ - // on récupère la liste des UEs - $UEList = ueRepo::forYear($semestre_pair, $annee); + public function getModulesByUEByYear($semestre_pair, $annee){ // ***OPTIONNEL*** semestre_pair - 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); + // on récupère les semestres de cette année + $semestreList = semestreRepo::forYear($annee); - return $UEList; + 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; } @@ -631,156 +500,99 @@ 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($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']); + + $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']); + + } + + } - 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]['notes'] = noteRepo::forTeacher($UEList[$iter_ue]['modules'][$iter_mod]['controles'][$iter_ct]['id']); } - } + } - return $UEList; + return $semestreList; } - /**************************************/ - /*** 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'; + + /********************************************/ + /*** retourne les notes pour un contrôle ***/ + /********************************************/ + 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'; + + // on ajoute la moyenne au contrôle + $controlObj['moyenne'] = noteRepo::moyenneForControle($controlObj['id']); + + /* [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 + + $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{ + $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(); + } - /*** 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 ". + return $controlObj; + } - "AND mcc_ue.id_ue = ue.id_ue ". - "AND mcc_ue.id_semestre = app.id_semestre ". - "AND mcc_ue.id_semestre = :semestreUID ". + + /******************************************/ + /*** 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'; - "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() ); } } -?> \ No newline at end of file +?> diff --git a/manager/groups.php b/manager/groups.php index 5dce139..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; @@ -267,14 +242,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/modules.php b/manager/modules.php index 1196e04..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'; @@ -112,13 +112,42 @@ 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); + $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 = $semestreList; // on retourne l'erreur + }else + $answer->request = 'param_error'; + + }else + $answer->request = 'permission_error'; + 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 diff --git a/manager/repo/controle.php b/manager/repo/controle.php index 58f28a8..5bc71fc 100755 --- a/manager/repo/controle.php +++ b/manager/repo/controle.php @@ -14,12 +14,21 @@ 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, 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 + + GROUP BY ctrl.id_controle"); $getControleInfo->execute(array( ':controleUID' => $controleUID )); @@ -42,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() ); @@ -70,20 +79,21 @@ 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 ". - "WHERE ens.id_mcc_module = mcc_m.id_mcc_module ". - "AND mcc_m.id_mcc_module = ctrl.id_mcc_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"); $getControleList->execute(array( ':enseignant' => $enseignant, ':module' => $module, ':semestre' => $semestre )); return DataBase::delNumeric( $getControleList->fetchAll() ); } - - } \ No newline at end of file diff --git a/manager/repo/group.php b/manager/repo/group.php index 07cd798..f5a2815 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, @@ -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,27 +121,19 @@ 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 ==============================*/ // 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"); - $ajouterMembre->execute(array( - ':groupe' => $groupeUID, + $ajouterMembres = DataBase::getPDO()->prepare("UPDATE appartenance + SET id_groupe = :groupe + WHERE id_appartenance = :appartenanceUID"); + $ajouterMembres->execute(array( + ':groupe' => $groupe, ':appartenanceUID' => $appartenanceUID )); @@ -150,15 +142,15 @@ 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) ". - " )"); - $ajouterMembre->execute(array( - ':etudiant' => $etudiantUID, - ':groupe' => $groupeUID, + $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, ':semestre' => $semestre )); @@ -182,15 +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 ". - "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 ". - "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 - "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 @@ -213,17 +206,18 @@ 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, 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_semestre = :semestreUID ". - "ORDER BY g.nom"); - $getGroupe->execute(array( ':etudiantUID' => $etudiantUID, ':semestreUID' => $semestreUID )); + AND app.id_etudiant = :etudiant + AND s.id_semestre = :semestre + ORDER BY g.nom"); + $getGroupe->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre )); - return DataBase::delNumeric( $getGroupe->fetch() ); + return $getGroupe->fetch(); } @@ -233,48 +227,68 @@ 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 ". - "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 ". - "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 - "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"); + $getGroupeList->execute(array( ':enseignant' => $enseignant, ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee )); + + return DataBase::delNumeric( $getGroupeList->fetchAll() ); + } + + + + + + /* 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 )); - "AND g.nom LIKE '".$groupeOpt."' ". - "AND s.nom LIKE '".$semestreOpt."' ". - "AND u.identifiant = :enseignant ". - "AND s.rang % 2 = :semestre_pair ". - "AND s.annee = :annee ". - "ORDER BY s.rang, g.nom"); - $getGroupeList->execute(array( ':enseignant' => $enseignant, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); return DataBase::delNumeric( $getGroupeList->fetchAll() ); } @@ -283,38 +297,27 @@ 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 ". - "FROM groupe as g, semestre as s, appartenance as app ". - "WHERE 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 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"); + 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 b2c08fb..a5c4125 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() ); @@ -105,29 +105,27 @@ 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 ". - "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.rang % 2 = :semestre_pair ". - "AND s.annee = :annee ". - "ORDER BY s.rang, m.nom, m.libelle"); - $getModulesForYear->execute(array( ':UEUID' => $UEUID, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + 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() ); } @@ -158,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 @@ -174,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/manager/repo/note.php b/manager/repo/note.php index 13494cb..534662a 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']; } @@ -93,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() ); @@ -114,39 +89,179 @@ 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 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 - "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() ); } + + /* 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(); + } + + + /* 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 NULL retourne NULL s'il y a aucune note à ce contrôle + * + */ + 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 + + GROUP BY ctrl.id_controle"); + $getMoyenne->execute(array( ':controle' => $controle )); + + if( $fetchObj = $getMoyenne->fetch() ) + return $fetchObj['moyenne']; + else + return null; + } + + + + /* 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/manager/repo/semestre.php b/manager/repo/semestre.php index 3955503..af54eba 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 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 @@ -86,14 +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 ". - "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.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, @@ -106,6 +110,56 @@ 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.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"); + $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 + * + * + * @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 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() ); + } + + } \ No newline at end of file diff --git a/manager/repo/ue.php b/manager/repo/ue.php index 8a35824..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.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() ); @@ -73,59 +73,55 @@ 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.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.rang % 2 = :semestre_pair ". - "AND s.annee = :annee ". + AND ens.id_enseignant = :enseignant + 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 )); + ORDER BY ue.nom, ue.libelle ASC"); + $getUesForTeacher->execute(array( ':enseignant' => $enseignant, ':semestre' => $semestre )); return DataBase::delNumeric( $getUesForTeacher->fetchAll() ); } - /* 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){ + 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.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.rang % 2 = :semestre_pair ". - "AND s.annee = :annee ". - "ORDER BY s.rang, ue.nom, ue.libelle"); - $getUEsForYear->execute(array( ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee )); + AND s.id_semestre = :semestre + ORDER BY s.rang, ue.nom, ue.libelle"); + $getUEList->execute(array( ':semestre' => $semestre )); - return DataBase::delNumeric( $getUEsForYear->fetchAll() ); + return DataBase::delNumeric( $getUEList->fetchAll() ); } @@ -159,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/manager/security.php b/manager/security.php index 62f96ec..b6a348d 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){ @@ -123,77 +129,67 @@ * @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; + } + /*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; + + }*/ + ?> diff --git a/page/_JS/career.js b/page/_JS/career.js index 96df9bb..f95f7cf 100644 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -1,21 +1,227 @@ \ No newline at end of file diff --git a/page/_JS/groups.js b/page/_JS/groups.js index 6303038..a44140e 100755 --- a/page/_JS/groups.js +++ b/page/_JS/groups.js @@ -2,78 +2,13 @@ -// 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(); - - - - - - -/* 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 en question initval: deplacementElements[i].value, // la valeur initiale du + streid: deplacementElements[i].dataset.stre, // l'UID du semestre associé au groupe userid: deplacementElements[i].parentNode.parentNode.children[0].children[0].innerHTML // l'identifiant de l'utilisateur associé à ce 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( /^confirm/.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 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 - if( response.request == 'success' ) selectSection( document.querySelector('#MENU > span[data-link='+pageM.page+']') ); + if( response.request == 'success' ) reload(); }); } @@ -130,27 +67,71 @@ if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ / } -/***************************************************/ -/*** GESTION DES SELECT POUR AFFINER LES GROUPES ***/ -/***************************************************/ -var selectList = document.querySelectorAll("#CONTAINER > section[name] > select"); + +/**********************************************************************/ +/*** 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], #CONTAINER > section[name] > table.partlist[name=formation]"); + +// GESTION DE L'AFFINAGE PAR 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' && 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[2]) ) + pageM.vars.pop(); + + reload(); + } + }, false); + +} -// GESTION DE LA PRISE EN COMPTE DES SELECT // -DOM.CONTAINER.addEventListener('change', function(e){ - if( e.target.tagName == 'SELECT' && ['semestre', 'groupe'].indexOf(e.target.getAttribute('name')) > -1 ){ - if( e.target.getAttribute('name') == 'semestre' ){ // SI modifie le semestre - pageM.vars[1] = e.target.value; // on selectionne semestre - pageM.vars[2] = '*'; // on désactive le groupe - }else{ // SINON - pageM.vars[1] = '*'; // on désactive le semestre - pageM.vars[2] = e.target.value; // on active le groupe +// GESTION DE L'AFFINAGE PAR GROUPE // +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[2] = 'g:'+e.target.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[2]) ) + pageM.vars.pop(); + + reload(); } - selectSection( document.querySelector('#MENU > span[data-link='+pageM.page+']') ); - // console.log(e.target.getAttribute('name')+' = '+e.target.value); - } -}, false); + }, false); + +} diff --git a/page/_JS/modules.js b/page/_JS/modules.js new file mode 100644 index 0000000..3229198 --- /dev/null +++ b/page/_JS/modules.js @@ -0,0 +1,48 @@ + \ No newline at end of file diff --git a/page/career.php b/page/career.php index 2e24baf..eab04cb 100755 --- a/page/career.php +++ b/page/career.php @@ -5,22 +5,45 @@ require_once __ROOT__.'/manager/modules.php'; require_once __ROOT__.'/manager/career.php'; - - /*** GESTION DES PARAMETRES OPTIONNELS ***/ - $postVars = array(); // on récupère les variables post + // on initialise les paramètres optionnels + $controleOpt = null; + $groupeOpt = null; + $etudiantOpt = null; + $ueOpt = null; + $semestreOpt = null; + $formationOpt = null; - foreach($_POST as $k=>$v) - array_push($postVars, $k); + // on cherche dans toutes les variables _get si on trouve des paramètres + foreach($_POST as $k=>$v){ - /* GESTION GROUPE OPTIONNEL */ - if( isset($postVars[1]) && is_string($postVars[1]) && strlen($postVars[1]) > 1 ) - $groupeOpt = $postVars[1]; - else - $groupeOpt = null; + if( preg_match('/^g:(.+)$/', $k, $m) ) // g:nomGroupe + $groupeOpt = $m[1]; + if( preg_match('/^c:(.+)$/', $k, $m) ) // c:idControle + $controleOpt = $m[1]; + if( preg_match('/^e:(.+)$/', $k, $m) ) // e:idEtudiant + $etudiantOpt = $m[1]; + + if( preg_match('/^u:(.+)$/', $k, $m) ) // u:nomUe + $ueOpt = $m[1]; + + 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; + $groupeOpt = ($groupeOpt == null || $groupeOpt == '*') ? null : $groupeOpt; + $etudiantOpt = ($etudiantOpt == null || $etudiantOpt == '*') ? null : $etudiantOpt; + $ueOpt = ($ueOpt == null || $ueOpt == '*') ? null : $ueOpt; + $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; + $formationOpt = ($formationOpt == null || $formationOpt == '*') ? null : $formationOpt; /**************************************** * * @@ -39,16 +62,15 @@ require_once __ROOT__.'/manager/career.php'; - + level_1 = 'getNotesEtudiant'; $request->etudiant = $_SESSION['identifiant']; @@ -59,42 +81,52 @@ 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 "
    "; + + 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){ // pour chaque UE - echo ""; - echo ""; - echo ''; - echo "'; - echo ''; - echo '
    ".$UE['nom'].' - '.$UE['libelle'].'
    '; - foreach($UE['modules'] as $module){ // pour chaque module - echo ''; - echo ''; + if( $ueOpt == null || $UE['nom'] == $ueOpt ){ // on affiche l'UE en fonction du paramètre passé par l'URL - foreach($module['controles'] as $controle){ // pour chaque contrôle - echo ''; - echo ''; + echo '
    '.$module['nom'].' - '.$module['libelle'].'
    '.$controle['intitule'].'
    '; + foreach($UE['modules'] as $module){ // pour chaque module + 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 ''; + 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'].'
    Pas de note'.number_format($controle['notes'][0]['valeur'], 2).' / '.$controle['base'].'".$module['nom']." - ".$module['libelle']."Coefficient '.number_format($controle['coefficient'], 2).'
    '.$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 ''; } //////////////////////////////////////////////////////////////////////////////// echo '
    '; }else - echo "
    Aucune note trouvée
    "; + echo "
    Aucune note trouvée
    "; } @@ -112,97 +144,385 @@ 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']; - $request->semestre = $_SESSION['semestre']; $request->annee = $_SESSION['annee']; career_switch_level_1($request, $answer); 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 - foreach($answer->UEs as $UE){ // pour chaque UE - echo ""; - echo ""; - echo ''; - echo "'; - echo ''; + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDUE = array(); + + // 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 "
    ".$UE['nom'].' - '.$UE['libelle'].'
    "; + 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 "
    ".$semestre['formation'].'".$semestre['formation'].'
    "; + + + + + /*************************/ + /* 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->semestres as $semestre){ if( $semestre['id_formation'] == $formationOpt && !in_array($semestre['id'], $ListeUIDSemestres) ){ - echo '
    TousTous
    '; - if( count($UE['modules']) > 0 ){ // s'il y a au moins un module + if( $semestre['id'] == $semestreOpt ) // si c'est le semestre séléctionné + echo "".$semestre['nom'].''; + else // sinon on affiche normalement + echo "".$semestre['nom'].''; - foreach($UE['modules'] as $module){ // pour chaque module - echo ""; - echo ''; - if( count($module['controles']) > 0 ){ // s'il y a au moins un contrôle pour ce module + // on ajoute le semestre à la liste pour ne pas le répéter + array_push($ListeUIDSemestres, $semestre['id']); - foreach($module['controles'] as $controle){ // pour chaque contrôle - echo ''; - echo ''; - - echo ""; + }} + echo "
    '.$module['nom'].' - '.$module['libelle'].'
    '.$controle['intitule'].'".$module['nom']." - ".$module['libelle']."
    "; - 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 ''.number_format($controle['moyenne'], 2).''; - - 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 ""; + + /*******************/ + /* AFFINAGE PAR UE */ + /*******************/ + 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']."
    "; + if( $ueOpt == null ) echo ""; + else 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 "'; + + // on ajoute l'UE à la liste pour ne pas le répéter + array_push($ListeUIDUE, $UE['id']); + }} + }} + echo "
    TousTous".$UE['nom'].'".$UE['nom'].'
    "; + + + + if( count($answer->semestres) > 0 ){ // si au moins un UE + + foreach($answer->semestres as $semestre){ + + 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['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 + + foreach($UE['modules'] as $module){ // pour chaque module + 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 ''; } - 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é
    '; } + echo ''; - }else // si aucun contrôle pour ce module - echo "Aucun contrôle trouvé"; - - echo ''; + } } } - echo ''; + } } //////////////////////////////////////////////////////////////////////////////// echo '
    '; }else - echo "
    Aucun contrôle trouvé
    "; + 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 ""; + + echo ""; + + + /* [1] Affichage par groupes + ====================================================================================*/ + if( $groupeOpt == null ){ + + if( $answer->controle['moyenne'] == null ) // 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 ""; + + + /* [1] Affichage par groupes + ====================================================================================*/ + if( $groupeOpt == null ){ + + foreach($answer->controle['grouplist'] as $groupe){ // on affiche la liste des groupes avec leurs stats + echo ""; + + echo ""; + + if( isset($groupe['nb_notes']) ){ // si ce groupe a des notes + + if( $groupe['nb_notes'] == 1 ) echo ""; + else echo ""; + + echo ""; + echo ""; + + }else{ // si le groupe n'a aucune note + + 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 on a une note + echo ""; + else // si noté + echo ""; + + echo ""; + + 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 '.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).'
    ".$groupe['nom']."".$groupe['nb_notes']." note".$groupe['nb_notes']." notesAllant de ".number_format($groupe['min'], 2)." à ".number_format($groupe['max'], 2)."Moyenne de ".number_format($groupe['moyenne'], 2)." / ".$answer->controle['base']."Pas de note
    ".$user['identifiant']."".$user['groupe']."".number_format($user['note'], 2)." / ".$answer->controle['base']."Pas noté"; + 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 "
    enregistrer
    "; + echo "
    tout enregistrer
    '; + + } + } +/***************************************************/ +/*** LES DOSSIERS ETUDIANTS (version enseignant) ***/ +/***************************************************/ +/* +* +* [1] Toutes les notes d'un enseignant +* +*/ +if( permission('teacher') && $etudiantOpt != null ){ + + $request = new stdClass(); $answer = new stdClass(); + + $request->level_1 = 'getNotesEtudiant'; + $request->etudiant = $etudiantOpt; + $request->semestre = $_SESSION['semestre']; + $request->annee = $_SESSION['annee']; + + career_switch_level_1($request, $answer); + + var_dump( $answer ); + + if( $answer->request == 'success' ){ // si on a bien récupéré les UE/notes + //////////////////////////////////////////////////////////////////////////////// + echo "
    "; + + + + + + foreach($answer->UEs as $UE){ // pour chaque UE + echo ""; + + echo "'; + + echo '
    ".$UE['nom'].' - '.$UE['libelle'].'
    '; + 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 '
    '.$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 '
    '; + }else + echo "
    Aucune note trouvée
    "; + + +} + + diff --git a/page/groups.php b/page/groups.php index a074277..13c106b 100755 --- a/page/groups.php +++ b/page/groups.php @@ -18,25 +18,28 @@ require_once __ROOT__.'/manager/groups.php'; /*** GESTION DES PARAMETRES OPTIONNELS ***/ - $postVars = array(); // on récupère les variables post + // on initialise les paramètres optionnels + $semestreOpt = null; + $groupeOpt = null; + $formationOpt = null; - foreach($_POST as $k=>$v) - array_push($postVars, $k); + // on cherche dans toutes les variables _get si on trouve des paramètres + foreach($_POST as $k=>$v){ + if( preg_match('/^g:(.+)$/', $k, $m) ) // g:nomGroupe + $groupeOpt = $m[1]; - /* GESTION SEMESTRE OPTIONNEL */ - if( isset($postVars[1]) && preg_match('/^S[0-9]{1}$/', $postVars[1]) ) - $semestreOpt = $postVars[1]; - else - $semestreOpt = null; + if( preg_match('/^s:(.+)$/', $k, $m) ) // s:nomSemestre + $semestreOpt = $m[1]; + if( preg_match('/^f:(.+)$/', $k, $m) ) // f:codeFormation + $formationOpt = $m[1]; - /* GESTION GROUPES OPTIONNEL */ - if( isset($postVars[2]) && is_string($postVars[2]) && strlen($postVars[2]) > 1 ) - $groupeOpt = $postVars[2]; - else - $groupeOpt = null; + } + $groupeOpt = ($groupeOpt == null || $groupeOpt == '*') ? null : $groupeOpt; + $semestreOpt = ($semestreOpt == null || $semestreOpt == '*') ? null : $semestreOpt; + $formationOpt = ($formationOpt == null || $formationOpt == '*') ? null : $formationOpt; /************************/ /*** TOUS LES GROUPES ***/ @@ -58,7 +61,7 @@ if( permission('student') ){ // si connecté && utilisateur if( $answer->request == 'success' ){ // si pas d'erreur ////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; echo ""; echo ''; + + + // pour chaque utilisateur + foreach($group['userlist'] as $user){ + echo ''; + echo "'; + echo ''; + echo ''; + // echo ''; + // changement de groupe + echo ''; + echo ''; + } + + // echo ''; + + echo ''; + + echo '
    Identifiant'; @@ -99,117 +102,12 @@ if( permission('student') ){ // si connecté && utilisateur echo ''; //////////////////////////////////////////////////////// }else - echo "
    Aucun groupe trouvé
    "; + echo "
    Aucun groupe trouvé
    "; } -/************************/ -/*** 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é
    "; - -} ?> - - @@ -218,9 +116,6 @@ if( false && permission('teacher') ){ // si connecté && prof - - -request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; echo ""; echo ''; @@ -283,9 +178,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 '
    '; } ?> @@ -308,64 +203,121 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un */ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un élève - $request = new stdClass(); $answer = new stdClass(); - $request->level_1 = 'grouplistForTeacher'; /******************************************************************************************************** A FAIRE **/ - $request->enseignant = $_SESSION['identifiant']; - $request->annee = $_SESSION['annee']; - if ( $semestreOpt != null ) $request->semestre = $semestreOpt; - elseif( $groupeOpt != null ) $request->groupe = $groupeOpt; + $request = new stdClass(); $answer = new stdClass(); - groups_switch_level_1($request, $answer); + $request->level_1 = 'grouplistForTeacher'; + $request->enseignant = $_SESSION['identifiant']; + $request->annee = $_SESSION['annee']; - if( $answer->request == 'success' && count($answer->grouplist) > 0 ){ // si on a bien récupéré les membres du groupe - //////////////////////////////////////////////////////////////////////////////// - echo "
    "; - - /* select pour SEMESTRES */ - $lastSemestre = null; + groups_switch_level_1($request, $answer); - echo ""; - /* select pour GROUPES */ - $lastGroupe = null; + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDGroupes = array(); - echo ""; - - echo ""; - echo '
    Identifiant'; - echo 'Prenom'; - echo 'Nom'; - echo 'Semestre'; - echo 'Groupe'; - echo '
    '; - foreach($answer->grouplist as $group){ // pour chaque groupe + + + /**************************/ + /* AFFINAGE PAR FORMATION */ + /**************************/ + echo ""; + 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'].'
    "; + + + + + /*************************/ + /* 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 ""; + + + + + + + echo ""; + echo '
    Identifiant'; + echo 'Prenom'; + echo 'Nom'; + echo 'Semestre'; + echo 'Groupe'; + echo '
    '; + + foreach($answer->grouplist as $group){ // pour chaque groupe + + if( $group['id_formation'] == $formationOpt && ($semestreOpt==null || $semestreOpt==$group['id_semestre']) && ($groupeOpt==null || $groupeOpt==$group['id']) ){ if( count($group['userlist']) > 0 ){ // s'il y a des utilisateurs @@ -392,10 +344,12 @@ if( permission('teacher') ){ // si l'utilisateur est connecté et que c'est un } } - echo '
    '; - //////////////////////////////////////////////////////////////////////////////// - }else - echo "
    Aucun groupe trouvé
    "; + + } + echo ''; + //////////////////////////////////////////////////////////////////////////////// + }else + echo "
    Aucun groupe trouvé
    "; } ?> @@ -419,63 +373,93 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm $request = new stdClass(); $answer = new stdClass(); - /* ce jeu de données sert à récupérer la liste des groupes (même quand on applique un filtrage) */ - $requestPourListeGroupes = new stdClass(); - $answerPourListeGroupes = 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); // on fait la requête pour les groupes en fonction des filtres si définis - $requestPourListeGroupes->level_1 = 'grouplistForYear'; - $requestPourListeGroupes->annee = $_SESSION['annee']; - groups_switch_level_1($requestPourListeGroupes, $answerPourListeGroupes); // on fait la requête pour avoir la liste des groupes quel que soit le filtrage - - - if( $answer->request == 'success' && $answerPourListeGroupes->request == 'success' ){ // si pas d'erreur + if( $answer->request == 'success' && $answer->request == 'success' ){ // si pas d'erreur ////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; - /* select pour SEMESTRES */ - $lastSemestre = null; + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDGroupes = array(); - echo ""; + // 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]; - /* select pour GROUPES */ - $lastGroupe = null; + + + /**************************/ + /* AFFINAGE PAR FORMATION */ + /**************************/ + echo ""; + foreach($answer->grouplist as $groupe){ if( !in_array($groupe['id_formation'], $ListeUIDFormations) ){ + + // si c'est la formation séléctionnée + if( $groupe['id_formation'] == $formationOpt ) echo "'; + else 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'].'
    "; + + + + + /*************************/ + /* 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) ){ + + // si c'est le semestre séléctionné + if( $groupe['id_semestre'] == $semestreOpt ) echo "'; + else echo "'; + + + // on ajoute le semestre à la liste pour ne pas le répéter + array_push($ListeUIDSemestres, $groupe['id_semestre']); + }} + echo "
    TousTous".$groupe['semestre'].'".$groupe['semestre'].'
    "; + + + + + /***********************/ + /* AFFINAGE PAR GROUPE */ + /***********************/ echo ""; + // on ajoute le semestre à la liste pour ne pas le répéter + array_push($ListeUIDGroupes, $groupe['id']); + }} + echo ""; @@ -483,57 +467,63 @@ 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 "
    "; - echo '
    '; + echo 'Groupe '.$group['nom'].''; + echo '
    '; + echo '
    ".$user['identifiant'].''.$user['prenom'].''.$user['nom'].''.$group['nom'].''; + echo "'; + echo "
    déplacer
    "; + echo '
    '; + + } } } echo '
    '; //////////////////////////////////////////////////////// }else - echo "
    Aucun groupe trouvé
    "; + echo "
    Aucun groupe trouvé
    "; } } ?> @@ -544,6 +534,7 @@ if( permission('admin') ){ // si l'utilisateur est connecté et que c'est un adm /*********************************/ /*** IMPORTATION FICHIER EXCEL ***/ /*********************************/ + if( permission('admin') ){ require_once __ROOT__.DIRECTORY_SEPARATOR.join(DIRECTORY_SEPARATOR, array("manager", "xlsx.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..44f826c 100755 --- a/page/modules.php +++ b/page/modules.php @@ -3,6 +3,33 @@ 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; + $semestreOpt = null; + $formationOpt = null; + + // on cherche dans toutes les variables _get si on trouve des paramètres + foreach($_POST as $k=>$v){ + + if( preg_match('/^s:(.+)$/', $k, $m) ) // s:nomSemestre + $semestreOpt = $m[1]; + + 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; + $formationOpt = ($formationOpt == null || $formationOpt == '*') ? null : $formationOpt; + + /**************************************** * * * SECTION "MODULES" * @@ -35,35 +62,73 @@ 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 ""; + 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 '
    '; }else - echo "
    Aucun module trouvé
    "; + echo "
    Aucun module trouvé
    "; } ?> + + + + + + + + + + + + + + + + + + + + + + request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; - foreach($answer->UEs as $UE){ - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDUE = array(); + + // 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 "
    '.$UE['nom'].' - '.$UE['libelle'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].'
    "; + 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 "
    ".$semestre['formation'].'".$semestre['formation'].'
    "; + + + + + /*************************/ + /* 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->semestres as $semestre){ if( $semestre['id_formation'] == $formationOpt && !in_array($semestre['id'], $ListeUIDSemestres) ){ - echo ''; - echo '
    TousTous
    '; + if( $semestre['id'] == $semestreOpt ) // si c'est le semestre séléctionné + echo "".$semestre['nom'].''; + else // sinon on affiche normalement + echo "".$semestre['nom'].''; + + + // on ajoute le semestre à la liste pour ne pas le répéter + array_push($ListeUIDSemestres, $semestre['id']); + + }} + echo ""; + + + + + /*******************/ + /* AFFINAGE PAR UE */ + /*******************/ + echo ""; + if( $ueOpt == null ) echo ""; + else 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 "'; + + // on ajoute l'UE à la liste pour ne pas le répéter + array_push($ListeUIDUE, $UE['id']); + }} + }} + echo "
    TousTous".$UE['nom'].'".$UE['nom'].'
    "; + + + + + foreach($answer->semestres as $semestre){ + + 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['id'] == $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 '
    '; }else - echo "
    Aucun module trouvé
    "; + echo "
    Aucun module trouvé
    "; } ?> + + + + + + + + + + + + + + + + + + + + + + + request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// - echo "
    "; + echo "
    "; + - foreach($answer->UEs as $UE){ - echo ""; - echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - foreach($UE['modules'] as $MODULE){ - echo ''; - echo ''; - echo ''; - echo ''; - } + /* ON RECUPERE UNE LISTE UNIQUE DES SEMESTRES */ + $ListeUIDFormations = array(); + $ListeUIDSemestres = array(); + $ListeUIDUE = array(); + + // 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 "
    '.$UE['nom'].' - '.$UE['libelle'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].'
    "; + 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 "
    ".$semestre['formation'].'".$semestre['formation'].'
    "; + + + + + + + /*************************/ + /* 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->semestres as $semestre){ if( $semestre['id_formation'] == $formationOpt && !in_array($semestre['id'], $ListeUIDSemestres) ){ - echo ''; - echo '
    TousTous
    '; + if( $semestre['id'] == $semestreOpt ) // si c'est le semestre séléctionné + echo "".$semestre['nom'].''; + else // sinon on affiche normalement + echo "".$semestre['nom'].''; + + + // on ajoute le semestre à la liste pour ne pas le répéter + array_push($ListeUIDSemestres, $semestre['id']); + + }} + echo "+"; // ajouter un semestre + echo ""; + + + + + /*******************/ + /* AFFINAGE PAR UE */ + /*******************/ + echo ""; + if( $ueOpt == null ) echo ""; + else 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 "'; + + // on ajoute l'UE à la liste pour ne pas le répéter + array_push($ListeUIDUE, $UE['id']); + }} + }} + echo ""; // ajouter un UE + echo "
    TousTous".$UE['nom'].'".$UE['nom'].'+
    "; + + + + foreach($answer->semestres as $semestre){ + + 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['id'] == $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 ''; + } + + require_once __ROOT__.'/manager/database.php'; + debug(); + $completeModuleList = DataBase::getInstance()->getExhaustiveModuleList(); + // saisie d'un nouveau module + echo ""; + + echo ''; + echo '
    '.$semestre['nom_formation'].' - '.$semestre['nom'].'
    '.$MODULE['nom'].''.$MODULE['libelle'].''.$UE['nom'].' - '.$UE['libelle'].'
    "; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
    Ajouter le module
    "; + echo "
    '; + + } + } + + } + } //////////////////////////////////////////////////////////////////////////////// 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 '
    '; diff --git a/src/nouveau_modele.xlsx b/src/nouveau_modele.xlsx new file mode 100644 index 0000000..3fd8430 Binary files /dev/null and b/src/nouveau_modele.xlsx differ 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 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 diff --git a/xdoc/nouveau_modele.xlsx b/xdoc/nouveau_modele.xlsx new file mode 100644 index 0000000..3fd8430 Binary files /dev/null and b/xdoc/nouveau_modele.xlsx differ diff --git a/xdoc/sid.sql b/xdoc/sid.sql index 43a087d..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 09 Novembre 2015 à 12:49 +-- 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 @@ -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`: @@ -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', 9, 1), +(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), @@ -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), +(25, 'auy1966a', 15, 3), +(26, 'dui1946a', 1, 1), (27, 'cyw1979a', 24, 4), (28, 'pfv1965a', 3, 3), (29, 'oqz1937a', 24, 4), @@ -95,21 +95,21 @@ 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), (50, 'wvn1982a', 9, 1), -(51, 'psg1965a', 8, 4), +(51, 'psg1965a', 4, 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), @@ -138,10 +138,10 @@ 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', 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); -- -------------------------------------------------------- @@ -166,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=9 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; -- -- RELATIONS POUR LA TABLE `controle`: @@ -185,14 +186,17 @@ 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'), +(11, 9, 'Controle de TP', 20, 20, '2015-11-19'); -- -------------------------------------------------------- @@ -208,7 +212,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 +227,32 @@ 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); + +-- -------------------------------------------------------- + +-- +-- 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); -- -------------------------------------------------------- @@ -286,10 +314,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 +360,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 +429,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=57 ; -- -- RELATIONS POUR LA TABLE `note`: --- `id_controle` --- `controle` -> `id_controle` -- `id_appartenance` -- `appartenance` -> `id_appartenance` +-- `id_controle` +-- `controle` -> `id_controle` -- -- @@ -416,14 +444,52 @@ 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, 15.25), +(12, 54, 2, 5), +(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, 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, 6), +(27, 87, 2, 7), +(28, 3, 2, 8), +(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), +(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); -- -------------------------------------------------------- @@ -433,26 +499,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, + `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`) + UNIQUE KEY `rang` (`rang`,`annee`), + KEY `id_formation` (`id_formation`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; +-- +-- RELATIONS POUR LA TABLE `semestre`: +-- `id_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`, `id_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); -- -------------------------------------------------------- @@ -500,6 +574,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 +707,28 @@ 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`); + +-- +-- Contraintes pour la table `semestre` +-- +ALTER TABLE `semestre` + 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 */;