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 23 Janvier 2022 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 qui permet aux utilisateurs de créer et voter pour des sondages.
Installez les dépendances à l'aide de composer :
composer install
Modifiez alors le fichier .env
pour qu'il contienne les paramètres de connexion valide à un serveur MySQL
et créez les tables:
symfony console doctrine:schema:create
Nous allons maintenant insérer des données dans la base, pour cela:
symfony console doctrine:fixtures:load
À tout moment, vous pouvez re-lancer cette commande pour re-générer les données dans la base. En particulier, cela permet de disposer de sondages qui sont terminé ou non (car les dates de fin sont choisies aléatoirement autout de l'heure actuelle).
Lancez alors le serveur web et testez:
symfony serve
Le mot de passe de tous les comptes est password
Vous devriez voir quelque chose qui ressemble à ceci:
Modifier le code afin que la page active soit soulignée dans le menu de navigation
(Dans le code de base, c'est toujours le lien "Accueil" qui est souligné à l'aide de la
classe Bootstrap text-decoration-underline
)
Modifiez le formulaire de création afin que la date de création ne soit plus un champ, mais qu'elle soit renseignée par la date courante automatiquement lors de la soumission (d'ailleurs, elle ne doit plus etre éditable dans le formulaire d'édition)
Modifiez le formulaire de création afin que la date de fin soit pré-remplie avec la date courante + 1 semaine lorsque la page se charge
Modifiez le formulaire de création de sondage de manière à ne pas autoriser la création si il n'y a pas au moins 2 réponses possibles
La barre de connexion présente en haut du site:
N'est pas fonctionnelle (si vous souhaitez tester: la page /login
existe déjà).
Dans le code de base, tout le monde peut accéder à tout.
Les votes ne sont pour l'instant pas pris en compte lorsqu'on soumet le formulaire.
Enregistrez les votes des utilisateurs. Attention aux règles suivantes:
Modifiez le code de la liste des sondages pour que les sondages auxquels l'utilisateur courant a déjà voté apparaissent en grisé / opacité réduite.
Lorsque l'utilisateur a voté, ou que le sondage est clos, affichez les résultats du sondage sous forme de barres remplies par le pourcentage de votes.
Sur la page d'accueil, affichez les 4 sondages qui ont eu le plus de vote de la part des utilisateurs,
parmi les sondages qui sont terminés (la date actuelle est supérieure à date_end
) et qui ont été
créé il y a moins de 7 jours (date_creation
date d'il y a moins de 7 jours).
Ajouter une entité Category
dans la base, qui a seulement un attribut name
, et faites en sorte qu'un
sondage soit dans une (et une seule) catégorie (obligatoirement).
Modifiez le code d'initialisation de src/DataFixtures/AppFixtures.php
de manière à ce que quelques catégories
existent au moment du chargement de la fixture, et que les sondages existants soient rangés dans des catégories
Modifiez le formulaire de création et d'édition d'un sondage afin qu'il soit nécessaire de choisir une catégorie pour le sondage
Dans la liste des sondages, affichez sa catégorie.
Lorsque l'on clique sur le nom d'une catégorie dans la liste des sondages, filtrer les résultats de manière à ce que l'on voit uniquement les sondages de cette catégorie (dans ce cas, la pagination doit toujours fonctionner).
Ajoutez une nouvelle page "catégories", accessible dans le menu principal, qui liste les catégories. Un clic sur l'une d'elle doit afficher la liste des sondages filtrés.
Triez la liste des catégories de celle qui a le plus de succès à celle qui en a le moins (le succès étant défini comme le nombre de votes donné par les utilisateurs aux sondages).
On ne peut actuellement pas enlever une réponse possible lorsque l'on édite un sondage. Modifiez le code afin que cela soit possible.
Pour cela, vous aurez besoin de faire du JavaScript. Vous pouvez vous aider de cette page de la documentation.
Constatez que dans templates/poll/index.html.twig
, le comptage du nombre de réponses à un sondage se fait
en additionnant tous les éléments depuis TWIG. Cela provoque un grand nombre de requêtes, comme on peut le constater
dans le profiler:
Changez le code afin de réduire ce nombre de requêtes.