From c96b605021d5e802f0daad60c2227dfb4127882f Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 2 Dec 2015 22:01:00 +0100 Subject: [PATCH] Modification de shortcut-manager (pas besoin de tout retaper dans l'ordre) + correction JS "undefined creerSemestre" commit v2 (ajout index) --- index.php | 10 ++--- js/{actionScript.js => action-script.js} | 52 +++++++++++++--------- API.js => js/lib/API.js | 2 +- js/{ => lib}/adjust.js | 0 js/{pageManager.js => lib/page-manager.js} | 0 js/{ => lib}/shortcut-manager.js | 46 +++++++++---------- manager/repo/note.php | 6 ++- manager/repo/semestre.php | 2 +- manager/repo/ue.php | 2 +- page/_JS/career.js | 2 +- page/_JS/modules.js | 48 +++++++++++--------- page/career.php | 13 +----- svg.php => src/svg.php | 0 13 files changed, 92 insertions(+), 91 deletions(-) rename js/{actionScript.js => action-script.js} (92%) rename API.js => js/lib/API.js (97%) rename js/{ => lib}/adjust.js (100%) rename js/{pageManager.js => lib/page-manager.js} (100%) rename js/{ => lib}/shortcut-manager.js (67%) rename svg.php => src/svg.php (100%) diff --git a/index.php b/index.php index 885b2c4..6b62931 100755 --- a/index.php +++ b/index.php @@ -28,10 +28,10 @@ $notifNotifNum = 5; - - - - + + + + @@ -129,7 +129,7 @@ $notifNotifNum = 5; - + \ No newline at end of file diff --git a/js/actionScript.js b/js/action-script.js similarity index 92% rename from js/actionScript.js rename to js/action-script.js index 3114da1..01cb6c3 100755 --- a/js/actionScript.js +++ b/js/action-script.js @@ -366,11 +366,13 @@ initForm( // initialisation du formulaire de connection * * ctrl+alt+e ouvre l'interface de connection/déconnection * -* ctrl+NUM ouvre la section numéro "NUM" +* ctrl+alt+NUM ouvre la section numéro "NUM" * -* ctrl+droite ouvre la sous-section suivante -* -* ctrl+gauche ouvre la sous-section précédente +* alt+haut ouvre la section suivante +* alt+bas ouvre la section précédente +* +* alt+droite ouvre la sous-section suivante +* alt+gauche ouvre la sous-section précédente * * * @@ -383,29 +385,37 @@ sm.append('ctrl+alt+n', function(){ sm.append('ctrl+alt+e', function(){ addClass(DOM.WRAPPER, 'blurred'); + DOM.AUTH.children[1].focus(); }); -sm.append('ctrl+1', function(){ - selectSection( document.querySelector('#MENU span[data-link]:nth-child(2)') ); +sm.append('alt+up', function(){// on récupère la section courante + var cSection = document.querySelector('#MENU span[data-link='+pageM.page+']'); + if( cSection != null ){ // si on a trouvé la section + var parentChildren = cSection.parentNode.children; + var prevIndex = parentChildren.indexOf( cSection ) - 1; + + // si il y a une section avant, on la charge + if( prevIndex > 0 ) + selectSection( parentChildren[prevIndex] ); + } }); -sm.append('ctrl+2', function(){ - selectSection( document.querySelector('#MENU span[data-link]:nth-child(3)') ); + + +sm.append('alt+down', function(){// on récupère la section courante + var cSection = document.querySelector('#MENU span[data-link='+pageM.page+']'); + if( cSection != null ){ // si on a trouvé la section + var parentChildren = cSection.parentNode.children; + var nextIndex = parentChildren.indexOf( cSection ) + 1; + + // si il y a une section après, on la charge + if( nextIndex < parentChildren.length ) + selectSection( parentChildren[nextIndex] ); + } }); -sm.append('ctrl+3', function(){ - selectSection( document.querySelector('#MENU span[data-link]:nth-child(4)') ); -}); -sm.append('ctrl+4', function(){ - selectSection( document.querySelector('#MENU span[data-link]:nth-child(5)') ); -}); - -sm.append('ctrl+5', function(){ - selectSection( document.querySelector('#MENU span[data-link]:nth-child(6)') ); -}); - -sm.append('ctrl+right', function(){ +sm.append('alt+right', function(){ // on récupère la sous-section courante var cSubSection = document.querySelector('#HEADER > nav.subsections > span[data-sectname='+pageM.vars[0]+']'); if( cSubSection != null ){ // si on a trouvé la sous-section @@ -418,7 +428,7 @@ sm.append('ctrl+right', function(){ } }); -sm.append('ctrl+left', function(){ +sm.append('alt+left', function(){ // on récupère la sous-section courante var cSubSection = document.querySelector('#HEADER > nav.subsections > span[data-sectname='+pageM.vars[0]+']'); if( cSubSection != null ){ // si on a trouvé la sous-section diff --git a/API.js b/js/lib/API.js similarity index 97% rename from API.js rename to js/lib/API.js index a272c54..4111cce 100755 --- a/API.js +++ b/js/lib/API.js @@ -51,7 +51,7 @@ APIClass.prototype = { if( ptrAPI.xhr[i].readyState == 4 ){ // si la requête est terminée /* DEBUG : affiche la réponse BRUTE de API.php */ - console.log('API.php => '+ptrAPI.xhr[i].responseText); + // console.log('API.php => '+ptrAPI.xhr[i].responseText); console.log( JSON.parse(ptrAPI.xhr[i].responseText) ); /* si success de requête */ diff --git a/js/adjust.js b/js/lib/adjust.js similarity index 100% rename from js/adjust.js rename to js/lib/adjust.js diff --git a/js/pageManager.js b/js/lib/page-manager.js similarity index 100% rename from js/pageManager.js rename to js/lib/page-manager.js diff --git a/js/shortcut-manager.js b/js/lib/shortcut-manager.js similarity index 67% rename from js/shortcut-manager.js rename to js/lib/shortcut-manager.js index b77923e..519648a 100755 --- a/js/shortcut-manager.js +++ b/js/lib/shortcut-manager.js @@ -23,7 +23,7 @@ function strToKeyCode(keyString){ case 'alt': return 18; break; case 'tab': return 9; break; case 'left': return 37; break; - case 'top': return 38; break; + case 'up': return 38; break; case 'right': return 39; break; case 'down': return 40; break; } @@ -43,8 +43,9 @@ function strToKeyCode(keyString){ function ShortcutManager(){}; ShortcutManager.prototype = { + pressed: [], // contiendra les touches pressées (en cours) shortcuts: [], // contiendra tous les raccourcis - progress: [], // contiendra l'avancée des raccourcis + // progress: [], // contiendra l'avancée des raccourcis handlers: [], // contiendra tous les handlers (fonctions à éxécuter) /* tmp */ lastKeyCode: [], // contiendra des "reminder" pour les évènements @@ -67,21 +68,11 @@ ShortcutManager.prototype = { /* [3] On enregistre dans l'objet (shortcuts, progress, handler) =======================================================*/ var index = this.shortcuts.push( keyStore ) - 1; - this.progress[index] = 0; // le progrès est l'index d'avancement + // this.progress[index] = 0; // le progrès est l'index d'avancement this.handlers[index] = handler; // handler (function qui s'éxécutera lors de l'activation) this.lastKeyCode[index] = null; // }, - - - /* remet à zéro tous les progrès */ - resetProgress: function(keyCode){ - for( var i = 0 ; i < this.progress.length ; i++ ) - if( this.lastKeyCode[i] != keyCode ) - this.progress[i] = 0; - }, - - /* démarre l'écoute (active les évènements) */ listen: function(){ @@ -92,22 +83,21 @@ ShortcutManager.prototype = { // on initialise/créer l'évènement window.addEventListener('keydown', function(e){ + // on ajoute la touche si elle n'y est pas + if( pointer.pressed.indexOf(e.keyCode) < 0 ) pointer.pressed.push(e.keyCode); + for( var i = 0 ; i < pointer.shortcuts.length ; i++ ){ - // si on a la bonne touche, on incrémente l'avancement / sinon si on c'est une touche différente, on remet à 0 - if( e.keyCode == pointer.shortcuts[i][pointer.progress[i]] ) - pointer.progress[i] += 1; - else if( e.keyCode != pointer.lastKeyCode[i] ) - pointer.progress[i] = 0; + var complete = pointer.shortcuts[i].length; // taille du shortcut en question + // on vérifie que l'ensemble des touches pressées remplissent le shortcut + for( var k = 0 ; k < pointer.pressed.length ; k++ ) + if( pointer.shortcuts[i].indexOf( pointer.pressed[k] ) > -1 ) // si la touche est dans le shortcut, on décrémente compteur (complete) + complete -= 1; - pointer.lastKeyCode[i] == e.keyCode; - // si on a terminé la combinaison de touches, on remet le compteur à 0 + on exécute le handler - if( pointer.progress[i] == pointer.shortcuts[i].length ){ - pointer.progress[i] = 0; + // si le compteur est à 0, on a terminé la combinaison de touches, on remet le compteur à 0 + on exécute le handler + if( complete == 0 ) pointer.handlers[i](e); - } - } }, false); @@ -115,9 +105,13 @@ ShortcutManager.prototype = { - // si on lâche une touche, on remet à zéro + // si on lâche une touche, on l'enlève de "pressed" window.addEventListener('keyup', function(e){ - pointer.resetProgress( e.keyCode ); + var index = pointer.pressed.indexOf(e.keyCode); + if( index > -1 ) // si c'est une touche définie comme déjà appuyée, on l'enlève + pointer.pressed = pointer.pressed.slice(0,index).concat( pointer.pressed.slice(index+1) ); + else // sinon on supprime tout (car sûrement erreur d'écoute) + pointer.pressed = []; }, false); } }; diff --git a/manager/repo/note.php b/manager/repo/note.php index 5fe6472..575dc1e 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -110,7 +110,7 @@ class noteRepo extends DBAccess{ ============================================================*/ if( !is_int($groupe) ){ - $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as moyenne, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes + $getNoteList = DataBase::getPDO()->prepare("SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_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 @@ -120,6 +120,8 @@ class noteRepo extends DBAccess{ AND mcc_m.id_mcc_module = ctrl.id_mcc_module AND n.id_controle = ctrl.id_controle + AND n.id_note in (SELECT max(id_note) FROM note GROUP BY id_appartenance, id_controle) + AND ctrl.id_controle = :controle GROUP BY g.id_groupe @@ -141,6 +143,8 @@ class noteRepo extends DBAccess{ 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 n.id_note in (SELECT max(id_note) FROM note GROUP BY id_appartenance, id_controle) AND ctrl.id_controle = :controle AND app.id_groupe = :groupe diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 2f7f9d5..60f4d41 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -302,7 +302,7 @@ class semestreRepo extends DBAccess{ FROM semestre as s, formation as f WHERE s.id_formation = f.id_formation AND annee = :annee - ORDER BY rang ASC"); + ORDER BY f.nom, annee, rang ASC"); $getSemestreList->execute(array( ':annee' => $annee )); return DataBase::delNumeric( $getSemestreList->fetchAll() ); diff --git a/manager/repo/ue.php b/manager/repo/ue.php index 1e9b9e8..fd3b2dd 100755 --- a/manager/repo/ue.php +++ b/manager/repo/ue.php @@ -118,7 +118,7 @@ class ueRepo extends DBAccess{ AND mcc_ue.id_semestre = s.id_semestre AND s.id_semestre = :semestre - ORDER BY s.rang, ue.nom, ue.libelle"); + ORDER BY s.rang, ue.nom, ue.libelle ASC"); $getUEList->execute(array( ':semestre' => $semestre )); return DataBase::delNumeric( $getUEList->fetchAll() ); diff --git a/page/_JS/career.js b/page/_JS/career.js index dad7364..d49ef0d 100755 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -217,7 +217,7 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n toutesNotes.push({ etudiant: saisieObjEnseignant[i].userid, - valeur: saisieObjEnseignant[i].inputEl.value.replace(',', '.') // par précaution, on replace les virgules par des points pour le php (is_numeric) + valeur: parseFloat( saisieObjEnseignant[i].inputEl.value.replace(',', '.') ) // par précaution, on replace les virgules par des points pour le php (is_numeric) }); }} diff --git a/page/_JS/modules.js b/page/_JS/modules.js index 0dec101..69a3f57 100755 --- a/page/_JS/modules.js +++ b/page/_JS/modules.js @@ -190,35 +190,39 @@ if( importMcc != null ){ /* GESTION DE LA CRÉATION DE SEMESTRE */ /**************************************/ var creerSemestre = document.getElementById('creer_semestre'); -creerSemestre.addEventListener('click', function(e){ - addClass( creerSemestre, 'loading' ); +if( creerSemestre != null ){ // si la page est présente - var form = creerSemestre.parentNode; - var fAnnee = form.children[2].value; - var fFormation = form.children[4].value; - var fLibelle = form.children[6].value; - var fSemestre = form.children[8].value; - var fRang = form.children[10].value; + creerSemestre.addEventListener('click', function(e){ - var request = { - level_0: 'career', - level_1: 'creerSemestre', - annee: fAnnee, - formation: fFormation, - nom_formation: fLibelle, - semestre: fSemestre, - rang: fRang - } + addClass( creerSemestre, 'loading' ); - API.send(request, function(e){ - if( e.request == 'success' ) - reload(); - }); + var form = creerSemestre.parentNode; + var fAnnee = form.children[2].value; + var fFormation = form.children[4].value; + var fLibelle = form.children[6].value; + var fSemestre = form.children[8].value; + var fRang = form.children[10].value; + + var request = { + level_0: 'career', + level_1: 'creerSemestre', + annee: fAnnee, + formation: fFormation, + nom_formation: fLibelle, + semestre: fSemestre, + rang: fRang + } + + API.send(request, function(e){ + if( e.request == 'success' ) + reload(); + }); -}, false); + }, false); +} diff --git a/page/career.php b/page/career.php index ecefe33..95638c3 100755 --- a/page/career.php +++ b/page/career.php @@ -846,7 +846,7 @@ elseif( permission('master') || permission('admin') ){ // si enseignant et qu'un * */ if( (permission('master') || permission('admin')) && $etudiantOpt != null ){ - include __ROOT__.'/svg.php'; + include __ROOT__.'src/svg.php'; @@ -864,17 +864,6 @@ if( (permission('master') || permission('admin')) && $etudiantOpt != null ){ $parcoursChart = array(); foreach($answer->parcours as $semestre) array_push($parcoursChart, array('id'=>$semestre['id'], 'nom' => $semestre['formation'].' '.$semestre['semestre']) ); - // $parcoursChart = array( - // array('id' => 1, 'nom' => 'ITINN1 - S1' ), - // array('id' => 2, 'nom' => 'ITINN1 - S2' ), - // array('id' => 1, 'nom' => 'ITINN1 - S1' ), - // array('id' => 2, 'nom' => 'ITINN1 - S2' ), - // array('id' => 1, 'nom' => 'ITINN2 - S3' ), - // array('id' => 1, 'nom' => 'ITINN2 - S4' ), - // array('id' => 1, 'nom' => 'ITINN2 - S3' ), - // array('id' => 1, 'nom' => 'ITINN2 - S4' ) - // ); - displayParcours( $parcoursChart ); // pour chaque semestres (tous si aucun semestreOpt, sinon uniquement le selectionné) diff --git a/svg.php b/src/svg.php similarity index 100% rename from svg.php rename to src/svg.php