TP4
Techniques mises en oeuvre
- programmation objet,
- pattern DAO
- remaniement (refactoring)
Expression des besoins
YAHP doit permettre la visualisation web des tickets existants.
Après le premier cas d'utilisation "Créer un
ticket" vu
dans le TP précédent, un nouveau cas
d'utilisation
"Voir tous les tickets" est donc recensé et doit
être
implémenté.

On souhaite aussi refactoriser le code php
précédemment écrit en utilisant des
objets.
Travail demandé
CU "S'authentifier"
Définir la classe LaxisteLoginController (sous
classe de
AbstractLoginController) qui redéfinit les
méthodes
:
- isValidLogin( $login); // retourne true si $login
a au moins 2 caractères
- isValidPassword($login, $password); //
retourne true si $login et $password sont
identiques!!
Configurer le système de contrôle
d'accès par login en utilisant une instance de
LaxisteLoginController pour vérifier login et mot de passe.
CU "Créer un ticket"
Classe Ticket
Définir (dans un
fichier Ticket.class.php) la classe Ticket
qui a pour attributs les
différentes infos associées à un
ticket :
ticketID, applicationName, login, priority (sous forme d'un entier),
type, creationDate, oneLiner, detailedDescription, attachmentName.
Définir un constructeur ayant autant de
paramètres pour initialiser ces attributs ainsi que les
différents accesseurs permettant d'obtenir la valeur de ces
attributs, plus précisément définir:
- Ticket($applicationName, $login, $priorityID, $type,
$creationDate,
$oneLiner, $detailedDescription, $attachmentName = '', $ticketID = -1)
- les accesseurs getTicketID(), getApplicationName(),
getLogin(), getPriority(), getType(), ...
- la méthode static
priorityCodeToText($priorityCode) qui retourne la chaîne de
caractères correspondant à la valeur de son
paramètre $priorityCode (soit "Urgente" pour le
code 4,
"Faible" pour 2)
- getPriorityText()
qui retourne la chaîne de caractères correspondant
à la valeur de l'attribut priority de l'instance (cette
méthode aura intérêt à
utiliser la
méthode priorityCodeToText précédente).
Classe TicketDAO
La classe
TicketDAO déclare
un attribut privé $filePath permettant de
préciser le chemin
du fichier utilisé pour la persistance des tickets (par
défaut tickets.csv).
Compléter le
fichier TicketDAO.class.php
dont un squelette est fourni pour
définir les méthodes
suivantes :
- save( $ticket) : sauvegarde le ticket $ticket
- /* $ticketArray = */ findAll();
retourne la collection (un tableau simple) de tous les
tickets (instances de Ticket)
Classe AppService
Dans le souci de séparer le code de l'application
en
différentes couches, définir la classe AppService
qui va
avoir pour responsabilité d'offrir un certain nombre de
services
utilisés par la couche de présentation. Dans la
classe AppService, définir donc, en les extrayant
du
fichier editTicketAction.php, les
méthodes suivantes
qui prennent une instance de Ticket en paramètre :
- printTicketAsTableRow($ticket, $tableRecordClass),
- saveTicket($ticket) ; cette méthode
délègue le traitement au DAO :
$ticketDAO->save($ticket);
Inclure les fichiers requis comme précédemment.
Controleur editTicketAction
Dans editTicketAction.php:
- (supprimer les définitions
des fonctions printTicketAsTableRow() et saveTicket()),
- instancier un ticket $ticket,
- remplacer l'appel à saveTicket(...) par
l'appel à AppService::saveTicket($ticket);
- remplacer l'appel
à printTicketAsTableRow(...) par
l'appel à AppService::printTicketAsTableRow($ticket,
$tableRecordClass);
Le diagramme de séquence suivant
représente les échanges de messages
nécessaires :

CU "Voir tous les tickets"
Ecrire une page de consultation showAllTickets.php affichant tous les
tickets
créés dans une table. Exemple d'affichage :
Application |
Priorité |
Type |
Date |
Résumé |
Description |
YAHD |
Très urgente |
anomalie |
06/05/2007 |
Mes demandes d'intervention ne sont
pas sauvegardées |
J'ai saisi plusieurs demandes
d'intervention avec cet outil mais elles ont disparu |
YAHD |
Urgente |
evolution |
06/02/2008 |
Je voudrais n'afficher que certains
tickets |
|
YAHD |
Moyenne |
anomalie |
06/02/2008 |
Le rouge affiché est
trop criard |
|
YAHD |
Moyenne |
anomalie |
06/02/2008 |
La police utilisée est
trop petite |
|
Chaque ticket est
affiché avec une couleur reflétant la
priorité de
la demande (AppService::printTicketAsTableRow($ticket)).
Dans la classe AppService définir
la méthode getAllTickets() qui retourne un tableau
contenant toutes les instances de tickets (par un appel à la
méthode findAll() de TicketDAO)
Ecrire le fichier showAllTickets.php (en
récupérant une grande partie du code HTML de
editTicketAction.php); protéger l'accès
à cette
nouvelle page de façon identique à la page
editTicket.php (de telle
sorte que seuls les utilisateurs authentifiés puissent
consulter la liste
de tous les tickets ... Attention,
ils ne doivent pas être redirigés vers une autre
page dans le cas contraire).
Le diagramme de séquence suivant représente ces
échanges de messages :

Le diagramme de classes ci-dessous permet de préciser les
relations (de dépendance en l'occurrence) entre ces classes:

Page d'accueil
Créer un fichier index.php reprenant/adaptant le contenu de
cet exemple de superbe page
d'accueil.