152 lines
5.6 KiB
JavaScript
Executable File
152 lines
5.6 KiB
JavaScript
Executable File
<!--
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* GESTION DU DEPLACEMENT D'ELEVES */
|
|
if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ // si c'set l'admin
|
|
|
|
/* DEPLACEMENT A L'AIDE DES <SELECT> */
|
|
var deplacementElements = document.querySelectorAll('#CONTAINER section[name=movestudents] table tr td select');
|
|
var deplacementObj = [];
|
|
|
|
// on référencie tous les select dans un objet
|
|
for( var i = 0 ; i < deplacementElements.length ; i++ ){
|
|
|
|
deplacementElements[i].dataset.i = i; // le rang du <select> dans la liste
|
|
|
|
deplacementObj[i] = {
|
|
select: deplacementElements[i], // le <select> en question
|
|
initval: deplacementElements[i].value, // la valeur initiale du <select>
|
|
button: deplacementElements[i].parentNode.children[1], // le bouton de validation pour ce <select>
|
|
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 <select>
|
|
};
|
|
|
|
// on créé l'évènement qui affiche le validateur dès le changement de valeur
|
|
deplacementObj[i].select.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') && deplacementObj[e.target.dataset.i].select == e.target ){
|
|
var obj = deplacementObj[e.target.dataset.i];
|
|
|
|
if( obj.initval != obj.select.value ) // si c'est une nouvelle valeur (nouveau groupe), on active le validateur (bouton)
|
|
addClass( obj.select, 'active' );
|
|
else
|
|
remClass( obj.select, 'active' );
|
|
|
|
}
|
|
}, false);
|
|
|
|
|
|
// on créé l'évènement de confirmation du déplacement
|
|
deplacementObj[i].button.addEventListener('click', function(e){
|
|
// s'il s'agit bien d'un bouton de validation, que le <select> associé a data-i existante et que ça match correctement
|
|
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];
|
|
|
|
addClass( obj.button, 'loading' );
|
|
|
|
var request = { // on définit la requête pour API
|
|
level_0: 'groups',
|
|
level_1: 'move',
|
|
etudiant: obj.userid,
|
|
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' ) reload();
|
|
});
|
|
|
|
}
|
|
|
|
}, false);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/**********************************************************************/
|
|
/*** GESTION DES SELECT/TABLES D'AFFINAGES POUR AFFINER LES GROUPES ***/
|
|
/**********************************************************************/
|
|
var selectList = document.querySelectorAll("#CONTAINER > section[name] > select[name=groupe], #CONTAINER > section[name] > .p > select[name=annee]");
|
|
var partList = document.querySelectorAll("#CONTAINER > section[name] > table.partlist[name=semestre], "+
|
|
"#CONTAINER > section[name] > table.partlist[name=formation], "+
|
|
"#CONTAINER > section[name] > .p > div.partlist[name=semestre] > span[data-stre]");
|
|
|
|
// GESTION DE L'AFFINAGE PAR FORMATION/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;
|
|
|
|
// affinage par semestre (exportation)
|
|
}else if( e.target.parentNode.getAttribute('name') == 'semestre' && e.target.dataset.hasOwnProperty('stre') )
|
|
pageM.vars[2] = 's:'+e.target.dataset.stre;
|
|
|
|
// si la formation n'est pas définie, on l'active
|
|
if( !/^[fa]:/.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 L'AFFINAGE PAR GROUPE //
|
|
for( var i = 0 ; i < selectList.length ; i++ ){
|
|
|
|
selectList[i].addEventListener('change', function(e){
|
|
|
|
if( e.target.tagName == 'SELECT' ){
|
|
|
|
if( e.target.getAttribute('name') == 'groupe' )
|
|
pageM.vars[2] = 'g:'+e.target.value;
|
|
|
|
if( e.target.getAttribute('name') == 'annee' )
|
|
pageM.vars[1] = 'a:'+e.target.value;
|
|
|
|
// si la formation n'est pas définie, on l'active
|
|
if( !/^[fa]:/.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);
|
|
|
|
}
|
|
|
|
|
|
|
|
--> |