Ce travail est à produire individuellement, vous devrez pour cela créer un dépôt git privé. Le code de base est présent sur ce dépôt GitLab.
Commencez par faire un Fork du dépôt, et partagez le avec moi (en tant que "Reporter")
Vous devez impérativement renseigner votre dépôt à l'aide d'une remise sur le Moodle du cours dans l'espace de remise
La date limite de remise est le 5 Mars 2023 inclu (23:59), ce qui signifie que vos dépôts seront clonés et ne seront plus mis à jour
Information: nous exécutons des scripts automatiques pour détecter le plagiat de code, si vous nous rendez des devoirs similaires, nous reviendrons à la fois vers le plagieur et le plagié.
La base de code est une application Symfony de gestion des réservations dans une salle de spectacles.
Installez les dépendances :
symfony composer install
Modifiez alors le fichier .env.local
pour qu'il contienne les paramètres de connexion valide à un serveur MySQL
et créez les tables:
symfony console doctrine:schema:update --force
Nous allons maintenant insérer des données dans la base, pour cela:
symfony console doctrine:fixtures:load
Cette commande charge des données dans la base de données à partir du code contenu dans
src/DataFixtures/AppFixtures.php
. Dans le code de base, elle permet de créer des catégories.
Lancez alors le serveur:
symfony serve
Et connectez vous à http://localhost:8000. Vous devriez voir quelque chose qui ressemble à ceci:
Note: Le code est fourni avec des entités qui décrivent une base de données. Mais libre à vous de les modifier si vous le souhaitez !
Comme vous le remarquez, certaines valeurs sont indiquées "en dur" dans le code, notamment:
On souhaiterait que ces informations soient modifiables par l'administrateur du site.
Ajout de la configuration en base
Ajoutez une entité Configuration
, qui permettra de stocker ces informations en base.
Modifiez ensuite src/DataFixtures/AppFixtures.php
pour créer une configuration initiale lors de la création
de la base de données.
Utilisation de la configuration
Modifiez le site de manière à utiliser ces informations au lieu de celles codées en dur.
Changement de la configuration par l'interface
Ajoutez une page "Configuration" accessible dans le menu permettant de modifier ces informations.
Affichage des catégories
Faites apparaître les catégories correspondant à un spectacle dans son cadre. Essayez de vous rapprocher le plus possible de l'affichage suivant :
Affiches
Ajoutez des affiches aux spectacles, que l'on pourra envoyer dans l'édition du spectacle. Elles apparaîtront dans l'encart du spectacle dans la liste.
Changement de l'affichage des spectacles
Modifiez la page affichant la liste des spectacles de manière à ce que :
Contraintes sur les dates
Modifiez l'édition des spectacles pour respecter les contraintes suivantes:
Remarque: Plusieurs spectacles pourraient quand même être le même jour, si ils ne sont pas à la même heure.
Génération des places
Il existe une interface permettant de générer des places, mais elle n'est pas fonctionnelle! Écrivez le code de manière à générer dans la base de données les places existantes.
Remarque: si jamais la salle s'agrandit, on pourrait vouloir re-générer les places. Dans ce cas, il est important de ne pas écraser les entrées existantes dans la base de données, car elles pourraient être utilisées plus tard dans des relations (par exemple avec des réservations).
Nombre de places
Modifiez la page d'accueil de manière à ce qu'elle affiche le nombre de places dans la base de données au lieu de 100 en dur.
Compte admin.
Le premier utilisateur qui créera son compte sur le site sera marqué comme administrateur (et pas les suivants).
Règles de sécurité
Seul l'administrateur aura accès à:
Les boutons n'apparaîtront pas dans l'interface aux utilisateurs non connectés, et ils ne pourront pas accéder aux pages correspondantes.
Formulaire de réservation
Dans l'encart d'un spectacle, ajoutez un lien "réserver" qui n'apparaîtra que pour les utilisateurs connectés. Il permettra de créer une réservation pour le spectacle. Il faudra alors fournir un nom, et une ou plusieurs places que l'on souhaite réserver. On stockera la date de la réservation, ainsi que l'utilisateur qui l'a réalisé.
Si un utilisateur ayant déjà une réservation clique à nouveau sur "réserver", il pourra alors éditer sa réservation.
Attention: on ne devrait pas pouvoir choisir des places qui ont déjà été réservées par quelqu'un d'autre, à vous de proposer une solution ergonomique !
Nombre de places restantes
Dans l'encart d'un spectacle, affichez le nombre de places restantes (qui ne sont pas réservées) pour ce spectacle.
Plan
Modifiez le "Plan" de manière à ce qu'il affiche les places qui proviennent réellement de la base de données. Vous indiquerez en opacité réduite les places qui sont occupées. Pour les graphismes, inspirez vous du code de base qui fournit déjà un exemple codé "en dur":
Visualisation d'une réservation
Ajoutez une page telle qu'un administrateur puisse, en cliquant sur une place occupée, visualiser la réservation correspondante.
On affichera le nom entré dans la réservation, les places qui y sont associées, et l'e-mail du compte de l'utilisateur qui a fait la réservation.
Remarque: Utilisez le plus possible des requêtes qui récupèrent directement les informations nécessaires, de manière à faire travailler la base de données, et éviter d'envoyer un grand nombre de requêtes à la base. Gardez un oeil sur le compteur qui apparaît dans le profiler en bas: