Voici une archive contenant les fichiers nécessaires pour faire le TP :
Cet examen est constitué de deux parties indépendantes. S'il y a des problèmes avec dev-NUMETU
, vous pouvez utiliser php -S
comme vu en cours.
On dispose d'un fichier de notes au format CSV, contenant en première ligne les intitulés des UEs puis la liste des notes de chaque étudiant.e (une personne par ligne).
Pour cet exercice on ne vous demande pas de mettre en place une architecture MVCR.
La page HTML produite par votre programme DOIT être valide avec le validateur du W3C.
Écrire un programme PHP qui lit le fichier CSV donné et affiche une page HTML contenant les résultats des étudiants suivis de la moyenne des notes de l'étudiant.e.
Détails à implémenter :
<table>
) pour l'affichage (tutoriel sur les tableaux HTML).border-collapse: collapse;
pour les éléments table
afin de fusionner les bordures des cellules.Pour cet exercice, vous disposez d'une version simplifiée de l'application avec laquelle vous avez choisi vos groupes pour le projet. Le stockage des données est fait avec ObjectFileDB. Le but sera de remplir les trous afin de rendre l'application fonctionnelle à minima.
L'architecture de cette application est légèrement différente de celle vue en TP : c'est le contrôleur qui a une fonction main
qui est appelée dans index.php
.
//TODO
sauf quand c'est explicitement demandé.
route()
du routeur pour que la page s'affichant par défaut soit celle listant tous les cours.
route()
du routeur pour que lorsque l'on clique sur un cours la page s'affichant soit la liste
des projets de ce cours et pour que lorsque l'on clique sur un projet sur cette dernière la page avec la liste des groupes de ce
projet s'affiche.
Attention à bien gérer les cas où les id ne sont pas passés en paramètres.
Les objets sont stockés dans 4 fichiers qui sont dans le répertoire DB_DIR
(par défaut db/
), ils sont manipulés dans la classe FileStorage
. Vous pouvez réinitialiser ces bases en appelant la fonction statique init
de la classe.
getStudentByEmail
de la classe FileStorage
pour qu'elle renvoie l'étudiant avec cet email ou null
sinon.
addStudentToGroup
et removeStudentFromGroup
qui doivent respectivement ajouter et supprimer un étudiant d'un groupe. Il est conseillé d'utiliser la fonction getStudentGroup
et de lire les définitions de classes Student
et Group
avant de commencer à coder. Vous ferez également attention au cas où l'étudiant appartient déjà à un groupe, auquel cas il faut renvoyer une erreur.
L'application n'est pas faite pour les utilisateurs non connectés, pour simplifier l'exercice, l'utilisateur "connecté" est défini par la méthode setIdentity
du controleur et est stocké dans $this->student
. Vous pouvez modifier setIdentity
à des buts de tests.
addStudentToGroup
et removeStudentFromGroup
du contrôleur doivent respectivement ajouter et supprimer un étudiant à un groupe, complétez-lez sans vous soucier des droits mentionnés dans les
commentaires. Pour addStudentToGroup
vous ferez attention au cas où l'utilisateur appartient déjà à un groupe, il faudra alors l'enlever de son groupe précédent avant de l'ajouter à son nouveau groupe.
setIdentity
, la vue groupList
permettant à l'étudiant connecté de :
getUserLevel
de Student
. Vous devrez veiller à ce que les actions autorisées soient différentes en fonction du statut de l'étudiant connecté : seuls les étudiants ayant le statut admin
peuvent ajouter ou retirer un autre étudiant d'un groupe. Dans les utilisateurs par défaut, seul Zoro
est un admin.
AdminView
héritant de View
qui sera utilisée quand l'étudiant connecté est
un admin
, cette vue doit ajouter la possibilité de retirer n'importe quel étudiant
de n'importe quel groupe.