Compare commits

...

42 Commits

Author SHA1 Message Date
Antoine PEREDERII ceb993528e update somes bugs
1 year ago
Antoine PEREDERII 881cb5de37 test merge merged_PLE on this branch
1 year ago
Antoine PEREDERII 8473b52a96 Update '.drone.yml'
1 year ago
Antoine PEREDERII 0b4e76e66f add Training Entity and gateway
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 9eb7074df5 push
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT de5f390af1 Merge
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT 76c6b4b8d1 Ok il me faut une base de données
1 year ago
Paul LEVRAULT 16ee9a131e Ca marche pas et ca commence a m'enerver
1 year ago
Antoine PEREDERII 15b97837f7 update paul's branch with database link on search user
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT d4ee62ce18 test
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA adb9584cba work with APE
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT fe2dbded3b J'en ai marre
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT ae9744cde6 Merge remote-tracking branch 'origin/WORK-KMO-Gateway' into merged_PLE
1 year ago
Paul LEVRAULT 0ac615539b Merge remote-tracking branch 'origin/merged' into merged_PLE
1 year ago
Paul LEVRAULT 7c1824f072 Controlleur athlete quasi terminée
1 year ago
Paul LEVRAULT aa49d0960a Un autre truc
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT 9ee8e90065 Truc de test
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT 661b9c80cf athlete controller quasi fini
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PINAGOT d0d1d4c23d auth Ctrl fini
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT 24919e6ba5 La recherche de users fonctionne
continuous-integration/drone/push Build is failing Details
1 year ago
Kevin MONTEIRO fe12112ce6 Finition gateway Athlete Coach et Activite a tester mais normalement fonctionnel
continuous-integration/drone/push Build is failing Details
1 year ago
Kevin MONTEIRO aba0924f64 Gateways, Mappers et Entity pour Athlete et Coach a tester mais fonctionnel normalement
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA f804820e85 exemple
continuous-integration/drone/push Build is failing Details
1 year ago
antoine.perederii c311825459 Merge branch 'merged' of https://codefirst.iut.uca.fr/git/HeartDev/Web into merged
continuous-integration/drone/push Build is failing Details
1 year ago
antoine.perederii 8488240e9c update gestion de projet
1 year ago
Paul LEVRAULT 1aa8dcc9fa test
1 year ago
Kevin MONTEIRO af9821709c Grosse Amélioration Gateways, Mappers, Entity Athlète et Coach
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PINAGOT 09dafc90c0 merge terminé
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PINAGOT 64ecdf87f2 Merge remote-tracking branch 'origin/issue_032_models' into merged
1 year ago
Antoine PINAGOT c201ee9bff Finition de link route/controller
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PINAGOT 35cb501e47 Il reste le AuthController, et le Athlete
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PINAGOT 637c522959 Ajout route dans les bons controller (pas terminé)
continuous-integration/drone/push Build is failing Details
1 year ago
antoine.perederii 3a2b0dd405 Merge branch 'merged' of https://codefirst.iut.uca.fr/git/HeartDev/Web into merged
continuous-integration/drone/push Build is failing Details
1 year ago
antoine.perederii 591bbe67c1 update GANTT Project
1 year ago
Antoine PEREDERII 4d67c66080 update oral diaporama
continuous-integration/drone/push Build is failing Details
1 year ago
antoine.perederii a9c5c28143 Merge branch 'merged' of https://codefirst.iut.uca.fr/git/HeartDev/Web into merged
continuous-integration/drone/push Build is failing Details
1 year ago
antoine.perederii 3f17b380ee update GANTT project
1 year ago
Kevin MONTEIRO acf783143f Début Diapo Oral 2
continuous-integration/drone/push Build is failing Details
1 year ago
antoine.perederii f15e45e197 update real GANTT
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 1918025c2f update msProject
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PINAGOT c0c7d6560f final page
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 637085afce update app and diagrams
continuous-integration/drone/push Build is failing Details
1 year ago

@ -1,61 +0,0 @@
kind: pipeline
type: docker
name: HeartWave
trigger:
event:
- push
steps:
# Test ✔️
- name: test
image: composer:2.6
commands:
- cd Sources
# Installe les dépendances PHP si nécessaire
- composer install --no-interaction
- ./vendor/bin/phpunit tests
# Sonar static code analisis deployment
# TODO : use an image that already have unzip
- name: code-analysis
image: php:8.1-cli
environment:
SONAR_TOKEN:
from_secret: SONAR_TOKEN
commands:
- apt-get update && apt-get install -y curl unzip
- export SONAR_SCANNER_VERSION=4.7.0.2747
- export SONAR_SCANNER_HOME=$HOME/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linux
- curl --create-dirs -sSLo $HOME/.sonar/sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$SONAR_SCANNER_VERSION-linux.zip
- unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/
- export PATH=$SONAR_SCANNER_HOME/bin:$PATH
- export SONAR_SCANNER_OPTS="-server"
- cd Sources
- sonar-scanner -D sonar.projectKey=HeartTrack -D sonar.host.url=https://codefirst.iut.uca.fr/sonar
depends_on: [ test ]
# build image and push on the registry ✔️
- name: docker-build-and-push
image: plugins/docker
settings:
dockerfile: Sources/config/Dockerfile
context: Sources
registry: hub.codefirst.iut.uca.fr
repo: hub.codefirst.iut.uca.fr/david.d_almeida/web
username:
from_secret: SECRET_REGISTRY_USERNAME
password:
from_secret: SECRET_REGISTRY_PASSWORD
- name: notify
image: ruby:2.1
when:
status: [ success ]
ref:
include:
- refs/tags/*-demo
commands:
- sh ./notifymail.sh
depends_on: [ docker-build-and-push ]

1
.gitignore vendored

@ -6,6 +6,7 @@ dist
*.swo *.swo
.env .env
loginDatabase.php
# Cache file on macOS # Cache file on macOS
.DS_Store .DS_Store

@ -0,0 +1,121 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# BDD
```plantuml
@startuml
skinparam classAttributeIconSize 0
package MLD{
entity "Athlète" as athlete {
{static} idAthlete
nom
prénom
email
sexe
taille
poids
motDePasse
dateNaissance
}
entity "Amitié" as friendship{
{static}# idAthlete1
{static}# idAthlete2
début
}
entity "Notification" as notif {
{static} idNotif
message
date
statut
urgence
#athleteId
}
entity "Coach" as coach {
{static} idCoach
// attributs spécifiques au coach
#athleteId
}
entity "Statistique" as stats {
{static} idStatistique
poids
fcMoyenne
fcMax
caloriesBrûléesMoy
date
#athleteId
}
entity "Entraînement" as training {
{static} idEntrainement
date
description
// Exercices
latitude
longitude
feedback
#coachId
}
entity "Participe" as takepart {
{static} #athleteId
{static} #entrainementId
}
entity "SourceDonnée" as source {
{static} idSource
type
modèle
précision
#athleteId
}
entity "Activité" as activity {
{static} idActivité
type
date
heureDeDébut
heureDeFin
effortRessent
variabilité
variance
ecartType
moyenne
maximum
minimum
temperatureMoyenne
#athleteId
#sourceId
}
entity "FréquenceCardiaque" as fc {
{static} idFc
altitude
temps : time
température
bpm
longitude
latitude
#activitéId
}
}
activity --> athlete
activity --> source
activity <-- fc
coach --> athlete
athlete <-- source
stats --> athlete
takepart --> athlete
takepart --> training
friendship --> athlete
notif --> athlete
coach <-- training
athlete <-- friendship
@enduml
```

@ -36,7 +36,7 @@ abstract class IGenericRepository {
+ addItem(item) : void + addItem(item) : void
+ deleteItem(item) : bool + deleteItem(item) : bool
} }
abstract class IUserRepository extends IGenericRepository { interface IUserRepository extends IGenericRepository {
} }
interface INotificationRepository extends IGenericRepository { interface INotificationRepository extends IGenericRepository {
} }

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 2.0 MiB

@ -9,37 +9,40 @@
"Repository\\": "src/data/model/repository", "Repository\\": "src/data/model/repository",
"Manager\\": "src/data/model/manager", "Manager\\": "src/data/model/manager",
"Network\\": "src/data/core/network", "Network\\": "src/data/core/network",
"Console\\": "src/console",
"Stub\\": [ "Stub\\": [
"src/data/stub", "src/data/stub",
"src/data/stub/service", "src/data/stub/service",
"src/data/stub/repository" "src/data/stub/repository"
], ],
"Console\\": "src/console",
"Shared\\": "src/shared", "Shared\\": "src/shared",
"App\\Router\\": "src/app/router", "App\\Router\\": "src/app/router",
"App\\Controller\\": "src/app/controller", "App\\Controller\\": "src/app/controller",
"App\\Router\\Response\\" : "src/app/router/response", "App\\Router\\Response\\": "src/app/router/response",
"App\\Router\\Middleware\\" : "src/app/router/middleware", "App\\Router\\Middleware\\": "src/app/router/middleware",
"App\\Router\\Request\\" : "src/app/router/request", "App\\Router\\Request\\": "src/app/router/request",
"Shared\\Exception\\": "src/shared/exception", "Shared\\Exception\\": "src/shared/exception",
"Shared\\Attributes\\": "src/shared/attributes", "Shared\\Attributes\\": "src/shared/attributes",
"App\\Views\\Directives\\" : "src/app/views/directives", "App\\Views\\Directives\\": "src/app/views/directives",
"Data\\Core\\": "src/data/core/" "Data\\Core\\": "src/data/core/"
} }
}, },
"require": { "require": {
"twig/twig": "^3.0", "twig/twig": "^3.0",
"altorouter/altorouter": "1.1.0",
"vlucas/phpdotenv": "^5.5", "vlucas/phpdotenv": "^5.5",
"psr/container": "^2.0", "adriangibbons/php-fit-file-analysis": "^3.2.0",
"adriangibbons/php-fit-file-analysis": "^3.2.0" "altorouter/altorouter": "1.1.0",
"psr/container": "^2.0"
},
"config": {
"process-timeout": 2000
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "*" "phpunit/phpunit": "*"
}, },
"scripts": { "scripts": {
"dev": "php -S localhost:8080 -t public -d display_errors=1 -d error_reporting=E_ALL", "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: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"
} }
} }

@ -10,7 +10,7 @@ $dotenv->safeLoad();
// const DB_DATABASE = $_ENV['DB_DATABASE'] ?? 'heartTrack'; // const DB_DATABASE = $_ENV['DB_DATABASE'] ?? 'heartTrack';
// const DB_USER = $_ENV['DB_USER'] ?? 'toto'; // const DB_USER = $_ENV['DB_USER'] ?? 'toto';
// const DB_PASSWORD = $_ENV['DB_PASSWORD'] ?? 'achanger'; // const DB_PASSWORD = $_ENV['DB_PASSWORD'] ?? 'achanger';
define("APP_ENV", 'development'); define("APP_ENV", getenv('APP_ENV'));
const DB_HOST = 'localhost'; const DB_HOST = 'localhost';
const DB_DATABASE = 'heartTrack'; const DB_DATABASE = 'heartTrack';

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 692 B

File diff suppressed because it is too large Load Diff

@ -12,7 +12,7 @@ use Manager\DataManager;
use Repository\IUserRepository; use Repository\IUserRepository;
use Shared\ArgumentControllerResolver; use Shared\ArgumentControllerResolver;
use Shared\IArgumentResolver; use Shared\IArgumentResolver;
use Stub\AuthService; use Network\AuthService;
use Stub\NotificationRepository; use Stub\NotificationRepository;
use Stub\TrainingRepository; use Stub\TrainingRepository;
use Stub\UserRepository; use Stub\UserRepository;
@ -30,13 +30,13 @@ use Network\RelationshipService;
use Network\INotificationService; use Network\INotificationService;
use Stub\NotificationService; use Stub\NotificationService;
use App\Router\Session;
use Stub\StubData; use Stub\StubData;
use Twig\Environment; use Twig\Environment;
use Twig\Loader\FilesystemLoader; use Twig\Loader\FilesystemLoader;
use Shared\IHashPassword; use Shared\IHashPassword;
use Shared\HashPassword; use Shared\HashPassword;
use Shared\Log;
$appFactory = new AppCreator(); $appFactory = new AppCreator();
$appFactory->registerService(IArgumentResolver::class, ArgumentControllerResolver::class); $appFactory->registerService(IArgumentResolver::class, ArgumentControllerResolver::class);
@ -54,7 +54,6 @@ $appFactory->registerService(IUserRepository::class, UserRepository::class);
$appFactory->registerService(\Twig\Loader\LoaderInterface::class, function() { $appFactory->registerService(\Twig\Loader\LoaderInterface::class, function() {
return new FilesystemLoader(__DIR__ . '/../src/app/views/Templates'); return new FilesystemLoader(__DIR__ . '/../src/app/views/Templates');
}); });
@ -69,7 +68,7 @@ $app = $appFactory->create();
if (!is_null($app)){ if (!is_null($app)){
// Ajout des Middleware // Ajout des Middleware
/*$app->use(new LoggingMiddleware());*/ /*$app->use(new LoggingMiddleware());*/
$app->use(new AuthMiddleware()); $app->use(new AuthMiddleware($appFactory->getDicontainer()->get(IAuthService::class) ));
$app->mapControllers(); $app->mapControllers();
$app->run(RequestFactory::createFromGlobals()); $app->run(RequestFactory::createFromGlobals());
} }

@ -0,0 +1,34 @@
/*!
* Start Bootstrap - New Age v6.0.7 (https://startbootstrap.com/theme/new-age)
* Copyright 2013-2023 Start Bootstrap
* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-new-age/blob/master/LICENSE)
*/
//
// Scripts
//
window.addEventListener('DOMContentLoaded', event => {
// Activate Bootstrap scrollspy on the main nav element
const mainNav = document.body.querySelector('#mainNav');
if (mainNav) {
new bootstrap.ScrollSpy(document.body, {
target: '#mainNav',
offset: 74,
});
};
// Collapse responsive navbar when toggler is visible
const navbarToggler = document.body.querySelector('.navbar-toggler');
const responsiveNavItems = [].slice.call(
document.querySelectorAll('#navbarResponsive .nav-link')
);
responsiveNavItems.map(function (responsiveNavItem) {
responsiveNavItem.addEventListener('click', () => {
if (window.getComputedStyle(navbarToggler).display !== 'none') {
navbarToggler.click();
}
});
});
});

@ -0,0 +1,34 @@
/*!
* Start Bootstrap - New Age v6.0.7 (https://startbootstrap.com/theme/new-age)
* Copyright 2013-2023 Start Bootstrap
* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-new-age/blob/master/LICENSE)
*/
//
// Scripts
//
window.addEventListener('DOMContentLoaded', event => {
// Activate Bootstrap scrollspy on the main nav element
const mainNav = document.body.querySelector('#mainNav');
if (mainNav) {
new bootstrap.ScrollSpy(document.body, {
target: '#mainNav',
offset: 74,
});
};
// Collapse responsive navbar when toggler is visible
const navbarToggler = document.body.querySelector('.navbar-toggler');
const responsiveNavItems = [].slice.call(
document.querySelectorAll('#navbarResponsive .nav-link')
);
responsiveNavItems.map(function (responsiveNavItem) {
responsiveNavItem.addEventListener('click', () => {
if (window.getComputedStyle(navbarToggler).display !== 'none') {
navbarToggler.click();
}
});
});
});

@ -29,9 +29,6 @@ class App
private FrontController $frontController; private FrontController $frontController;
private Session $session;
public function __construct(string $appName, int $version, \App\Container $diContainer) public function __construct(string $appName, int $version, \App\Container $diContainer)
{ {
$this->appName = $appName; $this->appName = $appName;
@ -39,7 +36,7 @@ class App
$this->container = $diContainer; $this->container = $diContainer;
$this->router = new Router(""); $this->router = new Router("");
$this->frontController = new FrontController($this->router,$this->container); $this->frontController = new FrontController($this->router,$this->container);
$this->session = Session::getInstance(); Session::getInstance();
} }
public function use(IHttpMiddleware $middleware) public function use(IHttpMiddleware $middleware)
@ -142,7 +139,7 @@ class App
$route = $attribute->newInstance(); $route = $attribute->newInstance();
$this->router->addControllerRoute( $this->router->addControllerRoute(
implode('|', $route->getMethods()), $route->getMethods(),
$prefix . $route->getPath(), $prefix . $route->getPath(),
$controllerClass, $controllerClass,
$method->getName(), $method->getName(),

@ -24,6 +24,13 @@ class AppCreator
return $this; return $this;
} }
public function registerSingleton(string $serviceId, $service): self
{
$this->container->set($serviceId, $service, Container::SINGLETON);
$this->services[] = $serviceId;
return $this;
}
/** /**
* Create an instance or perform actions based on the current application environment. * Create an instance or perform actions based on the current application environment.
* *
@ -33,6 +40,7 @@ class AppCreator
{ {
// Check the application environment // Check the application environment
switch (APP_ENV) { switch (APP_ENV) {
case 'console': case 'console':
// Load the Console.php file in case of the 'console' environment // Load the Console.php file in case of the 'console' environment
require_once __DIR__ . '/../console/Console.php'; require_once __DIR__ . '/../console/Console.php';
@ -40,7 +48,6 @@ class AppCreator
case 'development': case 'development':
// Create a new instance of the App class in the 'development' environment // Create a new instance of the App class in the 'development' environment
return new App("HeartTrack", 1, $this->container); return new App("HeartTrack", 1, $this->container);
break;
case 'html': case 'html':
// Load the index.test.php file in case of the 'html' environment // Load the index.test.php file in case of the 'html' environment
require_once __DIR__ . '/index.test.php'; require_once __DIR__ . '/index.test.php';
@ -53,7 +60,6 @@ class AppCreator
} }
function AddControllers($namespacePrefix = 'App\Controller', $pathToControllers = __DIR__ . '/controller'): self function AddControllers($namespacePrefix = 'App\Controller', $pathToControllers = __DIR__ . '/controller'): self
{ {
$controllerFiles = glob($pathToControllers . '/*.php'); $controllerFiles = glob($pathToControllers . '/*.php');
@ -71,7 +77,8 @@ class AppCreator
if ($reflectionClass->isSubclassOf(BaseController::class)) { if ($reflectionClass->isSubclassOf(BaseController::class)) {
// Register in DI container // Register in DI container
$this->container->set($fullClassName, function () use ($fullClassName) { $this->container->set($fullClassName, function () use ($fullClassName) {
$controllerInstance = new $fullClassName(); /** @var $controllerInstance * */
$controllerInstance = $this->container->resolve($fullClassName);
$controllerInstance->setContainer($this->container); $controllerInstance->setContainer($this->container);
return $controllerInstance; return $controllerInstance;
}); });
@ -86,6 +93,11 @@ class AppCreator
{ {
return $this->services; return $this->services;
} }
public function getDicontainer()
{
return $this->container;
}
} }

