Pour ce TP, vous allez développer une application de visualisation de bulletins de note. Un étudiant accedera à son bulletin. Un administrateur les visualisera tous.
Cette archive contient le squelette de l'application.
Le sous-répertoire data
contiendra les données persistances, notamment des bulletins de notes aux format XML.
La page etudiant.php
affichera le bulletin d'un étudiant particulier.
Pour le moment, elle contient uniquement du HTML donnant le squelette de code affichant un bulletin.
bulletin.inc
, codez la fonction bulletin($em)
.
Cette fonction charge tout simplement l'arbre XML du bulletin écrit dans le fichier data/bulletins/$em
.
Un test dans etudiant.php
avec un var_dump
permettra de vérifier rapidement le bon fonctionnement.
html_bulletin($b)
qui prends en paramêtre l'arbre XML d'un bulletin et affiche une version HTML:
La page admin.php
affiche le bulletin de notes de chaque élève.
etudiants()
qui retourne un tableau de tous les étudiants ayant un bulletin de notes.
Pour créez cette liste, parcourez les fichiers dans data/bulletins
(voir la fonction glob).
Chaque élément du tableau sera un tableau associatif contenant le nom complet de l'étudiant (à la clef nom
) et son email (à la clef email
).
Pensez à ré-utiliser bulletin()
et à tester avec var_dump
html_etudiants()
qui affiche une liste HTML des étudiants comme dans le squelette.
Les étudiants ne doivent visualiser que leur bulletin et seul les administrateurs peuvent visualiser tous les bulletins.
Pour sécurisez les pages, vous allez reprendre la page d'authentification dans login.php
.
Ce formulaire enverra les données d'authentification à la page auth.php
qu'il faudra réaliser ultérieurement.
data/auth.xml
contient les données d'authentification.
Les mots de passe ont été chiffré par la fonction md5().
Le mot de passe en clair étant le prénom de la personne.auth.inc
, créez la fonction login($e, $p)
.
Elle prends en paramêtre l'email d'un utilisateur et son mot de passe en clair.
Sinon, elle retourne "etudiant"
ou "admin"
en fonction du statut de l'utilisateur si les identifiants sont valides; false
sinon.
Utilisez une requête XPath pour faire la recherche. Testez la valeur de retour de la fonction avec var_dump
.Il faut maintenant suivre la progression de chaque utilisateur et gérer les accès aux pages
auth.inc
, démarrez une session.auth.php
.
Récupérez les données du formulaire et réalisez l'authentification avec la fonction login()
:
etudiant.php
ou admin.php
en fonction de son statut.login.php?#refus
.
Pour le moment, on peut toujours accéder à etudiant.php
et admin.php
sans passer par l'authentification.
Il faut donc protéger ces pages.
restrictAccess($b)
, $b
indiquant si l'utilisateur doit être un administrateur ou non.
Cette fonction vérifie si l'email de l'utilisateur et son statut son bien présent dans la session.
Si l'utilisateur n'a pas les bons droits, il est automatiquement redirigé vers login.php
.
etudiant.php
pour que le bulletin affiché soit obligatoirement celui correspondant à l'étudiant enregistré.admin.php
pour s'assurer que la personne authentifiée est un administrateur.Pour la finalisation, il faut maintenant pouvoir se déconnecter.
logout()
permettant à un utilisateur de se deconnecter et testez la.etudiant.php
et admin.php
.
L'objectif est alors de modifier auth.php
pour appeler la fonction logout()
lorsque l'utilisateur clique sur ces boutons et le redirigez vers login.php
.
data
. Les fichiers .htaccess
de apache permettent cela.
Nous allons maintenant réaliser un formulaire permettant à un utilisateur de changer son mot de passe.
auth.inc
, créez une fonction nouveauPassword($m, $op, $np)
.
Cette fonction prends en paramêtre une addresse email, le mot de passe courant et le nouveau mot de passe (les deux en clair).
Elle retourne true
si le mot de passe a été mis à jour.
Avec XPath, sélectionner l'utilisateur.
Changez le mot de passe et sauvegardez le fichier XML modifié.auth.php
, il faut maintenant faire le lien entre les données envoyées par le formulaire et cette fonction. D'après le formulaire, il faut faire cette opération si le paramêtre action
a pour valeur update
.
Vérifiez que tous les champs ont été remplis, que les nouveaux mots de passes sont identiques et non-vide.
En cas de problème, redirigez l'utilisateur vers changePassword.php?#refus
.
En cas de succès, appelez la fonction login
avec les nouveaux identifiants pour authentifier et rediriger l'utilisateur sur son panel.