Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Page 1 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 2 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 3 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 4 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Mise en œuvre
La création de cette application se base sur 10 étapes principales et plusieurs intermédiaires.
1. Mise en place d’un projet Angular. 6. Page d’accueil pour les utilisateurs
2. Modélisation et création de la base de authentifiés
données MySQL. 7. Gestion des tables de poker
3. Création d’une API REST pour le 8. Adaptation de l’affichage des files
backend. d’attente.
4. Authentification et système de token. 9. Mise en production de l’application
5. Page d’accueil pour les utilisateurs non 10. Tests et validation.
authentifiés
Plusieurs diagrammes et images expliquent ces étapes en détail.
Résultats
Les résultats de ce projet sont :
Une application moderne, facile à utiliser et sécurisée, permettant la gestion de la file d’attente
aux tables de poker.
Un affichage aux clients avec un design inchangé, affiché à l’écran à l’entrée de la salle de
poker.
Une documentation claire et à jour, comprenant, un rapport, un guide d’installation et un
guide utilisateur.
Un code source correctement conçu et commenté.
Les résultats obtenus sont, à mon avis, très satisfaisants. Toutes les fonctionnalités demandées dans
le cahier des charges sont fonctionnelles et mises en production.
Page 5 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
2 Analyse préliminaire
Introduction
Ce document est destiné aux personnes ayant une connaissance approfondie en informatique. Les
termes techniques et d’autres mots employés dans le texte sont mis dans un glossaire et expliqués
brièvement.
Après la réception du cahier des charges et des consignes d’évaluation de la part de l’expert M. Alain
Roy, une journée de réflexion et de planification a eu lieu. Ces analyses et la planification sont
disponibles dans les chapitres qui suivent.
Objectif
L’objectif de ce projet est de développer une application WEB qui respecte l’ensemble des objectifs
décrits dans le cahier des charges reçu au démarrage de mon Travail Pratique Individuel.
● Analyser les exigences d’une application Web et de la base de données, respectivement des
éléments de données à lier, définir et documenter les techniques utilisées.
● Identifier les informations importantes de protection et de sécurité en tenant compte de la
protection des données, définir et documenter les mesures, en respectant les exigences
décrites dans le cahier des charges.
● Réaliser l’intégration de l’application Web avec la base de données et l’annuaire Microsoft
Active Directory, respectivement aux éléments de données, en prêtant attention aux
transactions, à la protection et la sécurité des données. Documenter les démarches, ainsi que
toute information importante en relation avec la réalisation du projet.
● Mettre en œuvre les souhaits de modifications, justifier et documenter ces changements.
● Définir et exécuter la procédure de test et de remise, la documenter dans un chapitre dédié
du rapport. Si nécessaire, entreprendre les corrections et les documenter
Page 6 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Planification initiale
La planification initiale a été décidée lors de l’analyse des fonctionnalités à développer. La planification
est vouée à être modifiée tout au long du projet.
Ce document a été créé à l’aide de Google Sheets et fonctionne comme un diagramme de Gantt.
L’axe temporel est défini par blocs de deux heures et les jours travaillés divisés en demi-journées et
affichées au long de deux pages.
Dans un premier temps les jours n’ont pas été explicités dans ce document ce qui a été corrigé après
conseil de l’expert M. Mveng. Voici la comparaison de la correction :
Avant : Après :
Une autre correction est l’heure de début et fin de la première journée. J’ai décidé de laisser l’heure
où je suis arrivé au bureau et celle de mon départ, elles sont compatibles avec l’horaire demandé dans
le cahier des charges.
Les 5 principales étapes du projet sont affichées dans une colonne "Étape" et ses tâches respectives
dans la colonne “Tâches”.
Une troisième page affiche la planification des charges. Cette page permet de comparer le temps prévu
pour chaque tâche et le temps de travail réellement effectué.
Merci de vous référer à l’annexe 10.1 Planification initiale pour voir le document dans son intégralité.
Planification finale
La planification définie au premier a très peu changé au cours du projet, cependant des changements
ont eu lieu et une planification réelle a été créée.
Merci de vous référer à l’annexe 10.2 Planification Réelle pour voir le document dans son intégralité
Journal de travail
Page 7 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
3 Analyse / Conception
Environnement et Waiting list actuelle
L’application actuelle est déployée en mode intranet. Elle n’est pas complète en question de
fonctionnalités. Les utilisateurs doivent pouvoir gérer les tables de jeu eux-mêmes. La base de données
actuelle ne permet pas cette modification, car elle est conçue d’une forme que pour chaque table de
poker une table MySQL doit être créée. Le modèle ci-dessous démontre cette structure.
Le code PHP, à mon avis, n’est pas optimal et ne respecte pas les bonnes pratiques de développement,
comme par exemple, une documentation, un code commenté et une structure claire. En plus, pour
chaque nouvelle table ajoutée plusieurs fichier PHP doivent être créés (delete, deleteAll, insert,
update, pkr), laissant l’application extrêmement statique et dépendante du service informatique.
En plus, la Poker Waiting List actuelle n’est pas sécurisée par un système d’authentification utilisateur,
ce qui doit être corrigé afin de respecter la protection des données.
Le design de l’application est dépassé et prie pour être actualisé. Elle laisse à désirer en question
d’ergonomie et clarté.
Page 8 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 9 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Affichage à la clientèle
Pour des questions de marketing et afin de respecter les standards définis par le groupe Barrière,
l’affichage des clients en attente ne doit pas être modifié. Je dois utiliser le même format et image
utilisés actuellement.
Je peux adapter le code de création d’affichage, en modifiant la façon dont il récupère les données.
Ou, si ma planification avance correctement, je peux voir pour créer un système d’affichage toujours
en respectant les standards définis par le groupe.
Comme pour les fichiers de l’application, ces scripts ne sont pas dynamiques, si une nouvelle table est
créée, le fichier pour la table 5 doit être modifié et ainsi de suite. Ce système ne respecte en aucun cas
le principe de développement DRY ( don’t repeat yourself).
Ces scripts sont exécutés toutes les minutes par un Cron job configuré sur le serveur Linux WEB01.
Les images sont affichées à l’écran grâce au logiciel d'affichage dynamique Screenly installé sur un
Raspberry PI, il va tourner une page PHP qui parcourt et affiche les images dans un répertoire donné.
J’ai décidé de garder cette méthode d’affichage par Screenly, c’est donc uniquement la création des
images qui sera adaptée au projet.
Page 10 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Concept
Le concept est décrit dans le cahier des charges qui a été rédigé par le chef de projet, M. Ballestraz.
Stratégie de test
Risques techniques
Les bases du développement WEB ont été acquises au cours des différents modules ICT. Ceux-ci m'ont
permis de découvrir le frontend et la conception des bases de données.
Les risques pouvant survenir et pouvant me mettre en retard dans le projet sont :
● Les interactions avec le backend ; le choix d’Angular impose d’utiliser le backend comme API
REST( Representational State Transfer Application Program Interface) . Cela ajoute un niveau
de complexité car toutes les données qui transitent seront alors au format JSON (JavaScript
Object Notation), il faut donc savoir traiter, envoyer et sécuriser ces données. Afin de réduire
le risque de retard, les documentations officielles sont disponibles pour consultation.
● Perte des données importantes dû à une panne : Afin d’éviter les pertes de données, des
sauvegardes périodiques sont faites dans des différents supports de stockage.
● Protocole LDAP. C’est la première fois que je vais intégrer une authentification Active Directory
dans une application web. Le risque de retard est faible, mais il existe.
Page 11 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
2 One drive
1 Google Drive
Page 12 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Afin de gérer le projet au mieux, j’utilise la méthode “Waterfall” comme méthode de gestion des
charges.
L’ensemble des fonctionnalités de l’application étaient clairement décrites dans le cahier des charges,
ce qui m’a permis de définir l'enchaînement du développement assez facilement. Il est donc plus facile
de mesurer la progression du projet avec cette méthode puisque tout le déroulé du projet est défini
en amont.
Il n’y a pas forcément besoin de flexibilité pour la gestion générale du projet c’est donc cette méthode
que j’ai choisi de suivre.
Langages
Les différents langages utilisés pour ce projet n’ont pas été imposés dans le cahier des charges.
HTML
Le langage HTML (HyperText Markup Langage) est utilisé uniquement pour la partie “vue” de
l’application, c'est-à-dire, la partie affichage à l’écran du côté utilisateur. La “vue” est un élément du
frontend. En l’utilisant dans le Framework Angular, j’ai des différentes possibilités pour l’affichage. Les
fonctionnalités HTML spécifiques à Angular vont être décrites au long de cette documentation.
CSS
Le langage CSS (Cascading Style Sheets) est, pareillement à HTML, utilisé uniquement pour la partie
“vue” de l’application. Ce langage va servir à donner le style des pages web. Dans Angular il existe
plusieurs façons d’utiliser le style CSS, soit directement dans le fichier HTML, dans un fichier dédié à
chaque page ou dans un fichier global de l’application.
TypeScript
J’utilise ce langage pour la partie contrôleur du frontend. Le contrôleur est, comme la vue, exécuté
côté utilisateur et sert à fournir à la vue les données voulues, contrôler les accès, ainsi que d’autres
interactions avec l’application.
TypeScript est développé par Microsoft et sert à améliorer et sécuriser la production de code
JavaScript.
PHP
J’utilise le langage PHP (PHP: Hypertext Preprocessor) pour la partie « backend » du projet. Il a comme
utilité de réceptionner les requêtes faites par le frontend et de les traiter en fonction de l’action voulue.
J’ai décidé de programmer la partie PHP en orienté objet comme le reste du projet. Cela permettra
une meilleure cohérence dans l’organisation du projet et une maintenance facilitée.
L’extension PHP pour LDAP est utilisée pour la partie authentification Active Directory.
SQL
Le langage SQL(Structured Query Language) est utilisé spécifiquement pour la manipulation de la base
de données.
Page 13 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Outils utilisés
NodeJS
NodeJS est un environnement d’exécution JavaScript construit sur le moteur JavaScript V8 de Chrome.
Il est ainsi le point central qui va permettre d'exécuter des programmes écrits en javascript côté
serveur.
XAMPP
XAMPP est une distribution d’Apache qui contient MySQL et PHP, entre autres outils. Ce logiciel fournit
un environnement de développement local idéal. Dans ce projet j’utilise spécialement MySQL,
Apache+PHP et PhpMyAdmin.
J’aurais pu utiliser d’autres environnement de développement web, comme WAMP, MAMP ou LAMP,
cependant, j’ai choisi d’utiliser XAMPP car je l’ai utilisé plusieurs fois au cours de mon apprentissage
et, vu que je ne vais pas utiliser cet outil en production, il me suffit largement.
G Suite
G Suite est une suite d’outils basée sur le cloud développée par Google et destinée aux professionnels.
J’utilise principalement Docs et Sheets afin de créer les différents documents souhaités comme le
rapport ou le Gantt. L’application Diagrams a aussi été utile pour la conception des modèles de
données. La suite Google m’a aussi permis, grâce à Drive, de créer un espace de stockage cloud. Cela
me permet d’accéder facilement aux documents du projet à tout moment. J’ai choisi d’utiliser G Suite
car c’est l’outil qu’utilise le Groupe Barrière.
D’autres applications pourraient être utilisées pour créer la documentation, comme : Microsoft
Github
L’application Github est utilisée principalement en tant que sauvegarde du code. Elle permet aussi une
mise en place simplifiée du projet sur d’autres appareils, permettant ainsi un travail dynamique en
question de codage. GitHub permet une utilisation gratuite et est adapté à ce projet.
Framework
Bootstrap
Bootstrap est un Framework qui simplifie la création du design de site ou d’application web. Il a été
développé par « Twitter » et mis à disposition gratuitement. Il contient du code HTML, CSS et Javascript
Bootstrap possède une documentation complète et facilement compréhensible. Il a été choisi afin de
faciliter la création de la partie graphique de l’application.
Page 14 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Angular
L’application actuelle, comme le cahier des charges décrit, est basée sur un Framework PHP Yii (Yes,It
is), même si Yii est un Framework PHP puissant, j’ai préféré utiliser un système de développement dont
je me sens à l’aise. J’utilise donc la dernière version stable d’Angular, la version 11, sortie en novembre
2020.
Angular est un Framework open source développé par Google et par la communauté Angular. Il est
basé sur le langage TypeScript qui a été développé par Microsoft et qui sert à améliorer et sécuriser la
production de code JavaScript. Nous pouvons donc dire qu’Angular est un Framework Javascript.
Ayant déjà travaillé avec, j’ai choisi donc d’utiliser Angular afin de créer la partie frontend du projet.
Angular agit du côté client, c’est donc le navigateur qui interprétera l’ensemble du code. Il dispose
d’une documentation complète et des nouvelles versions et correctifs sont mis en place constamment.
Base de données
Étant une application ayant un but très spécifique et simple, la base de données suit cette même
structure.
Actuellement elle comporte 3 tables, mais peut évoluer après la fin du projet.
Le MCD permet de plus facilement voir les liens entre chaque table et d’afficher les notions d'entité et
d'association.
La base de données actuelle est à mon avis mal conçue, car pour chaque table de poker on doit créer
une nouvelle table avec les mêmes attributs dans MySQL. Dans mon analyse il est plus pertinent de
créer une table pour les tables de poker et une pour les joueurs.
Page 15 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Le MLD permet d’avoir une vision plus détaillée de la base de données et des relations directes entre
chaque table.
Le MPD permet de définir la mise en œuvre de structures physiques et de requêtes portant sur les
données.
Une table T_UsersToken a dû être rajoutée afin de garder la connexion des utilisateurs connectés. Le
système de token est décrit dans le chapitre 4.6.
Page 16 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 17 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
4 Réalisation
Mise en place du projet
Page 18 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Frontend
4.2.1 Le « routing »
Cette partie est propre au Framework Angular.
Page 19 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
L’élément « Article » affiche les pages d’accueil, la page de connexion et la page de gestion
de tables.
Le « footer » affiche un pied de page avec quelques informations aux utilisateurs.
Backend
Page 20 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Frontend
Backend
Les services Angular contactent l’API via des requêtes HTTP. L’API traite les requêtes et distribue les
données vers ses classes qui, avec ses fonctions, communiquent avec la base de données et l’AD,
ensuite elles retournent les données demandées par le frontend au format JSON en tant qu’un objet
préalablement définis dans les Models Angular. Dans l’échec, elle retourne les erreurs dûment
identifiées. Les données sont transmises aux contrôleurs TS et, si aucune erreur n’est retournée, ce
dernier les met à disposition de la vue. Si le frontend reçoit une erreur, il va afficher des messages
préalablement définis dans les fichiers TS.
Page 21 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Le choix d’utiliser Angular comme technologie de frontend implique de créer un système qui puisse
retourner des données sous un certain format. Le format de retour est le JSON. Je dois donc créer une
interface pour interpréter ces données et les envoyer dans le bon format. Cette API est développée en
PHP version 7.4.16.
Les principes d’une API REST ont été appris lors des modules ICT, cependant c’est la première fois que
je crée moi-même cette architecture. Après quelques recherches et lectures (sources disponibles dans
le chapitre ressources) voici les principaux standards concernant l’architecture de programmation API
REST :
Une API REST permet de manipuler de la donnée via une interface applicative
Page 22 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
● Start.php : Comme déjà mentionné, Start.php sert à trier les requêtes faites par le frontend. Il
sert aussi à, selon les requêtes, renvoyer les bonnes erreurs en cas d’échec.
Lorsqu’une requête http arrive, elle va être validée et va ensuite appeler la classe
correspondante.
● Entity.php : La classe Entity.php a plusieurs rôles. Le premier est de fournir des attributs
globaux aux classes enfants. Elle fait aussi la connexion à la base de données MySQL. Pour finir,
elle vérifie la validité des tokens.
● Table.php : Classe contenant les fonctions de sélection, ajout, suppression, entre autres. C’est
cette classe qui va retourner les données des tables de poker, demandées par le frontend.
● Player.php : Classe contenant les fonctions de sélection, ajout, suppression, entre autres. C’est
cette classe qui va retourner les données des clients en attente, demandées par le frontend.
● User.php : Classe dédiée à l’authentification des utilisateurs. Elle fait des requêtes SQL ainsi
que des requêtes LDAP vers l’AD.
Page 23 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Système de Token
Afin de garder la connexion de l’utilisateur entre les rafraîchissements j’ai décidé de créer un système
de token. Le token généré est une chaîne de caractères aléatoires crypté en MD5 (Message Digest 5).
Le token est unique par utilisateur et a une validité d’une minute et si l’utilisateur reste connecté plus
que ça, le token est crédité de 60 minutes, après ça il doit être mis à jour. Après la connexion, le token
créé est stocké aussi en « LocalStorage » et doit être identique à celui en base de données.
Page 24 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Authentification
La connexion d’un utilisateur est faite par moyen d’une page de connexion dédiée. Cette page est
accessible uniquement si l’utilisateur n’est pas connecté. Cette vérification est demandée au backend
par le service Angular, AuthenticationService. L’affichage des boutons de connexion ou déconnexion
est gérée par Angular ngIf, qui affiche le bon bouton pour les utilisateurs connectés ou non connectés.
La page de connexion contient un formulaire avec deux champs : Nom d’utilisateur et mot de passe,
ainsi qu’un bouton de connexion.
Une validation du formulaire est faite une fois le bouton « Connexion » cliqué. Si les champs sont vides
ou si les identifiants sont incorrects, l’utilisateur reçoit un avertissement.
Une fois le formulaire validé et envoyé, le service AuthenticationService est appelé, il envoie les
identifiants vers le backend qui va, à l’aide du protocole LDAP, vérifier que l’utilisateur et mot de passe
sont corrects. Le backend retourne les données de l’utilisateur en format JSON au frontend. Pour finir
l’utilisateur est redirigé vers la page voulu ou vers la page d’accueil.
Page 25 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
/usr/local/User/documents ou C:/Windows/…
Le slash indique une division dans la référence, et la séquence est lue de gauche à droite.
Page 26 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
L’équivalent d’un chemin complet en LDAP est appelé un " distinguished name " (Nom distingué), aussi
appelé "dn". Un exemple de dn serait :
cn=Winston Meisen,ou=Informatique,o=Casino,c=CH
La virgule marque la séparation de chaque division comme référence, et la séquence est lue de droite
à gauche.
PHP met à disposition plusieurs méthodes pour interroger un annuaire, voici les principales :
● Ldap_connect : Connexion à un annuaire
● Ldap_bind : Authentification à un annuaire
● Ldap_search : Recherche sur un annuaire
● Ldap_get_entries : Lit toutes les entrées d’un résultat
● Ldap_read : Lit une entrée
● Ldap_Unbind : Déconnecte du serveur d’annuaire.
En lisant la documentation PHP LDAP je n’ai trouvé aucune méthode pour comparer un mot de passe
encrypté avec celui de l’annuaire. Pour avoir une sécurité appropriée j’ai mis en place un certificat SSL
auto-signé.
Pour la création du certificat J’ai utilisé le code suivant (server est remplacé par le nom du serveur):
L’authentification et la gestion des droits sont faites lors de l’appel à la fonction Login disponible dans
la classe User. Cette fonction fait la connexion à l’AD et teste si les identifiants sont correctes. Si tout
est ok, un token est créé ou mis à jour dans la base de données. Ensuite, elle retourne le nom
d’utilisateur et le token en format JSON au frontend.
Page 27 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 28 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page d’accueil
La page d’accueil est générée par le composant Angular HomepageComponent. Ce composant fait
appel à TableCardComponent pour chaque table de poker. Pour le faire, Angular dispose de ngFor, qui
va lire chaque item d’un tableau à la fois et le stocker dans un objet.
Ici, HomepageComponent récupère toutes les tables de poker en base de données dans un tableau.
Avec ngFor, je crée un TableCardComponent pour chaque table. J’utilise le paramètre « @Input » afin
de partager les données de sa table avec le composant enfant.
Chaque composant TableCard est divisé en deux parties. Une première pour les utilisateurs non
authentifiés et autre pour ceux avec un token de connexion valide. Angular ngIf va vérifier à l’aide
d’AuthenticationService s’il existe un utilisateur actuel. Si c’est le cas, ngIf va afficher la vue
correspondante.
Ces boutons sont générés automatiquement, tant qu’il existe des tables dans la base de données. Ce
système est créé par Bootstrap Collapse. Pour chaque bouton créé et pour chaque table affichée, un
identifiant unique est créé. En utilisant l’attribut « attr.aria-controls » plus son numéro de table, il va
contrôler la table de même numéro.
Page 29 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Le cahier des charges dit qu’un utilisateur ne peut pas voir le menu Gestion des tables, cependant,
pour donner à l’utilisateur une meilleure visibilité sur les possibilités de l’application j’ai décidé
d’afficher le lien vers cette page dans le header. Ce lien est protégé par AuthGuard.
J’ai créé AuthGuard pour sécuriser cette route. Cette classe est appelée par AppRoutingModule pour
une ou plusieurs routes. AppRoutingModule utilise la propriété CanActivate de la route pour faire
appel à AuthGuard, celui-ci va vérifier que l’utilisateur soit authentifié.
Si l’utilisateur n’est pas authentifié et clique sur Gestion des tables AuthGuard garde l’URL de
destination en paramètre et affiche la page de connexion. Une fois la connexion réussie l’utilisateur
est renvoyé vers la page Gestion des tables grâce à ce paramètre d’url.
Page 30 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 31 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 32 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Ces informations peuvent être modifiées et enregistrées. Comme pour l’ajout d’un client, le nom
d’affichage doit être unique.
Cette suppression est permanente et l’utilisateur doit confirmer l’action via une boîte de dialogue.
Comme pour d’autres interactions avec la BDD, le frontend envoie une requête HTTP au backend qui
va exécuter la requête SQL appropriée.
Page 33 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Vider la table
Pour supprimer tous les clients d’une table, l’utilisateur n’a qu'à cliquer sur le bouton rouge avec un
symbole de poubelle.
Une fonction va envoyer une requête SQL pour supprimer tous les clients ayant cette table comme FK.
Page 34 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Comme expliqué précédemment, la page de gestion des tables n’est accessible que si l’utilisateur s’est
authentifié sur l’application. Elle affiche toutes les tables et donne à l’utilisateur plusieurs possibilités:
Ajouter une table
Pour ajouter une table, l’utilisateur doit cliquer sur le bouton qui contient le symbole de “+” en haut à
gauche de la page.
Ensuite un formulaire est affiché et doit être complètement rempli pour procéder à l’ajout de la table.
Si le formulaire est incomplet l’utilisateur est averti:
Si l’utilisateur essaie d’ajouter une table déjà existante, le backend fait la vérification et retourne un
code 409 et l’utilisateur est averti:
Page 35 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Une fois le formulaire envoyé au backend, le numéro de table est d’abord vérifié qu’il s’agit bien d’un
numéro de table unique.
Le changement de statut d’une table fonctionne de la même manière qu’en page d’accueil
authentifiée.
Supprimer une table
La suppression d’une table est irréversible et doit être validée une fois le bouton de suppression cliqué.
Pour gagner du temps, j’utilise une fonction « confirm() » disponibilisé par Angular, elle demande à
l’utilisateur sa confirmation via une boîte de dialogue créée par le navigateur, ensuite retourne vrai
s’il clique sur « Ok », ou stop l’action s’il clique sur annuler.
Page 36 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Affichage
L’affichage actuel utilise un plug-in Maximage pour afficher les images d’un répertoire en boucle.
Maximage est un plug-in jquery utilisé afin de créer des diaporamas. Une page PHP dédiée aux jeux de
tables envoie le chemin du dossier contenant les images et Maximage les affichent une par une en
boucle. Ce système reste inchangé.
4.10.1 Code actuel
Dans la partie analyse j’ai expliqué le fonctionnement de la création des images qui affichent les listes
d’attentes. Le but est désormais de n’utiliser qu’un seul script PHP pour générer les images.
La structure des fichiers était la suivante :
Cette séquence se répète encore 2 fois. Totalisant 3 fichiers contenant du code presque identique.
Ces fichiers seront disponibilisés dans le rendu final.
Page 37 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 38 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Avec un peu plus de temps, j’aurais créé une classe dans le backend qui mettrait les images à jour à
chaque changement dans la base de données et non à chaque minute via un Cron job. Ce changement
est toujours possible en dehors de ce TPI.
Le rendu final est le même que l’ancien et les images créées seront enregistrées dans le répertoire
destiné à l’affichage aux écrans casino.
Voici les files d’attente de tables 1 et 2 générées depuis l’environnement de développement :
Page 39 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Mise en production
La mise en production d’une application Angular n’est pas compliquée, cependant il y a des points à
faire attention.
Tout au long du projet, le langage TypeScript a été utilisé pour créer les interactions avec l’application.
Cependant l’application en production ne contient pas ce langage, elle utilise le langage Javascript.
C’est pour ça que, une fois le projet en développement terminé, une commande doit être exécutée
depuis le dossier base du projet Angular. La commande utilisée est : ng build.
Ng build transforme le projet Angular en une application web basée sur trois fichiers Javascript, ainsi
que le fichier index.html et d’autres fichiers utiles, comme les fichiers de style.
La commande ng build peut être accompagnée d’un paramètre « --prod », celui-ci va remplacer la
variable d’environnement pour un backend de développement par celle du backend de production.
Une fois cette commande exécutée, un dossier nommé avec le nom de l’application est créé dans un
dossier « Dist » et peut être copié directement dans le serveur web de production.
Quelques points importants avant la mise en production :
Le chemin de base dans le fichier Index.html doit être modifié afin de pointer vers le dossier
de prod du nouveau serveur.
Dans le backend, mettre à jour la connexion à la base de données pour communiquer avec le
serveur de prod.
Remplacer le système d’authentification de test par celui qui s’authentifie avec l’annuaire AD.
Le Raspberry PI utilisé étant déjà sur place et avec l’application Screenly installée, il a dû uniquement
être branché correctement et mis en route. Voici l’appareil connecté :
Câble Ethernet
RJ45
Câble d’alimentation
Page 40 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Une erreur rencontrée à cause de la différence de version de PHP avec le serveur de prod. Le serveur
de production a une version PHP dépassée ( 5.5.9). En utilisant PHP 7 dans l’environnement de
développement j’ai utilisé une fonction PHP qui n’existait pas en version 5, la fonction
« random_bytes » utilisée pour la création du token MD5. Cette fonction a été remplacé par
l’alternative « openssl_random_pseudo_bytes ».
Le câble d’alimentation du Raspberry PI a dû être remplacé car il était cassé.
La partie API REST et la partie Authentification ont été sans doute un défi. Plusieurs essais ont été fait
et beaucoup de lecture technique et des moments de réflexion.
5 Documents livrés
La liste des livrables demandé est : Une planification initiale, un rapport de projet, un journal de travail,
un guide utilisateur et le code source complet. Voici la liste des documents fournis :
Un rapport de projet. Un guide utilisateur ( en annexe).
Une planification initiale ( en annexe). Code source (en annexe ).
Une planification réelle ( en annexe). Mise en place de l’environnement de
Un journal de travail ( en annexe). développement (en annexe).
Vous trouverez en annexes des photos montrant mes deux places de travail, une à la maison pour le
télétravail et autre au Casino de Montreux. Mes deux bureaux sont adaptés et bien éclairés.
Page 41 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
6 Tests
Chaque fonctionnalité de l’application doit être testée et validée comme fonctionnelle dans ce
chapitre. Les problèmes ou bugs identifiés doivent être corrigés ou la fonctionnalité doit être
désactivée pour les utilisateurs si une solution n’est pas trouvée. Après correction, la fonctionnalité
doit être à nouveau testée et validée comme fonctionnelle.
Voici après, les tests effectués pour chaque partie de l’application.
Barre de navigation et pied de page
La barre de navigation affiche les menus et redirectionne l’utilisateur vers la bonne destination.
Logo -> Page d’accueil.
Affichage -> Diaporama des images affichées.
Utilisateur non authentifié :
o Gestion des tables -> Page de connexion.
o Se connecter -> Page de connexion.
Utilisateur authentifié :
o Gestion des tables -> Page de gestion des tables.
o Se déconnecter -> Page d’accueil non authentifié.
Affichage d’un bouton d’affichage par table.
En cliquant sur un bouton, la table de même numéro est enlevée de la page.
En cliquant sur un bouton d’une table qui n’est pas affichée, celle-ci devient visible.
Un lien dans le pied de page renvoie l’utilisateur vers le guide de l’application.
Page d’accueil non authentifiée
Affichage exhaustif de toutes les tables et ses informations. Ces informations ne peuvent pas être
modifiées.
Affichage exhaustif de tous les clients des tables, en affichant uniquement nom d’affichage et position
et ne peuvent pas être modifiés.
Authentification
Affichage exhaustif de toutes les tables et ses informations. Le statut des tables peut être modifié.
Affichage exhaustif de tous les clients des tables, en affichant la position, le prénom, le nom et le
téléphone de chaque client.
Ajout d’un client, tous les champs doivent être remplis, sinon un message d’erreur est affiché. Si le
nom d’affichage saisi est déjà utilisé par autre client, affiche un message.
Page 42 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Les clients peuvent être modifiés ou supprimés de la liste. Le nouveau nom d’affichage doit être
unique.
Un client peut être changé de position en le glissant et en le déposant. Le changement de position des
autres clients se fait automatiquement.
L’écran à l’entrée de la sale de poker affiche les tables et ses files d’attente.
Erreurs et corrections
Un problème au moment de l’affichage. Les images créées n’étaient pas affichées à l’écran(écran
blanc). Après quelques minutes de recherches j’ai découvert une apostrophe simple dans le nom des
fichiers image générés. Après avoir corrigé la génération des noms des fichiers, le problème a disparu.
Un problème lors du changement de position des clients. La requête qui fait la modification des
positions des clients au-dessus et au-dessous du client déplacé a dû être modifiée.
Validation des tests
Après avoir testé les fonctionnalités de l’application, je peux dire qu’elle est à 100 % utilisable. Des
petites vidéos ont été enregistrées au moment de chaque test et peuvent être visionnées depuis ce
lien :
https://drive.google.com/drive/folders/1gxjEliTh02BR9_OgdWJqciN3PYX-1DfI?usp=sharing
Page 43 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 44 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
8 Glossaire
Terme Définition
BigBlind Plus grosse des deux mises obligatoires lors du début d’une partie.
Commandes npm Node Package Manager sert à gérer les dépendances d’une
application Typescript.
Page 45 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
LocalStorage Stockage des données en local, côté utilisateur. Ces données n’ont
pas de durée de vie
Page 46 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
9 Ressources
Personnes
PHP :
https://www.php.net/docs.php
Angular :
https://angular.io/docs
https://www.ganatan.com/tutorials/demarrer-avec-angular
Bootstrap :
https://getbootstrap.com/docs/
Site web
Sites utiles :
https://stackoverflow.com/
https://magento.stackexchange.com/
https://github.com/darkslayer92/E-Commerce-Application-Nodejs-Angular-8-MYSQL
API REST :
https://fr.wikipedia.org/wiki/Representational_state_transfer
https://www.redhat.com/fr/topics/api/what-is-a-rest-api
https://practicalprogramming.fr/api-rest
LDAP :
https://jonlabelle.com/snippets/view/php/check-ldap-group-membership-in-php
https://www.php.net/manual/fr/book.ldap.php
Certificat SSL :
https://github.com/RubenVermeulen/generate-trusted-ssl-certificate
Page 47 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
10 Annexes
Planification initiale
Page 48 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 49 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 50 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Planification Final
Page 51 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 52 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 53 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 54 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Journal de travail
Page 55 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 56 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 57 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 58 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 59 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 60 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Guide utilisateur
Ce guide est aussi disponible depuis le lien « Documentation officielle » dans l’application.
10.4.1 Premier contact avec l’application
La nouvelle application Poker Waiting List dispose d’une barre de navigation qui vous accompagne
tout au long de son utilisation.
Le premier item à gauche est le Logo Barrière Poker qui vous retourne à la page d’accueil.
Le deuxième menu affiche les images qui seront affichées à l’écran.
Le prochain est le menu Gestion des tables, il vous redirectionne à la page pour gérer les tables de
poker.
Le dernier menu vous envoie à la page de connexion ou vous déconnecte de l’application.
La page d’accueil vous affiche les tables, leurs statuts (vert si la table est ouverte ou rouge si fermée),
les informations de la table ( Buy in, Big Blind et Small Blind) et les noms d’affichage à l’écran des
clients.
Elle vous permet aussi de cacher ou afficher les tables de cette page. Il vous suffit de cliquer sur les
boutons en haut de page.
10.4.2 Connexion
Pour pouvoir gérer les files d’attente et les table vous devez vous authentifier d’abord.
Une fois le bouton « Se connecter » de la barre de navigation activé, la page de connexion est affichée.
Vous devez donc saisir vos identifiants du domaine (Les identifiants du domaine sont les mêmes utilisés
pour ouvrir votre session sur l’ordinateur).
Page 61 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Après avoir saisi votre nom d’utilisateur et mot de passe cliquez sur le bouton « Connexion ».
Vous allez être redirigé vers la page d’accueil d’utilisateur connecté.
10.4.3 Gestion de la file d’attente
La page d’accueil d’un utilisateur connecté vous affiche toutes les tables et leurs statuts, ainsi que les
clients qui sont en attente. Depuis cette page vous pouvez procéder à plusieurs actions.
Comme pour l’ajout d’un client, un formulaire est affiché et doit être rempli totalement.
Important : Le nom d’affichage doit être unique.
Cliquez sur « Enregistrer pour terminer.
10.4.3.3 Déplacer un client de position
Le changement de position fonctionne via l’action de glisser et déposer.
Sélectionnez un client en laissant le bouton gauche de la souris pressé.
Déplacez-le vers le haut ou vers le bas puis lâchez le bouton de la souris.
Page 62 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 63 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Ce changement peut aussi être fait depuis la page d’accueil d’un utilisateur connecté.
10.4.5 Support
Pour avoir du support sur cette application, vous pouvez envoyer un ticket informatique à
simontreux@casinodemontreux.ch.
Page 64 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 65 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Page 66 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Fonctionnement de l’application
Page 67 sur 68
Winston Forti Meisen Poker Waiting List 15 avril 2021
Lieux de travail
Ma maison à Clarens Bureau Informatique, Casino de Montreux
Page 68 sur 68