diff --git a/Sources/src/console/Console.php b/Sources/src/console/Console.php index 8051e1f2..682b7b3b 100755 --- a/Sources/src/console/Console.php +++ b/Sources/src/console/Console.php @@ -218,23 +218,33 @@ function ArrayMenu(DataManager $model) case '1': echo "Renseignez le surnom de l'utilisateur : "; $username = trim(fgets(STDIN)); - $model->coachMgr->addUser($model->userMgr->currentUser); - sleep(10); + if($model->coachMgr->addUser($username)){ + echo "Ajout avec succès !"; + } else { + echo "Pb ajout !"; + } + sleep(2); break; case '2': - echo "jsp pour l'instant pour supr un athlete !\n"; + echo "Renseignez le surnom de l'utilisateur : "; + $username = trim(fgets(STDIN)); + if($model->coachMgr->removeUser($username)){ + echo "Suppression avec succès !"; + } else { + echo "Pb suppression ou aucun utilisateur de ce nom !"; + } sleep(2); break; case '3': $usersArray = $model->coachMgr->getUsersList(); if (!empty($usersArray)) { - foreach ($usersArray as $value) { - echo $value->to_String() . "\n"; - } + foreach ($usersArray as $value) { + echo $value->__toString() . "\n"; + } } else { echo "Aucun utilisateur dans la liste\n"; } - sleep(10); + sleep(2); break; case '0': return; @@ -245,6 +255,19 @@ function ArrayMenu(DataManager $model) } } while($coachChoice); } + +//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 CoachMenu(DataManager $model) { do { @@ -252,24 +275,88 @@ function CoachMenu(DataManager $model) $coachChoice = trim(fgets(STDIN)); switch ($coachChoice) { - case '1': - $userRole = $model->coachMgr->getRole(); - if (!empty($userRole)) { - echo $userRole; + case '1': // echo "1. Liste des athlètes\n"; + $arrayUsers = $model->coachMgr->getUsersList(); + if (!empty($arrayUsers)) { + foreach ($arrayUsers as $value) { + echo $value->__toString() . "\n"; + } } else { echo "Aucun utilisateur dans la liste\n"; } sleep(2); break; - case '2': - echo "jsp pour l'instant pour les stats !\n"; + case '2': // echo "2. Statistiques globales\n"; + $arrayUsers = $model->coachMgr->getUsersList(); + + if (!empty($arrayUsers)) { + do { + clearScreen(); + $cpt = 0; + foreach ($arrayUsers as $value) { + echo $cpt . " - " . $value->__toString() . "\n"; + $cpt = $cpt + 1; + } + + echo "Renseignez le numéro de l'utilisateur choisi : "; + $usernameNumber = trim(fgets(STDIN)); + + // Vérifier si l'index saisi est valide + if (isset($arrayUsers[$usernameNumber])) { + $selectedUser = $arrayUsers[$usernameNumber]; + if (($arrayStats = $model->coachMgr->getStatistics($selectedUser))) { + foreach ($arrayStats as $value) { + echo $value->__toString() . "\n"; + } + } else { + echo "Pas de statistiques valides présentent !\n"; + } + } else { + echo "Numéro d'utilisateur non valide.\n"; + $cpt = 0; + } + } while($cpt == 0); + } else { + echo "Aucun utilisateur dans la liste.\n"; + } sleep(2); - return; - case '3': - echo "jsp pour l'instant pour les analyses !\n"; + break; + case '3': // echo "3. Analyses par athlète\n"; + $arrayUsers = $model->coachMgr->getUsersList(); + + if (!empty($arrayUsers)) { + do { + clearScreen(); + $cpt = 0; + foreach ($arrayUsers as $value) { + echo $cpt . " - " . $value->__toString() . "\n"; + $cpt = $cpt + 1; + } + + echo "Renseignez le numéro de l'utilisateur choisi : "; + $usernameNumber = trim(fgets(STDIN)); + + // Vérifier si l'index saisi est valide + if (isset($arrayUsers[$usernameNumber])) { + $selectedUser = $arrayUsers[$usernameNumber]; + if (($arrayStats = $model->coachMgr->getAnalyse($selectedUser))) { + foreach ($arrayStats as $value) { + echo $value->__toString() . "\n"; + } + } else { + echo "Pas d'Analyses valides présentent !\n"; + } + } else { + echo "Numéro d'utilisateur non valide.\n"; + $cpt = 0; + } + } while($cpt == 0); + } else { + echo "Aucun utilisateur dans la liste.\n"; + } sleep(2); - return; - case '4': + break; + case '4': // echo "4. Gérer la liste de mes athlètes\n"; ArrayMenu($model); break; case '0': // Quitter @@ -292,6 +379,7 @@ while (true) { switch ($choice) { case '1': // Se connecter $model->userMgr->login("Doe", "password123"); + $loggedIn = true; // if (loginUser($model)) { diff --git a/Sources/src/data/core/network/IAuthService.php b/Sources/src/data/core/network/IAuthService.php index aa6d6e8a..5bfa3fed 100644 --- a/Sources/src/data/core/network/IAuthService.php +++ b/Sources/src/data/core/network/IAuthService.php @@ -16,7 +16,7 @@ interface IAuthService { * * @return ?User True if authentication is successful, false otherwise. */ - public function login(string $username, string $password): ?User; + public function login(string $username, string $password): bool; /** * Register a new user. diff --git a/Sources/src/data/model/Athlete.php b/Sources/src/data/model/Athlete.php index 1fe7e15b..e3f74173 100644 --- a/Sources/src/data/model/Athlete.php +++ b/Sources/src/data/model/Athlete.php @@ -11,7 +11,7 @@ class Athlete extends Role { return $this; } - public function getStat():?array{ + public function getStatistic():?array{ return $this->arrayStats; } @@ -26,6 +26,9 @@ class Athlete extends Role { public function getUsersList(): array{ return $this->usersList; } + public function getUserList(User $user): \Model\User{ + return $user; + } private function CheckAdd(User $user) { if($user instanceof \Model\Athlete){ @@ -34,20 +37,29 @@ class Athlete extends Role { return false; } } - public function addUser(\Model\User $user): void + public function addUser(\Model\User $user): bool { if($this->CheckAdd($user)){ $this->usersList[] = $user; - } else { - echo "Impossible de demander en ami autre que des athletes\n"; + return true; + } + return false; + } + + public function removeUser(\Model\User $user): bool + { + if($this->CheckAdd($user)){ + $this->usersList[] = $user; + return true; } + return false; } - public function delUser(\Model\User $user):void{ + public function delUser(\Model\User $user):bool{ if($this->CheckAdd($user)){ $this->usersList[] = null; - } else { - echo "Impossible de demander en ami autre que des athletes\n"; + return true; } + return false; } } diff --git a/Sources/src/data/model/Coach.php b/Sources/src/data/model/Coach.php index da1255e6..6f2fa0ed 100644 --- a/Sources/src/data/model/Coach.php +++ b/Sources/src/data/model/Coach.php @@ -2,11 +2,12 @@ namespace Model; abstract class Coach extends Role { - public abstract function addUser(User $user): void; - + public abstract function addUser(User $user): bool; + public abstract function removeUser(User $user): bool; public abstract function CheckAdd(User $user) : bool; // Méthode pour obtenir la liste des utilisateurs public abstract function getUsersList(): ?array; + public abstract function getUserList(User $user): \Model\User; } ?> \ No newline at end of file diff --git a/Sources/src/data/model/CoachAthlete.php b/Sources/src/data/model/CoachAthlete.php index e2945f25..6dd5536f 100644 --- a/Sources/src/data/model/CoachAthlete.php +++ b/Sources/src/data/model/CoachAthlete.php @@ -4,28 +4,41 @@ namespace Model; class CoachAthlete extends Coach { private Training $arrayTraining; - public function addUser(User $user): void { - if($this->CheckAdd($user)){ - $this->usersList[] = $user; - } else { - echo "Impossible d'ajouter d'autres membres que des athletes !\n"; + public function getUsersList(): ?array { + if (!empty($this->usersList)) { + return $this->usersList; } + return null; + } + public function getUserList(User $user): User { + foreach ($this->usersList as $existingUser) { + if ($existingUser->getId() === $user->getId()) { + return $user; // L'utilisateur est présent dans la liste + } + } + return null; // L'utilisateur n'est pas dans la liste } - public function CheckAdd(User $user) : bool { - if($user instanceof \Model\Athlete){ + if($user->getRole() instanceof \Model\Athlete){ return true; - } else { - return false; } + return false; } - - public function getUsersList(): ?array { - if (!empty($this->usersList)) { - return $this->usersList; - } else { - echo "Vous n'avez pas de groupe\n"; - return null; + public function addUser(User $user): bool { + if($this->CheckAdd($user)){ + array_push($this->usersList, $user); + return true; + } + return false; + } + public function removeUser(User $user): bool { + if($this->CheckAdd($user)){ + $key = array_search($user, $this->usersList); + if ($key !== false) { + array_splice($this->usersList, $key, 1); + } + return true; } + return false; } } \ No newline at end of file diff --git a/Sources/src/data/model/Role.php b/Sources/src/data/model/Role.php index d6bb4c4d..ff09bdf7 100644 --- a/Sources/src/data/model/Role.php +++ b/Sources/src/data/model/Role.php @@ -15,7 +15,8 @@ abstract class Role { * @param User $user * @return void */ - public abstract function addUser(User $user): void; + public abstract function addUser(User $user): bool; + public abstract function removeUser(User $user): bool; // public function removeUser(User $user): void { // $this->usersList[] @@ -25,8 +26,10 @@ abstract class Role { * @return void */ public abstract function getUsersList(): ?array; + public abstract function getUserList(User $user): \Model\User; } + ?> \ No newline at end of file diff --git a/Sources/src/data/model/Statistic.php b/Sources/src/data/model/Statistic.php index 4c9003e7..d43d1297 100644 --- a/Sources/src/data/model/Statistic.php +++ b/Sources/src/data/model/Statistic.php @@ -14,6 +14,25 @@ class Statistic private int $minHeartRate; private int $maxHeartRate; private int $caloriesBurned; + public function __construct( + int $idStatistic, + float $totalDistance, + float $weight, + time $totalTime, + int $avrHeartRate, + int $minHeartRate, + int $maxHeartRate, + int $caloriesBurned + ) { + $this->idStatistic = $idStatistic; + $this->totalDistance = $totalDistance; + $this->weight = $weight; + $this->totalTime = $totalTime; + $this->avrHeartRate = $avrHeartRate; + $this->minHeartRate = $minHeartRate; + $this->maxHeartRate = $maxHeartRate; + $this->caloriesBurned = $caloriesBurned; + } public function getStatistic():Statistic{ return $this; diff --git a/Sources/src/data/model/Training.php b/Sources/src/data/model/Training.php index 8b66d336..95c93935 100644 --- a/Sources/src/data/model/Training.php +++ b/Sources/src/data/model/Training.php @@ -9,7 +9,8 @@ class Training { private int $idTraining; private Date $date; - private String $location; + private float $latitude; + private float $longitude; private text $description; private text $feedback; public function getId():String { @@ -19,7 +20,7 @@ class Training return $this->date; } public function getLocation():String { - return $this->location; + return $this->longitude . $this->latitude; } public function getDescription(): Text { diff --git a/Sources/src/data/model/manager/CoachManager.php b/Sources/src/data/model/manager/CoachManager.php index c765ea54..71eb43f7 100644 --- a/Sources/src/data/model/manager/CoachManager.php +++ b/Sources/src/data/model/manager/CoachManager.php @@ -4,66 +4,74 @@ namespace Manager; use Model\Coach; use Model\Role; +use Model\Statistic; use Model\User; use Network\IAuthService; use Stub\AuthService; class CoachManager { - private IAuthService $authService; - public ?User $currentUser = null; // Initialisé à null - function __construct(IAuthService $authService) +// public ?User $currentUser = null; // Initialisé à null + private AuthService $authService; + function __construct(AuthService $authService) { $this->authService = $authService; - echo "ntm putain de php"; - echo $this->authService; - echo $this->authService->currentUser; - sleep(4); - - // Assurez-vous que authService n'est pas null avant d'accéder à currentUser - if ($this->authService->currentUser) { - echo "It's good, current user instencied"; - sleep(4); - $this->currentUser = $this->authService->currentUser; - } } - public function getRole(): ?Role + public function getRole(): void { // Assurez-vous que currentUser n'est pas null avant d'accéder à getRole() - if ($this->currentUser && $this->currentUser->getRole()) { - return $this->currentUser->getRole(); - } +// if ($this->authService->currentUser && $this->authService->currentUser->getRole()) { +// return $this->authService->currentUser->getRole(); +// } + var_dump($this->authService->currentUser->getRole()); - return null; +// return null; } - public function getUsersList(): ?Role + public function getUsersList(): ?array { - // Assurez-vous que currentUser n'est pas null avant d'accéder à getRole() - if ($this->currentUser && $this->currentUser->getRole()->getUsersList()) { - return $this->currentUser->getRole(); + if ($this->authService->currentUser && $this->authService->currentUser->getRole()->getUsersList()) { + return $this->authService->currentUser->getRole()->getUsersList(); } - return null; } - -// faire validation !!! - public function addUser(User $user): void + public function addUser(String $username): bool { - echo $this->currentUser; - // Assurez-vous que currentUser n'est pas null avant d'accéder à getRole() - if ($this->currentUser && $this->currentUser->getRole()) { - $this->currentUser->getRole()->addUser($user); - } elseif($this->currentUser && !$this->currentUser->getRole()) { - echo "Impossible d'ajouter l'utilisateur. role est null."; - } elseif(!$this->currentUser) { - echo "Impossible d'ajouter l'utilisateur. currentUser est null."; - } else { - echo "gros probleme !"; + if ($this->authService->currentUser && $this->authService->currentUser->getRole()) { + if(($user = $this->authService->getUserRepository()->GetItemByName($username,0,1))) { // count 1 seul et debuis 0 (debut) + if ($this->authService->currentUser->getRole()->addUser($user)) { + return true; + } + } + } + return false; + } + public function removeUser(String $username): bool + { + if ($this->authService->currentUser && $this->authService->currentUser->getRole()) { + if(($user = $this->authService->getUserRepository()->GetItemByName($username,0,1))) { // count 1 seul et debuis 0 (debut) + if ($this->authService->currentUser->getRole()->removeUser($user)) { + return true; + } + } } + return false; } +// public function getStatistics(User $user) : ?Statistic { +// if ($this->authService->currentUser && $this->authService->currentUser->getRole()) { +// if (($arrayStat = $this->authService->currentUser->getRole()->getUserList($user)->getStatistic())) { +// return $arrayStat; +// } +// } +// return null; +// } +// +// public function getAnalyse(User $user): bool { +// return false; +// } + } ?> \ No newline at end of file diff --git a/Sources/src/data/model/manager/UserManager.php b/Sources/src/data/model/manager/UserManager.php index 8301771c..53ba97ca 100644 --- a/Sources/src/data/model/manager/UserManager.php +++ b/Sources/src/data/model/manager/UserManager.php @@ -6,14 +6,15 @@ use Model\Coach; use Model\User; use Network\IAuthService; use Shared\Validation; +use Stub\AuthService; // c'est le modéle // should be here try catch ?? class UserManager { - private IAuthService $authService; + private AuthService $authService; public User $currentUser; - public function __construct(IAuthService $authService) + public function __construct(AuthService $authService) { $this->authService = $authService; } @@ -22,9 +23,9 @@ class UserManager { if (!Validation::val_string($passwordUser) || !Validation::val_string($loginUser)) throw new \Exception(" some wrong with cred !!!!!"); - $user = $this->authService->login($loginUser, $passwordUser); - if ($user) { - $this->currentUser = $user; + + if ($this->authService->login($loginUser, $passwordUser)) { + $this->currentUser = $this->authService->currentUser; return true; } return false; diff --git a/Sources/src/data/stub/StubData.php b/Sources/src/data/stub/StubData.php index dc0053d1..25bfd218 100644 --- a/Sources/src/data/stub/StubData.php +++ b/Sources/src/data/stub/StubData.php @@ -13,7 +13,7 @@ class StubData extends DataManager { $this->userMgr = new UserManager($authService); -// if($this->userMgr->currentUser->getRole() instanceof \Model\Coach){ +// if($this->userMgr->currentUser != null){ $this->coachMgr = new CoachManager($authService); // } } diff --git a/Sources/src/data/stub/service/AuthService.php b/Sources/src/data/stub/service/AuthService.php index 7eb32a95..54b8f72f 100644 --- a/Sources/src/data/stub/service/AuthService.php +++ b/Sources/src/data/stub/service/AuthService.php @@ -13,31 +13,35 @@ class AuthService implements IAuthService { private $userRepository; private $passwordHasher; - public $currentUser; - + public ?User $currentUser = null ; public function __construct(UserRepository $userRepository, IHashPassword $passwordHasher) { $this->userRepository = $userRepository; $this->passwordHasher = $passwordHasher; } - public function login(string $username,string $password): ?User { - $this->currentUser = $this->userRepository->GetItemByName($username,0,1); + public function getUserRepository():UserRepository { + return $this->userRepository; + } + + public function login(string $username,string $password): bool { + $user = $this->userRepository->GetItemByName($username,0,1); - if($this->currentUser == null || !$this->currentUser instanceof User) { + if ($user == null || !$user instanceof User) { throw new \Exception('Unable to find user with that name'); } - if($this->currentUser->isValidPassword($password)) { - return $this->currentUser; + if ($user->isValidPassword($password)) { + $this->currentUser = $user; + return true; } - return null; + return false; } public function register(string $loginUser, string $password, $data): bool { - + $hashedPassword = $this->passwordHasher->hashPassword($password); - + $existingUser = $this->userRepository->getItemByEmail($loginUser); - + if ($existingUser != null || $existingUser instanceof User ) { throw new \Exception('User already exists'); } @@ -58,34 +62,30 @@ class AuthService implements IAuthService { else if($roleName == "Athlete"){ $role = new Athlete(); } - $user = new User( - random_int(0, 100), - $username, - $nom, - $prenom, - $email, - $hashedPassword, - $sexe, - $taille, - $poids, - $dateNaissance, - //should use reflexion - $role - ); - + $user = new User( + random_int(0, 100), + $username, + $nom, + $prenom, + $email, + $hashedPassword, + $sexe, + $taille, + $poids, + $dateNaissance, + //should use reflexion + $role + ); + $this->userRepository->addItem($user); - + $this->currentUser = $user; return true; } - + public function logoutUser(): void { - if ($this->currentUser) { - $this->currentUser = null; // Déconnexion en assignant null à currentUser - echo "Déconnexion réussie.\n"; - } else { - echo "Aucun utilisateur connecté.\n"; - } + print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! logout method not implemented !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + return; } } \ No newline at end of file