commit 2ed144ff8c58206c83978202d7846406c56b5be5
Author: Morph01 <145839520+Morph01@users.noreply.github.com>
Date: Mon Mar 18 22:31:29 2024 +0100
project basis
diff --git a/INSTALL.txt b/INSTALL.txt
new file mode 100644
index 0000000..0e9b384
--- /dev/null
+++ b/INSTALL.txt
@@ -0,0 +1,17 @@
+##############################################################
+# Fichier d'aide pour utiliser le site "BDWebAdmin" #
+# Cours de BDW1 - Bases de données et programmation web #
+# Nicolas LUMINEAU, Université Claude Bernard Lyon 1 #
+##############################################################
+
+
+Pour utiliser ce site sur le serveur de l'UE (bdw.univ-lyon1.fr), quatre étapes :
+
+- éditer le fichier "includes/config-bd.php" et modifier les valeurs des constantes "UTILISATEUR", "MOTDEPASSE" et "BDD".
+
+- envoyer le répertoire "BDWebAdmin" sur le serveur (soit avec scp ou rsync en ligne de commande, soit avec un outil graphique comme FileZilla).
+
+- ouvrir un navigateur et saisir l'url "http://bdw.univ-lyon1.fr/p1234567/BDWebAdmin/" en ayant remplacé p1234567 par votre propre identifiant.
+
+Pour la réalisation de ce TP, à chaque fois qu'un mot de passe vous est demandé, il s'agit de celui stocké dans la cellule 'password' de TOMUSS.
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a0e36c7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,629 @@
+# BDW - Projet
+
+# DeezCycle 🚴
+
+### UCBL - Département Informatique de Lyon 1 – Printemps 2024
+
+## Connect 🌐
+
+```
+ssh p22XXXXX@bdw.univ-lyon1.fr
+
+```
+
+## Transfer 📬
+
+```
+scp -r ./DeezCycle p2203977@bdw.univ-lyon1.fr:~
+```
+
+## Site 🎲
+
+https://bdw.univ-lyon1.fr/p22XXXXX/DeezCycle/
+
+## Table des matières
+
+**1 Informations générales sur le projet 1**
+
+**2 Spécification de l’application 2**
+
+**3 Mise en place de la Base de Données 5**
+3.1 Construction de la base de données................................... 5
+3.2 Intégration des données fournies.................................... 5
+
+**4 Les fonctionnalités 5**
+4.1 Page d’accueil et statistiques...................................... 6
+4.2 Fonctionnalité 1 : Liste des parties terminée et en cours....................... 6
+4.3 Fonctionnalité 2 : Mise en place de la partie.............................. 7
+4.4 Fonctionnalité 3 : Déroulé d’une partie................................. 8
+4.5 Fonctionnalité 4 : fonctionnalités supplémentaires........................... 9
+
+**5 Déroulé du projet et jalons 9**
+5.1 Les jalons................................................. 9
+5.2 Rendu du projet............................................. 9
+5.3 Calendrier récapitulatif......................................... 10
+
+**6 ANNEXE A : à propos de l’intégration de données 11**
+
+## 1 Informations générales sur le projet
+
+Le projet est à réaliser **en binôme** (les trinômes ne sont pas autorisés). La réalisation du projet en monôme
+nécessite l’accord du responsable de l’UE.
+
+À noter que la réalisation du projet nécessitera un travail personnel et/ou collaboratif complémentaire au
+travail réalisé durant les séances de TP. Il est donc important de choisir un binôme avec un emploi du temps
+compatible avec le vôtre.
+
+### À propos de l’évaluation du projet
+
+Le projet est évalué à travers les notes issues des différents QCM de Validation des Acquis pour le Projet,
+de l’évaluation des jalons et de la soutenance finale.
+
+**Gestion du plagiat**. Il est important de noter que toute ressemblance trop importante entre des projets
+sera sanctionnée par un 0 à chacun des protagonistes.
+
+**BDW est avant tout une UE d’introduction aux bases de données**. La non-utilisation d’une BD
+relationnelle dans le projet impactera forcément la note de manière négative.
+
+**Attention à la gestion de votre temps!** La mise en place de jalons réguliers est là pour vous aider dans
+ce sens. En effet, il a souvent été observé que des étudiants passaient trop de temps sur les aspects modélisa-
+tion (avec l’objectif d’avoir un schéma EA parfait) au détriment du développement des fonctionnalités dont la
+
+compréhension tardive imposait finalement de modifier le schéma EA _a posteriori_.
+
+## 2 Spécification de l’application
+
+L’objectif du projet est de développer un jeu de dés _via_ une application web. Ce jeu est fortement inspiré
+du jeu DICYCLE RACE présenté en cours.
+
+Le principe du jeu est le suivant : chaque joueur est un cycliste qui doit arriver le premier au bout du
+parcours qui est composé de 12 cartes. Pour avancer sur une case, il faut que le joueur réalise la combinaison de
+dés demandée sur la carte. Pour cela, chaque joueur dispose de 6 dés de couleur bleue, 6 dés de couleur jaune
+et 6 dés de couleur rouge. À chaque tour, le joueur choisit 6 dés parmi les 18 dés de couleurs pour essayer de
+valider une ou plusieurs cases en au plus 3 lancers. Différentes stratégies peuvent être mises en place en fonction
+du nombre de cartes que le joueur souhaite valider en un tour.
+
+Cette section va vous permettre de modéliser et concevoir la base de données sur laquelle s’appuiera votre
+application web. À partir de cette spécification, il est important de bien distinguer les données qui devront être
+stockées de celles qui seront calculées.
+
+Dans un premier temps, nous considérons les joueurs. Les joueurs sont identifiés par un entier numérique et
+on stocke le nom, le prénom, la date de naissance, un pseudo et une adresse mail.
+
+Un joueur joue des parties. Une partie est identifiée par une valeur numérique et on stocke la date et l’heure
+du début de partie ainsi que la durée une fois que la partie est terminée. Une partie a donc un état qui peut
+être ’A venir’ (partie paramétrée et créée mais non encore commencée), ’En cours’ (partie en cours de jeu ou
+interrompue) et ’Terminée’ (partie où tous les joueurs ont fini le parcours).
+
+Pour chaque partie, on dispose d’un plateau composé de plusieurs cartes. Chaque plateau a un nombre de
+cartes fixé. Par défaut, un plateau est composé de 12 cartes.
+
+Pour chaque carte, on dispose d’une image pour représenter le visuel de la carte. Une carte dispose d’un
+niveau (vert, orange ou noir) en fonction du niveau de difficulté de celle-ci. Chaque carte dispose également
+de points, là encore définis en fonction de la difficulté de la carte. Une carte est associée à une ou plusieurs
+contraintes de base. Ces contraintes ont un nom et on en considère quatre :
+
+— une contrainte nommée **"face de dé"** représentée par le couple ( _coul_ , _val_ ), où _coul_ ∈{’rouge’,’jaune’,’bleu’}
+et _val_ ∈{1, 2, 3, 4, 5, 6} : Pour valider cette contrainte, le joueur doit obtenir au moins un dé de couleur
+_coul_ avec la valeur _val_.
+— une contrainte nommée **"seuil de dés"** représentée par le triplet ( _coul_ , _seuil_ , _sens_ ), où _coul_ ∈{’rou-
+ge’,’jaune’,’bleu’}, _seuil_ ∈{2,.. ., 36} et _sens_ ∈{ _<_ , _>_ } : Pour valider cette contrainte, le joueur doit
+obtenir un score cumulé de valeurs de dés de couleur _coul_ qui soit strictement supérieur ou inférieur (selon
+la valeur de _sens_ ) à la valeur _seuil_.
+— une contrainte nommée **"les mêmes au choix"** représentée par le couple ( _coul_ , _nb_ ), où _coul_ ∈{’rou-
+ge’,’jaune’,’bleu’} et _nb_ ∈{2, 3, 4} : Pour valider cette contrainte, le joueur doit obtenir au moins _nb_ dés
+de même valeur et de couleur _coul_.
+— une contrainte nommée **"suite au choix"** représentée par le singleton ( _coul_ , _nb_ ), où _coul_ ∈ {’rou-
+ge’,’jaune’,’bleu’} et _nb_ ∈{2, 3, 4} : Pour valider cette contrainte, le joueur doit obtenir au moins _nb_
+dés de valeurs successives et de couleur _coul_.
+À partir de ces contraintes, il est possible d’associer à chaque carte une ou plusieurs contraintes. Ainsi, la
+Figure 1 représente trois cartes associées à une ou plusieurs contraintes "face de dés".
+
+La carte C005.png est associée à une contrainte "face de dé" (’bleu’,5). La carte C020.png est associée aux
+contraintes "face de dé" (’bleu’,2) et (’rouge’,4). La carte C039.png est associée aux contraintes "face de dé"
+(’jaune’,3), (’rouge’,3) (’bleu’,3). À noter que C039.png n’est pas associée à une contrainte "les mêmes au choix"
+car les couleurs imposées par dé sont différentes.
+
+```
+Figure 1– Exemple de 3 cartes associées à une ou plusieurs contraintes "face de dés"
+```
+
+```
+Figure 2– Exemple de cartes associées à des contraintes "face de dé", "seuil de dés" et "les mêmes au choix"
+```
+
+D’autres exemples sont sur la Figure 2.
+La carte C053.png est associée à une contrainte "seuil de dés" (’jaune’,14, ’ _>_ ’). La carte C072.png est asso-
+ciée aux contraintes "seuil de dés" (’rouge’,4, ’ _<_ ’) et "face de dé" (’jaune’,2). La carte C056.png est associée à
+la contrainte "les mêmes au choix" (’bleu’,3).
+
+Pour finir, la Figure 3 représente trois cartes associées à des contraintes "face de dé", "les mêmes au choix"
+et "suite au choix".
+
+```
+Figure 3– Exemple de 3 cartes associées à une ou plusieurs contraintes "face de dés"
+```
+
+La carte C070.png est associée aux contraintes "les mêmes au choix" (’jaune’, 2) et "face de dé" (’jaune’, 2).
+La carte C068.png est associée à la contrainte "série au choix" (’rouge’, 3). La carte C073.png est associée aux
+contraintes "les mêmes au choix" (’bleu’,2) et "série au choix" (’rouge’, 2).
+
+```
+À noter que sur les 3 figures, le niveau des cartes est représenté par la couleur de fond de la pastille des
+```
+
+points. Les cartes C005.png et C020.png sont des cartes vertes valant 1 point. Les cartes C053.png et C072.png
+sont des cartes vertes valant 2 points. Les cartes C039.png, C056.png, C070.png et C068.png sont des cartes
+oranges valant 4 points. Enfin la carte C073.png est une carte noire valant 5 points.
+
+Au début d’une partie, une couleur de pion est attribuée aléatoirement à chaque joueur. Chaque pion est
+placé sur la carte ’départ’.
+Un ordre de passage est choisi. Trois modes sont possibles :
+— Un mode dit **honneur au plus jeune** : l’ordre de passage se fait du plus jeune au plus ancien en fonction
+de la date de naissance des joueurs. Pour les joueurs nés le même jour, l’ordre de passage se fera en fonction
+du nom selon l’ordre lexicographique.
+— Un mode dit **honneur au moins expérimenté** : l’ordre de passage se fait du joueurs ayant fait le moins
+de parties à celui qui en a fait le plus. Pour les joueurs ayant fait le même nombre de parties, l’ordre de
+passage se fera en fonction du nom selon l’ordre lexicographique.
+— Un mode dit **aléatoire** : l’ordre de passage se fait de manière aléatoire.
+Une partie se déroule en plusieurs tours (autant que nécessaires pour que tous les joueurs franchissent la
+carte ’arrivée’).
+À chaque tour, chaque joueur choisit une main constituée de 6 dés dont un certain nombre de dés rouges, de
+dés jaunes et de dès bleus. À partir de cette main, le joueur a droit à au plus 3 lancers. Après chaque lancer, le
+joueur sélectionne le ou les dés qui permettent de valider une ou plusieurs contraintes de la prochaine carte sur
+laquelle il veut avancer. Si toutes les contraintes de la carte sont validées, le pion du joueur peut alors avancer
+sur cette carte.
+
+En termes de stratégie pour avancer plus vite, le joueur peut chercher à valider plusieurs cartes lors d’un
+même tour. Toutefois, s’il se trouve sur la carte _n_ , qu’il arrive à valider entièrement les contraintes de la carte
+_n_ +2mais que la carte _n_ +1n’est pas entièrement validée au bout des 3 lancers, le pion du joueur n’avancera pas.
+
+```
+L’ordre d’arrivée des joueurs permet d’établir le classement final.
+```
+
+La gestion des scores se fait de la manière suivante :
+— Pendant la partie, chaque joueur cumule les points des cartes qu’il a validées, points qui sont pondérées
+de la manière suivante, sachant qu’une tentative de validation correspond à un tour (et non un lancer) :
+— le joueur cumule 3 fois le nombre de points de la carte, s’il la valide à la première tentative ;
+— le joueur cumule 2 fois le nombre de points de la carte, s’il la valide à la seconde tentative ;
+— le joueur cumule le nombre de points de la carte, s’il la valide à la troisième tentative ;
+— le joueur ne cumule aucun point au-delà de la troisième tentative.
+— Pendant un tour, le nombre de points cumulés durant le tour est multiplié par le nombre de cartes validées
+durant ledit tour.
+— À l’arrivée d’un joueur, son score correspond au nombre de points cumulés durant la partie multiplié par
+la pondération _δ_ , où _δ_ correspond au nombre total de joueurs de la partie auquel on retranche le rang final
+dudit joueur augmenté de un. Ainsi, pour une partie avec 5 joueurs, le joueur de rang 1 verra son nombre
+de points cumulés multiplié par (5-1+1=) 5 et le dernier verra son nombre de points cumulés multiplié
+par (5-5+1) = 1.
+Élément très important : l’application doit permettre à un joueur de se déconnecter (volontairement ou non)
+et de pouvoir reprendre la partie là où il en était. Ainsi, la position des pions sur le plateau, la valeur des dés
+lancés durant un tour, le nombre de points cumulés, le nombre de tentatives de validation d’une carte par un
+joueur doivent être mémorisés en base.
+
+En marge des parties, on souhaite gérer également l’organisation de tournois et les classements de joueurs.
+Concernant les tournois, un tournoi est identifié par un entier numérique et il a un nom, une date de début et
+une date de fin. Un tournoi se décompose en phase. Une phase est identifiée relativement au tournoi par rapport
+à un niveau ’Poule de sélection’, ’Seizième de finale’, ’Huitième de finale’, ’Quart de finale’, ’Demi-finale’ et
+’Finale’. Un joueur participe à une phase de tournoi et on stocke l’information si le joueur a joué la phase et
+s’il s’est qualifié pour la phase suivante ou pas. À noter que si le joueur est qualifié pour la phase de niveau
+’Finale’, cela signifie qu’il a gagné le tournoi. Les différentes éditions des tournois sont gérées par le fait que les
+
+tournois peuvent être en lien les uns avec les autres. Ainsi, le tournoi nommé ’DeezCycle France 2024’ est
+en lien avec le tournoi nommé ’DeezCycle Race France 2023’. Le type de lien entre les deux tournois est un lien
+d’édition.
+Les classements se font en fonction des points cumulés et du nombre de parties jouées. Un classement est
+identifié par un entier et on stocke la portée du classement (’internationale’, ’nationale’, ’régionale’.. .). Il existe
+alors différents classements. Les joueurs peuvent être classés de manière individuelle ou en équipe. En effet, un
+joueur peut être membre d’une équipe. Les résultats des membres d’une équipe sont agrégés, ce qui permet de
+classer les équipes. Au même titre que les tournois, les classements peuvent être en lien. Ainsi, le Classement
+international ’World DeezCycle Ranking’ est en lien avec le classement national ’DeezCycle Race France’. Les
+types de lien peuvent être hiérarchiques.
+
+## 3 Mise en place de la Base de Données
+
+### 3.1 Construction de la base de données
+
+Dans un premier temps, vous allez concevoir la base de données à partir des spécifications précédentes. Votre
+modélisation doit respecter au mieux ces spécifications.
+
+1. Produire un diagramme Entité/Association selon les spécifications fournies _via_ l’outil _mocodo_ (version en
+ ligne https://www.mocodo.net/) ou Looping.
+2. Produire le modèle relationnel dérivé de votre schéma Entité/Association. Attention : si vous générez
+ automatiquement ce schéma avec l’outil de modélisation, il est fortement recommandé de le vérifier pour
+ éventuellement le corriger ou le compléter.
+3. Produire le script SQL permettant le création de votre base de données ( _idem_ que précédemment, il sera
+ sûrement nécessaire de le modifier si vous le générez automatiquement).
+
+### 3.2 Intégration des données fournies
+
+Dans un deuxième temps, vous allez migrer les données existantes fournies dans la base de données _dataset_
+dans votre base de données. L’utilisation de ces données est **obligatoire**. Les données fournies sont stockées
+dans une table qui ne correspond pas à votre modèle de données, il va donc être nécessaire de transformer les
+données fournies pour pouvoir les insérer dans vos tables. Ce processus, que l’on appelle _intégration de données_
+sera réalisé à travers des requêtes SQL que vous exécuterez dans PHPMyAdmin.
+L’étape d’intégration peut se décomposer en 3 parties :
+
+1. Réfléchir aux correspondances entre les données existantes et votre schéma ( _e.g.,_ à quel attribut de votre
+ schéma correspond tel attribut fourni). Vérifier si les types de données sont cohérents entre attributs
+ correspondants et quelles sont les transformations nécessaires au niveau des valeurs. Il est important de
+ comprendre que le jeu de données fourni n’est pas bien modélisé. En conséquence si vous modélisez votre
+ schéma de base de données avec l’objectif d’intégrer facilement les données fournies, votre schéma ne
+ respectera plus les spécifications demandées.
+2. Écrire les d’insertion du type _INSERT INTO maTable SELECT ... FROM donnees_fournies.instancesX ;_
+ permettant de peupler votre base.
+ Il est important de noter que la base _donnees_fournies_ sera à terme (avant la soutenance) supprimée. Donc
+ les données doivent être absolument récupérées dans votre propre base de données.
+
+**Remarque** : il n’est pas demandé de développer une fonctionnalité permettant de gérer l’intégration depuis
+votre interface Web.
+Pour bien comprendre le principe par l’exemple, vous pouvez vous référer à l’annexe A.
+
+## 4 Les fonctionnalités
+
+Dans ce projet, vous allez avoir à développer des interfaces associées aux fonctionnalités décrites dans cette
+section.
+Il est important dans un premier temps de définir (ou récupérer dans les TP4-5) ces primitives de votre
+modèle que vous pourrez alors utiliser pour le développement des fonctionnalités.
+
+Vous disposez avec le sujet des ressources graphiques associées aux cartes dans le répertoire RessourcesGra-
+phiques*DéBiclou. Les 75 cartes proposées sont définies dans la base \_donnees_fournies* dans la table _’ressources’_.
+
+### 4.1 Page d’accueil et statistiques
+
+En parallèle du processus d’intégration, vous pouvez commencer à mettre en place votre site WEB à partir
+du code fourni lors des TP précédent. Il est important de conserver l’approche MVC que l’on vous a apprise.
+
+**À propos des statistiques**
+
+La première fonctionnalité de votre application est de mettre en place la page d’accueil qui offre un descriptif
+de l’application et un ensemble d’informations et de statistiques. Parmi ces informations et ces statistiques, il
+est demandé d’avoir au moins :
+
+```
+— "un n-uplet contenant le nombre de joueurs, le nombre d’équipes, le nombre de classements, le nombre de
+tournois et la moyenne des participants par tournoi".
+— "les phases de tournoi (nom et année de tournoi, niveau de phase) jouées et pour lesquelles s’est qualifié
+l’utilisateur courant. Le résultat sera trié sur les années selon l’ordre antéchronologique puis sur les niveaux
+de phase selon l’ordre lexicographique inverse".
+— "le nombre d’équipes classées premières des classements et dont aucun des membres n’est premier dans
+un classement individuel".
+— "Pour les 3 dernières années, donner le nombre moyen de participants aux tournois".
+— "Donner le nom et le prénom des joueurs classés de manière individuelle dans le top 5 d’au moins 2
+classements de portée nationale".
+— "Pour chaque taille de plateau, donner le nombre de parties jouées avec un plateau de cette taille".
+— "Le top 5 des joueurs (pseudo) qui ont joué le plus de parties".
+```
+
+**à propos du design du site**
+
+Chaque page de votre site dispose d’une structure qui vous est imposée. En effet, pour chaque page vous
+devez avoir les cinq zones suivantes :
+
+— Un bloc "entête" ( __ ), qui contient le nom du site et un logo cliquable pour toujours revenir à la
+page d’accueil,
+— Un bloc "menu" ( _
+
+
\ No newline at end of file
diff --git a/vues/statistiques_vue.php b/vues/statistiques_vue.php
new file mode 100644
index 0000000..4425f7f
--- /dev/null
+++ b/vues/statistiques_vue.php
@@ -0,0 +1,41 @@
+
+
+
+
+
Statistiques de la base
+
+
+
+
+
+ = $message ?>
+
+
+
+
+
+
+
+
Propriété
+
Valeur
+
+
+
+
+
+
Nombre de tables
+
?
+
+
+
Nombre de tuples
+
?
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vues/tables_vue.php b/vues/tables_vue.php
new file mode 100644
index 0000000..39ca46a
--- /dev/null
+++ b/vues/tables_vue.php
@@ -0,0 +1,116 @@
+
+
+
+
+
Liste des tables
+
+
+
+
+
+ = $message_liste ?>
+
+
+
+
+
+
+
+
Nom de table
+
+
+
+
+
+
+
+ = $t['table_name'] ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Détails d'une table
+
+
+
+
+
+
+
+
+
+ ';
+ echo $att['nom'];
+ echo '';
+
+ }
+ ?>
+
+
+
+
+ ';
+ foreach ($row as $valeur) { // pour parcourir chaque valeur de n-uplets
+
+ echo '