@ -11,31 +11,45 @@ class Container implements ContainerInterface
{ {
private array $entries = []; private array $entries = [];
const SINGLETON = 'singleton';
const TRANSIENT = 'transient';
public function get(string $id) public function get(string $id)
{ {
if ($this->has($id)) { if ($this->has($id)) {
$entry = $this->entries[$id]; $entry = $this->entries[$id];
if (is_callable($entry)) {
return $entry($this); if ($entry['lifecycle'] === self::SINGLETON) {
if ($entry['instance'] === null) {
$entry['instance'] = $this->resolve($entry['concrete']);
}
return $entry['instance'];
} }
$id = $entry; if (is_callable($entry['concrete'])) {
return $entry['concrete']($this);
}
return $this->resolve($entry['concrete']);
} }
return $this->resolve($id); return $this->resolve($id);
} }
public function has(string $id): bool public function has(string $id): bool
{ {
return isset($this->entries[$id]); return isset($this->entries[$id]);
} }
public function set(string $id, callable|string $concrete): void public function set(string $id, callable|string $concrete, string $lifecycle = self::TRANSIENT): void
{ {
$this->entries[$id] = $concrete; $this->entries[$id] = [
'concrete' => $concrete,
'lifecycle' => $lifecycle,
'instance' => null
];
} }
public function resolve(string $id) public function resolve(string $id)

@ -2,6 +2,10 @@
namespace App\Controller; namespace App\Controller;
use Database\AthleteMapper;
use Database\EntrainementGateway;
use Database\EntrainementMapper;
use Shared\Validation;
use App\Container; use App\Container;
use App\Router\Request\IRequest; use App\Router\Request\IRequest;
use App\Router\Response\Response; use App\Router\Response\Response;
@ -9,62 +13,132 @@ use Shared\Attributes\Route;
use Twig\Environment; use Twig\Environment;
use Data\Core\Preferences; use Data\Core\Preferences;
use Shared\Log; use Shared\Log;
use Manager\UserManager;
use Database\Connexion;
use Database\AthleteGateway;
class AthleteController extends BaseController class AthleteController extends BaseController
{ {
#[Route(path: '/search-ath', name: 'search-ath', methods: ['GET'])] private Environment $twig;
protected Preferences $preference;
public function __construct()
{
//session_start();
$this->preference = new Preferences();
}
// #[Route(path: '/search-user', name: 'search-user', methods: ['GET'])]
// public function searchUser(string $username, IRequest $req): Response
// {
// $taberror = [];
// if(!Validation::val_string($username)){
// print("Nom invalide.");
// }
// else {
// try {
// $athleteGateway = new AthleteGateway(new Connexion("mysql:host=localhost;dbname=sae_3", "Perederii", ""));
//// $listSearch=$this->container->get(UserManager::class)->searchUsersByName($username);
// $listSearch = $athleteGateway->getAthlete();
// $map = new AthleteMapper ();
// $athleteEntity = $map->athleteSqlToEntity($listSearch);
// foreach ($athleteEntity as $entity) {
// $users = $map->athleteEntityToModel($entity);
// $listUsers[$i++]=['nom' => $users->getNom(), 'prenom'=>$users->getPrenom(), 'img'=>'john_doe'];
// }
//
// $i=0;
// foreach ($users as $user){
// echo "<h1> HELLO </h1>";
// $listUsers[$i++]=['nom' => $user->getNom(), 'prenom'=>$user->getPrenom(), 'img'=>'john_doe', 'username'=>$user->getUsername()];
// }
// echo "<h1> HEllO </h1>";
// //$currentUser=$this->container->get(UserManager::class)->getCurrentUser();
// //$currentUser=$_SESSION['user'];
// $response = $this->render('./page/addfriend.html.twig',[
// 'css' => $_COOKIE['preferences'],
// 'pp' => "test",
// 'user' => 'johndoe',//$currentUser->getUsername(),
// 'role' => 'Athlete',//$currentUser->getRole(),
// 'users' => $listUsers
// ]);
// } catch (\Throwable $th) {
// throw $th;
// return $this->render("addfriend.html.twig", ['tabError' => $taberror ]);
// }
// }
// return $response;
//
// }
#[Route(path: '/search-user', name: 'search-user', methods: ['GET'])]
public function searchUser(string $username, IRequest $req): Response public function searchUser(string $username, IRequest $req): Response
{ {
$taberror = []; $taberror = [];
$utiliArray = [ if (!Validation::val_string($username)) {
[ print("Nom invalide.");
'nom' => 'John', } else {
'prenom' => 'Doe',
'img' => 'john_doe',
'username' => 'johndoe',
],
[
'nom' => 'Alice',
'prenom' => 'Smith',
'img' => 'alice_smith',
'username' => 'alicesmith',
],
];
// if(!Validation::val_string($name)){
try { try {
//code... $athleteGateway = new AthleteGateway(new Connexion("pgsql:host=localhost;dbname=sae_3", "Perederii", ""));
// $model->userMgr->getUser($name); $listSearch = $athleteGateway->getAthlete($username);
return $this->render('./page/addfriend.html.twig', [ $map = new AthleteMapper();
$athleteEntity = $map->athleteSqlToEntity($listSearch);
$listUsers = [];
$i = 0;
foreach ($athleteEntity as $entity) {
$user = $map->athleteEntityToModel($entity);
$listUsers[$i] = ['idathlete' => number_format($user->getId(), 1), 'nom' => $user->getNom(),
'prenom' => $user->getPrenom(),'email' => $user->getEmail(), 'sexe' => $user->getSexe(),
'taille' => $user->getTaille(), 'poids' => $user->getPoids(), 'motdepasse' => $user->getMotDePasse(),
'datenaissance' => $user->getDateNaissance(), 'iscoach' => $user->getRole(), 'img' => 'test',
'username' => $user->getUsername()];
$i++;
}
$response = $this->render('./page/addfriend.html.twig',[
'css' => $_COOKIE['preferences'],
'pp' => 'test',
'user' => 'johndoe',//$currentUser->getUsername(),
'role' => 'Athlete',//$currentUser->getRole(),
'users' => $listUsers
]);
} catch (\Throwable $th) {
throw $th;
return $this->render("addfriend.html.twig", ['tabError' => $taberror]);
}
}
return $response;
}
#[Route(path: '/analyses', name: 'analyses', methods: ['GET'])]
public function analyses(): Response
{
return $this->render('./page/analyze.html.twig',[
'css' => $this->preference->getCookie(), 'css' => $this->preference->getCookie(),
'pp' => "test2", 'pp' => "test2",
'user' => "Doe", 'user' => 'johndoe',//$currentUser->getUsername(),
'role' => "Athlète", 'role' => 'Athlete',//$currentUser->getRole(),
'friendship' => [], 'friendship' => [],
'analyzes' => [], 'analyzes' => [],
'mails' => [], 'mails' => [],
'users' => $utiliArray, 'users' => [],
'infoUser' => [], 'infoUser' => [],
'exos' => [], 'exos' => [],
'member' => [], 'member' => []
'responce' => "Notification d'ajout envoyée à $username"
]); ]);
} catch (\Throwable $th) {
//throw $th;
// return $this->render("addfriend.html.twig", ['tabError' => $taberror ]);
} }
// }
} #[Route(path: '/activity', name: 'activity', methods: ['GET'])]
public function activity(): Response
#[Route(path: '/analyses', name: 'analyses', methods: ['GET'])]
public function analyses(): Response
{ {
return $this->render('./page/analyze.html.twig', [ return $this->render('./page/activity.html.twig',[
'css' => $this->preference->getCookie(), 'css' => $this->preference->getCookie(),
'pp' => "test2", 'pp' => "test",
'user' => "Doe", 'user' => 'johndoe',//$currentUser->getUsername(),
'role' => "Athlète", 'role' => 'Athlete',//$currentUser->getRole(),
'friendship' => [], 'friendship' => [],
'analyzes' => [], 'analyzes' => [],
'mails' => [], 'mails' => [],
@ -79,11 +153,29 @@ class AthleteController extends BaseController
#[Route(path: '/exercice', name: 'exercice', methods: ['GET'])] // 8 #[Route(path: '/exercice', name: 'exercice', methods: ['GET'])] // 8
public function exercice(): Response public function exercice(): Response
{ {
return $this->render('./page/exercice.html.twig', [ try {
$entrainementGateway = new EntrainementGateway(new Connexion("pgsql:host=localhost;dbname=sae_3", "Perederii", ""));
$listSearch = $entrainementGateway->getEntrainements();
$map = new EntrainementMapper();
$entrainementEntity = $map->entrainementSqlToEntity($listSearch);
$listUsers = [];
$i = 0;
foreach ($entrainementEntity as $entity) {
$user = $map->entrainementEntityToModel($entity);
$listUsers[$i] = ['idathlete' => number_format($user->getId(), 1), 'nom' => $user->getNom(),
'prenom' => $user->getPrenom(),'email' => $user->getEmail(), 'sexe' => $user->getSexe(),
'taille' => $user->getTaille(), 'poids' => $user->getPoids(), 'motdepasse' => $user->getMotDePasse(),
'datenaissance' => $user->getDateNaissance(), 'iscoach' => $user->getRole(), 'img' => 'test',
'username' => $user->getUsername()];
$i++;
}
$response = $this->render('./page/exercice.html.twig',[
'css' => $this->preference->getCookie(), 'css' => $this->preference->getCookie(),
'pp' => "test2", 'pp' => "test2",
'user' => "Doe", 'user' => 'johndoe',//$currentUser->getUsername(),
'role' => "Athlète", 'role' => 'Athlete',//$currentUser->getRole(),
'friendship' => [], 'friendship' => [],
'analyzes' => [], 'analyzes' => [],
'mails' => [], 'mails' => [],
@ -92,59 +184,98 @@ class AthleteController extends BaseController
'exos' => [], 'exos' => [],
'member' => [] 'member' => []
]); ]);
} catch (\Throwable $th) {
throw $th;
return $this->render("addfriend.html.twig", ['tabError' => $taberror]);
}
return $response;
} }
#[Route(path: '/add-friend', name: 'add-friend', methods: ['POST'])] #[Route(path: '/exercices', name: 'exercices', methods: ['POST'])] // 8
public function addFriend(string $username, IRequest $req): Response public function exercices(String $type, String $intensite, String $date, IRequest $req): Response
{ {
$taberror = []; $exercicesArray = [
$utiliArray = [
[
'nom' => 'John',
'prenom' => 'Doe',
'img' => 'john_doe',
'username' => 'johndoe',
],
[ [
'nom' => 'Alice', 'date' => $date,
'prenom' => 'Smith', 'type' => $type,
'img' => 'alice_smith', 'intensite' => $intensite,
'username' => 'alicesmith', 'status' => 'A venir',
], ]
]; ];
// if(!Validation::val_string($name)){ return $this->render('./page/exercice.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => 'johndoe',//$currentUser->getUsername(),
'role' => 'Athlete',//$currentUser->getRole(),
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => $exercicesArray,
'member' => []
]);
}
#[Route(path: '/add-friend', name: 'add-friend', methods: ['POST'])]
public function addFriend(string $username, IRequest $req): Response
{
try { try {
//code... $athleteGateway = new AthleteGateway(new Connexion("pgsql:host=localhost;dbname=sae_3", "Perederii", ""));
// $model->userMgr->addFriend($name); $userSearched=$athleteGateway->getAthleteByFirstName($username);
return $this->render('./page/addfriend.html.twig', [ $currentUser=$this->container->get(UserManager::class)->getUserById(1);
if ($userSearched!=null) {
$currentUser->addFriend($userSearched);
foreach ($userSearched as $user) {
$users = ['nom' => $user->getNom(), 'prenom' => $user->getPrenom(), 'img' => 'test', 'username' => $user->getUsername()];
}
}
else{
$users=[];
}
return $this->render('./page/addfriend.html.twig',[
'css' => $this->preference->getCookie(), 'css' => $this->preference->getCookie(),
'pp' => "test2", 'pp' => "test2",
'user' => "Doe", 'user' => 'johndoe',//$currentUser->getUsername(),
'role' => "Athlète", 'role' => 'Athlete',//$currentUser->getRole(),
'friendship' => [], 'friendship' => [],
'analyzes' => [], 'analyzes' => [],
'mails' => [], 'mails' => [],
'users' => $utiliArray, 'users' => $users,
'infoUser' => [], 'infoUser' => [],
'exos' => [], 'exos' => [],
'member' => [], 'member' => [],
'responce' => "Notification d'ajout envoyée à $username" 'responce' => "Notification d'ajout envoyée à $username"
]); ]);
} catch (\Throwable $th) { } catch (\Throwable $th) {
//throw $th; throw $th;
// return $this->render("addfriend.html.twig", ['tabError' => $taberror ]); return $this->render("addfriend.html.twig", ['tabError' => $taberror ]);
} }
// }
} }
#[Route(path: '/friend', name: 'friend', methods: ['GET'])] #[Route(path: '/friend', name: 'friend', methods: ['GET'])]
public function friend(): Response public function friend(): Response
{ {
$utiliArray = [ return $this->render('./page/addfriend.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => 'John',//$currentUser->getUsername(),
'role' => 'Athlete',//$currentUser->getRole(),
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => [],
]);
}
/*#[Route(path: '/friendlist', name: 'friendlist', methods: ['POST'])]
public function friendlist(string $username, IRequest $req): Response
{
$friendList = [
[ [
'nom' => 'John', 'nom' => 'John',
'prenom' => 'Doe', 'prenom' => 'Doe',
@ -158,19 +289,44 @@ class AthleteController extends BaseController
'username' => 'alicesmith', 'username' => 'alicesmith',
], ],
]; ];
return $this->render('./page/addfriend.html.twig',[ // TODO
// -> Enlever ou bloquer un utilisateur en fonction de son username
//$friendList = currentUser->getFriends();
return $this->render('./page/friend.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => 'johndoe',//$currentUser->getUsername(),
'role' => 'Athlete',//$currentUser->getRole(),
'friendship' => $friendList,
]);
}*/
#[Route(path: '/friendlist', name: 'friendlist2', methods: ['GET'])]
public function friendlist2(): Response
{
$athleteGateway = new AthleteGateway(new Connexion("pgsql:host=localhost;dbname=sae_3", "Perederii", ""));
$friendList = $athleteGateway->getListIdFriends(1);
foreach ($userSearched as $friendList) {
$users = ['nom' => $user->getNom(), 'prenom' => $user->getPrenom(), 'img' => 'test', 'username' => $user->getUsername()];
}
return $this->render('./page/friend.html.twig',[
'css' => $this->preference->getCookie(), 'css' => $this->preference->getCookie(),
'pp' => "test2", 'pp' => "test2",
'user' => "Doe", 'user' => "Doe",
'role' => "Athlète", 'role' => "Athlète",
'friendship' => [], 'friendship' => $list,
'analyzes' => [], 'analyzes' => [],
'mails' => [], 'mails' => [],
'users' => $utiliArray, 'users' => [],
'infoUser' => [], 'infoUser' => [],
'exos' => [], 'exos' => [],
'member' => [], 'member' => [],
]); ]);
} }
// #[Route(path: '/delete-friend', name: 'delete-friend', methods: ['POST'])]
} }
?>

@ -4,98 +4,96 @@ namespace App\Controller;
use App\Container; use App\Container;
use App\Router\Request\IRequest; use App\Router\Request\IRequest;
use App\Router\Response\RedirectResponse;
use App\Router\Response\Response; use App\Router\Response\Response;
use App\Router\Response\IResponse; use App\Router\Response\IResponse;
use Couchbase\UserManager; use App\Router\Session;
use Manager\UserManager;
use Shared\Attributes\Route; use Shared\Attributes\Route;
use Shared\Validation; use Shared\Validation;
use Twig\Environment; use Twig\Environment;
use Data\Core\Preferences; use Data\Core\Preferences;
use Shared\Log; use Shared\Log;
use function PHPUnit\Framework\isEmpty;
class AuthController extends BaseController class AuthController extends BaseController
{ {
private UserManager $userMgr;
public function __construct(UserManager $manager){
parent::__construct();
$this->userMgr = $manager;
}
#[Route('/login', name: 'login',methods: ['POST'])] #[Route('/login', name: 'login',methods: ['POST'])]
public function login(IRequest $request): IResponse { public function login(string $email,string $password, IRequest $request): IResponse {
$error = []; $error = [];
try {
$log=Validation::clean_string($request->getBody()['email']);
$mdp=Validation::clean_string($request->getBody()['password']);
} catch (\Throwable $th) {
$error = "Wrong cred";
}
if($this->container->get(UserManager::class)->login($log,$mdp)){ try {
return $this->redirectToRoute('/'); $log=$email; // should check email with verrify email
$mdp=Validation::clean_string($password);
if($this->userMgr->login($log,$mdp)){
return new RedirectResponse('/');
} }
else{ else{
$error [] = "Erreur de connexion. Essayez encore"; $error [] = "Erreur de connexion. Essayez encore";
}
return $this->render('./page/login.html.twig', ['error' => $error]);
return $this->render('./page/login.html.twig',[
'css' => $this->preference->getCookie(),
'login_error'=> $error,
]);
} }
#[Route('/log', name: 'baseLog',methods: ['GET'])] // should only cath a type of Exception not all
public function index(IRequest $request): IResponse { } catch (\Throwable $th) {
$error [] =$th->getMessage();
return $this->render('./page/login.html.twig',[ return $this->render('./page/login.html.twig',[
'css' => $this->preference->getCookie(), 'css' => $this->preference->getCookie(),
'pp' => "test2", 'login_error'=> $error,
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => []
]); ]);
} }
#[Route('/register', name: 'register' , methods:['GET'])] }
public function register(IRequest $request): IResponse #[Route('/login', name: 'login2',methods: ['GET'])]
{ public function login2(IRequest $request): IResponse {
if ($request->getMethod() == 'POST') {
$nom = $request->getBody()['nom'];
$prenom = $request->getBody()['prenom'];
$username = $request->getBody()['username'];
$email = $request->getBody()['email'];
$motDePasse = $request->getBody()['motDePasse'];
$sexe = $request->getBody()['sexe'];
$taille = $request->getBody()['taille'];
$poids = $request->getBody()['poids'];
$dateNaissanceStr = $request->getBody()['nom'];
$dateNaissance = new \DateTime($dateNaissanceStr);
return $this->render('./page/login.html.twig',[
'css' => $this->preference->getCookie(),
]);
if (!$dateNaissance) {
throw new \Exception("Date de naissance non valide. Format attendu : YYYY-MM-DD");
} }
#[Route('/register', name: 'register2' , methods:['GET'])]
public function register2(IRequest $request): IResponse{
return $this->render('./page/register.html.twig',[
'css' => $this->preference->getCookie(),
]);
$roleName = $request->getBody()['roleName']; }
#[Route('/register', name: 'register' , methods:['POST'])]
public function register(
string $nom,
string $prenom,
string $username,
string $mail,
string $motDePasse,
string $sexe,
float $taille,
float $poids,
string $dateNaissance,
string $roleName,
IRequest $request): IResponse
{
$error = [];
try {
$registrationData = [ $registrationData = [
'nom' => $nom, 'nom' => $nom,
'prenom' => $prenom, 'prenom' => $prenom,
'username' => $username, 'username' => $username,
'email' => $email, 'email' => $mail,
'sexe' => $sexe, 'sexe' => $sexe,
'taille' => $taille, 'taille' => $taille,
'poids' => $poids, 'poids' => $poids,
@ -103,45 +101,68 @@ class AuthController extends BaseController
'roleName' => $roleName 'roleName' => $roleName
]; ];
try { if ($this->userMgr->register($mail, $motDePasse, $registrationData) ) {
if ($this->container->get(UserManager::class)->register($email, $motDePasse, $registrationData)) { return new RedirectResponse('/');
return $this->redirectToRoute('/');
} else { } else {
$error [] = 'L\'inscription a échoué. Veuillez réessayer.'; $error [] = 'L\'inscription a échoué. Veuillez réessayer.';
return $this->render('./page/register.html.twig',[
'css' => $this->preference->getCookie(),
'register_error'=> $error,
]);
} }
} catch (\Exception $e) { } catch (\Throwable $e) {
$error [] = 'Erreur lors de l\'inscription: ' . $e->getMessage(); $error [] =$e->getMessage();
}
return $this->render('./page/register.html.twig', ['css' => $this->preference->getCookie(),"register_error" => $error ]);
} }
return $this->render('/register.html.twig');
} }
#[Route(path: '/mdp', name: 'mdp', methods: ['POST'])] //string $ancienMotDePasse,string $nouveauMotDePasse,string $confirmerMotDePasse,
public function mdp(string $ancienMotDePasse,string $nouveauMotDePasse,string $confirmerMotDePasse, IRequest $req): Response
#[Route(path: '/forgetPassword', name: 'forget-password2', methods: ['GET'])]
public function forgetPassword2(IRequest $request): IResponse
{ {
return $this->render('./page/password.html.twig',[
'css' => $this->preference->getCookie(),
]);
}
// CONFIRMER LES DONNESS !!!!! IMPORTANT #[Route(path: '/forgetPassword', name: 'forget-password', methods: ['POST'])]
public function forgetPassword(string $mail, IRequest $request): IResponse
{
return $this->render('./page/settings.html.twig',[ return $this->render('./page/password.html.twig',[
'css' => $this->preference->getCookie(), 'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => []
]); ]);
} }
#[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('/');
}
}
} }
?>

@ -8,13 +8,14 @@ use App\Router\Response\RedirectResponse;
use App\Router\Response\Response; use App\Router\Response\Response;
use Psr\Container\ContainerInterface; use Psr\Container\ContainerInterface;
use Shared\Log;
abstract class BaseController abstract class BaseController
{ {
protected Preferences $preference; protected Preferences $preference;
public function __construct(){ public function __construct(){
$this->preference = new Preferences(); $this->preference = new Preferences();
} }
protected ContainerInterface $container; protected ContainerInterface $container;
@ -62,18 +63,5 @@ abstract class BaseController
return new RedirectResponse($url, $status); return new RedirectResponse($url, $status);
} }
protected function redirectToRoute(string $route, array $parameters = [], int $status = 302): RedirectResponse
{
return $this->redirect($this->generateUrl($route, $parameters), $status);
}
/*
* TODO : Should hanle ierror if the route is not existing
* */
protected function generateUrl(string $route, array $parameters = []): string
{
return $this->container->get(\App\Router\Router::class)->generate($route, $parameters);
}
} }

@ -1,49 +1,34 @@
<?php <?php
// namespace App\Controller; namespace App\Controller;
// use App\Container; use App\Container;
// use App\Router\Request\IRequest; use App\Router\Request\IRequest;
// use App\Router\Response\Response; use App\Router\Response\Response;
// use App\Router\Response\IResponse; use App\Router\Response\IResponse;
// use Shared\Attributes\Route; use Shared\Attributes\Route;
// use Twig\Environment; use Twig\Environment;
// use Data\Core\Preferences; use Data\Core\Preferences;
// use Shared\Log; use Shared\Log;
class CoachController extends BaseController
{
// #[Route(path: '/coach', name: 'coach')] private ICoachManager $coachManager;
// class CoachController extends BaseController private $security;
// { private Environment $twig;
protected Preferences $preference;
// private ICoachManager $coachManager;
// private $security;
// public function __construct(DataManager $dataManager, Security $security) public function __construct(DataManager $dataManager, Security $security)
// { {
// $this->coachManager = $dataManager->coachMgr; session_start();
// $this->security = $security; $this->coachManager = $dataManager->coachMgr;
// } $this->security = $security;
$this->preference = new Preferences();
}
// #[Route(path: '/', name: 'home', methods: ['GET'])]
// public function index(): Response
// {
// return $this->render('./page/home.html.twig',[
// 'css' => $this->preference->getCookie(),
// 'pp' => "test2",
// 'user' => "Doe",
// 'role' => "Athlète",
// 'friendship' => [],
// 'analyzes' => [],
// 'mails' => [],
// 'users' => [],
// 'infoUser' => [],
// 'exos' => [],
// 'member' => []
// ]);
// }
// #[Route('/global-stats', name: 'coach_global_stats', methods: ['GET'])] // #[Route('/global-stats', name: 'coach_global_stats', methods: ['GET'])]
// public function globalStats(): Response // public function globalStats(): Response
// { // {
@ -51,41 +36,145 @@
// return $this->render('coach/global_stats.html.twig'); // return $this->render('coach/global_stats.html.twig');
// } // }
// #[Route(path: '/exercice', name: 'exercice', methods: ['GET'])] // 8
// public function exercice(): Response
// {
// return $this->render('./page/exercice.html.twig',[
// 'css' => $this->preference->getCookie(),
// 'pp' => "test2",
// 'user' => "Doe",
// 'role' => "Athlète",
// 'friendship' => [],
// 'analyzes' => [],
// 'mails' => [],
// 'users' => [],
// 'infoUser' => [],
// 'exos' => [],
// 'member' => []
// ]);
// }
// #[Route(path: '/coaching', name: 'coaching', methods: ['GET'])] #[Route(path: '/coaching', name: 'coaching', methods: ['GET'])]
// public function coaching(): Response public function coaching(): Response
// { {
// return $this->render('./page/coaching.html.twig',[ return $this->render('./page/coaching.html.twig',[
// 'css' => $this->preference->getCookie(), 'css' => $this->preference->getCookie(),
// 'pp' => "test2", 'pp' => "test2",
// 'user' => "Doe", 'user' => "Doe",
// 'role' => "Athlète", 'role' => "Coach",
// 'friendship' => [], 'friendship' => [],
// 'analyzes' => [], 'analyzes' => [],
// 'mails' => [], 'mails' => [],
// 'users' => [], 'users' => [],
// 'infoUser' => [], 'infoUser' => [],
// 'exos' => [], 'exos' => [],
// 'member' => [] 'member' => []
// ]); ]);
// } }
#[Route(path: '/search-member', name: 'search-member', methods: ['GET'])]
public function searchMember(string $username, IRequest $req): Response
{
$taberror = [];
// FILTER
$utiliArray = [
[
'nom' => 'John',
'prenom' => 'Doe',
'img' => 'john_doe',
'username' => 'johndoe',
],
[
'nom' => 'Alice',
'prenom' => 'Smith',
'img' => 'alice_smith',
'username' => 'alicesmith',
],
];
// if(!Validation::val_string($name)){
try {
//code...
// $model->userMgr->addFriend($name);
return $this->render('./page/addmember.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => $utiliArray,
'infoUser' => [],
'exos' => [],
'member' => [],
'responce' => "Notification d'ajout envoyée à $username"
]);
} catch (\Throwable $th) {
//throw $th;
// return $this->render("addfriend.html.twig", ['tabError' => $taberror ]);
}
// }
}
#[Route(path: '/add-member', name: 'add-member', methods: ['POST'])]
public function addmember(string $username, IRequest $req): Response
{
$taberror = [];
$utiliArray = [
[
'nom' => 'John',
'prenom' => 'Doe',
'img' => 'john_doe',
'username' => 'johndoe',
],
[
'nom' => 'Alice',
'prenom' => 'Smith',
'img' => 'alice_smith',
'username' => 'alicesmith',
],
];
// if(!Validation::val_string($name)){
try {
//code...
// $model->userMgr->addFriend($name);
return $this->render('./page/addmember.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => $utiliArray,
'infoUser' => [],
'exos' => [],
'member' => [],
'responce' => "Notification d'ajout envoyée à $username"
]);
} catch (\Throwable $th) {
//throw $th;
// return $this->render("addfriend.html.twig", ['tabError' => $taberror ]);
}
// }
}
#[Route(path: '/member', name: 'member', methods: ['GET'])]
public function member(): Response
{
$utiliArray = [
[
'nom' => 'John',
'prenom' => 'Doe',
'img' => 'john_doe',
'username' => 'johndoe',
],
[
'nom' => 'Alice',
'prenom' => 'Smith',
'img' => 'alice_smith',
'username' => 'alicesmith',
],
];
return $this->render('./page/addmember.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => $utiliArray,
'infoUser' => [],
'exos' => [],
'member' => [],
]);
}
// #[Route('/list-athletes', name: 'coach_list_athletes')] // #[Route('/list-athletes', name: 'coach_list_athletes')]
// public function listAthletes(): Response // public function listAthletes(): Response
@ -121,4 +210,4 @@
// // } // // }
// } }

@ -1,563 +1,422 @@
<?php <?php
//
namespace App\Controller; //namespace App\Controller;
//
use App\Container; //use App\Container;
use App\Router\Request\IRequest; //use App\Router\Request\IRequest;
use App\Router\Response\Response; //use App\Router\Response\Response;
use Shared\Attributes\Route; //use Shared\Attributes\Route;
use Twig\Environment; //use Twig\Environment;
use Data\Core\Preferences; //use Data\Core\Preferences;
use Shared\Log; //use Shared\Log;
//
// TODO : Remove this BaseClass //// TODO : Remove this BaseClass
class Controller extends BaseController //class Controller extends BaseController
{ //{
private Environment $twig; //
protected Preferences $preference; // #[Route(path: '/activity', name: 'activity', methods: ['GET'])]
// public function activity(): Response
public function __construct() // {
{ // return $this->render('./page/activity.html.twig',[
session_start(); // 'css' => $this->preference->getCookie(),
$this->preference = new Preferences(); // 'pp' => "test2",
} // 'user' => "Doe",
// 'role' => "Athlète",
#[Route(path: '/', name: 'home', methods: ['GET'])] // 'friendship' => [],
public function index(): Response // 'analyzes' => [],
{ // 'mails' => [],
return $this->render('./page/index.html',[ // 'users' => [],
'css' => $this->preference->getCookie(), // 'infoUser' => [],
'pp' => "test2", // 'exos' => [],
'user' => "Doe", // 'member' => []
'role' => "Athlète", // ]);
'friendship' => [], // }
'analyzes' => [], //
'mails' => [], //
'users' => [], // #[Route(path: '/exercices', name: 'exercices', methods: ['POST'])] // 8
'infoUser' => [], // public function exercices(String $type, String $intensite, String $date, IRequest $req): Response
'exos' => [], // {
'member' => [] // $exercicesArray = [
]); // [
} // 'date' => $date,
// 'type' => $type,
#[Route(path: '/analyses', name: 'analyses', methods: ['GET'])] // 'intensite' => $intensite,
public function analyses(): Response // 'status' => 'A venur',
{ // ]
return $this->render('./page/analyze.html.twig',[ // ];
'css' => $this->preference->getCookie(), // return $this->render('./page/exercice.html.twig',[
'pp' => "test2", // 'css' => $this->preference->getCookie(),
'user' => "Doe", // 'pp' => "test2",
'role' => "Athlète", // 'user' => "Doe",
'friendship' => [], // 'role' => "Athlète",
'analyzes' => [], // 'friendship' => [],
'mails' => [], // 'analyzes' => [],
'users' => [], // 'mails' => [],
'infoUser' => [], // 'users' => [],
'exos' => [], // 'infoUser' => [],
'member' => [] // 'exos' => $exercicesArray,
]); // 'member' => []
} // ]);
// }
#[Route(path: '/activity', name: 'activity', methods: ['GET'])] //
public function activity(): Response // #[Route(path: '/search-user', name: 'search-user', methods: ['GET'])]
{ // public function searchUser(string $username, IRequest $req): Response
return $this->render('./page/activity.html.twig',[ // {
'css' => $this->preference->getCookie(), // $taberror = [];
'pp' => "test2", // // FILTER
'user' => "Doe", // $utiliArray = [
'role' => "Athlète", // [
'friendship' => [], // 'nom' => 'John',
'analyzes' => [], // 'prenom' => 'Doe',
'mails' => [], // 'img' => 'john_doe',
'users' => [], // 'username' => 'johndoe',
'infoUser' => [], // ],
'exos' => [], // [
'member' => [] // 'nom' => 'Alice',
]); // 'prenom' => 'Smith',
} // 'img' => 'alice_smith',
// 'username' => 'alicesmith',
// ],
#[Route(path: '/exercices', name: 'exercices', methods: ['POST'])] // 8 // ];
public function exercices(String $type, String $intensite, String $date, IRequest $req): Response // // if(!Validation::val_string($name)){
{ // try {
$exercicesArray = [ // //code...
[ // // $model->userMgr->addFriend($name);
'date' => $date, // return $this->render('./page/addfriend.html.twig',[
'type' => $type, // 'css' => $this->preference->getCookie(),
'intensite' => $intensite, // 'pp' => "test2",
'status' => 'A venur', // 'user' => "Doe",
] // 'role' => "Athlète",
]; // 'friendship' => [],
return $this->render('./page/exercice.html.twig',[ // 'analyzes' => [],
'css' => $this->preference->getCookie(), // 'mails' => [],
'pp' => "test2", // 'users' => $utiliArray,
'user' => "Doe", // 'infoUser' => [],
'role' => "Athlète", // 'exos' => [],
'friendship' => [], // 'member' => [],
'analyzes' => [], // 'responce' => "Notification d'ajout envoyée à $username"
'mails' => [], // ]);
'users' => [], // } catch (\Throwable $th) {
'infoUser' => [], // //throw $th;
'exos' => $exercicesArray, // // return $this->render("addfriend.html.twig", ['tabError' => $taberror ]);
'member' => [] // }
]); // // }
} //
// }
#[Route(path: '/search-user', name: 'search-user', methods: ['GET'])] //
public function searchUser(string $username, IRequest $req): Response // #[Route(path: '/search-member', name: 'search-member', methods: ['GET'])]
{ // public function searchMember(string $username, IRequest $req): Response
$taberror = []; // {
// FILTER // $taberror = [];
$utiliArray = [ // // FILTER
[ // $utiliArray = [
'nom' => 'John', // [
'prenom' => 'Doe', // 'nom' => 'John',
'img' => 'john_doe', // 'prenom' => 'Doe',
'username' => 'johndoe', // 'img' => 'john_doe',
], // 'username' => 'johndoe',
[ // ],
'nom' => 'Alice', // [
'prenom' => 'Smith', // 'nom' => 'Alice',
'img' => 'alice_smith', // 'prenom' => 'Smith',
'username' => 'alicesmith', // 'img' => 'alice_smith',
], // 'username' => 'alicesmith',
]; // ],
// if(!Validation::val_string($name)){ // ];
try { // // if(!Validation::val_string($name)){
//code... // try {
// $model->userMgr->addFriend($name); // //code...
return $this->render('./page/addfriend.html.twig',[ // // $model->userMgr->addFriend($name);
'css' => $this->preference->getCookie(), // return $this->render('./page/addmember.html.twig',[
'pp' => "test2", // 'css' => $this->preference->getCookie(),
'user' => "Doe", // 'pp' => "test2",
'role' => "Athlète", // 'user' => "Doe",
'friendship' => [], // 'role' => "Athlète",
'analyzes' => [], // 'friendship' => [],
'mails' => [], // 'analyzes' => [],
'users' => $utiliArray, // 'mails' => [],
'infoUser' => [], // 'users' => $utiliArray,
'exos' => [], // 'infoUser' => [],
'member' => [], // 'exos' => [],
'responce' => "Notification d'ajout envoyée à $username" // 'member' => [],
]); // 'responce' => "Notification d'ajout envoyée à $username"
} catch (\Throwable $th) { // ]);
//throw $th; // } catch (\Throwable $th) {
// return $this->render("addfriend.html.twig", ['tabError' => $taberror ]); // //throw $th;
} // // return $this->render("addfriend.html.twig", ['tabError' => $taberror ]);
// } // }
// // }
} //
// }
#[Route(path: '/search-member', name: 'search-member', methods: ['GET'])] //
public function searchMember(string $username, IRequest $req): Response // #[Route(path: '/add-member', name: 'add-member', methods: ['POST'])]
{ // public function addmember(string $username, IRequest $req): Response
$taberror = []; // {
// FILTER // $taberror = [];
$utiliArray = [ // $utiliArray = [
[ // [
'nom' => 'John', // 'nom' => 'John',
'prenom' => 'Doe', // 'prenom' => 'Doe',
'img' => 'john_doe', // 'img' => 'john_doe',
'username' => 'johndoe', // 'username' => 'johndoe',
], // ],
[ // [
'nom' => 'Alice', // 'nom' => 'Alice',
'prenom' => 'Smith', // 'prenom' => 'Smith',
'img' => 'alice_smith', // 'img' => 'alice_smith',
'username' => 'alicesmith', // 'username' => 'alicesmith',
], // ],
]; // ];
// if(!Validation::val_string($name)){ // // if(!Validation::val_string($name)){
try { // try {
//code... // //code...
// $model->userMgr->addFriend($name); // // $model->userMgr->addFriend($name);
return $this->render('./page/addmember.html.twig',[ // return $this->render('./page/addmember.html.twig',[
'css' => $this->preference->getCookie(), // 'css' => $this->preference->getCookie(),
'pp' => "test2", // 'pp' => "test2",
'user' => "Doe", // 'user' => "Doe",
'role' => "Athlète", // 'role' => "Athlète",
'friendship' => [], // 'friendship' => [],
'analyzes' => [], // 'analyzes' => [],
'mails' => [], // 'mails' => [],
'users' => $utiliArray, // 'users' => $utiliArray,
'infoUser' => [], // 'infoUser' => [],
'exos' => [], // 'exos' => [],
'member' => [], // 'member' => [],
'responce' => "Notification d'ajout envoyée à $username" // 'responce' => "Notification d'ajout envoyée à $username"
]); // ]);
} catch (\Throwable $th) { // } catch (\Throwable $th) {
//throw $th; // //throw $th;
// return $this->render("addfriend.html.twig", ['tabError' => $taberror ]); // // return $this->render("addfriend.html.twig", ['tabError' => $taberror ]);
} // }
// } // // }
//
} // }
//
#[Route(path: '/add-member', name: 'add-member', methods: ['POST'])] // #[Route(path: '/member', name: 'member', methods: ['GET'])]
public function addmember(string $username, IRequest $req): Response // public function member(): Response
{ // {
$taberror = []; // $utiliArray = [
$utiliArray = [ // [
[ // 'nom' => 'John',
'nom' => 'John', // 'prenom' => 'Doe',
'prenom' => 'Doe', // 'img' => 'john_doe',
'img' => 'john_doe', // 'username' => 'johndoe',
'username' => 'johndoe', // ],
], // [
[ // 'nom' => 'Alice',
'nom' => 'Alice', // 'prenom' => 'Smith',
'prenom' => 'Smith', // 'img' => 'alice_smith',
'img' => 'alice_smith', // 'username' => 'alicesmith',
'username' => 'alicesmith', // ],
], // ];
]; // return $this->render('./page/addmember.html.twig',[
// if(!Validation::val_string($name)){ // 'css' => $this->preference->getCookie(),
try { // 'pp' => "test2",
//code... // 'user' => "Doe",
// $model->userMgr->addFriend($name); // 'role' => "Athlète",
return $this->render('./page/addmember.html.twig',[ // 'friendship' => [],
'css' => $this->preference->getCookie(), // 'analyzes' => [],
'pp' => "test2", // 'mails' => [],
'user' => "Doe", // 'users' => $utiliArray,
'role' => "Athlète", // 'infoUser' => [],
'friendship' => [], // 'exos' => [],
'analyzes' => [], // 'member' => [],
'mails' => [], // ]);
'users' => $utiliArray, // }
'infoUser' => [], //
'exos' => [], //
'member' => [], // #[Route(path: '/friendlist', name: 'friendlist', methods: ['POST'])]
'responce' => "Notification d'ajout envoyée à $username" // public function friendlist(string $username, IRequest $req): Response
]); // {
} catch (\Throwable $th) { // $utiliArray = [
//throw $th; // [
// return $this->render("addfriend.html.twig", ['tabError' => $taberror ]); // 'nom' => 'John',
} // 'prenom' => 'Doe',
// } // 'img' => 'john_doe',
// 'username' => 'johndoe',
} // ],
// [
#[Route(path: '/member', name: 'member', methods: ['GET'])] // 'nom' => 'Alice',
public function member(): Response // 'prenom' => 'Smith',
{ // 'img' => 'alice_smith',
$utiliArray = [ // 'username' => 'alicesmith',
[ // ],
'nom' => 'John', // ];
'prenom' => 'Doe', // /* TODO */
'img' => 'john_doe', //
'username' => 'johndoe', // // -> Enlever ou bloquer un utilisateur en fonction de son username
], //
[ // return $this->render('./page/friend.html.twig',[
'nom' => 'Alice', // 'css' => $this->preference->getCookie(),
'prenom' => 'Smith', // 'pp' => "test2",
'img' => 'alice_smith', // 'user' => "Doe",
'username' => 'alicesmith', // 'role' => "Athlète",
], // 'friendship' => $utiliArray,
]; // 'analyzes' => [],
return $this->render('./page/addmember.html.twig',[ // 'mails' => [],
'css' => $this->preference->getCookie(), // 'users' => [],
'pp' => "test2", // 'infoUser' => [],
'user' => "Doe", // 'exos' => [],
'role' => "Athlète", // 'member' => [],
'friendship' => [], // ]);
'analyzes' => [], // }
'mails' => [], //
'users' => $utiliArray, // #[Route(path: '/friendlist', name: 'friendlist2', methods: ['GET'])]
'infoUser' => [], // public function friendlist2(): Response
'exos' => [], // {
'member' => [], // $utiliArray = [
]); // [
} // 'nom' => 'John',
// 'prenom' => 'Doe',
// 'img' => 'test',
#[Route(path: '/friendlist', name: 'friendlist', methods: ['POST'])] // 'status' => 'johndoe',
public function friendlist(string $username, IRequest $req): Response // 'username' => 'jdoe',
{ // ],
$utiliArray = [ // [
[ // 'nom' => 'Alice',
'nom' => 'John', // 'prenom' => 'Smith',
'prenom' => 'Doe', // 'img' => 'test2',
'img' => 'john_doe', // 'status' => 'alicesmith',
'username' => 'johndoe', // 'username' => 'asmith',
], // ],
[ // ];
'nom' => 'Alice', // return $this->render('./page/friend.html.twig',[
'prenom' => 'Smith', // 'css' => $this->preference->getCookie(),
'img' => 'alice_smith', // 'pp' => "test2",
'username' => 'alicesmith', // 'user' => "Doe",
], // 'role' => "Athlète",
]; // 'friendship' => $utiliArray,
/* TODO */ // 'analyzes' => [],
// 'mails' => [],
// -> Enlever ou bloquer un utilisateur en fonction de son username // 'users' => [],
// 'infoUser' => [],
return $this->render('./page/friend.html.twig',[ // 'exos' => [],
'css' => $this->preference->getCookie(), // 'member' => [],
'pp' => "test2", // ]);
'user' => "Doe", // }
'role' => "Athlète", //
'friendship' => $utiliArray, // #[Route(path: '/coaching', name: 'coaching', methods: ['GET'])]
'analyzes' => [], // public function coaching(): Response
'mails' => [], // {
'users' => [], // return $this->render('./page/coaching.html.twig',[
'infoUser' => [], // 'css' => $this->preference->getCookie(),
'exos' => [], // 'pp' => "test2",
'member' => [], // 'user' => "Doe",
]); // 'role' => "Athlète",
} // 'friendship' => [],
// 'analyzes' => [],
#[Route(path: '/friendlist', name: 'friendlist2', methods: ['GET'])] // 'mails' => [],
public function friendlist2(): Response // 'users' => [],
{ // 'infoUser' => [],
$utiliArray = [ // 'exos' => [],
[ // 'member' => []
'nom' => 'John', // ]);
'prenom' => 'Doe', // }
'img' => 'test', //
'status' => 'johndoe', // #[Route(path: '/mail', name: 'mail', methods: ['GET'])]
'username' => 'jdoe', // public function mail(): Response
], // {
[ // return $this->render('./page/mail.html.twig',[
'nom' => 'Alice', // 'css' => $this->preference->getCookie(),
'prenom' => 'Smith', // 'pp' => "test2",
'img' => 'test2', // 'user' => "Doe",
'status' => 'alicesmith', // 'role' => "Athlète",
'username' => 'asmith', // 'friendship' => [],
], // 'analyzes' => [],
]; // 'mails' => [],
return $this->render('./page/friend.html.twig',[ // 'users' => [],
'css' => $this->preference->getCookie(), // 'infoUser' => [],
'pp' => "test2", // 'exos' => [],
'user' => "Doe", // 'member' => []
'role' => "Athlète", // ]);
'friendship' => $utiliArray, // }
'analyzes' => [], //
'mails' => [], //
'users' => [], // #[Route(path: '/profile', name: 'profile', methods: ['GET'])]
'infoUser' => [], // public function profile(): Response
'exos' => [], // {
'member' => [], // return $this->render('./page/profile.html.twig',[
]); // 'css' => $this->preference->getCookie(),
} // 'pp' => "test2",
// 'user' => "Doe",
#[Route(path: '/coaching', name: 'coaching', methods: ['GET'])] // 'role' => "Athlète",
public function coaching(): Response // 'friendship' => [],
{ // 'analyzes' => [],
return $this->render('./page/coaching.html.twig',[ // 'mails' => [],
'css' => $this->preference->getCookie(), // 'users' => [],
'pp' => "test2", // 'infoUser' => [],
'user' => "Doe", // 'exos' => [],
'role' => "Athlète", // 'member' => []
'friendship' => [], // ]);
'analyzes' => [], // }
'mails' => [], //
'users' => [], //
'infoUser' => [], // #[Route(path: '/psettings', name: 'psettings', methods: ['POST'])]
'exos' => [], // public function psettings(string $nom,string $prenom,string $dateNaissance,string $mail,string $tel, IRequest $req): Response
'member' => [] // {
]); //
} //
// return $this->render('./page/settings.html.twig',[
#[Route(path: '/mail', name: 'mail', methods: ['GET'])] // 'css' => $this->preference->getCookie(),
public function mail(): Response // 'pp' => "test2",
{ // 'user' => $prenom,
return $this->render('./page/mail.html.twig',[ // 'role' => "Athlète",
'css' => $this->preference->getCookie(), // 'friendship' => [],
'pp' => "test2", // 'analyzes' => [],
'user' => "Doe", // 'mails' => [],
'role' => "Athlète", // 'users' => [],
'friendship' => [], // 'infoUser' => [],
'analyzes' => [], // 'exos' => [],
'mails' => [], // 'member' => []
'users' => [], // ]);
'infoUser' => [], // }
'exos' => [], //
'member' => [] //
]); //
} //
// #[Route(path: '/pass', name: 'pass', methods: ['GET'])]
#[Route(path: '/import', name: 'import', methods: ['GET'])] // public function pass(): Response
public function import(): Response // {
{ //
return $this->render('./page/import.html.twig',[ // // CONFIRMER LES DONNESS !!!!! IMPORTANT
'css' => $this->preference->getCookie(), //
'pp' => "test2", // return $this->render('./page/password.html.twig',[
'user' => "Doe", // 'css' => $this->preference->getCookie(),
'role' => "Athlète", // 'pp' => "test2",
'friendship' => [], // 'user' => "Doe",
'analyzes' => [], // 'role' => "Athlète",
'mails' => [], // 'friendship' => [],
'users' => [], // 'analyzes' => [],
'infoUser' => [], // 'mails' => [],
'exos' => [], // 'users' => [],
'member' => [] // 'infoUser' => [],
]); // 'exos' => [],
} // 'member' => []
// ]);
// }
#[Route(path: '/profile', name: 'profile', methods: ['GET'])] //
public function profile(): Response // #[Route(path: '/password', name: 'password', methods: ['POST'])]
{ // public function password(string $email, IRequest $req): Response
return $this->render('./page/profile.html.twig',[ // {
'css' => $this->preference->getCookie(), //
'pp' => "test2", // // CONFIRMER LES DONNESS !!!!! IMPORTANT
'user' => "Doe", //
'role' => "Athlète", // return $this->render('./page/login.html.twig',[
'friendship' => [], // 'css' => $this->preference->getCookie(),
'analyzes' => [], // 'pp' => "test2",
'mails' => [], // 'user' => "Doe",
'users' => [], // 'role' => "Athlète",
'infoUser' => [], // 'friendship' => [],
'exos' => [], // 'analyzes' => [],
'member' => [] // 'mails' => [],
]); // 'users' => [],
} // 'infoUser' => [],
// 'exos' => [],
// 'member' => []
#[Route(path: '/psettings', name: 'psettings', methods: ['POST'])] // ]);
public function psettings(string $nom,string $prenom,string $dateNaissance,string $mail,string $tel, IRequest $req): Response // }
{ //
//}
//
return $this->render('./page/settings.html.twig',[ //
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => $prenom,
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => []
]);
}
#[Route(path: '/login', name: 'login', methods: ['POST'])]
public function login(string $username,string $mdp, IRequest $req): Response
{
// CONFIRMER LES DONNESS !!!!! IMPORTANT
return $this->render('./page/home.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => []
]);
}
#[Route(path: '/log', name: 'log', methods: ['GET'])]
public function login2(): Response
{
// CONFIRMER LES DONNESS !!!!! IMPORTANT
return $this->render('./page/login.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => []
]);
}
#[Route(path: '/register', name: 'register', methods: ['POST'])]
public function register(string $username,string $mdp,string $confirmMdp,string $nom,string $prenom,string $dateNaissance,string $sexe,string $taille,string $poids, IRequest $req): Response
{
// CONFIRMER LES DONNESS !!!!! IMPORTANT
return $this->render('./page/home.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => []
]);
}
#[Route(path: '/regist', name: 'regist', methods: ['GET'])]
public function register2(): Response
{
// CONFIRMER LES DONNESS !!!!! IMPORTANT
return $this->render('./page/register.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => []
]);
}
#[Route(path: '/pass', name: 'pass', methods: ['GET'])]
public function pass(): Response
{
// CONFIRMER LES DONNESS !!!!! IMPORTANT
return $this->render('./page/password.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => []
]);
}
#[Route(path: '/password', name: 'password', methods: ['POST'])]
public function password(string $email, IRequest $req): Response
{
// CONFIRMER LES DONNESS !!!!! IMPORTANT
return $this->render('./page/login.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => []
]);
}
}

@ -48,6 +48,7 @@ class FrontController {
$this->handleError(404, $e->getMessage()); $this->handleError(404, $e->getMessage());
} }
catch(\Throwable $e){ catch(\Throwable $e){
Log::dd($e->getLine() . $e->getFile() . $e->getMessage() );
$this->handleError(501, $e->getMessage()); $this->handleError(501, $e->getMessage());
} }
} }
@ -65,7 +66,7 @@ class FrontController {
// TODO : Don't work need Antoine help // TODO : Don't work need Antoine help
private function handleError(int $statusCode, $message) : void { private function handleError(int $statusCode, $message) : void {
if (!$this->container->has(\Twig\Environment::class)) { if (!$this->container->has(\Twig\Environment::class)) {
throw new \LogicException('You cannot use the "renderView" method if the Twig Bundle is not available. Try running "composer require symfony/twig-bundle".'); throw new \LogicException('You cannot use the "renderView" method if the Twig Bundle is not available. Try running "composer require ".');
} }
$response = new Response($this->container->get(\Twig\Environment::class)->render('./error/error.html.twig',['title'=> $message , "code" => $statusCode, "name" => $message, "descr" => $message ]),$statusCode); $response = new Response($this->container->get(\Twig\Environment::class)->render('./error/error.html.twig',['title'=> $message , "code" => $statusCode, "name" => $message, "descr" => $message ]),$statusCode);

@ -1,36 +1,95 @@
<?php <?php
// namespace App\Controller; namespace App\Controller;
// use App\Container; use App\Container;
// use App\Router\Request\IRequest; use App\Router\Request\IRequest;
// use App\Router\Response\Response; use App\Router\Response\IResponse;
// use Shared\Attributes\Route; use App\Router\Response\RedirectResponse;
// use Twig\Environment; use App\Router\Response\Response;
// use Data\Core\Preferences; use Manager\ActivityManager;
// use Shared\Log; use Shared\Attributes\Route;
use Twig\Environment;
// class HeartRateController extends BaseController use Data\Core\Preferences;
// { use Shared\Log;
class HeartRateController extends BaseController
// #[Route(path: '/import', name: 'import', methods: ['GET'])] {
// public function import(): Response
// { private ActivityManager $activityMgr;
// return $this->render('./page/import.html.twig',[
// 'css' => $this->preference->getCookie(), public function __construct(ActivityManager $manager)
// 'pp' => "test2", {
// 'user' => "Doe", parent::__construct();
// 'role' => "Athlète", $this->activityMgr = $manager;
// 'friendship' => [], }
// 'analyzes' => [],
// 'mails' => [], #[Route(path: '/import', name: 'import', methods: ['GET'])]
// 'users' => [], public function import(): Response
// 'infoUser' => [], {
// 'exos' => [], return $this->render('./page/import.html.twig', [
// 'member' => [] '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): IResponse
{
$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']);
}
$content = file_get_contents($tmp_file);
try {
if ($this->activityMgr->uploadFile($activityType, 5, $content)) {
return new RedirectResponse('/');
}
} catch (\Exception $e) {
return $this->renderError([$e->getMessage()]);
}
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;
}
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));
}
}

@ -1,19 +1,45 @@
<?php <?php
// namespace App\Controller; namespace App\Controller;
// use App\Container; use App\Container;
// use App\Router\Request\IRequest; use App\Router\Request\IRequest;
// use App\Router\Response\Response; use App\Router\Response\Response;
// use App\Router\Response\IResponse; use Shared\Attributes\Route;
use Twig\Environment;
use Data\Core\Preferences;
use Shared\Log;
// use Shared\Attributes\Route; class SocialController extends BaseController
// use Twig\Environment; {
// use Data\Core\Preferences;
// use Shared\Log;
private Environment $twig;
protected Preferences $preference;
public function __construct()
{
session_start();
$this->preference = new Preferences();
}
// #[Route(path: '/coach', name: 'coach')]
// class CoachController extends BaseController #[Route(path: '/mail', name: 'mail', methods: ['GET'])]
// { public function mail(): Response
{
return $this->render('./page/mail.html.twig',[
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Doe",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => []
]);
}
}

@ -4,15 +4,27 @@ namespace App\Controller;
use App\Container; use App\Container;
use App\Router\Request\IRequest; use App\Router\Request\IRequest;
use App\Router\Response\RedirectResponse;
use App\Router\Response\Response; use App\Router\Response\Response;
use App\Router\Response\IResponse;
use App\Router\Session;
use Manager\UserManager;
use Shared\Attributes\Route; use Shared\Attributes\Route;
use Shared\Validation;
use Twig\Environment; use Twig\Environment;
use Data\Core\Preferences; use Data\Core\Preferences;
use Shared\Log; use Shared\Log;
use function PHPUnit\Framework\isEmpty;
class UserController extends BaseController class UserController extends BaseController
{ {
private UserManager $userMgr;
public function __construct(UserManager $manager){
parent::__construct();
$this->userMgr = $manager;
}
#[Route(path: '/', name: 'home', methods: ['GET'])] #[Route(path: '/', name: 'home', methods: ['GET'])]
public function index(): Response public function index(): Response
@ -75,4 +87,25 @@ class UserController extends BaseController
]); ]);
} }
// #[Route(path: '/logout', name: 'logout', methods: ['GET'])]
// 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('/');
// }
// }
} }

