TP4

Techniques mises en oeuvre

  1. programmation objet, 
  2. pattern DAO
  3. 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é.
UC
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 :
  1. isValidLogin( $login);  // retourne true si $login a au moins 2 caractères
  2. 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:

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 :

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 :

Inclure les fichiers requis comme précédemment.

Controleur editTicketAction

Dans editTicketAction.php:

Le diagramme de séquence suivant représente les échanges de messages nécessaires :

Diagramme de séquence "Créer un ticket"

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 :
Diagramme de séquence "Voir tous les tickets"
Le diagramme de classes ci-dessous permet de préciser les relations (de dépendance en l'occurrence) entre ces classes:
Diagramme de séquence "Voir tous les tickets"

Page d'accueil

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