Cookie ajouté pour le thème du site
continuous-integration/drone/push Build is passing Details

issue_022_AjoutAmis
Antoine PINAGOT 1 year ago
parent f18ff6cbcf
commit 4ea6f09766

@ -13,8 +13,8 @@
"Shared\\": "src/shared/", "Shared\\": "src/shared/",
"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/"
} }
}, },

@ -1,4 +1,4 @@
FROM php:8.2-apache FROM php:8.2-fpm
# Installation de dépendances nécessaires pour Composer # Installation de dépendances nécessaires pour Composer
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
git \ git \
@ -10,10 +10,8 @@ RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local
RUN docker-php-ext-install pdo pdo_mysql RUN docker-php-ext-install pdo pdo_mysql
COPY . /var/www/html COPY . /var/www/
WORKDIR /var/www/html WORKDIR /var/www/
RUN chown -R www-data:www-data /var/www/html
RUN composer install
EXPOSE 80
RUN composer install

@ -2,6 +2,7 @@
use Dotenv\Dotenv; use Dotenv\Dotenv;
use Shared\Log;
$dotenv = Dotenv::createUnsafeImmutable(__DIR__,'.env'); $dotenv = Dotenv::createUnsafeImmutable(__DIR__,'.env');
$dotenv->safeLoad(); $dotenv->safeLoad();
@ -10,7 +11,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", getenv('APP_ENV') ?? 'development'); define("APP_ENV", 'development');
const DB_HOST = 'localhost'; const DB_HOST = 'localhost';
const DB_DATABASE = 'heartTrack'; const DB_DATABASE = 'heartTrack';

@ -1,21 +1,28 @@
server { server {
listen 80; listen 80;
server_name localhost; index index.php;
root /var/www/public;
error_page 404 /index.php;
root /var/www/html; location ~ ^/(images|javascript|js|css|flash|media|static)/ {
index index.php index.html; root /var/www/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
} }
location ~ \.php$ { location ~ \.php$ {
include fastcgi_params; fastcgi_pass web:9000; # service name defined in docker-compose.yml file like web
fastcgi_pass php:9000; # service name defined in docker-compose.yml file fastcgi_param REQUEST_METHOD $request_method;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\. {
deny all;
access_log off;
log_not_found off;
} }
location ~ /\.ht { location / {
deny all; try_files $uri $uri/ /index.php?$query_string;
} }
} }

@ -1,15 +1,42 @@
version: '3' version: '3'
services: services:
web:
nginx:
image: nginx:latest image: nginx:latest
ports: ports:
- "8080:80" - "3000:80"
volumes: volumes:
- ./public:/var/www/html - ./config/nginx.conf:/etc/nginx/conf.d/default.conf
- ./config/nginx.conf:/etc/nginx/conf.d - .:/var/www
links: depends_on:
- php - mysql
php: - web
image: php:7.4-fpm
web:
build:
context: .
dockerfile: ./config/Dockerfile
ports:
- 9000:9000
volumes: volumes:
- ./src:/var/www/html - .:/var/www
depends_on:
- mysql
environment:
DB_HOST: mysql
DB_PORT: port
DB_DATABASE: test
DB_USER: user
DB_PASSWORD: pass
APP_ENV: development
mysql:
image: mysql:latest
container_name: my-mysql-container
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: test
MYSQL_USER: user
MYSQL_PASSWORD: pass
ports:
- "3307:3306"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -10,7 +10,7 @@ use Shared\ArgumentControllerResolver;
use Shared\IArgumentResolver; use Shared\IArgumentResolver;
use Twig\Environment; use Twig\Environment;
use Twig\Loader\FilesystemLoader; use Twig\Loader\FilesystemLoader;
use Shared\Log;
$appFactory = new AppCreator(); $appFactory = new AppCreator();
$appFactory->registerService(IArgumentResolver::class, ArgumentControllerResolver::class); $appFactory->registerService(IArgumentResolver::class, ArgumentControllerResolver::class);

@ -0,0 +1,15 @@
document.getElementById('saveButton').addEventListener('click', function() {
var preferences = {
notifications: document.getElementById('notif').checked,
theme: document.getElementById('theme').value
};
fetch('/index.php/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(preferences),
})
.catch((error) => console.error('Error:', error));
});

@ -7,21 +7,29 @@ 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 Shared\Log;
// TODO : Remove this BaseClass // TODO : Remove this BaseClass
class Controller extends BaseController class Controller extends BaseController
{ {
private Environment $twig; private Environment $twig;
private Preferences $preference;
public function __construct() public function __construct()
{ {
session_start(); session_start();
$this->preference = new Preferences();
setcookie('toto', 'wallah connard', time()+3600);
} }
#[Route(path: '/', name: 'home', methods: ['GET'])] // 8 #[Route(path: '/', name: 'home', methods: ['GET'])] // 8
public function index(): Response public function index(): Response
{ {
return $this->render('./page/home.html.twig',[ return $this->render('./page/settings.html.twig',[
'css' => $this->preference->getCookie(),
'cook' => "home",
'css' => 'pink_theme',
'pp' => "test2", 'pp' => "test2",
'user' => "Ladmion le Cochon", 'user' => "Ladmion le Cochon",
'role' => "Athlète", 'role' => "Athlète",
@ -39,6 +47,7 @@ class Controller extends BaseController
public function exercice(): Response public function exercice(): Response
{ {
return $this->render('./page/exercice.html.twig',[ return $this->render('./page/exercice.html.twig',[
'css' => $preference.getCookie(),
'pp' => "test2", 'pp' => "test2",
'user' => "Ladmion le Cochon", 'user' => "Ladmion le Cochon",
'role' => "Athlète", 'role' => "Athlète",
@ -56,6 +65,7 @@ class Controller extends BaseController
public function friend(): Response public function friend(): Response
{ {
return $this->render('./page/friend.html.twig',[ return $this->render('./page/friend.html.twig',[
'css' => $preference.getCookie(),
'pp' => "test2", 'pp' => "test2",
'user' => "Ladmion le Cochon", 'user' => "Ladmion le Cochon",
'role' => "Athlète", 'role' => "Athlète",
@ -73,6 +83,7 @@ class Controller extends BaseController
public function coaching(): Response public function coaching(): Response
{ {
return $this->render('./page/coaching.html.twig',[ return $this->render('./page/coaching.html.twig',[
'css' => $preference.getCookie(),
'pp' => "test2", 'pp' => "test2",
'user' => "Ladmion le Cochon", 'user' => "Ladmion le Cochon",
'role' => "Athlète", 'role' => "Athlète",
@ -90,6 +101,7 @@ class Controller extends BaseController
public function mail(): Response public function mail(): Response
{ {
return $this->render('./page/mail.html.twig',[ return $this->render('./page/mail.html.twig',[
'css' => $preference.getCookie(),
'pp' => "test2", 'pp' => "test2",
'user' => "Ladmion le Cochon", 'user' => "Ladmion le Cochon",
'role' => "Athlète", 'role' => "Athlète",
@ -107,6 +119,7 @@ class Controller extends BaseController
public function import(): Response public function import(): Response
{ {
return $this->render('./page/import.html.twig',[ return $this->render('./page/import.html.twig',[
'css' => $preference.getCookie(),
'pp' => "test2", 'pp' => "test2",
'user' => "Ladmion le Cochon", 'user' => "Ladmion le Cochon",
'role' => "Athlète", 'role' => "Athlète",
@ -120,19 +133,37 @@ class Controller extends BaseController
]); ]);
} }
#[Route(path: '/hello', name: 'hello', methods: ['GET'])] #[Route(path: '/hello', name: 'hello', methods: ['GET'])]
public function hello(): Response public function hello(): Response
{ {
return new Response('Hello'); return new Response('Hello');
} }
#[Route(path: '/hi', name: 'hi', methods: ['GET'])] #[Route(path: '/', name: 'preferences', methods: ['POST'])]
public function hi(string $name, IRequest $req): Response public function preferences(string $theme, IRequest $req): Response
{ {
return new Response($name); /*TODO*/
// FAUT VALIDER LES DONNEES BATARD
$this->preference->majCookie($theme);
// throw new \Exception("connard");
// return new Response("");
return $this->render('./page/settings.html.twig',[
'css' => $this->preference->getCookie(),
'cook' => $_COOKIE['preferences'] ?? "salopard",
'css' => $this->preference->getCookie(),
'pp' => "test2",
'user' => "Ladmion le Cochon",
'role' => "Athlète",
'friendship' => [],
'analyzes' => [],
'mails' => [],
'users' => [],
'infoUser' => [],
'exos' => [],
'member' => []
]);
} }
} }

@ -35,6 +35,7 @@ class FrontController {
} }
$argumentResolver = $this->container->get(IArgumentResolver::class); $argumentResolver = $this->container->get(IArgumentResolver::class);
$arguments = $argumentResolver->getArguments($request, $callable); $arguments = $argumentResolver->getArguments($request, $callable);
// check role // check role
$response = call_user_func_array($callable, $arguments); $response = call_user_func_array($callable, $arguments);

@ -8,7 +8,7 @@
<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://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/styles.css" rel="stylesheet" /> <link href="/css/{% block css %}style{% endblock %}.css" rel="stylesheet" />
<script src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"></script> <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">
@ -106,8 +106,9 @@
{% block script %} {% block script %}
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script> <script src="js/scripts.js"></script>
{# <script src="js/preference.js"></script> #}
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js" crossorigin="anonymous"></script>
<script src="assets/demo/chart-area-demo.js"></script> <script src=".assets/demo/chart-area-demo.js"></script>
<script src="assets/demo/chart-bar-demo.js"></script> <script src="assets/demo/chart-bar-demo.js"></script>
<script src="https://cdn.jsdelivr.net/npm/simple-datatables@7.1.2/dist/umd/simple-datatables.min.js" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/simple-datatables@7.1.2/dist/umd/simple-datatables.min.js" crossorigin="anonymous"></script>
<script src="js/datatables-simple-demo.js"></script> <script src="js/datatables-simple-demo.js"></script>

@ -2,6 +2,8 @@
{% block pp %}{{pp}}{% endblock %} {% block pp %}{{pp}}{% endblock %}
{% block css %}{{css}}{% endblock %}
{% block title %}Ami - HearthTrack{% endblock %} {% block title %}Ami - HearthTrack{% endblock %}
{% block user %}{{user}} - {{role}}{% endblock %} {% block user %}{{user}} - {{role}}{% endblock %}

@ -2,6 +2,8 @@
{% block pp %}{{pp}}{% endblock %} {% block pp %}{{pp}}{% endblock %}
{% block css %}{{css}}{% endblock %}
{% block title %}Analyses - HearthTrack{% endblock %} {% block title %}Analyses - HearthTrack{% endblock %}
{% block user %}{{user}} - {{role}}{% endblock %} {% block user %}{{user}} - {{role}}{% endblock %}

@ -2,6 +2,8 @@
{% block pp %}{{pp}}{% endblock %} {% block pp %}{{pp}}{% endblock %}
{% block css %}{{css}}{% endblock %}
{% block title %}Coaching - HearthTrack{% endblock %} {% block title %}Coaching - HearthTrack{% endblock %}
{% block user %}{{user}} - {{role}}{% endblock %} {% block user %}{{user}} - {{role}}{% endblock %}

@ -2,6 +2,8 @@
{% block pp %}{{pp}}{% endblock %} {% block pp %}{{pp}}{% endblock %}
{% block css %}{{css}}{% endblock %}
{% block title %}Exercices - HearthTrack{% endblock %} {% block title %}Exercices - HearthTrack{% endblock %}
{% block user %}{{user}} - {{role}}{% endblock %} {% block user %}{{user}} - {{role}}{% endblock %}

@ -2,6 +2,8 @@
{% block pp %}{{pp}}{% endblock %} {% block pp %}{{pp}}{% endblock %}
{% block css %}{{css}}{% endblock %}
{% block title %}Amis - HearthTrack{% endblock %} {% block title %}Amis - HearthTrack{% endblock %}
{% block user %}{{user}} - {{role}}{% endblock %} {% block user %}{{user}} - {{role}}{% endblock %}

@ -2,6 +2,8 @@
{% block pp %}{{pp}}{% endblock %} {% block pp %}{{pp}}{% endblock %}
{% block css %}{{css}}{% endblock %}
{% block title %}Accueil - HearthTrack{% endblock %} {% block title %}Accueil - HearthTrack{% endblock %}
{% block user %}{{user}} - {{role}}{% endblock %} {% block user %}{{user}} - {{role}}{% endblock %}

@ -2,6 +2,8 @@
{% block pp %}{{pp}}{% endblock %} {% block pp %}{{pp}}{% endblock %}
{% block css %}{{css}}{% endblock %}
{% block title %}Importer - HearthTrack{% endblock %} {% block title %}Importer - HearthTrack{% endblock %}
{% block user %}{{user}} - {{role}}{% endblock %} {% block user %}{{user}} - {{role}}{% endblock %}

@ -2,6 +2,8 @@
{% block pp %}{{pp}}{% endblock %} {% block pp %}{{pp}}{% endblock %}
{% block css %}{{css}}{% endblock %}
{% block title %}Messagerie - HearthTrack{% endblock %} {% block title %}Messagerie - HearthTrack{% endblock %}
{% block user %}{{user}} - {{role}}{% endblock %} {% block user %}{{user}} - {{role}}{% endblock %}

@ -2,6 +2,8 @@
{% block pp %}{{pp}}{% endblock %} {% block pp %}{{pp}}{% endblock %}
{% block css %}{{css}}{% endblock %}
{% block title %}Profile - HearthTrack{% endblock %} {% block title %}Profile - HearthTrack{% endblock %}
{% block user %}{{user}} - {{role}}{% endblock %} {% block user %}{{user}} - {{role}}{% endblock %}

@ -2,6 +2,8 @@
{% block pp %}{{pp}}{% endblock %} {% block pp %}{{pp}}{% endblock %}
{% block css %}{{css}}{% endblock %}
{% block title %}Paramètres - HearthTrack{% endblock %} {% block title %}Paramètres - HearthTrack{% endblock %}
{% block user %}{{user}} - {{role}}{% endblock %} {% block user %}{{user}} - {{role}}{% endblock %}
@ -53,8 +55,23 @@
Générale Générale
</div> </div>
<div class="card-body"> <div class="card-body">
<form id="preferencesForm" method="post">
</div> <div>
<label for="notif">Notifications:</label>
<input type="checkbox" id="notif" name="notifications">
</div>
<div>
<label for="theme">Thème:</label>
<select id="theme" name="theme">
<option value="base_theme">Base</option>
<option value="dark_theme">Sombre</option>
<option value="pink_theme">Rose</option>
</select>
</div>
<p>{{cook}}</p>
<button type="submit" id="saveButton" class="btn btn-primary">Enregistrer</button>
</form>
</div>
</div> </div>
</div> </div>
</div> </div>

@ -0,0 +1,17 @@
document.getElementById('saveButton').addEventListener('click', function() {
var preferences = {
notifications: document.getElementById('notif').checked,
theme: document.getElementById('theme').value
};
fetch('/savePreferences', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(preferences),
})
.then(response => response.json())
.then(data => console.log(data))
.catch((error) => console.error('Error:', error));
});

@ -0,0 +1,38 @@
<?php
namespace Data\Core;
class Preferences {
private String $cookie;
private Array $theme;
public function __construct(){
if (isset($_COOKIE['preferences'])){
$this->cookie = $_COOKIE['preferences'];
} else {
$this->cookie = setcookie('preferences', 'base_theme', time()+(3600*24)*7);
}
$this->theme = array(
'base_theme',
'dark_theme',
'pink_theme'
);
}
public function majCookie(String $maj){
try{
foreach($this->theme as $t){
$this->cookie = $maj;
setcookie('preferences', $maj);
}
} catch (Exception $e){
throw new ValueError;
}
}
public function getCookie():String{
return $this->cookie;
}
}
?>

@ -21,6 +21,7 @@ return array(
'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'), 'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'),
'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'), 'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'),
'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
'Data\\Core\\' => array($baseDir . '/src/data/core'),
'Console\\' => array($baseDir . '/src/console'), 'Console\\' => array($baseDir . '/src/console'),
'App\\Views\\Directives\\' => array($baseDir . '/src/app/views/directives'), 'App\\Views\\Directives\\' => array($baseDir . '/src/app/views/directives'),
'App\\Router\\Response\\' => array($baseDir . '/src/app/router/response'), 'App\\Router\\Response\\' => array($baseDir . '/src/app/router/response'),

@ -47,6 +47,7 @@ class ComposerStaticInitb084bad56d99d613841073027e5f5e7e
'Dotenv\\' => 7, 'Dotenv\\' => 7,
'Doctrine\\Instantiator\\' => 22, 'Doctrine\\Instantiator\\' => 22,
'DeepCopy\\' => 9, 'DeepCopy\\' => 9,
'Data\\Core\\' => 10,
), ),
'C' => 'C' =>
array ( array (
@ -125,6 +126,10 @@ class ComposerStaticInitb084bad56d99d613841073027e5f5e7e
array ( array (
0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy', 0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy',
), ),
'Data\\Core\\' =>
array (
0 => __DIR__ . '/../..' . '/src/data/core',
),
'Console\\' => 'Console\\' =>
array ( array (
0 => __DIR__ . '/../..' . '/src/console', 0 => __DIR__ . '/../..' . '/src/console',

Loading…
Cancel
Save