Merge branch 'dev' into search

Merge de la branche search et dev pour la push (putain de merde)
This commit is contained in:
rookiered 2016-01-09 16:41:25 +01:00
commit e14e61c29a
34 changed files with 652 additions and 109 deletions

1
.gitignore vendored Executable file
View File

@ -0,0 +1 @@
/manager/conf*.json

View File

@ -372,9 +372,159 @@ select.active + .confirm,
.confirm.pamp{
border-color: #f55b55;
color: #f55b55;
background-image: url(../src/validate@pamp.svg);
background-image: url(../src/validate@pamp.svg) !important;
}
@-webkit-keyframes bounce_err{
0%{
transform: translateX(5px);
-moz-transform: translateX(5px);
-webkit-transform: translateX(5px);
-ms-transform: translateX(5px);
-o-transform: translateX(5px);
}
25%{
transform: translateX(-5px);
-moz-transform: translateX(-5px);
-webkit-transform: translateX(-5px);
-ms-transform: translateX(-5px);
-o-transform: translateX(-5px);
}
50%{
transform: translateX(5px);
-moz-transform: translateX(5px);
-webkit-transform: translateX(5px);
-ms-transform: translateX(5px);
-o-transform: translateX(5px);
}
100%{
transform: translateX(0);
-moz-transform: translateX(0);
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
}
}
@-moz-keyframes bounce_err{
0%{
transform: translateX(5px);
-moz-transform: translateX(5px);
-webkit-transform: translateX(5px);
-ms-transform: translateX(5px);
-o-transform: translateX(5px);
}
25%{
transform: translateX(-5px);
-moz-transform: translateX(-5px);
-webkit-transform: translateX(-5px);
-ms-transform: translateX(-5px);
-o-transform: translateX(-5px);
}
50%{
transform: translateX(5px);
-moz-transform: translateX(5px);
-webkit-transform: translateX(5px);
-ms-transform: translateX(5px);
-o-transform: translateX(5px);
}
100%{
transform: translateX(0);
-moz-transform: translateX(0);
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
}
}
@-o-keyframes bounce_err{
0%{
transform: translateX(5px);
-moz-transform: translateX(5px);
-webkit-transform: translateX(5px);
-ms-transform: translateX(5px);
-o-transform: translateX(5px);
}
25%{
transform: translateX(-5px);
-moz-transform: translateX(-5px);
-webkit-transform: translateX(-5px);
-ms-transform: translateX(-5px);
-o-transform: translateX(-5px);
}
50%{
transform: translateX(5px);
-moz-transform: translateX(5px);
-webkit-transform: translateX(5px);
-ms-transform: translateX(5px);
-o-transform: translateX(5px);
}
100%{
transform: translateX(0);
-moz-transform: translateX(0);
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
}
}
@keyframes bounce_err{
0%{
transform: translateX(5px);
-moz-transform: translateX(5px);
-webkit-transform: translateX(5px);
-ms-transform: translateX(5px);
-o-transform: translateX(5px);
}
25%{
transform: translateX(-5px);
-moz-transform: translateX(-5px);
-webkit-transform: translateX(-5px);
-ms-transform: translateX(-5px);
-o-transform: translateX(-5px);
}
50%{
transform: translateX(5px);
-moz-transform: translateX(5px);
-webkit-transform: translateX(5px);
-ms-transform: translateX(5px);
-o-transform: translateX(5px);
}
100%{
transform: translateX(0);
-moz-transform: translateX(0);
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
}
}
/* bounce animation */
.confirm.bounce_error{
animation: bounce_err .8s ease-in;
-moz-animation: bounce_err .8s ease-in;
-webkit-animation: bounce_err .8s ease-in;
-ms-animation: bounce_err .8s ease-in;
-o-animation: bounce_err .8s ease-in;
}
/* tr@hover */
body.trHoverActivated tr:hover td select.active + .confirm,
body.trHoverActivated tr:hover td input.active + .confirm,

View File

@ -87,15 +87,15 @@ var connected = !( DOM.AUTH.children[0].innerHTML == 'Connexion' );
/* [c] gestion des classes
================================================*/
function addClass(el, pClass){
if( el.className.length > 0 && el.className != pClass ) el.className = el.className + ' ' + pClass;
else el.className = pClass;
}
// function addClass(el, pClass){
// if( el.className.length > 0 && el.className != pClass ) el.className = el.className + ' ' + pClass;
// else el.className = pClass;
// }
function remClass(el, pClass){
if( el.className.indexOf(pClass) > -1 ) // si la class de l'élement contient la classe à enlever
el.className = el.className.substr(0, el.className.indexOf(pClass)) + '' + el.className.substr(el.className.indexOf(pClass)+pClass.length);
}
// function remClass(el, pClass){
// if( el.className.indexOf(pClass) > -1 ) // si la class de l'élement contient la classe à enlever
// el.className = el.className.substr(0, el.className.indexOf(pClass)) + '' + el.className.substr(el.className.indexOf(pClass)+pClass.length);
// }

View File

@ -7,3 +7,31 @@ NodeList.prototype.indexOf = HTMLCollection.prototype.indexOf = function(searche
// si on a rien trouvé, on retourne -1
return -1;
};
/* GESTION DE L'AJOUT/SUPPRESSION D'UNE CLASSE */
function addClass(el, pClass){
if( el.className.length > 0 && el.className != pClass ) el.className = el.className + ' ' + pClass;
else el.className = pClass;
}
function remClass(el, pClass){
if( el.className.indexOf(pClass) > -1 ) // si la class de l'élement contient la classe à enlever
el.className = el.className.substr(0, el.className.indexOf(pClass)) + '' + el.className.substr(el.className.indexOf(pClass)+pClass.length);
}
/* ANIMATION DE BOUNCE PENDANT 1 SEC */
function makeBounce(buttonElement){
// ajout de la classe
remClass(buttonElement, 'loading');
addClass(buttonElement, 'bounce_error');
addClass(buttonElement, 'pamp');
// suppression de la classe après 1 sec
setTimeout(function(){
remClass(buttonElement, 'bounce_error');
remClass(buttonElement, 'pamp');
}, 1000);
}

