You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web/Sources/src/console/Console.php

291 lines
8.5 KiB

<?php
namespace Console;
use Model\Athlete;
use Model\Coach;
use Model\Role;
use Stub\StubData;
use Manager\DataManager;
$model = new StubData(); // Couche d'accès au model
function clearScreen()
{
system('clear || cls');
}
function displayAuthMenu()
{
clearScreen();
echo "\n\n";
echo " +--------------------------+\n";
echo " | Authentification |\n";
echo " +--------------------------+\n";
echo " | 1. Se connecter |\n";
echo " | 2. S'inscrire |\n";
echo " | 0. Quitter |\n";
echo " +--------------------------+\n";
echo " Choisissez une option: ";
}
function displayMainMenu()
{
clearScreen();
echo "\n--- Menu Principal ---\n";
echo "1. Accueil\n";
echo "2. Profil\n";
echo "3. Analyse de la fréquence cardiaque\n";
echo "4. Gestion sociale\n";
echo "5. Athlètes (Coach seulement)\n";
echo "6. Paramètres\n";
echo "7. Notifications\n";
echo "0. Se déconnecter\n";
echo "Choisissez une option: ";
}
function displayProfileMenu()
{
clearScreen();
echo "\n--- Profil ---\n";
echo "1. Informations de l'utilisateur\n";
echo "2. Historique d'activité\n";
echo "Voir les statistiques de condition physique Général";
echo "3. Liste d'amis\n";
echo "4. Paramètres de confidentialité et visibilité\n";
echo "5. Synchroniser un appareil\n";
// Importer des données (FIT/GPX/TCX)/Manuel
// Synchroniser l'appareil de fréquence cardiaque
// Synchroniser l'app mobile
echo "0. Retour au menu principal\n";
echo "Choisissez une option: ";
}
function displayHeartRateAnalysisMenu()
{
clearScreen();
echo "\n--- Analyse de la fréquence cardiaque ---\n";
echo "1. Options d'importation des données\n";
echo "2. Graphiques et analyses\n";
echo "3. Outils de partage\n";
echo "0. Retour au menu principal\n";
echo "Choisissez une option: ";
}
function displayCoachMenu()
{
clearScreen();
echo "\n--- Menu Coach ---\n";
echo "1. Liste des athlètes\n";
echo "2. Statistiques globales\n";
echo "3. Analyses par athlète\n";
echo "4. Gérer la liste de mes athlètes\n";
// Gérer les athlètes (comprend : Ajouter un athlète, Supprimer un athlète, Consulter les statistiques d'un athlète)
echo "0. Retour au menu principal\n";
echo "Choisissez une option: ";
}
function displaySocialManagementMenu()
{
clearScreen();
echo "\n--- Gestion sociale ---\n";
echo "1. Rechercher des utilisateurs\n";
echo "2. Gérer la liste d'amis\n";
// Ajouter des amis
// Supprimer des amis ...
echo "3. Options de partage\n";
echo "0. Retour au menu principal\n";
echo "Choisissez une option: ";
}
function displaySettingsMenu()
{
clearScreen();
echo "\n--- Paramètres ---\n";
echo "1. Gérer les informations de compte\n";
// Modifier le profil du athlète et coach
echo "2. Personnaliser le profil public\n";
echo "3. Configurer les alertes\n";
echo "4. Supprimer mon compte"
echo "0. Retour au menu principal\n";
echo "Choisissez une option: ";
}
function loginUser(DataManager $model)
{
try {
echo "\nEntrez votre nom d'utilisateur: ";
$username = trim(fgets(STDIN));
echo "Entrez votre mot de passe: ";
$password = trim(fgets(STDIN));
if ($model->userMgr->login($username, $password)) {
return true;
} else {
echo "Erreur de connexion. Essayez encore.\n";
sleep(2);
return false;
}
} catch (\Exception $e) {
// Handle other exceptions
echo "Une erreur s'est produite : " . $e->getMessage() . "\n";
sleep(2);
return false;
}
}
function registerUser(DataManager $model)
{
try {
echo "\nEntrez votre nom: ";
$nom = trim(fgets(STDIN));
echo "Entrez votre prénom: ";
$prenom = trim(fgets(STDIN));
echo "Entrez votre adresse email: ";
$email = trim(fgets(STDIN));
echo "Entrez votre mot de passe: ";
$motDePasse = trim(fgets(STDIN));
echo "Entrez votre sexe ( M :Homme / F :Femme ): ";
$sexe = trim(fgets(STDIN));
echo "Entrez votre taille (en mètres): ";
$taille = floatval(trim(fgets(STDIN)));
echo "Entrez votre poids (en kilogrammes): ";
$poids = floatval(trim(fgets(STDIN)));
echo "Entrez votre date de naissance (au format YYYY-MM-DD): ";
$dateNaissanceStr = trim(fgets(STDIN));
$dateNaissance = new \DateTime($dateNaissanceStr);
if (!$dateNaissance) {
throw new \Exception("Date de naissance non valide. Format attendu : YYYY-MM-DD");
}
echo "Entrez votre rôle (ex. Athlete,Coach , etc.): ";
$roleName = trim(fgets(STDIN));
$registrationData = [
'nom' => $nom,
'prenom' => $prenom,
'email' => $email,
'sexe' => $sexe,
'taille' => $taille,
'poids' => $poids,
'dateNaissance' => $dateNaissance,
'roleName' => $roleName
];
if ($model->userMgr->register($email, $motDePasse,$registrationData)) {
echo "Inscription réussie. Connexion automatique...\n";
return true;
} else {
echo "L'inscription a échoué. Veuillez réessayer.\n";
return false;
}
} catch (\Exception $e) {
echo "Erreur lors de l'inscription : " . $e->getMessage() . "\n";
sleep(2);
return false;
}
}
// const auth = getAuth();
// signInWithEmailAndPassword(auth, email, password)
// const auth = getAuth();
// signOut(auth).then(() => {
// // Sign-out successful.
// }).catch((error) => {
// // An error happened.
// });
while (true) {
$loggedIn = false;
if (!$loggedIn) {
displayAuthMenu();
$choice = trim(fgets(STDIN));
switch ($choice) {
case '1': // Se connecter
if (loginUser($model)) {
$loggedIn = true;
}
break;
case '2': // S'inscrire
if (registerUser($model)) {
$loggedIn = true;
}
break;
case '0': // Quitter
echo "Merci d'avoir utilisé notre application. Au revoir !\n";
exit(0);
default:
echo "Option invalide. Veuillez réessayer.\n";
break;
}
}
if ($loggedIn){
while ($loggedIn) {
displayMainMenu();
$mainChoice = trim(fgets(STDIN));
switch ($mainChoice) {
case '1': // Accueil
echo "Affichage de l'accueil...\n";
break;
case '2': // Profil
displayProfileMenu();
$profileChoice = trim(fgets(STDIN));
// TODO: Ajouter la logique pour les options de profil ici.
break;
case '3': // Analyse de la fréquence cardiaque
displayHeartRateAnalysisMenu();
$analysisChoice = trim(fgets(STDIN));
// TODO: Ajouter la logique pour les options d'analyse ici.
break;
case '4': // Gestion sociale
displaySocialManagementMenu();
$socialChoice = trim(fgets(STDIN));
// TODO: Ajouter la logique pour les options de gestion sociale ici.
break;
case '5': // Athlètes (pour les Coachs seulement)
displayCoachMenu();
$coachChoice = trim(fgets(STDIN));
// TODO: Ajouter la logique pour les options de coach ici.
break;
case '6': // Paramètres
displaySettingsMenu();
$settingsChoice = trim(fgets(STDIN));
// TODO: Ajouter la logique pour les options de paramètres ici.
break;
case '7': // Notifications
echo "Affichage des notifications...\n";
break;
case '0': // Se déconnecter
$loggedIn = false;
break; // Sortir de la boucle interne pour revenir à l'écran d'authentification.
default:
echo "Option invalide. Veuillez réessayer.\n";
break;
}
}
}
}
?>