2015-11-13 23:47:11 +00:00
|
|
|
<!--
|
|
|
|
|
2015-11-15 17:12:49 +00:00
|
|
|
|
|
|
|
|
2015-11-15 18:10:33 +00:00
|
|
|
/********************************/
|
|
|
|
/* GESTION DE L'AFFINAGE PAR UE */
|
|
|
|
/********************************/
|
2015-11-16 18:07:39 +00:00
|
|
|
var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=UE], #CONTAINER > section[name] > table.partlist[name=semestre], #CONTAINER > section[name] > table.partlist[name=formation]");
|
2015-11-15 17:12:49 +00:00
|
|
|
|
|
|
|
for( var i = 0 ; i < partList.length ; i++ ){
|
|
|
|
|
|
|
|
partList[i].addEventListener('click', function(e){
|
|
|
|
var tableauParent = e.target.parentNode.parentNode.parentNode;
|
|
|
|
|
2015-11-16 12:28:24 +00:00
|
|
|
if( tableauParent.tagName == 'TABLE' && e.target.dataset.hasOwnProperty('value') ){
|
2015-11-15 17:12:49 +00:00
|
|
|
|
2015-11-16 18:07:39 +00:00
|
|
|
/* 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();
|
|
|
|
}
|
|
|
|
|
2015-11-16 12:28:24 +00:00
|
|
|
/* SI c'est une affinage par SEMESTRE */
|
|
|
|
if( tableauParent.getAttribute('name') == 'semestre' )
|
2015-11-16 18:07:39 +00:00
|
|
|
pageM.vars[2] = 's:'+e.target.dataset.value;
|
2015-11-16 12:28:24 +00:00
|
|
|
|
|
|
|
/* SI c'est un affinage par UE */
|
|
|
|
if( tableauParent.getAttribute('name') == 'UE' )
|
2015-11-16 18:07:39 +00:00
|
|
|
pageM.vars[2] = 'u:'+e.target.dataset.value;
|
2015-11-16 12:28:24 +00:00
|
|
|
|
2015-11-16 18:07:39 +00:00
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
2015-11-15 17:12:49 +00:00
|
|
|
// si on a '*' comme valeur, on l'enlève
|
2015-11-16 18:07:39 +00:00
|
|
|
if( /\*$/.test(pageM.vars[2]) )
|
2015-11-15 17:12:49 +00:00
|
|
|
pageM.vars.pop();
|
|
|
|
|
|
|
|
reload();
|
|
|
|
}
|
|
|
|
}, false);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-11-13 23:47:11 +00:00
|
|
|
/***********************************************/
|
|
|
|
/* GESTION DE LE FILTRAGE POUR LES ENSEIGNANTS */
|
|
|
|
/***********************************************/
|
|
|
|
if( document.querySelector('#CONTAINER section[name=controlesenseignants]') ){ // on traite uniquement si la section est définie
|
2015-11-14 17:33:06 +00:00
|
|
|
|
|
|
|
controlesenseignantSection = document.querySelector('#CONTAINER section[name=controlesenseignants]');
|
|
|
|
if( controlesenseignantSection != null ){ // si la section enseignant est présente sur la page
|
|
|
|
|
|
|
|
controlesenseignantSection.addEventListener('click', function(e){ // on créé l'évènement
|
|
|
|
|
|
|
|
/* LIENS POUR LES GROUPES ET CONTRÔLES */
|
|
|
|
if( e.target.className == 'link grp ctrl' && e.target.dataset.hasOwnProperty('grp') && e.target.dataset.hasOwnProperty('ctrl') ){
|
2015-11-15 17:12:49 +00:00
|
|
|
pageM.vars[1] = 'c:'+e.target.dataset.ctrl;
|
|
|
|
pageM.vars[2] = 'g:'+e.target.dataset.grp;
|
2015-11-14 17:33:06 +00:00
|
|
|
reload();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/* LIENS POUR LES GROUPES */
|
|
|
|
if( e.target.className == 'link grp' && e.target.dataset.hasOwnProperty('grp') ){
|
2015-11-15 17:12:49 +00:00
|
|
|
pageM.vars[2] = 'g:'+e.target.dataset.grp;
|
2015-11-14 17:33:06 +00:00
|
|
|
reload();
|
2015-11-13 23:47:11 +00:00
|
|
|
}
|
2015-11-14 17:33:06 +00:00
|
|
|
|
|
|
|
/* LIENS POUR LES CONTRÔLES */
|
|
|
|
if( e.target.className == 'link ctrl' && e.target.dataset.hasOwnProperty('ctrl') ){
|
2015-11-15 17:12:49 +00:00
|
|
|
pageM.vars[1] = 'c:'+e.target.dataset.ctrl;
|
|
|
|
|
|
|
|
if( pageM.vars[2] != null )
|
|
|
|
pageM.vars.pop();
|
|
|
|
|
|
|
|
reload();
|
|
|
|
}
|
|
|
|
|
|
|
|
/* LIENS POUR LES DOSSIER ETUDIANT */
|
|
|
|
if( e.target.className == 'link etu' && e.target.dataset.hasOwnProperty('etu') ){
|
|
|
|
pageM.vars[1] = 'e:'+e.target.dataset.etu;
|
2015-11-14 17:33:06 +00:00
|
|
|
|
|
|
|
if( pageM.vars[2] != null )
|
|
|
|
pageM.vars.pop();
|
|
|
|
|
2015-11-15 17:12:49 +00:00
|
|
|
pageM.vars[0] = 'studentcase'; // on redirige vers la page dossier étudiant
|
2015-11-14 17:33:06 +00:00
|
|
|
reload();
|
|
|
|
}
|
|
|
|
|
2015-11-13 23:47:11 +00:00
|
|
|
}, false);
|
|
|
|
|
2015-11-14 17:33:06 +00:00
|
|
|
}
|
2015-11-13 23:47:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-11-15 17:12:49 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-11-15 12:02:34 +00:00
|
|
|
/* GESTION DE LA SAISIE DE NOTES */
|
2015-11-15 21:36:35 +00:00
|
|
|
var nombreModification = 0; // contiendra le nombre de notes saisies
|
|
|
|
|
2015-11-15 12:02:34 +00:00
|
|
|
if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != null ){ // si c'set l'admin
|
2015-11-13 23:47:11 +00:00
|
|
|
|
2015-11-15 12:02:34 +00:00
|
|
|
/* SAISIE A L'AIDE DES <INPUT> */
|
|
|
|
var saisieInput = document.querySelectorAll('#CONTAINER section[name=controlesenseignants] table tr td input[type=number][data-ctrl].saisie_note');
|
|
|
|
var saisieObj = [];
|
|
|
|
|
2015-11-15 21:36:35 +00:00
|
|
|
/* BOUTON "TOUT ENREGISTRER" */
|
|
|
|
var toutEnregistrerBtn = document.querySelector("#CONTAINER section[name=controlesenseignants] table tr td:last-child .confirm.all");
|
|
|
|
|
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
if( toutEnregistrerBtn != null ){
|
2015-11-15 21:36:35 +00:00
|
|
|
|
2015-11-15 12:02:34 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
// on référencie tous les input dans un objet
|
|
|
|
for( var i = 0 ; i < saisieInput.length ; i++ ){
|
2015-11-15 12:02:34 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
saisieInput[i].dataset.i = i; // le rang du <input> dans la liste
|
2015-11-15 12:02:34 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
saisieObj[i] = {
|
|
|
|
inputEl: saisieInput[i], // le <input> en question
|
|
|
|
initval: parseFloat( saisieInput[i].value.replace(',', '.') ), // la valeur initiale du <input>
|
|
|
|
button: saisieInput[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
|
|
|
|
userid: saisieInput[i].parentNode.parentNode.children[0].children[0].innerHTML // l'identifiant de l'utilisateur associé à ce <input>
|
|
|
|
};
|
2015-11-15 12:02:34 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
// on créé l'évènement qui affiche le validateur dès le changement de valeur
|
|
|
|
saisieObj[i].inputEl.addEventListener('change', function(e){
|
|
|
|
// on récupère le rang dans la liste et qu'il s'agit du même élément
|
|
|
|
if( e.target.dataset.hasOwnProperty('i') && saisieObj[e.target.dataset.i].inputEl == e.target){
|
|
|
|
var obj = saisieObj[e.target.dataset.i];
|
|
|
|
var isActive = /active/.test(obj.inputEl.className); // VRAI si l'élément est actif
|
2015-11-15 21:36:35 +00:00
|
|
|
|
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
// 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' );
|
2015-11-15 21:36:35 +00:00
|
|
|
else
|
2015-11-26 13:39:01 +00:00
|
|
|
remClass( obj.inputEl, 'active' );
|
2015-11-15 12:02:34 +00:00
|
|
|
|
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
// si changement du caractère "actif", et plus particulièrement
|
|
|
|
if( /active/.test(obj.inputEl.className) != isActive )
|
|
|
|
if( !isActive ) // si activation
|
|
|
|
nombreModification += 1;
|
|
|
|
else
|
|
|
|
nombreModification -= 1;
|
2015-11-15 12:02:34 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
// si plus d'une modification, on affiche le bouton 'tout enregistrer'
|
|
|
|
if( nombreModification > 1 )
|
|
|
|
addClass( toutEnregistrerBtn, 'active' );
|
|
|
|
else
|
|
|
|
remClass( toutEnregistrerBtn, 'active' );
|
2015-11-15 12:02:34 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
}
|
|
|
|
}, false);
|
|
|
|
|
|
|
|
|
|
|
|
// on créé l'évènement de confirmation de la saisie
|
|
|
|
saisieObj[i].button.addEventListener('click', function(e){
|
|
|
|
// s'il s'agit bien d'un bouton de validation, que le <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 ){
|
|
|
|
var obj = saisieObj[e.target.parentNode.children[0].dataset.i];
|
|
|
|
|
|
|
|
var request = { // on définit la requête pour API
|
|
|
|
level_0: 'career',
|
|
|
|
level_1: 'saisieNote',
|
|
|
|
etudiant: obj.userid,
|
|
|
|
controle: obj.ctrlid,
|
|
|
|
note: obj.inputEl.value.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);
|
2015-11-15 21:36:35 +00:00
|
|
|
|
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
}
|
2015-11-15 21:36:35 +00:00
|
|
|
|
2015-11-21 12:13:40 +00:00
|
|
|
|
2015-11-15 21:36:35 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
// on créé l'évènement de confirmation de la saisie de TOUTES les notes saisies ou modifiées
|
|
|
|
toutEnregistrerBtn.addEventListener('click', function(e){
|
2015-11-15 21:36:35 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
addClass( toutEnregistrerBtn, 'loading' );
|
2015-11-15 21:36:35 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
var toutesNotes = [];
|
2015-11-15 21:36:35 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
var controleUID = null;
|
2015-11-22 16:23:01 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
// 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) ){
|
2015-11-15 21:36:35 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
if( controleUID == null ) controleUID = saisieObj[i].ctrlid;
|
2015-11-22 16:23:01 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
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)
|
|
|
|
});
|
2015-11-15 21:36:35 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
}}
|
2015-11-15 21:36:35 +00:00
|
|
|
|
2015-11-22 15:34:07 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
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
|
|
|
|
};
|
2015-11-22 15:34:07 +00:00
|
|
|
|
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
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();
|
|
|
|
});
|
2015-11-22 15:34:07 +00:00
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
}, false);
|
2015-11-22 15:34:07 +00:00
|
|
|
|
|
|
|
|
2015-11-26 13:39:01 +00:00
|
|
|
}
|
2015-11-15 12:02:34 +00:00
|
|
|
|
|
|
|
}
|
2015-11-13 23:47:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-->
|