Saisie note individuelle OP
This commit is contained in:
parent
f5ae82feba
commit
97bc41d54e
|
@ -128,26 +128,13 @@ require_once __ROOT__.'/manager/database.php';
|
|||
/****************************************************/
|
||||
case 'saisieNote': if( permission('teacher') ){
|
||||
|
||||
$areSetParam = isset($request->etudiant) && isset($request->controle); // les arguments existent
|
||||
$typeOkParam = $areSetParam && is_string($request->enseignant); // si c'est des strings
|
||||
$nEmptyParam = $typeOkParam && strlen($request->enseignant) > 0 && is_numeric($request->controle); // des bon types
|
||||
$enseignantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->enseignant); // nom bon format
|
||||
|
||||
// paramètre optionnel
|
||||
$optionalGroupe = isset($request->groupe) && is_string($request->groupe) && strlen($request->groupe) > 1 && preg_match('/^[a-z0-9 -]{1,10}$/i', $request->groupe);
|
||||
|
||||
// définition (ou pas) du paramètre optionnel
|
||||
if( $optionalGroupe ) $groupe = $request->groupe;
|
||||
else $groupe = null;
|
||||
$areSetParam = isset($request->etudiant) && isset($request->controle) && isset($request->note); // les arguments existent
|
||||
$typeOkParam = $areSetParam && is_string($request->etudiant); // si c'est des strings
|
||||
$nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && is_numeric($request->controle) && is_numeric($request->note); // des bon types
|
||||
$etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->etudiant); // nom bon format
|
||||
|
||||
if( $enseignantCheck ){ // si tout les paramètres sont bons
|
||||
$controle = DataBase::getInstance()->getNotesEnseignant($request->enseignant, $_SESSION['semestre_pair'], $_SESSION['annee'], $request->controle, $groupe);
|
||||
|
||||
if( is_array($controle) ){ // si on a bien un tableau
|
||||
$answer->controle = $controle; // on renvoie dans answer->controle
|
||||
$answer->request = 'success'; // et on renvoie success
|
||||
}else // sinon si c'est pas un tableau
|
||||
$answer->request = $controle; // on retourne l'erreur
|
||||
if( $etudiantCheck ){ // si tout les paramètres sont bons
|
||||
$answer->request = DataBase::getInstance()->saisieNote($request->etudiant, $request->controle, $request->note);
|
||||
}else
|
||||
$answer->request = 'param_error';
|
||||
|
||||
|
|
|
@ -686,136 +686,23 @@ class DataBase{
|
|||
}
|
||||
|
||||
|
||||
/******************************************/
|
||||
/*** saisie note étudiant à un contrôle ***/
|
||||
/******************************************/
|
||||
public function saisieNote($etudiant, $controle, $note){
|
||||
// on vérifie l'existence de l'étudiant et du contrôle, ainsi que la cohérence de la note (pas supérieure à la base)
|
||||
if( !($etudiantUID=userRepo::UID($etudiant)) ) return 'unknown_user';
|
||||
if( !($controleInfo=controleRepo::info($controle)) ) return 'unknown_controle';
|
||||
if( $note > $controleInfo['base'] ) return 'unknown_note';
|
||||
|
||||
|
||||
|
||||
/**************************************/
|
||||
/*** retourne les notes d'un module ***/
|
||||
/**************************************/
|
||||
public function getModuleNotes($etudiant, $module, $semestre, $annee){
|
||||
// on vérifie que le module, le semestre existent et que l'étudiant est inscrit à ce semestre
|
||||
if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID;
|
||||
if( !($etudiantUID=userRepo::UID($etudiant, $semestreUID)) ) return 'unknown_user';
|
||||
if( !($moduleUID=moduleRepo::UID($module)) ) return 'unknown_module';
|
||||
|
||||
|
||||
/*** on cherche un module avec ce nom, en accord avec le semestre et l'étudiant ***/
|
||||
$getModuleUID = DataBase::getPDO()->prepare("SELECT m.id_module as id FROM module as m, appartenance as app, ue, mcc_ue, mcc_module as mcc_m ".
|
||||
"WHERE app.id_etudiant = :etudiantUID ".
|
||||
|
||||
"AND mcc_ue.id_ue = ue.id_ue ".
|
||||
"AND mcc_ue.id_semestre = app.id_semestre ".
|
||||
"AND mcc_ue.id_semestre = :semestreUID ".
|
||||
|
||||
"AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ".
|
||||
|
||||
"AND mcc_m.id_module = m.id_module ".
|
||||
|
||||
"AND m.nom = :module ");
|
||||
$getModuleUID->execute(array(
|
||||
':module' => $module,
|
||||
':etudiantUID' => $etudiantUID,
|
||||
':semestreUID' => $semestreUID
|
||||
));
|
||||
|
||||
// si on trouve, on le définit, sinon on retourne "unknown_group"
|
||||
if( $moduleUID = $getModuleUID->fetch()['id'] )
|
||||
$moduleUID = (int) $moduleUID;
|
||||
// saisie de la note
|
||||
$rep = noteRepo::creer($etudiantUID, $controleInfo['id'], $controleInfo['id_semestre'], $note);
|
||||
|
||||
if( $rep )
|
||||
return 'success';
|
||||
else
|
||||
return 'unknown_module';
|
||||
return 'error';
|
||||
|
||||
|
||||
|
||||
$EtudiantInscritAuModule = false; // par défaut on dit que l'étudiant n'est pas inscrit à ce module
|
||||
foreach(moduleRepo::forStudent($etudiant, $semestreUID) as $module ) // on récupère parmi les modules auquel est inscrit l'utilisateur
|
||||
if( $module['id'] == $moduleUID ){ // s'il est inscrit au module donné
|
||||
$EtudiantInscritAuModule = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// si l'étudiant n'a pas ce module dans ceux auxquels il est inscrit
|
||||
if( !$EtudiantInscritAuModule ) return 'unknown_module';
|
||||
|
||||
|
||||
// si on a l'UID utilisateur & l'UID groupe => on récupère les modules
|
||||
$getNoteList = DataBase::getPDO()->prepare("SELECT m.nom as module, m.libelle as modulelib, ctrl.intitule, note.valeur, ctrl.base, ctrl.coefficient ".
|
||||
"FROM note, appartenance as app, semestre as s, module as m, mcc_ue, mcc_module as mcc_m, controle as ctrl ".
|
||||
"WHERE note.id_appartenance = app.id_appartenance ".
|
||||
"AND ctrl.id_controle = note.id_controle ".
|
||||
"AND ctrl.id_mcc_module = mcc_m.id_mcc_module ".
|
||||
|
||||
"AND mcc_ue.id_semestre = app.id_semestre ".
|
||||
"AND mcc_ue.id_semestre = s.id_semestre ".
|
||||
|
||||
"AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ".
|
||||
|
||||
"AND mcc_m.id_module = m.id_module ".
|
||||
|
||||
"AND m.id_module = :moduleUID ".
|
||||
"AND app.id_etudiant = :etudiantUID ".
|
||||
"AND s.id_semestre = :semestreUID ".
|
||||
"ORDER BY ctrl.date_publication ASC");
|
||||
$getNoteList->execute(array(
|
||||
':moduleUID' => $moduleUID,
|
||||
':etudiantUID' => $etudiantUID,
|
||||
':semestreUID' => $semestreUID
|
||||
));
|
||||
|
||||
// on retourne la liste des notes et supprime les doublons à indices numériques
|
||||
return DataBase::delNumeric( $getNoteList->fetchAll() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**********************************/
|
||||
/*** retourne les notes d'un UE ***/
|
||||
/**********************************/
|
||||
public function getUENotes($etudiant, $UE, $semestre, $annee){
|
||||
// on vérifie que l'UE, le semestre existent et que l'étudiant est inscrit à ce semestre
|
||||
if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID;
|
||||
if( !($etudiantUID=userRepo::UID($etudiant, $semestreUID)) ) return 'unknown_user';
|
||||
if( !($UEUID=ueRepo::UID($UE)) ) return 'unknown_ue';
|
||||
|
||||
|
||||
$EtudiantInscritAlUE = false; // par défaut on dit que l'étudiant n'est pas inscrit à cet UE
|
||||
foreach(ueRepo::forStudent($etudiant, $semestreUID) as $UE ) // on récupère parmi les UEs auquel est inscrit l'utilisateur
|
||||
if( $UE['id'] == $UEUID ){ // s'il est inscrit à l'UE donnée
|
||||
$EtudiantInscritAlUE = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// si l'étudiant n'a pas ce module dans ceux auxquels il est inscrit
|
||||
if( !$EtudiantInscritAlUE ) return 'unknown_module';
|
||||
|
||||
// si on a l'UID utilisateur & l'UID UE => on récupère les notes
|
||||
$getNoteList = DataBase::getPDO()->prepare("SELECT m.nom as module, m.libelle as modulelib, ctrl.intitule, note.valeur, ctrl.base, ctrl.coefficient ".
|
||||
"FROM note, appartenance as app, semestre as s, module as m, ue, mcc_ue, mcc_module as mcc_m, controle as ctrl ".
|
||||
"WHERE note.id_appartenance = app.id_appartenance ".
|
||||
"AND ctrl.id_mcc_module = mcc_m.id_mcc_module ".
|
||||
"AND ctrl.id_controle = note.id_controle ".
|
||||
|
||||
"AND mcc_ue.id_ue = ue.id_ue ".
|
||||
"AND mcc_ue.id_semestre = app.id_semestre ".
|
||||
"AND mcc_ue.id_semestre = s.id_semestre ".
|
||||
|
||||
"AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue ".
|
||||
|
||||
"AND mcc_m.id_module = m.id_module ".
|
||||
|
||||
"AND ue.id_ue = :UEUID ".
|
||||
"AND app.id_etudiant = :etudiantUID ".
|
||||
"AND s.id_semestre = :semestreUID ".
|
||||
"ORDER BY m.nom, ctrl.date_publication ASC");
|
||||
$getNoteList->execute(array(
|
||||
':UEUID' => $UEUID,
|
||||
':etudiantUID' => $etudiantUID,
|
||||
':semestreUID' => $semestreUID
|
||||
));
|
||||
|
||||
// on retourne la liste de notes et supprime les doublons à indices numériques
|
||||
return DataBase::delNumeric( $getNoteList->fetchAll() );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -15,47 +15,22 @@ class noteRepo extends DBAccess{
|
|||
* @etudiant<String> l'identifiant de l'étudiant recherché
|
||||
* @controle<int> l'UID du contrôle
|
||||
*
|
||||
* @return UID<String> si l'utilisateur est dans la BDD, retourne son UID
|
||||
* @return FALSE<Boolean> FAUX si l'utilisateur n'est pas présent dans la BDD
|
||||
* @return UID<String> l'UID de la note si elle existe pour ces critères
|
||||
* @return FALSE<Boolean> FAUX si aucune note répondant à ces critères n'est pas présente dans la BDD
|
||||
*
|
||||
*/
|
||||
public static function UID($identifiant, $semestre=null, $annee=null){
|
||||
if( $semestre == null && $annee == null ){ // on cherche un utilisateur avec cet identifiant
|
||||
|
||||
/* [1] Cas où on cherche juste si l'utilisateur existe
|
||||
=============================================================*/
|
||||
$getUtilisateurUID = DataBase::getPDO()->prepare("SELECT identifiant as id FROM utilisateur WHERE identifiant = :identifiant");
|
||||
$getUtilisateurUID->execute(array( ':identifiant' => $identifiant ));
|
||||
|
||||
}elseif( $semestre != null ){
|
||||
|
||||
/* [2] Cas où on cherche si un étudiant est inscrit à un semestre
|
||||
==============================================================*/
|
||||
$getUtilisateurUID = DataBase::getPDO()->prepare("SELECT u.identifiant as id ".
|
||||
"FROM utilisateur as u, appartenance as app ".
|
||||
"WHERE u.identifiant = app.id_etudiant ".
|
||||
"AND u.identifiant = :identifiant ".
|
||||
"AND app.id_semestre = :semestre");
|
||||
$getUtilisateurUID->execute(array( ':identifiant' => $identifiant, ':semestre' => $semestre ));
|
||||
public static function UID($etudiant, $controle){
|
||||
$getNoteUID = DataBase::getPDO()->prepare("SELECT note.id_note as id ".
|
||||
"FROM appartenance as app, note, controle as ctrl ".
|
||||
"WHERE app.id_appartenance = note.id_appartenance ".
|
||||
"AND ctrl.id_controle = note.id_controle ".
|
||||
|
||||
}else{
|
||||
|
||||
/* [2] Cas où on cherche si un enseignant enseigne l'année donnée
|
||||
==============================================================*/
|
||||
$getUtilisateurUID = DataBase::getPDO()->prepare("SELECT DISTINCT u.identifiant as id ".
|
||||
"FROM utilisateur as u, enseignement as ens, semestre as s, mcc_module as mcc_m, mcc_ue ".
|
||||
"WHERE u.identifiant = ens.id_enseignant ".
|
||||
"AND ens.id_mcc_module = mcc_m.id_mcc_module ".
|
||||
"AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue ".
|
||||
"AND mcc_ue.id_semestre = s.id_semestre ".
|
||||
"AND s.annee = :annee ".
|
||||
"AND u.identifiant = :identifiant");
|
||||
$getUtilisateurUID->execute(array( ':identifiant' => $identifiant, ':annee' => $annee ));
|
||||
|
||||
}
|
||||
"AND app.id_etudiant = :etudiant ".
|
||||
"AND ctrl.id_controle = :controle");
|
||||
$getNoteUID->execute(array( ':etudiant' => $etudiant, ':controle' => $controle ));
|
||||
|
||||
// on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID de l'utilisateur
|
||||
return $getUtilisateurUID->fetch()['id'];
|
||||
return $getNoteUID->fetch()['id'];
|
||||
}
|
||||
|
||||
|
||||
|
@ -178,4 +153,56 @@ class noteRepo extends DBAccess{
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* CRÉATION/MODIFICATION D'UNE NOTE POUR UN ETUDIANT À UN CONTRÔLE
|
||||
*
|
||||
* @etudiant<String> l'UID de l'étudiant en question
|
||||
* @controle<int> l'UID du contrôle en question
|
||||
* @semestre<int> l'UID du semestre en question
|
||||
* @valeur<number> valeur de la note à saisir
|
||||
*
|
||||
*
|
||||
* @return noteUID<int> l'UID de la note si elle a bien été créé
|
||||
* @return cree<Boolean> FALSE si la note n'a pas été créé
|
||||
*
|
||||
*/
|
||||
public static function creer($etudiant, $controle, $semestre, $valeur){
|
||||
/* [1] Premier cas : il faut créer la note de cet étudiant pour ce contrôle
|
||||
============================================================================*/
|
||||
if( !($noteUID=noteRepo::UID($etudiant, $controle)) ){
|
||||
|
||||
$creationNote = DataBase::getPDO()->prepare("INSERT INTO note(id_note, id_appartenance, id_controle, valeur) ".
|
||||
"VALUES(".
|
||||
"DEFAULT, ".
|
||||
"(SELECT id_appartenance FROM appartenance WHERE id_etudiant = :etudiant AND id_semestre = :semestre), ".
|
||||
":controle, ".
|
||||
":valeur".
|
||||
")");
|
||||
$creationNote->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre, ':controle' => $controle, ':valeur' => $valeur ));
|
||||
|
||||
|
||||
/* [2] Second cas : il faut modifier la note de cet étudiant
|
||||
============================================================================*/
|
||||
}else{
|
||||
|
||||
$modificationNote = DataBase::getPDO()->prepare("UPDATE note SET valeur = :valeur WHERE id_note = :noteUID");
|
||||
$modificationNote->execute(array( ':valeur' => $valeur, ':noteUID' => $noteUID ));
|
||||
|
||||
}
|
||||
|
||||
/* [3] On vérifie que la note a bien été créé pour cet étudiant et ce contrôle
|
||||
=================================================================================*/
|
||||
if( !($noteUID=noteRepo::UID($etudiant, $controle)) ) return false;
|
||||
|
||||
|
||||
/* [4] On vérifie que la note créée a bien la valeur qu'on a attribuée
|
||||
=================================================================================*/
|
||||
$verificationValeur = DataBase::getPDO()->prepare("SELECT note.valeur FROM note WHERE id_note = :noteUID");
|
||||
$verificationValeur->execute(array( ':noteUID' => $noteUID ));
|
||||
|
||||
return ( $verificationValeur->fetch()['valeur'] == $valeur );
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -86,7 +86,7 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n
|
|||
level_1: 'saisieNote',
|
||||
etudiant: obj.userid,
|
||||
controle: obj.ctrlid,
|
||||
note: obj.inputEl.value,
|
||||
note: obj.inputEl.value.replace(',', '.'), // par précaution, on replace les virgules par des points pour le php (is_numeric)
|
||||
};
|
||||
|
||||
API.send(request, function(response){ // on gère la réponse de API, si déplacement effectué, on recharge la page
|
||||
|
|
|
@ -315,7 +315,11 @@ elseif( permission('teacher') ){ // si enseignant et qu'un contrôle est spécif
|
|||
echo "<td><span class=unstressed>Pas noté</span></td>";
|
||||
|
||||
echo "<td>";
|
||||
echo "<input class='saisie_note' data-ctrl='".$answer->controle['id']."' type='number' step='.25' min='0' max='".$answer->controle['base']."' placeholder='Note'>";
|
||||
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='number' step='.25' 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='number' step='.25' min='0' max='".$answer->controle['base']."' placeholder='Note'>";
|
||||
|
||||
echo "<div class='valider_action' data-info='cliquer pour valider'></div>";
|
||||
echo "</td>";
|
||||
|
||||
|
|
Loading…
Reference in New Issue