From 9eb7074df5b2ea5c6e1d405e5aacef4dbb4a40e7 Mon Sep 17 00:00:00 2001 From: dave Date: Mon, 18 Dec 2023 16:14:34 +0100 Subject: [PATCH] push --- Sources/composer.json | 17 ++-- Sources/config/config.php | 2 +- Sources/src/app/controller/AuthController.php | 24 ++++- .../app/controller/HeartRateController.php | 92 ++++++++----------- Sources/src/app/router/response/Response.php | 2 + Sources/src/data/model/Activity.php | 2 +- .../data/model/manager/ActivityManager.php | 67 ++++++++------ 7 files changed, 116 insertions(+), 90 deletions(-) diff --git a/Sources/composer.json b/Sources/composer.json index 37f80d6b..a891bd8d 100755 --- a/Sources/composer.json +++ b/Sources/composer.json @@ -18,13 +18,13 @@ "Shared\\": "src/shared", "App\\Router\\": "src/app/router", "App\\Controller\\": "src/app/controller", - "App\\Router\\Response\\" : "src/app/router/response", - "App\\Router\\Middleware\\" : "src/app/router/middleware", - "App\\Router\\Request\\" : "src/app/router/request", + "App\\Router\\Response\\": "src/app/router/response", + "App\\Router\\Middleware\\": "src/app/router/middleware", + "App\\Router\\Request\\": "src/app/router/request", "Shared\\Exception\\": "src/shared/exception", "Shared\\Attributes\\": "src/shared/attributes", - "App\\Views\\Directives\\" : "src/app/views/directives", - "Data\\Core\\": "src/data/core/" + "App\\Views\\Directives\\": "src/app/views/directives", + "Data\\Core\\": "src/data/core/" } }, "require": { @@ -34,12 +34,15 @@ "altorouter/altorouter": "1.1.0", "psr/container": "^2.0" }, + "config": { + "process-timeout": 2000 + }, "require-dev": { "phpunit/phpunit": "*" }, "scripts": { "dev": "php -S localhost:8081 -t public -d display_errors=1 -d error_reporting=E_ALL", "dev:console": "export APP_ENV=console && php public/index.php", - "dev:html" : "export APP_ENV=html && php -S localhost:8080 -t public -d display_errors=1 -d error_reporting=E_ALL" + "dev:html": "export APP_ENV=html && php -S localhost:8080 -t public -d display_errors=1 -d error_reporting=E_ALL" } -} +} \ No newline at end of file diff --git a/Sources/config/config.php b/Sources/config/config.php index 1333bd9f..2471db5c 100755 --- a/Sources/config/config.php +++ b/Sources/config/config.php @@ -11,7 +11,7 @@ $dotenv->safeLoad(); // const DB_DATABASE = $_ENV['DB_DATABASE'] ?? 'heartTrack'; // const DB_USER = $_ENV['DB_USER'] ?? 'toto'; // const DB_PASSWORD = $_ENV['DB_PASSWORD'] ?? 'achanger'; -define("APP_ENV", "development"); +define("APP_ENV", getenv('APP_ENV')); const DB_HOST = 'localhost'; const DB_DATABASE = 'heartTrack'; diff --git a/Sources/src/app/controller/AuthController.php b/Sources/src/app/controller/AuthController.php index 01f7e574..92d50404 100644 --- a/Sources/src/app/controller/AuthController.php +++ b/Sources/src/app/controller/AuthController.php @@ -53,7 +53,8 @@ class AuthController extends BaseController 'login_error'=> $error, ]); - } + } + } #[Route('/login', name: 'login2',methods: ['GET'])] public function login2(IRequest $request): IResponse { @@ -139,6 +140,27 @@ class AuthController extends BaseController ]); } + + #[Route(path: '/logout', name: 'logout', methods: ['POST'])] + public function logout(IRequest $request): IResponse + { + $error = []; + + try { + + if($this->userMgr->deconnecter()){ + return new RedirectResponse('/'); + } + else{ + $error [] = "Erreur de deconnexion. Essayez encore"; + return new RedirectResponse('/'); + } + + } catch (\Throwable $th) { + $error [] =$th->getMessage(); + return new RedirectResponse('/'); + } + } diff --git a/Sources/src/app/controller/HeartRateController.php b/Sources/src/app/controller/HeartRateController.php index ca2ae318..05ee1c8f 100644 --- a/Sources/src/app/controller/HeartRateController.php +++ b/Sources/src/app/controller/HeartRateController.php @@ -4,6 +4,8 @@ namespace App\Controller; use App\Container; use App\Router\Request\IRequest; +use App\Router\Response\IResponse; +use App\Router\Response\RedirectResponse; use App\Router\Response\Response; use Manager\ActivityManager; use Shared\Attributes\Route; @@ -39,69 +41,55 @@ class HeartRateController extends BaseController 'member' => [] ]); } - + #[Route(path: '/upload', name: 'upload', methods: ['POST'])] - public function uploadFile(string $activityType, int $effort, IRequest $req): Response + public function uploadFile(string $activityType, int $effort, IRequest $req): IResponse { - $error = []; - /*$fileType = strtolower(pathinfo($_FILES["uploaded_file"]["name"], PATHINFO_EXTENSION)); - if (!$fileType == "fit") { - $error [] = ""; - }*/ - // Validate effort - if ($effort < 0 || $effort > 5) { - $error [] = 'Invalid effort level.'; - $resp = new Response('Invalid effort level.', 400); - return $this->render('./page/import.html.twig', [ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [], - 'error' => $error - ], $resp); + $error = $this->validateRequest($effort); + if (!empty($error)) { + return $this->renderError($error); } + $tmp_file = $_FILES['uploaded_file']['tmp_name']; + if (!$this->isValidFile($tmp_file)) { + return $this->renderError(['Failed to get file be sure that you provide the file']); + } - /* $error [] = 'Le fichier doit être de type d\'une taille inferieur à 10 MB.';*/ - - // Move the file to the directory where files are stored + $content = file_get_contents($tmp_file); try { - $tmp_file = $_FILES['uploaded_file']['tmp_name']; - if(file_exists($tmp_file)) { - $fileExtension = pathinfo($_FILES['uploaded_file']['name'], PATHINFO_EXTENSION); - if ($fileExtension === 'fit') { - $content = file_get_contents($tmp_file); - if ($this->activityMgr->uploadFile($activityType, 5, $content)) { - ///////////// - return $this->render('./page/home.html.twig', [ - 'css' => $this->preference->getCookie(), - ]); - }else{ - Log::dd('Ratter Model'); - } - }else{ - Log::dd('Le fichier doit être de type .fit.'); - } - - }else{ - Log::dd("failed"); + if ($this->activityMgr->uploadFile($activityType, 5, $content)) { + return new RedirectResponse('/'); } - } catch (\Exception $e) { - Log::dd($e); - return new Response('File upload error.', 500); + return $this->renderError([$e->getMessage()]); } - return new Response('Invalid file type.', 400); + return $this->renderError(['Failed to save activity.']); } + private function validateRequest(int $effort): array + { + $error = []; + if ($effort < 0 || $effort > 5) { + $error[] = 'Invalid effort level.'; + } + $fileExtension = pathinfo($_FILES['uploaded_file']['name'], PATHINFO_EXTENSION); + if ($fileExtension !== 'fit') { + $error[] = 'Invalid file type. Only .fit files are allowed.'; + } + return $error; + } -} \ No newline at end of file + private function isValidFile(string $tmp_file): bool + { + return file_exists($tmp_file) && is_uploaded_file($tmp_file); + } + + private function renderError(array $error): Response + { + // Consolidez la logique de rendu ici + return $this->render('./error/error.html.twig', ['title'=> "Failed" , "code" => 400, "name" => "error import", "descr" => $error[0] ], new Response('$error', 400)); + + } +} diff --git a/Sources/src/app/router/response/Response.php b/Sources/src/app/router/response/Response.php index e3c364ac..41b259cb 100644 --- a/Sources/src/app/router/response/Response.php +++ b/Sources/src/app/router/response/Response.php @@ -1,6 +1,8 @@ authService = $authService; - $this->dataManager = $dataManager; + $this->dataManager = $dataManager; } /** @@ -57,22 +58,22 @@ class ActivityManager try { // Extraction des données du fichier FIT $fitData = [ - 'timestamps' => $monFichierFit->data_mesgs['record']['timestamp'], - 'latitudes' => $monFichierFit->data_mesgs['record']['position_lat'], - 'longitudes' => $monFichierFit->data_mesgs['record']['position_long'], - 'altitudes' => $monFichierFit->data_mesgs['record']['altitude'], - 'heartRates' => $monFichierFit->data_mesgs['record']['heart_rate'], - 'cadences' => $monFichierFit->data_mesgs['record']['cadence'], - 'distances' => $monFichierFit->data_mesgs['record']['distance'], - 'speeds' => $monFichierFit->data_mesgs['record']['speed'], - 'powers' => $monFichierFit->data_mesgs['record']['power'], + 'timestamps' => $monFichierFit->data_mesgs['record']['timestamp'], + 'latitudes' => $monFichierFit->data_mesgs['record']['position_lat'], + 'longitudes' => $monFichierFit->data_mesgs['record']['position_long'], + 'altitudes' => $monFichierFit->data_mesgs['record']['altitude'], + 'heartRates' => $monFichierFit->data_mesgs['record']['heart_rate'], + 'cadences' => $monFichierFit->data_mesgs['record']['cadence'], + 'distances' => $monFichierFit->data_mesgs['record']['distance'], + 'speeds' => $monFichierFit->data_mesgs['record']['speed'], + 'powers' => $monFichierFit->data_mesgs['record']['power'], 'temperatures' => $monFichierFit->data_mesgs['record']['temperature'], ]; // Conversion des données en format JSON $jsonFitData = json_encode($fitData, JSON_PRETTY_PRINT); // Enregistrement du fichier JSON - file_put_contents( './you.json', $jsonFitData); + file_put_contents('./you.json', $jsonFitData); return true; } catch (\Exception $e) { @@ -98,12 +99,12 @@ class ActivityManager // Vérification des options par défaut if (empty($options)) { $options = [ - 'input_is_data' => true, - 'fix_data' => ['all'], - 'data_every_second' => false, - 'units' => 'metric', - 'pace' => true, - 'garmin_timestamps' => false, + 'input_is_data' => true, + 'fix_data' => ['all'], + 'data_every_second' => false, + 'units' => 'metric', + 'pace' => true, + 'garmin_timestamps' => false, 'overwrite_with_dev_data' => false ]; } @@ -135,9 +136,14 @@ class ActivityManager $standardDeviation = number_format(sqrt($variance), 2); $maximum = max($heartRateList); $minimum = min($heartRateList); - - $temperatureList = $monFichierFit->data_mesgs['record']['temperature']; - $averageTemperature = (!empty($temperatureList)) ? number_format(array_sum($temperatureList) / count($temperatureList), 1) : -200; + if(isset($monFichierFit->data_mesgs['record']['temperature'])){ + // Extraction de la température moyenne (si disponible + $temperatureList = $monFichierFit->data_mesgs['record']['temperature']; + $averageTemperature = (!empty($temperatureList)) ? number_format(array_sum($temperatureList) / count($temperatureList), 1) : -200; + } + else{ + $averageTemperature = -200; + } $isPaused = count($monFichierFit->isPaused()) > 0; @@ -158,17 +164,22 @@ class ActivityManager $isPaused ); // $this->dataManager->activityRepository->add($newActivity); - if ($this->saveFitFileToJSON($monFichierFit)){ - // Ajout de l'activité et enregistrement du fichier FIT en JSON - if ($this->authService->getCurrentUser()->getRole()->addActivity($newActivity)) { - return true; - } +// if ($this->saveFitFileToJSON($monFichierFit)) { + // Ajout de l'activité et enregistrement du fichier FIT en JSON + if ($this->authService->getCurrentUser()->getRole()->addActivity($newActivity)) { + return true; } - } catch (\Exception $e) { +// } + + + return false; + } + catch(\Exception $e){ echo $e; } - return false; + } } + ?> \ No newline at end of file