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') ){
|
case 'saisieNote': if( permission('teacher') ){
|
||||||
|
|
||||||
$areSetParam = isset($request->etudiant) && isset($request->controle); // les arguments existent
|
$areSetParam = isset($request->etudiant) && isset($request->controle) && isset($request->note); // les arguments existent
|
||||||
$typeOkParam = $areSetParam && is_string($request->enseignant); // si c'est des strings
|
$typeOkParam = $areSetParam && is_string($request->etudiant); // si c'est des strings
|
||||||
$nEmptyParam = $typeOkParam && strlen($request->enseignant) > 0 && is_numeric($request->controle); // des bon types
|
$nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && is_numeric($request->controle) && is_numeric($request->note); // des bon types
|
||||||
$enseignantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->enseignant); // nom bon format
|
$etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->etudiant); // nom bon format
|
||||||
|
|
||||||
// paramètre optionnel
|
if( $etudiantCheck ){ // si tout les paramètres sont bons
|
||||||
$optionalGroupe = isset($request->groupe) && is_string($request->groupe) && strlen($request->groupe) > 1 && preg_match('/^[a-z0-9 -]{1,10}$/i', $request->groupe);
|
$answer->request = DataBase::getInstance()->saisieNote($request->etudiant, $request->controle, $request->note);
|
||||||
|
|
||||||
// définition (ou pas) du paramètre optionnel
|
|
||||||
if( $optionalGroupe ) $groupe = $request->groupe;
|
|
||||||
else $groupe = null;
|
|
||||||
|
|
||||||
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
|
|
||||||
}else
|
}else
|
||||||
$answer->request = 'param_error';
|
$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';
|
||||||
|
|
||||||
|
// saisie de la note
|
||||||
|
$rep = noteRepo::creer($etudiantUID, $controleInfo['id'], $controleInfo['id_semestre'], $note);
|
||||||
|
|
||||||
|
if( $rep )
|
||||||
/**************************************/
|
return 'success';
|
||||||
/*** 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;
|
|
||||||
else
|
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é
|
* @etudiant<String> l'identifiant de l'étudiant recherché
|
||||||
* @controle<int> l'UID du contrôle
|
* @controle<int> l'UID du contrôle
|
||||||
*
|
*
|
||||||
* @return UID<String> si l'utilisateur est dans la BDD, retourne son UID
|
* @return UID<String> l'UID de la note si elle existe pour ces critères
|
||||||
* @return FALSE<Boolean> FAUX si l'utilisateur n'est pas présent dans la BDD
|
* @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){
|
public static function UID($etudiant, $controle){
|
||||||
if( $semestre == null && $annee == null ){ // on cherche un utilisateur avec cet identifiant
|
$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 ".
|
||||||
|
|
||||||
/* [1] Cas où on cherche juste si l'utilisateur existe
|
"AND app.id_etudiant = :etudiant ".
|
||||||
=============================================================*/
|
"AND ctrl.id_controle = :controle");
|
||||||
$getUtilisateurUID = DataBase::getPDO()->prepare("SELECT identifiant as id FROM utilisateur WHERE identifiant = :identifiant");
|
$getNoteUID->execute(array( ':etudiant' => $etudiant, ':controle' => $controle ));
|
||||||
$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 ));
|
|
||||||
|
|
||||||
}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 ));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID de l'utilisateur
|
// 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',
|
level_1: 'saisieNote',
|
||||||
etudiant: obj.userid,
|
etudiant: obj.userid,
|
||||||
controle: obj.ctrlid,
|
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
|
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><span class=unstressed>Pas noté</span></td>";
|
||||||
|
|
||||||
echo "<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 "<div class='valider_action' data-info='cliquer pour valider'></div>";
|
||||||
echo "</td>";
|
echo "</td>";
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue