Skip to content

corslyn/SAE23

Repository files navigation

FCSMobilité

Réalisé avec Laravel

Menu:

đŸ‘„ PrĂ©sentation gĂ©nĂ©rale

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: WHITETEME drawio

Et voici le MPD: ONDARK drawio

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.

📝 Guide de l'utilisateur

Utilisation simple en 10 Ă©tapes

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.

đŸ› ïž Guide du dĂ©veloppeur

⚙ Installation

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

⌚ Script dbmgr

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).

đŸ‘šâ€đŸ’» Panel administrateur

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.

đŸ›ąïž PHPMyAdmin

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

🌐 ComprĂ©hension gĂ©nĂ©rale de Laravel

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.

Public

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.

Resources

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...

Routes

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).

Database

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).

App

Pour finir, le plus complexe, le dossier app.

App/Models

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.

App/Http/Middlewares

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.

App/Http/Requests

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.

App/Http/Controllers

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •