From 552f74181a35365e37123e67e8e94cd6b99a0a54 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Thu, 26 Nov 2015 21:28:01 +0100 Subject: [PATCH] Correction conflit de saisie de notes entre teacher&admin --- page/_JS/career.js | 217 +++++++++++++++++++++++++++++++++++++-------- page/career.php | 2 - 2 files changed, 181 insertions(+), 38 deletions(-) diff --git a/page/_JS/career.js b/page/_JS/career.js index 76d90c3..209699d 100755 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -52,9 +52,9 @@ for( var i = 0 ; i < partList.length ; i++ ){ -/********************************************/ -/* GESTION DU FILTRAGE POUR LES ENSEIGNANTS */ -/********************************************/ +/**************************************************/ +/* GESTION DU FILTRAGE POUR LES ENSEIGNANTS/ADMIN */ +/**************************************************/ if( document.querySelectorAll('#CONTAINER section[data-controles]').length > 0 ){ // on traite uniquement si la section est définie allControleSections = document.querySelectorAll('#CONTAINER section[data-controles]'); @@ -108,40 +108,42 @@ if( document.querySelectorAll('#CONTAINER section[data-controles]').length > 0 ) -/* GESTION DE LA SAISIE DE NOTES */ -var nombreModification = 0; // contiendra le nombre de notes saisies - -if( document.querySelector('#CONTAINER section[data-controles]').length > 0 ){ // si c'est l'admin +/*******************************************************/ +/* GESTION DE LA SAISIE DE NOTES (version enseignants) */ +/*******************************************************/ +if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != null ){ // si c'est un enseignant + var nombreModificationEnseignant = 0; // contiendra le nombre de notes saisies /* SAISIE A L'AIDE DES */ - var saisieInput = document.querySelectorAll('#CONTAINER section[data-controles] table tr td input[type=number][data-ctrl].saisie_note'); - var saisieObj = []; + var saisieInputEnseignant = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table tr td input[type=number][data-ctrl].saisie_note'); + + var saisieObjEnseignant = []; /* BOUTON "TOUT ENREGISTRER" */ - var toutEnregistrerBtn = document.querySelector("#CONTAINER section[data-controles] table tr td:last-child .confirm.all"); + var toutEnregistrerBtnEnseignant = document.querySelector("#CONTAINER section[name=controlesenseignants] table tr td:last-child .confirm.all"); - if( toutEnregistrerBtn != null ){ + if( toutEnregistrerBtnEnseignant != null ){ // on référencie tous les input dans un objet - for( var i = 0 ; i < saisieInput.length ; i++ ){ + for( var i = 0 ; i < saisieInputEnseignant.length ; i++ ){ - saisieInput[i].dataset.i = i; // le rang du dans la liste + saisieInputEnseignant[i].dataset.i = i; // le rang du dans la liste - saisieObj[i] = { - inputEl: saisieInput[i], // le en question - initval: parseFloat( saisieInput[i].value.replace(',', '.') ), // la valeur initiale du - button: saisieInput[i].parentNode.children[1], // le bouton de validation pour ce - ctrlid: saisieInput[i].dataset.ctrl, // on récupère l'id du contrôle - userid: saisieInput[i].parentNode.parentNode.children[0].children[0].innerHTML // l'identifiant de l'utilisateur associé à ce + saisieObjEnseignant[i] = { + inputEl: saisieInputEnseignant[i], // le en question + initval: parseFloat( saisieInputEnseignant[i].value.replace(',', '.') ), // la valeur initiale du + button: saisieInputEnseignant[i].parentNode.children[1], // le bouton de validation pour ce + ctrlid: saisieInputEnseignant[i].dataset.ctrl, // on récupère l'id du contrôle + userid: saisieInputEnseignant[i].parentNode.parentNode.children[0].children[0].innerHTML // l'identifiant de l'utilisateur associé à ce }; // on créé l'évènement qui affiche le validateur dès le changement de valeur - saisieObj[i].inputEl.addEventListener('change', function(e){ + saisieObjEnseignant[i].inputEl.addEventListener('change', function(e){ // on récupère le rang dans la liste et qu'il s'agit du même élément - if( e.target.dataset.hasOwnProperty('i') && saisieObj[e.target.dataset.i].inputEl == e.target){ - var obj = saisieObj[e.target.dataset.i]; + if( e.target.dataset.hasOwnProperty('i') && saisieObjEnseignant[e.target.dataset.i].inputEl == e.target){ + var obj = saisieObjEnseignant[e.target.dataset.i]; var isActive = /active/.test(obj.inputEl.className); // VRAI si l'élément est actif @@ -155,25 +157,25 @@ if( document.querySelector('#CONTAINER section[data-controles]').length > 0 ){ / // si changement du caractère "actif", et plus particulièrement if( /active/.test(obj.inputEl.className) != isActive ) if( !isActive ) // si activation - nombreModification += 1; + nombreModificationEnseignant += 1; else - nombreModification -= 1; + nombreModificationEnseignant -= 1; // si plus d'une modification, on affiche le bouton 'tout enregistrer' - if( nombreModification > 1 ) - addClass( toutEnregistrerBtn, 'active' ); + if( nombreModificationEnseignant > 1 ) + addClass( toutEnregistrerBtnEnseignant, 'active' ); else - remClass( toutEnregistrerBtn, 'active' ); + remClass( toutEnregistrerBtnEnseignant, 'active' ); } }, false); // on créé l'évènement de confirmation de la saisie - saisieObj[i].button.addEventListener('click', function(e){ + saisieObjEnseignant[i].button.addEventListener('click', function(e){ // s'il s'agit bien d'un bouton de validation, que le associé a data-i existante et que ça match correctement - if( /confirm/.test(e.target.className) && e.target.parentNode.children[0].dataset.hasOwnProperty('i') && saisieObj[e.target.parentNode.children[0].dataset.i].button == e.target ){ - var obj = saisieObj[e.target.parentNode.children[0].dataset.i]; + if( /confirm/.test(e.target.className) && e.target.parentNode.children[0].dataset.hasOwnProperty('i') && saisieObjEnseignant[e.target.parentNode.children[0].dataset.i].button == e.target ){ + var obj = saisieObjEnseignant[e.target.parentNode.children[0].dataset.i]; var request = { // on définit la requête pour API level_0: 'career', @@ -199,22 +201,165 @@ if( document.querySelector('#CONTAINER section[data-controles]').length > 0 ){ / // on créé l'évènement de confirmation de la saisie de TOUTES les notes saisies ou modifiées - toutEnregistrerBtn.addEventListener('click', function(e){ + toutEnregistrerBtnEnseignant.addEventListener('click', function(e){ - addClass( toutEnregistrerBtn, 'loading' ); + addClass( toutEnregistrerBtnEnseignant, 'loading' ); var toutesNotes = []; var controleUID = null; // on sélectionne toutes les valeurs contenues dans les lignes actives - for( var i = 0 ; i < saisieObj.length ; i++ ){ if( /active/.test(saisieObj[i].inputEl.className) ){ + for( var i = 0 ; i < saisieObjEnseignant.length ; i++ ){ if( /active/.test(saisieObjEnseignant[i].inputEl.className) ){ - if( controleUID == null ) controleUID = saisieObj[i].ctrlid; + if( controleUID == null ) controleUID = saisieObjEnseignant[i].ctrlid; toutesNotes.push({ - etudiant: saisieObj[i].userid, - valeur: saisieObj[i].inputEl.value.replace(',', '.') // par précaution, on replace les virgules par des points pour le php (is_numeric) + 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) + }); + + }} + + + var request = { // on définit la requête pour API + level_0: 'career', + level_1: 'saisieNoteMultiple', + controle: controleUID, + notes: toutesNotes // on donne toutes les notes + }; + + + API.send(request, function(response){ // on gère la réponse de API + if( response.request == 'success' ) // si on a une réponse positive, on incrémente le nombre de succès + reload(); + }); + + }, false); + + + } + +} + + + + + + + + + + +/*************************************************/ +/* GESTION DE LA SAISIE DE NOTES (version admin) */ +/*************************************************/ +if( document.querySelector('#CONTAINER section[name=allcontroles]') != null ){ // si c'est un enseignant + var nombreModificationAdmin = 0; // contiendra le nombre de notes saisies + + /* SAISIE A L'AIDE DES */ + var saisieInputAdmin = document.querySelectorAll('#CONTAINER section[name=allcontroles] table tr td input[type=number][data-ctrl].saisie_note'); + + var saisieObjAdmin = []; + + /* BOUTON "TOUT ENREGISTRER" */ + var toutEnregistrerBtnAdmin = document.querySelector("#CONTAINER section[name=allcontroles] table tr td:last-child .confirm.all"); + + + if( toutEnregistrerBtnAdmin != null ){ + + + // on référencie tous les input dans un objet + for( var i = 0 ; i < saisieInputAdmin.length ; i++ ){ + + saisieInputAdmin[i].dataset.i = i; // le rang du dans la liste + + saisieObjAdmin[i] = { + inputEl: saisieInputAdmin[i], // le en question + initval: parseFloat( saisieInputAdmin[i].value.replace(',', '.') ), // la valeur initiale du + button: saisieInputAdmin[i].parentNode.children[1], // le bouton de validation pour ce + ctrlid: saisieInputAdmin[i].dataset.ctrl, // on récupère l'id du contrôle + userid: saisieInputAdmin[i].parentNode.parentNode.children[0].children[0].innerHTML // l'identifiant de l'utilisateur associé à ce + }; + + // on créé l'évènement qui affiche le validateur dès le changement de valeur + saisieObjAdmin[i].inputEl.addEventListener('change', function(e){ + // on récupère le rang dans la liste et qu'il s'agit du même élément + if( e.target.dataset.hasOwnProperty('i') && saisieObjAdmin[e.target.dataset.i].inputEl == e.target){ + var obj = saisieObjAdmin[e.target.dataset.i]; + var isActive = /active/.test(obj.inputEl.className); // VRAI si l'élément est actif + + + // si c'est une nouvelle valeur (nouvelle note), on active le validateur (bouton) + if( obj.initval != parseFloat(obj.inputEl.value.replace(',', '.')) ) + addClass( obj.inputEl, 'active' ); + else + remClass( obj.inputEl, 'active' ); + + + // si changement du caractère "actif", et plus particulièrement + if( /active/.test(obj.inputEl.className) != isActive ) + if( !isActive ) // si activation + nombreModificationAdmin += 1; + else + nombreModificationAdmin -= 1; + + // si plus d'une modification, on affiche le bouton 'tout enregistrer' + if( nombreModificationAdmin > 1 ) + addClass( toutEnregistrerBtnAdmin, 'active' ); + else + remClass( toutEnregistrerBtnAdmin, 'active' ); + + } + }, false); + + + // on créé l'évènement de confirmation de la saisie + saisieObjAdmin[i].button.addEventListener('click', function(e){ + // s'il s'agit bien d'un bouton de validation, que le associé a data-i existante et que ça match correctement + if( /confirm/.test(e.target.className) && e.target.parentNode.children[0].dataset.hasOwnProperty('i') && saisieObjAdmin[e.target.parentNode.children[0].dataset.i].button == e.target ){ + var obj = saisieObjAdmin[e.target.parentNode.children[0].dataset.i]; + + var request = { // on définit la requête pour API + level_0: 'career', + level_1: 'saisieNote', + etudiant: obj.userid, + controle: obj.ctrlid, + note: obj.inputEl.value.replace(',', '.'), // par précaution, on replace les virgules par des points pour le php (is_numeric) + }; + + addClass( obj.button, 'loading' ); + + API.send(request, function(response){ // on gère la réponse de API, si déplacement effectué, on recharge la page + if( response.request == 'success' ) reload(); + }); + + } + + }, false); + + + } + + + + // on créé l'évènement de confirmation de la saisie de TOUTES les notes saisies ou modifiées + toutEnregistrerBtnAdmin.addEventListener('click', function(e){ + + addClass( toutEnregistrerBtnAdmin, 'loading' ); + + var toutesNotes = []; + + var controleUID = null; + + // on sélectionne toutes les valeurs contenues dans les lignes actives + for( var i = 0 ; i < saisieObjAdmin.length ; i++ ){ if( /active/.test(saisieObjAdmin[i].inputEl.className) ){ + + if( controleUID == null ) controleUID = saisieObjAdmin[i].ctrlid; + + toutesNotes.push({ + etudiant: saisieObjAdmin[i].userid, + valeur: saisieObjAdmin[i].inputEl.value.replace(',', '.') // par précaution, on replace les virgules par des points pour le php (is_numeric) }); }} diff --git a/page/career.php b/page/career.php index 860c349..701bece 100755 --- a/page/career.php +++ b/page/career.php @@ -662,8 +662,6 @@ if( (permission('master') || permission('admin')) && $controleOpt == null ){ // }else echo "
Aucun contrôle trouvé
"; - - } /* [2] Un contrôle particulier( avec ou sans groupe particulier )