TD noté DAWIN

Présentation

Consignes et rendu

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.

Prise en main et installation

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 !

Travail à faire

Ajout de la configuration

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.

Spectacles

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 :

  • Les spectacles terminés ne soient plus affichés,
  • Les spectacles apparaissent du plus proche dans le temps au plus lointain,
  • Les spectacles soient paginés par page de 4 si ils sont trop nombreux. Dans ce cas, on devrait voir une barre de ce type apparaître :

Contraintes sur les dates

Modifiez l'édition des spectacles pour respecter les contraintes suivantes:

  • La date de début doit être avant la date de fin,
  • Il ne peut pas y avoir deux spectacles en même temps.

Remarque: Plusieurs spectacles pourraient quand même être le même jour, si ils ne sont pas à la même heure.

Places

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.

Sécurité

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 à:

  • La configuration du site (cf parties précédentes),
  • La génération des sièges,
  • La création/édition/suppression des spectacles.

Les boutons n'apparaîtront pas dans l'interface aux utilisateurs non connectés, et ils ne pourront pas accéder aux pages correspondantes.

Réservations

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: