work with APE
continuous-integration/drone/push Build is failing Details

issue_031_import
David D'ALMEIDA 1 year ago
parent d0d1d4c23d
commit adb9584cba

@ -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", "development");
const DB_HOST = 'localhost';
const DB_DATABASE = 'heartTrack';

@ -23,6 +23,7 @@ class AppCreator
$this->services[] = $serviceId;
return $this;
}
public function registerSingleton(string $serviceId, $service): self
{
$this->container->set($serviceId, $service, Container::SINGLETON);
@ -39,6 +40,7 @@ class AppCreator
{
// Check the application environment
switch (APP_ENV) {
case 'console':
// Load the Console.php file in case of the 'console' environment
require_once __DIR__ . '/../console/Console.php';
@ -58,7 +60,6 @@ class AppCreator
}
function AddControllers($namespacePrefix = 'App\Controller', $pathToControllers = __DIR__ . '/controller'): self
{
$controllerFiles = glob($pathToControllers . '/*.php');
@ -76,7 +77,7 @@ class AppCreator
if ($reflectionClass->isSubclassOf(BaseController::class)) {
// Register in DI container
$this->container->set($fullClassName, function () use ($fullClassName) {
/** @var $controllerInstance **/
/** @var $controllerInstance * */
$controllerInstance = $this->container->resolve($fullClassName);
$controllerInstance->setContainer($this->container);
return $controllerInstance;
@ -93,7 +94,8 @@ class AppCreator
return $this->services;
}
public function getDicontainer(){
public function getDicontainer()
{
return $this->container;
}
}

@ -53,8 +53,7 @@ class AuthController extends BaseController
'login_error'=> $error,
]);
}
}
}
#[Route('/login', name: 'login2',methods: ['GET'])]
public function login2(IRequest $request): IResponse {

@ -332,24 +332,6 @@ class Controller extends BaseController
]);
}
#[Route(path: '/import', name: 'import', methods: ['GET'])]
public function import(): Response
{
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' => []
]);
}
#[Route(path: '/profile', name: 'profile', methods: ['GET'])]
public function profile(): Response

@ -1,36 +1,107 @@
<?php
// namespace App\Controller;
// use App\Container;
// use App\Router\Request\IRequest;
// use App\Router\Response\Response;
// use Shared\Attributes\Route;
// use Twig\Environment;
// use Data\Core\Preferences;
// use Shared\Log;
// class HeartRateController extends BaseController
// {
// #[Route(path: '/import', name: 'import', methods: ['GET'])]
// public function import(): Response
// {
// 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' => []
// ]);
// }
// }
namespace App\Controller;
use App\Container;
use App\Router\Request\IRequest;
use App\Router\Response\Response;
use Manager\ActivityManager;
use Shared\Attributes\Route;
use Twig\Environment;
use Data\Core\Preferences;
use Shared\Log;
class HeartRateController extends BaseController
{
private ActivityManager $activityMgr;
public function __construct(ActivityManager $manager)
{
parent::__construct();
$this->activityMgr = $manager;
}
#[Route(path: '/import', name: 'import', methods: ['GET'])]
public function import(): Response
{
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' => []
]);
}
#[Route(path: '/upload', name: 'upload', methods: ['POST'])]
public function uploadFile(string $activityType, int $effort, IRequest $req): Response
{
$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 [] = 'Le fichier doit être de type d\'une taille inferieur à 10 MB.';*/
// Move the file to the directory where files are stored
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");
}
} catch (\Exception $e) {
Log::dd($e);
return new Response('File upload error.', 500);
}
return new Response('Invalid file type.', 400);
}
}

@ -7,6 +7,8 @@
<meta name="description" content="Accueil" />
<meta name="author" content="PINAGOT Antoine" />
<title>{% block title %}{% endblock %}</title>
<link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/simple-datatables@7.1.2/dist/style.min.css" rel="stylesheet" />
<link href="/css/{% block css %}style{% endblock %}.css" rel="stylesheet" />
<script src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"></script>

@ -9,34 +9,57 @@
{% block user %}{{user}} - {{role}}{% endblock %}
{% block body %}
<div class="container-fluid px-4">
<h1 class="mt-4">Importer</h1>
<ol class="breadcrumb mb-4">
<li class="breadcrumb-item"><a href="home.html">Accueil</a></li>
<li class="breadcrumb-item active">Importer</li>
</ol>
<div class="row">
<div class="col">
<div class="card mb-4">
<div class="card-header">
<img src="/assets/img/bupload.png"></i>
Importer un fichier .fit
</div>
<div class="card-body">
<div style="text-align:center; margin-bottom: 15px;">
<label for="file-input">
<img src="/assets/img/uploadW.svg"/>
</label>
<form action="/analyses" method="post">
<input id="file-input" type="file" name="fileToUpload" value=""style="visibility: hidden; width:0; height:0;"/>
<input type="submit" value="Soumettre le fichier" name="submit"/>
</form>
</div>
<div class="container-fluid px-4">
<h1 class="mt-4">Importer</h1>
<ol class="breadcrumb mb-4">
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item active">Importer</li>
</ol>
<div class="flex items-center justify-center">
<div class="sm:max-w-lg w-full p-10 bg-white rounded-xl z-10 ">
<div class="text-center">
<h2 class="mt-5 text-3xl font-bold text-gray-900">
Importer un fichier .fit !
</h2>
<p class="mt-2 text-sm text-gray-400">Let's go</p>
</div>
<form class="mt-8 space-y-3" action="/upload" method="POST" enctype="multipart/form-data">
<div class="grid grid-cols-1 space-y-2">
<label class="text-sm font-bold text-gray-500 tracking-wide">Veuillez renseigner le type d'activité</label>
<input class="text-base p-2 border border-gray-300 rounded-lg focus:outline-none focus:border-indigo-500" type="text" name="activityType" placeholder="Course à pied">
</div>
<div class="grid grid-cols-1 space-y-2">
<label class="text-sm font-bold text-gray-500 tracking-wide">Effort Level (0-5)</label>
<input class="text-base p-2 border border-gray-300 rounded-lg focus:outline-none focus:border-indigo-500" type="number" name="effort" min="0" max="5" placeholder="Enter effort level (0-5)">
</div>
<div class="grid grid-cols-1 space-y-2">
<label class="text-sm font-bold text-gray-500 tracking-wide">Attach Document</label>
<div class="flex items-center justify-center w-full">
<label class="flex flex-col rounded-lg border-4 border-dashed w-full h-60 p-10 group text-center cursor-pointer">
<div class="h-full w-full text-center flex flex-col items-center justify-center items-center ">
<div class="flex flex-auto max-h-48 w-2/5 mx-auto -mt-10">
<img class="has-mask h-36 object-center" src="https://img.freepik.com/free-vector/image-upload-concept-landing-page_52683-27130.jpg?size=338&ext=jpg" alt="freepik image">
</div>
<p class="pointer-none text-gray-500 "><span class="text-sm">Drag and drop</span> files here <br /> or
<span class="text-blue-600 hover:underline">select a file</span>
from your computer</p>
</div>
</div>
</div>
<input type="file" class="hidden" id="file-input" name="uploaded_file">
</label>
<p id="file-name-display" class="text-sm text-gray-500"></p>
</div>
</div>
<p class="text-sm text-gray-300">
<span>File type: .fit</span>
</p>
<div class="flex justify-center">
<button type="submit" class="my-5 w-3/4 flex justify-center bg-blue-500 text-gray-100 p-4 rounded-full tracking-wide
font-semibold focus:outline-none focus:shadow-outline hover:bg-blue-600 shadow-lg cursor-pointer transition ease-in duration-300">
Upload
</button>
</div>
</form>
</div>
</div>
</div>
{% endblock %}

@ -759,7 +759,13 @@ function profileMenu(Model $model)
do {
$effort = trim(fgets(STDIN));
} while ($effort < 0 || $effort > 5);
$isAddActivity = $model->activityMgr->uploadFile($typeActivity, $effort, $passFile);
try {
$isAddActivity = $model->activityMgr->uploadFile($typeActivity, $effort, $passFile);
}catch (\Throwable $exception){
echo $exception;
}
echo $isAddActivity ? "Activité ajoutée avec succès" : "Erreur lors de l'ajout de l'activité";
case '0':
return;
@ -790,7 +796,7 @@ while (true) {
}*/
break;
case '2': // S'inscrire
if($model->userMgr->login("bruce.lee@example.com", "hello321"))
if($model->userMgr->login("bruce.lee@example.com", "password123"))
$loggedIn = true;
// if (registerUser($model)) {
// $loggedIn = true;

@ -14,6 +14,7 @@ use adriangibbons\phpFITFileAnalysis;
use Exception;
use Model\Activity;
use Network\IAuthService;
use Shared\Log;
use Stub\AuthService;
/**
@ -27,6 +28,12 @@ class ActivityManager
*/
private IAuthService $authService;
/**
* @var DataManager
*/
private DataManager $dataManager;
/**
* Constructeur de la classe ActivityManager.
*
@ -35,6 +42,7 @@ class ActivityManager
public function __construct(DataManager $dataManager,IAuthService $authService)
{
$this->authService = $authService;
$this->dataManager = $dataManager;
}
/**
@ -63,9 +71,8 @@ class ActivityManager
// Conversion des données en format JSON
$jsonFitData = json_encode($fitData, JSON_PRETTY_PRINT);
// Enregistrement du fichier JSON
file_put_contents('/Users/Perederii/SAE/git/Web/Sources/src/data/model/fitFileSaver/jsonFiles/ActivitySave.json', $jsonFitData);
file_put_contents( './you.json', $jsonFitData);
return true;
} catch (\Exception $e) {
@ -85,12 +92,13 @@ class ActivityManager
* @return bool Retourne true en cas de succès, sinon false.
* @throws Exception En cas d'erreur lors du téléchargement, du traitement ou de l'enregistrement des données.
*/
public function uploadFile($type, $effortRessenti, $file_path_or_data, ?array $options = null): bool
public function uploadFile(string $type, int $effortRessenti, string $file_path_or_data, ?array $options = null): bool
{
try {
// Vérification des options par défaut
if (empty($options)) {
$options = [
'input_is_data' => true,
'fix_data' => ['all'],
'data_every_second' => false,
'units' => 'metric',
@ -99,7 +107,6 @@ class ActivityManager
'overwrite_with_dev_data' => false
];
}
// Ouverture du fichier FIT
if (!($monFichierFit = new phpFITFileAnalysis($file_path_or_data, $options))) {
throw new Exception("Problème lors de l'ouverture du fichier FIT");
@ -150,10 +157,12 @@ class ActivityManager
$averageTemperature,
$isPaused
);
// Ajout de l'activité et enregistrement du fichier FIT en JSON
if ($this->authService->getCurrentUser()->getRole()->addActivity($newActivity) && $this->saveFitFileToJSON($monFichierFit)) {
return true;
// $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;
}
}
} catch (\Exception $e) {
echo $e;

@ -11,6 +11,7 @@ abstract class DataManager {
public IRelationshipRequestRepository $relationshipRequestRepository;
public ITrainingRepository $trainingRepository;
public INotificationRepository $notificationRepository;
public IActivityRepository $activityRepository;
}
?>

@ -1,5 +1,7 @@
<?php
namespace Stub;
use Model\Athlete;
use Model\CoachAthlete;
@ -8,41 +10,48 @@ use Repository\IUserRepository;
use Shared\Exception\NotImplementedException;
use Network\IAuthService;
use Shared\IHashPassword;
use Shared\Log;
use Stub\UserRepository;
class AuthService implements IAuthService {
class AuthService implements IAuthService
{
private IUserRepository $userRepository;
private IHashPassword $passwordHacher;
private ?User $currentUser;
public function __construct(UserRepository $userRepository, IHashPassword $passwordHacher) {
public function __construct(UserRepository $userRepository, IHashPassword $passwordHacher)
{
$this->userRepository = $userRepository;
$this->passwordHacher = $passwordHacher;
}
public function login(string $emailUser,string $password): bool {
public function login(string $emailUser, string $password): bool
{
$user = $this->userRepository->getItemByEmail($emailUser);
if (!$user instanceof User) {
throw new \Exception('Unable to find user with that name');
}
if ($user->isValidPassword($password)) {
$this->currentUser = $user;
return true;
}
return false;
if (!$this->passwordHacher->isPasswordValid($user->getMotDePasse(), $password)) {
return false;
}
$this->currentUser = $user;
return true;
}
public function register(string $username, string $password, $data): bool
{
$hashedPassword = $this->passwordHacher->hashPassword($password);
$existingUser = $this->userRepository->getItemByEmail($username);
if ($existingUser != null || $existingUser instanceof User ) {
if ($existingUser != null || $existingUser instanceof User) {
throw new \Exception('User already exists');
}
$prenom = $data['prenom'];
$username = $data['username'];
$nom = $data['nom'];
@ -50,13 +59,12 @@ class AuthService implements IAuthService {
$sexe = $data['sexe'];
$taille = $data['taille'];
$poids = $data['poids'];
$dateNaissance = $data['dateNaissance'] ;
$dateNaissance = $data['dateNaissance'];
$roleName = $data['roleName'];
$role = null;
if($roleName == "Coach"){
if ($roleName == "Coach") {
$role = new CoachAthlete();
}
else if($roleName == "Athlete"){
} else if ($roleName == "Athlete") {
$role = new Athlete();
}
$user = new User(
@ -73,12 +81,12 @@ class AuthService implements IAuthService {
//should use reflexion
$role
);
$this->userRepository->addItem($user);
$this->currentUser = $user;
return true;
}
public function logoutUser(): bool
{

Loading…
Cancel
Save