(On suppose qu'un répertoire tpdsi a été créé à la racine du site web.)
Créer un
répertoire tp4 sous le répertoire tpdsi ;
y dézipper l'archive
correction du TP3 .
Si le serveur web est lancé
sur la machine
locale, on doit pouvoir visualiser le formulaire de saisie de
ticket en tapant l'URL http://localhost/tpdsi/tp4/editTicket.php
dans un navigateur.
(Lancer Eclipse.) Dans Eclipse,
sélectionner le projet tpdsi
précédemment créé et
utiliser la touche F5 (File->Refresh)
Le répertoire tp4 apparaît alors ainsi
que tous
les fichiers qu'il contient.
Note concernant le contrôle d'accès: la définition de la classe LaxisteLoginController dans le fichier login/LaxisteLoginController.class.php n'est pas explicitée pour cause de simplicité (voir le fichier AcceptAllExceptZZZLoginController.class.php). Pour utiliser cette classe, il suffit de remplacer le contenu du fichier login/loginAccess.conf.php par :
<?php
// Changer ces 2 lignes pour utiliser un validateur de login
différent
include_once 'LaxisteLoginController.class.php';
$loginControl = new LaxisteLoginController();
?>
Sélectionner le répertoire tp4
File->New->PHP File
Saisir Ticket.class.php pour nom de fichier. Cliquer sur le bouton "Finish".
Eclipse crée un fichier vide.
La classe Ticket est constitué essentiellement d'attributs et d'un constructeur.
<?php
class Ticket {
private $ticketID;
private $applicationName;
// ...
function __construct($applicationName, $login,
$priority, $type, $creationDate, $oneLiner, $detailedDescription,
$attachmentName, $ticketID = -1) {
$this->ticketID = $ticketID;
$this->applicationName = $applicationName;
// ...
}
}
?>
On va aussi définir des méthodes "accesseur" pour ces attributs, soit des getter et des setter :
function getTicketID() { return $this->ticketID; }
function setTicketID($ticketID) {
$this->ticketID = $ticketID; }
function getLogin() { return $this->login;
}
...
Sélectionner le répertoire tp4
File->New->PHP File
Saisir TicketDAO.class.php pour nom de fichier. Cliquer sur le bouton "Finish".
On va définir un attribut $filePath et donc un constructeur à un argument et inclure le fichier définissant la classe Ticket :
include_once 'Ticket.class.php';
class TicketDAO {
private $filePath; // chemin du fichier
utilisé pour la persistance des tickets
function __construct($filePath =
'tickets.csv') {
$this->filePath = $filePath;
}
}
La méthode save($ticket) se construit en adaptant la fonction saveTicket() du TP3 :
function save($ticket) {
$line = $ticket->getTicketID()
. ";" . $ticket->getApplicationName() . ";" .
$ticket->getLogin() . ";" . $ticket->getPriority() . ";"
. $ticket->getType() . ";" .
$ticket->getCreationDate() . ";" . $ticket->getOneLiner() .
";" . $ticket->getDetailedDescription() . ";" .
$ticket->getAttachmentName();
$fd =
fopen($this->filePath, 'a+'); // ouverture du fichier en
écriture 'append'
$line .=
"\n"; // concaténation d'un saut de ligne
fputs($fd, $line); // écriture de la ligne en fin
de fichier
fclose($fd); // fermeture du fichier
}
Utilisons ces classes dans editTicketAction.php.
Dans le fichier editTicketAction.php, inclure les 2 classes au début du fichier :
include_once 'Ticket.class.php';
include_once 'TicketDAO.class.php';
Remplacer
saveTicket($application, $login,
$priority, $type, $todayDate, $oneLiner, $contents, $attachmentName);
par :
$ticket = new Ticket($application,
$login, $priority, $type, $todayDate, $oneLiner, $contents,
$attachmentName);
$ticketDAO = new TicketDAO();
$ticketDAO->save($ticket);
(Supprimer également la définition de saveTicket() devenue inutile.)
Tester en créant ce ticket de priorité urgente et vérifier le fichier tickets.csv résultant.
Sélectionner le répertoire tp4
File->New->PHP File
Saisir AppService.class.php
pour nom de fichier. Cliquer sur le bouton "Finish".
Inclure les fichiers Ticket.class.php et TicketDAO.class.php.
Définir les 2 méthodes :
static function printTicketAsTableRow($ticket, $tableRecordClass) {
$applicationName = $ticket->getApplicationName();
$priorityText = $ticket->getPriorityText();
$type = $ticket->getType();
$creationDate = $ticket->getCreationDate();
$oneLiner = $ticket->getOneLiner();
$detailedDescription = $ticket->getDetailedDescription();
$str =<<<EOT
<tr class="$tableRecordClass">
<td class="center">$applicationName</td>
<td class="center">$priorityText</td>
<td class="center">$type</td>
<td class="center">$creationDate</td>
<td class="left">$oneLiner</td>
<td class="left">$detailedDescription</td>
</tr>
EOT;
echo $str;
}
static function saveTicket($ticket) {
$ticketDAO = new TicketDAO();
$ticketDAO->save($ticket);
}
(Attention, un appel de méthode (ex.: $ticket->getApplicationName()) n'est pas correctement évalué à l'intérieur de la syntaxe here-doc <<<EOT !!)
Au début de editTicketAction.php inclure les 2 classes utilisées (plus de DAO):
include_once 'Ticket.class.php';
include_once 'AppService.class.php';
Remplacer
$ticketDAO = new TicketDAO();
$ticketDAO->save($ticket);
par (l'appel statique) :
AppService::saveTicket($ticket)
Remplacer l' appel à printTicketAsTableRow(...) par AppService::printTicketAsTableRow($ticket, $tableRecordClass)
(Supprimer également les définitions de printTicketAsTableRow() et saveTicket() devenues inutiles.)
Tester en créant ce ticket de priorité urgente et vérifier le fichier tickets.csv résultant.