View File

@ -200,6 +200,26 @@ class careerManager{
break;
/********************************************/
/* modification des capitalisations d'un UE */
/********************************************/
case 'capitaliser': if( permission('admin') ){
$areSetParam = isset($request->etudiant) && isset($request->ue) && isset($request->semestre); // les arguments existent
$etudiantCheck = $areSetParam && checkParam($request->etudiant, 'utilisateur.identifiant'); // identifiant etudiant bon format
$semestreCheck = $etudiantCheck && checkParam($request->semestre, 'auto_increment_id'); // id semestre bon format
$ueCheck = $semestreCheck && checkParam($request->ue, 'auto_increment_id'); // id ue bon format
if( $ueCheck ){ // si tout les paramètres sont bons
$answer->request = DataBase::getInstance()->capitaliserUE($request->ue, $request->semestre, $request->etudiant);
}else
$answer->request = 'param_error';
}else
$answer->request = 'permission_error';
break;
/****************************************************/

View File

@ -38,12 +38,11 @@ class DataBase{
/* retourne une instance de la classe */
public static function getInstance(){
if( DataBase::$instance == null ){
if( $_SERVER['HTTP_HOST'] == 'sid' ) // si co en local (xdrm)
DataBase::$instance = new DataBase("localhost", "sid2", "php", "Qt358nUdyeTxLDM8");
else if( $_SERVER['HTTP_HOST'] == 'localhost' ) // si co en local (autres)
DataBase::$instance = new DataBase("localhost", "sid2", "root", "");
else // si co en ligne
DataBase::$instance = new DataBase("mysql.hostinger.fr", "u712664263_sid", "u712664263_php", "Qt358nUdyeTxLDM8");
// chargement de la configuration du server SQL
$conf = json_decode(file_get_contents(__ROOT__.'/manager/conf.json'), true);
DataBase::$instance = new DataBase($conf['host'], $conf['dbname'], $conf['user'], $conf['password']);
}
return DataBase::$instance;
@ -309,6 +308,63 @@ class DataBase{
/* effectue la capitalisation de l'ue
* @ue pour le semestre @semestre
* pour l'étudiant @etudiant
*/
public function capitaliserUE($ue, $semestre, $etudiant){
// on vérifie l'existence des paramètres (etudiant, semestre, ue)
if( !semestreRepo::exists($semestre) ) return 'unknown_semestre';
if( !groupRepo::forStudent($etudiant, $semestre) ) return 'unknown_user';
if( !($ueInfo=ueRepo::info($ue)) ) return 'unknown_ue';
// on vérifie que ce semestre a bien l'ue donnée
$UEs = ueRepo::forStudent($etudiant, $semestre);
$UEUIDList = array();
foreach($UEs as $UE)
if( !in_array($UE['id'], $UEUIDList) )
array_push($UEUIDList, $UE['id']);
// si l'UE n'est pas dans ce semestre, on retourne une erreur
if( !in_array($ue, $UEUIDList) ) return 'unknown_ue';
/* [1] On récupère les redoublements de ce semestre
======================================================*/
$redoublements = semestreRepo::getRedoublements($semestre, $etudiant);
/* [2] On retire ceux qui n'ont pas l'UE
======================================================*/
foreach($redoublements as $iter_s=>$SEM){
$listeUEs = ueRepo::forStudent($etudiant, $SEM['id_semestre']);
$hasUE = false;
// on vérifie que le semestre a bien l'UE
foreach($listeUEs as $UE)
if( $UE['id'] == $ue ) $hasUE = true;
// s'il n'a pas l'UE, on le supprime
if( !$hasUE ) unset($redoublements[$iter_s]);
}
/* [3] On applique les modifications
======================================================*/
$checker = true;
// on définit l'UE comme actif
$checker = $checker && ueRepo::capitalisation($semestre, $etudiant, $ue, true);
// on définit l'UE dans les autres semestres comme inactif
foreach($redoublements as $red)
$checker = $checker && ueRepo::capitalisation($red['id_semestre'], $etudiant, $ue, false);
return ($checker) ? 'success' : 'error';
}
/*************************************************************************************/
/* _ _ _______ _____ _ _____ _____ _______ ______ _ _ _____ */
/* | | | |__ __|_ _| | |_ _|/ ____| /\|__ __| ____| | | | __ \ */
@ -1004,9 +1060,25 @@ class DataBase{
$parcours = semestreRepo::getParcours($etudiantUID);
// contiendra les couples [id_formation, rang] pour les semestres capitalisables
$listeSemestresCapitalisables = array();
/* [1] Chaque semestre
==========================*/
foreach($parcours as $iter_s=>$semestre){
// on récupère les id des UEs non pris en compte
$inactiveUE = explode(',', $semestre['inactive']);
// on supprime les entrées vides
foreach($inactiveUE as $i=>$UE)
if( strlen($UE) == 0 )
unset($inactiveUE[$i]);
// si des UEs non pris en compte, on ajoute le rang+formation à la liste
if( count($inactiveUE) > 0 )
if( !in_array( array($semestre['id_formation'], $semestre['rang']), $listeSemestresCapitalisables) )
array_push($listeSemestresCapitalisables, array($semestre['id_formation'], $semestre['rang']));
$parcours[$iter_s]['UEs'] = ueRepo::forStudent($etudiantUID, $semestre['id']);
/* CALCUL DE MOYENNE DU SEMESTRE */
@ -1060,7 +1132,8 @@ class DataBase{
$parcours[$iter_s]['UEs'][$iter_ue]['moyenne'] = array('moyenne' => 20*$moyenneUE/$totalUE, 'base' => 20 );
// on complète la moyenne du semestre si l'UE a une moyenne
// on complète la moyenne du semestre
// SI l'UE a une moyenne
$tmpUE = $parcours[$iter_s]['UEs'][$iter_ue];
if( !is_bool($tmpUE['moyenne']) ){
@ -1080,10 +1153,15 @@ class DataBase{
/* ENREGISTREMENT DE LA MOYENNE DU SEMESTRE */
// on enregistre les valeurs du calcul pour pouvoir calculer avec compensation
$parcours[$iter_s]['calculMoyenne'] = array( 'sum' => $moyenneSemestre, 'count' => $totalSemestre );
if( $totalSemestre == 0 ) // si la somme vaut 0, on retourne FALSE
$parcours[$iter_s]['moyenne'] = false;
else
else{
// on enregistre la moyenne
$parcours[$iter_s]['moyenne'] = array('moyenne' => 20*$moyenneSemestre/$totalSemestre, 'base' => 20 );
}
$parcours[$iter_s]['compensable'] = $semestreCompensable;
@ -1093,6 +1171,80 @@ class DataBase{
else
$parcours[$iter_s]['compensation'] = false;
// on met la liste des id d'ue inactifs sous forme de tableau
$parcours[$iter_s]['inactive'] = $inactiveUE;
}
/* LISTE DES UES CAPITALISÉES PAR SEMESTRES REGROUPÉS (FORMATION+RANG) */
// On ajoute toutes les UE capitalisées
foreach($listeSemestresCapitalisables as $i=>$formationRang){
// pour cette formation+rang, on récupère toutes les UEs
$listeUEs = array();
$UEUIDS = array();
$listeSemestresIndexes = array();
foreach($parcours as $iter_s=>$semestre){
// si fait partie de la formation+rang courante
if( $formationRang == array( $semestre['id_formation'], $semestre['rang'] ) ){
// on ajoute l'index du semestre à la liste
array_push($listeSemestresIndexes, $iter_s);
// on ajoute chaque UE de ce semestre s'il est actif
foreach($semestre['UEs'] as $UE)
if( !in_array($UE['id'], $semestre['inactive']) ){
if( array_search($UE['id'], $UEUIDS) === false ){
// pour le premier UE (capitalisé) on s'assure de lui attribuer la capitalisation
DataBase::getInstance()->capitaliserUE($UE['id'], $semestre['id'], $etudiantUID);
array_push( $listeUEs, $UE );
array_push( $UEUIDS, $UE['id'] );
}//else // si UE existe déjà pour formation+rang, on créé la capitalisation du semestre (on le désactive)
}
}
}
// variables utiles pour la moyenne
$moyenneSemestre = 0; $totalSemestre = 0;
$semestreCompensable = true; $semestreCompensation = true;
// pour chaque UE capitalisée
foreach($listeUEs as $iter_ue=>$UE){
// si l'UE a une moyenne
if( !is_bool($UE['moyenne']) ){
$moyenneSemestre += $UE['moyenne']['moyenne']/$UE['moyenne']['base'] * $UE['coefficient'];
$totalSemestre += $UE['coefficient'];
// le semestre est non compensable si la moyenne d'au moins un UE < 8
if( 20*$UE['moyenne']['moyenne']/$UE['moyenne']['base'] < 8 )
$semestreCompensable = false;
// semestreCompensé est VRAI si au moins un semestre est entre 8 et 10
if( 20*$UE['moyenne']['moyenne']/$UE['moyenne']['base'] >= 8 && 20*$UE['moyenne']['moyenne']/$UE['moyenne']['base'] < 10 )
$semestreCompensation = true;
}
}
// attribution des moyennes aux semestres concernés
foreach($listeSemestresIndexes as $index){
if( $totalSemestre > 0 )
$parcours[$index]['moyenne'] = array( 'moyenne' => 20*$moyenneSemestre/$totalSemestre, 'base' => 20 );
else
$parcours[$index]['moyenne'] = array( 'moyenne' => 0, 'base' => 20 );
// on met à jour le semestre compensable, et compensation
$parcours[$index]['compensable'] = $semestreCompensable;
$parcours[$index]['compensation'] = $semestreCompensation;
}
}
return $parcours;

1
manager/index.php Executable file
View File

@ -0,0 +1 @@
<?php header('Location: ../index.php'); ?>

View File

@ -71,7 +71,7 @@ class controleRepo{
$ctrlInfo = $getControleInfo->fetch();
if( !is_bool($ctrlInfo) ) // on retourne le résultat en supprimant les doublons à indices numériques s'il est ok
return DataBase::delNumeric( $ctrlInfo, true );
return $ctrlInfo;
else
return array();
}

View File

@ -44,7 +44,7 @@ class groupRepo{
$getGroupeInfo = DataBase::getPDO()->prepare("SELECT id_groupe as id, nom FROM groupe WHERE id_groupe = :groupeUID");
$getGroupeInfo->execute(array( ':groupeUID' => $groupeUID ));
return DataBase::delNumeric( $getGroupeInfo->fetch(), true );
return $getGroupeInfo->fetch();
}
@ -232,7 +232,7 @@ class groupRepo{
ORDER BY g.nom");
$getGroupe->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre ));
return DataBase::delNumeric( $getGroupe->fetch(), true );
return $getGroupe->fetch();
}

1
manager/repo/index.php Executable file
View File

@ -0,0 +1 @@
<?php header('Location: ../../index.php'); ?>

View File

@ -41,7 +41,7 @@ class moduleRepo{
$getModuleInfo->execute(array( ':moduleUID' => $moduleUID ));
// on retourne le résultat en supprimant les doublons à indices numériques
return DataBase::delNumeric( $getModuleInfo->fetch(), true );
return $getModuleInfo->fetch();
}

View File

@ -52,7 +52,7 @@ class noteRepo{
));
// on retourne le résultat en supprimant les doublons à indices numériques
return DataBase::delNumeric( $getUtilisateurInfo->fetch(), true );
return $getUtilisateurInfo->fetch();
}

View File

@ -189,7 +189,7 @@ class semestreRepo{
$getSemestreInfo->execute(array( ':semestreUID' => $semestreUID ));
// on retourne le résultat en supprimant les doublons à indices numériques
return DataBase::delNumeric( $getSemestreInfo->fetch(), true );
return $getSemestreInfo->fetch();
}
@ -258,7 +258,7 @@ class semestreRepo{
*
*/
public static function getParcours($etudiant){
$getSemestreListe = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code, f.nom as formation, f.nb_semestres, s.nom as semestre, s.rang, s.annee, app.mention
$getSemestreListe = DataBase::getPDO()->prepare("SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code, f.nom as formation, f.nb_semestres, s.nom as semestre, s.rang, s.annee, app.mention, app.inactive
FROM formation as f, semestre as s, appartenance as app
WHERE s.id_formation = f.id_formation
AND app.id_semestre = s.id_semestre
@ -444,7 +444,7 @@ class semestreRepo{
FROM semestre as s, mcc_ue
GROUP BY s.annee");
return DataBase::delNumeric( $getLastMccYear->fetch(), true );
return $getLastMccYear->fetch();
}
@ -568,4 +568,47 @@ class semestreRepo{
return $prev;
}
/* RETOURNE LES SEMESTRES EQUIVALENTS (REDOUBLÉS)
*
* @semestre<int> UID du semestre de base
* @etudiant<String> UID de l'étudiant en question
*
*
* @return redoublements<Array> Retourne un tableau contenant les UIDs des semestre équivalents
* @return error<Boolean> Retourne FAUX si une erreur occure
*
*/
public static function getRedoublements($semestre, $etudiant){
/* [1] On récupère les informations du semestre
=================================================*/
$getSemestreInfo = DataBase::getPDO()->prepare("SELECT DISTINCT s.*
FROM semestre as s, appartenance as app
WHERE s.id_semestre = app.id_semestre
AND s.id_semestre = :semestre
AND app.id_etudiant = :etudiant");
$getSemestreInfo->execute(array( ':semestre' => $semestre, ':etudiant' => $etudiant ));
// aucun résultat, on retourne une erreur
if( !($semestreInfo=$getSemestreInfo->fetch()) ) return 'unknown_semestre';
/* [2] On cherche les semestre redoublés
=================================================*/
$getRedoublements = DataBase::getPDO()->prepare("SELECT s.id_semestre
FROM semestre as s, appartenance as app
WHERE s.id_semestre = app.id_semestre
AND s.id_formation = :formation
AND s.rang = :rang
AND app.id_etudiant = :etudiant
AND s.id_semestre <> :semestre
ORDER BY s.annee, s.rang ASC");
$getRedoublements->execute(array(
':formation' => $semestreInfo['id_formation'],
':rang' => $semestreInfo['rang'],
':etudiant' => $etudiant,
':semestre' => $semestre
));
return $getRedoublements->fetchAll();
}
}

View File

@ -41,7 +41,7 @@ class ueRepo extends DBAccess{
$getUEInfo->execute(array( ':UEUID' => $UEUID ));
// on retourne le résultat en supprimant les doublons à indices numériques
return DataBase::delNumeric( $getUEInfo->fetch(), true );
return $getUEInfo->fetch();
}
@ -56,7 +56,7 @@ class ueRepo extends DBAccess{
*
*/
public static function forStudent($etudiant, $semestre){
// on récupère les modules
// on récupère les UEs
$getUesForStudent = DataBase::getPDO()->prepare("SELECT DISTINCT ue.id_ue as id, s.id_semestre, s.nom as semestre, s.annee, ue.nom, ue.libelle, mcc_ue.coefficient
FROM appartenance as app, semestre as s, mcc_ue, ue
WHERE app.id_semestre = s.id_semestre
@ -247,4 +247,62 @@ class ueRepo extends DBAccess{
}
/* DEFINIT SI UN UE EST PRIS EN COMPTE OU NON (CAPITALISATION)
*
* @semestre<int> UID du semestre en question
* @etudiant<String> UID de l'étudiant en question
* @ue<int> UID de l'UE en question
* @active<Boolean> VRAI si on veut qu'il soit pris en compte, NON sinon
*
*
* @return state<Boolean> VRAI si les changements sont pris en compte, sinon FAUX
*
*/
public static function capitalisation($semestre, $etudiant, $ue, $active){
/* [1] On récupère l'appartenance
==========================================================================*/
$getUEState = DataBase::getPDO()->prepare("SELECT *
FROM appartenance
WHERE id_semestre = :semestre
AND id_etudiant = :etudiant");
$getUEState->execute(array( ':semestre' => $semestre, ':etudiant' => $etudiant ));
// si on trouve aucune appartenance, on retourne FAUX
if( !($ueState=$getUEState->fetch()) ) return false;
$stateArray = explode(',', $ueState['inactive'] );
// on supprime les entrées vides
foreach($stateArray as $i=>$state)
if( strlen($state) == 0 )
unset($stateArray[$i]);
/* [2] On met à jour "inactive" pour enlever ou mettre l'UE
==========================================================================*/
if( $active && in_array($ue, $stateArray) ) // si on doit enlever l'ue et qu'il y est
array_splice($stateArray, array_search($ue, $stateArray), 1 ); // => on enleve l'ue
if( !$active && !in_array($ue, $stateArray) ) // si on doit ajouter l'ue et qu'il n'y est pas encore
array_push($stateArray, $ue); // => on ajoute l'ue
$stateString = implode(',', $stateArray);
/* [3] On met à jour dans la base de données
==========================================================================*/
$setUEState = DataBase::getPDO()->prepare("UPDATE appartenance
SET inactive = :uestate
WHERE id_appartenance = :appartenance");
$setUEState->execute(array( ':uestate' => $stateString, ':appartenance' => $ueState['id_appartenance'] ));
/* [4] On vérifie que la modification a bien été faite
==========================================================================*/
$getVerifState = DataBase::getPDO()->prepare("SELECT inactive FROM appartenance WHERE id_appartenance = :appartenance");
$getVerifState->execute(array( ':appartenance' => $ueState['id_appartenance'] ));
if( !($verifState=$getVerifState->fetch()) ) return false;
return $verifState['inactive'] == $stateString;
}
}

View File

@ -85,7 +85,7 @@ class userRepo{
$getUtilisateurInfo->execute(array( ':utilisateurUID' => $utilisateurUID ));
// on retourne le résultat en supprimant les doublons à indices numériques
return DataBase::delNumeric( $getUtilisateurInfo->fetch(), true );
return $getUtilisateurInfo->fetch();
}

View File

@ -226,6 +226,8 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n
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();
// si réponse erreur, on le signale physiquement
else makeBounce(obj.button);
});
}
@ -270,6 +272,7 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n
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();
else makeBounce(e.target);
});
}, false);
@ -369,6 +372,8 @@ if( document.querySelector('#CONTAINER section[name=allcontroles]') != null ){ /
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();
// si réponse erreur, on le signale physiquement
else makeBounce(obj.button);
});
}
@ -413,6 +418,8 @@ if( document.querySelector('#CONTAINER section[name=allcontroles]') != null ){ /
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();
// si réponse erreur, on le signale physiquement
else makeBounce(e.target);
});
}, false);
@ -479,9 +486,9 @@ if( exportJury != null ){
if( answer2.request == 'success' ){ // le fichier a bien été généré, on lance le téléchargement
document.location = answer2.pathfile;
reload();
}
}else makeBounce(e.target);
});
}
}else makeBounce(e.target);
});
@ -543,13 +550,19 @@ if( importJury != null ){
if( f.request == 'success' ){
console.log('liste intégrée');
reload();
}else console.log('integration error');
}else{
console.log('integration error');
makeBounce(e.target);
}
});
}else console.log('import error');
}else{
console.log('import error');
makeBounce(e.target);
}
});
}
}else makeBounce(e.target);
}
@ -591,6 +604,7 @@ if( publicationControles.length > 0 ){
// on envoie la requête vers l'API
API.send(request, function(answer){
if( answer.request == 'success' ) reload();
else makeBounce(e.target);
});
}
}, false);
@ -708,13 +722,19 @@ if( importNotes.length > 0 ){
if( f.request == 'success' ){
console.log('liste intégrée');
reload();
}else console.log('integration error');
}else{
console.log('integration error');
makeBounce(boutonImport);
}
});
}else console.log('import error');
}else{
console.log('import error');
makeBounce(boutonImport);
}
});
}
}else makeBounce(boutonImport);
}
@ -726,8 +746,38 @@ if( importNotes.length > 0 ){
}
/****************************************/
/* GESTION DE LA CAPITALISATION D'UN UE */
/****************************************/
var capitalisationUE = document.querySelectorAll('.capitalisation_ue[data-stre][data-ue][data-etu]');
// si il y en a sur la page
if( capitalisationUE.length > 0 ){
for( var i = 0 ; i < capitalisationUE.length ; i++ ){
capitalisationUE[i].addEventListener('click', function(e){
// on créé la requête
request = {
level_0: 'career',
level_1: 'capitaliser',
semestre: e.target.dataset.stre,
ue: e.target.dataset.ue,
etudiant: e.target.dataset.etu
};
// on envoie la requête
API.send(request, function(answer){
if( answer.request == 'success' ) reload();
else makeBounce(e.target);
});
}, false);
}
}

