[x] Ajout de la colonne "mention" à la table "appartenance" dans la BDD qui contiendra la mention jury du semestre
[x] Gestion des mentions Jury ADM => Passage de semestre ADJ => Passage de semestre RDB => redoublement si fin d'année RFS => recalé [x] Passage de semestre + Trouver le semestre suivant + si n'existe pas, on le crée + on ajoute une appartenance avec l'étudiant [x] Redoublement si fin d'année + Trouver le semestre 2 fois précédent + si n'existe pas, on le crée + on ajoute une appartenance avec l'étudiant
This commit is contained in:
parent
9f1d953fbb
commit
28623c1c47
|
@ -637,6 +637,68 @@ class DataBase{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Applique la mention du jury à un étudiant d'un semestre
|
||||||
|
*
|
||||||
|
* @etudiant<String> UID de l'étudiant en question
|
||||||
|
* @semestre<int> UID du semestre courant de l'étudiant
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @return state<String> SUCCESS => changement effectué
|
||||||
|
* OU fin de formation
|
||||||
|
* * => ERREUR
|
||||||
|
*
|
||||||
|
* @history
|
||||||
|
* 1. ADM/ADJ => passage de semestre
|
||||||
|
* 2. RDB => Redoublement
|
||||||
|
* 3. RFS => Arrêt
|
||||||
|
*/
|
||||||
|
public function applyJuryTo($etudiant, $semestre, $mention){
|
||||||
|
|
||||||
|
// on vérifie que le semestre et que l'étudiant existent
|
||||||
|
if( !($semestreInfo=semestreRepo::info($semestre)) ) return 'unknown_semestre';
|
||||||
|
if( !($etudiantUID=userRepo::UID($etudiant, $semestre)) ) return 'unknown_user';
|
||||||
|
|
||||||
|
// on vérifie que la mention est correcte
|
||||||
|
if( !in_array($mention, array('ADM', 'ADJ', 'RDB', 'RFS')) ) return 'unknown_mention';
|
||||||
|
|
||||||
|
/* [1] On définit la mention pour l'utilisateur à ce semestre
|
||||||
|
======================================================*/
|
||||||
|
groupRepo::setMention($etudiantUID, $semestre, $mention);
|
||||||
|
|
||||||
|
/* [2] Gestion du passage de l'étudiant
|
||||||
|
======================================================*/
|
||||||
|
// si ADM/ADJ ou RDB (redoublement) et semestre impair, passage
|
||||||
|
if( in_array($mention, array('ADM', 'ADJ')) || $mention == 'RDB' && $semestreInfo['rang']%2==1 ){
|
||||||
|
/* (1) On récupère le semestre suivant s'il existe */
|
||||||
|
$nextSemestre = semestreRepo::next($semestre);
|
||||||
|
|
||||||
|
/* (2) Si le semestre n'existe pas, on le créé */
|
||||||
|
if( is_array($nextSemestre) )
|
||||||
|
$nextSemestre = semestreRepo::creer($semestreInfo['formation'], $semestreInfo['nom_formation'], null, $nextSemestre['rang'], $nextSemestre['annee']);
|
||||||
|
|
||||||
|
/* (3) On créé l'appartenance */
|
||||||
|
$appartenanceUID = groupRepo::includeAppartenance($etudiant, $nextSemestre);
|
||||||
|
|
||||||
|
/* [3] Gestion du redoublement (début année), rang-2
|
||||||
|
======================================================*/
|
||||||
|
}elseif( $mention == 'RDB' ){
|
||||||
|
/* (1) On récupère le semestre 2 fois précédent */
|
||||||
|
$rdbSemestre = semestreRepo::prev2($semestre);
|
||||||
|
|
||||||
|
/* (2) Si le semestre n'existe pas, on le créé */
|
||||||
|
if( is_array($rdbSemestre) )
|
||||||
|
$rdbSemestre = semestreRepo::creer($semestreInfo['formation'], $semestreInfo['nom_formation'], null, $rdbSemestre['rang'], $rdbSemestre['annee']);
|
||||||
|
|
||||||
|
/* (3) On créé l'appartenance */
|
||||||
|
$appartenanceUID = groupRepo::includeAppartenance($etudiant, $rdbSemestre);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( isset($nextSemestre) ) var_dump('nxt: '.$nextSemestre);
|
||||||
|
if( isset($rdbSemestre) ) var_dump('rdb: '.$rdbSemestre);
|
||||||
|
if( isset($appartenanceUID) ) var_dump('app: '.$appartenanceUID);
|
||||||
|
return 'success';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,24 @@ class groupRepo{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* DEFINIT LA MENTION DU JURY POUR UNE APPARTENANCE
|
||||||
|
*
|
||||||
|
* @etudiant<String> UID de l'étudiant en question
|
||||||
|
* @semestre<int> UID du semestre en question
|
||||||
|
* @mention<String> Mention à affecter à l'appartenance
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function setMention($etudiant, $semestre, $mention){
|
||||||
|
$setMention = DataBase::getPDO()->prepare("UPDATE appartenance
|
||||||
|
SET mention = :mention
|
||||||
|
WHERE id_etudiant = :etudiant
|
||||||
|
AND id_semestre = :semestre");
|
||||||
|
$setMention->execute(array( ':mention' => $mention, ':etudiant' => $etudiant, ':semestre' => $semestre ));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* RETOURNE LA LISTE DES UTILISATEURS MEMBRES D'UN GROUPE
|
/* RETOURNE LA LISTE DES UTILISATEURS MEMBRES D'UN GROUPE
|
||||||
*
|
*
|
||||||
* @groupeUID<int> l'UID du groupe en question
|
* @groupeUID<int> l'UID du groupe en question
|
||||||
|
@ -480,8 +498,8 @@ class groupRepo{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$creerAppartenance = DataBase::getPDO()->prepare("INSERT INTO appartenance(id_appartenance, id_etudiant, id_groupe, id_semestre)
|
$creerAppartenance = DataBase::getPDO()->prepare("INSERT INTO appartenance(id_appartenance, id_etudiant, id_groupe, id_semestre, mention)
|
||||||
VALUES(DEFAULT, :identifiant, :groupeUID, :semestre)");
|
VALUES(DEFAULT, :identifiant, :groupeUID, :semestre, DEFAULT)");
|
||||||
$creerAppartenance->execute(array(
|
$creerAppartenance->execute(array(
|
||||||
':identifiant' => $identifiant,
|
':identifiant' => $identifiant,
|
||||||
':groupeUID' => $groupeUID,
|
':groupeUID' => $groupeUID,
|
||||||
|
@ -496,7 +514,7 @@ class groupRepo{
|
||||||
AND id_semestre = :semestre");
|
AND id_semestre = :semestre");
|
||||||
$getAppartenanceUID->execute(array( ':identifiant' => $identifiant, ':semestre' => $semestre ));
|
$getAppartenanceUID->execute(array( ':identifiant' => $identifiant, ':semestre' => $semestre ));
|
||||||
|
|
||||||
return $appartenanceUID = $getAppartenanceUID->fetch()['id'];
|
return $getAppartenanceUID->fetch()['id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -366,6 +366,9 @@ class semestreRepo{
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static function creer($codeFormation, $nomFormation, $nomSemestre, $rangSemestre, $annee){
|
public static function creer($codeFormation, $nomFormation, $nomSemestre, $rangSemestre, $annee){
|
||||||
|
if( $nomSemestre == null ) // si le nom n'est pas défini, on met "S" collé au rang
|
||||||
|
$nomSemestre = 'S'.$rangSemestre;
|
||||||
|
|
||||||
$count = 0; $maxLoop = 2;
|
$count = 0; $maxLoop = 2;
|
||||||
|
|
||||||
/* [1] On vérifie l'existence de la formation (code uniquement)
|
/* [1] On vérifie l'existence de la formation (code uniquement)
|
||||||
|
@ -444,4 +447,125 @@ class semestreRepo{
|
||||||
return DataBase::delNumeric( $getLastMccYear->fetch(), true );
|
return DataBase::delNumeric( $getLastMccYear->fetch(), true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* RETOURNE LE SEMESTRE SUIVANT UN SEMESTRE
|
||||||
|
*
|
||||||
|
* @semestre<int> UID du semestre source
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @return next_semestre<int> Retourne l'UID du semestre de destination
|
||||||
|
* Retourne NULL si c'est le dernier semestre de la formation
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function next($semestreUID){
|
||||||
|
/* [1] On récupère les informations du semestre
|
||||||
|
=====================================================*/
|
||||||
|
$getSemestreInfo = DataBase::getPDO()->prepare("SELECT id_semestre, rang, id_formation, annee
|
||||||
|
FROM semestre
|
||||||
|
WHERE id_semestre = :semestreUID");
|
||||||
|
$getSemestreInfo->execute(array( ':semestreUID' => $semestreUID ));
|
||||||
|
|
||||||
|
// si le semestre n'existe pas, on retourne une erreur
|
||||||
|
if( !($semestre=$getSemestreInfo->fetch()) ) return 'unknown_semestre';
|
||||||
|
|
||||||
|
/* [2] On calcule le rang+annee du semestre suivant
|
||||||
|
=====================================================*/
|
||||||
|
$next = array(
|
||||||
|
'rang' => $semestre['rang']+1, // on incrémente le rang
|
||||||
|
'annee' => ($semestre['rang']%2==0) ? $semestre['annee']+1 : $semestre['annee']
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] On récupère le nombre de semestres max de la formation
|
||||||
|
=====================================================*/
|
||||||
|
$getNbSemestreFormation = DataBase::getPDO()->prepare("SELECT nb_semestres
|
||||||
|
FROM formation
|
||||||
|
WHERE id_formation = :last_formation");
|
||||||
|
$getNbSemestreFormation->execute(array( ':last_formation' => $semestre['id_formation'] ));
|
||||||
|
$nbSemestres = $getNbSemestreFormation->fetch()['nb_semestres'];
|
||||||
|
|
||||||
|
// si c'était le dernier semestre, on retourne null
|
||||||
|
if( $semestre['rang'] == $nbSemestres ) return null;
|
||||||
|
|
||||||
|
/* [3] On cherche le semestre suivant
|
||||||
|
=====================================================*/
|
||||||
|
$req = DataBase::getPDO()->prepare("SELECT id_semestre
|
||||||
|
FROM semestre
|
||||||
|
WHERE id_formation = :id_formation
|
||||||
|
AND rang = :next_rang
|
||||||
|
AND annee = :next_annee
|
||||||
|
");
|
||||||
|
$req->execute(array(
|
||||||
|
':id_formation' => $semestre['id_formation'],
|
||||||
|
':next_rang' => $next['rang'],
|
||||||
|
':next_annee' => $next['annee']
|
||||||
|
));
|
||||||
|
|
||||||
|
$nextSemestres = DataBase::delNumeric( $req->fetchAll() );
|
||||||
|
|
||||||
|
/* [4] On retourne l'UID du semestre concerné
|
||||||
|
=====================================================*/
|
||||||
|
if( count($nextSemestres) > 0 ) // si au moins un semestre, on retourne le premier
|
||||||
|
return $nextSemestres[0]['id_semestre'];
|
||||||
|
else // si aucun semestre trouvé, il faut le créer, on retourne le rang et l'année de destination
|
||||||
|
return $next;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* RETOURNE LE SEMESTRE 2 FOIS PRÉCÉDENT UN SEMESTRE
|
||||||
|
*
|
||||||
|
* @semestre<int> UID du semestre source
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @return prev2_semestre<int> Retourne l'UID du semestre de destination
|
||||||
|
* Retourne NULL si le semestre destination n'existe pas
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function prev2($semestreUID){
|
||||||
|
/* [1] On récupère les informations du semestre
|
||||||
|
=====================================================*/
|
||||||
|
$getSemestreInfo = DataBase::getPDO()->prepare("SELECT id_semestre, rang, id_formation, annee
|
||||||
|
FROM semestre
|
||||||
|
WHERE id_semestre = :semestreUID");
|
||||||
|
$getSemestreInfo->execute(array( ':semestreUID' => $semestreUID ));
|
||||||
|
|
||||||
|
// si le semestre n'existe pas, on retourne une erreur
|
||||||
|
if( !($semestre=$getSemestreInfo->fetch()) ) return 'unknown_semestre';
|
||||||
|
|
||||||
|
// si le rang est impair, on retourne une erreur
|
||||||
|
if( $semestre['rang']%2==1 ) return 'not_even_rang';
|
||||||
|
|
||||||
|
/* [2] On calcule le rang+annee du semestre suivant
|
||||||
|
=====================================================*/
|
||||||
|
$prev2 = array(
|
||||||
|
'rang' => $semestre['rang']-2, // on décrémente 2 fois le rang
|
||||||
|
'annee' => $semestre['annee']+1 // on incrémente l'année
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] On cherche le semestre suivant
|
||||||
|
=====================================================*/
|
||||||
|
$req = DataBase::getPDO()->prepare("SELECT id_semestre
|
||||||
|
FROM semestre
|
||||||
|
WHERE id_formation = :id_formation
|
||||||
|
AND rang = :prev2_rang
|
||||||
|
AND annee = :prev2_annee
|
||||||
|
");
|
||||||
|
$req->execute(array(
|
||||||
|
':id_formation' => $semestre['id_formation'],
|
||||||
|
':prev2_rang' => $prev2['rang'],
|
||||||
|
':prev2_annee' => $prev2['annee']
|
||||||
|
));
|
||||||
|
|
||||||
|
$prev2Semestres = DataBase::delNumeric( $req->fetchAll() );
|
||||||
|
|
||||||
|
/* [4] On retourne l'UID du semestre concerné
|
||||||
|
=====================================================*/
|
||||||
|
if( count($prev2Semestres) > 0 ) // si au moins un semestre, on retourne le premier
|
||||||
|
return $prev2Semestres[0]['id_semestre'];
|
||||||
|
else // si aucun semestre trouvé, il faut le créer, on retourne le rang et l'année de destination
|
||||||
|
return $prev2;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
27
test.php
27
test.php
|
@ -46,30 +46,11 @@ require_once __ROOT__.'/manager/security.php';
|
||||||
|
|
||||||
debug();
|
debug();
|
||||||
|
|
||||||
/* [1] On récupère le semestre d'un étudiant */
|
|
||||||
$semestre = DataBase::studentSemestre('Etud100', false, 2015);
|
|
||||||
var_dump($semestre);
|
|
||||||
|
|
||||||
/* [2] On cherche le semestre suivant */
|
/* [1] On récupère le semestre d'un étudiant
|
||||||
$req = DataBase::getPDO()->prepare("SELECT s.*
|
=====================================================*/
|
||||||
FROM semestre as s
|
// var_dump( DataBase::getInstance()->applyJuryTo('Etud100', 37, 'RDB') );
|
||||||
WHERE s.id_formation = :id_formation
|
var_dump( DataBase::getInstance()->applyJuryTo('Etud100', 67, 'RDB') );
|
||||||
AND s.rang > :last_rang
|
|
||||||
AND
|
|
||||||
");
|
|
||||||
$req->execute(array(
|
|
||||||
':id_formation' => $semestre['id_formation'],
|
|
||||||
':last_rang' => $semestre['rang']
|
|
||||||
));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************/
|
|
||||||
/* CONCEPTION DE PASSAGE */
|
|
||||||
/*************************/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue