Menu:
Notre groupe de projet a Ă©tĂ© sollicitĂ© par le FCSM pour dĂ©velopper un outil informatique rĂ©pondant aux besoins des Ă©tudiants de votre formation universitaire, ainsi que le service de dĂ©veloppement du fan club du FCSM. Il s'agissait globalement d'organiser la mise en contact des Ă©tudiants qui Ă©tudient dans la mĂȘme ville, qui habitent dans la mĂȘme ville, et qui se rendent aux mĂȘmes endroits pour leurs Ă©tudes, loisirs ou pour les courses. La cible loisir se restreindra Ă l'accĂšs au FCSM. Peut-ĂȘtre que les Ă©tudiants se dĂ©placent aux mĂȘmes moments. C'est ce que l'application va dĂ©terminer et proposer des dĂ©placements en commun par le biais du covoiturage.
Pour réaliser ce projet, nous avons choisi de répartir les tùches parmi les 4 personnes composant notre groupe:
- IDIRI Anas : Déploiement (Docker), Développement et implémentation du backend, MCD, MPD, Test du site
- MANZINALI Enzo : DĂ©ploiement (Docker), Administration systĂšme, DĂ©veloppement backend, scripting (dbmgr)
- MARC Romain : MCD, MPD, Documentation, Base de donnée, Développement frontend, Test du site
- CONIGLIO Alexis : Développement frontend, Recueil de données pour test
Le backend sera realisĂ© Ă l'aide de PHP, plus particuliĂšrement Ă l'aide du framework Laravel. La base de donnĂ©e que nous avons choisie est MariaDB (ou MySQL). Quant au frontend il sera rĂ©alisĂ© Ă l'aide de HTML et de CSS natif. Pour faire une parenthĂšse sur le Framework Laravel, celui-ci utilise l'approche MVC (ModĂšle -> couche d'abstraction pour l'accĂšs aux relations, Vue -> partie HTML/CSS/JS, Controller -> code qui exĂ©cute la logique avec les ModĂšles et qui affiche les vues) Celui-ci vient avec d'autres fonctionnalitĂ©s, tels que les Middlewares, la validation des requĂȘtes, les migrations, les seeders et j'en passe.
La partie backend et des explications plus avancée de sa réalisation seront abordées dans la partie guide développeur.
Voici le MCD de la base de donnée:
L'idée de base est la suivante:
- L'utilisateur s'inscrit avec son e-mail son nom et son prénom, sa formation et son sous-groupe. Son id_véhicule vaut NULL.
- Un seeder remplit automatiquement la table Emploi du temps, si on veut récuperer l'EDT d'un utilisateur on compare Utilisateur.sous_groupe et Emploidutemps.sousgroupe.
- L'utilisateur peut annoncer qu'il possÚde un véhicule qu'il rend disponible pour le covoiturage en utilisant le formulaire page Véhicule.
- Si l'utilisateur possÚde un véhicule il pourra créer un équipage avec lequel il organisera par la suite des déplacements.
- L'utilisateur ajoute des Lieux. Un lieu de domiciliation et un lieu de travail (grace auxquels il aura ses recommendations). Si il possÚde un véhicule il pourra également ajouter un Lieu d'arrivé ou de départ pour les déplacements qu'il organisera.
- Si l'utilisateur possÚde un équipage il peut organiser des déplacements. Ceux-ci auront un lieu de départ et un lieu d'arrivé que l'utilisateur pourra choisir parmi tous les lieux qu'IL a ajouté.
- Enfin, un utilisateur rejoint un équipage. Puisqu'il le rejoint on considÚre qu'il participe à tous les déplaceme,nts de celui-ci.
Cette application s'adresse aux Ă©tudiants de l'universitĂ© de Nord Franche-ComtĂ© ayant pour objectif le dĂ©placement entre leur domicile, l'IUT, le stade Bonal et d'autres lieux d'intĂ©rĂȘt, tel que leur lieu de travail.
1. âïž Un email (personnel ou universitaire) est requis pour la crĂ©ation d'un compte.
2. đ Vous pouvez Ă©galement choisir d'utiliser, ou non, l'A2F (Authentification Ă deux facteurs avec TOTP).
3. đ L'utilisateur peut ajouter un vĂ©hicule Ă son profil au niveau de la page VĂ©hicule s'il veut effectuer du covoiturage. L'immatriculation du vĂ©hicule ainsi que le nombre de place doivent ĂȘtre introduits. Si vous ne souhaitez plus prendre en charge le covoiturage, un formulaire est disponible sur la mĂȘme page si vous souhaitez supprimer votre vĂ©hicule.
4. đïž L'utilisateur devra introduire au niveau de la page Lieux une adresse de domicile et de travail pour bĂ©nĂ©ficier des recommendations (page Recommendation). Il peut Ă©galement ajouter des lieux "pris en charge" (uniquement s'il possĂšde un Ă©quipage) qu'il pourra par la suite utiliser en lieu de dĂ©part ou d'arrivĂ© lors de la rĂ©alisation de dĂ©placements (page DĂ©placement) avec son Ă©quipage.
5. đ„ La page Ă©quipage permet de rejoindre des Ă©quipages ou d'en crĂ©er. Vous pouvez crĂ©er un et un seul Ă©quipage dont vous serez nommĂ© chef au niveau de la page Ăquipage si vous possĂ©dez un vĂ©hicule. Lorsque vous crĂ©ez un Ă©quipage, vous pouvez crĂ©er des dĂ©placements que vous prendrez en charge avec votre vĂ©hicule. Ces dĂ©placements auront pour Lieu de dĂ©part et Lieu d'arrivĂ© un lieu prĂ©alablement introduit dans la page Lieux que vous choisirez. Vous indiquerez Ă©galement la date et la durĂ©e de ce trajet.
6. đšâđ©âđ§ De maniĂšre gĂ©nĂ©rale, sur la page Ăquipages, vous pouvez rejoindre une Ă©quipe par son nom, ou quitter une Ă©quipe prĂ©alablement rejointe. Le chef de l'Ă©quipage aura en plus une section lui offrant la possibilitĂ© d'inviter des membres, ou d'exclure des membres de son Ă©quipe.
7. đ Pour prĂ©parer ou visualiser tous les dĂ©placements auxquels vous avez souscrit, rejoindre la page DĂ©placement. Si vous possĂ©dez un Ă©quipage, vous aurez la possibilitĂ© d'organiser des dĂ©placements avec celui-ci. En dessous, vous aurez une visualisation de tous les dĂ©placements auxquels vous avez souscrit. Pour faire simple, lorsque vous rejoignez un Ă©quipage, vous pourrez visualiser les dĂ©placements prĂ©vus par celle-ci sur cette page. Par dĂ©faut, vous participez Ă tous les dĂ©placements rĂ©alisĂ©s par les Ă©quipages auxquels vous appartenez. De ce fait, vous verrez sur cette page la totalitĂ© des dĂ©placements prĂ©vus par la totalitĂ© des Ă©quipages que vous avez rejoint.
8. đ Pour trouver un Ă©quipage prenant en charge un certain dĂ©placement, vous pouvez visualiser vos recommendations de dĂ©placements dans la section Recommendations. Celle-ci vous propose automatiquement des dĂ©placements vers votre Lieu de travail ou vers votre Lieu de domiciliation, et vous offre la possibilitĂ© de rejoindre les Ă©quipages les organisant. Vous pouvez Ă©galement chercher un dĂ©placement prĂ©cis dans la page d'Accueil Ă l'aide de la barre de recherche. Celle-ci vous permet de trier par Lieu de dĂ©part, Lieu d'arrivĂ© et date (il n'est pas obligatoire de complĂ©ter tous les champs), et vous offrira Ă©galement la possibilitĂ© de rejoindre l'Ă©quipe organisant ce dĂ©placement.
9. đ€ Une page profile est disponible et permet de changer les informations utilisateurs tels que le nom, l'email, le mot de passe, la formation ou le sous groupe.
10. âïž Il existe une partie administrateurs disponible uniquement pour les utilisateurs possĂ©dant le role Admin (admin@localhost:admin, ou changer le champs is_admin de la table en le passant Ă true). Celle-ci permet d'intĂ©ragir avec un script nommĂ© dbmgr. Si vous souhaitez en savoir plus, rendez-vous dans la section Panel Administrateur.
Si vous souhaitez installer l'application sur votre serveur ou votre ordinateur personnel, suivez les Ă©tapes ci-dessous.
Ătant basĂ© sur Laravel, l'installation du projet nĂ©cessitera composer et php. Elle nĂ©cessitera Ă©galement que vous installiez mysql ou mariadb pour la partie base de donnĂ©e. Vous avez tout le loisir d'installer cette Tech-Stack sur votre Serveur/PC, cependant nous avons jugĂ© qu'il Ă©tait plus pratique de mettre Ă votre disposition un Dockerfile ainsi qu'un docker-compose afin d'une part de nous permettre d'automatiser le dĂ©ploiement, et d'autre part de vous faciliter son installation.
Vous aurez donc besoin d'installer le docker engine si vous ĂȘtes sur Linux, ce qui est fortement recommandĂ©. Si vous etes sur MAC OS ou Windows, installez Docker Desktop en suivant la documentation officielle de Docker.
ROuvrez un terminal, rendez-vous dans le bon dossier et lancez docker en tant que root (ou Ă©quivalent selon l'OS que vous utilisez):
git clone <LE LIEN FOURNI EN ANNEXE>
cd SAE23
docker-compose up
Afin de faciliter la phase de développement, nous avons réalisé un script: dbmgr. à noter que celui-ci n'est pas qu'un script; c'est une dépendance de l'application utilisée au niveau de la page d'administration. Pour l'utiliser vous aurez besoin de lui donner les droits d'exécution. Pour ce faire, rendez vous dans le dossier du projet, et tapez:
chmod +x dbmgr
Vous pourrez alors afficher le menu d'aide Ă l'aide de la commande:
./dbmgr -h
Database management tool
Usage: ./dbmgr [OPTIONS] [FILE]
Options:
-r,--remove <INPUT_JSON> JSON to database (replace)
-a,--add <INPUT_JSON> JSON to database (add)
-x,--export <OUTPUT_JSON> Database to JSON
-ct,--clear-table <TABLE> Delete all records of one table
-dd,--drop-database Drop the database
-m,--migrate Migrate & Seed the database with Laravel artisan
Ainsi, ce script permet d'exporter la base de donnée sous forme d'un fichier JSON, d'importer un fichier JSON (remplacer complÚtement la base de donnée OU ajouter le contenu du JSON dans la base de donnée), de supprimer une table, de supprimer la base de donnée, ou de migrer + seeder la base de donnée (Créer la base de donnée + les tables + ajouter un jeu de test).
Suivez les Ă©tapes vue ci-dessus pour utiliser dbmgr, et tapez:
./dbmgr -m
Ceci va utiliser les seeders de Laravel pour préremplir votre base de donnée. Ceci ajoutera entre autre un utilisateur administrateur:
admin@localhost : admin
Si vous utilisez le serveur web installé par nos soins (dont le lien sera fourni en annexe), sachez que la DB à déjà été seedée. Vous pourrez donc vous connecter à la partie administration, puis vous rendre dans le panel admin.
Si vous voulez visualiser ou modifier la base de donnée de maniÚre simple et efficace, vous pouvez utiliser phpmyadmin. Pour ce faire, rendez-vous sur /phpmyadmin. Par exemple si le site est disponible sur http://127.0.0.1/ rendez vous sur http://127.0.0.1/phpmyadmin/
- Nom d'utilisateur: root
- Mot de passe: root
- Nom de la base de donnée : sae23
Laravel est le Framework php le plus populaire, cependant il n'est pas toujours aisé de comprendre à quoi servent les répértoires. Il n'est également pas évident de savoir ce qui était la avec le framework et ce qui a été ajouté par le développeur du projet. Je vous propose une overview rapide des différents fichiers et répértoire afin que vous ayez une meilleure compréhension de comment fonctionne ce framework.
Fichiers
./artisan C'est un script qui vient par défaut avec Laravel. Il permet de créer des controllers, des request, des Models, des Migrations, de lancer les migrations, de Seed la base de donnée, de lancer un serveur web ... En bref c'est le couteau suisse de Laravel
./composer.json Relatif à composer de maniÚre générale (composer est le gestionnaire de dépendances de Laravel). Ce fichier contient le nom du projet, les dépendances du projet, les dépendances de développement (des packages que le développeur installe pour s'aider pendant le développement, comme une barre qui affiche le temps que prennent les requetes SQL par exemple), et la partie autoloading.
./.env Fichier qui contient en général toutes les "constantes globales" du projet. Par exemple le nom de la base de donnée, le nom d'utilisateur et le mot de passe de la base de donnée etc...
./.gitignore Contient tous les fichiers Ă ne pas commit sur le repo git.
./dbmgr On traite de ce script ici.
Répértoires
tree -L 1
âââ app
âââ artisan
âââ bootstrap
âââ composer.json
âââ composer.lock
âââ config
âââ database
âââ dbmgr
âââ Makefile
âââ phpmyadmin
âââ phpunit.xml
âââ public
âââ README.md
âââ resources
âââ routes
âââ storage
âââ tests
âââ vendor
La majorité des répértoires présents ne seront pas vu ici, certains étant utile lors de projets plus complexe, et certains n'étant rien de plus que des dépendances de Laravel. Ce qui va nous intéresser ici, sont les dossiers app,database,public,ressource et routes.
Commençons au plus simple, le dossier public contient le CSS minifié, le JS minifié, les images ... Petite particularité, nous avons placé phpmyadmin dans le dossier public de sorte à ce que vous puissiez gérer la base de donnée avec. Nous en parlons un peu plus tard.
Le dossier resources contient le CSS non minifié ainsi que le JS non minifié. Il contient également les vues en blade, qui est le template engine de Laravel. Ces vues contiennent le HTML, et le code Blade qui permet l'affichage des choses sur la page. Par exemple on pourra afficher le contenu d'une variable, parcourir un tableau passé par le controlleur...
Le dossier route contient plusieurs fichiers, mais un seul nous intéresse: le fichier web.php. Celui-ci contient les déclarations des routes. C'est lui qui permet de dire "Si l'utilisateur va sur /admin, appelle le controlleur (une classe PHP qui contiendra la logique).
Le dossier database contient 2 sous dossiers essentiels. D'abord le dossier migration, qui sont des fichiers PHP qui expliquent comment créer les tables, et ce qu'elles doivent contenir comme row. Ainsi, nous avons un fichier par table. Le second dossier est le dossier seeder, il contient des classes qui nous permettent de remplir la base de donnée avec des informations de test. Ici nous avons créer 4 seeders pour les emplois du temps des 4 groupes, ainsi qu'un seeder user qui rajoute l'administrateur et 2 autres utilisateurs normaux (un avec 2FA activé, et l'autre sans 2FA).
Pour finir, le plus complexe, le dossier app.
Ce dossier contient les ModÚles. Un modÚle est une classe PHP qui agit comme une couche d'abstraction vers la table SQL. Pour faire simple, on a un modÚle par table, et on utilisera ce modÚle quand on voudra intéragir avec la table. Les modÚles contiennent aussi les relations ce qui est trÚs pratique. On utilisera donc une syntaxe du type
Utilisateurs::select("nom") -> where(id, "=", 10) -> orWhere(id, "=", 20) -> orderBy("id", desc);
au lieu de faire
SELECT nom FROM utilisateurs WHERE id=10 OR id=20 ORDER BY id DESC;
L'avantage, c'est qu'on peut changer MariaDB par PostgreSQL, par Microsoft SQL Server ou par n'importe quel DBMS sans avoir à réécrire le code SQL.
Un middleware est un bout de code qui est executé aprÚs la route, mais avant l'appel du code du Controller. Un exemple tout simple est l'exemple d'une page protégée par l'authentification.
Admettons qu'on ait une page /admin. Quand on arrive sur cette page on a un peu de logique à exécuter, on créera donc un controlleur AdminController. Pour faire le mapping on ira dans le fichier route, et on dira "La route /admin appelle le code présent dans le controller AdminController".
Grùce au middleware, on va dire "Entre l'accÚs à la route /admin et l'appel du Controller AdminController, execute telle fonction". On pourra par exemple utiliser un petit bout de code qui vérifie que l'utilisateur est bien connecté, et est bien administrateur.
Une request est une couche d'abstraction Ă©galement. Ici pour rester simple, on va dire que plutot que d'intĂ©ragit avec $_POST on intĂ©ragit avec l'objet Request, qui est passĂ© au Controlleur par une mĂ©thode qu'on appelle Dependency Injection. Ce qui est intĂ©ressant, c'est qu'on peut effectuer de la validation sur ces requĂȘtes pour vĂ©rifier que les champs sont bien remplis, et contiennent ce que l'on souhaite.
Contient les controlleurs, qui sont des classes PHP, qui contiennent des méthodes. Les méthodes contiennent la logique PHP. En général, on a une route qui map une URL a une méthode d'un Controlleur. Le controlleur fait des choses avec les ModÚles (ajoute, supprime, édite des choses dans la table) et retourne une Vue à laquelle il passe des informations.