Déplacement d'étudiants multiple + affichage des noms de groupes par taille puis alpha
This commit is contained in:
parent
4e240478d8
commit
7a4c2e7f87
|
@ -40,9 +40,6 @@ body{
|
||||||
|
|
||||||
/* background */
|
/* background */
|
||||||
background: #ecf0f1;
|
background: #ecf0f1;
|
||||||
background: url(../src/wallpaper.jpg) top left no-repeat;
|
|
||||||
background-size: cover;
|
|
||||||
background-attachment: fixed;
|
|
||||||
|
|
||||||
/* scroll */
|
/* scroll */
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
@ -74,7 +71,9 @@ body{
|
||||||
box-shadow: 0 0 5px #555;
|
box-shadow: 0 0 5px #555;
|
||||||
|
|
||||||
/* background */
|
/* background */
|
||||||
background-color: #ecf0f1;
|
background: #ecf0f1 url(../src/loader.svg) center center no-repeat;
|
||||||
|
background-size: 5em auto;
|
||||||
|
background-attachment: fixed;
|
||||||
|
|
||||||
/* scroll */
|
/* scroll */
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
|
@ -130,9 +130,6 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' );
|
||||||
pageM.setPage( section.dataset.link );
|
pageM.setPage( section.dataset.link );
|
||||||
|
|
||||||
/* on active les sous-parties */
|
/* on active les sous-parties */
|
||||||
pageM.container.innerHTML = '';
|
|
||||||
pageM.container.style.background= 'url(../src/loader.gif) center center no-repeat';
|
|
||||||
pageM.container.style.backgroundSize= '2em auto';
|
|
||||||
pageM.xhr[pageM.xhr.length-1].addEventListener('load', function(){
|
pageM.xhr[pageM.xhr.length-1].addEventListener('load', function(){
|
||||||
|
|
||||||
// on récupère les sections du document
|
// on récupère les sections du document
|
||||||
|
|
|
@ -51,7 +51,7 @@ APIClass.prototype = {
|
||||||
if( ptrAPI.xhr[i].readyState == 4 ){ // si la requête est terminée
|
if( ptrAPI.xhr[i].readyState == 4 ){ // si la requête est terminée
|
||||||
|
|
||||||
/* DEBUG : affiche la réponse BRUTE de API.php */
|
/* 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) );
|
console.log( JSON.parse(ptrAPI.xhr[i].responseText) );
|
||||||
|
|
||||||
/* si success de requête */
|
/* si success de requête */
|
||||||
|
|
|
@ -546,21 +546,20 @@ class DataBase{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************/
|
||||||
/******************************************************/
|
/***** déplace une liste d'étudiants d'un groupe à un autre *****/
|
||||||
/***** déplace un étudiant d'un groupe à un autre *****/
|
/****************************************************************/
|
||||||
/******************************************************/
|
public function deplacerEtudiantMultiple($etudiants, $groupe, $semestre){
|
||||||
public function deplacerEtudiant($etudiant, $groupe, $semestre){
|
|
||||||
|
|
||||||
// on vérifie que le semestre et que le groupe de destination existent
|
// on vérifie que le semestre et que le groupe de destination existent
|
||||||
if( !($semestreInfo=semestreRepo::info($semestre)) ) return 'unknown_semestre';
|
if( !($semestreInfo=semestreRepo::info($semestre)) ) return 'unknown_semestre';
|
||||||
if( !($destGroupeInfo=groupRepo::info($groupe)) ) return 'unknown_newgroup';
|
if( !($destGroupeInfo=groupRepo::info($groupe)) ) return 'unknown_newgroup';
|
||||||
|
|
||||||
if( groupRepo::ajouterMembre($etudiant, $destGroupeInfo['id'], $semestreInfo['id']) )
|
foreach($etudiants as $etu)
|
||||||
return 'success';
|
if( !(groupRepo::ajouterMembre($etu, $destGroupeInfo['id'], $semestreInfo['id'])) )
|
||||||
else
|
return 'error';
|
||||||
return 'error';
|
|
||||||
|
|
||||||
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -225,18 +225,19 @@ require_once __ROOT__.'/manager/database.php';
|
||||||
$answer->request = 'permission_error';
|
$answer->request = 'permission_error';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/************************************************/
|
|
||||||
/* déplace un étudiant de son groupe à un autre */
|
|
||||||
/************************************************/
|
|
||||||
case 'move': if( permission('admin') && $_SESSION['annee'] >= getCurrentYear() ){
|
|
||||||
|
|
||||||
$areSetParam = isset($request->etudiant) && isset($request->groupe) && isset($request->semestre); // les arguments existent
|
/************************************************************/
|
||||||
$typeOkParam = $areSetParam && is_string($request->etudiant) && is_numeric($request->groupe); // si c'est des strings
|
/* déplace une liste d'étudiants de leurs groupe à un autre */
|
||||||
$nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && is_numeric($request->semestre); // d'au moins 1 caractère
|
/************************************************************/
|
||||||
$etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->etudiant); // etudiant (username) bon format
|
case 'move_multiple': if( permission('admin') && $_SESSION['annee'] >= getCurrentYear() ){
|
||||||
|
|
||||||
if( $etudiantCheck ){ // si param ok
|
$areSetParam = isset($request->etudiants) && isset($request->groupe) && isset($request->semestre); // les arguments existent
|
||||||
$answer->request = DataBase::getInstance()->deplacerEtudiant($request->etudiant, $request->groupe, $request->semestre);
|
$typeOkParam = $areSetParam && is_array($request->etudiants) && is_numeric($request->groupe); // si c'est des strings
|
||||||
|
$nEmptyParam = $typeOkParam && count($request->etudiants) > 0 && is_numeric($request->semestre); // d'au moins 1 caractère
|
||||||
|
|
||||||
|
|
||||||
|
if( $nEmptyParam ){ // si param ok
|
||||||
|
$answer->request = DataBase::getInstance()->deplacerEtudiantMultiple($request->etudiants, $request->groupe, $request->semestre);
|
||||||
}else
|
}else
|
||||||
$answer->request = 'param_error';
|
$answer->request = 'param_error';
|
||||||
|
|
||||||
|
|
|
@ -91,8 +91,8 @@ class groupRepo extends DBAccess{
|
||||||
public static function creer($nom){
|
public static function creer($nom){
|
||||||
/* [1] On vérifie l'existence d'un groupe avec ce nom
|
/* [1] On vérifie l'existence d'un groupe avec ce nom
|
||||||
======================================================*/
|
======================================================*/
|
||||||
if( groupRepo::UID($nom) ) // si le groupe existe déjà
|
if( $groupeUID=groupRepo::UID($nom) ) // si le groupe existe déjà
|
||||||
return false; // on retourne FAUX
|
return $groupeUID; // on retourne FAUX
|
||||||
|
|
||||||
/* [2] On créé le groupe
|
/* [2] On créé le groupe
|
||||||
=========================*/
|
=========================*/
|
||||||
|
@ -337,7 +337,7 @@ class groupRepo extends DBAccess{
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static function getAllGroups(){
|
public static function getAllGroups(){
|
||||||
$getGroupList = DataBase::getPDO()->query("SELECT DISTINCT id_groupe as id, nom FROM groupe ORDER BY nom ASC");
|
$getGroupList = DataBase::getPDO()->query("SELECT DISTINCT id_groupe as id, nom FROM groupe ORDER BY LENGTH(nom), nom ASC");
|
||||||
// $getGroupList = DataBase::getPDO()->query("SELECT id_groupe as id, nom FROM groupe WHERE length(nom) <= 6 ORDER BY nom ASC");
|
// $getGroupList = DataBase::getPDO()->query("SELECT id_groupe as id, nom FROM groupe WHERE length(nom) <= 6 ORDER BY nom ASC");
|
||||||
|
|
||||||
return DataBase::delNumeric( $getGroupList->fetchAll() );
|
return DataBase::delNumeric( $getGroupList->fetchAll() );
|
||||||
|
|
|
@ -27,63 +27,58 @@ if( canSeeStudent ){
|
||||||
/* GESTION DU DEPLACEMENT D'ELEVES */
|
/* GESTION DU DEPLACEMENT D'ELEVES */
|
||||||
if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ // si c'set l'admin
|
if( document.querySelector('#CONTAINER section[name=movestudents]') != null ){ // si c'set l'admin
|
||||||
|
|
||||||
/* DEPLACEMENT A L'AIDE DES <SELECT> */
|
var deplacementEtudiants = document.querySelectorAll('#CONTAINER section[name=movestudents] table tr td input.deplacer_etu[data-usr]');
|
||||||
var deplacementElements = document.querySelectorAll('#CONTAINER section[name=movestudents] table tr td select');
|
var choixGroupeDestination = document.querySelectorAll('#CONTAINER section[name=movestudents] table tr td .deplacement_groupe[data-stre]');
|
||||||
var deplacementObj = [];
|
var validerDeplacement = document.querySelectorAll('#CONTAINER section[name=movestudents] table tr td .valider_deplacement');
|
||||||
|
|
||||||
// on référencie tous les select dans un objet
|
// contiendra les étudiants selectionnés
|
||||||
for( var i = 0 ; i < deplacementElements.length ; i++ ){
|
var etudiantsADeplacer = [];
|
||||||
|
// contiendra le groupe de destination
|
||||||
|
var destGroupe = document.querySelector('#CONTAINER section[name=movestudents] table tr td .deplacement_groupe[data-stre]').value;
|
||||||
|
var destSemestre = document.querySelector('#CONTAINER section[name=movestudents] table tr td .deplacement_groupe[data-stre]').dataset.stre;
|
||||||
|
|
||||||
deplacementElements[i].dataset.i = i; // le rang du <select> dans la liste
|
/* LORSQU'ON "CHECK" UN ETUDIANT ON LE RAJOUTE A LA LISTE */
|
||||||
|
for( var i = 0 ; i < deplacementEtudiants.length ; i++ )
|
||||||
|
deplacementEtudiants[i].addEventListener('click', function(e){
|
||||||
|
var index = etudiantsADeplacer.indexOf(e.target.dataset.usr);
|
||||||
|
if( e.target.checked ) // si on active
|
||||||
|
etudiantsADeplacer.push( e.target.dataset.usr );
|
||||||
|
|
||||||
deplacementObj[i] = {
|
else if( index > -1 ) // sinon on enlève (si dans la liste)
|
||||||
select: deplacementElements[i], // le <select> en question
|
etudiantsADeplacer = etudiantsADeplacer.slice(0, index).concat( etudiantsADeplacer.slice(index+1) );
|
||||||
initval: deplacementElements[i].value, // la valeur initiale du <select>
|
}, false);
|
||||||
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
|
/* ON SYNCHRONISE TOUS LES SELECT */
|
||||||
deplacementObj[i].select.addEventListener('change', function(e){
|
for( var g = 0 ; g < choixGroupeDestination.length ; g++ )
|
||||||
// on récupère le rang dans la liste et qu'il s'agit du même élément
|
choixGroupeDestination[g].addEventListener('change', function(e){
|
||||||
if( e.target.dataset.hasOwnProperty('i') && deplacementObj[e.target.dataset.i].select == e.target ){
|
destGroupe = e.target.value;
|
||||||
var obj = deplacementObj[e.target.dataset.i];
|
destSemestre = e.target.dataset.stre;
|
||||||
|
|
||||||
if( obj.initval != obj.select.value ) // si c'est une nouvelle valeur (nouveau groupe), on active le validateur (bouton)
|
for( var i = 0 ; i < choixGroupeDestination.length ; i++ )
|
||||||
addClass( obj.select, 'active' );
|
choixGroupeDestination[i].value = e.target.value;
|
||||||
else
|
|
||||||
remClass( obj.select, 'active' );
|
|
||||||
|
|
||||||
}
|
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
// on créé l'évènement de confirmation du déplacement
|
/* VALIDATION DE DEPLACEMENT */
|
||||||
deplacementObj[i].button.addEventListener('click', function(e){
|
for( var i = 0 ; i < validerDeplacement.length ; i++ )
|
||||||
// s'il s'agit bien d'un bouton de validation, que le <select> associé a data-i existante et que ça match correctement
|
validerDeplacement[i].addEventListener('click', function(e){
|
||||||
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 ){
|
// on créé la requête
|
||||||
var obj = deplacementObj[e.target.parentNode.children[0].dataset.i];
|
var request = {
|
||||||
|
level_0: 'groups',
|
||||||
|
level_1: 'move_multiple',
|
||||||
|
semestre: destSemestre,
|
||||||
|
etudiants: etudiantsADeplacer,
|
||||||
|
groupe: destGroupe
|
||||||
|
};
|
||||||
|
|
||||||
addClass( obj.button, 'loading' );
|
console.log( request );
|
||||||
|
// on envoie la requête
|
||||||
var request = { // on définit la requête pour API
|
API.send(request, function(answer){
|
||||||
level_0: 'groups',
|
if( answer.request == 'success' ) reload();
|
||||||
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);
|
}, false);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -846,7 +846,7 @@ elseif( permission('master') || permission('admin') ){ // si enseignant et qu'un
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if( (permission('master') || permission('admin')) && $etudiantOpt != null ){
|
if( (permission('master') || permission('admin')) && $etudiantOpt != null ){
|
||||||
include __ROOT__.'src/svg.php';
|
include __ROOT__.'/src/svg.php';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -165,8 +165,6 @@ if( permission('student') ){ // si l'utilisateur est connecté et que c'est un
|
||||||
echo '</tr>';
|
echo '</tr>';
|
||||||
}}
|
}}
|
||||||
|
|
||||||
// echo '<tr><td colspan=5 class=more></td></tr>';
|
|
||||||
|
|
||||||
echo '</tbody></table>';
|
echo '</tbody></table>';
|
||||||
|
|
||||||
|
|
||||||
|
@ -505,22 +503,29 @@ if( permission('admin') || permission('master') ){ // si l'utilisateur est conne
|
||||||
// l'admin uniquement peut déplacer les étudiants
|
// l'admin uniquement peut déplacer les étudiants
|
||||||
/**/ if( permission('admin') ){
|
/**/ if( permission('admin') ){
|
||||||
/* CHANGEMENT DE GROUPE */
|
/* CHANGEMENT DE GROUPE */
|
||||||
echo "<select data-stre='".$group['id_semestre']."' class='deplacement_groupe'>";
|
echo "<input data-usr='".$user['identifiant']."' class='deplacer_etu' type='checkbox' id='".$user['identifiant']."deplacer'><label for='".$user['identifiant']."deplacer'></label> déplacer";
|
||||||
// on affiche le groupe courant
|
|
||||||
echo "<option value='".$group['id']."' selected>".$group['nom']."</option>";
|
|
||||||
|
|
||||||
foreach($answerAllGroups->grouplist as $groupemodif) // pour tous les groupes
|
|
||||||
if( $groupemodif['rang'] == $group['rang'] && $groupemodif['id'] != $group['id'] ) // si c'est un groupe du même rang et pas le groupe actuel
|
|
||||||
echo "<option value='".$groupemodif['id']."'>".$groupemodif['nom']."</option>";
|
|
||||||
|
|
||||||
echo '</select>';
|
|
||||||
echo "<div class='confirm'>déplacer</div>";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '</td>';
|
echo '</td>';
|
||||||
echo '</tr>';
|
echo '</tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* après chaque groupe on propose de déplacer les élèves cochés */
|
||||||
|
echo "<tr>";
|
||||||
|
echo "<td colspan=2>Déplacer les élèves selectionnés vers: </td>";
|
||||||
|
echo "<td colspan=3>";
|
||||||
|
echo "<select data-stre='".$group['id_semestre']."' class='deplacement_groupe'>";
|
||||||
|
echo "<option value='".$group['id']."' selected>".$group['nom']."</option>";
|
||||||
|
|
||||||
|
foreach($answerAllGroups->grouplist as $groupemodif) // pour tous les groupes
|
||||||
|
if( $groupemodif['rang'] == $group['rang'] && $groupemodif['id'] != $group['id'] ) // si c'est un groupe du même rang et pas le groupe actuel
|
||||||
|
echo "<option value='".$groupemodif['id']."'>".$groupemodif['nom']."</option>";
|
||||||
|
|
||||||
|
echo '</select>';
|
||||||
|
echo "<div class='confirm active valider_deplacement'>déplacer les étudiants</div>";
|
||||||
|
echo "</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
|
||||||
// echo '<tr><td colspan=5 class=more></td></tr>';
|
// echo '<tr><td colspan=5 class=more></td></tr>';
|
||||||
|
|
||||||
echo '</tbody>';
|
echo '</tbody>';
|
||||||
|
|
BIN
src/loader.gif
BIN
src/loader.gif
Binary file not shown.
Before Width: | Height: | Size: 847 B |
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?><svg width='126px' height='126px' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-ripple"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><g> <animate attributeName="opacity" dur="2s" repeatCount="indefinite" begin="0s" keyTimes="0;0.33;1" values="1;1;0"></animate><circle cx="50" cy="50" r="40" stroke="#2dcc70" fill="none" stroke-width="5" stroke-linecap="round"><animate attributeName="r" dur="2s" repeatCount="indefinite" begin="0s" keyTimes="0;0.33;1" values="0;22;44"></animate></circle></g><g><animate attributeName="opacity" dur="2s" repeatCount="indefinite" begin="1s" keyTimes="0;0.33;1" values="1;1;0"></animate><circle cx="50" cy="50" r="40" stroke="#ffffff" fill="none" stroke-width="5" stroke-linecap="round"><animate attributeName="r" dur="2s" repeatCount="indefinite" begin="1s" keyTimes="0;0.33;1" values="0;22;44"></animate></circle></g></svg>
|
After Width: | Height: | Size: 975 B |
3
test.php
3
test.php
|
@ -46,6 +46,9 @@ require_once __ROOT__.'/manager/security.php';
|
||||||
|
|
||||||
debug();
|
debug();
|
||||||
var_dump( $_SESSION );
|
var_dump( $_SESSION );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// $_SESSION['annee'] = 2015;
|
// $_SESSION['annee'] = 2015;
|
||||||
|
|
||||||
// require_once __ROOT__.'/manager/phpExcel.php';
|
// require_once __ROOT__.'/manager/phpExcel.php';
|
||||||
|
|
Loading…
Reference in New Issue