Correction conflit de saisie de notes entre teacher&admin
This commit is contained in:
parent
cf8e58b67a
commit
552f74181a
|
@ -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
|
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]');
|
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
|
/* GESTION DE LA SAISIE DE NOTES (version enseignants) */
|
||||||
|
/*******************************************************/
|
||||||
if( document.querySelector('#CONTAINER section[data-controles]').length > 0 ){ // si c'est l'admin
|
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 <INPUT> */
|
/* SAISIE A L'AIDE DES <INPUT> */
|
||||||
var saisieInput = document.querySelectorAll('#CONTAINER section[data-controles] table tr td input[type=number][data-ctrl].saisie_note');
|
var saisieInputEnseignant = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table tr td input[type=number][data-ctrl].saisie_note');
|
||||||
var saisieObj = [];
|
|
||||||
|
var saisieObjEnseignant = [];
|
||||||
|
|
||||||
/* BOUTON "TOUT ENREGISTRER" */
|
/* 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
|
// 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 <input> dans la liste
|
saisieInputEnseignant[i].dataset.i = i; // le rang du <input> dans la liste
|
||||||
|
|
||||||
saisieObj[i] = {
|
saisieObjEnseignant[i] = {
|
||||||
inputEl: saisieInput[i], // le <input> en question
|
inputEl: saisieInputEnseignant[i], // le <input> en question
|
||||||
initval: parseFloat( saisieInput[i].value.replace(',', '.') ), // la valeur initiale du <input>
|
initval: parseFloat( saisieInputEnseignant[i].value.replace(',', '.') ), // la valeur initiale du <input>
|
||||||
button: saisieInput[i].parentNode.children[1], // le bouton de validation pour ce <input>
|
button: saisieInputEnseignant[i].parentNode.children[1], // le bouton de validation pour ce <input>
|
||||||
ctrlid: saisieInput[i].dataset.ctrl, // on récupère l'id du contrôle
|
ctrlid: saisieInputEnseignant[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 <input>
|
userid: saisieInputEnseignant[i].parentNode.parentNode.children[0].children[0].innerHTML // l'identifiant de l'utilisateur associé à ce <input>
|
||||||
};
|
};
|
||||||
|
|
||||||
// on créé l'évènement qui affiche le validateur dès le changement de valeur
|
// 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
|
// 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){
|
if( e.target.dataset.hasOwnProperty('i') && saisieObjEnseignant[e.target.dataset.i].inputEl == e.target){
|
||||||
var obj = saisieObj[e.target.dataset.i];
|
var obj = saisieObjEnseignant[e.target.dataset.i];
|
||||||
var isActive = /active/.test(obj.inputEl.className); // VRAI si l'élément est actif
|
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
|
// si changement du caractère "actif", et plus particulièrement
|
||||||
if( /active/.test(obj.inputEl.className) != isActive )
|
if( /active/.test(obj.inputEl.className) != isActive )
|
||||||
if( !isActive ) // si activation
|
if( !isActive ) // si activation
|
||||||
nombreModification += 1;
|
nombreModificationEnseignant += 1;
|
||||||
else
|
else
|
||||||
nombreModification -= 1;
|
nombreModificationEnseignant -= 1;
|
||||||
|
|
||||||
// si plus d'une modification, on affiche le bouton 'tout enregistrer'
|
// si plus d'une modification, on affiche le bouton 'tout enregistrer'
|
||||||
if( nombreModification > 1 )
|
if( nombreModificationEnseignant > 1 )
|
||||||
addClass( toutEnregistrerBtn, 'active' );
|
addClass( toutEnregistrerBtnEnseignant, 'active' );
|
||||||
else
|
else
|
||||||
remClass( toutEnregistrerBtn, 'active' );
|
remClass( toutEnregistrerBtnEnseignant, 'active' );
|
||||||
|
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
// on créé l'évènement de confirmation de la saisie
|
// 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 <input> associé a data-i existante et que ça match correctement
|
// s'il s'agit bien d'un bouton de validation, que le <input> 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 ){
|
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 = saisieObj[e.target.parentNode.children[0].dataset.i];
|
var obj = saisieObjEnseignant[e.target.parentNode.children[0].dataset.i];
|
||||||
|
|
||||||
var request = { // on définit la requête pour API
|
var request = { // on définit la requête pour API
|
||||||
level_0: 'career',
|
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
|
// 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 toutesNotes = [];
|
||||||
|
|
||||||
var controleUID = null;
|
var controleUID = null;
|
||||||
|
|
||||||
// on sélectionne toutes les valeurs contenues dans les lignes actives
|
// 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({
|
toutesNotes.push({
|
||||||
etudiant: saisieObj[i].userid,
|
etudiant: saisieObjEnseignant[i].userid,
|
||||||
valeur: saisieObj[i].inputEl.value.replace(',', '.') // par précaution, on replace les virgules par des points pour le php (is_numeric)
|
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 <INPUT> */
|
||||||
|
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 <input> dans la liste
|
||||||
|
|
||||||
|
saisieObjAdmin[i] = {
|
||||||
|
inputEl: saisieInputAdmin[i], // le <input> en question
|
||||||
|
initval: parseFloat( saisieInputAdmin[i].value.replace(',', '.') ), // la valeur initiale du <input>
|
||||||
|
button: saisieInputAdmin[i].parentNode.children[1], // le bouton de validation pour ce <input>
|
||||||
|
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 <input>
|
||||||
|
};
|
||||||
|
|
||||||
|
// 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 <input> 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)
|
||||||
});
|
});
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
|
@ -662,8 +662,6 @@ if( (permission('master') || permission('admin')) && $controleOpt == null ){ //
|
||||||
}else
|
}else
|
||||||
echo "<section name='allcontroles' data-controles data-title='Tous les contrôles' class='basic'><table class=basic><tbody><tr><td>Aucun contrôle trouvé</td></tr></tbody></table></section>";
|
echo "<section name='allcontroles' data-controles data-title='Tous les contrôles' class='basic'><table class=basic><tbody><tr><td>Aucun contrôle trouvé</td></tr></tbody></table></section>";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* [2] Un contrôle particulier( avec ou sans groupe particulier )
|
/* [2] Un contrôle particulier( avec ou sans groupe particulier )
|
||||||
|
|
Loading…
Reference in New Issue