@ -1,12 +1,15 @@
<?php <?php
namespace App\Router; namespace App\Router;
use App\Router\Request\IRequest; use App\Router\Request\IRequest;
/** /**
* Router class to manage a collection of routes in the application. * Router class to manage a collection of routes in the application.
* It provides functionalities to add routes and check if a given URL matches any of the defined routes. * It provides functionalities to add routes and check if a given URL matches any of the defined routes.
*/ */
class Router { class Router
{
/** /**
* The base path for routing. * The base path for routing.
@ -34,7 +37,8 @@ class Router {
* *
* @param string $path The base path for the router. * @param string $path The base path for the router.
*/ */
public function __construct(string $path = "/PHP/project/index.php") { public function __construct(string $path = "/PHP/project/index.php")
{
$this->path = $path; $this->path = $path;
$this->routes = new \AltoRouter(); $this->routes = new \AltoRouter();
} }
@ -46,7 +50,8 @@ class Router {
* @param Route $route The route object. * @param Route $route The route object.
* @throws \InvalidArgumentException If method is not supported. * @throws \InvalidArgumentException If method is not supported.
*/ */
public function add(string $method, Route $route) { public function add(string $method, Route $route)
{
if (!in_array($method, self::$verbs)) { if (!in_array($method, self::$verbs)) {
throw new \InvalidArgumentException("Method not supported"); throw new \InvalidArgumentException("Method not supported");
} }
@ -55,20 +60,28 @@ class Router {
/** /**
* Adds a route for a controller action. * Adds a route for a controller action.
* * TODO : the problème is that AltoRouter is a map so i can't have mutilple Route just by doing this:(i need to find a logic to resolve this beavior) #[Route('/login', name: 'login',methods: ['POST','GET'])]
* @param string $method The HTTP method. * @param string|array $methods HTTP method.
* @param string $path The path for the route. * @param string $path The path for the route.
* @param mixed $controller The controller object. * @param mixed $controller The controller object.
* @param string $action The action method in the controller. * @param string $action The action method in the controller.
* @param string $name (Optional) The name of the route. * @param string $name (Optional) The name of the route.
* @throws \InvalidArgumentException If method is not supported. * @throws \InvalidArgumentException If method is not supported.
*/ */
public function addControllerRoute(string $method, string $path, $controller, string $action, string $name = '') { public function addControllerRoute(string|array $methods, string $path, $controller, string $action, string $name = '')
{
if (is_string($methods)) {
$methods = [$methods]; // Convert to an array if it's a string
}
foreach ($methods as $method) {
if (!in_array($method, self::$verbs)) { if (!in_array($method, self::$verbs)) {
throw new \InvalidArgumentException("Method not supported"); throw new \InvalidArgumentException("Method not supported");
} }
$this->routes->map($method, $path, [$controller, $action], $name); $this->routes->map($method, $path, [$controller, $action], $name);
} }
}
// TODO: Implement the extractParams method. // TODO: Implement the extractParams method.
// public function extractParams(string $path) {} // public function extractParams(string $path) {}
@ -80,7 +93,8 @@ class Router {
* @param callable $callable The callback function. * @param callable $callable The callback function.
* @param string $name The name of the route. * @param string $name The name of the route.
*/ */
public function get(string $path, callable $callable, $name) { public function get(string $path, callable $callable, $name)
{
$this->routes->map('GET', $path, $callable, $name); $this->routes->map('GET', $path, $callable, $name);
} }
@ -92,7 +106,8 @@ class Router {
* @param IRequest $request The request object. * @param IRequest $request The request object.
* @return array|null The matched route or null if no match. * @return array|null The matched route or null if no match.
*/ */
public function match(IRequest $request): ?array { public function match(IRequest $request): ?array
{
return $this->routes->match($request->getRequestUri(), $request->getMethod()) ?: null; return $this->routes->match($request->getRequestUri(), $request->getMethod()) ?: null;
} }
@ -101,14 +116,15 @@ class Router {
* *
* @return array The array of routes. * @return array The array of routes.
*/ */
public function getRoutes() { public function getRoutes()
{
return []; // TODO: Implement the actual logic to return routes. return []; // TODO: Implement the actual logic to return routes.
} }
public function generate (string $routeName, array $params = array()): string public function generate(string $routeName, array $params = array()): string
{ {
return $this->routes->generate($routeName,$params); return $this->routes->generate($routeName, $params);
} }
} }

@ -111,8 +111,7 @@ class Session
if ( $this->sessionState == self::SESSION_STARTED ) if ( $this->sessionState == self::SESSION_STARTED )
{ {
$this->sessionState = !session_destroy(); $this->sessionState = !session_destroy();
unset( $_SESSION ); session_unset(); // Clear all session variables
return !$this->sessionState; return !$this->sessionState;
} }

@ -2,26 +2,24 @@
namespace App\Router\Middleware; namespace App\Router\Middleware;
use App\Router\Session; use App\Router\Session;
use Network\IAuthService;
use Shared\Log; use Shared\Log;
use App\Router\Request\IRequest; use App\Router\Request\IRequest;
use App\Router\Response\RedirectResponse; use App\Router\Response\RedirectResponse;
class AuthMiddleware extends Middleware { class AuthMiddleware extends Middleware {
public function handle(IRequest $request, callable $next) {
// if (isset($_SESSION['user'])) {
// $resp =new RedirectResponse("/");
// $resp->send();
// exit;
// }
// La page nest pas redirigée correctement
// Firefox a détecté que le serveur redirige la demande pour cette adresse dune manière qui naboutira pas. private IAuthService $auth;
public function __construct(IAuthService $auth) {
$this->auth = $auth;
}
public function handle(IRequest $request, callable $next) {
$excludedUrls = ['/login', '/register','/forgetPassword'];
// La cause de ce problème peut être la désactivation ou le refus des cookies. if ($this->auth->getCurrentUser() === null && !in_array($request->getRequestUri(), $excludedUrls)) {
// if (!isset($_SESSION['user'])) { $resp = new RedirectResponse("/login");
// $resp =new RedirectResponse("/log"); $resp->send();
// $resp->send(); exit;
// exit; }
// }
return parent::handle($request, $next); return parent::handle($request, $next);
} }
} }

@ -2,6 +2,9 @@
namespace App\Router\Response; namespace App\Router\Response;
use App\Router\Session;
use Shared\Log;
class RedirectResponse implements IResponse class RedirectResponse implements IResponse
{ {
private $content; private $content;
@ -49,6 +52,7 @@ class RedirectResponse implements IResponse
public function send(): void public function send(): void
{ {
http_response_code($this->statusCode); http_response_code($this->statusCode);
foreach ($this->headers as $name => $value) { foreach ($this->headers as $name => $value) {

@ -1,6 +1,8 @@
<?php <?php
namespace App\Router\Response; namespace App\Router\Response;
use Shared\Log;
class Response implements IResponse { class Response implements IResponse {
private string $content; private string $content;
private int $statusCode; private int $statusCode;

@ -34,15 +34,10 @@
<input class="form-check-input" id="inputRememberPassword" type="checkbox" value="" /> <input class="form-check-input" id="inputRememberPassword" type="checkbox" value="" />
<label class="form-check-label" for="inputRememberPassword">Mémoriser le mot de passe</label> <label class="form-check-label" for="inputRememberPassword">Mémoriser le mot de passe</label>
</div> </div>
<div class="d-flex align-items-center justify-content-between mt-4 mb-0">
<a class="small" href="password.html">Mot de passe oublié ?</a>
<a class="btn btn-primary" href="index.html">Se connecter</a>
</div>
</form> </form>
</div> </div>
<div class="card-footer text-center py-3">
<div class="small"><a href="register.html">Besoin d'un compte ? Inscrivez-vous !</a></div>
</div>
</div> </div>
</div> </div>
</div> </div>

@ -7,8 +7,10 @@
<meta name="description" content="Accueil" /> <meta name="description" content="Accueil" />
<meta name="author" content="PINAGOT Antoine" /> <meta name="author" content="PINAGOT Antoine" />
<title>{% block title %}{% endblock %}</title> <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="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" /> <link href="/css/{% block css %}styles{% endblock %}.css" rel="stylesheet" />
<script src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"></script> <script src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"></script>
</head> </head>
<body class="sb-nav-fixed"> <body class="sb-nav-fixed">
@ -35,7 +37,7 @@
<li><a class="dropdown-item" href="/profile">Profile</a></li> <li><a class="dropdown-item" href="/profile">Profile</a></li>
<li><a class="dropdown-item" href="/settings">Paramètres</a></li> <li><a class="dropdown-item" href="/settings">Paramètres</a></li>
<li><hr class="dropdown-divider" /></li> <li><hr class="dropdown-divider" /></li>
<li><a class="dropdown-item" href="/logout">Déconnexion</a></li> <li><a class="dropdown-item" href="/">Déconnexion</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -46,7 +48,7 @@
<div class="sb-sidenav-menu"> <div class="sb-sidenav-menu">
<div class="nav"> <div class="nav">
<div class="sb-sidenav-menu-heading">Menu</div> <div class="sb-sidenav-menu-heading">Menu</div>
<a class="nav-link" href="/"> <a class="nav-link" href="/home">
<div class="sb-nav-link-icon"><img src="/assets/img/house.png"></div> <div class="sb-nav-link-icon"><img src="/assets/img/house.png"></div>
Accueil Accueil
</a> </a>

@ -9,33 +9,56 @@
{% block user %}{{user}} - {{role}}{% endblock %} {% block user %}{{user}} - {{role}}{% endblock %}
{% block body %} {% block body %}
<div class="container-fluid px-4"> <div class="container-fluid px-4">
<h1 class="mt-4">Importer</h1> <h1 class="mt-4">Importer</h1>
<ol class="breadcrumb mb-4"> <ol class="breadcrumb mb-4">
<li class="breadcrumb-item"><a href="home.html">Accueil</a></li> <li class="breadcrumb-item"><a href="/">Accueil</a></li>
<li class="breadcrumb-item active">Importer</li> <li class="breadcrumb-item active">Importer</li>
</ol> </ol>
<div class="flex items-center justify-center">
<div class="row"> <div class="sm:max-w-lg w-full p-10 bg-white rounded-xl z-10 ">
<div class="col"> <div class="text-center">
<div class="card mb-4"> <h2 class="mt-5 text-3xl font-bold text-gray-900">
<div class="card-header"> Importer un fichier .fit !
<img src="/assets/img/bupload.png"></i> </h2>
Importer un fichier .fit <p class="mt-2 text-sm text-gray-400">Let's go</p>
</div> </div>
<div class="card-body"> <form class="mt-8 space-y-3" action="/upload" method="POST" enctype="multipart/form-data">
<div class="grid grid-cols-1 space-y-2">
<div style="text-align:center; margin-bottom: 15px;"> <label class="text-sm font-bold text-gray-500 tracking-wide">Veuillez renseigner le type d'activité</label>
<label for="file-input"> <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">
<img src="/assets/img/uploadW.svg"/> </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>
<input type="file" class="hidden" id="file-input" name="uploaded_file">
</label> </label>
<form action="/analyses" method="post"> <p id="file-name-display" class="text-sm text-gray-500"></p>
<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>
</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> </div>
</form>
</div> </div>
</div> </div>
</div> </div>

@ -1,6 +1,6 @@
{% extends "authbase.html.twig" %} {% extends "authbase.html.twig" %}
{% block css %}{{css}}{% endblock %} {% block css %}{{ css }}{% endblock %}
{% block title %}Connexion - HearthTrack{% endblock %} {% block title %}Connexion - HearthTrack{% endblock %}
@ -11,30 +11,38 @@
<div class="card shadow-lg border-0 rounded-lg mt-5"> <div class="card shadow-lg border-0 rounded-lg mt-5">
<div class="card-header"><h3 class="text-center font-weight-light my-4">Connexion</h3></div> <div class="card-header"><h3 class="text-center font-weight-light my-4">Connexion</h3></div>
<div class="card-body"> <div class="card-body">
<form> {% if login_error %}
{% for value in login_error %}
<div class="alert alert-danger" role="alert">
{{ value }}
</div>
{% endfor %}
{% endif %}
<form method="post" action="/login">
<div class="form-floating mb-3"> <div class="form-floating mb-3">
<input class="form-control" id="inputEmail" type="email" placeholder="nom@exemple.com" /> <input class="form-control" id="email" name="email" type="text" placeholder="Nom d'utilisateur" />
<label for="inputEmail">Adresse eMail</label> <label for="email">Nom d'utilisateur</label>
</div> </div>
<div class="form-floating mb-3"> <div class="form-floating mb-3">
<input class="form-control" id="inputPassword" type="password" placeholder="Mot de passe" /> <input class="form-control" id="password" name="password" type="password" placeholder="Mot de passe" />
<label for="inputPassword">Mot de passe</label> <label for="password">Mot de passe</label>
</div> </div>
<div class="form-check mb-3"> <div class="form-check mb-3">
<input class="form-check-input" id="inputRememberPassword" type="checkbox" value="" /> <input class="form-check-input" id="inputRememberPassword" type="checkbox" value="" />
<label class="form-check-label" for="inputRememberPassword">Mémoriser le mot de passe</label> <label class="form-check-label" for="inputRememberPassword">Mémoriser le mot de passe</label>
</div> </div>
<div class="d-flex align-items-center justify-content-between mt-4 mb-0"> <div class="d-flex align-items-center justify-content-between mt-4 mb-0">
<a class="small" href="password.html">Mot de passe oublié ?</a> <a class="small" href="/forgetPassword">Mot de passe oublié ?</a>
<a class="btn btn-primary" href="index.html">Se connecter</a> <button class="btn btn-primary" type="submit">Se connecter</button>
</div> </div>
</form> </form>
</div> </div>
<div class="card-footer text-center py-3"> <div class="card-footer text-center py-3">
<div class="small"><a href="register.html">Besoin d'un compte ? Inscrivez-vous !</a></div> <div class="small"><a href="/register">Besoin d'un compte ? Inscrivez-vous !</a></div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

@ -12,19 +12,19 @@
<div class="card-header"><h3 class="text-center font-weight-light my-4">Récupération du mot de passe</h3></div> <div class="card-header"><h3 class="text-center font-weight-light my-4">Récupération du mot de passe</h3></div>
<div class="card-body"> <div class="card-body">
<div class="small mb-3 text-muted">Entrez votre adresse eMail pour recevoir un lien pour changer de mot de passe</div> <div class="small mb-3 text-muted">Entrez votre adresse eMail pour recevoir un lien pour changer de mot de passe</div>
<form method="post" action="/password"> <form method="post" action="/">
<div class="form-floating mb-3"> <div class="form-floating mb-3">
<input class="form-control" id="email" name="email" type="email" placeholder="name@example.com" /> <input class="form-control" id="email" name="email" type="email" placeholder="name@example.com" />
<label for="email">Adresse eMail</label> <label for="email">Adresse eMail</label>
</div> </div>
<div class="d-flex align-items-center justify-content-between mt-4 mb-0"> <div class="d-flex align-items-center justify-content-between mt-4 mb-0">
<a class="small" href="/log">Retour à la connexion</a> <a class="small" href="/login">Retour à la connexion</a>
<button class="btn btn-primary" type="submit">Réinitialiser votre mot de passe</a> <button class="btn btn-primary" type="submit">Réinitialiser votre mot de passe</button>
</div> </div>
</form> </form>
</div> </div>
<div class="card-footer text-center py-3"> <div class="card-footer text-center py-3">
<div class="small"><a href="/regist">Besoin d'un compte ? Inscrivez-vous !</a></div> <div class="small"><a href="/register">Besoin d'un compte ? Inscrivez-vous !</a></div>
</div> </div>
</div> </div>
</div> </div>

@ -11,82 +11,105 @@
<div class="card shadow-lg border-0 rounded-lg mt-5"> <div class="card shadow-lg border-0 rounded-lg mt-5">
<div class="card-header"><h3 class="text-center font-weight-light my-4">Créer un compte</h3></div> <div class="card-header"><h3 class="text-center font-weight-light my-4">Créer un compte</h3></div>
<div class="card-body"> <div class="card-body">
{# Display error message if register_error is set #}
{% if register_error %}
{% for value in register_error %}
<div class="alert alert-danger" role="alert">
{{ value }}
</div>
{% endfor %}
{% endif %}
<form method="post" action="/register"> <form method="post" action="/register">
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<div class="form-floating mb-3 mb-md-0"> <div class="form-floating mb-3 mb-md-0">
<input class="form-control" id="inputFirstName" type="text" placeholder="Entrez votre nom" /> <input class="form-control" id="nom" name="nom" type="text" placeholder="Entrez votre nom" />
<label for="inputFirstName">Nom de famille</label> <label for="nom">Nom de famille</label>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="form-floating"> <div class="form-floating">
<input class="form-control" id="inputLastName" type="text" placeholder="Entrez votre prénom" /> <input class="form-control" id="prenom" name="prenom" type="text" placeholder="Entrez votre prénom" />
<label for="inputLastName">Prénom</label> <label for="prenom">Prénom</label>
</div> </div>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<div class="form-floating mb-3 mb-md-0"> <div class="form-floating mb-3 mb-md-0">
<label for="inputUsername"></label><input class="form-control" id="inputUsername" type="text" placeholder="Entrez votre pseudonyme" /> <input class="form-control" id="username" name="username" type="text" placeholder="Entrez votre pseudonyme" />
<label for="inputFirstName">Nom d'utilisateur</label> <label for="username">Nom d'utilisateur</label>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label for="sexe" >Sexe:</label>
<div class="form-floating"> <div class="form-floating">
<label for="inputLastName">Sexe</label> <select id="sexe" name="sexe">
<label for="gender"></label><select id="gender" name="gender"> <option value="M">Homme</option>
<option value="male">Homme</option> <option value="H">Femme</option>
<option value="female">Femme</option> <option value="M">Ne se prononce pas</option>
<option value="unknown">Ne se prononce pas</option>
</select> </select>
</div> </div>
</div> </div>
</div> </div>
<div class="form-floating mb-3"> <div class="form-floating mb-3">
<input class="form-control" id="inputEmail" type="email" placeholder="nom@exemple.com" /> <input class="form-control" id="mail" name="mail" type="mail" placeholder="nom@exemple.com" />
<label for="inputEmail">Adresse eMail</label> <label for="mail">Adresse eMail</label>
</div> </div>
<div class="form-floating mb-3"> <div class="form-floating mb-3">
<input class="form-control" id="inputDateNaissance" type="date" placeholder="" /> <input class="form-control" id="dateNaissance" name="dateNaissance" type="date" placeholder="" />
<label for="inputEmail">Date de naissance</label> <label for="dateNaissance">Date de naissance</label>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<div class="form-floating mb-3 mb-md-0"> <div class="form-floating mb-3 mb-md-0">
<input class="form-control" id="inputTaille" type="text" placeholder="Entrez votre taille" /> <input class="form-control" id="taille" name="taille" type="text" placeholder="Entrez votre taille" />
<label for="inputPassword">Taille</label> <label for="taille">Taille</label>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="form-floating mb-3 mb-md-0"> <div class="form-floating mb-3 mb-md-0">
<label for="inputPoids"></label><input class="form-control" id="inputPoids" type="text" placeholder="Entrez votre poids" /> <input class="form-control" id="poids" name="poids" type="text" placeholder="Entrez votre poids" />
<label for="inputPasswordConfirm">Poids</label> <label for="poids">Poids</label>
</div> </div>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<div class="form-floating mb-3 mb-md-0"> <div class="form-floating mb-3 mb-md-0">
<input class="form-control" id="inputPassword" type="password" placeholder="Créez un mot de passe" /> <input class="form-control" id="motDePasse" name="motDePasse" type="password" placeholder="Créez un mot de passe" />
<label for="inputPassword">Mot de passe</label> <label for="motDePasse">Mot de passe</label>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="form-floating mb-3 mb-md-0"> <div class="form-floating mb-3 mb-md-0">
<input class="form-control" id="inputPasswordConfirm" type="password" placeholder="Confirmez votre mot de passe" /> <input class="form-control" id="confirmMdp" name="confirmMdp" type="password" placeholder="Confirmez votre mot de passe" />
<label for="inputPasswordConfirm">Confirmer le mot de passe</label> <label for="confirmMdp">Confirmer le mot de passe</label>
</div> </div>
</div> </div>
</div> </div>
<div class="row mb-3">
<div class="col-md-6">
<label for="roleName" >Role:</label>
<div class="form-floating">
<select id="roleName" name="roleName">
<option value="Athlete">Athlete</option>
<option value="Coach">Coach</option>
</select>
</div>
</div>
</div>
<div class="mt-4 mb-0"> <div class="mt-4 mb-0">
<div class="d-grid"><a class="btn btn-primary btn-block" href="login.html.twig">Créer un compte</a></div> <div class="d-grid">
<button type="submit" class="btn btn-primary btn-block">Créer un compte</button>
</div>
</div> </div>
</form> </form>
</div> </div>
<div class="card-footer text-center py-3"> <div class="card-footer text-center py-3">
<div class="small"><a href="login.html.twig">Avez-vous déjà un compte ? Connectez-vous ?</a></div> <div class="small"><a href="/login">Avez-vous déjà un compte ? Connectez-vous ?</a></div>
</div> </div>
</div> </div>
</div> </div>

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

@ -2,15 +2,19 @@
namespace Data\Core; namespace Data\Core;
use Shared\Log;
class Preferences { class Preferences {
private String $cookie; private string $cookie;
private Array $theme; private array $theme;
public function __construct(){ public function __construct(){
if (isset($_COOKIE['preferences'])){ if (isset($_COOKIE['preferences'])){
$this->cookie = $_COOKIE['preferences']; $this->cookie = $_COOKIE['preferences'];
} else { } else {
$this->cookie = setcookie('preferences', 'base_theme', time()+(3600*24)*7); if(setcookie('preferences', 'base_theme', time()+(3600*24)*7)){
$this->cookie = 'base_theme';
}
} }
$this->theme = array( $this->theme = array(
'base_theme', 'base_theme',
@ -19,7 +23,7 @@
); );
} }
public function majCookie(String $maj){ public function majCookie(string $maj){
try{ try{
foreach($this->theme as $t){ foreach($this->theme as $t){
$this->cookie = $maj; $this->cookie = $maj;
@ -30,8 +34,8 @@
} }
} }
public function getCookie():String{ public function getCookie():string{
return $this->cookie; return $this->cookie ?? "base_theme";
} }
} }

@ -1,51 +0,0 @@
<?php
namespace Database;
use Model\Activite;
class ActiviteMapper {
public function map(array $data):ActiviteEntity {
$activite = new ActiviteEntity();
$activite->setIdActivite($data['idActivite']);
$activite->setType($data['type']);
$activite->setDate($data['date']);
$activite->setHeureDebut($data['heureDebut']);
$activite->setHeureFin($data['heureFin']);
$activite->setEffortRessenti($data['effortRessenti']);
$activite->setVariabilite($data['variabilite']);
$activite->setVariance($data['variance']);
$activite->setEcartType($data['ecartType']);
$activite->setMoyenne($data['moyenne']);
$activite->setMaximum($data['maximum']);
$activite->setMinimum($data['minimum']);
$activite->setTemperatureMoyenne($data['temperatureMoyenne']);
return $activite;
}
//public function ActiviteEntityToModel(ActiviteEntity entity): Activite;
public function ActiviteEntityToModel(ActiviteEntity $activiteEntity):Activite{
$act = new Activite(
$activiteEntity->getIdActivite(),
$activiteEntity->getType(),
$activiteEntity->getDate(),
$activiteEntity->getHeureDebut(),
$activiteEntity->getHeureFin(),
$activiteEntity->getEffortRessenti(),
$activiteEntity->getVariabilite(),
$activiteEntity->getVariance(),
$activiteEntity->getEcartType(),
$activiteEntity->getMoyenne(),
$activiteEntity->getMaximum(),
$activiteEntity->getMinimum(),
$activiteEntity->getTemperatureMoyenne()
);
return $act;
}
//public function ActiviteToEntity(Activite model): ActiviteEntity;
}
?>

@ -2,8 +2,8 @@
namespace Database; namespace Database;
class ActiviteEntity { class ActivityEntity {
private $idActivite; private $idActivity;
private $type; private $type;
private $date; private $date;
private $heureDebut; private $heureDebut;
@ -18,7 +18,7 @@ class ActiviteEntity {
private $temperatureMoyenne; private $temperatureMoyenne;
// Getters // Getters
public function getIdActivite() { public function getIdActivity() {
return $this->idActivity; return $this->idActivity;
} }
@ -71,7 +71,7 @@ class ActiviteEntity {
} }
// Setters // Setters
public function setIdActivite($idActivite) { public function setIdActivity($idActivity) {
$this->idActivity = $idActivity; $this->idActivity = $idActivity;
} }

@ -1,38 +1,39 @@
<?php <?php
namespace Database; namespace Database;
use \PDO;
class ActiviteGateway { class ActivityGateway {
private $connection; private Connexion $connection;
public function __construct(Connection $connection) { public function __construct(Connexion $connection) {
$this->connection = $connection; $this->connection = $connection;
} }
public function getActivite() { public function getActivity() {
$query = "SELECT * FROM Activite"; $query = "SELECT * FROM Activite";
return $this->connection->executeWithErrorHandling($query); return $this->connection->executeWithErrorHandling($query);
} }
public function getActiviteById(int $activiteId) { public function getActivityById(int $activityId) {
$query = "SELECT * FROM Activite WHERE idActivite = :id"; $query = "SELECT * FROM Activite WHERE idActivite = :id";
$params = [':id' => [$activiteId, PDO::PARAM_INT]]; $params = [':id' => [$activityId, PDO::PARAM_INT]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getActiviteByType(string $type) { public function getActivityByType(string $type) {
$query = "SELECT * FROM Activite WHERE type = :type"; $query = "SELECT * FROM Activite WHERE type = :type";
$params = [':type' => [$type, PDO::PARAM_STR]]; $params = [':type' => [$type, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getActiviteByDate(string $date) { public function getActivityByDate(string $date) {
$query = "SELECT * FROM Activite WHERE date = :date"; $query = "SELECT * FROM Activite WHERE date = :date";
$params = [':date' => [$date, PDO::PARAM_STR]]; $params = [':date' => [$date, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getActiviteByTimeRange(string $startTime, string $endTime) { public function getActivityByTimeRange(string $startTime, string $endTime) {
$query = "SELECT * FROM Activite WHERE heureDebut >= :startTime AND heureFin <= :endTime"; $query = "SELECT * FROM Activite WHERE heureDebut >= :startTime AND heureFin <= :endTime";
$params = [ $params = [
':startTime' => [$startTime, PDO::PARAM_STR], ':startTime' => [$startTime, PDO::PARAM_STR],
@ -41,76 +42,76 @@ class ActiviteGateway {
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getActiviteByEffort(int $effortRessenti) { public function getActivityByEffort(int $effortRessenti) {
$query = "SELECT * FROM Activite WHERE effortRessenti = :effort"; $query = "SELECT * FROM Activite WHERE effortRessenti = :effort";
$params = [':effort' => [$effortRessenti, PDO::PARAM_INT]]; $params = [':effort' => [$effortRessenti, PDO::PARAM_INT]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getActiviteByVariability(int $variabilite) { public function getActivityByVariability(int $variabilite) {
$query = "SELECT * FROM Activite WHERE variabilite = :variability"; $query = "SELECT * FROM Activite WHERE variabilite = :variability";
$params = [':variability' => [$variabilite, PDO::PARAM_INT]]; $params = [':variability' => [$variabilite, PDO::PARAM_INT]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getActiviteByTemperature(int $temperatureMoyenne) { public function getActivityByTemperature(int $temperatureMoyenne) {
$query = "SELECT * FROM Activite WHERE temperatureMoyenne = :temperature"; $query = "SELECT * FROM Activite WHERE temperatureMoyenne = :temperature";
$params = [':temperature' => [$temperatureMoyenne, PDO::PARAM_INT]]; $params = [':temperature' => [$temperatureMoyenne, PDO::PARAM_INT]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function addActivite(ActiviteEntity $activite) { public function addActivity(ActivityEntity $activity) {
$query = "INSERT INTO Activite (type, date, heureDebut, heureDeFin, effortRessenti, variabilite, variance, ecartType, moyenne, maximum, minimum, temperatureMoyenne) $query = "INSERT INTO Activite (type, date, heureDebut, heureDeFin, effortRessenti, variabilite, variance, ecartType, moyenne, maximum, minimum, temperatureMoyenne)
VALUES (:type, :date, :heureDebut, :heureDeFin, :effortRessenti, :variabilite, :variance, :ecartType, :moyenne, :maximum, :minimum, :temperatureMoyenne)"; VALUES (:type, :date, :heureDebut, :heureDeFin, :effortRessenti, :variabilite, :variance, :ecartType, :moyenne, :maximum, :minimum, :temperatureMoyenne)";
$params = [ $params = [
':type' => $activite->getType(), ':type' => $activity->getType(),
':date' => $activite->getDate()->format('Y-m-d'), // Format date pour SQL ':date' => $activity->getDate()->format('Y-m-d'), // Format date pour SQL
':heureDebut' => $activite->getHeureDebut()->format('H:i:s'), // Format heure pour SQL ':heureDebut' => $activity->getHeureDebut()->format('H:i:s'), // Format heure pour SQL
':heureDeFin' => $activite->getHeureFin()->format('H:i:s'), // Format heure pour SQL ':heureDeFin' => $activity->getHeureFin()->format('H:i:s'), // Format heure pour SQL
':effortRessenti' => $activite->getEffortRessenti(), ':effortRessenti' => $activity->getEffortRessenti(),
':variabilite' => $activite->getVariabilite(), ':variabilite' => $activity->getVariabilite(),
':variance' => $activite->getVariance(), ':variance' => $activity->getVariance(),
':ecartType' => $activite->getEcartType(), ':ecartType' => $activity->getEcartType(),
':moyenne' => $activite->getMoyenne(), ':moyenne' => $activity->getMoyenne(),
':maximum' => $activite->getMaximum(), ':maximum' => $activity->getMaximum(),
':minimum' => $activite->getMinimum(), ':minimum' => $activity->getMinimum(),
':temperatureMoyenne' => $activite->getTemperatureMoyenne(), ':temperatureMoyenne' => $activity->getTemperatureMoyenne(),
]; ];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function updateActivite(ActiviteEntity $oldActivite, ActiviteEntity $newActivite) { public function updateActivity(ActivityEntity $oldActivity, ActivityEntity $newActivity) {
$query = "UPDATE Activite $query = "UPDATE Activite
SET type = :type, date = :date, heureDebut = :heureDebut, heureDeFin = :heureDeFin, SET type = :type, date = :date, heureDebut = :heureDebut, heureDeFin = :heureDeFin,
effortRessenti = :effortRessenti, variabilite = :variabilite, variance = :variance, ecartType = :ecartType, moyenne = :moyenne, maximum = :maximum, minimum = :minimum, temperatureMoyenne = :temperatureMoyenne effortRessenti = :effortRessenti, variabilite = :variabilite, variance = :variance, ecartType = :ecartType, moyenne = :moyenne, maximum = :maximum, minimum = :minimum, temperatureMoyenne = :temperatureMoyenne
WHERE idActivite = :idActivite"; WHERE idActivite = :idActivite";
$params = [ $params = [
':idActivite' => $oldActivite->getIdActivite(), ':idActivite' => $oldActivity->getIdActivity(),
':type' => $newActivite->getType(), ':type' => $newActivity->getType(),
':date' => $newActivite->getDate()->format('Y-m-d'), // Format date pour SQL ':date' => $newActivity->getDate()->format('Y-m-d'), // Format date pour SQL
':heureDebut' => $newActivite->getHeureDebut()->format('H:i:s'), // Format heure pour SQL ':heureDebut' => $newActivity->getHeureDebut()->format('H:i:s'), // Format heure pour SQL
':heureDeFin' => $newActivite->getHeureFin()->format('H:i:s'), // Format heure pour SQL ':heureDeFin' => $newActivity->getHeureFin()->format('H:i:s'), // Format heure pour SQL
':effortRessenti' => $newActivite->getEffortRessenti(), ':effortRessenti' => $newActivity->getEffortRessenti(),
':variabilite' => $newActivite->getVariabilite(), ':variabilite' => $newActivity->getVariabilite(),
':variance' => $newActivite->getVariance(), ':variance' => $newActivity->getVariance(),
':ecartType' => $newActivite->getEcartType(), ':ecartType' => $newActivity->getEcartType(),
':moyenne' => $newActivite->getMoyenne(), ':moyenne' => $newActivity->getMoyenne(),
':maximum' => $newActivite->getMaximum(), ':maximum' => $newActivity->getMaximum(),
':minimum' => $newActivite->getMinimum(), ':minimum' => $newActivity->getMinimum(),
':temperatureMoyenne' => $newActivite->getTemperatureMoyenne(), ':temperatureMoyenne' => $newActivity->getTemperatureMoyenne(),
]; ];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function deleteActivite(int $idActivite) { public function deleteActivity(int $idActivity) {
$query = "DELETE FROM Activite WHERE idActivite = :idActivite"; $query = "DELETE FROM Activite WHERE idActivite = :idActivity";
$params = [ $params = [
':idActivite' => $idActivite, ':idActivity' => $idActivity,
]; ];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);

@ -0,0 +1,118 @@
<?php
namespace Database;
use Model\Activity;
class ActivityMapper {
public function activitySqlToEntity(array $data):array
{
$activityEntities = [];
foreach ($data as $activityData) {
$activity = new ActivityEntity();
if (isset($activityData['idActivity'])) {
$activity->setIdActivity($data['idActivity']);
}
if (isset($activityData['type'])) {
$activity->setType($data['type']);
}
if (isset($activityData['date'])) {
$activity->setDate($data['date']);
}
if (isset($activityData['heureDebut'])) {
$activity->setHeureDebut($data['heureDebut']);
}
if (isset($activityData['heureFin'])) {
$activity->setHeureFin($data['heureFin']);
}
if (isset($activityData['effortRessenti'])) {
$activity->setEffortRessenti($data['effortRessenti']);
}
if (isset($activityData['variabilite'])) {
$activity->setVariabilite($data['variabilite']);
}
if (isset($activityData['variance'])) {
$activity->setVariance($data['variance']);
}
if (isset($activityData['ecartType'])) {
$activity->setEcartType($data['ecartType']);
}
if (isset($activityData['moyenne'])) {
$activity->setMoyenne($data['moyenne']);
}
if (isset($activityData['maximum'])) {
$activity->setMaximum($data['maximum']);
}
if (isset($activityData['minimum'])) {
$activity->setMinimum($data['minimum']);
}
if (isset($activityData['temperatureMoyenne'])) {
$activity->setTemperatureMoyenne($data['temperatureMoyenne']);
}
$activityEntities[] = $activity;
}
return $activityEntities;
}
/**
* @throws \Exception
*/
public function ActivityEntityToModel(ActivityEntity $activiteEntity):Activity{
$act = new Activity(
$activiteEntity->getIdActivity(),
$activiteEntity->getType(),
$activiteEntity->getDate(),
$activiteEntity->getHeureDebut(),
$activiteEntity->getHeureFin(),
$activiteEntity->getEffortRessenti(),
$activiteEntity->getVariabilite(),
$activiteEntity->getVariance(),
$activiteEntity->getEcartType(),
$activiteEntity->getMoyenne(),
$activiteEntity->getMaximum(),
$activiteEntity->getMinimum(),
$activiteEntity->getTemperatureMoyenne()
);
return $act;
}
//public function ActivityToEntity(Activity model): ActivityEntity;
public function activityToEntity(Activity $act):ActivityEntity{
$act = new ActivityEntity();
$act->setIdActivity($act->getIdActivity()());
$act->setType($act->getType());
$act->setDate($act->getDate());
$act->setHeureDebut($act->getHeureDebut());
$act->setHeureFin($act->getHeureFin());
$act->setEffortRessenti($act->getEffortRessenti());
$act->setVariabilite($act->getVariabilite());
$act->setVariance($act->getVariance());
$act->setEcartType($act->getEcartType());
$act->setMoyenne($act->getMoyenne());
$act->setMaximum($act->getMaximum());
$act->setMinimum($act->getMinimum());
$act->setTemperatureMoyenne($act->getTemperatureMoyenne());
return $act;
}
}
?>

@ -12,6 +12,7 @@ class AthleteEntity {
private $poids; private $poids;
private $motDePasse; private $motDePasse;
private $dateNaissance; private $dateNaissance;
private $isCoach;
// Getters // Getters
public function getIdAthlete() { public function getIdAthlete() {
@ -50,6 +51,10 @@ class AthleteEntity {
return $this->dateNaissance; return $this->dateNaissance;
} }
public function getIsCoach(){
return $this->isCoach;
}
// Setters // Setters
public function setIdAthlete($idAthlete) { public function setIdAthlete($idAthlete) {
$this->idAthlete = $idAthlete; $this->idAthlete = $idAthlete;
@ -86,6 +91,10 @@ class AthleteEntity {
public function setDateNaissance($dateNaissance) { public function setDateNaissance($dateNaissance) {
$this->dateNaissance = $dateNaissance; $this->dateNaissance = $dateNaissance;
} }
public function setIsCoach($isCoach){
$this->isCoach = $isCoach;
}
} }
?> ?>

@ -2,70 +2,94 @@
namespace Database; namespace Database;
use \PDO; use \PDO;
use Shared\Log;
class AthleteGateway { class AthleteGateway {
private $connection; private Connexion $connection;
public function __construct(Connexion $connection) { public function __construct(Connexion $connection) {
$this->connection = $connection; $this->connection = $connection;
} }
public function getAthlete() { public function getAthlete(): array
$query = "SELECT * FROM Athlete"; {
return $this->connection->executeWithErrorHandling($query); $query = "SELECT * FROM Athlete WHERE isCoach=FALSE";
$res = $this->connection->executeWithErrorHandling($query);
return $res;
} }
public function getAthleteById(int $userId) { public function getAthleteById(int $userId): array
$query = "SELECT * FROM Athlete WHERE idAthlete = :id"; {
$query = "SELECT * FROM Athlete WHERE idAthlete = :id AND isCoach=FALSE";
$params = [':id' => [$userId, PDO::PARAM_INT]]; $params = [':id' => [$userId, PDO::PARAM_INT]];
return $this->connection->executeWithErrorHandling($query, $params); $res = $this->connection->executeWithErrorHandling($query, $params);
return $res;
} }
public function getAthleteByName(string $name) { public function getAthleteByName(string $name): array
$query = "SELECT * FROM Athlete WHERE nom = :name"; {
$query = "SELECT * FROM Athlete WHERE nom = :name AND isCoach=FALSE";
$params = [':name' => [$name, PDO::PARAM_STR]]; $params = [':name' => [$name, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getAthleteByFirstName(string $firstName) { public function getAthleteByFirstName(string $firstName): array
$query = "SELECT * FROM Athlete WHERE prenom = :firstName"; {
$query = "SELECT * FROM Athlete WHERE prenom = :firstName AND isCoach=FALSE";
$params = [':firstName' => [$firstName, PDO::PARAM_STR]]; $params = [':firstName' => [$firstName, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getAthleteByEmail(string $email) { public function getAthleteByEmail(string $email): array
$query = "SELECT * FROM Athlete WHERE email = :email"; {
$query = "SELECT * FROM Athlete WHERE email = :email AND isCoach=FALSE";
$params = [':email' => [$email, PDO::PARAM_STR]]; $params = [':email' => [$email, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getAthleteByGender(string $gender) { public function getAthleteByGender(string $gender): array
$query = "SELECT * FROM Athlete WHERE sexe = :gender"; {
$query = "SELECT * FROM Athlete WHERE sexe = :gender AND isCoach=FALSE";
$params = [':gender' => [$gender, PDO::PARAM_STR]]; $params = [':gender' => [$gender, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getAthleteByHeight(int $height) { public function getAthleteByHeight(int $height): array
$query = "SELECT * FROM Athlete WHERE taille = :height"; {
$query = "SELECT * FROM Athlete WHERE taille = :height AND isCoach=FALSE";
$params = [':height' => [$height, PDO::PARAM_INT]]; $params = [':height' => [$height, PDO::PARAM_INT]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getAthleteByWeight(int $weight) { public function getAthleteByWeight(int $weight): array
$query = "SELECT * FROM Athlete WHERE poids = :weight"; {
$query = "SELECT * FROM Athlete WHERE poids = :weight AND isCoach=FALSE";
$params = [':weight' => [$weight, PDO::PARAM_INT]]; $params = [':weight' => [$weight, PDO::PARAM_INT]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getAthleteByBirthDate(string $birthdate) { public function getAthleteByBirthDate(string $birthdate): array
$query = "SELECT * FROM Athlete WHERE dateNaissance = :birthdate"; {
$query = "SELECT * FROM Athlete WHERE dateNaissance = :birthdate AND isCoach=FALSE";
$params = [':birthdate' => [$birthdate, PDO::PARAM_STR]]; $params = [':birthdate' => [$birthdate, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function addAthlete(AthleteEntity $athlete) { public function getListIdFriends(int $idAthlete): array
$query = "INSERT INTO Athlete (nom, prenom, email, sexe, taille, poids, motDePasse, dateNaissance) {
VALUES (:nom, :prenom, :email, :sexe, :taille, :poids, :motDePasse, :dateNaissance)"; $query = "SELECT idAthlete1, idAthlete2 FROM Friendship WHERE idAthlete1 = :idAthlete OR idAthlete2= :idAthlete";
$params = [
':idAthlete' => $idAthlete,
];
return $this->connection->executeWithErrorHandling($query, $params);
}
public function addAthlete(AthleteEntity $athlete): array
{
$query = "INSERT INTO Athlete (nom, prenom, email, sexe, taille, poids, motDePasse, dateNaissance, isCoach)
VALUES (:nom, :prenom, :email, :sexe, :taille, :poids, :motDePasse, :dateNaissance, :isCoach)";
$params = [ $params = [
':nom' => $athlete->getNom(), ':nom' => $athlete->getNom(),
@ -76,15 +100,17 @@ class AthleteGateway {
':poids' => $athlete->getPoids(), ':poids' => $athlete->getPoids(),
':motDePasse' => $athlete->getMotDePasse(), ':motDePasse' => $athlete->getMotDePasse(),
':dateNaissance' => $athlete->getDateNaissance(), ':dateNaissance' => $athlete->getDateNaissance(),
':isCoach' => $athlete->getIsCoach(),
]; ];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function updateAthlete(AthleteEntity $oldAthlete, AthleteEntity $newAthlete) { public function updateAthlete(AthleteEntity $oldAthlete, AthleteEntity $newAthlete): array
{
$query = "UPDATE Athlete $query = "UPDATE Athlete
SET nom = :nom, prenom = :prenom, email = :email, sexe = :sexe, SET nom = :nom, prenom = :prenom, email = :email, sexe = :sexe,
taille = :taille, poids = :poids, motDePasse = :motDePasse, dateNaissance = :dateNaissance taille = :taille, poids = :poids, motDePasse = :motDePasse, dateNaissance = :dateNaissance, isCoach = :isCoach
WHERE idAthlete = :idAthlete"; WHERE idAthlete = :idAthlete";
$params = [ $params = [
@ -97,12 +123,14 @@ class AthleteGateway {
':poids' => $newAthlete->getPoids(), ':poids' => $newAthlete->getPoids(),
':motDePasse' => $newAthlete->getMotDePasse(), ':motDePasse' => $newAthlete->getMotDePasse(),
':dateNaissance' => $newAthlete->getDateNaissance(), ':dateNaissance' => $newAthlete->getDateNaissance(),
':isCoach' => $newAthlete->getIsCoach(),
]; ];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function deleteAthlete(int $idAthlete) { public function deleteAthlete(int $idAthlete): array
{
$query = "DELETE FROM Athlete WHERE idAthlete = :idAthlete"; $query = "DELETE FROM Athlete WHERE idAthlete = :idAthlete";
$params = [ $params = [

@ -6,16 +6,16 @@ use \PDO;
use \DateTime; use \DateTime;
use Model\Role; use Model\Role;
use Model\Athlete; use Model\Athlete;
use Shared\Log;
class AthleteMapper { class AthleteMapper {
public function fromSqlToEntity(array $data): array { public function athleteSqlToEntity(array $data): array {
$athleteEntities = []; $athleteEntities = [];
foreach ($data as $athleteData) { foreach ($data as $athleteData) {
$athlete = new AthleteEntity(); $athlete = new AthleteEntity();
if (isset($athleteData['idathlete'])) {
if (isset($athleteData['idAthlete'])) { $athlete->setIdAthlete($athleteData['idathlete']);
$athlete->setIdAthlete($athleteData['idAthlete']);
} }
if (isset($athleteData['nom'])) { if (isset($athleteData['nom'])) {
@ -42,12 +42,16 @@ class AthleteMapper {
$athlete->setPoids($athleteData['poids']); $athlete->setPoids($athleteData['poids']);
} }
if (isset($athleteData['motDePasse'])) { if (isset($athleteData['motdepasse'])) {
$athlete->setMotDePasse($athleteData['motDePasse']); $athlete->setMotDePasse($athleteData['motdepasse']);
}
if (isset($athleteData['datenaissance'])) {
$athlete->setDateNaissance($athleteData['datenaissance']);
} }
if (isset($athleteData['dateNaissance'])) { if (isset($athleteData['iscoach'])) {
$athlete->setDateNaissance($athleteData['dateNaissance']); $athlete->setIsCoach($athleteData['iscoach']);
} }
$athleteEntities[] = $athlete; $athleteEntities[] = $athlete;
@ -58,14 +62,12 @@ class AthleteMapper {
public function athleteEntityToModel(AthleteEntity $athleteEntity): User { public function athleteEntityToModel(AthleteEntity $athleteEntity): User {
$role = new Athlete(); // Utilisez la classe Athlete $role = new Athlete(); // Utilisez la classe Athlete
$date = new DateTime($athleteEntity->getDateNaissance());
$dateSpecifique = $athleteEntity->getDateNaissance();
$date = new DateTime($dateSpecifique);
$user = new User( $user = new User(
$athleteEntity->getIdAthlete(), $athleteEntity->getIdAthlete(),
$athleteEntity->getNom(), $athleteEntity->getNom(),
$athleteEntity->getPrenom(), $athleteEntity->getPrenom(),
"myUsername",
$athleteEntity->getEmail(), $athleteEntity->getEmail(),
$athleteEntity->getMotDePasse(), $athleteEntity->getMotDePasse(),
$athleteEntity->getSexe(), $athleteEntity->getSexe(),
@ -90,6 +92,8 @@ class AthleteMapper {
$ath->setPoids($user->getPoids()); $ath->setPoids($user->getPoids());
$ath->setMotDePasse($user->getMotDePasse()); $ath->setMotDePasse($user->getMotDePasse());
$ath->setDateNaissance($user->getDateNaissance()); $ath->setDateNaissance($user->getDateNaissance());
$ath->setIsCoach(FALSE);
$ath->setCoachId(NULL);
return $ath; return $ath;
} }

@ -4,50 +4,15 @@ namespace Database;
class CoachEntity { class CoachEntity {
private $idCoach; private $idCoach;
private $nom; private $athleteId;
private $prenom;
private $email;
private $sexe;
private $taille;
private $poids;
private $motDePasse;
private $dateNaissance;
// Getters // Getters
public function getIdCoach() { public function getIdCoach() {
return $this->idCoach; return $this->idCoach;
} }
public function getNom() { public function getAthleteId() {
return $this->nom; return $this->athleteId;
}
public function getPrenom() {
return $this->prenom;
}
public function getEmail() {
return $this->email;
}
public function getSexe() {
return $this->sexe;
}
public function getTaille() {
return $this->taille;
}
public function getPoids() {
return $this->poids;
}
public function getMotDePasse() {
return $this->motDePasse;
}
public function getDateNaissance() {
return $this->dateNaissance;
} }
// Setters // Setters
@ -55,37 +20,10 @@ class CoachEntity {
$this->idCoach = $idCoach; $this->idCoach = $idCoach;
} }
public function setNom($nom) { public function setAthleteId($athleteId) {
$this->nom = $nom; $this->athleteId = $athleteId;
} }
public function setPrenom($prenom) {
$this->prenom = $prenom;
}
public function setEmail($email) {
$this->email = $email;
}
public function setSexe($sexe) {
$this->sexe = $sexe;
}
public function setTaille($taille) {
$this->taille = $taille;
}
public function setPoids($poids) {
$this->poids = $poids;
}
public function setMotDePasse($motDePasse) {
$this->motDePasse = $motDePasse;
}
public function setDateNaissance($dateNaissance) {
$this->dateNaissance = $dateNaissance;
}
} }
?> ?>

@ -10,93 +10,96 @@ class CoachGateway {
$this->connection = $connection; $this->connection = $connection;
} }
public function getCoach() { public function getCoach(): array
{
$query = "SELECT * FROM Coach"; $query = "SELECT * FROM Coach";
return $this->connection->executeWithErrorHandling($query); return $this->connection->executeWithErrorHandling($query);
} }
public function getCoachById(int $userId) { public function getCoachById(int $userId): array
{
$query = "SELECT * FROM Coach WHERE idCoach = :id"; $query = "SELECT * FROM Coach WHERE idCoach = :id";
$params = [':id' => [$userId, PDO::PARAM_INT]]; $params = [':id' => [$userId, PDO::PARAM_INT]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getCoachByName(string $name) { public function getAthleteByCoachId(int $coachId): array
$query = "SELECT * FROM Coach WHERE nom = :name"; {
$query = "SELECT * FROM Athlete a, Coach c WHERE a.coachId = :id AND a.isCoach = TRUE";
$params = [':id' => [$coachId, PDO::PARAM_INT]];
return $this->connection->executeWithErrorHandling($query, $params);
}
public function getCoachByName(string $name): array
{
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.nom = :name";
$params = [':name' => [$name, PDO::PARAM_STR]]; $params = [':name' => [$name, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getCoachByFirstName(string $firstName) { public function getCoachByFirstName(string $firstName): array
$query = "SELECT * FROM Coach WHERE prenom = :firstName"; {
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.prenom = :firstName";
$params = [':firstName' => [$firstName, PDO::PARAM_STR]]; $params = [':firstName' => [$firstName, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getCoachByEmail(string $email) { public function getCoachByEmail(string $email): array
$query = "SELECT * FROM Coach WHERE email = :email"; {
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.email = :email";
$params = [':email' => [$email, PDO::PARAM_STR]]; $params = [':email' => [$email, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getCoachByGender(string $gender) { public function getCoachByGender(string $gender): array
$query = "SELECT * FROM Coach WHERE sexe = :gender"; {
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.sexe = :gender";
$params = [':gender' => [$gender, PDO::PARAM_STR]]; $params = [':gender' => [$gender, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getCoachByHeight(int $height) { public function getCoachByHeight(int $height): array
$query = "SELECT * FROM Coach WHERE taille = :height"; {
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.taille = :height";
$params = [':height' => [$height, PDO::PARAM_INT]]; $params = [':height' => [$height, PDO::PARAM_INT]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function getCoachByBirthDate(string $birthdate) { public function getCoachByBirthDate(string $birthdate): array
$query = "SELECT * FROM Coach WHERE dateNaissance = :birthdate"; {
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.dateNaissance = :birthdate";
$params = [':birthdate' => [$birthdate, PDO::PARAM_STR]]; $params = [':birthdate' => [$birthdate, PDO::PARAM_STR]];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function addCoach(CoachEntity $coach) { public function addCoach(CoachEntity $coach): array
$query = "INSERT INTO Coach (nom, prenom, email, sexe, taille, poids, motDePasse, dateNaissance) {
VALUES (:nom, :prenom, :email, :sexe, :taille, :poids, :motDePasse, :dateNaissance)"; $query = "INSERT INTO Coach (athleteId)
VALUES (:athleteId)";
$params = [ $params = [
':nom' => $coach->getNom(), ':athleteId' => $coach->getAthleteId(),
':prenom' => $coach->getPrenom(),
':email' => $coach->getEmail(),
':sexe' => $coach->getSexe(),
':taille' => $coach->getTaille(),
':poids' => $coach->getPoids(),
':motDePasse' => $coach->getMotDePasse(),
':dateNaissance' => $coach->getDateNaissance(),
]; ];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function updateCoach(CoachEntity $oldCoach, CoachEntity $newCoach) { public function updateCoach(CoachEntity $oldCoach, CoachEntity $newCoach): array
{
$query = "UPDATE Coach $query = "UPDATE Coach
SET nom = :nom, prenom = :prenom, email = :email, sexe = :sexe, SET athleteId = :athleteId
taille = :taille, poids = :poids, motDePasse = :motDePasse, dateNaissance = :dateNaissance
WHERE idCoach = :idCoach"; WHERE idCoach = :idCoach";
$params = [ $params = [
':idCoach' => $oldCoach->getIdCoach(), ':idCoach' => $oldCoach->getIdCoach(),
':nom' => $newCoach->getNom(), ':athleteId' => $newCoach->getAthleteId(),
':prenom' => $newCoach->getPrenom(),
':email' => $newCoach->getEmail(),
':sexe' => $newCoach->getSexe(),
':taille' => $newCoach->getTaille(),
':poids' => $newCoach->getPoids(),
':motDePasse' => $newCoach->getMotDePasse(),
':dateNaissance' => $newCoach->getDateNaissance(),
]; ];
return $this->connection->executeWithErrorHandling($query, $params); return $this->connection->executeWithErrorHandling($query, $params);
} }
public function deleteCoach(int $idCoach) { public function deleteCoach(int $idCoach): array
{
$query = "DELETE FROM Coach WHERE idCoach = :idCoach"; $query = "DELETE FROM Coach WHERE idCoach = :idCoach";
$params = [ $params = [

@ -1,6 +1,7 @@
<?php <?php
namespace Database; namespace Database;
use Model\CoachAthlete;
use Model\User; use Model\User;
use \PDO; use \PDO;
use \DateTime; use \DateTime;
@ -8,34 +9,48 @@ use Model\Role;
use Model\Coach; use Model\Coach;
class CoachMapper { class CoachMapper {
public function map(array $data) { public function coachSqlToEntity(array $data): array {
$coachEntities = [];
foreach ($data as $coachData) {
$coach = new CoachEntity(); $coach = new CoachEntity();
$coach->setIdCoach($data['idCoach']);
$coach->setNom($data['nom']);
$coach->setPrenom($data['prenom']);
$coach->setEmail($data['email']);
$coach->setSexe($data['sexe']);
$coach->setTaille($data['taille']);
$coach->setPoids($data['poids']);
$coach->setMotDePasse($data['motDePasse']);
$coach->setDateNaissance($data['dateNaissance']);
return $coach; if (isset($coachData['idCoach'])) {
$coach->setIdCoach($coachData['idCoach']);
}
if (isset($coachData['athleteId'])) {
$coach->setAthleteId($coachData['athleteId']);
}
$coachEntities[] = $coach;
}
return $coachEntities;
} }
public function CoachEntityToModel(CoachEntity $coachEntity):User{ public function CoachEntityToModel(CoachEntity $coachEntity):User{
$role = "Coach"; $role = new CoachAthlete();
$idCoach = $coachEntity->getIdCoach();
$ath = getAthleteByCoachId($idCoach);
$athlete = athleteSqlToEntity($ath);
$dateSpecific = $athlete->getDateNaissance();
$date = new DateTime($dateSpecific);
$user = new User( $user = new User(
$coachEntity->getIdCoach(), $coachEntity->getIdCoach(),
$coachEntity->getNom(), $athlete->getNom(),
$coachEntity->getPrenom(), $athlete->getPrenom(),
$coachEntity->getEmail(), $athlete->getEmail(),
$coachEntity->getMotDePasse(), $athlete->getMotDePasse(),
$coachEntity->getSexe(), $athlete->getSexe(),
$coachEntity->getTaille(), $athlete->getTaille(),
$coachEntity->getPoids(), $athlete->getPoids(),
$coachEntity->getDateNaissance(), $athlete->getDateNaissance(),
$date,
$role $role
); );
@ -46,17 +61,10 @@ class CoachMapper {
$coach = new CoachEntity(); $coach = new CoachEntity();
$coach->setIdCoach($user->getId()); $coach->setIdCoach($user->getId());
$coach->setNom($user->getNom()); $coach->setAthleteId($user->getId());
$coach->setPrenom($user->getPrenom());
$coach->setEmail($user->getEmail());
$coach->setSexe($user->getSexe());
$coach->setTaille($user->getTaille());
$coach->setPoids($user->getPoids());
$coach->setMotDePasse($user->getMotDePasse());
$coach->setDateNaissance($user->getDateNaissance());
return $coach; return $coach;
} }
} }
?> ?>

@ -2,6 +2,9 @@
namespace Database; namespace Database;
use DateTime;
use Shared\Log;
class Connexion extends \PDO { class Connexion extends \PDO {
private $stmt; private $stmt;
@ -15,13 +18,14 @@ class Connexion extends \PDO {
} }
} }
public function executeQuery(string $query, array $parameters = []): bool { public function executeQuery(string $query, array $parameters = []) {
$this->stmt = $this->prepare($query); $this->stmt = $this->prepare($query);
//foreach ($parameters as $name => $value) { // foreach ($parameters as $name => $value) {
// $this->stmt->bindValue($name, $value[0], $value[1]); // $this->stmt->bindValue($name, $value[0], $value[1]);
//} // }
foreach ($parameters as $name => $value) { foreach ($parameters as $name => $value) {
$bindValueResult = $this->stmt->bindValue($name, $value, \PDO::PARAM_STR); $dataType = is_numeric($value) ? \PDO::PARAM_INT : \PDO::PARAM_STR;
$bindValueResult = $this->stmt->bindValue($name, $value, $dataType);
if (!$bindValueResult) { if (!$bindValueResult) {
// Gérez l'erreur, par exemple, en lançant une exception. // Gérez l'erreur, par exemple, en lançant une exception.
throw new \PDOException('Failed to bind value for parameter ' . $name); throw new \PDOException('Failed to bind value for parameter ' . $name);
@ -43,7 +47,15 @@ class Connexion extends \PDO {
} }
public function getResults(): array { public function getResults(): array {
return $this->stmt->fetchAll(\PDO::FETCH_ASSOC); $results = $this->stmt->fetchAll(\PDO::FETCH_ASSOC);
// Convertissez les colonnes "taille" et "poids" en nombres
foreach ($results as &$row) {
$row['taille'] = floatval($row['taille']);
$row['poids'] = floatval($row['poids']);
}
return $results;
} }
} }
?> ?>

@ -0,0 +1,71 @@
<?php
namespace Database;
class EntrainementEntity
{
private $idEntrainement;
private $date;
private $description;
private $latitude;
private $longitude;
private $feedback;
private $coachId;
public function getIdEntrainement()
{
return $this->idEntrainement;
}
public function getDate()
{
return $this->date;
}
public function getDescription()
{
return $this->description;
}
public function getLatitude()
{
return $this->latitude;
}
public function getLongitude()
{
return $this->longitude;
}
public function getFeedback()
{
return $this->feedback;
}
public function getCoachId()
{
return $this->coachId;
}
public function setIdEntrainement($idEntrainement)
{
$this->idEntrainement = $idEntrainement;
}
public function setDate($date)
{
$this->date = $date;
}
public function setDescription($description)
{
$this->description = $description;
}
public function setLatitude($latitude)
{
$this->latitude = $latitude;
}
public function setLongitude($longitude)
{
$this->longitude = $longitude;
}
public function setFeedback($feedback)
{
$this->feedback = $feedback;
}
public function setCoachId($coachId)
{
$this->coachId = $coachId;
}
}

@ -0,0 +1,19 @@
<?php
namespace Database;
class EntrainementGateway
{
private Connexion $connection;
public function __construct(Connexion $connection) {
$this->connection = $connection;
}
public function getEntrainements(): array
{
$query = "SELECT * FROM Entrainement";
$res = $this->connection->executeWithErrorHandling($query);
return $res;
}
}

@ -0,0 +1,74 @@
<?php
namespace Database;
use Model\Athlete;
use Model\Training;
use Model\User;
class EntrainementMapper
{
public function entrainementSqlToEntity(array $data): array {
$entrainementEntities = [];
foreach ($data as $entrainementData) {
$entrainement = new EntrainementEntity();
if (isset($entrainementData['idEntrainement'])) {
$entrainement->setIdEntrainement($entrainementData['idEntrainement']);
}
if (isset($entrainementData['date'])) {
$entrainement->setDate($entrainementData['date']);
}
if (isset($entrainementData['description'])) {
$entrainement->setDescription($entrainementData['description']);
}
if (isset($entrainementData['latitude'])) {
$entrainement->setLatitude($entrainementData['latitude']);
}
if (isset($entrainementData['longitude'])) {
$entrainement->setLongitude($entrainementData['longitude']);
}
if (isset($entrainementData['feedback'])) {
$entrainement->setFeedback($entrainementData['feedback']);
}
if (isset($entrainementData['coachId'])) {
$entrainement->setCoachId($entrainementData['coachId']);
}
$entrainementEntities[] = $entrainement;
}
return $entrainementEntities;
}
public function entrainementEntityToModel(EntrainementEntity $entrainementEntity): Training {
return new Training(
$entrainementEntity->getIdEntrainement(),
$entrainementEntity->getDate(),
$entrainementEntity->getDescription(),
$entrainementEntity->getLatitude(),
$entrainementEntity->getLongitude(),
$entrainementEntity->getFeedback()
);
}
public function entrainementToEntity(Training $training):EntrainementEntity{
$train = new EntrainementEntity();
$train->setIdEntrainement($training->getId());
$train->setDate($training->getDate());
$train->setDescription($training->getDescription());
$train->setLatitude($training->getLatitude());
$train->setLongitude($training->getLongitude());
$train->setFeedback($training->getFeedback());
$train->setCoachId(1);
return $train;
}
}

@ -1,4 +1,5 @@
-- Athlete Table DROP TABLE IF EXISTS Athlete, Friendship, Notification, Statistique, Entrainement, Participe, SourceDonnee, Activite, FrequenceCardiaque CASCADE;
CREATE TABLE Athlete ( CREATE TABLE Athlete (
idAthlete SERIAL PRIMARY KEY, idAthlete SERIAL PRIMARY KEY,
nom VARCHAR(255), nom VARCHAR(255),
@ -8,83 +9,70 @@ CREATE TABLE Athlete (
taille DECIMAL, taille DECIMAL,
poids DECIMAL, poids DECIMAL,
motDePasse VARCHAR(255), motDePasse VARCHAR(255),
dateNaissance DATE dateNaissance DATE,
isCoach BOOLEAN
); );
-- Friendship Table
CREATE TABLE Friendship ( CREATE TABLE Friendship (
idAthlete1 INT, idAthlete1 INT,
idAthlete2 INT, idAthlete2 INT,
debut DATE, debut DATE,
PRIMARY KEY (idAthlete1, idAthlete2), PRIMARY KEY (idAthlete1, idAthlete2),
FOREIGN KEY (idAthlete1) REFERENCES Athlete (idAthlete), FOREIGN KEY (idAthlete1) REFERENCES Athlete(idAthlete),
FOREIGN KEY (idAthlete2) REFERENCES Athlete (idAthlete) FOREIGN KEY (idAthlete2) REFERENCES Athlete(idAthlete)
); );
-- Notification Table
CREATE TABLE Notification ( CREATE TABLE Notification (
idNotif SERIAL PRIMARY KEY, idNotif INT PRIMARY KEY,
message TEXT, message TEXT,
date DATE, date DATE,
statut BOOLEAN, statut BOOLEAN,
urgence INT, urgence INT,
athleteId INT, athleteId INT,
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete) FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete)
);
-- Coach Table
CREATE TABLE Coach (
idCoach SERIAL PRIMARY KEY,
athleteId INT,
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete)
); );
-- Statistique Table
CREATE TABLE Statistique ( CREATE TABLE Statistique (
idStatistique SERIAL PRIMARY KEY, idStatistique INT PRIMARY KEY,
poids DECIMAL, poids DECIMAL,
fcMoyenne DECIMAL, fcMoyenne DECIMAL,
fcMax DECIMAL, fcMax DECIMAL,
caloriesBruleesMoy DECIMAL, caloriesBruleesMoy DECIMAL,
date DATE, date DATE,
athleteId INT, athleteId INT,
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete) FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete)
); );
-- Entrainement Table
CREATE TABLE Entrainement ( CREATE TABLE Entrainement (
idEntrainement SERIAL PRIMARY KEY, idEntrainement INT PRIMARY KEY,
date DATE, date DATE,
description TEXT, description TEXT,
latitude DECIMAL, latitude DECIMAL,
longitude DECIMAL, longitude DECIMAL,
feedback TEXT, feedback TEXT,
coachId INT, athleteId INT,
FOREIGN KEY (coachId) REFERENCES Coach (idCoach) FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete)
); );
-- Participe Table
CREATE TABLE Participe ( CREATE TABLE Participe (
athleteId INT, athleteId INT,
entrainementId INT, entrainementId INT,
PRIMARY KEY (athleteId, entrainementId), PRIMARY KEY (athleteId, entrainementId),
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete), FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete),
FOREIGN KEY (entrainementId) REFERENCES Entrainement (idEntrainement) FOREIGN KEY (entrainementId) REFERENCES Entrainement(idEntrainement)
); );
-- SourceDonnee Table
CREATE TABLE SourceDonnee ( CREATE TABLE SourceDonnee (
idSource SERIAL PRIMARY KEY, idSource INT PRIMARY KEY,
type VARCHAR(255), type VARCHAR(255),
modele VARCHAR(255), modele VARCHAR(255),
precision DECIMAL, precision2 DECIMAL,
athleteId INT, athleteId INT,
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete) FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete)
); );
-- Activite Table
CREATE TABLE Activite ( CREATE TABLE Activite (
idActivite SERIAL PRIMARY KEY, idActivite INT PRIMARY KEY,
type VARCHAR(255), type VARCHAR(255),
date DATE, date DATE,
heureDeDebut TIME, heureDeDebut TIME,
@ -99,13 +87,12 @@ CREATE TABLE Activite (
temperatureMoyenne DECIMAL, temperatureMoyenne DECIMAL,
athleteId INT, athleteId INT,
sourceId INT, sourceId INT,
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete), FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete),
FOREIGN KEY (sourceId) REFERENCES SourceDonnee (idSource) FOREIGN KEY (sourceId) REFERENCES SourceDonnee(idSource)
); );
-- FrequenceCardiaque Table
CREATE TABLE FrequenceCardiaque ( CREATE TABLE FrequenceCardiaque (
idFc SERIAL PRIMARY KEY, idFc INT PRIMARY KEY,
altitude DECIMAL, altitude DECIMAL,
temps TIME, temps TIME,
temperature DECIMAL, temperature DECIMAL,
@ -113,46 +100,33 @@ CREATE TABLE FrequenceCardiaque (
longitude DECIMAL, longitude DECIMAL,
latitude DECIMAL, latitude DECIMAL,
activiteId INT, activiteId INT,
FOREIGN KEY (activiteId) REFERENCES Activite (idActivite) FOREIGN KEY (activiteId) REFERENCES Activite(idActivite)
); );
-- Insertion de données dans la table Athlete INSERT INTO Athlete (idAthlete, nom, prenom, email, sexe, taille, poids, motDePasse, dateNaissance, isCoach) VALUES
INSERT INTO Athlete (nom, prenom, email, sexe, taille, poids, motDePasse, dateNaissance) VALUES (1, 'Doe', 'John', 'john.doe@example.com', 'M', 1.80, 70, 'password123', '1990-01-01', FALSE),
('Doe', 'John', 'john.doe@example.com', 'M', 1.80, 70, 'password123', '1990-01-01'), (2, 'Smith', 'Jane', 'jane.smith@example.com', 'F', 1.65, 60, 'password456', '1992-02-02', TRUE);
('Smith', 'Jane', 'jane.smith@example.com', 'F', 1.65, 60, 'password456', '1992-02-02');
-- Insertion de données dans la table Friendship
INSERT INTO Friendship (idAthlete1, idAthlete2, debut) VALUES INSERT INTO Friendship (idAthlete1, idAthlete2, debut) VALUES
(1, 2, '2023-01-01'); (1, 2, '2023-01-01');
-- Insertion de données dans la table Notification
INSERT INTO Notification (message, date, statut, urgence, athleteId) VALUES
('Training session at 10 AM', '2023-03-10', TRUE, 1, 1);
-- Insertion de données dans la table Coach INSERT INTO Notification (idNotif, message, date, statut, urgence, athleteId) VALUES
INSERT INTO Coach (athleteId) VALUES (1, 'Training session at 10 AM', '2023-03-10', TRUE, 1, 1);
(1);
-- Insertion de données dans la table Statistique INSERT INTO Statistique (idStatistique, poids, fcMoyenne, fcMax, caloriesBruleesMoy, date, athleteId) VALUES
INSERT INTO Statistique (poids, fcMoyenne, fcMax, caloriesBruleesMoy, date, athleteId) VALUES (1, 70, 80, 150, 500, '2023-03-10', 1);
(70, 80, 150, 500, '2023-03-10', 1);
-- Insertion de données dans la table Entrainement INSERT INTO Entrainement (idEntrainement, date, description, latitude, longitude, feedback, athleteId) VALUES
INSERT INTO Entrainement (date, description, latitude, longitude, feedback, coachId) VALUES (1, '2023-03-12', 'Long run in the park', 40.7128, -74.0060, 'Good effort', 1);
('2023-03-12', 'Long run in the park', 40.7128, -74.0060, 'Good effort', 1);
-- Insertion de données dans la table Participe
INSERT INTO Participe (athleteId, entrainementId) VALUES INSERT INTO Participe (athleteId, entrainementId) VALUES
(1, 1); (1, 1);
-- Insertion de données dans la table SourceDonnee INSERT INTO SourceDonnee (idSource, type, modele, precision2, athleteId) VALUES
INSERT INTO SourceDonnee (type, modele, precision, athleteId) VALUES (1, 'Heart Rate Monitor', 'HRM-Pro', 98.5, 1);
('Heart Rate Monitor', 'HRM-Pro', 98.5, 1);
-- Insertion de données dans la table Activite INSERT INTO Activite (idActivite, type, date, heureDeDebut, heureDeFin, effortRessent, variabilite, variance, ecartType, moyenne, maximum, minimum, temperatureMoyenne, athleteId, sourceId) VALUES
INSERT INTO Activite (type, date, heureDeDebut, heureDeFin, effortRessent, variabilite, variance, ecartType, moyenne, maximum, minimum, temperatureMoyenne, athleteId, sourceId) VALUES (1, 'Running', '2023-03-10', '08:00:00', '09:00:00', 7, 0.5, 1, 0.1, 140, 160, 120, 20, 1, 1);
('Running', '2023-03-10', '08:00:00', '09:00:00', 7, 0.5, 1, 0.1, 140, 160, 120, 20, 1, 1);
-- Insertion de données dans la table FrequenceCardiaque INSERT INTO FrequenceCardiaque (idFc, altitude, temps, temperature, bpm, longitude, latitude, activiteId) VALUES
INSERT INTO FrequenceCardiaque (altitude, temps, temperature, bpm, longitude, latitude, activiteId) VALUES (1, 100, '08:15:00', 15, 130, -74.0060, 40.7128, 1);
(100, '08:15:00', 15, 130, -74.0060, 40.7128, 1);

@ -1,34 +1,42 @@
<?php <?php
namespace Data\Core; namespace Network;
use App\Router\Session;
use Model\User; use Model\User;
use Model\Athlete; use Model\Athlete;
use Model\CoachAthlete; use Model\CoachAthlete;
use Repository\IUserRepository; use Repository\IUserRepository;
use Shared\IHashPassword; use Shared\IHashPassword;
use Shared\Log;
class AuthService implements IAuthService { const USER = 'USER';
class AuthService implements IAuthService
{
private IUserRepository $userRepository; private IUserRepository $userRepository;
private IHashPassword $passwordHacher; private IHashPassword $passwordHacher;
private ?User $currentUser = null; private ?User $currentUser = null;
public function __construct(IUserRepository $userRepository, IHashPassword $passwordHacher) { public function __construct(IUserRepository $userRepository, IHashPassword $passwordHacher)
{
$this->userRepository = $userRepository; $this->userRepository = $userRepository;
$this->passwordHacher = $passwordHacher; $this->passwordHacher = $passwordHacher;
} }
public function login(string $email, string $password): bool { public function login(string $email, string $password): bool
{
$user = $this->userRepository->getItemByEmail($email); $user = $this->userRepository->getItemByEmail($email);
if ($user === null || !$this->validatePassword($password, $user->getPasswordHash())) { if ($user === null || !$this->passwordHacher->isPasswordValid( $user->getMotDePasse(),$password)) {
return false; return false;
} }
$this->currentUser = $user; $this->currentUser = $user;
// Add session handling logic here Session::getInstance()->__set(USER, $this->currentUser->getId());
return true; return true;
} }
public function register(string $email, string $password, array $data): bool {
public function register(string $email, string $password, $data): bool
{
if ($this->userRepository->getItemByEmail($email)) { if ($this->userRepository->getItemByEmail($email)) {
throw new \Exception('User already exists'); throw new \Exception('User already exists');
} }
@ -37,20 +45,18 @@ class AuthService implements IAuthService {
$prenom = $data['prenom']; $prenom = $data['prenom'];
$username = $data['username']; $username = $data['username'];
$nom = $data['nom']; $nom = $data['nom'];
$email = $data['email'];
$sexe = $data['sexe']; $sexe = $data['sexe'];
$taille = $data['taille']; $taille = $data['taille'];
$poids = $data['poids']; $poids = $data['poids'];
$dateNaissance = $data['dateNaissance'] ; $dateNaissance = $data['dateNaissance'];
$roleName = $data['roleName']; $roleName = $data['roleName'];
$role = null; $role = null;
if($roleName == "Coach"){ if ($roleName == "Coach") {
$role = new CoachAthlete(); $role = new CoachAthlete();
} } else if ($roleName == "Athlete") {
else if($roleName == "Athlete"){
$role = new Athlete(); $role = new Athlete();
} }
// Create a new user instance (you should expand on this with more data as needed)
$user = new User( $user = new User(
random_int(0, 100), random_int(0, 100),
$nom, $nom,
@ -67,20 +73,26 @@ class AuthService implements IAuthService {
); );
$this->userRepository->addItem($user); $this->userRepository->addItem($user);
$this->currentUser = $user; $this->currentUser = $user;
// Add session handling logic here Session::getInstance()->__set(USER,$this->currentUser->getId());
return true; return true;
} }
public function logout(): void { public function logoutUser(): bool
{
$this->currentUser = null; $this->currentUser = null;
// Add session handling logic here Session::getInstance()->destroy();
return true;
} }
public function getCurrentUser(): ?User { public function getCurrentUser(): ?User
{
if (!empty(Session::getInstance()->__get(USER)) && $this->currentUser === null) {
$this->currentUser = $this->userRepository->getItemById(Session::getInstance()->__get(USER));
}
return $this->currentUser; return $this->currentUser;
} }
private function validatePassword(string $password, string $hash): bool {
// Implement password validation logic (e.g., using password_verify if using bcrypt)
}
} }

@ -33,18 +33,18 @@ interface IAuthService {
/** /**
* Register a new user. * Register a new user.
* *
* @param string $username The username of the new user. * @param string $emailUser The emailUser of the new user.
* @param string $password The password of the new user. * @param string $password The password of the new user.
* @param $data other data {undefined} for the moment. * @param $data other data {undefined} for the moment.
* *
* @return bool True if registration is successful, false otherwise. * @return bool True if registration is successful, false otherwise.
*/ */
public function register(string $username, string $password, $data): bool; public function register(string $emailUser, string $password, $data): bool;
/** /**
* Logout the currently authenticated user. * Logout the currently authenticated user.
* *
* @return void * @return bool
*/ */
public function logoutUser(): bool; public function logoutUser(): bool;

@ -27,7 +27,7 @@ class Activity
private float $variability; private float $variability;
private float $variance; private float $variance;
private float $standardDeviation; private float $standardDeviation;
private int $average; private float $average;
private int $maximum; private int $maximum;
private int $minimum; private int $minimum;
private float $avrTemperature; private float $avrTemperature;

@ -35,6 +35,12 @@ class Training
public function getLocation(): String { public function getLocation(): String {
return $this->longitude . $this->latitude; return $this->longitude . $this->latitude;
} }
public function getLatitude(): float {
return $this->latitude;
}
public function getLongitude(): float {
return $this->longitude;
}
public function getDescription(): String public function getDescription(): String
{ {
return $this->description; return $this->description;

@ -28,6 +28,7 @@ class User {
private \DateTime $dateNaissance; private \DateTime $dateNaissance;
private Role $role; private Role $role;
protected array $notifications = []; protected array $notifications = [];
private array $listFriend = [];
/** /**
* @return array * @return array
@ -50,7 +51,9 @@ class User {
* @param \DateTime $dateNaissance * @param \DateTime $dateNaissance
* @param \Model\Role $role * @param \Model\Role $role
*/ */
public function __construct(int $id, string $nom, string $prenom, string $username, string $email, string $motDePasse, string $sexe, float $taille, float $poids, \DateTime $dateNaissance, Role $role) public function __construct(int $id, string $nom, string $prenom, string $username, string $email,
string $motDePasse, string $sexe, float $taille, float $poids, \DateTime $dateNaissance,
Role $role)
{ {
$this->id = $id; $this->id = $id;
$this->nom = $nom; $this->nom = $nom;
@ -289,5 +292,23 @@ class User {
public function __toString() { public function __toString() {
return "Athlete [ID: {$this->id}, Username : $this->username, Nom: {$this->nom}, Prénom: {$this->prenom}, Email: {$this->email}]"; return "Athlete [ID: {$this->id}, Username : $this->username, Nom: {$this->nom}, Prénom: {$this->prenom}, Email: {$this->email}]";
} }
/**
* Donne la liste des amis de l'utilisateur
*
* @return string Les amis de l'utilisateur.
*/
public function getListFriend(): array {
return $this->listFriend;
}
/**
* Ajoute un utilisateur a sa liste d'amis.
*
* @param User L'utilisateur a ajouter.
*/
public function addFriend(User $user){
array_push($this->listFriend, $user);
}
} }
?> ?>

@ -8,12 +8,14 @@
* *
* @package manager * @package manager
*/ */
namespace Manager; namespace Manager;
use adriangibbons\phpFITFileAnalysis; use adriangibbons\phpFITFileAnalysis;
use Exception; use Exception;
use Model\Activity; use Model\Activity;
use Network\IAuthService; use Network\IAuthService;
use Shared\Log;
use Stub\AuthService; use Stub\AuthService;
/** /**
@ -27,14 +29,21 @@ class ActivityManager
*/ */
private IAuthService $authService; private IAuthService $authService;
/**
* @var DataManager
*/
private DataManager $dataManager;
/** /**
* Constructeur de la classe ActivityManager. * Constructeur de la classe ActivityManager.
* *
* @param IAuthService $authService Le service d'authentification utilisé pour vérifier l'utilisateur actuel. * @param IAuthService $authService Le service d'authentification utilisé pour vérifier l'utilisateur actuel.
*/ */
public function __construct(DataManager $dataManager,IAuthService $authService) public function __construct(DataManager $dataManager, IAuthService $authService)
{ {
$this->authService = $authService; $this->authService = $authService;
$this->dataManager = $dataManager;
} }
/** /**
@ -63,9 +72,8 @@ class ActivityManager
// Conversion des données en format JSON // Conversion des données en format JSON
$jsonFitData = json_encode($fitData, JSON_PRETTY_PRINT); $jsonFitData = json_encode($fitData, JSON_PRETTY_PRINT);
// Enregistrement du fichier JSON // 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; return true;
} catch (\Exception $e) { } catch (\Exception $e) {
@ -85,12 +93,13 @@ class ActivityManager
* @return bool Retourne true en cas de succès, sinon false. * @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. * @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 { try {
// Vérification des options par défaut // Vérification des options par défaut
if (empty($options)) { if (empty($options)) {
$options = [ $options = [
'input_is_data' => true,
'fix_data' => ['all'], 'fix_data' => ['all'],
'data_every_second' => false, 'data_every_second' => false,
'units' => 'metric', 'units' => 'metric',
@ -99,7 +108,6 @@ class ActivityManager
'overwrite_with_dev_data' => false 'overwrite_with_dev_data' => false
]; ];
} }
// Ouverture du fichier FIT // Ouverture du fichier FIT
if (!($monFichierFit = new phpFITFileAnalysis($file_path_or_data, $options))) { if (!($monFichierFit = new phpFITFileAnalysis($file_path_or_data, $options))) {
throw new Exception("Problème lors de l'ouverture du fichier FIT"); throw new Exception("Problème lors de l'ouverture du fichier FIT");
@ -128,9 +136,14 @@ class ActivityManager
$standardDeviation = number_format(sqrt($variance), 2); $standardDeviation = number_format(sqrt($variance), 2);
$maximum = max($heartRateList); $maximum = max($heartRateList);
$minimum = min($heartRateList); $minimum = min($heartRateList);
if(isset($monFichierFit->data_mesgs['record']['temperature'])){
// Extraction de la température moyenne (si disponible
$temperatureList = $monFichierFit->data_mesgs['record']['temperature']; $temperatureList = $monFichierFit->data_mesgs['record']['temperature'];
$averageTemperature = (!empty($temperatureList)) ? number_format(array_sum($temperatureList) / count($temperatureList), 1) : -200; $averageTemperature = (!empty($temperatureList)) ? number_format(array_sum($temperatureList) / count($temperatureList), 1) : -200;
}
else{
$averageTemperature = -200;
}
$isPaused = count($monFichierFit->isPaused()) > 0; $isPaused = count($monFichierFit->isPaused()) > 0;
@ -150,16 +163,23 @@ class ActivityManager
$averageTemperature, $averageTemperature,
$isPaused $isPaused
); );
// $this->dataManager->activityRepository->add($newActivity);
// if ($this->saveFitFileToJSON($monFichierFit)) {
// Ajout de l'activité et enregistrement du fichier FIT en JSON // Ajout de l'activité et enregistrement du fichier FIT en JSON
if ($this->authService->getCurrentUser()->getRole()->addActivity($newActivity) && $this->saveFitFileToJSON($monFichierFit)) { if ($this->authService->getCurrentUser()->getRole()->addActivity($newActivity)) {
return true; return true;
} }
} catch (\Exception $e) { // }
return false;
}
catch(\Exception $e){
echo $e; echo $e;
} }
return false; return false;
} }
} }
?> ?>

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

@ -1,13 +1,4 @@
<?php <?php
/**
* Nom du fichier: UserManager.php
*
* @author PEREDERII Antoine
* @date 2023-11-25
* @description Classe UserManager pour gérer les opérations liées aux utilisateurs.
*
* @package manager
*/
namespace Manager; namespace Manager;
@ -19,7 +10,7 @@ use Network\IAuthService;
use Network\IFriendRequestService; use Network\IFriendRequestService;
use Shared\Validation; use Shared\Validation;
use Stub\UserRepository; use Stub\UserRepository;
use Shared\Log;
class UserManager class UserManager
{ {
private IAuthService $authService; private IAuthService $authService;
@ -44,14 +35,6 @@ class UserManager
return $this->currentUser; return $this->currentUser;
} }
/**
* Connecte un utilisateur avec les identifiants fournis.
*
* @param string $loginUser Le nom d'utilisateur.
* @param string $passwordUser Le mot de passe de l'utilisateur.
* @return bool Retourne true en cas de connexion réussie, sinon false.
* @throws \Exception En cas d'erreur dans les informations d'identification.
*/
public function login($emailUser, $passwordUser): bool public function login($emailUser, $passwordUser): bool
{ {
// Validate data format // Validate data format
@ -65,7 +48,6 @@ class UserManager
return false; return false;
} }
if ($this->authService->login($emailUser, $passwordUser)) { if ($this->authService->login($emailUser, $passwordUser)) {
$this->currentUser = $this->authService->getCurrentUser(); $this->currentUser = $this->authService->getCurrentUser();
// Check if the current user is correctly set // Check if the current user is correctly set
@ -163,14 +145,9 @@ class UserManager
} }
// NEED TO PERSIST // NEED TO PERSIST
/** /**
* Enregistre un nouvel utilisateur avec les informations fournies. * @throws \Exception
*
* @param string $loginUser Le nom d'utilisateur.
* @param string $passwordUser Le mot de passe de l'utilisateur.
* @param array $data Les données supplémentaires pour l'enregistrement.
* @return bool Retourne true en cas d'enregistrement réussi, sinon false.
* @throws \Exception En cas d'erreur lors de la validation des données ou de l'enregistrement.
*/ */
public function register($loginUser, $passwordUser, $data): bool public function register($loginUser, $passwordUser, $data): bool
{ {
@ -181,6 +158,21 @@ class UserManager
// } // }
// } // }
$dateNaissance = new \DateTime($data['dateNaissance']);
$dateActuelle = new \DateTime();
// Vérifier si la date est dans le futur
if ($dateNaissance > $dateActuelle) {
throw new \Exception("La date de naissance ne peut pas être dans le futur.");
}
// Vérifier l'âge minimum (par exemple, 18 ans)
$ageMinimum = new \DateTime('-10 years');
if ($dateNaissance > $ageMinimum) {
throw new \Exception("Vous devez avoir au moins 18 ans pour vous inscrire.");
}
$data['dateNaissance'] = $dateNaissance;
$roleName = $data['roleName']; $roleName = $data['roleName'];
if ($roleName !== "Athlete" && $roleName !== "Coach") { if ($roleName !== "Athlete" && $roleName !== "Coach") {
throw new \Exception("Rôle non valide"); throw new \Exception("Rôle non valide");
@ -197,11 +189,6 @@ class UserManager
return false; return false;
} }
/**
* Déconnecte l'utilisateur actuel.
*
* @return bool Retourne true en cas de déconnexion réussie, sinon false.
*/
public function deconnecter(): bool public function deconnecter(): bool
{ {
if ($this->authService->logoutUser()) { if ($this->authService->logoutUser()) {
@ -211,4 +198,6 @@ class UserManager
} }
} }
?> ?>

@ -1,9 +1,12 @@
<?php <?php
namespace Repository; namespace Repository;
use Model\User;
interface IUserRepository extends IGenericRepository { interface IUserRepository extends IGenericRepository {
public function addFriend(int $user1,int $user2); public function addFriend(User $user1,user $user2);
public function deleteFriend(int $user1,int $user2); public function deleteFriend(User $user1,User $user2);
public function getItemByEmail(string $email);
} }

@ -1,13 +1,4 @@
<?php <?php
/**
* Nom du fichier: UserRepository.php
*
* @author PEREDERII Antoine
* @date 2023-11-25
* @description Classe représentant un dépôt d'utilisateurs pour l'accès aux données des utilisateurs.
*
* @package repository
*/
namespace Stub; namespace Stub;
@ -16,59 +7,26 @@ use Model\CoachAthlete;
use Model\User; use Model\User;
use Repository\IUserRepository; use Repository\IUserRepository;
/**
* @class UserRepository
* @brief Classe représentant un dépôt d'utilisateurs pour l'accès aux données des utilisateurs.
*/
class UserRepository implements IUserRepository { class UserRepository implements IUserRepository {
private array $users = []; private array $users = [];
/**
* Constructeur de la classe UserRepository.
*/
public function __construct() { public function __construct() {
$this->users[] = new User(1, "Doe", "John", "Doe","john.doe@example.com", "password123", 'M', 1.80, 75, new \DateTime("1985-05-15"), new CoachAthlete()); $this->users[] = new User(1, "Doe", "John", "Doe","john.doe@example.com", '$2y$10$U59ioMTGZBM2FGQv.3lcbuL0IkO4Fx1jQU7f5hF7o/hvCX2t46mby', 'M', 1.80, 75, new \DateTime("1985-05-15"), new CoachAthlete());
$this->users[] = new User(2, "Smith", "Jane","Smith", "jane.smith@example.com", "secure456", 'F', 1.65, 60, new \DateTime("1990-03-10"), new Athlete()); $this->users[] = new User(2, "Smith", "Jane","Smith", "jane.smith@example.com", '$2y$10$U59ioMTGZBM2FGQv.3lcbuL0IkO4Fx1jQU7f5hF7o/hvCX2t46mby', 'F', 1.65, 60, new \DateTime("1990-03-10"), new Athlete());
$this->users[] = new User(3, "Martin", "Paul","Martin", "paul.martin@example.com", "super789", 'M', 1.75, 68, new \DateTime("1988-08-20"), new CoachAthlete()); $this->users[] = new User(3, "Martin", "Paul","Martin", "paul.martin@example.com", '$2y$10$U59ioMTGZBM2FGQv.3lcbuL0IkO4Fx1jQU7f5hF7o/hvCX2t46mby', 'M', 1.75, 68, new \DateTime("1988-08-20"), new CoachAthlete());
$this->users[] = new User(4, "Brown", "Anna","Brown", "anna.brown@example.com", "test000", 'F', 1.70, 58, new \DateTime("1992-11-25"), new Athlete()); $this->users[] = new User(4, "Brown", "Anna","Brown", "anna.brown@example.com", '$2y$10$U59ioMTGZBM2FGQv.3lcbuL0IkO4Fx1jQU7f5hF7o/hvCX2t46mby', 'F', 1.70, 58, new \DateTime("1992-11-25"), new Athlete());
$this->users[] = new User(5, "Lee", "Bruce","Lee", "bruce.lee@example.com", "hello321", 'M', 1.72, 70, new \DateTime("1970-02-05"), new Athlete()); $this->users[] = new User(5, "Lee", "Bruce","Lee", "bruce.lee@example.com", '$2y$10$U59ioMTGZBM2FGQv.3lcbuL0IkO4Fx1jQU7f5hF7o/hvCX2t46mby', 'M', 1.72, 70, new \DateTime("1970-02-05"), new Athlete());
}
/**
* Obtient un utilisateur par son identifiant.
*
* @param int $id L'identifiant de l'utilisateur.
* @return User|null L'utilisateur correspondant à l'identifiant donné, ou null s'il n'existe pas.
*/
public function getItemById(int $id): ?User {
foreach ($this->users as $user) {
if ($user->getId() === $id) {
return $user;
}
}
return null;
} }
/** public function getItemById(int $id): ?User {
* Obtient un utilisateur par son rôle.
*
* @return User|null L'utilisateur ayant le rôle spécifié, ou null s'il n'y en a pas.
*/
public function getItemByRole(): ?User {
foreach ($this->users as $user) { foreach ($this->users as $user) {
if ($user->getRole() instanceof \Model\Coach) { if ($user->getId() === $id) {
return $user; return $user;
} }
} }
return null; return null;
} }
/**
* Obtient un utilisateur par son adresse e-mail.
*
* @param string $email L'adresse e-mail de l'utilisateur.
* @return User|null L'utilisateur correspondant à l'adresse e-mail donnée, ou null s'il n'existe pas.
*/
public function getItemByEmail(string $email): ?User { public function getItemByEmail(string $email): ?User {
foreach ($this->users as $user) { foreach ($this->users as $user) {
if ($user->getEmail() === $email) { if ($user->getEmail() === $email) {
@ -78,12 +36,6 @@ class UserRepository implements IUserRepository {
return null; return null;
} }
/**
* Obtient le nombre total d'utilisateurs dans le dépôt.
*
* @return int Le nombre total d'utilisateurs.
*/
public function getNbItems(): int { public function getNbItems(): int {
return count($this->users); return count($this->users);
} }
@ -93,67 +45,31 @@ class UserRepository implements IUserRepository {
return array_slice($this->users, $index, $count); return array_slice($this->users, $index, $count);
} }
/**
* Obtient un tableau d'utilisateurs dont le nom ou le prénom contient la sous-chaîne spécifiée.
*
* @param string $substring La sous-chaîne pour la recherche.
* @param int $index L'indice de départ dans le tableau.
* @param int $count Le nombre d'utilisateurs à récupérer.
* @param string|null $orderingPropertyName Le nom de la propriété pour l'ordonnancement (facultatif).
* @param bool $descending Indique si l'ordonnancement doit être effectué en ordre descendant (facultatif, par défaut false).
* @return array|null Le tableau d'utilisateurs filtré, ou null s'il n'y a aucun utilisateur correspondant.
*/
public function getItemsByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array { public function getItemsByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array {
$filteredUsers = array_filter($this->users, function ($user) use ($substring) { $filteredUsers = array_filter($this->users, function ($user) use ($substring) {
return str_contains(strtolower($user->getNom()), strtolower($substring)) || str_contains(strtolower($user->getPrenom()), strtolower($substring)); return str_contains(strtolower($user->getNom()), strtolower($substring)) || str_contains(strtolower($user->getPrenom()), strtolower($substring));
}); });
return array_slice($filteredUsers, $index, $count); return array_slice($filteredUsers, $index, $count);
} }
/**
* Obtient un utilisateur dont le nom ou le prénom contient la sous-chaîne spécifiée.
*
* @param string $substring La sous-chaîne pour la recherche.
* @param int $index L'indice de départ dans le tableau.
* @param int $count Le nombre d'utilisateurs à récupérer.
* @param string|null $orderingPropertyName Le nom de la propriété pour l'ordonnancement (facultatif).
* @param bool $descending Indique si l'ordonnancement doit être effectué en ordre descendant (facultatif, par défaut false).
* @return User|null L'utilisateur filtré, ou null s'il n'y a aucun utilisateur correspondant.
*/
public function getItemByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): ?User { public function getItemByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): ?User {
$filteredUsers = $this->GetItemsByName($substring, $index, $count, $orderingPropertyName, $descending); $filteredUsers = $this->GetItemsByName($substring, $index, $count, $orderingPropertyName, $descending);
return $filteredUsers[0] ?? null; return $filteredUsers[0] ?? null;
} }
/**
* Met à jour un utilisateur existant dans le dépôt. // should have type here
*
* @param User $oldItem L'ancienne instance de l'utilisateur.
* @param User $newItem La nouvelle instance de l'utilisateur.
* @return void
*/
public function updateItem($oldUser, $newUser): void { public function updateItem($oldUser, $newUser): void {
$index = array_search($oldUser, $this->users); $index = array_search($oldUser, $this->users);
if ($index !== false) { if ($index !== false) {
$this->users[$index] = $newItem; $this->users[$index] = $newUser;
} }
} }
/** // should have type here
* Ajoute un nouvel utilisateur au dépôt.
*
* @param User $user L'instance de l'utilisateur à ajouter.
* @return void
*/
public function addItem( $user): void { public function addItem( $user): void {
$this->users[] = $user; $this->users[] = $user;
} }
/** // should have type here
* Supprime un utilisateur du dépôt.
*
* @param User $user L'instance de l'utilisateur à supprimer.
* @return bool Retourne true si la suppression a réussi, sinon false.
*/
public function deleteItem( $user): bool { public function deleteItem( $user): bool {
$index = array_search($user, $this->users); $index = array_search($user, $this->users);
if ($index !== false) { if ($index !== false) {
@ -163,15 +79,16 @@ class UserRepository implements IUserRepository {
return false; return false;
} }
public function addFriend(int $user1, int $user2) public function addFriend(User $user1, User $user2)
{ {
return true; return true;
} }
public function deleteFriend(int $user1, int $user2) public function deleteFriend(User $user1, User $user2)
{ {
return true; return true;
} }
} }
?> ?>

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

@ -2,6 +2,8 @@
namespace Shared; namespace Shared;
use App\Router\Request\IRequest; use App\Router\Request\IRequest;
use InvalidArgumentException;
/** /**
* Responsible for resolving the arguments passed to a controller action. * Responsible for resolving the arguments passed to a controller action.
*/ */
@ -14,7 +16,7 @@ class ArgumentControllerResolver implements IArgumentResolver{
* @param callable $controller The controller callable. * @param callable $controller The controller callable.
* @return array An array of resolved arguments. * @return array An array of resolved arguments.
* @throws \ReflectionException If the controller method does not exist. * @throws \ReflectionException If the controller method does not exist.
* @throws \InvalidArgumentException If an argument cannot be resolved. * @throws InvalidArgumentException If an argument cannot be resolved.
*/ */
public function getArguments(IRequest $request, callable $controller): array public function getArguments(IRequest $request, callable $controller): array
{ {
@ -27,10 +29,10 @@ class ArgumentControllerResolver implements IArgumentResolver{
$reflectionMethod = new \ReflectionMethod($className, $methodName); $reflectionMethod = new \ReflectionMethod($className, $methodName);
} else { } else {
// Handle other types of callables if needed // Handle other types of callables if needed
throw new \InvalidArgumentException("Invalid controller callable format."); throw new InvalidArgumentException("Invalid controller callable format.");
} }
} catch (\ReflectionException $e) { } catch (\ReflectionException $e) {
throw new \InvalidArgumentException("Controller method error: " . $e->getMessage()); throw new InvalidArgumentException("Controller method error: " . $e->getMessage());
} }
$args = []; $args = [];
@ -42,11 +44,10 @@ class ArgumentControllerResolver implements IArgumentResolver{
$name = $param->getName(); $name = $param->getName();
$value = $this->getFromRequest($name, $request); $value = $this->getFromRequest($name, $request);
if ($value === null && $param->isDefaultValueAvailable()) { if ($value === null && $param->isDefaultValueAvailable()) {
$value = $param->getDefaultValue(); $value = $param->getDefaultValue();
} elseif ($value === null) { } elseif ($value === null) {
throw new \InvalidArgumentException("Missing argument: $name"); throw new InvalidArgumentException("Missing argument: $name");
} }
$args[] = $value; $args[] = $value;

@ -26,7 +26,7 @@ final class Validation {
* @throws Exception Si la chaîne n'est pas valide (tentative d'injection de code). * @throws Exception Si la chaîne n'est pas valide (tentative d'injection de code).
*/ */
public static function val_string(string $string) : bool { public static function val_string(string $string) : bool {
if (strlen(htmlspecialchars($string, ENT_QUOTES) === 0)) { if (!$string) {//filter_var($string, FILTER_SANITIZE_STRING) !== $string
throw new Exception("$string n'est pas valide. Tentative d'injection de code (attaque sécurité)!"); throw new Exception("$string n'est pas valide. Tentative d'injection de code (attaque sécurité)!");
} else { } else {
return true; return true;
@ -101,7 +101,7 @@ final class Validation {
* @return string La chaîne nettoyée. * @return string La chaîne nettoyée.
*/ */
public static function clean_string(string $string) : string { public static function clean_string(string $string) : string {
return filter_var($string, FILTER_SANITIZE_STRING); return filter_var($string);
} }
/** /**

@ -0,0 +1,215 @@
<?php
use PHPUnit\Framework\TestCase;
//use Database\{Connexion, AthleteGateway,AthleteEntity};
use Database\AthleteEntity;
use Database\AthleteGateway;
use Database\Connexion;
use Database\AthleteMapper;
use Database\CoachGateway;
use Database\CoachEntity;
use Database\CoachMapper;
class GatewayTest extends TestCase {
//Partie concernant les Athlètes
public function testGetAthlete() {
//$dsn = "pgsql:host=londres;port=8888;dbname=dbkemonteiro2;user=kemonteiro2;password=Mdp";
require "loginDatabase.php";
$connexion = new Connexion($dsn,$username,$password);
$athleteGateway = new AthleteGateway($connexion);
$result = $athleteGateway->getAthlete();
//var_dump($result);
}
/* Fonctionne mais en commentaire pour pas add et del a chaque fois
public function testAddAthlete(){
$dsn = "mysql:host=londres;dbname=dbkemonteiro2;";
$username = "kemonteiro2";
$password = "#Phpmyadmin63";
$connexion = new Connexion($dsn,$username,$password);
$athleteGateway = new AthleteGateway($connexion);
$dateSpecifique = "2023-11-26";
$timestamp = strtotime($dateSpecifique);
$dateSQL = date("Y-m-d", $timestamp);
$athleteEntity = new AthleteEntity();
$athleteEntity->setNom('John');
$athleteEntity->setPrenom('Doe');
$athleteEntity->setIdAthlete(1234);
$athleteEntity->setEmail('kevin.monteiro@gmail.fr');
$athleteEntity->setSexe('H');
$athleteEntity->setTaille(169);
$athleteEntity->setPoids(69);
$athleteEntity->setMotDePasse('motdepasse');
$athleteEntity->setDateNaissance($dateSQL);
$result2 = $athleteGateway->addAthlete($athleteEntity);
}
public function testDeleteAthlete(){
$dsn = "mysql:host=londres;dbname=dbkemonteiro2;";
$username = "kemonteiro2";
$password = "#Phpmyadmin63";
$connexion = new Connexion($dsn,$username,$password);
$athleteGateway = new AthleteGateway($connexion);
$result = $athleteGateway->deleteAthlete( //idAthlete );
var_dump($result);
}*/
public function testUpdateAthlete(){
$dsn = "mysql:host=londres;dbname=dbkemonteiro2;";
$username = "kemonteiro2";
$password = "#Phpmyadmin63";
$connexion = new Connexion($dsn,$username,$password);
$athleteGateway = new AthleteGateway($connexion);
$dateSpecifique = "2004-08-26";
$timestamp = strtotime($dateSpecifique);
$dateSQL = date("Y-m-d", $timestamp);
$athleteEntity = new AthleteEntity();
$athleteEntity->setNom('John');
$athleteEntity->setPrenom('Doe');
$athleteEntity->setIdAthlete(13);
$athleteEntity->setEmail('kevin.monteiro@gmail.fr');
$athleteEntity->setSexe('H');
$athleteEntity->setTaille(169);
$athleteEntity->setPoids(69);
$athleteEntity->setMotDePasse('motdepasse');
$athleteEntity->setDateNaissance($dateSQL);
$athleteEntity->setIsCoach(FALSE);
$athleteEntity->setCoachId(NULL);
$athleteEntity2 = new AthleteEntity();
$athleteEntity2->setNom('Monteiro');
$athleteEntity2->setPrenom('Kevin');
$athleteEntity2->setIdAthlete(13);
$athleteEntity2->setEmail('kevin.monteiro@gmail.fr');
$athleteEntity2->setSexe('H');
$athleteEntity2->setTaille(169);
$athleteEntity2->setPoids(69);
$athleteEntity2->setMotDePasse('motdepasse');
$athleteEntity2->setDateNaissance($dateSQL);
$athleteEntity2->setIsCoach(TRUE);
$athleteEntity2->setCoachId(1);
$result = $athleteGateway->updateAthlete($athleteEntity, $athleteEntity2);
}
//Partie concernant les Coachs
public function testGetCoach() {
//$dsn = "pgsql:host=londres;port=8888;dbname=dbkemonteiro2;user=kemonteiro2;password=Mdp";
$dsn = "mysql:host=londres;dbname=dbkemonteiro2;";
$username = "kemonteiro2";
$password = "#Phpmyadmin63";
$connexion = new Connexion($dsn,$username,$password);
$coachGateway = new CoachGateway($connexion);
$result = $coachGateway->getCoach();
var_dump($result);
}
/*
//Fonctionne PAS A PARTIR DE LA
public function testAddCoach(){
$dsn = "mysql:host=londres;dbname=dbkemonteiro2;";
$username = "kemonteiro2";
$password = "#Phpmyadmin63";
$connexion = new Connexion($dsn,$username,$password);
$coachGateway = new CoachGateway($connexion);
$dateSpecifique = "2023-11-26";
$timestamp = strtotime($dateSpecifique);
$dateSQL = date("Y-m-d", $timestamp);
$coachEntity = new CoachEntity();
$coachEntity->setNom('John');
$coachEntity->setPrenom('Doe');
$coachEntity->setIdCoach(1234);
$coachEntity->setEmail('kevin.monteiro@gmail.fr');
$coachEntity->setSexe('H');
$coachEntity->setTaille(169);
$coachEntity->setPoids(69);
$coachEntity->setMotDePasse('motdepasse');
$coachEntity->setDateNaissance($dateSQL);
$result2 = $coachGateway->addCoach($coachEntity);
}
public function testDeleteAthlete(){
$dsn = "mysql:host=londres;dbname=dbkemonteiro2;";
$username = "kemonteiro2";
$password = "#Phpmyadmin63";
$connexion = new Connexion($dsn,$username,$password);
$athleteGateway = new AthleteGateway($connexion);
$result = $athleteGateway->deleteAthlete( //idAthlete );
var_dump($result);
}*/
/*
public function testUpdateAthlete(){
$dsn = "mysql:host=londres;dbname=dbkemonteiro2;";
$username = "kemonteiro2";
$password = "#Phpmyadmin63";
$connexion = new Connexion($dsn,$username,$password);
$athleteGateway = new AthleteGateway($connexion);
$dateSpecifique = "2004-08-26";
$timestamp = strtotime($dateSpecifique);
$dateSQL = date("Y-m-d", $timestamp);
$athleteEntity = new AthleteEntity();
$athleteEntity->setNom('John');
$athleteEntity->setPrenom('Doe');
$athleteEntity->setIdAthlete(13);
$athleteEntity->setEmail('kevin.monteiro@gmail.fr');
$athleteEntity->setSexe('H');
$athleteEntity->setTaille(169);
$athleteEntity->setPoids(69);
$athleteEntity->setMotDePasse('motdepasse');
$athleteEntity->setDateNaissance($dateSQL);
$athleteEntity2 = new AthleteEntity();
$athleteEntity2->setNom('Monteiro');
$athleteEntity2->setPrenom('Kevin');
$athleteEntity2->setIdAthlete(13);
$athleteEntity2->setEmail('kevin.monteiro@gmail.fr');
$athleteEntity2->setSexe('H');
$athleteEntity2->setTaille(169);
$athleteEntity2->setPoids(69);
$athleteEntity2->setMotDePasse('motdepasse');
$athleteEntity2->setDateNaissance($dateSQL);
$result = $athleteGateway->updateAthlete($athleteEntity, $athleteEntity2);
}*/
}

@ -0,0 +1,43 @@
<?php
use PHPUnit\Framework\TestCase;
use Model\User;
use Database\AthleteEntity;
use Database\AthleteGateway;
use Database\Connexion;
use Database\AthleteMapper;
class MapperTest extends TestCase {
public function testMapperAthlete() {
//$dsn = "pgsql:host=londres;port=8888;dbname=dbkemonteiro2;user=kemonteiro2;password=Mdp";
$dsn = "mysql:host=londres;dbname=dbkemonteiro2;";
$username = "kemonteiro2";
$password = "#Phpmyadmin63";
$connexion = new Connexion($dsn,$username,$password);
$athleteGateway = new AthleteGateway($connexion);
$result = $athleteGateway->getAthlete();
$map = new AthleteMapper ();
//SQL To AthleteEntity
$athleteEntity = $map->athleteSqlToEntity($result);
foreach($athleteEntity as $ath){
$result = $ath->getNom();
var_dump($result);
//Pour chaque AthleteEntity : Athlete Entity To User avec Role Athlete(Model)
$user = $map->athleteEntityToModel($ath);
var_dump($user->getId());
//Pour chaque Athlete du Model -> Athlete Entity
$res = $map->athleteToEntity($user);
var_dump($res->getIdAthlete());
}
}
}

@ -0,0 +1,7 @@
<?php
$dsn = "psql:host=localhost;dbname=sae_3;";
$username = "Perederii";
$password = "";
?>

@ -1,4 +1,5 @@
<?php <?php
use Shared\Log;
class AltoRouter { class AltoRouter {
@ -100,6 +101,8 @@ class AltoRouter {
public function generate($routeName, array $params = array()) { public function generate($routeName, array $params = array()) {
// Check if named route exists // Check if named route exists
if(!isset($this->namedRoutes[$routeName])) { if(!isset($this->namedRoutes[$routeName])) {
throw new \Exception("Route '{$routeName}' does not exist."); throw new \Exception("Route '{$routeName}' does not exist.");
} }

@ -430,7 +430,6 @@ return array(
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnValueMap.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnValueMap.php',
'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/Stub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/Stub.php',
'PHPUnit\\Framework\\NoChildTestSuiteException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php', 'PHPUnit\\Framework\\NoChildTestSuiteException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php',
'PHPUnit\\Framework\\PhptAssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/PhptAssertionFailedError.php',
'PHPUnit\\Framework\\ProcessIsolationException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ProcessIsolationException.php', 'PHPUnit\\Framework\\ProcessIsolationException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ProcessIsolationException.php',
'PHPUnit\\Framework\\Reorderable' => $vendorDir . '/phpunit/phpunit/src/Framework/Reorderable.php', 'PHPUnit\\Framework\\Reorderable' => $vendorDir . '/phpunit/phpunit/src/Framework/Reorderable.php',
'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php', 'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php',
@ -956,93 +955,6 @@ return array(
'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php', 'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php',
'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php', 'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php',
'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
'SebastianBergmann\\CliParser\\AmbiguousOptionException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/AmbiguousOptionException.php',
'SebastianBergmann\\CliParser\\Exception' => $vendorDir . '/sebastian/cli-parser/src/exceptions/Exception.php',
'SebastianBergmann\\CliParser\\OptionDoesNotAllowArgumentException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/OptionDoesNotAllowArgumentException.php',
'SebastianBergmann\\CliParser\\Parser' => $vendorDir . '/sebastian/cli-parser/src/Parser.php',
'SebastianBergmann\\CliParser\\RequiredOptionArgumentMissingException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/RequiredOptionArgumentMissingException.php',
'SebastianBergmann\\CliParser\\UnknownOptionException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php',
'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php',
'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php',
'SebastianBergmann\\CodeCoverage\\Data\\ProcessedCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/Data/ProcessedCodeCoverageData.php',
'SebastianBergmann\\CodeCoverage\\Data\\RawCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/Data/RawCodeCoverageData.php',
'SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php',
'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php',
'SebastianBergmann\\CodeCoverage\\Driver\\PcovNotAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\Selector' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Selector.php',
'SebastianBergmann\\CodeCoverage\\Driver\\WriteOperationFailedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\XdebugDriver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/XdebugDriver.php',
'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotEnabledException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XdebugNotEnabledException.php',
'SebastianBergmann\\CodeCoverage\\Exception' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Exception.php',
'SebastianBergmann\\CodeCoverage\\FileCouldNotBeWrittenException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/FileCouldNotBeWrittenException.php',
'SebastianBergmann\\CodeCoverage\\Filter' => $vendorDir . '/phpunit/php-code-coverage/src/Filter.php',
'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php',
'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php',
'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php',
'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => $vendorDir . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
'SebastianBergmann\\CodeCoverage\\Node\\Builder' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Builder.php',
'SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => $vendorDir . '/phpunit/php-code-coverage/src/Node/CrapIndex.php',
'SebastianBergmann\\CodeCoverage\\Node\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Directory.php',
'SebastianBergmann\\CodeCoverage\\Node\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Node/File.php',
'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Iterator.php',
'SebastianBergmann\\CodeCoverage\\ParserException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ParserException.php',
'SebastianBergmann\\CodeCoverage\\ReflectionException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php',
'SebastianBergmann\\CodeCoverage\\ReportAlreadyFinalizedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php',
'SebastianBergmann\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Clover.php',
'SebastianBergmann\\CodeCoverage\\Report\\Cobertura' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Cobertura.php',
'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Crap4j.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Colors' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Colors.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\CustomCssFile' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/CustomCssFile.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Facade.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php',
'SebastianBergmann\\CodeCoverage\\Report\\PHP' => $vendorDir . '/phpunit/php-code-coverage/src/Report/PHP.php',
'SebastianBergmann\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Text.php',
'SebastianBergmann\\CodeCoverage\\Report\\Thresholds' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Thresholds.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/File.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Method.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Node.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Project.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Report.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Source.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php',
'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Known' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/Known.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Large' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/Large.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Medium' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/Medium.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Small' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/Small.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\TestSize' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/TestSize.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Unknown' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/Unknown.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Failure' => $vendorDir . '/phpunit/php-code-coverage/src/TestStatus/Failure.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Known' => $vendorDir . '/phpunit/php-code-coverage/src/TestStatus/Known.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Success' => $vendorDir . '/phpunit/php-code-coverage/src/TestStatus/Success.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\TestStatus' => $vendorDir . '/phpunit/php-code-coverage/src/TestStatus/TestStatus.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Unknown' => $vendorDir . '/phpunit/php-code-coverage/src/TestStatus/Unknown.php',
'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
'SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php',
'SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => $vendorDir . '/phpunit/php-code-coverage/src/Util/Filesystem.php',
'SebastianBergmann\\CodeCoverage\\Util\\Percentage' => $vendorDir . '/phpunit/php-code-coverage/src/Util/Percentage.php',
'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php',
'SebastianBergmann\\CodeCoverage\\XmlException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XmlException.php',
'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php',
'SebastianBergmann\\CodeUnit\\ClassMethodUnit' => $vendorDir . '/sebastian/code-unit/src/ClassMethodUnit.php', 'SebastianBergmann\\CodeUnit\\ClassMethodUnit' => $vendorDir . '/sebastian/code-unit/src/ClassMethodUnit.php',
'SebastianBergmann\\CodeUnit\\ClassUnit' => $vendorDir . '/sebastian/code-unit/src/ClassUnit.php', 'SebastianBergmann\\CodeUnit\\ClassUnit' => $vendorDir . '/sebastian/code-unit/src/ClassUnit.php',

@ -12,24 +12,21 @@ return array(
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
'Stub\\' => array($baseDir . '/src/data/stub', $baseDir . '/src/data/stub/service', $baseDir . '/src/data/stub/repository'), 'Stub\\' => array($baseDir . '/src/data/stub', $baseDir . '/src/data/stub/service', $baseDir . '/src/data/stub/repository'),
'Repository\\' => array($baseDir . '/src/data/model/repository'),
'Network\\' => array($baseDir . '/src/data/core/network'),
'Model\\' => array($baseDir . '/src/data/model'),
'Manager\\' => array($baseDir . '/src/data/model/manager'),
'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'),
'Data\\' => array($baseDir . '/src/data'),
'Shared\\Exception\\' => array($baseDir . '/src/shared/exception'), 'Shared\\Exception\\' => array($baseDir . '/src/shared/exception'),
'Shared\\Attributes\\' => array($baseDir . '/src/shared/attributes'), 'Shared\\Attributes\\' => array($baseDir . '/src/shared/attributes'),
'Shared\\' => array($baseDir . '/src/shared'), 'Shared\\' => array($baseDir . '/src/shared'),
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'),
'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src/PhpOption'),
'Repository\\' => array($baseDir . '/src/data/model/repository'), 'Repository\\' => array($baseDir . '/src/data/model/repository'),
'Psr\\Container\\' => array($vendorDir . '/psr/container/src', $vendorDir . '/sebastian/cli-parser/src'),
'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'),
'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src/PhpOption', $vendorDir . '/phpunit/php-code-coverage/src/PhpOption'),
'Network\\' => array($baseDir . '/src/data/core/network'), 'Network\\' => array($baseDir . '/src/data/core/network'),
'Model\\' => array($baseDir . '/src/data/model'),
'Manager\\' => array($baseDir . '/src/data/model/manager'),
'Hearttrack\\' => array($baseDir . '/src'), 'Hearttrack\\' => array($baseDir . '/src'),
'GrahamCampbell\\ResultType\\' => array($vendorDir . '/graham-campbell/result-type/src'), 'GrahamCampbell\\ResultType\\' => array($vendorDir . '/graham-campbell/result-type/src'),
'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'), 'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'),
'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
'Database\\' => array($baseDir . '/src/data/core/database'),
'Data\\Core\\' => array($baseDir . '/src/data/core'), 'Data\\Core\\' => array($baseDir . '/src/data/core'),
'Data\\' => array($baseDir . '/src/data'), 'Data\\' => array($baseDir . '/src/data'),
'Console\\' => array($baseDir . '/src/console'), 'Console\\' => array($baseDir . '/src/console'),

@ -63,10 +63,10 @@ class ComposerStaticInit1887e85fc3cfddacf8d7e17588dae6f1
'D' => 'D' =>
array ( array (
'Dotenv\\' => 7, 'Dotenv\\' => 7,
'Data\\' => 5,
'Doctrine\\Instantiator\\' => 22,
'DeepCopy\\' => 9, 'DeepCopy\\' => 9,
'Database\\' => 9,
'Data\\Core\\' => 10, 'Data\\Core\\' => 10,
'Data\\' => 5,
), ),
'C' => 'C' =>
array ( array (
@ -130,6 +130,7 @@ class ComposerStaticInit1887e85fc3cfddacf8d7e17588dae6f1
'Psr\\Container\\' => 'Psr\\Container\\' =>
array ( array (
0 => __DIR__ . '/..' . '/psr/container/src', 0 => __DIR__ . '/..' . '/psr/container/src',
1 => __DIR__ . '/..' . '/sebastian/cli-parser/src',
), ),
'PhpParser\\' => 'PhpParser\\' =>
array ( array (
@ -138,6 +139,7 @@ class ComposerStaticInit1887e85fc3cfddacf8d7e17588dae6f1
'PhpOption\\' => 'PhpOption\\' =>
array ( array (
0 => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption', 0 => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption',
1 => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/PhpOption',
), ),
'Network\\' => 'Network\\' =>
array ( array (
@ -163,18 +165,14 @@ class ComposerStaticInit1887e85fc3cfddacf8d7e17588dae6f1
array ( array (
0 => __DIR__ . '/..' . '/vlucas/phpdotenv/src', 0 => __DIR__ . '/..' . '/vlucas/phpdotenv/src',
), ),
'Doctrine\\Instantiator\\' =>
array (
0 => __DIR__ . '/..' . '/graham-campbell/result-type/src',
),
'Dotenv\\' =>
array (
0 => __DIR__ . '/..' . '/vlucas/phpdotenv/src',
),
'DeepCopy\\' => 'DeepCopy\\' =>
array ( array (
0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy', 0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy',
), ),
'Database\\' =>
array (
0 => __DIR__ . '/../..' . '/src/data/core/database',
),
'Data\\Core\\' => 'Data\\Core\\' =>
array ( array (
0 => __DIR__ . '/../..' . '/src/data/core', 0 => __DIR__ . '/../..' . '/src/data/core',
@ -642,7 +640,6 @@ class ComposerStaticInit1887e85fc3cfddacf8d7e17588dae6f1
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnValueMap.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnValueMap.php',
'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/Stub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/Stub.php',
'PHPUnit\\Framework\\NoChildTestSuiteException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php', 'PHPUnit\\Framework\\NoChildTestSuiteException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php',
'PHPUnit\\Framework\\PhptAssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/PhptAssertionFailedError.php',
'PHPUnit\\Framework\\ProcessIsolationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ProcessIsolationException.php', 'PHPUnit\\Framework\\ProcessIsolationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ProcessIsolationException.php',
'PHPUnit\\Framework\\Reorderable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Reorderable.php', 'PHPUnit\\Framework\\Reorderable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Reorderable.php',
'PHPUnit\\Framework\\SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php', 'PHPUnit\\Framework\\SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php',
@ -1168,93 +1165,6 @@ class ComposerStaticInit1887e85fc3cfddacf8d7e17588dae6f1
'PharIo\\Version\\VersionConstraintValue' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintValue.php', 'PharIo\\Version\\VersionConstraintValue' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintValue.php',
'PharIo\\Version\\VersionNumber' => __DIR__ . '/..' . '/phar-io/version/src/VersionNumber.php', 'PharIo\\Version\\VersionNumber' => __DIR__ . '/..' . '/phar-io/version/src/VersionNumber.php',
'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
'SebastianBergmann\\CliParser\\AmbiguousOptionException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/AmbiguousOptionException.php',
'SebastianBergmann\\CliParser\\Exception' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/Exception.php',
'SebastianBergmann\\CliParser\\OptionDoesNotAllowArgumentException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/OptionDoesNotAllowArgumentException.php',
'SebastianBergmann\\CliParser\\Parser' => __DIR__ . '/..' . '/sebastian/cli-parser/src/Parser.php',
'SebastianBergmann\\CliParser\\RequiredOptionArgumentMissingException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/RequiredOptionArgumentMissingException.php',
'SebastianBergmann\\CliParser\\UnknownOptionException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php',
'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php',
'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php',
'SebastianBergmann\\CodeCoverage\\Data\\ProcessedCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Data/ProcessedCodeCoverageData.php',
'SebastianBergmann\\CodeCoverage\\Data\\RawCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Data/RawCodeCoverageData.php',
'SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php',
'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php',
'SebastianBergmann\\CodeCoverage\\Driver\\PcovNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\Selector' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Selector.php',
'SebastianBergmann\\CodeCoverage\\Driver\\WriteOperationFailedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\XdebugDriver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/XdebugDriver.php',
'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php',
'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotEnabledException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XdebugNotEnabledException.php',
'SebastianBergmann\\CodeCoverage\\Exception' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Exception.php',
'SebastianBergmann\\CodeCoverage\\FileCouldNotBeWrittenException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/FileCouldNotBeWrittenException.php',
'SebastianBergmann\\CodeCoverage\\Filter' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Filter.php',
'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php',
'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php',
'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php',
'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
'SebastianBergmann\\CodeCoverage\\Node\\Builder' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Builder.php',
'SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/CrapIndex.php',
'SebastianBergmann\\CodeCoverage\\Node\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Directory.php',
'SebastianBergmann\\CodeCoverage\\Node\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/File.php',
'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Iterator.php',
'SebastianBergmann\\CodeCoverage\\ParserException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ParserException.php',
'SebastianBergmann\\CodeCoverage\\ReflectionException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php',
'SebastianBergmann\\CodeCoverage\\ReportAlreadyFinalizedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php',
'SebastianBergmann\\CodeCoverage\\Report\\Clover' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Clover.php',
'SebastianBergmann\\CodeCoverage\\Report\\Cobertura' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Cobertura.php',
'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Crap4j.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Colors' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Colors.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\CustomCssFile' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/CustomCssFile.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Facade.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php',
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php',
'SebastianBergmann\\CodeCoverage\\Report\\PHP' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/PHP.php',
'SebastianBergmann\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Text.php',
'SebastianBergmann\\CodeCoverage\\Report\\Thresholds' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Thresholds.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/File.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Method.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Node.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Project.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Report.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Source.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php',
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php',
'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Known' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/Known.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Large' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/Large.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Medium' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/Medium.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Small' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/Small.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\TestSize' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/TestSize.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Unknown' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/Unknown.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Failure' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestStatus/Failure.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Known' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestStatus/Known.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Success' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestStatus/Success.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\TestStatus' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestStatus/TestStatus.php',
'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Unknown' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestStatus/Unknown.php',
'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
'SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php',
'SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util/Filesystem.php',
'SebastianBergmann\\CodeCoverage\\Util\\Percentage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util/Percentage.php',
'SebastianBergmann\\CodeCoverage\\Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Version.php',
'SebastianBergmann\\CodeCoverage\\XmlException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XmlException.php',
'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/src/Wizard.php',
'SebastianBergmann\\CodeUnit\\ClassMethodUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/ClassMethodUnit.php', 'SebastianBergmann\\CodeUnit\\ClassMethodUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/ClassMethodUnit.php',
'SebastianBergmann\\CodeUnit\\ClassUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/ClassUnit.php', 'SebastianBergmann\\CodeUnit\\ClassUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/ClassUnit.php',

Loading…
Cancel
Save