[x] Clonage d'un MCC

+ On récupère la dernière année ayant des MCC (au moins un UE)
	+ On clone les semestres
		+ On clone les mcc_ue
			+ On clone les mcc_modules
				+ On duplique les contrôles
This commit is contained in:
xdrm-brackets 2016-01-02 15:55:25 +01:00
parent 5a2d1359b9
commit e25aa52d96
7 changed files with 148 additions and 6 deletions

View File

@ -265,9 +265,9 @@ class careerManager{
/**********************/
/* intégration du MCC */
/**********************/
/***********************/
/* intégration des MCC */
/***********************/
case 'setMCC': if( permission('admin') ){
@ -283,6 +283,23 @@ class careerManager{
/*******************/
/* clonage des MCC */
/*******************/
case 'cloneMCC': if( permission('admin') ){
if( isset($request->annee) && checkParam($request->annee, 'semestre.annee') ){ // si tout les paramètres sont bons
$answer->request = DataBase::getInstance()->cloneMCC($request->annee);
}else
$answer->request = 'param_error';
}else
$answer->request = 'permission_error';
break;

View File

@ -151,6 +151,64 @@ class DataBase{
}
/* clone les MCC de la dernière année à l'année donnée
*
* @annee<int> L'année de destination
*
* @return status<String> "success" si tout s'est bien passé, sinon code erreur
*
*/
public function cloneMCC($annee){
// on récupère la dernière année à être référencée, si aucun résultat, on retourne une erreur
if( !($srcYear=semestreRepo::getLastMCCYear()['annee']) ) return 'no_mcc_found';
// année de destination
$dstYear = $annee;
/* [1] Pour chaque SEMESTRE de l'année
============================================*/
$listSemestre = semestreRepo::forYear($srcYear);
foreach($listSemestre as $SEMESTRE){
// on clone le semestre pour la nouvelle année
$newSemestreUID = semestreRepo::creer($SEMESTRE['formation'], $SEMESTRE['nom_formation'], $SEMESTRE['nom'], $SEMESTRE['rang'], $dstYear);
/* [2] Pour chaque UE de ce semestre
============================================*/
$listUE = ueRepo::forYear($SEMESTRE['id']);
foreach($listUE as $UE){
// on clone le mcc_ue mais pour le nouveau semestre
$newUEUID = ueRepo::forMCC($newSemestreUID, $UE['nom'], $UE['libelle'], $UE['coefficient']);
/* [3] Pour chaque MODULE de cet UE
============================================*/
$listModule = moduleRepo::forYear($UE['id'], $SEMESTRE['id']);
foreach($listModule as $MODULE){
// on clone le mcc_module mais pour le nouvel mcc_ue
$newModuleUID = moduleRepo::forMCC($newUEUID, $MODULE['nom'], $MODULE['libelle'], $MODULE['coefficient']);
/* [4] Pour chaque CONTRÔLE de ce module
============================================*/
$listControle = controleRepo::forYear($MODULE['id'], $SEMESTRE['id']);
foreach($listControle as $CONTROLE){
// on duplique le contrôle mais pour le nouveau mcc_module
$newControleUID = controleRepo::forMCC($newModuleUID, $CONTROLE['nom'], $CONTROLE['libelle'], $CONTROLE['coefficient']);
}
}
}
}
// tout s'est bien déroulé si on est arrivé jusque là
return 'success';
}

View File

@ -241,7 +241,7 @@ class controleRepo{
}
// on retourne enfin l'UID du mcc_ue en question
// on retourne enfin l'UID du contrôle en question
return $controleUID;
}

View File

@ -430,4 +430,18 @@ class semestreRepo{
}
/* RETOURNE LA DERNIERE ANNEE AYANT UN MCC
*
* @return annee<int> Retourne l'année en question
*
*/
public static function getLastMCCYear(){
$getLastMccYear = DataBase::getPDO()->query("SELECT DISTINCT max(s.annee) as annee
FROM semestre as s, mcc_ue
GROUP BY s.annee");
return $getLastMccYear->fetch();
}
}

View File

@ -226,4 +226,38 @@ if( creerSemestre != null ){ // si la page est présente
/*****************************/
/* GESTION DU CLONAGE DE MCC */
/*****************************/
var cloneMCC = document.querySelector('#clone_mcc[data-year]');
if( cloneMCC != null ){ // si la page est présente
cloneMCC.addEventListener('click', function(e){
addClass( cloneMCC, 'loading' );
// année de destination
var fAnnee = cloneMCC.dataset.year;
var request = {
level_0: 'career',
level_1: 'cloneMCC',
annee: fAnnee,
}
API.send(request, function(e){
if( e.request == 'success' )
reload();
});
}, false);
}
-->

View File

@ -764,6 +764,26 @@ if( permission('admin') ){
}
if( permission('admin') ){
// on définit correctement l'année
if( $anneeOpt == null || $anneeOpt < $_SESSION['annee'] || $anneeOpt > $_SESSION['annee']+5 ) $anneeOpt = $_SESSION['annee'];
echo "<section name='clonemcc' data-title='Cloner les MCC'>";
echo "<div class='p center'>";
echo "<br>Clonage des MCC de la dernière année pour l'année suivante<br>";
echo "<div class='confirm active center' id='clone_mcc' data-year='".($_SESSION['annee']+1)."'>Cloner pour " .($_SESSION['annee']+1). "</div>";
echo "</div>";
echo "</section>";
}
?>

View File

@ -45,8 +45,7 @@ require_once __ROOT__.'/manager/security.php';
debug();
$_SESSION['semestre'] = 37;
var_dump( $_SESSION );
var_dump( semestreRepo::getLastMCCYear() );
// [1] On récupère tous les UE d'un étudiant
// $uelist = DataBase::getInstance()->getUEsEtudiant('mrd1609a', 16, 2015);