View File

@ -85,6 +85,7 @@ if( canMoveStudents ){ // si c'set l'admin
// on envoie la requête
API.send(request, function(answer){
if( answer.request == 'success' ) reload();
else makeBounce(e.target);
});
}, false);
@ -231,9 +232,9 @@ if( exportInscrits != null ){
if( answer2.request == 'success' ){ // le fichier a bien été généré, on lance le téléchargement
document.location = answer2.pathfile;
reload();
}
}else makeBounce(e.target);
});
}
}else makeBounce(e.target);
});
@ -282,24 +283,31 @@ if( importInscrits != null ){
/* [2] LECTURE DU FICHIER
=======================================*/
var request = { level_0: 'excel', level_1: 'import_inscrits' };
API.send(request, function(e){
console.log('[2] PARSE=>'+e.request);
if( e.request == 'success' ){
API.send(request, function(ex){
console.log('[2] PARSE=>'+ex.request);
if( ex.request == 'success' ){
/* [3] INTÉGRATION À LA BDD
=======================================*/
requestIntegration = { level_0: 'groups', level_1: 'addUserlist', rang: rang, annee: annee, formationList: e.formationList };
requestIntegration = { level_0: 'groups', level_1: 'addUserlist', rang: rang, annee: annee, formationList: ex.formationList };
API.send( requestIntegration, function(f){
console.log('[3] INTEGRATION=>'+f.request);
if( f.request == 'success' ){
console.log('liste intégrée');
reload();
}else console.log('integration error');
}else{
console.log('integration error');
makeBounce(e.target.parentNode);
}
});
}else console.log('import error');
}else{
console.log('import error');
makeBounce(e.target.parentNode);
console.log( e.target );
}
});
}
}else makeBounce(e.target.parentNode);
}

