[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:
xdrm-brackets 2016-01-03 00:59:18 +01:00
parent 9f1d953fbb
commit 28623c1c47
4 changed files with 211 additions and 26 deletions

View File

@ -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';
}

View File

@ -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'];
} }

View File

@ -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;
}
} }

View File

@ -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 */
/*************************/