View File

@ -158,13 +158,13 @@ if( importMcc != null ){
if( f.request == 'success' ){
console.log('mcc intégré');
reload();
}
}else makeBounce(e.target);
});
}
}else makeBounce(e.target);
});
}
}else makeBounce(e.target);
}
@ -217,6 +217,7 @@ if( creerSemestre != null ){ // si la page est présente
API.send(request, function(e){
if( e.request == 'success' )
reload();
else makeBounce(e.target);
});
@ -251,6 +252,7 @@ if( cloneMCC != null ){ // si la page est présente
API.send(request, function(e){
if( e.request == 'success' )
reload();
else makeBounce(e.target);
});

View File

@ -138,8 +138,11 @@ if( roleSection != null ){
};
API.send(request, function(answer){
if( answer.request != 'success' ) console.log('erreur de changement de rôle (admin)');
reload();
if( answer.request != 'success' ){
console.log('erreur de changement de rôle (admin)');
makeBounce(e.target);
}else
reload();
});
}
@ -169,8 +172,11 @@ if( roleSection != null ){
};
API.send(request, function(answer){
if( answer.request != 'success' ) console.log('erreur de changement de rôle (référent)');
reload();
if( answer.request != 'success' ){
console.log('erreur de changement de rôle (référent)');
makeBounce(e.target);
}else
reload();
});
}
@ -206,8 +212,11 @@ if( roleSection != null ){
};
API.send(request, function(answer){
if( answer.request != 'success' ) console.log('erreur de changement de rôle');
reload();
if( answer.request != 'success' ){
console.log('erreur de changement de rôle');
makeBounce(e.target);
}else
reload();
});
}
@ -241,8 +250,11 @@ if( roleSection != null ){
};
API.send(request, function(answer){
if( answer.request != 'success' ) console.log('erreur de changement de rôle');
reload();
if( answer.request != 'success' ){
console.log('erreur de changement de rôle');
makeBounce(e.target);
}else
reload();
});
}
@ -273,8 +285,11 @@ if( roleSection != null ){
};
API.send(request, function(answer){
if( answer.request != 'success' ) console.log('erreur de changement de rôle');
reload();
if( answer.request != 'success' ){
console.log('erreur de changement de rôle');
makeBounce(e.target);
}else
reload();
});
}
@ -320,7 +335,7 @@ if( changeYear.select != null && changeYear.button != null ){
if( answer.request == 'success' ){
reload(); // on recharge la page
updateCurrentYear(request.year);
}
}else makeBounce(e.target);
});
}, false);

View File

@ -440,9 +440,9 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif
echo "<td>";
if( $user['note'] != null ) // s'il a déjà une note, on la met par défaut
echo "<input class='saisie_note' data-ctrl='".$answer->controle['id']."' type='text' step='.25' min='0' max='".$answer->controle['base']."' placeholder='Note' value='".$user['note']."'>";
echo "<input class='saisie_note' data-ctrl='".$answer->controle['id']."' type='text' min='0' max='".$answer->controle['base']."' placeholder='Note' value='".$user['note']."'>";
else // sinon on laisse le champ vide
echo "<input class='saisie_note' data-ctrl='".$answer->controle['id']."' type='text' step='.25' min='0' max='".$answer->controle['base']."' placeholder='Note'>";
echo "<input class='saisie_note' data-ctrl='".$answer->controle['id']."' type='text' min='0' max='".$answer->controle['base']."' placeholder='Note'>";
echo "<div class='confirm'>enregistrer</div>";
echo "</td>";
@ -1118,6 +1118,8 @@ if( (permission('master') || permission('admin')) && $etudiantOpt != null ){
////////////////////////////////////////////////////////////////////////////////
echo "<section name='studentcase' data-title='Dossier étudiant' class='basic'>";
// on récupère $semestreOpt original
$semestreOpt = $semestreOptBis;
@ -1142,13 +1144,16 @@ if( (permission('master') || permission('admin')) && $etudiantOpt != null ){
$parcoursChart[$index]['UEs'] = array();
foreach($semestre['UEs'] as $UE){
array_push( $parcoursChart[$index]['UEs'],
array( 'id' => $UE['id'], 'moyenne' => $UE['moyenne'] )
array( 'id' => $UE['id'], 'moyenne' => $UE['moyenne'], 'capitalisation' => !in_array($UE['id'], $semestre['inactive']) )
);
}
}
/* ON GENERE LE <SVG> DU PARCOURS */
displayParcours( $parcoursChart, $semestreOpt);
// echo "<br><div data-etu='".$etudiantOpt."' class='confirm active center' style='background-color:#fff'>Importer le dossier<input type='file' id='import_dossier'></div>";
// pour chaque semestres (tous si aucun semestreOpt, sinon uniquement le selectionné)
foreach($answer->parcours as $semestre){ if( $semestreOpt == null || $semestreOpt == $semestre['id'] ){
@ -1182,21 +1187,31 @@ if( (permission('master') || permission('admin')) && $etudiantOpt != null ){
/* MOYENNE MODULE */
if( is_bool($module['moyenne']) ) // si aucune note pour ce controle on affiche 'Pas de note'
echo "<td colspan=1><span class='link stressed' style='padding:.5em 1em; background:white;'>Pas de moyenne</span></td>";
echo "<td colspan=1><span class='link inactive stressed' style='padding:.5em 1em; background:white;'>Pas de moyenne</span></td>";
else // si une note, alors on l'affiche
echo "<td colspan=1><span class='link ".noteToClass($module['moyenne']['moyenne'], $module['moyenne']['base'])."' style='padding:.5em 1em; background:white;'>Moyenne module: <strong>".number_format($module['moyenne']['moyenne'], 2)." <span class=unstressed>/</span> ".$module['moyenne']['base']."</span></strong></td>";
echo "<td colspan=1><span class='link inactive ".noteToClass($module['moyenne']['moyenne'], $module['moyenne']['base'])."' style='padding:.5em 1em; background:white;'>Moyenne module: <strong>".number_format($module['moyenne']['moyenne'], 2)." <span class=unstressed>/</span> ".$module['moyenne']['base']."</span></strong></td>";
/* MOYENNE UE */
if( is_bool($UE['moyenne']) ) // si aucune note pour cet UE on affiche 'Pas de moyenne'
echo "<td colspan=1><span class='link stressed' style='padding:.5em 1em; background:white;'>Pas de moyenne</span></td>";
else // si un moyenne, alors on l'affiche
echo "<td colspan=1><span class='link ".noteToClass($UE['moyenne']['moyenne'], $UE['moyenne']['base'])."' style='padding:.5em 1em; background:white;'>Moyenne UE: <strong>".number_format($UE['moyenne']['moyenne'], 2)." <span class=unstressed>/</span> ".$UE['moyenne']['base']."</span></strong></td>";
// si UE non inactif dans la capitalisation, on affiche
if( !in_array($UE['id'], $semestre['inactive']) ){
if( is_bool($UE['moyenne']) ) // si aucune note pour cet UE on affiche 'Pas de moyenne'
echo "<td colspan=1><span class='link inactive stressed' style='padding:.5em 1em; background:white;'>Pas de moyenne</span></td>";
else // si un moyenne, alors on l'affiche
echo "<td colspan=1><span class='link inactive ".noteToClass($UE['moyenne']['moyenne'], $UE['moyenne']['base'])."' style='padding:.5em 1em; background:white;'>Moyenne UE: <strong>".number_format($UE['moyenne']['moyenne'], 2)." <span class=unstressed>/</span> ".$UE['moyenne']['base']."</span></strong></td>";
// UE pas utilisé dans la capitalisation, on affiche pas
}else{ // sert de lien pour l'activer dans la capitalisation
echo "<td colspan=1><span class='link capitalisation_ue' data-stre='".$semestre['id']."' data-ue='".$UE['id']."' data-etu='".$etudiantOpt."' style='padding:.5em 1em; background:white;'>Non pris en compte</span></strong></td>";
}
/* MOYENNE SEMESTRE */
if( is_bool($semestre['moyenne']) ) // si aucune note pour ce semestre on affiche 'Pas de moyenne'
echo "<td colspan=1><span class='link stressed' style='padding:.5em 1em; background:white;'>Pas de moyenne</span></td>";
echo "<td colspan=1><span class='link inactive stressed' style='padding:.5em 1em; background:white;'>Pas de moyenne</span></td>";
else // si un moyenne, alors on l'affiche
echo "<td colspan=1><span class='link ".noteToClassSemestre($semestre['moyenne']['moyenne'], $semestre['moyenne']['base'], $semestre['compensable'], $semestre['compensation'])."' style='padding:.5em 1em; background:white;'>Moyenne semestre: <strong>".number_format($semestre['moyenne']['moyenne'], 2)." <span class=unstressed>/</span> ".$semestre['moyenne']['base']."</span></strong></td>";
echo "<td colspan=1><span class='link inactive ".noteToClassSemestre($semestre['moyenne']['moyenne'], $semestre['moyenne']['base'], $semestre['compensable'], $semestre['compensation'])."' style='padding:.5em 1em; background:white;'>Moyenne semestre: <strong>".number_format($semestre['moyenne']['moyenne'], 2)." <span class=unstressed>/</span> ".$semestre['moyenne']['base']."</span></strong></td>";
echo '</tr>';

View File

@ -693,7 +693,6 @@ if( permission('master') || permission('admin') ){
echo "<option value='2'>2</option>";
echo "</select><br>";
// echo "<div data-year='".$anneeOpt."' class='confirm active center'>Importer une liste</div>";
echo "<div data-year='".$anneeOpt."' class='confirm active center'>Importer une liste<input type='file' id='import_inscrits'></div>";

1
page/index.php Executable file
View File

@ -0,0 +1 @@
<?php header('Location: ../index.php'); ?>

BIN
src/files/admin2_export_jury.xlsx Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
src/files/admin2_import_jury.xlsx Executable file

Binary file not shown.

BIN
src/files/admin2_import_mcc.xlsx Executable file

Binary file not shown.

Binary file not shown.

0
src/files/modele_import_notes.xlsx Normal file → Executable file
View File

View File

@ -116,6 +116,10 @@ function displayParcours($parcours, $selected){
}else // si pas de note, on met la couleur par défaut
$themeColor = $normColor;
// si le semestre n'est pas pris en compte dans la capitalisation, on l'affiche en violet
if( !$UE['capitalisation'] )
$themeColor = '#b18cff';
echo "<circle style='cursor:pointer;' onclick=\"document.location='#".$UE['id']."';\" class='semestre_circle' data-stre='".$parcours[$i]['id']."' cx='".($xx)."' cy='".$dot['y']."' r='".(.8*$dot['r'])."' fill='".$themeColor."'/>";
}
}

View File

@ -48,7 +48,23 @@ debug();
// var_dump(DataBase::getInstance()->getSemestreInfoFromTime( strtotime('2017-01-31') ));
// on récupère les année équivalentes (redoublées) pour un semestre
// var_dump( semestreRepo::getRedoublements(252, 'Etud100') );
// 35 = UE1,
// on veut que l'ue d'id 35 compte pour le semestre 252 et que les semestres de même rang et formation soient ignorés
/*******************************************************/
// $request = new stdClass; $answer = new stdClass;
// $request->level_1 = 'capitaliser';
// $request->ue = 37;
// $request->semestre = 276;
// $request->etudiant = 'Etud100';
// careerManager::switch_level_1($request, $answer);
// var_dump( $answer );
/*******************************************************/
var_dump( $_SERVER['HTTP_HOST'] );
// $ts = time();
// $date1 = date('Y-m-d', $ts);
// $date2 = date('Y-m-d', strtotime($date1.' - 1 year'));

Binary file not shown.

Before

Width:  |  Height:  |  Size: 594 KiB

After

Width:  |  Height:  |  Size: 134 KiB

View File

@ -3,7 +3,7 @@
-- http://www.phpmyadmin.net
--
-- Client: localhost
-- Généré le: Ven 08 Janvier 2016 à 10:51
-- Généré le: Ven 08 Janvier 2016 à 23:38
-- Version du serveur: 5.5.46-0ubuntu0.14.04.2
-- Version de PHP: 5.5.9-1ubuntu4.14
@ -32,6 +32,7 @@ CREATE TABLE IF NOT EXISTS `appartenance` (
`id_groupe` int(11) NOT NULL,
`id_semestre` int(11) NOT NULL,
`mention` varchar(3) DEFAULT NULL,
`inactive` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id_appartenance`),
KEY `id_etudiant` (`id_etudiant`),
KEY `id_groupe` (`id_groupe`),
@ -40,7 +41,7 @@ CREATE TABLE IF NOT EXISTS `appartenance` (
KEY `id_etudiant_2` (`id_etudiant`),
KEY `id_groupe_2` (`id_groupe`),
KEY `id_semestre_2` (`id_semestre`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5651 ;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5950 ;
--
-- RELATIONS POUR LA TABLE `appartenance`:
@ -68,7 +69,7 @@ CREATE TABLE IF NOT EXISTS `controle` (
`publication` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id_controle`),
KEY `id_mcc_module` (`id_mcc_module`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1309 ;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1399 ;
--
-- RELATIONS POUR LA TABLE `controle`:
@ -92,7 +93,7 @@ CREATE TABLE IF NOT EXISTS `enseignement` (
KEY `id_enseignant` (`id_enseignant`),
KEY `id_mcc_module` (`id_mcc_module`),
KEY `id_groupe` (`id_groupe`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=229 ;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=243 ;
--
-- RELATIONS POUR LA TABLE `enseignement`:
@ -116,7 +117,7 @@ CREATE TABLE IF NOT EXISTS `formation` (
`nom` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`nb_semestres` int(11) NOT NULL DEFAULT '2',
PRIMARY KEY (`id_formation`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=106 ;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=114 ;
-- --------------------------------------------------------
@ -176,7 +177,6 @@ INSERT INTO `groupe` (`id_groupe`, `nom`) VALUES
(48, 'S7M'),
(49, 'S8M'),
(50, 'S9M'),
(51, 'S10M'),
(52, 'S1G'),
(53, 'S1H'),
(54, 'S1I'),
@ -261,18 +261,6 @@ INSERT INTO `groupe` (`id_groupe`, `nom`) VALUES
(133, 'S9J'),
(134, 'S9K'),
(135, 'S9L'),
(136, 'S10A'),
(137, 'S10B'),
(138, 'S10C'),
(139, 'S10D'),
(140, 'S10E'),
(141, 'S10F'),
(142, 'S10G'),
(143, 'S10H'),
(144, 'S10I'),
(145, 'S10J'),
(146, 'S10K'),
(147, 'S10L'),
(148, 'INGBD1 S2'),
(149, 'INSIQ1 S2'),
(150, 'ITINAS S2'),
@ -280,16 +268,7 @@ INSERT INTO `groupe` (`id_groupe`, `nom`) VALUES
(152, 'ITINN2 S2'),
(153, 'ITINS1 S2'),
(154, 'ITINT2 S2'),
(155, 'ITINT3 S2'),
(156, 'ITINN1 S0'),
(157, 'INGBD1 S10'),
(158, 'INSIQ1 S10'),
(159, 'ITINAS S10'),
(160, 'ITINN1 S10'),
(161, 'ITINN2 S10'),
(162, 'ITINS1 S10'),
(163, 'ITINT2 S10'),
(164, 'ITINT3 S10');
(155, 'ITINT3 S2');
-- --------------------------------------------------------
@ -305,7 +284,7 @@ CREATE TABLE IF NOT EXISTS `mcc_module` (
PRIMARY KEY (`id_mcc_module`),
KEY `id_mcc_ue` (`id_mcc_ue`),
KEY `id_module` (`id_module`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=599 ;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=638 ;
--
-- RELATIONS POUR LA TABLE `mcc_module`:
@ -329,7 +308,7 @@ CREATE TABLE IF NOT EXISTS `mcc_ue` (
PRIMARY KEY (`id_mcc_ue`),
KEY `id_semestre` (`id_semestre`),
KEY `id_ue` (`id_ue`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=93 ;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=99 ;
--
-- RELATIONS POUR LA TABLE `mcc_ue`:
@ -350,7 +329,7 @@ CREATE TABLE IF NOT EXISTS `module` (
`nom` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`libelle` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id_module`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=222 ;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=235 ;
-- --------------------------------------------------------
@ -366,7 +345,7 @@ CREATE TABLE IF NOT EXISTS `note` (
PRIMARY KEY (`id_note`),
KEY `id_appartenance` (`id_appartenance`),
KEY `id_controle` (`id_controle`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=493 ;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=507 ;
--
-- RELATIONS POUR LA TABLE `note`:
@ -390,7 +369,7 @@ CREATE TABLE IF NOT EXISTS `semestre` (
`annee` year(4) NOT NULL,
PRIMARY KEY (`id_semestre`),
KEY `id_formation` (`id_formation`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=249 ;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=267 ;
--
-- RELATIONS POUR LA TABLE `semestre`:
@ -431,7 +410,7 @@ CREATE TABLE IF NOT EXISTS `ue` (
`nom` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`libelle` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id_ue`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=35 ;
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=37 ;
-- --------------------------------------------------------
@ -456,7 +435,7 @@ CREATE TABLE IF NOT EXISTS `utilisateur` (
--
INSERT INTO `utilisateur` (`identifiant`, `prenom`, `nom`, `sexe`, `mail`, `mdp`, `droits`) VALUES
('admin', 'monsieur', 'administrateur', 1, 'admin@iut-tlse3.fr', 'lkjdsqlkjdlqksjdlqksjdqlksdjlqksjdqj', 'teacher,admin'),
('admin', 'monsieur', 'administrateur', 1, 'admin@iut-tlse3.fr', 'lkjdsqlkjdlqksjdlqksjdqlksdjlqksjdqj', 'admin'),
('admin2', 'madame', 'administratrice', 0, 'mme.admin@iut-tlse3.fr', 'lkjdsqlkjdlqksjdlqksjdqlksdjlqksjdqj', 'admin'),
('lbh1609a', 'Hervé', 'LEBLANC', 1, 'herve.leblanc@iut-tlse3.fr', 'lqkjsdlkjsdlkjqsdlkjqsdlkjqsdkjqsldjqsj', 'teacher'),
('ref', 'mlle', 'référente', 0, 'ref@ref.ref', 'sqldkmsqldksqmlkd', 'master');

0
xdoc/git.graph Normal file → Executable file
View File