Compare commits

..

11 Commits

Author SHA1 Message Date
5875b6134f correction affichage étape et logo poche et tubes 2023-05-24 18:15:23 +02:00
84f7fd320e correction affichage éléments durant les étapes 2023-05-24 15:29:33 +02:00
0650f174cc correction fixtures, css 2023-05-23 16:06:53 +02:00
769860b401 remise de apche foreground, retrait fixuid de makefile 2023-01-16 11:10:23 +01:00
db13b05451 suppression fontawesome 2023-01-12 14:48:46 +01:00
4cb5d11bd1 modification assets 2023-01-09 16:40:55 +01:00
421b71ca11 ajout fixtures et styles 2023-01-09 08:22:34 +01:00
b21f2bc04b conteneurisation de l'appli 2023-01-07 22:07:15 +01:00
b79e8502b1 fin hackaton 2022-10-17 09:01:49 +02:00
0f3447adf5 third 2022-10-16 10:36:53 +02:00
85125c7d6b second 2022-10-15 22:24:22 +02:00
8785 changed files with 1256123 additions and 685 deletions

2
.env
View File

@ -29,7 +29,7 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
#
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8&charset=utf8mb4"
DATABASE_URL="mysql://admin:pass@127.0.0.1:3306/hackingHealth?serverVersion=5.7"
DATABASE_URL="mysql://ethik:ethik@mariadb:3306/ethik?serverVersion=5.7"
###< doctrine/doctrine-bundle ###
###> symfony/messenger ###

11
.gitignore vendored
View File

@ -5,8 +5,8 @@
/.env.*.local
/config/secrets/prod/prod.decrypt.private.php
/public/bundles/
/public/build/
/var/
/vendor/
###< symfony/framework-bundle ###
###> phpunit/phpunit ###
@ -21,7 +21,14 @@
###> symfony/webpack-encore-bundle ###
/node_modules/
/public/build/
npm-debug.log
yarn-error.log
/public/build/
###< symfony/webpack-encore-bundle ###
/.cache/
/.composer/
/.yarn/
/.yarnrc/
/.bash_history
/supervisord.log
/supervisord.pid

5
.yarnrc Normal file
View File

@ -0,0 +1,5 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
lastUpdateCheck 1673110672276

9
Makefile Normal file
View File

@ -0,0 +1,9 @@
up:
docker-compose up --build
down:
docker-compose down -v
purge:
docker-compose down -v --remove-orphans --rmi local

View File

@ -1,3 +1,58 @@
# EthikTag
Projet du HH année 2022
Projet du HH année 2022
Le principe de cette application est de faire une assitance à l'étiquetage des poches et tube de sang lors d'un don.
## Situation actuelle
1) le donneur se voit donner un un formulaire à l'accueil avant de voir le médecin.
ce formulaire comporte les données d'identité du donneur ainsi qu'un numéro de don sous la forme d'un code barre.
Attachées à ce formulaire se trouve deux bandes de code barre identiques.
2) Le donneur voit le médecin qui va indiquer le nombre de tubes et de poches qui devront être prélevés, notament au niveau des tubes qui permettront de faire des contrôles selon l'historique du patient.
Le médecin inscrit sur le formulaire d'entrée ces indications, en plus d'une indication sur InLog
3) Le donneur se présente auprès de l'infirmière muni du formulaire, elle se base sur les indications fournies pour choisir le lot de poches ainsi que le nombre de tubes nécessaire.
Les lots de poches peuvent être de 3, 4 ou 5 poches.
Les tubes ont des couleurs différentes et peuvent aller jusqu'à 8 tubes pour un prélèvement.
Théoriquement, l'infirmière doit , au fur et à mesure des prélèvements, coller un code barre sur les poches et tubes.
Cependant, aucune aide ou vérification n'est en place, et c'est uniquement l'organisation de l'infirmière qui permet d'avoir des lots finaux cohérents.
Or, l'infirmière peut avoir 3 patients simultanés, et parfois, des malaises peuvent se produire. Dans ces conditions, il est difficile d'obtenir un taux de réussite de 100%.
Certaines erreurs peuvent arrivées, et sont remarquées plus tard dans la chaîne de collecte, cependant les efforts fournis après la trouvaille d'une erreur sont important et couteux.
## Principe de l'application
Mettre en place un système dynamique qui rappelle à chaque action de scan d'étiquette l'étape en cours et la progression du prélevement, ainsi que l'identité du donneur.
## Monter l'environnement
A la racine du projet
```
monter l'environnement (construction de l'image, des assets et de la base de données vide, monter le conteneur)
make up
descendre le conteneur
make down
descendre le conteneur et supprimer l'image correspondante
make purge
```
## Modification du style
depuis la racine, aller dans le conteneur
```
docker compose exec ethik_tag bash
```
compiler les assets
```
yarn encore dev
ou yarn encore prod (pour minifier)
ou yarn encore dev --watch (détecte les changments et recompile automatiquement)
```

View File

@ -6,6 +6,14 @@
*/
// any CSS you import will output into a single css file (app.css in this case)
import 'jquery';
// start the Stimulus application
import './bootstrap';
import GetEvent from './js/getCodeBarre';
$(document).ready(()=>{
setTimeout(()=>{
// utils.init();
GetEvent.init()
}, 200);
})

11
assets/bootstrap.js vendored
View File

@ -1,11 +0,0 @@
import { startStimulusApp } from '@symfony/stimulus-bridge';
// Registers Stimulus controllers from controllers.json and in the controllers/ directory
export const app = startStimulusApp(require.context(
'@symfony/stimulus-bridge/lazy-controller-loader!./controllers',
true,
/\.[jt]sx?$/
));
// register any custom, 3rd party controllers here
// app.register('some_controller_name', SomeImportedController);

View File

@ -1,4 +0,0 @@
{
"controllers": [],
"entrypoints": []
}

View File

@ -0,0 +1 @@
import 'fontawesome-free/js/solid.min';

263
assets/js/getCodeBarre.js Normal file
View File

@ -0,0 +1,263 @@
export default class GetEvent{
static init(){
this.getEvent()
}
static getEvent(){
let saisie = $('#saisie');
saisie.focus();
let value;
let $info = $('.info');
let $infoDon = $('#info-don');
let $infoDonneur = $('#info-donneur');
let $infoPsl = $('#info-psl');
let $don = $('#don');
let $nom = $('#nom');
let $prenom = $('#prenom');
let $naissance = $('#naissance');
let $typeDon = $('#typeDon');
let $typePoche = $('#typePoche');
let $nbreTube = $('#nbreTube');
let $step = $('#step');
let $indication = $('#indication');
let $evolution = $('#evolution');
let $label = $('#label');
let $type = $('#type');
let $current = $('#current');
let $todo = $('#todo');
let $picturePoche = $('#picturePoche');
let $pictureTube = $('#pictureTube');
let $input = $('#inputRange');
let $displayError = $('.error');
let $displaySuccess = $('.displaySuccess');
document.addEventListener('keydown', function (event) {
saisie.focus();
if(event.code == 'Tab'){
value = saisie.val();
saisie.val('')
$.ajax({
url: '/api/get-code-barre-type',
method: "POST",
dataType: "json",
data: {'codeBarre': value},
success: function(response){
switch(response.data.step){
case '0':
if(response.data.status == 'success'){
$don.html(response.data.codeBarre);
$nom.html(response.data.nom);
$prenom.html(response.data.prenom);
$naissance.html(new Date(response.data.birthdate).toLocaleDateString());
$typeDon.html(response.data.type_don);
$nbreTube.html(response.data.nbre_tube);
$step.html('Pour passer à la suite');
$indication.html('Scannez le DMU');
$pictureTube.css('display', 'none');
$picturePoche.css('display', 'flex');
$info.css('visibility', 'visible')
saisie.focus();
}
if(response.data.status == 'init'){
let pochesImg = $('.sang');
[...pochesImg].forEach(sang=>{
sang.remove();
})
$don.html(response.data.codeBarre);
$nom.html(response.data.nom);
$prenom.html(response.data.prenom);
$naissance.html(new Date(response.data.birthdate).toLocaleDateString());
$typeDon.html(response.data.type_don);
$nbreTube.html(response.data.nbre_tube);
$step.html('Pour passer à la suite');
$indication.html('Scannez le DMU');
$typePoche.html('');
$info.css('visibility', 'visible')
$evolution.css('visibility', 'hidden')
saisie.focus();
}
if(response.data.status == 'error'){
saisie.focus();
$displayError.css('display', "flex");
setTimeout(() => {
$displayError.css('display', 'none')
}, 5000);
}
break;
case '1':
if(response.data.status == 'success'){
$typePoche.html(response.data.nbre_poche)
$step.html('ETAPE 1 / 2');
$indication.html('Scannez les étiquettes des poches');
saisie.focus();
$evolution.css('visibility', 'visible');
}
if(response.data.status == 'error_donneur'){
$displayError.html('erreur donneur')
$displayError.css('display', "flex");
setTimeout(() => {
$displayError.css('display', 'none')
}, 5000);
saisie.focus();
}
if(response.data.status == 'error_doublon'){
$displayError.html('erreur doublon')
$displayError.css('display', "flex");
setTimeout(() => {
$displayError.css('display', 'none')
}, 5000);
saisie.focus();
}
case '2':
if(response.data.status == 'success'){
console.log('step 2 success !!')
$typePoche.html(response.data.nbre_poche)
$current.html(response.data.nbre_poche)
$type.html('Poches');
$todo.html(response.data.nbre_poche_max)
$input.attr('max', response.data.nbre_poche_max)
$input.attr('value', response.data.nbre_poche)
if(response.data.nbre_poche !=response.data.nbre_poche_max && response.data.nbre_poche != 0){
$picturePoche.append('<div class="sang"><img src="/poches/Poche_sang2.png"></div>')
}
saisie.focus();
}
if(response.data.status == 'final'){
$typePoche.html(response.data.nbre_poche)
$current.html(response.data.nbre_poche)
$input.attr('max', response.data.nbre_poche_max)
$input.attr('value', response.data.nbre_poche)
$indication.html('validez avec un scan de poche!');
$picturePoche.append('<div class="sang"><img src="/poches/Poche_sang2.png"></div>')
saisie.focus();
}
if(response.data.status == 'error_scan'){
$displayError.html("Mauvais type d'étiquette")
$displayError.css('display', "flex");
setTimeout(() => {
$displayError.css('display', 'none')
}, 5000);
saisie.focus();
}
if(response.data.status == 'error_doublon'){
$displayError.html('Etiquette déjà scannée')
$displayError.css('display', "flex");
setTimeout(() => {
$displayError.css('display', 'none')
}, 5000);
saisie.focus();
}
if(response.data.status == 'error_donneur'){
$displayError.html('Ne correspond pas au donneur')
$displayError.css('display', "flex");
setTimeout(() => {
$displayError.css('display', 'none')
}, 5000);
saisie.focus();
}
break;
case '3':
if(response.data.status == "success"){
$picturePoche.css('display', 'none');
let pochesImg = $('.sang');
[...pochesImg].forEach(sang=>{
sang.remove();
})
$pictureTube.css('display', 'flex');
$indication.html('Scannez les étiquettes de tubes!');
$input.attr('max', response.data.nbre_tube_max)
$todo.html(response.data.nbre_tube_max)
$input.attr('value', 0)
$current.html(0)
$type.html('Tubes')
}
if(response.data.status == "error_scan"){
$displayError.html("Mauvais type d'étiquette")
$displayError.css('display', "flex");
setTimeout(() => {
$displayError.css('display', 'none')
}, 5000);
}
break;
case '4':
if(response.data.status == 'success'){
$step.html('ETAPE 2 / 2');
$nbreTube.html(response.data.nbre_tube)
$current.html(response.data.nbre_tube)
$input.attr('max', response.data.nbre_tube_max)
$type.html('Tubes')
$todo.html(response.data.nbre_tube_max)
$input.attr('value', response.data.nbre_tube)
console.log( response.data.nbre_tube)
$pictureTube.append('<div class="sang"><img src="/tubes/Tube'+response.data.nbre_tube+'_check.png"></div>')
saisie.focus();
}
if(response.data.status == 'final'){
$nbreTube.html(response.data.nbre_tube)
$current.html(response.data.nbre_tube_max)
$input.attr('max', response.data.nbre_tube_max)
$type.html('Tubes')
$todo.html(response.data.nbre_tube_max)
$input.attr('value', response.data.nbre_tube)
$pictureTube.append('<div class="sang"><img src="/tubes/Tube'+response.data.nbre_tube+'_check.png"></div>')
$displaySuccess.html('Patient '+ response.data.prenom+' '+response.data.nom + ' traité avec succès')
$displaySuccess.css('display', 'flex')
setTimeout(() => {
location.reload();
$displaySuccess.css('display', 'none')
}, 5000);
saisie.focus();
}
if(response.data.status == 'error_scan'){
$displayError.html("Mauvais type d'étiquette")
$displayError.css('display', "flex");
setTimeout(() => {
$displayError.css('display', 'none')
}, 5000);
saisie.focus();
}
if(response.data.status == 'error_doublon'){
$displayError.html('Etiquette déjà scannée')
$displayError.css('display', "flex");
setTimeout(() => {
$displayError.css('display', 'none')
}, 5000);
saisie.focus();
}
if(response.data.status == 'error_donneur'){
$displayError.html('Ne correspond pas au donneur')
$displayError.css('display', "flex");
setTimeout(() => {
$displayError.css('display', 'none');
}, 5000);
saisie.focus();
}
break;
}
}
})
}
})
}
}

View File

@ -0,0 +1 @@
@import "~fontawesome-free/css/all.css";

168
assets/styles/front.scss Normal file
View File

@ -0,0 +1,168 @@
.info{
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
visibility: hidden;
}
#step{
color: #007BFF;
padding: 20px;
font-size: 32px;
font-weight: 800;
}
#indication, #label{
border-radius: 50px;
background-color: #007BFF;
color: white;
padding: 8px 20px;
font-weight: 800;
font-size: 32px;
margin: 30px 0;
}
#evolution{
display: flex;
width: 100%;
justify-content: start;
align-items: center;
visibility: hidden;
input[type=range]{
width: 80%;
margin-left: 20px;
}
#label{
width: auto;
}
}
.displaySuccess{
position: absolute;
display: flex;
justify-content: center;
align-items: center;
font-size: 48px;
font-weight: 800;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: green;
color: white;
display: none;
z-index: 10000;
}
#picturePoche, #pictureTube{
display: flex;
justify-content: start;
align-items: start;
height: 300px;
.sang{
width: auto;
height: 150px;
}
img{
width: 100%;
height: 100%;
object-fit: contain;
}
}
.error{
position: absolute;
top: 50%;
left: 0;
right: 0;
height: 300px;
width: 100%;
background-color: #F44336;
color: white;
display: none;
justify-content: center;
align-items: center;
font-size: 48px;
font-weight: 800;
}
#saisie{
position: absolute;
left:-300px
}
/*Badeau supérieur*/
.page_header {
display: grid;
grid-template-columns: 25% 0.75% 30% 44%;
grid-template-rows: 25vh;
grid-template-areas: "barecode sparebar identity gift_spec";
background-color: rgba(5, 5, 59, 0.952);
}
.gift_cb {
display: grid;
text-align: center;
grid-template-columns: 100%;
// grid-template-rows: 75% 25%;
grid-template-areas:
"cb"
"number_cb";
grid-area: barecode;
background-repeat: no-repeat;
background-size: contain;
background-position: center;
margin: 10px;
background-color: white;
}
/*
.separator {
grid-area: sparebar;
background-color: black;
}*/
li {
list-style: none;
font-size: large;
font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
margin: 10px;
}
.page_header .gift_cb .cb_cb {
grid-template-columns: cb;
/*background-color: black;*/
}
.cb_number {
}
.identity {
grid-area: identity;
background-color: white;
margin: 10px;
}
.gift_specificity {
grid-area: gift_spec;
background-color: white;
margin: 10px;
}
/* Bandeau intermédiaire étapes*/
.step {
display: grid;
grid-template-columns: 100%;
grid-template-rows: 15vh 10vh;
grid-template-areas:
"step_number"
"step_message";
background-color: rgba(5, 5, 59, 0.952);
}
.step_state {
grid-area: step_number;
background-color: white;
margin-left: 10px;
margin-right: 10px;
}

View File

@ -0,0 +1,16 @@
@import '~bootstrap/scss/bootstrap';
@import '~bootstrap/scss/bootstrap-utilities';
.login-wrapper{
display: flex;
justify-content: center;
align-items: center;
height: 600px;
}
.login{
border: 1px solid grey;
border-radius: 5px;
box-shadow: 2px 2px 2px grey;
padding: 30px;
}

View File

@ -1,4 +1,4 @@
@import './header', './footer', './sidebar', 'common/login', 'add-flash';
@import './header', './footer', './sidebar', 'common/login', 'common/fonts', 'add-flash', 'front';
@import './global';
@import '~bootstrap/scss/bootstrap';
@import '~bootstrap/scss/bootstrap-utilities';

View File

@ -95,6 +95,7 @@
}
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "^3.4",
"phpunit/phpunit": "^9.5",
"symfony/browser-kit": "5.4.*",
"symfony/css-selector": "5.4.*",

1241
composer.lock generated
View File

@ -4,36 +4,39 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "9f134246af84bf2d92c0ce49baff860b",
"content-hash": "69d13c1b69c850fca1f29419846bdfcb",
"packages": [
{
"name": "doctrine/annotations",
"version": "1.13.3",
"version": "1.14.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/annotations.git",
"reference": "648b0343343565c4a056bfc8392201385e8d89f0"
"reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/648b0343343565c4a056bfc8392201385e8d89f0",
"reference": "648b0343343565c4a056bfc8392201385e8d89f0",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/ad785217c1e9555a7d6c6c8c9f406395a5e2882b",
"reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b",
"shasum": ""
},
"require": {
"doctrine/lexer": "1.*",
"doctrine/lexer": "^1 || ^2",
"ext-tokenizer": "*",
"php": "^7.1 || ^8.0",
"psr/cache": "^1 || ^2 || ^3"
},
"require-dev": {
"doctrine/cache": "^1.11 || ^2.0",
"doctrine/coding-standard": "^6.0 || ^8.1",
"phpstan/phpstan": "^1.4.10 || ^1.8.0",
"phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5",
"symfony/cache": "^4.4 || ^5.2",
"doctrine/coding-standard": "^9 || ^10",
"phpstan/phpstan": "~1.4.10 || ^1.8.0",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"symfony/cache": "^4.4 || ^5.4 || ^6",
"vimeo/psalm": "^4.10"
},
"suggest": {
"php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
},
"type": "library",
"autoload": {
"psr-4": {
@ -75,9 +78,9 @@
],
"support": {
"issues": "https://github.com/doctrine/annotations/issues",
"source": "https://github.com/doctrine/annotations/tree/1.13.3"
"source": "https://github.com/doctrine/annotations/tree/1.14.2"
},
"time": "2022-07-02T10:48:51+00:00"
"time": "2022-12-15T06:48:22+00:00"
},
{
"name": "doctrine/cache",
@ -174,32 +177,34 @@
},
{
"name": "doctrine/collections",
"version": "1.8.0",
"version": "2.1.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/collections.git",
"reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e"
"reference": "db8cda536a034337f7dd63febecc713d4957f9ee"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/collections/zipball/2b44dd4cbca8b5744327de78bafef5945c7e7b5e",
"reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e",
"url": "https://api.github.com/repos/doctrine/collections/zipball/db8cda536a034337f7dd63febecc713d4957f9ee",
"reference": "db8cda536a034337f7dd63febecc713d4957f9ee",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^0.5.3 || ^1",
"php": "^7.1.3 || ^8.0"
"doctrine/deprecations": "^1",
"php": "^8.1"
},
"require-dev": {
"doctrine/coding-standard": "^9.0 || ^10.0",
"phpstan/phpstan": "^1.4.8",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5",
"doctrine/coding-standard": "^10.0",
"ext-json": "*",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-phpunit": "^1.0",
"phpunit/phpunit": "^9.5",
"vimeo/psalm": "^4.22"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections"
"Doctrine\\Common\\Collections\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -238,9 +243,23 @@
],
"support": {
"issues": "https://github.com/doctrine/collections/issues",
"source": "https://github.com/doctrine/collections/tree/1.8.0"
"source": "https://github.com/doctrine/collections/tree/2.1.2"
},
"time": "2022-09-01T20:12:10+00:00"
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
"type": "custom"
},
{
"url": "https://www.patreon.com/phpdoctrine",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections",
"type": "tidelift"
}
],
"time": "2022-12-27T23:41:38+00:00"
},
{
"name": "doctrine/common",
@ -335,38 +354,38 @@
},
{
"name": "doctrine/dbal",
"version": "3.4.5",
"version": "3.5.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "a5a58773109c0abb13e658c8ccd92aeec8d07f9e"
"reference": "63e513cebbbaf96a6795e5c5ee34d205831bfc85"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/a5a58773109c0abb13e658c8ccd92aeec8d07f9e",
"reference": "a5a58773109c0abb13e658c8ccd92aeec8d07f9e",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/63e513cebbbaf96a6795e5c5ee34d205831bfc85",
"reference": "63e513cebbbaf96a6795e5c5ee34d205831bfc85",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2",
"doctrine/cache": "^1.11|^2.0",
"doctrine/deprecations": "^0.5.3|^1",
"doctrine/event-manager": "^1.0",
"doctrine/event-manager": "^1|^2",
"php": "^7.4 || ^8.0",
"psr/cache": "^1|^2|^3",
"psr/log": "^1|^2|^3"
},
"require-dev": {
"doctrine/coding-standard": "10.0.0",
"jetbrains/phpstorm-stubs": "2022.2",
"phpstan/phpstan": "1.8.3",
"phpstan/phpstan-strict-rules": "^1.3",
"phpunit/phpunit": "9.5.24",
"psalm/plugin-phpunit": "0.17.0",
"doctrine/coding-standard": "11.0.0",
"jetbrains/phpstorm-stubs": "2022.3",
"phpstan/phpstan": "1.9.2",
"phpstan/phpstan-strict-rules": "^1.4",
"phpunit/phpunit": "9.5.27",
"psalm/plugin-phpunit": "0.18.4",
"squizlabs/php_codesniffer": "3.7.1",
"symfony/cache": "^5.4|^6.0",
"symfony/console": "^4.4|^5.4|^6.0",
"vimeo/psalm": "4.27.0"
"vimeo/psalm": "4.30.0"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
@ -426,7 +445,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
"source": "https://github.com/doctrine/dbal/tree/3.4.5"
"source": "https://github.com/doctrine/dbal/tree/3.5.2"
},
"funding": [
{
@ -442,7 +461,7 @@
"type": "tidelift"
}
],
"time": "2022-09-23T17:48:57+00:00"
"time": "2022-12-19T08:17:34+00:00"
},
{
"name": "doctrine/deprecations",
@ -489,56 +508,57 @@
},
{
"name": "doctrine/doctrine-bundle",
"version": "2.7.0",
"version": "2.8.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git",
"reference": "d2088fc50494e4e7441fecca54732245a613eeb6"
"reference": "251cd5aaea32bb92cdad4204840786b317dcdd4c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/d2088fc50494e4e7441fecca54732245a613eeb6",
"reference": "d2088fc50494e4e7441fecca54732245a613eeb6",
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/251cd5aaea32bb92cdad4204840786b317dcdd4c",
"reference": "251cd5aaea32bb92cdad4204840786b317dcdd4c",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1",
"doctrine/cache": "^1.11 || ^2.0",
"doctrine/dbal": "^2.13.1|^3.3.2",
"doctrine/persistence": "^2.2|^3",
"doctrine/dbal": "^3.4.0",
"doctrine/persistence": "^2.2 || ^3",
"doctrine/sql-formatter": "^1.0.1",
"php": "^7.1 || ^8.0",
"symfony/cache": "^4.3.3|^5.0|^6.0",
"symfony/config": "^4.4.3|^5.0|^6.0",
"symfony/console": "^3.4.30|^4.3.3|^5.0|^6.0",
"symfony/dependency-injection": "^4.4.18|^5.0|^6.0",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/doctrine-bridge": "^4.4.22|^5.2.7|^6.0",
"symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0|^6.0",
"symfony/service-contracts": "^1.1.1|^2.0|^3"
"php": "^7.4 || ^8.0",
"symfony/cache": "^5.4 || ^6.0",
"symfony/config": "^5.4 || ^6.0",
"symfony/console": "^5.4 || ^6.0",
"symfony/dependency-injection": "^5.4 || ^6.0",
"symfony/deprecation-contracts": "^2.1 || ^3",
"symfony/doctrine-bridge": "^5.4.7 || ^6.0.7",
"symfony/framework-bundle": "^5.4 || ^6.0",
"symfony/service-contracts": "^1.1.1 || ^2.0 || ^3"
},
"conflict": {
"doctrine/orm": "<2.10|>=3.0",
"twig/twig": "<1.34|>=2.0,<2.4"
"doctrine/annotations": ">=3.0",
"doctrine/orm": "<2.11 || >=3.0",
"twig/twig": "<1.34 || >=2.0,<2.4"
},
"require-dev": {
"doctrine/annotations": "^1 || ^2",
"doctrine/coding-standard": "^9.0",
"doctrine/orm": "^2.11 || ^3.0",
"friendsofphp/proxy-manager-lts": "^1.0",
"phpunit/phpunit": "^7.5 || ^8.0 || ^9.3 || ^10.0",
"psalm/plugin-phpunit": "^0.16.1",
"psalm/plugin-symfony": "^3",
"psr/log": "^1.1.4|^2.0|^3.0",
"symfony/phpunit-bridge": "^5.2|^6.0",
"symfony/property-info": "^4.3.3|^5.0|^6.0",
"symfony/proxy-manager-bridge": "^3.4|^4.3.3|^5.0|^6.0",
"symfony/security-bundle": "^4.4|^5.0|^6.0",
"symfony/twig-bridge": "^3.4.30|^4.3.3|^5.0|^6.0",
"symfony/validator": "^3.4.30|^4.3.3|^5.0|^6.0",
"symfony/web-profiler-bundle": "^3.4.30|^4.3.3|^5.0|^6.0",
"symfony/yaml": "^3.4.30|^4.3.3|^5.0|^6.0",
"twig/twig": "^1.34|^2.12|^3.0",
"vimeo/psalm": "^4.7"
"phpunit/phpunit": "^9.5.26 || ^10.0",
"psalm/plugin-phpunit": "^0.18.4",
"psalm/plugin-symfony": "^4",
"psr/log": "^1.1.4 || ^2.0 || ^3.0",
"symfony/phpunit-bridge": "^6.1",
"symfony/property-info": "^5.4 || ^6.0",
"symfony/proxy-manager-bridge": "^5.4 || ^6.0",
"symfony/security-bundle": "^5.4 || ^6.0",
"symfony/twig-bridge": "^5.4 || ^6.0",
"symfony/validator": "^5.4 || ^6.0",
"symfony/web-profiler-bundle": "^5.4 || ^6.0",
"symfony/yaml": "^5.4 || ^6.0",
"twig/twig": "^1.34 || ^2.12 || ^3.0",
"vimeo/psalm": "^4.30"
},
"suggest": {
"doctrine/orm": "The Doctrine ORM integration is optional in the bundle.",
@ -583,7 +603,7 @@
],
"support": {
"issues": "https://github.com/doctrine/DoctrineBundle/issues",
"source": "https://github.com/doctrine/DoctrineBundle/tree/2.7.0"
"source": "https://github.com/doctrine/DoctrineBundle/tree/2.8.2"
},
"funding": [
{
@ -599,7 +619,7 @@
"type": "tidelift"
}
],
"time": "2022-06-10T10:55:26+00:00"
"time": "2023-01-06T11:42:10+00:00"
},
{
"name": "doctrine/doctrine-migrations-bundle",
@ -780,23 +800,23 @@
},
{
"name": "doctrine/inflector",
"version": "2.0.5",
"version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
"reference": "ade2b3bbfb776f27f0558e26eed43b5d9fe1b392"
"reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/ade2b3bbfb776f27f0558e26eed43b5d9fe1b392",
"reference": "ade2b3bbfb776f27f0558e26eed43b5d9fe1b392",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024",
"reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9",
"doctrine/coding-standard": "^10",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-phpunit": "^1.1",
"phpstan/phpstan-strict-rules": "^1.3",
@ -851,7 +871,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
"source": "https://github.com/doctrine/inflector/tree/2.0.5"
"source": "https://github.com/doctrine/inflector/tree/2.0.6"
},
"funding": [
{
@ -867,34 +887,34 @@
"type": "tidelift"
}
],
"time": "2022-09-07T09:01:28+00:00"
"time": "2022-10-20T09:10:12+00:00"
},
{
"name": "doctrine/instantiator",
"version": "1.4.1",
"version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
"reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
"reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9",
"doctrine/coding-standard": "^9 || ^11",
"ext-pdo": "*",
"ext-phar": "*",
"phpbench/phpbench": "^0.16 || ^1",
"phpstan/phpstan": "^1.4",
"phpstan/phpstan-phpunit": "^1",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^4.22"
"vimeo/psalm": "^4.30 || ^5.4"
},
"type": "library",
"autoload": {
@ -921,7 +941,7 @@
],
"support": {
"issues": "https://github.com/doctrine/instantiator/issues",
"source": "https://github.com/doctrine/instantiator/tree/1.4.1"
"source": "https://github.com/doctrine/instantiator/tree/1.5.0"
},
"funding": [
{
@ -937,35 +957,37 @@
"type": "tidelift"
}
],
"time": "2022-03-03T08:28:38+00:00"
"time": "2022-12-30T00:15:36+00:00"
},
{
"name": "doctrine/lexer",
"version": "1.2.3",
"version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229"
"reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229",
"reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^1.0",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9.0",
"doctrine/coding-standard": "^9 || ^10",
"phpstan/phpstan": "^1.3",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^4.11"
"psalm/plugin-phpunit": "^0.18.3",
"vimeo/psalm": "^4.11 || ^5.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
"Doctrine\\Common\\Lexer\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -997,7 +1019,7 @@
],
"support": {
"issues": "https://github.com/doctrine/lexer/issues",
"source": "https://github.com/doctrine/lexer/tree/1.2.3"
"source": "https://github.com/doctrine/lexer/tree/2.1.0"
},
"funding": [
{
@ -1013,7 +1035,7 @@
"type": "tidelift"
}
],
"time": "2022-02-28T11:07:21+00:00"
"time": "2022-12-14T08:49:07+00:00"
},
{
"name": "doctrine/migrations",
@ -1126,51 +1148,52 @@
},
{
"name": "doctrine/orm",
"version": "2.13.3",
"version": "2.14.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/orm.git",
"reference": "e750360bd52b080c4cbaaee1b48b80f7dc873b36"
"reference": "f82485e651763fbd1b34879726f4d3b91c358bd9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/orm/zipball/e750360bd52b080c4cbaaee1b48b80f7dc873b36",
"reference": "e750360bd52b080c4cbaaee1b48b80f7dc873b36",
"url": "https://api.github.com/repos/doctrine/orm/zipball/f82485e651763fbd1b34879726f4d3b91c358bd9",
"reference": "f82485e651763fbd1b34879726f4d3b91c358bd9",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2",
"doctrine/cache": "^1.12.1 || ^2.1.1",
"doctrine/collections": "^1.5",
"doctrine/collections": "^1.5 || ^2.0",
"doctrine/common": "^3.0.3",
"doctrine/dbal": "^2.13.1 || ^3.2",
"doctrine/deprecations": "^0.5.3 || ^1",
"doctrine/event-manager": "^1.1",
"doctrine/event-manager": "^1.2 || ^2",
"doctrine/inflector": "^1.4 || ^2.0",
"doctrine/instantiator": "^1.3",
"doctrine/lexer": "^1.2.3",
"doctrine/lexer": "^1.2.3 || ^2",
"doctrine/persistence": "^2.4 || ^3",
"ext-ctype": "*",
"php": "^7.1 || ^8.0",
"psr/cache": "^1 || ^2 || ^3",
"symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0",
"symfony/console": "^4.2 || ^5.0 || ^6.0",
"symfony/polyfill-php72": "^1.23",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"doctrine/annotations": "<1.13 || >= 2.0"
"doctrine/annotations": "<1.13 || >= 3.0"
},
"require-dev": {
"doctrine/annotations": "^1.13",
"doctrine/coding-standard": "^9.0.2 || ^10.0",
"doctrine/annotations": "^1.13 || ^2",
"doctrine/coding-standard": "^9.0.2 || ^11.0",
"phpbench/phpbench": "^0.16.10 || ^1.0",
"phpstan/phpstan": "~1.4.10 || 1.8.5",
"phpstan/phpstan": "~1.4.10 || 1.9.4",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psr/log": "^1 || ^2 || ^3",
"squizlabs/php_codesniffer": "3.7.1",
"symfony/cache": "^4.4 || ^5.4 || ^6.0",
"symfony/var-exporter": "^4.4 || ^5.4 || ^6.2",
"symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0",
"vimeo/psalm": "4.27.0"
"vimeo/psalm": "4.30.0 || 5.3.0"
},
"suggest": {
"ext-dom": "Provides support for XSD validation for XML mapping files",
@ -1220,22 +1243,22 @@
],
"support": {
"issues": "https://github.com/doctrine/orm/issues",
"source": "https://github.com/doctrine/orm/tree/2.13.3"
"source": "https://github.com/doctrine/orm/tree/2.14.0"
},
"time": "2022-10-07T06:37:17+00:00"
"time": "2022-12-19T21:51:58+00:00"
},
{
"name": "doctrine/persistence",
"version": "3.0.4",
"version": "3.1.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/persistence.git",
"reference": "05612da375f8a3931161f435f91d6704926e6ec5"
"reference": "b44d128311af55275dbed6a4558ca59a2b9f9387"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/persistence/zipball/05612da375f8a3931161f435f91d6704926e6ec5",
"reference": "05612da375f8a3931161f435f91d6704926e6ec5",
"url": "https://api.github.com/repos/doctrine/persistence/zipball/b44d128311af55275dbed6a4558ca59a2b9f9387",
"reference": "b44d128311af55275dbed6a4558ca59a2b9f9387",
"shasum": ""
},
"require": {
@ -1244,20 +1267,18 @@
"psr/cache": "^1.0 || ^2.0 || ^3.0"
},
"conflict": {
"doctrine/annotations": "<1.7 || >=2.0",
"doctrine/common": "<2.10"
},
"require-dev": {
"composer/package-versions-deprecated": "^1.11",
"doctrine/annotations": "^1.7",
"doctrine/coding-standard": "^10",
"doctrine/coding-standard": "^11",
"doctrine/common": "^3.0",
"phpstan/phpstan": "1.8.8",
"phpstan/phpstan": "1.9.4",
"phpstan/phpstan-phpunit": "^1",
"phpstan/phpstan-strict-rules": "^1.1",
"phpunit/phpunit": "^8.5 || ^9.5",
"symfony/cache": "^4.4 || ^5.4 || ^6.0",
"vimeo/psalm": "4.29.0"
"vimeo/psalm": "4.30.0 || 5.3.0"
},
"type": "library",
"autoload": {
@ -1306,7 +1327,7 @@
],
"support": {
"issues": "https://github.com/doctrine/persistence/issues",
"source": "https://github.com/doctrine/persistence/tree/3.0.4"
"source": "https://github.com/doctrine/persistence/tree/3.1.2"
},
"funding": [
{
@ -1322,7 +1343,7 @@
"type": "tidelift"
}
],
"time": "2022-10-13T07:34:14+00:00"
"time": "2022-12-19T13:58:18+00:00"
},
{
"name": "doctrine/sql-formatter",
@ -1378,25 +1399,24 @@
},
{
"name": "egulias/email-validator",
"version": "3.2.1",
"version": "3.2.5",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
"reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715"
"reference": "b531a2311709443320c786feb4519cfaf94af796"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715",
"reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b531a2311709443320c786feb4519cfaf94af796",
"reference": "b531a2311709443320c786feb4519cfaf94af796",
"shasum": ""
},
"require": {
"doctrine/lexer": "^1.2",
"doctrine/lexer": "^1.2|^2",
"php": ">=7.2",
"symfony/polyfill-intl-idn": "^1.15"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.2",
"phpunit/phpunit": "^8.5.8|^9.3.3",
"vimeo/psalm": "^4"
},
@ -1434,7 +1454,7 @@
],
"support": {
"issues": "https://github.com/egulias/EmailValidator/issues",
"source": "https://github.com/egulias/EmailValidator/tree/3.2.1"
"source": "https://github.com/egulias/EmailValidator/tree/3.2.5"
},
"funding": [
{
@ -1442,20 +1462,20 @@
"type": "github"
}
],
"time": "2022-06-18T20:57:19+00:00"
"time": "2023-01-02T17:26:14+00:00"
},
{
"name": "friendsofphp/proxy-manager-lts",
"version": "v1.0.12",
"version": "v1.0.13",
"source": {
"type": "git",
"url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git",
"reference": "8419f0158715b30d4b99a5bd37c6a39671994ad7"
"reference": "88354616f4cf4f6620910fd035e282173ba453e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/8419f0158715b30d4b99a5bd37c6a39671994ad7",
"reference": "8419f0158715b30d4b99a5bd37c6a39671994ad7",
"url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/88354616f4cf4f6620910fd035e282173ba453e8",
"reference": "88354616f4cf4f6620910fd035e282173ba453e8",
"shasum": ""
},
"require": {
@ -1512,7 +1532,7 @@
],
"support": {
"issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues",
"source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.12"
"source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.13"
},
"funding": [
{
@ -1524,7 +1544,7 @@
"type": "tidelift"
}
],
"time": "2022-05-05T09:31:05+00:00"
"time": "2022-10-17T19:48:16+00:00"
},
{
"name": "knplabs/knp-components",
@ -1687,29 +1707,29 @@
},
{
"name": "laminas/laminas-code",
"version": "4.7.0",
"version": "4.8.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-code.git",
"reference": "0337d9265bc2e6376babad8c511500821620cb30"
"reference": "dd19fe8e07cc3f374308565667eecd4958c22106"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-code/zipball/0337d9265bc2e6376babad8c511500821620cb30",
"reference": "0337d9265bc2e6376babad8c511500821620cb30",
"url": "https://api.github.com/repos/laminas/laminas-code/zipball/dd19fe8e07cc3f374308565667eecd4958c22106",
"reference": "dd19fe8e07cc3f374308565667eecd4958c22106",
"shasum": ""
},
"require": {
"php": ">=7.4, <8.2"
"php": "~8.1.0 || ~8.2.0"
},
"require-dev": {
"doctrine/annotations": "^1.13.2",
"doctrine/annotations": "^1.13.3",
"ext-phar": "*",
"laminas/laminas-coding-standard": "^2.3.0",
"laminas/laminas-stdlib": "^3.6.1",
"phpunit/phpunit": "^9.5.10",
"psalm/plugin-phpunit": "^0.17.0",
"vimeo/psalm": "^4.13.1"
"phpunit/phpunit": "^9.5.26",
"psalm/plugin-phpunit": "^0.18.0",
"vimeo/psalm": "^5.1.0"
},
"suggest": {
"doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features",
@ -1717,9 +1737,6 @@
},
"type": "library",
"autoload": {
"files": [
"polyfill/ReflectionEnumPolyfill.php"
],
"psr-4": {
"Laminas\\Code\\": "src/"
}
@ -1749,7 +1766,7 @@
"type": "community_bridge"
}
],
"time": "2022-09-13T10:33:30+00:00"
"time": "2022-12-08T02:08:23+00:00"
},
{
"name": "monolog/monolog",
@ -2020,16 +2037,16 @@
},
{
"name": "phpstan/phpdoc-parser",
"version": "1.11.0",
"version": "1.15.3",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "7d1e81213b0c7eb8d5a9f524456cbc2778ed5c65"
"reference": "61800f71a5526081d1b5633766aa88341f1ade76"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/7d1e81213b0c7eb8d5a9f524456cbc2778ed5c65",
"reference": "7d1e81213b0c7eb8d5a9f524456cbc2778ed5c65",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/61800f71a5526081d1b5633766aa88341f1ade76",
"reference": "61800f71a5526081d1b5633766aa88341f1ade76",
"shasum": ""
},
"require": {
@ -2059,9 +2076,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.11.0"
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.15.3"
},
"time": "2022-10-14T13:32:28+00:00"
"time": "2022-12-20T20:56:55+00:00"
},
{
"name": "psr/cache",
@ -2315,16 +2332,16 @@
},
{
"name": "sensio/framework-extra-bundle",
"version": "v6.2.8",
"version": "v6.2.9",
"source": {
"type": "git",
"url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git",
"reference": "bb962f8aed09e60b0942545f6e4842ffeee4aafd"
"reference": "dcfac94d6bdcf95c126e8ccac2104917c7c8f135"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bb962f8aed09e60b0942545f6e4842ffeee4aafd",
"reference": "bb962f8aed09e60b0942545f6e4842ffeee4aafd",
"url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/dcfac94d6bdcf95c126e8ccac2104917c7c8f135",
"reference": "dcfac94d6bdcf95c126e8ccac2104917c7c8f135",
"shasum": ""
},
"require": {
@ -2387,22 +2404,23 @@
],
"support": {
"issues": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/issues",
"source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.8"
"source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.9"
},
"time": "2022-09-05T16:44:56+00:00"
"abandoned": "Symfony",
"time": "2022-11-01T17:17:13+00:00"
},
{
"name": "symfony/amqp-messenger",
"version": "v5.4.13",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/amqp-messenger.git",
"reference": "def93f2a7841cfa1a4a1fa487b84054d0d53e521"
"reference": "df5601a7e1d379c13fc0e9e86219e071a370def0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/def93f2a7841cfa1a4a1fa487b84054d0d53e521",
"reference": "def93f2a7841cfa1a4a1fa487b84054d0d53e521",
"url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/df5601a7e1d379c13fc0e9e86219e071a370def0",
"reference": "df5601a7e1d379c13fc0e9e86219e071a370def0",
"shasum": ""
},
"require": {
@ -2442,7 +2460,7 @@
"description": "Symfony AMQP extension Messenger Bridge",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/amqp-messenger/tree/v5.4.13"
"source": "https://github.com/symfony/amqp-messenger/tree/v5.4.17"
},
"funding": [
{
@ -2458,7 +2476,7 @@
"type": "tidelift"
}
],
"time": "2022-09-11T09:11:59+00:00"
"time": "2022-12-13T17:34:41+00:00"
},
{
"name": "symfony/asset",
@ -2536,16 +2554,16 @@
},
{
"name": "symfony/cache",
"version": "v5.4.13",
"version": "v5.4.18",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "89bb6a0fe27205636d80e568ffaf9bbb52f691e3"
"reference": "a33fa08a3f37bb44b90e60b9028796d6b811f9ef"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/89bb6a0fe27205636d80e568ffaf9bbb52f691e3",
"reference": "89bb6a0fe27205636d80e568ffaf9bbb52f691e3",
"url": "https://api.github.com/repos/symfony/cache/zipball/a33fa08a3f37bb44b90e60b9028796d6b811f9ef",
"reference": "a33fa08a3f37bb44b90e60b9028796d6b811f9ef",
"shasum": ""
},
"require": {
@ -2613,7 +2631,7 @@
"psr6"
],
"support": {
"source": "https://github.com/symfony/cache/tree/v5.4.13"
"source": "https://github.com/symfony/cache/tree/v5.4.18"
},
"funding": [
{
@ -2629,7 +2647,7 @@
"type": "tidelift"
}
],
"time": "2022-09-06T13:23:31+00:00"
"time": "2022-12-29T16:06:09+00:00"
},
{
"name": "symfony/cache-contracts",
@ -2791,16 +2809,16 @@
},
{
"name": "symfony/console",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "984ea2c0f45f42dfed01d2f3987b187467c4b16d"
"reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/984ea2c0f45f42dfed01d2f3987b187467c4b16d",
"reference": "984ea2c0f45f42dfed01d2f3987b187467c4b16d",
"url": "https://api.github.com/repos/symfony/console/zipball/58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f",
"reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f",
"shasum": ""
},
"require": {
@ -2870,7 +2888,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v5.4.14"
"source": "https://github.com/symfony/console/tree/v5.4.17"
},
"funding": [
{
@ -2886,20 +2904,20 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:01:20+00:00"
"time": "2022-12-28T14:15:31+00:00"
},
{
"name": "symfony/dependency-injection",
"version": "v5.4.13",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "24cf522668845391c0542bc1de496366072a6d0e"
"reference": "58f2988128d2d278280781db037677a32cf720db"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/24cf522668845391c0542bc1de496366072a6d0e",
"reference": "24cf522668845391c0542bc1de496366072a6d0e",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/58f2988128d2d278280781db037677a32cf720db",
"reference": "58f2988128d2d278280781db037677a32cf720db",
"shasum": ""
},
"require": {
@ -2959,7 +2977,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.13"
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.17"
},
"funding": [
{
@ -2975,20 +2993,20 @@
"type": "tidelift"
}
],
"time": "2022-08-30T19:10:13+00:00"
"time": "2022-12-28T13:55:51+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v3.1.1",
"version": "v3.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918"
"reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918",
"reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3",
"reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3",
"shasum": ""
},
"require": {
@ -2997,7 +3015,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.1-dev"
"dev-main": "3.3-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -3026,7 +3044,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1"
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0"
},
"funding": [
{
@ -3042,20 +3060,20 @@
"type": "tidelift"
}
],
"time": "2022-02-25T11:15:52+00:00"
"time": "2022-11-25T10:21:52+00:00"
},
{
"name": "symfony/doctrine-bridge",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-bridge.git",
"reference": "3e1e56af2174c205d60a73f5acd7eff89cef65b2"
"reference": "e9fce4a5568337402b2b1106907140d56a9d2454"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/3e1e56af2174c205d60a73f5acd7eff89cef65b2",
"reference": "3e1e56af2174c205d60a73f5acd7eff89cef65b2",
"url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/e9fce4a5568337402b2b1106907140d56a9d2454",
"reference": "e9fce4a5568337402b2b1106907140d56a9d2454",
"shasum": ""
},
"require": {
@ -3085,8 +3103,8 @@
"symfony/validator": "<5.2"
},
"require-dev": {
"doctrine/annotations": "^1.10.4",
"doctrine/collections": "~1.0",
"doctrine/annotations": "^1.10.4|^2",
"doctrine/collections": "^1.0|^2.0",
"doctrine/data-fixtures": "^1.1",
"doctrine/dbal": "^2.13.1|^3.0",
"doctrine/orm": "^2.7.4",
@ -3143,7 +3161,7 @@
"description": "Provides integration for Doctrine with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/doctrine-bridge/tree/v5.4.14"
"source": "https://github.com/symfony/doctrine-bridge/tree/v5.4.17"
},
"funding": [
{
@ -3159,20 +3177,20 @@
"type": "tidelift"
}
],
"time": "2022-10-09T21:15:07+00:00"
"time": "2022-12-20T11:10:57+00:00"
},
{
"name": "symfony/doctrine-messenger",
"version": "v5.4.12",
"version": "v5.4.16",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-messenger.git",
"reference": "7649a80e917b47c5072480a2d763c2422da239d2"
"reference": "e44bc95cf7f9ad34b7a993b9aaa93703e0bc35eb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/7649a80e917b47c5072480a2d763c2422da239d2",
"reference": "7649a80e917b47c5072480a2d763c2422da239d2",
"url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/e44bc95cf7f9ad34b7a993b9aaa93703e0bc35eb",
"reference": "e44bc95cf7f9ad34b7a993b9aaa93703e0bc35eb",
"shasum": ""
},
"require": {
@ -3216,7 +3234,7 @@
"description": "Symfony Doctrine Messenger Bridge",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/doctrine-messenger/tree/v5.4.12"
"source": "https://github.com/symfony/doctrine-messenger/tree/v5.4.16"
},
"funding": [
{
@ -3232,7 +3250,7 @@
"type": "tidelift"
}
],
"time": "2022-08-09T12:54:00+00:00"
"time": "2022-11-04T07:27:04+00:00"
},
{
"name": "symfony/dotenv",
@ -3307,16 +3325,16 @@
},
{
"name": "symfony/error-handler",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "5fe6d42ffeb68b094df8fdbf3acf23f391cc6be0"
"reference": "b900446552833ad2f91ca7dd52aa8ffe78f66cb2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/5fe6d42ffeb68b094df8fdbf3acf23f391cc6be0",
"reference": "5fe6d42ffeb68b094df8fdbf3acf23f391cc6be0",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/b900446552833ad2f91ca7dd52aa8ffe78f66cb2",
"reference": "b900446552833ad2f91ca7dd52aa8ffe78f66cb2",
"shasum": ""
},
"require": {
@ -3358,7 +3376,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/error-handler/tree/v5.4.14"
"source": "https://github.com/symfony/error-handler/tree/v5.4.17"
},
"funding": [
{
@ -3374,20 +3392,20 @@
"type": "tidelift"
}
],
"time": "2022-10-03T15:15:50+00:00"
"time": "2022-12-13T09:43:00+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v5.4.9",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc"
"reference": "8e18a9d559eb8ebc2220588f1faa726a2fcd31c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc",
"reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e18a9d559eb8ebc2220588f1faa726a2fcd31c9",
"reference": "8e18a9d559eb8ebc2220588f1faa726a2fcd31c9",
"shasum": ""
},
"require": {
@ -3443,7 +3461,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9"
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.17"
},
"funding": [
{
@ -3459,20 +3477,20 @@
"type": "tidelift"
}
],
"time": "2022-05-05T16:45:39+00:00"
"time": "2022-12-12T15:54:21+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
"version": "v3.1.1",
"version": "v3.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "02ff5eea2f453731cfbc6bc215e456b781480448"
"reference": "0782b0b52a737a05b4383d0df35a474303cabdae"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448",
"reference": "02ff5eea2f453731cfbc6bc215e456b781480448",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae",
"reference": "0782b0b52a737a05b4383d0df35a474303cabdae",
"shasum": ""
},
"require": {
@ -3485,7 +3503,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.1-dev"
"dev-main": "3.3-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -3522,7 +3540,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.1"
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0"
},
"funding": [
{
@ -3538,7 +3556,7 @@
"type": "tidelift"
}
],
"time": "2022-02-25T11:15:52+00:00"
"time": "2022-11-25T10:21:52+00:00"
},
{
"name": "symfony/expression-language",
@ -3669,16 +3687,16 @@
},
{
"name": "symfony/finder",
"version": "v5.4.11",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c"
"reference": "40c08632019838dfb3350f18cf5563b8080055fc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c",
"reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c",
"url": "https://api.github.com/repos/symfony/finder/zipball/40c08632019838dfb3350f18cf5563b8080055fc",
"reference": "40c08632019838dfb3350f18cf5563b8080055fc",
"shasum": ""
},
"require": {
@ -3712,7 +3730,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v5.4.11"
"source": "https://github.com/symfony/finder/tree/v5.4.17"
},
"funding": [
{
@ -3728,32 +3746,32 @@
"type": "tidelift"
}
],
"time": "2022-07-29T07:37:50+00:00"
"time": "2022-12-22T10:31:03+00:00"
},
{
"name": "symfony/flex",
"version": "v2.2.3",
"version": "v1.19.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
"reference": "0763da1bdcce1d48c06778d48249905c26d34a72"
"reference": "c82477240111bfe41a1067c9f0ab91d40bafa5b6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/0763da1bdcce1d48c06778d48249905c26d34a72",
"reference": "0763da1bdcce1d48c06778d48249905c26d34a72",
"url": "https://api.github.com/repos/symfony/flex/zipball/c82477240111bfe41a1067c9f0ab91d40bafa5b6",
"reference": "c82477240111bfe41a1067c9f0ab91d40bafa5b6",
"shasum": ""
},
"require": {
"composer-plugin-api": "^2.1",
"php": ">=8.0"
"composer-plugin-api": "^1.0|^2.0",
"php": ">=7.1"
},
"require-dev": {
"composer/composer": "^2.1",
"symfony/dotenv": "^5.4|^6.0",
"symfony/filesystem": "^5.4|^6.0",
"symfony/phpunit-bridge": "^5.4|^6.0",
"symfony/process": "^5.4|^6.0"
"composer/composer": "^1.0.2|^2.0",
"symfony/dotenv": "^4.4|^5.0|^6.0",
"symfony/filesystem": "^4.4|^5.0|^6.0",
"symfony/phpunit-bridge": "^4.4.12|^5.0|^6.0",
"symfony/process": "^4.4|^5.0|^6.0"
},
"type": "composer-plugin",
"extra": {
@ -3777,7 +3795,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
"source": "https://github.com/symfony/flex/tree/v2.2.3"
"source": "https://github.com/symfony/flex/tree/v1.19.4"
},
"funding": [
{
@ -3793,20 +3811,20 @@
"type": "tidelift"
}
],
"time": "2022-08-07T09:39:47+00:00"
"time": "2022-12-20T07:19:24+00:00"
},
{
"name": "symfony/form",
"version": "v5.4.13",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
"reference": "d9d661776636ce689bc879b66fb06c6a6895f1a7"
"reference": "6150f66dc921375a62e5da1cce3684aee657ddca"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/form/zipball/d9d661776636ce689bc879b66fb06c6a6895f1a7",
"reference": "d9d661776636ce689bc879b66fb06c6a6895f1a7",
"url": "https://api.github.com/repos/symfony/form/zipball/6150f66dc921375a62e5da1cce3684aee657ddca",
"reference": "6150f66dc921375a62e5da1cce3684aee657ddca",
"shasum": ""
},
"require": {
@ -3835,7 +3853,7 @@
"symfony/twig-bridge": "<4.4"
},
"require-dev": {
"doctrine/collections": "~1.0",
"doctrine/collections": "^1.0|^2.0",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/console": "^5.4|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
@ -3880,7 +3898,7 @@
"description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/form/tree/v5.4.13"
"source": "https://github.com/symfony/form/tree/v5.4.17"
},
"funding": [
{
@ -3896,20 +3914,20 @@
"type": "tidelift"
}
],
"time": "2022-09-28T15:33:58+00:00"
"time": "2022-12-28T08:39:55+00:00"
},
{
"name": "symfony/framework-bundle",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
"reference": "00ac4d7e31597f6a49759bd925d83fc87d4ade68"
"reference": "79dba90bd8a440488b63282ea27d2b30166e8841"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/00ac4d7e31597f6a49759bd925d83fc87d4ade68",
"reference": "00ac4d7e31597f6a49759bd925d83fc87d4ade68",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/79dba90bd8a440488b63282ea27d2b30166e8841",
"reference": "79dba90bd8a440488b63282ea27d2b30166e8841",
"shasum": ""
},
"require": {
@ -3961,7 +3979,7 @@
"symfony/workflow": "<5.2"
},
"require-dev": {
"doctrine/annotations": "^1.13.1",
"doctrine/annotations": "^1.13.1|^2",
"doctrine/cache": "^1.11|^2.0",
"doctrine/persistence": "^1.3|^2|^3",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
@ -4031,7 +4049,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/framework-bundle/tree/v5.4.14"
"source": "https://github.com/symfony/framework-bundle/tree/v5.4.17"
},
"funding": [
{
@ -4047,20 +4065,20 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:01:20+00:00"
"time": "2022-12-20T11:10:57+00:00"
},
{
"name": "symfony/http-client",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "8a3929c814cba77db93de61c22759e0dbeaa4c87"
"reference": "772129f800fc0bfaa6bd40c40934d544f0957d30"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/8a3929c814cba77db93de61c22759e0dbeaa4c87",
"reference": "8a3929c814cba77db93de61c22759e0dbeaa4c87",
"url": "https://api.github.com/repos/symfony/http-client/zipball/772129f800fc0bfaa6bd40c40934d544f0957d30",
"reference": "772129f800fc0bfaa6bd40c40934d544f0957d30",
"shasum": ""
},
"require": {
@ -4118,7 +4136,7 @@
"description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-client/tree/v5.4.14"
"source": "https://github.com/symfony/http-client/tree/v5.4.17"
},
"funding": [
{
@ -4134,7 +4152,7 @@
"type": "tidelift"
}
],
"time": "2022-10-11T15:16:01+00:00"
"time": "2022-12-13T11:07:37+00:00"
},
{
"name": "symfony/http-client-contracts",
@ -4216,16 +4234,16 @@
},
{
"name": "symfony/http-foundation",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "e7c7b395c3a61d746919c21e915f51f0039c3f75"
"reference": "b64a0e2df212d5849e4584cabff0cf09c5d6866a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/e7c7b395c3a61d746919c21e915f51f0039c3f75",
"reference": "e7c7b395c3a61d746919c21e915f51f0039c3f75",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/b64a0e2df212d5849e4584cabff0cf09c5d6866a",
"reference": "b64a0e2df212d5849e4584cabff0cf09c5d6866a",
"shasum": ""
},
"require": {
@ -4272,7 +4290,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v5.4.14"
"source": "https://github.com/symfony/http-foundation/tree/v5.4.17"
},
"funding": [
{
@ -4288,20 +4306,20 @@
"type": "tidelift"
}
],
"time": "2022-10-01T21:59:28+00:00"
"time": "2022-12-14T08:23:03+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v5.4.14",
"version": "v5.4.18",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "6f77fabc1a37c2dceecc6f78cca44772705dc52f"
"reference": "5da6f57a13e5d7d77197443cf55697cdf65f1352"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/6f77fabc1a37c2dceecc6f78cca44772705dc52f",
"reference": "6f77fabc1a37c2dceecc6f78cca44772705dc52f",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/5da6f57a13e5d7d77197443cf55697cdf65f1352",
"reference": "5da6f57a13e5d7d77197443cf55697cdf65f1352",
"shasum": ""
},
"require": {
@ -4384,7 +4402,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v5.4.14"
"source": "https://github.com/symfony/http-kernel/tree/v5.4.18"
},
"funding": [
{
@ -4400,20 +4418,20 @@
"type": "tidelift"
}
],
"time": "2022-10-12T07:12:21+00:00"
"time": "2022-12-29T18:54:08+00:00"
},
{
"name": "symfony/intl",
"version": "v5.4.14",
"version": "v5.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/intl.git",
"reference": "dd26864d69c11e0e077ffc6b89f66c5772ac456e"
"reference": "2cb39da7f6e7b7344d7d5317dbee8db9d12cc714"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/intl/zipball/dd26864d69c11e0e077ffc6b89f66c5772ac456e",
"reference": "dd26864d69c11e0e077ffc6b89f66c5772ac456e",
"url": "https://api.github.com/repos/symfony/intl/zipball/2cb39da7f6e7b7344d7d5317dbee8db9d12cc714",
"reference": "2cb39da7f6e7b7344d7d5317dbee8db9d12cc714",
"shasum": ""
},
"require": {
@ -4472,7 +4490,7 @@
"localization"
],
"support": {
"source": "https://github.com/symfony/intl/tree/v5.4.14"
"source": "https://github.com/symfony/intl/tree/v5.4.15"
},
"funding": [
{
@ -4488,20 +4506,20 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:01:20+00:00"
"time": "2022-10-19T14:28:49+00:00"
},
{
"name": "symfony/mailer",
"version": "v5.4.13",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
"reference": "63bf36a5150ac0bfed1c4d0a4e0b114a57b77e11"
"reference": "fd816412b76447890efedaf9ddfe8632589ce10c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mailer/zipball/63bf36a5150ac0bfed1c4d0a4e0b114a57b77e11",
"reference": "63bf36a5150ac0bfed1c4d0a4e0b114a57b77e11",
"url": "https://api.github.com/repos/symfony/mailer/zipball/fd816412b76447890efedaf9ddfe8632589ce10c",
"reference": "fd816412b76447890efedaf9ddfe8632589ce10c",
"shasum": ""
},
"require": {
@ -4548,7 +4566,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/mailer/tree/v5.4.13"
"source": "https://github.com/symfony/mailer/tree/v5.4.17"
},
"funding": [
{
@ -4564,20 +4582,20 @@
"type": "tidelift"
}
],
"time": "2022-08-29T06:47:07+00:00"
"time": "2022-12-14T15:45:23+00:00"
},
{
"name": "symfony/messenger",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/messenger.git",
"reference": "de4b258a5551934460c422620b61cf0a35744f51"
"reference": "b6f91bc2732278f5d10ff21833db5ce7c2c4f8b2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/messenger/zipball/de4b258a5551934460c422620b61cf0a35744f51",
"reference": "de4b258a5551934460c422620b61cf0a35744f51",
"url": "https://api.github.com/repos/symfony/messenger/zipball/b6f91bc2732278f5d10ff21833db5ce7c2c4f8b2",
"reference": "b6f91bc2732278f5d10ff21833db5ce7c2c4f8b2",
"shasum": ""
},
"require": {
@ -4638,7 +4656,7 @@
"description": "Helps applications send and receive messages to/from other applications or via message queues",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/messenger/tree/v5.4.14"
"source": "https://github.com/symfony/messenger/tree/v5.4.17"
},
"funding": [
{
@ -4654,20 +4672,20 @@
"type": "tidelift"
}
],
"time": "2022-10-10T09:32:54+00:00"
"time": "2022-12-12T15:54:21+00:00"
},
{
"name": "symfony/mime",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "1c118b253bb3495d81e95a6e3ec6c2766a98a0c4"
"reference": "2a83d82efc91c3f03a23c8b47a896df168aa5c63"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/1c118b253bb3495d81e95a6e3ec6c2766a98a0c4",
"reference": "1c118b253bb3495d81e95a6e3ec6c2766a98a0c4",
"url": "https://api.github.com/repos/symfony/mime/zipball/2a83d82efc91c3f03a23c8b47a896df168aa5c63",
"reference": "2a83d82efc91c3f03a23c8b47a896df168aa5c63",
"shasum": ""
},
"require": {
@ -4722,7 +4740,7 @@
"mime-type"
],
"support": {
"source": "https://github.com/symfony/mime/tree/v5.4.14"
"source": "https://github.com/symfony/mime/tree/v5.4.17"
},
"funding": [
{
@ -4738,20 +4756,20 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:01:20+00:00"
"time": "2022-12-13T09:59:55+00:00"
},
{
"name": "symfony/monolog-bridge",
"version": "v5.4.10",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bridge.git",
"reference": "b3b0890e76e7eb626f27b165a5c501f2754dfbbd"
"reference": "0280390d8232a5668b02e0d87e9fce0a535c4af9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/b3b0890e76e7eb626f27b165a5c501f2754dfbbd",
"reference": "b3b0890e76e7eb626f27b165a5c501f2754dfbbd",
"url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/0280390d8232a5668b02e0d87e9fce0a535c4af9",
"reference": "0280390d8232a5668b02e0d87e9fce0a535c4af9",
"shasum": ""
},
"require": {
@ -4806,7 +4824,7 @@
"description": "Provides integration for Monolog with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/monolog-bridge/tree/v5.4.10"
"source": "https://github.com/symfony/monolog-bridge/tree/v5.4.17"
},
"funding": [
{
@ -4822,7 +4840,7 @@
"type": "tidelift"
}
],
"time": "2022-06-19T12:03:50+00:00"
"time": "2022-12-13T10:55:04+00:00"
},
{
"name": "symfony/monolog-bundle",
@ -5144,16 +5162,16 @@
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.26.0",
"version": "v1.27.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "433d05519ce6990bf3530fba6957499d327395c2"
"reference": "511a08c03c1960e08a883f4cffcacd219b758354"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2",
"reference": "433d05519ce6990bf3530fba6957499d327395c2",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354",
"reference": "511a08c03c1960e08a883f4cffcacd219b758354",
"shasum": ""
},
"require": {
@ -5165,7 +5183,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -5205,7 +5223,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0"
},
"funding": [
{
@ -5221,20 +5239,20 @@
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
"time": "2022-11-03T14:55:06+00:00"
},
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.26.0",
"version": "v1.27.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "e407643d610e5f2c8a4b14189150f68934bf5e48"
"reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e407643d610e5f2c8a4b14189150f68934bf5e48",
"reference": "e407643d610e5f2c8a4b14189150f68934bf5e48",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/a3d9148e2c363588e05abbdd4ee4f971f0a5330c",
"reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c",
"shasum": ""
},
"require": {
@ -5246,7 +5264,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -5292,7 +5310,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.26.0"
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.27.0"
},
"funding": [
{
@ -5308,20 +5326,20 @@
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
"time": "2022-11-03T14:55:06+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
"version": "v1.26.0",
"version": "v1.27.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8"
"reference": "639084e360537a19f9ee352433b84ce831f3d2da"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8",
"reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da",
"reference": "639084e360537a19f9ee352433b84ce831f3d2da",
"shasum": ""
},
"require": {
@ -5335,7 +5353,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -5379,7 +5397,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0"
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0"
},
"funding": [
{
@ -5395,20 +5413,20 @@
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
"time": "2022-11-03T14:55:06+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.26.0",
"version": "v1.27.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "219aa369ceff116e673852dce47c3a41794c14bd"
"reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd",
"reference": "219aa369ceff116e673852dce47c3a41794c14bd",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"shasum": ""
},
"require": {
@ -5420,7 +5438,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -5463,7 +5481,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
},
"funding": [
{
@ -5479,20 +5497,20 @@
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
"time": "2022-11-03T14:55:06+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.26.0",
"version": "v1.27.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"shasum": ""
},
"require": {
@ -5507,7 +5525,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -5546,7 +5564,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
},
"funding": [
{
@ -5562,20 +5580,20 @@
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
"time": "2022-11-03T14:55:06+00:00"
},
{
"name": "symfony/polyfill-php73",
"version": "v1.26.0",
"version": "v1.27.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85"
"reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85",
"reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
"reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
"shasum": ""
},
"require": {
@ -5584,7 +5602,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -5625,7 +5643,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0"
"source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0"
},
"funding": [
{
@ -5641,20 +5659,20 @@
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
"time": "2022-11-03T14:55:06+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.26.0",
"version": "v1.27.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace"
"reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace",
"reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
"reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
"shasum": ""
},
"require": {
@ -5663,7 +5681,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -5708,7 +5726,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
},
"funding": [
{
@ -5724,20 +5742,20 @@
"type": "tidelift"
}
],
"time": "2022-05-10T07:21:04+00:00"
"time": "2022-11-03T14:55:06+00:00"
},
{
"name": "symfony/polyfill-php81",
"version": "v1.26.0",
"version": "v1.27.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
"reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1"
"reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1",
"reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a",
"reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a",
"shasum": ""
},
"require": {
@ -5746,7 +5764,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -5787,7 +5805,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0"
"source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0"
},
"funding": [
{
@ -5803,7 +5821,7 @@
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
"time": "2022-11-03T14:55:06+00:00"
},
{
"name": "symfony/process",
@ -5869,16 +5887,16 @@
},
{
"name": "symfony/property-access",
"version": "v5.4.11",
"version": "v5.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
"reference": "c641d63e943ed31981bad4b4dcf29fe7da2ffa8c"
"reference": "0f3e8f40a1d3da90f674b3dd772e4777ccde4273"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/c641d63e943ed31981bad4b4dcf29fe7da2ffa8c",
"reference": "c641d63e943ed31981bad4b4dcf29fe7da2ffa8c",
"url": "https://api.github.com/repos/symfony/property-access/zipball/0f3e8f40a1d3da90f674b3dd772e4777ccde4273",
"reference": "0f3e8f40a1d3da90f674b3dd772e4777ccde4273",
"shasum": ""
},
"require": {
@ -5930,7 +5948,7 @@
"reflection"
],
"support": {
"source": "https://github.com/symfony/property-access/tree/v5.4.11"
"source": "https://github.com/symfony/property-access/tree/v5.4.15"
},
"funding": [
{
@ -5946,20 +5964,20 @@
"type": "tidelift"
}
],
"time": "2022-06-27T16:58:25+00:00"
"time": "2022-10-27T07:55:40+00:00"
},
{
"name": "symfony/property-info",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
"reference": "dc7ac44b5ea36c9f7532051b01ba64b1737932d1"
"reference": "12e1f7b3d73b1f3690aa524b92b5de9937507361"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/dc7ac44b5ea36c9f7532051b01ba64b1737932d1",
"reference": "dc7ac44b5ea36c9f7532051b01ba64b1737932d1",
"url": "https://api.github.com/repos/symfony/property-info/zipball/12e1f7b3d73b1f3690aa524b92b5de9937507361",
"reference": "12e1f7b3d73b1f3690aa524b92b5de9937507361",
"shasum": ""
},
"require": {
@ -5974,7 +5992,7 @@
"symfony/dependency-injection": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.10.4",
"doctrine/annotations": "^1.10.4|^2",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"phpstan/phpdoc-parser": "^1.0",
"symfony/cache": "^4.4|^5.0|^6.0",
@ -6021,7 +6039,7 @@
"validator"
],
"support": {
"source": "https://github.com/symfony/property-info/tree/v5.4.14"
"source": "https://github.com/symfony/property-info/tree/v5.4.17"
},
"funding": [
{
@ -6037,7 +6055,7 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:01:20+00:00"
"time": "2022-12-20T11:10:57+00:00"
},
{
"name": "symfony/proxy-manager-bridge",
@ -6108,16 +6126,16 @@
},
{
"name": "symfony/redis-messenger",
"version": "v5.4.13",
"version": "v5.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/redis-messenger.git",
"reference": "d3028b772de91e9aa0342c92ff71c77b130ac9c4"
"reference": "cff610d031586c341b9118f3682c8294d959f929"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/redis-messenger/zipball/d3028b772de91e9aa0342c92ff71c77b130ac9c4",
"reference": "d3028b772de91e9aa0342c92ff71c77b130ac9c4",
"url": "https://api.github.com/repos/symfony/redis-messenger/zipball/cff610d031586c341b9118f3682c8294d959f929",
"reference": "cff610d031586c341b9118f3682c8294d959f929",
"shasum": ""
},
"require": {
@ -6155,7 +6173,7 @@
"description": "Symfony Redis extension Messenger Bridge",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/redis-messenger/tree/v5.4.13"
"source": "https://github.com/symfony/redis-messenger/tree/v5.4.15"
},
"funding": [
{
@ -6171,20 +6189,20 @@
"type": "tidelift"
}
],
"time": "2022-09-11T09:11:59+00:00"
"time": "2022-10-27T07:55:40+00:00"
},
{
"name": "symfony/routing",
"version": "v5.4.11",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "3e01ccd9b2a3a4167ba2b3c53612762300300226"
"reference": "4ce2df9a469c19ba45ca6aca04fec1c358a6e791"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/3e01ccd9b2a3a4167ba2b3c53612762300300226",
"reference": "3e01ccd9b2a3a4167ba2b3c53612762300300226",
"url": "https://api.github.com/repos/symfony/routing/zipball/4ce2df9a469c19ba45ca6aca04fec1c358a6e791",
"reference": "4ce2df9a469c19ba45ca6aca04fec1c358a6e791",
"shasum": ""
},
"require": {
@ -6199,7 +6217,7 @@
"symfony/yaml": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.12",
"doctrine/annotations": "^1.12|^2",
"psr/log": "^1|^2|^3",
"symfony/config": "^5.3|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
@ -6245,7 +6263,7 @@
"url"
],
"support": {
"source": "https://github.com/symfony/routing/tree/v5.4.11"
"source": "https://github.com/symfony/routing/tree/v5.4.17"
},
"funding": [
{
@ -6261,7 +6279,7 @@
"type": "tidelift"
}
],
"time": "2022-07-20T13:00:38+00:00"
"time": "2022-12-20T11:10:57+00:00"
},
{
"name": "symfony/runtime",
@ -6342,16 +6360,16 @@
},
{
"name": "symfony/security-bundle",
"version": "v5.4.11",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
"reference": "86b49feb056b840f2b79a03fcfa2d378d6d34234"
"reference": "5891533fd72ba854b1fd9f633e14dcc089b45362"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/86b49feb056b840f2b79a03fcfa2d378d6d34234",
"reference": "86b49feb056b840f2b79a03fcfa2d378d6d34234",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/5891533fd72ba854b1fd9f633e14dcc089b45362",
"reference": "5891533fd72ba854b1fd9f633e14dcc089b45362",
"shasum": ""
},
"require": {
@ -6378,7 +6396,7 @@
"symfony/twig-bundle": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.10.4",
"doctrine/annotations": "^1.10.4|^2",
"symfony/asset": "^4.4|^5.0|^6.0",
"symfony/browser-kit": "^4.4|^5.0|^6.0",
"symfony/console": "^4.4|^5.0|^6.0",
@ -6424,7 +6442,7 @@
"description": "Provides a tight integration of the Security component into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-bundle/tree/v5.4.11"
"source": "https://github.com/symfony/security-bundle/tree/v5.4.17"
},
"funding": [
{
@ -6440,20 +6458,20 @@
"type": "tidelift"
}
],
"time": "2022-07-20T13:00:38+00:00"
"time": "2022-12-20T11:10:57+00:00"
},
{
"name": "symfony/security-core",
"version": "v5.4.14",
"version": "v5.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
"reference": "0f8b4595ce4725f8f02fbb63729036813645fc2c"
"reference": "4ef922cd626a43b570522cb1616e3d678664c9a0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-core/zipball/0f8b4595ce4725f8f02fbb63729036813645fc2c",
"reference": "0f8b4595ce4725f8f02fbb63729036813645fc2c",
"url": "https://api.github.com/repos/symfony/security-core/zipball/4ef922cd626a43b570522cb1616e3d678664c9a0",
"reference": "4ef922cd626a43b570522cb1616e3d678664c9a0",
"shasum": ""
},
"require": {
@ -6517,7 +6535,7 @@
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-core/tree/v5.4.14"
"source": "https://github.com/symfony/security-core/tree/v5.4.15"
},
"funding": [
{
@ -6533,7 +6551,7 @@
"type": "tidelift"
}
],
"time": "2022-10-01T21:59:28+00:00"
"time": "2022-10-23T10:30:41+00:00"
},
{
"name": "symfony/security-csrf",
@ -6676,16 +6694,16 @@
},
{
"name": "symfony/security-http",
"version": "v5.4.13",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
"reference": "64e9926b8ab8e4460e4dfdc53dc098fed2dad837"
"reference": "863d398f9abedbf3c6da805d4785242000fbe834"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/64e9926b8ab8e4460e4dfdc53dc098fed2dad837",
"reference": "64e9926b8ab8e4460e4dfdc53dc098fed2dad837",
"url": "https://api.github.com/repos/symfony/security-http/zipball/863d398f9abedbf3c6da805d4785242000fbe834",
"reference": "863d398f9abedbf3c6da805d4785242000fbe834",
"shasum": ""
},
"require": {
@ -6741,7 +6759,7 @@
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-http/tree/v5.4.13"
"source": "https://github.com/symfony/security-http/tree/v5.4.17"
},
"funding": [
{
@ -6757,20 +6775,20 @@
"type": "tidelift"
}
],
"time": "2022-09-29T19:14:22+00:00"
"time": "2022-11-26T16:57:54+00:00"
},
{
"name": "symfony/serializer",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
"reference": "21c329453e3c9345b51bf4b67b187c963a4edc45"
"reference": "4ac4fae1cbad2655a0b05f327e7ce8ef310239fb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/serializer/zipball/21c329453e3c9345b51bf4b67b187c963a4edc45",
"reference": "21c329453e3c9345b51bf4b67b187c963a4edc45",
"url": "https://api.github.com/repos/symfony/serializer/zipball/4ac4fae1cbad2655a0b05f327e7ce8ef310239fb",
"reference": "4ac4fae1cbad2655a0b05f327e7ce8ef310239fb",
"shasum": ""
},
"require": {
@ -6782,7 +6800,7 @@
"conflict": {
"doctrine/annotations": "<1.12",
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"phpdocumentor/type-resolver": "<1.4.0|>=1.7.0",
"symfony/dependency-injection": "<4.4",
"symfony/property-access": "<5.4",
"symfony/property-info": "<5.3.13",
@ -6790,7 +6808,7 @@
"symfony/yaml": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.12",
"doctrine/annotations": "^1.12|^2",
"phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0",
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/config": "^4.4|^5.0|^6.0",
@ -6844,7 +6862,7 @@
"description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/serializer/tree/v5.4.14"
"source": "https://github.com/symfony/serializer/tree/v5.4.17"
},
"funding": [
{
@ -6860,7 +6878,7 @@
"type": "tidelift"
}
],
"time": "2022-10-11T15:16:01+00:00"
"time": "2022-12-20T11:10:57+00:00"
},
{
"name": "symfony/service-contracts",
@ -7009,16 +7027,16 @@
},
{
"name": "symfony/string",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "089e7237497fae7a9c404d0c3aeb8db3254733e4"
"reference": "55733a8664b8853b003e70251c58bc8cb2d82a6b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/089e7237497fae7a9c404d0c3aeb8db3254733e4",
"reference": "089e7237497fae7a9c404d0c3aeb8db3254733e4",
"url": "https://api.github.com/repos/symfony/string/zipball/55733a8664b8853b003e70251c58bc8cb2d82a6b",
"reference": "55733a8664b8853b003e70251c58bc8cb2d82a6b",
"shasum": ""
},
"require": {
@ -7075,7 +7093,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v5.4.14"
"source": "https://github.com/symfony/string/tree/v5.4.17"
},
"funding": [
{
@ -7091,7 +7109,7 @@
"type": "tidelift"
}
],
"time": "2022-10-05T15:16:54+00:00"
"time": "2022-12-12T15:54:21+00:00"
},
{
"name": "symfony/translation",
@ -7270,16 +7288,16 @@
},
{
"name": "symfony/twig-bridge",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
"reference": "60db1cc3f5b098eb194c00a10489148a03861371"
"reference": "5a35a669639ac25e4cb3d6d9c968924d96a7eae6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/60db1cc3f5b098eb194c00a10489148a03861371",
"reference": "60db1cc3f5b098eb194c00a10489148a03861371",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/5a35a669639ac25e4cb3d6d9c968924d96a7eae6",
"reference": "5a35a669639ac25e4cb3d6d9c968924d96a7eae6",
"shasum": ""
},
"require": {
@ -7299,7 +7317,7 @@
"symfony/workflow": "<5.2"
},
"require-dev": {
"doctrine/annotations": "^1.12",
"doctrine/annotations": "^1.12|^2",
"egulias/email-validator": "^2.1.10|^3",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"symfony/asset": "^4.4|^5.0|^6.0",
@ -7371,7 +7389,7 @@
"description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bridge/tree/v5.4.14"
"source": "https://github.com/symfony/twig-bridge/tree/v5.4.17"
},
"funding": [
{
@ -7387,20 +7405,20 @@
"type": "tidelift"
}
],
"time": "2022-10-11T12:49:22+00:00"
"time": "2022-12-20T11:10:57+00:00"
},
{
"name": "symfony/twig-bundle",
"version": "v5.4.8",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
"reference": "c992b4474c3a31f3c40a1ca593d213833f91b818"
"reference": "ac21af4eff72ecd65680d2f3d163b5794ce82fc4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/c992b4474c3a31f3c40a1ca593d213833f91b818",
"reference": "c992b4474c3a31f3c40a1ca593d213833f91b818",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/ac21af4eff72ecd65680d2f3d163b5794ce82fc4",
"reference": "ac21af4eff72ecd65680d2f3d163b5794ce82fc4",
"shasum": ""
},
"require": {
@ -7420,7 +7438,7 @@
"symfony/translation": "<5.0"
},
"require-dev": {
"doctrine/annotations": "^1.10.4",
"doctrine/annotations": "^1.10.4|^2",
"doctrine/cache": "^1.0|^2.0",
"symfony/asset": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.3|^6.0",
@ -7460,7 +7478,7 @@
"description": "Provides a tight integration of Twig into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bundle/tree/v5.4.8"
"source": "https://github.com/symfony/twig-bundle/tree/v5.4.17"
},
"funding": [
{
@ -7476,20 +7494,20 @@
"type": "tidelift"
}
],
"time": "2022-04-03T13:03:10+00:00"
"time": "2022-12-20T11:10:57+00:00"
},
{
"name": "symfony/validator",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
"reference": "717b1eabbc51795369400697458f7e813fc6c71e"
"reference": "621b820204a238d754f7f60241fcbdb1687641ea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/717b1eabbc51795369400697458f7e813fc6c71e",
"reference": "717b1eabbc51795369400697458f7e813fc6c71e",
"url": "https://api.github.com/repos/symfony/validator/zipball/621b820204a238d754f7f60241fcbdb1687641ea",
"reference": "621b820204a238d754f7f60241fcbdb1687641ea",
"shasum": ""
},
"require": {
@ -7516,7 +7534,7 @@
"symfony/yaml": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.13",
"doctrine/annotations": "^1.13|^2",
"doctrine/cache": "^1.11|^2.0",
"egulias/email-validator": "^2.1.10|^3",
"symfony/cache": "^4.4|^5.0|^6.0",
@ -7573,7 +7591,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/validator/tree/v5.4.14"
"source": "https://github.com/symfony/validator/tree/v5.4.17"
},
"funding": [
{
@ -7589,20 +7607,20 @@
"type": "tidelift"
}
],
"time": "2022-10-01T21:59:28+00:00"
"time": "2022-12-21T19:20:17+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "6894d06145fefebd9a4c7272baa026a1c394a430"
"reference": "ad74890513d07060255df2575703daf971de92c7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/6894d06145fefebd9a4c7272baa026a1c394a430",
"reference": "6894d06145fefebd9a4c7272baa026a1c394a430",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/ad74890513d07060255df2575703daf971de92c7",
"reference": "ad74890513d07060255df2575703daf971de92c7",
"shasum": ""
},
"require": {
@ -7662,7 +7680,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v5.4.14"
"source": "https://github.com/symfony/var-dumper/tree/v5.4.17"
},
"funding": [
{
@ -7678,20 +7696,20 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:01:20+00:00"
"time": "2022-12-22T10:31:03+00:00"
},
{
"name": "symfony/var-exporter",
"version": "v5.4.10",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
"reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340"
"reference": "2adac0a9b55f9fb40b983b790509581dc3db0fff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/8fc03ee75eeece3d9be1ef47d26d79bea1afb340",
"reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/2adac0a9b55f9fb40b983b790509581dc3db0fff",
"reference": "2adac0a9b55f9fb40b983b790509581dc3db0fff",
"shasum": ""
},
"require": {
@ -7735,7 +7753,7 @@
"serialize"
],
"support": {
"source": "https://github.com/symfony/var-exporter/tree/v5.4.10"
"source": "https://github.com/symfony/var-exporter/tree/v5.4.17"
},
"funding": [
{
@ -7751,7 +7769,7 @@
"type": "tidelift"
}
],
"time": "2022-05-27T12:56:18+00:00"
"time": "2022-12-22T10:10:04+00:00"
},
{
"name": "symfony/web-link",
@ -7842,16 +7860,16 @@
},
{
"name": "symfony/webpack-encore-bundle",
"version": "v1.15.1",
"version": "v1.16.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/webpack-encore-bundle.git",
"reference": "718673b1e758533614190ae74d07305a72bc66a9"
"reference": "bb399930c0299866258b616a74a27b50b94c5d45"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/718673b1e758533614190ae74d07305a72bc66a9",
"reference": "718673b1e758533614190ae74d07305a72bc66a9",
"url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/bb399930c0299866258b616a74a27b50b94c5d45",
"reference": "bb399930c0299866258b616a74a27b50b94c5d45",
"shasum": ""
},
"require": {
@ -7895,7 +7913,7 @@
"description": "Integration with your Symfony app & Webpack Encore!",
"support": {
"issues": "https://github.com/symfony/webpack-encore-bundle/issues",
"source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.15.1"
"source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.16.0"
},
"funding": [
{
@ -7911,20 +7929,20 @@
"type": "tidelift"
}
],
"time": "2022-07-13T17:07:35+00:00"
"time": "2022-10-18T15:21:06+00:00"
},
{
"name": "symfony/yaml",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "e83fe9a72011f07c662da46a05603d66deeeb487"
"reference": "edcdc11498108f8967fe95118a7ec8624b94760e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/e83fe9a72011f07c662da46a05603d66deeeb487",
"reference": "e83fe9a72011f07c662da46a05603d66deeeb487",
"url": "https://api.github.com/repos/symfony/yaml/zipball/edcdc11498108f8967fe95118a7ec8624b94760e",
"reference": "edcdc11498108f8967fe95118a7ec8624b94760e",
"shasum": ""
},
"require": {
@ -7970,7 +7988,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v5.4.14"
"source": "https://github.com/symfony/yaml/tree/v5.4.17"
},
"funding": [
{
@ -7986,20 +8004,20 @@
"type": "tidelift"
}
],
"time": "2022-10-03T15:15:50+00:00"
"time": "2022-12-13T09:57:04+00:00"
},
{
"name": "twig/extra-bundle",
"version": "v3.4.0",
"version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/twig-extra-bundle.git",
"reference": "2e58256b0e9fe52f30149347c0547e4633304765"
"reference": "edfcdbdc943b52101011d57ec546af393dc56537"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/2e58256b0e9fe52f30149347c0547e4633304765",
"reference": "2e58256b0e9fe52f30149347c0547e4633304765",
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/edfcdbdc943b52101011d57ec546af393dc56537",
"reference": "edfcdbdc943b52101011d57ec546af393dc56537",
"shasum": ""
},
"require": {
@ -8022,7 +8040,7 @@
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "3.2-dev"
"dev-master": "3.5-dev"
}
},
"autoload": {
@ -8053,7 +8071,7 @@
"twig"
],
"support": {
"source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.4.0"
"source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.5.0"
},
"funding": [
{
@ -8065,20 +8083,20 @@
"type": "tidelift"
}
],
"time": "2022-01-04T13:58:53+00:00"
"time": "2022-12-27T12:23:36+00:00"
},
{
"name": "twig/twig",
"version": "v3.4.3",
"version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58"
"reference": "3ffcf4b7d890770466da3b2666f82ac054e7ec72"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/c38fd6b0b7f370c198db91ffd02e23b517426b58",
"reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/3ffcf4b7d890770466da3b2666f82ac054e7ec72",
"reference": "3ffcf4b7d890770466da3b2666f82ac054e7ec72",
"shasum": ""
},
"require": {
@ -8093,7 +8111,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
"dev-master": "3.5-dev"
}
},
"autoload": {
@ -8129,7 +8147,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.4.3"
"source": "https://github.com/twigphp/Twig/tree/v3.5.0"
},
"funding": [
{
@ -8141,7 +8159,7 @@
"type": "tidelift"
}
],
"time": "2022-09-28T08:42:51+00:00"
"time": "2022-12-27T12:28:18+00:00"
},
{
"name": "webmozart/assert",
@ -8203,6 +8221,171 @@
}
],
"packages-dev": [
{
"name": "doctrine/data-fixtures",
"version": "1.6.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/data-fixtures.git",
"reference": "c27821d038e64f1bfc852a94064d65d2a75ad01f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/c27821d038e64f1bfc852a94064d65d2a75ad01f",
"reference": "c27821d038e64f1bfc852a94064d65d2a75ad01f",
"shasum": ""
},
"require": {
"doctrine/persistence": "^1.3.3|^2.0|^3.0",
"php": "^7.2 || ^8.0"
},
"conflict": {
"doctrine/dbal": "<2.13",
"doctrine/orm": "<2.12",
"doctrine/phpcr-odm": "<1.3.0"
},
"require-dev": {
"doctrine/coding-standard": "^10.0",
"doctrine/dbal": "^2.13 || ^3.0",
"doctrine/deprecations": "^1.0",
"doctrine/mongodb-odm": "^1.3.0 || ^2.0.0",
"doctrine/orm": "^2.12",
"ext-sqlite3": "*",
"phpstan/phpstan": "^1.5",
"phpunit/phpunit": "^8.5 || ^9.5",
"symfony/cache": "^5.0 || ^6.0",
"vimeo/psalm": "^4.10"
},
"suggest": {
"alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)",
"doctrine/mongodb-odm": "For loading MongoDB ODM fixtures",
"doctrine/orm": "For loading ORM fixtures",
"doctrine/phpcr-odm": "For loading PHPCR ODM fixtures"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\DataFixtures\\": "lib/Doctrine/Common/DataFixtures"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
}
],
"description": "Data Fixtures for all Doctrine Object Managers",
"homepage": "https://www.doctrine-project.org",
"keywords": [
"database"
],
"support": {
"issues": "https://github.com/doctrine/data-fixtures/issues",
"source": "https://github.com/doctrine/data-fixtures/tree/1.6.3"
},
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
"type": "custom"
},
{
"url": "https://www.patreon.com/phpdoctrine",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdata-fixtures",
"type": "tidelift"
}
],
"time": "2023-01-07T15:10:22+00:00"
},
{
"name": "doctrine/doctrine-fixtures-bundle",
"version": "3.4.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineFixturesBundle.git",
"reference": "601988c5b46dbd20a0f886f967210aba378a6fd5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/601988c5b46dbd20a0f886f967210aba378a6fd5",
"reference": "601988c5b46dbd20a0f886f967210aba378a6fd5",
"shasum": ""
},
"require": {
"doctrine/data-fixtures": "^1.3",
"doctrine/doctrine-bundle": "^1.11|^2.0",
"doctrine/orm": "^2.6.0",
"doctrine/persistence": "^1.3.7|^2.0|^3.0",
"php": "^7.1 || ^8.0",
"symfony/config": "^3.4|^4.3|^5.0|^6.0",
"symfony/console": "^3.4|^4.3|^5.0|^6.0",
"symfony/dependency-injection": "^3.4.47|^4.3|^5.0|^6.0",
"symfony/doctrine-bridge": "^3.4|^4.1|^5.0|^6.0",
"symfony/http-kernel": "^3.4|^4.3|^5.0|^6.0"
},
"require-dev": {
"doctrine/coding-standard": "^9",
"phpstan/phpstan": "^1.4.10",
"phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20",
"symfony/phpunit-bridge": "^6.0.8",
"vimeo/psalm": "^4.22"
},
"type": "symfony-bundle",
"autoload": {
"psr-4": {
"Doctrine\\Bundle\\FixturesBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Doctrine Project",
"homepage": "https://www.doctrine-project.org"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony DoctrineFixturesBundle",
"homepage": "https://www.doctrine-project.org",
"keywords": [
"Fixture",
"persistence"
],
"support": {
"issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues",
"source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.4.2"
},
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
"type": "custom"
},
{
"url": "https://www.patreon.com/phpdoctrine",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-fixtures-bundle",
"type": "tidelift"
}
],
"time": "2022-04-28T17:58:29+00:00"
},
{
"name": "myclabs/deep-copy",
"version": "1.11.0",
@ -8264,16 +8447,16 @@
},
{
"name": "nikic/php-parser",
"version": "v4.15.1",
"version": "v4.15.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900"
"reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900",
"reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc",
"reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc",
"shasum": ""
},
"require": {
@ -8314,9 +8497,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1"
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2"
},
"time": "2022-09-04T07:30:47+00:00"
"time": "2022-11-12T15:38:23+00:00"
},
{
"name": "phar-io/manifest",
@ -8431,16 +8614,16 @@
},
{
"name": "phpunit/php-code-coverage",
"version": "9.2.17",
"version": "9.2.23",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8"
"reference": "9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8",
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c",
"reference": "9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c",
"shasum": ""
},
"require": {
@ -8496,7 +8679,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17"
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.23"
},
"funding": [
{
@ -8504,7 +8687,7 @@
"type": "github"
}
],
"time": "2022-08-30T12:24:04+00:00"
"time": "2022-12-28T12:41:10+00:00"
},
{
"name": "phpunit/php-file-iterator",
@ -8749,16 +8932,16 @@
},
{
"name": "phpunit/phpunit",
"version": "9.5.25",
"version": "9.5.27",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d"
"reference": "a2bc7ffdca99f92d959b3f2270529334030bba38"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a2bc7ffdca99f92d959b3f2270529334030bba38",
"reference": "a2bc7ffdca99f92d959b3f2270529334030bba38",
"shasum": ""
},
"require": {
@ -8831,7 +9014,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25"
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.27"
},
"funding": [
{
@ -8847,7 +9030,7 @@
"type": "tidelift"
}
],
"time": "2022-09-25T03:44:45+00:00"
"time": "2022-12-09T07:31:23+00:00"
},
{
"name": "sebastian/cli-parser",
@ -9887,16 +10070,16 @@
},
{
"name": "symfony/css-selector",
"version": "v5.4.11",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "c1681789f059ab756001052164726ae88512ae3d"
"reference": "052ef49b660f9ad2a3adb311c555c9bc11ba61f4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/c1681789f059ab756001052164726ae88512ae3d",
"reference": "c1681789f059ab756001052164726ae88512ae3d",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/052ef49b660f9ad2a3adb311c555c9bc11ba61f4",
"reference": "052ef49b660f9ad2a3adb311c555c9bc11ba61f4",
"shasum": ""
},
"require": {
@ -9933,7 +10116,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/css-selector/tree/v5.4.11"
"source": "https://github.com/symfony/css-selector/tree/v5.4.17"
},
"funding": [
{
@ -9949,7 +10132,7 @@
"type": "tidelift"
}
],
"time": "2022-06-27T16:58:25+00:00"
"time": "2022-12-23T11:40:44+00:00"
},
{
"name": "symfony/debug-bundle",
@ -10032,16 +10215,16 @@
},
{
"name": "symfony/dom-crawler",
"version": "v5.4.12",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
"reference": "291c1e92281a09152dda089f782e23dedd34bd4f"
"reference": "32a07d910edc138a1dd5508c17c6b9bc1eb27a1b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/291c1e92281a09152dda089f782e23dedd34bd4f",
"reference": "291c1e92281a09152dda089f782e23dedd34bd4f",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/32a07d910edc138a1dd5508c17c6b9bc1eb27a1b",
"reference": "32a07d910edc138a1dd5508c17c6b9bc1eb27a1b",
"shasum": ""
},
"require": {
@ -10087,7 +10270,7 @@
"description": "Eases DOM navigation for HTML and XML documents",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dom-crawler/tree/v5.4.12"
"source": "https://github.com/symfony/dom-crawler/tree/v5.4.17"
},
"funding": [
{
@ -10103,20 +10286,20 @@
"type": "tidelift"
}
],
"time": "2022-08-03T13:09:21+00:00"
"time": "2022-12-22T10:31:03+00:00"
},
{
"name": "symfony/maker-bundle",
"version": "v1.47.0",
"version": "v1.48.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
"reference": "e607f129d29a6c1e9a9e1ef3d229d653311d58f3"
"reference": "2e428e8432e9879187672fe08f1cc335e2a31dd6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/e607f129d29a6c1e9a9e1ef3d229d653311d58f3",
"reference": "e607f129d29a6c1e9a9e1ef3d229d653311d58f3",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/2e428e8432e9879187672fe08f1cc335e2a31dd6",
"reference": "2e428e8432e9879187672fe08f1cc335e2a31dd6",
"shasum": ""
},
"require": {
@ -10180,7 +10363,7 @@
],
"support": {
"issues": "https://github.com/symfony/maker-bundle/issues",
"source": "https://github.com/symfony/maker-bundle/tree/v1.47.0"
"source": "https://github.com/symfony/maker-bundle/tree/v1.48.0"
},
"funding": [
{
@ -10196,20 +10379,20 @@
"type": "tidelift"
}
],
"time": "2022-10-04T15:05:10+00:00"
"time": "2022-11-14T10:48:46+00:00"
},
{
"name": "symfony/phpunit-bridge",
"version": "v6.1.6",
"version": "v6.2.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
"reference": "07cf788ac9ae83b59d46599bb5098c3add88c68b"
"reference": "3766b8269d3bac5c214a04ebd6870e71e52bcb60"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/07cf788ac9ae83b59d46599bb5098c3add88c68b",
"reference": "07cf788ac9ae83b59d46599bb5098c3add88c68b",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/3766b8269d3bac5c214a04ebd6870e71e52bcb60",
"reference": "3766b8269d3bac5c214a04ebd6870e71e52bcb60",
"shasum": ""
},
"require": {
@ -10263,7 +10446,7 @@
"description": "Provides utilities for PHPUnit, especially user deprecation notices management",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/phpunit-bridge/tree/v6.1.6"
"source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.3"
},
"funding": [
{
@ -10279,20 +10462,20 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:04:03+00:00"
"time": "2022-12-28T14:26:22+00:00"
},
{
"name": "symfony/web-profiler-bundle",
"version": "v5.4.14",
"version": "v5.4.17",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
"reference": "e41ebd5411908bc8afdc848ccf68918ecb243c02"
"reference": "6c7635fb150af892f6a79f016b6c5386ab112922"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/e41ebd5411908bc8afdc848ccf68918ecb243c02",
"reference": "e41ebd5411908bc8afdc848ccf68918ecb243c02",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/6c7635fb150af892f6a79f016b6c5386ab112922",
"reference": "6c7635fb150af892f6a79f016b6c5386ab112922",
"shasum": ""
},
"require": {
@ -10343,7 +10526,7 @@
"description": "Provides a development tool that gives detailed information about the execution of any request",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.14"
"source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.17"
},
"funding": [
{
@ -10359,7 +10542,7 @@
"type": "tidelift"
}
],
"time": "2022-10-01T21:59:28+00:00"
"time": "2022-12-13T13:09:23+00:00"
},
{
"name": "theseer/tokenizer",
@ -10423,5 +10606,5 @@
"ext-iconv": "*"
},
"platform-dev": [],
"plugin-api-version": "2.3.0"
"plugin-api-version": "2.0.0"
}

View File

@ -14,4 +14,5 @@ return [
Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
Knp\Bundle\PaginatorBundle\KnpPaginatorBundle::class => ['all' => true],
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
];

View File

@ -5,14 +5,26 @@ security:
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
# https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider
providers:
users_in_memory: { memory: null }
# used to reload user from session & other features (e.g. switch_user)
app_user_provider:
entity:
class: App\Entity\User
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
lazy: true
provider: users_in_memory
provider: app_user_provider
entry_point: form_login
form_login:
login_path: app_login
check_path: app_login
username_parameter: email
password_parameter: password
enable_csrf: true
logout: true
# activate different ways to authenticate
# https://symfony.com/doc/current/security.html#the-firewall
@ -23,7 +35,8 @@ security:
# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
# - { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/front, roles: ROLE_ADMIN }
- { path: ^/admin, roles: ROLE_ADMIN }
# - { path: ^/profile, roles: ROLE_USER }
when@test:

View File

@ -0,0 +1,53 @@
FROM php:8.1-apache
RUN a2enmod rewrite
ARG PHP_VERSION="8.1"
ENV PHP_VERSION $PHP_VERSION
RUN export DEBIAN_FRONTEND=noninteractive \
&& apt-get update \
&& apt-get -y upgrade \
&& apt-get --no-install-recommends -yq install supervisor libicu-dev \
libwebp-dev \
libjpeg62-turbo-dev \
libpng-dev libzip-dev libxpm-dev \
libfreetype6-dev \
vim wget git \
apache2
RUN docker-php-ext-install pdo pdo_mysql zip \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd \
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl
RUN wget https://getcomposer.org/download/2.0.9/composer.phar \
&& mv composer.phar /usr/bin/composer && chmod +x /usr/bin/composer
RUN wget -O- https://deb.nodesource.com/setup_18.x | bash - \
&& apt-get install -y nodejs \
&& npm install --global yarn
COPY apache.conf /etc/apache2/sites-enabled/000-default.conf
WORKDIR /var/www
RUN wget -O- https://github.com/boxboat/fixuid/releases/download/v0.5.1/fixuid-0.5.1-linux-amd64.tar.gz | tar -C /usr/local/bin -xzf - \
&& chown root:root /usr/local/bin/fixuid \
&& chmod 4755 /usr/local/bin/fixuid \
&& mkdir -p /etc/fixuid
COPY fixuid.yaml /etc/fixuid/config.yaml
COPY supervisor.ini /etc/supervisor/supervisor.ini
RUN chmod +x /etc/supervisor/supervisor.ini
RUN chown www-data:www-data /etc/supervisor/supervisor.ini
COPY init.sh /init.sh
RUN chmod +x /init.sh
RUN chown www-data:www-data /init.sh
ENTRYPOINT ["/usr/local/bin/fixuid"]
USER www-data
CMD ["/init.sh"]

View File

@ -0,0 +1,16 @@
<VirtualHost *:80>
DocumentRoot /var/www/public
<Directory /var/www/public>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
</Directory>
CustomLog /dev/stdout combined
ErrorLog /dev/stderr
</VirtualHost>

View File

@ -0,0 +1,4 @@
user: www-data
group: www-data
paths:
- /var/www/var

View File

@ -0,0 +1,7 @@
#!/bin/bash
yarn install
yarn encore dev
bin/console d:s:u -f --complete
bin/console d:f:l -n
/usr/bin/supervisord -c /etc/supervisor/supervisor.ini

View File

@ -0,0 +1,12 @@
[supervisord]
nodaemon=true
[program:apache2]
environment=HOSTNAME="%(ENV_HOSTNAME)s"
command = apache2ctl -D FOREGROUND
user = www-data
autostart = true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

View File

@ -1,14 +1,39 @@
version: '3'
version: "3"
services:
###> doctrine/doctrine-bundle ###
database:
ports:
- "5432"
###< doctrine/doctrine-bundle ###
mariadb:
image: mariadb:10.10
environment:
MYSQL_DATABASE: ethik
MYSQL_USER: ethik
MYSQL_PASSWORD: ethik
MYSQL_ROOT_PASSWORD: ethik
TZ: Europe/Paris
volumes:
- ./containers/mariadb/init-db.d:/docker-entrypoint-initdb.d/:ro
- mariadb_data:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
ethik_tag:
build:
context: ./containers/ethikTag
user: ${FIXUID:-1000}:${FIXGID:-1000}
###> symfony/mailer ###
mailer:
image: schickling/mailcatcher
ports: [1025, 1080]
###< symfony/mailer ###
volumes:
- .:/var/www
ports:
- 8000:80
tmpfs:
- /var/www/var:uid=${FIXUID:-1000},gid=${FIXGID:-1000}
depends_on:
- mariadb
###> doctrine/doctrine-bundle ###
adminer:
image: adminer:latest
ports:
- 8082:8080
volumes:
###> doctrine/doctrine-bundle ###
mariadb_data:
###< doctrine/doctrine-bundle ###

View File

@ -1,21 +1,36 @@
version: '3'
version: "3"
services:
###> doctrine/doctrine-bundle ###
database:
image: postgres:${POSTGRES_VERSION:-14}-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB:-app}
# You should definitely change the password in production
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!}
POSTGRES_USER: ${POSTGRES_USER:-app}
ethik_tag:
build:
context: ./containers/ethikTag
volumes:
- db-data:/var/lib/postgresql/data:rw
- .:/var/www
ports:
- 8000:80
###> doctrine/doctrine-bundle ###
mariadb:
image: mariadb:10.10
environment:
MYSQL_DATABASE: ethik
MYSQL_USER: ethik
MYSQL_PASSWORD: ethik
MYSQL_ROOT_PASSWORD: ethik
TZ: Europe/Paris
volumes:
- ./containers/mariadb/init-db.d:/docker-entrypoint-initdb.d/:ro
- mariadb_data:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
# You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
# - ./docker/db/data:/var/lib/postgresql/data:rw
###< doctrine/doctrine-bundle ###
adminer:
image: adminer:latest
ports:
- 8082:8080
volumes:
###> doctrine/doctrine-bundle ###
db-data:
mariadb_data:
###< doctrine/doctrine-bundle ###

View File

@ -22,9 +22,11 @@
"build": "encore production --progress"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^6.2.1",
"@popperjs/core": "^2.11.6",
"bootstrap": "^5.2.2",
"jQuery": "^1.7.4",
"fortawesome": "^0.0.1-security",
"jquery": "^3.6.1",
"tom-select": "^2.2.2"
}
}

70
public/.htaccess Normal file
View File

@ -0,0 +1,70 @@
# Use the front controller as index file. It serves as a fallback solution when
# every other rewrite/redirect fails (e.g. in an aliased environment without
# mod_rewrite). Additionally, this reduces the matching process for the
# start page (path "/") because otherwise Apache will apply the rewriting rules
# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
DirectoryIndex index.php
# By default, Apache does not evaluate symbolic links if you did not enable this
# feature in your server configuration. Uncomment the following line if you
# install assets as symlinks or if you experience problems related to symlinks
# when compiling LESS/Sass/CoffeScript assets.
# Options +FollowSymlinks
# Disabling MultiViews prevents unwanted negotiation, e.g. "/index" should not resolve
# to the front controller "/index.php" but be rewritten to "/index.php/index".
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
# This Option needs to be enabled for RewriteRule, otherwise it will show an error like
# 'Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden'
Options +FollowSymlinks
RewriteEngine On
# Determine the RewriteBase automatically and set it as environment variable.
# If you are using Apache aliases to do mass virtual hosting or installed the
# project in a subdirectory, the base path will be prepended to allow proper
# resolution of the index.php file and to redirect to the correct URI. It will
# work in environments without path prefix as well, providing a safe, one-size
# fits all solution. But as you do not need it in this case, you can comment
# the following 2 lines to eliminate the overhead.
RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$
RewriteRule .* - [E=BASE:%1]
# Sets the HTTP_AUTHORIZATION header removed by Apache
RewriteCond %{HTTP:Authorization} .+
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]
# Redirect to URI without front controller to prevent duplicate content
# (with and without `/index.php`). Only do this redirect on the initial
# rewrite by Apache and not on subsequent cycles. Otherwise we would get an
# endless redirect loop (request -> rewrite to front controller ->
# redirect -> request -> ...).
# So in case you get a "too many redirects" error or you always get redirected
# to the start page because your Apache does not expose the REDIRECT_STATUS
# environment variable, you have 2 choices:
# - disable this feature by commenting the following 2 lines or
# - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
# following RewriteCond (best solution)
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
# Rewrite all other queries to the front controller.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
# When mod_rewrite is not available, we instruct a temporary redirect of
# the start page to the front controller explicitly so that the website
# and the generated links can still be used.
RedirectMatch 307 ^/$ /index.php/
# RedirectTemp cannot be used instead
</IfModule>
</IfModule>

15948
public/build/adminStyle.css Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,22 @@
"use strict";
(self["webpackChunk"] = self["webpackChunk"] || []).push([["adminStyle"],{
/***/ "./assets/styles/main.scss":
/*!*********************************!*\
!*** ./assets/styles/main.scss ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin
/***/ })
},
/******/ __webpack_require__ => { // webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
/******/ var __webpack_exports__ = (__webpack_exec__("./assets/styles/main.scss"));
/******/ }
]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW5TdHlsZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL21haW4uc2Nzcz8xZjFhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==

380
public/build/app.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
{
"entrypoints": {
"app": {
"js": [
"/build/runtime.js",
"/build/vendors-node_modules_core-js_modules_es_array_for-each_js-node_modules_core-js_modules_es_arr-9c7bdc.js",
"/build/app.js"
]
},
"adminStyle": {
"js": [
"/build/runtime.js",
"/build/adminStyle.js"
],
"css": [
"/build/adminStyle.css"
]
},
"frontStyle": {
"js": [
"/build/runtime.js",
"/build/frontStyle.js"
],
"css": [
"/build/frontStyle.css"
]
}
}
}

14967
public/build/frontStyle.css Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,22 @@
"use strict";
(self["webpackChunk"] = self["webpackChunk"] || []).push([["frontStyle"],{
/***/ "./assets/styles/front/front.scss":
/*!****************************************!*\
!*** ./assets/styles/front/front.scss ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin
/***/ })
},
/******/ __webpack_require__ => { // webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
/******/ var __webpack_exports__ = (__webpack_exec__("./assets/styles/front/front.scss"));
/******/ }
]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRTdHlsZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL2Zyb250L2Zyb250LnNjc3M/MDc5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=

View File

@ -0,0 +1,9 @@
{
"build/app.js": "/build/app.js",
"build/adminStyle.css": "/build/adminStyle.css",
"build/adminStyle.js": "/build/adminStyle.js",
"build/frontStyle.css": "/build/frontStyle.css",
"build/frontStyle.js": "/build/frontStyle.js",
"build/runtime.js": "/build/runtime.js",
"build/vendors-node_modules_core-js_modules_es_array_for-each_js-node_modules_core-js_modules_es_arr-9c7bdc.js": "/build/vendors-node_modules_core-js_modules_es_array_for-each_js-node_modules_core-js_modules_es_arr-9c7bdc.js"
}

175
public/build/runtime.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -7,3 +7,4 @@ require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
return function (array $context) {
return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#bae1ed;}.cls-2{fill:#8cd0e4;}.cls-3{fill:#72bacc;}.cls-4{fill:#e25a5a;}.cls-5{fill:#ce5555;}.cls-6{fill:#eb6570;}.cls-7{fill:#fff;}.cls-8{fill:#222227;}</style></defs><title>Poche_sang</title><g id="Calque_3" data-name="Calque 3"><path class="cls-1" d="M146.7,217.13h-6.83a28.3,28.3,0,0,0,28.3,28.31h13.66a28.29,28.29,0,0,0,28.3-28.31V210.3a28.29,28.29,0,0,0-28.3-28.3H168.17a28.3,28.3,0,0,0-28.3,28.3v6.83h13.66V210.3a14.65,14.65,0,0,1,14.64-14.64h13.66a14.65,14.65,0,0,1,14.64,14.64v6.83a14.63,14.63,0,0,1-14.64,14.64H168.17a14.63,14.63,0,0,1-14.64-14.64Z"/><path class="cls-2" d="M255,220.06H95a46.85,46.85,0,0,0-46.84,46.85V503.09A87.83,87.83,0,0,0,136,590.93H214a87.83,87.83,0,0,0,87.83-87.84V266.91A46.85,46.85,0,0,0,255,220.06Z"/><path class="cls-3" d="M254.5,220.06h-15c-6.05,90.65-37.08,282.42-190.85,296.59a87.86,87.86,0,0,0,86.79,74.28h78.08a87.83,87.83,0,0,0,87.83-87.84V266.91A46.85,46.85,0,0,0,254.5,220.06Z"/><path class="cls-4" d="M292.11,399.19c-1.35.95-16.69,6.1-18.29,6.72C239.45,419.26,198,410.45,163,404.74c-2.28-.37-4.54-.77-6.8-1.2h-108v99.55A87.83,87.83,0,0,0,136,590.93H214a87.83,87.83,0,0,0,87.83-87.84V403.54Z"/><path class="cls-5" d="M273.3,405.91c-24.68,9.58-53,7.75-80,3.83-28.25,55.35-73.2,100.33-144.68,106.91.2,1.32.44,2.64.7,4,.13.65.29,1.3.44,1.95s.31,1.41.49,2.1.36,1.33.54,2,.37,1.33.57,2,.42,1.32.64,2,.42,1.29.65,1.93.47,1.29.72,1.94.49,1.26.74,1.88.53,1.27.8,1.9l.84,1.85c.29.61.58,1.22.88,1.83s.62,1.22.93,1.83.62,1.18.94,1.76.69,1.21,1,1.82.65,1.12,1,1.67.8,1.24,1.2,1.86.65,1,1,1.53c.54.79,1.11,1.58,1.68,2.35q.64.9,1.32,1.77c.58.76,1.15,1.51,1.76,2.23.36.45.74.88,1.12,1.32s1,1.17,1.5,1.74.83.89,1.24,1.33,1,1.07,1.53,1.6.87.87,1.32,1.3,1,1,1.58,1.51.91.83,1.38,1.24,1.09,1,1.65,1.43l1.42,1.18c.58.46,1.16.92,1.75,1.37s1,.74,1.44,1.09l1.87,1.33c.47.33,1,.67,1.43,1,.68.45,1.37.88,2.05,1.32l1.36.85c.83.5,1.67,1,2.51,1.44.34.19.67.39,1,.57,1.18.64,2.38,1.26,3.59,1.84l1,.48c.89.41,1.79.83,2.7,1.21l1.43.59,2.37.93c.53.2,1.07.37,1.6.56.76.27,1.53.54,2.3.78l1.68.52,2.3.65,1.74.44q1.16.28,2.34.54l1.75.37,2.42.43,1.73.28c.85.12,1.7.22,2.55.32.55.07,1.11.14,1.67.19.94.09,1.89.16,2.84.22l1.42.1c1.43.07,2.87.11,4.32.11h78.08a87.83,87.83,0,0,0,87.83-87.84V403.54l-9.76-4.35C290.24,400.14,274.9,405.29,273.3,405.91Z"/><path class="cls-6" d="M55.93,405.49s18.55-16.59,83.94-11.71,139.56,13.74,154.2,5.41c0,0-36.11,34.61-117.12,20.94S61.79,404.52,55.93,405.49Z"/><path class="cls-1" d="M255,233.73a33.21,33.21,0,0,1,33.18,33.18V503.09A74.25,74.25,0,0,1,214,577.26H136a74.25,74.25,0,0,1-74.17-74.17V266.91A33.21,33.21,0,0,1,95,233.73H255m0-13.67H95a46.85,46.85,0,0,0-46.84,46.85V503.09A87.83,87.83,0,0,0,136,590.93H214a87.83,87.83,0,0,0,87.83-87.84V266.91A46.85,46.85,0,0,0,255,220.06Z"/><rect class="cls-1" x="157.92" y="582.14" width="34.16" height="36.11"/><path class="cls-7" d="M100.35,414.81c0,4.7,5.88,8.52,13.14,8.52h123c7.26,0,13.14-3.82,13.14-8.52V379.37c0-4.71-5.88-8.52-13.14-8.52h-123c-7.26,0-13.14,3.81-13.14,8.52Z"/><path class="cls-8" d="M113.19,393.76H236.81a2.39,2.39,0,1,0,0-4.78H113.19a2.39,2.39,0,0,0,0,4.78"/><path class="cls-8" d="M113.19,408.69H236.81a2.39,2.39,0,0,0,0-4.78H113.19a2.39,2.39,0,0,0,0,4.78"/></g></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#bae1ed;}.cls-2{fill:#8cd0e4;}.cls-3{fill:#72bacc;}.cls-4{fill:#e25a5a;}.cls-5{fill:#ce5555;}.cls-6{fill:#eb6570;}.cls-7{fill:#fff;}.cls-8{fill:#222227;}.cls-9{fill:#3aaa35;}</style></defs><title>Poche_sang2</title><g id="Calque_3" data-name="Calque 3"><path class="cls-1" d="M146.7,217.13h-6.83a28.3,28.3,0,0,0,28.3,28.31h13.66a28.29,28.29,0,0,0,28.3-28.31V210.3a28.29,28.29,0,0,0-28.3-28.3H168.17a28.3,28.3,0,0,0-28.3,28.3v6.83h13.66V210.3a14.65,14.65,0,0,1,14.64-14.64h13.66a14.65,14.65,0,0,1,14.64,14.64v6.83a14.63,14.63,0,0,1-14.64,14.64H168.17a14.63,14.63,0,0,1-14.64-14.64Z"/><path class="cls-2" d="M255,220.06H95a46.85,46.85,0,0,0-46.84,46.85V503.09A87.83,87.83,0,0,0,136,590.93H214a87.83,87.83,0,0,0,87.83-87.84V266.91A46.85,46.85,0,0,0,255,220.06Z"/><path class="cls-3" d="M254.5,220.06h-15c-6.05,90.65-37.08,282.42-190.85,296.59a87.86,87.86,0,0,0,86.79,74.28h78.08a87.83,87.83,0,0,0,87.83-87.84V266.91A46.85,46.85,0,0,0,254.5,220.06Z"/><path class="cls-4" d="M292.11,399.19c-1.35.95-16.69,6.1-18.29,6.72C239.45,419.26,198,410.45,163,404.74c-2.28-.37-4.54-.77-6.8-1.2h-108v99.55A87.83,87.83,0,0,0,136,590.93H214a87.83,87.83,0,0,0,87.83-87.84V403.54Z"/><path class="cls-5" d="M273.3,405.91c-24.68,9.58-53,7.75-80,3.83-28.25,55.35-73.2,100.33-144.68,106.91.2,1.32.44,2.64.7,4,.13.65.29,1.3.44,1.95s.31,1.41.49,2.1.36,1.33.54,2,.37,1.33.57,2,.42,1.32.64,2,.42,1.29.65,1.93.47,1.29.72,1.94.49,1.26.74,1.88.53,1.27.8,1.9l.84,1.85c.29.61.58,1.22.88,1.83s.62,1.22.93,1.83.62,1.18.94,1.76.69,1.21,1,1.82.65,1.12,1,1.67.8,1.24,1.2,1.86.65,1,1,1.53c.54.79,1.11,1.58,1.68,2.35q.64.9,1.32,1.77c.58.76,1.15,1.51,1.76,2.23.36.45.74.88,1.12,1.32s1,1.17,1.5,1.74.83.89,1.24,1.33,1,1.07,1.53,1.6.87.87,1.32,1.3,1,1,1.58,1.51.91.83,1.38,1.24,1.09,1,1.65,1.43l1.42,1.18c.58.46,1.16.92,1.75,1.37s1,.74,1.44,1.09l1.87,1.33c.47.33,1,.67,1.43,1,.68.45,1.37.88,2.05,1.32l1.36.85c.83.5,1.67,1,2.51,1.44.34.19.67.39,1,.57,1.18.64,2.38,1.26,3.59,1.84l1,.48c.89.41,1.79.83,2.7,1.21l1.43.59,2.37.93c.53.2,1.07.37,1.6.56.76.27,1.53.54,2.3.78l1.68.52,2.3.65,1.74.44q1.16.28,2.34.54l1.75.37,2.42.43,1.73.28c.85.12,1.7.22,2.55.32.55.07,1.11.14,1.67.19.94.09,1.89.16,2.84.22l1.42.1c1.43.07,2.87.11,4.32.11h78.08a87.83,87.83,0,0,0,87.83-87.84V403.54l-9.76-4.35C290.24,400.14,274.9,405.29,273.3,405.91Z"/><path class="cls-6" d="M55.93,405.49s18.55-16.59,83.94-11.71,139.56,13.74,154.2,5.41c0,0-36.11,34.61-117.12,20.94S61.79,404.52,55.93,405.49Z"/><path class="cls-1" d="M255,233.73a33.21,33.21,0,0,1,33.18,33.18V503.09A74.25,74.25,0,0,1,214,577.26H136a74.25,74.25,0,0,1-74.17-74.17V266.91A33.21,33.21,0,0,1,95,233.73H255m0-13.67H95a46.85,46.85,0,0,0-46.84,46.85V503.09A87.83,87.83,0,0,0,136,590.93H214a87.83,87.83,0,0,0,87.83-87.84V266.91A46.85,46.85,0,0,0,255,220.06Z"/><rect class="cls-1" x="157.92" y="582.14" width="34.16" height="36.11"/><path class="cls-7" d="M100.35,414.81c0,4.7,5.88,8.52,13.14,8.52h123c7.26,0,13.14-3.82,13.14-8.52V379.37c0-4.71-5.88-8.52-13.14-8.52h-123c-7.26,0-13.14,3.81-13.14,8.52Z"/><path class="cls-8" d="M113.19,393.76H236.81a2.39,2.39,0,1,0,0-4.78H113.19a2.39,2.39,0,0,0,0,4.78"/><path class="cls-8" d="M113.19,408.69H236.81a2.39,2.39,0,0,0,0-4.78H113.19a2.39,2.39,0,0,0,0,4.78"/></g><g id="Calque_4" data-name="Calque 4"><path class="cls-9" d="M242.24,618.24A67.24,67.24,0,1,1,175,551,67.24,67.24,0,0,1,242.24,618.24Z"/><polygon class="cls-7" points="166.97 660.02 137.68 633.99 146.53 624.03 164.24 639.78 201.15 582.95 212.32 590.2 166.97 660.02"/></g></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
public/tubes/Tube1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

1
public/tubes/Tube1.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#773fa9;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}</style></defs><title>Tube1</title><g id="Tube1"><path class="cls-1" d="M105.68,143.54V531.75c0,26.92,31,48.75,69.32,48.75h0c38.29,0,69.32-21.83,69.32-48.75V143.54Z"/><path class="cls-2" d="M194.92,568.11c-31.46,0-57-20-57-44.67V175.1H112V530.83c0,24.67,25.5,44.67,57,44.67h0a68.21,68.21,0,0,0,31.83-7.62c-1.92.15-3.88.23-5.85.23Z"/><path class="cls-2" d="M180.93,127V519.7c0,8.73,8.62,15.8,19.26,15.8h0c10.63,0,19.26-7.07,19.26-15.8V127Z"/><path class="cls-3" d="M245.15,45.7a8.2,8.2,0,0,0-8.2-8.2H113.05a8.2,8.2,0,0,0-8.2,8.2V152.83h140.3Z"/><rect class="cls-3" x="98.04" y="152.95" width="153.93" height="23.63"/><rect class="cls-2" x="98.04" y="152.95" width="153.93" height="2.96"/><rect class="cls-4" x="98.04" y="173.62" width="153.93" height="2.96"/><path class="cls-4" d="M123.1,46.33a5.33,5.33,0,0,0-5.33,5.33v87a5.34,5.34,0,0,0,10.67,0v-87A5.33,5.33,0,0,0,123.1,46.33Z"/><path class="cls-4" d="M143.86,46.33a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,0,0,10.66,0v-87A5.32,5.32,0,0,0,143.86,46.33Z"/><path class="cls-4" d="M164.62,46.33a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,0,0,10.66,0v-87A5.32,5.32,0,0,0,164.62,46.33Z"/><path class="cls-4" d="M185.38,46.33a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,0,0,10.66,0v-87A5.33,5.33,0,0,0,185.38,46.33Z"/><path class="cls-4" d="M206.14,46.33a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,0,0,10.66,0v-87A5.33,5.33,0,0,0,206.14,46.33Z"/><path class="cls-4" d="M226.9,46.33a5.33,5.33,0,0,0-5.34,5.33v87a5.34,5.34,0,0,0,10.67,0v-87A5.33,5.33,0,0,0,226.9,46.33Z"/><g class="cls-5"><rect class="cls-6" x="126.16" y="287.8" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="359.72" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="304.26" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="317.75" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="331.24" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="344.72" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="431.65" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="376.18" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="389.67" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="403.16" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="416.65" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="503.57" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="448.11" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="461.6" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="475.09" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="488.58" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="232.9" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="246.39" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="259.88" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="273.37" width="14.01" height="3.41"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#773fa9;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}.cls-7{fill:#3aaa35;}</style></defs><title>Tube1_check</title><g id="Calque_17" data-name="Calque 17"><path class="cls-1" d="M110.68,144.54V532.75c0,26.92,31,48.75,69.32,48.75h0c38.29,0,69.32-21.83,69.32-48.75V144.54Z"/><path class="cls-2" d="M199.92,569.11c-31.46,0-57-20-57-44.67V176.1H117V531.83c0,24.67,25.5,44.67,57,44.67h0a68.21,68.21,0,0,0,31.83-7.62c-1.92.15-3.88.23-5.85.23Z"/><path class="cls-2" d="M185.93,128V520.7c0,8.73,8.62,15.8,19.26,15.8h0c10.63,0,19.26-7.07,19.26-15.8V128Z"/><path class="cls-3" d="M250.15,46.7a8.2,8.2,0,0,0-8.2-8.2H118.05a8.2,8.2,0,0,0-8.2,8.2V153.83h140.3Z"/><rect class="cls-3" x="103.04" y="153.95" width="153.93" height="23.63"/><rect class="cls-2" x="103.04" y="153.95" width="153.93" height="2.96"/><rect class="cls-4" x="103.04" y="174.62" width="153.93" height="2.96"/><path class="cls-4" d="M128.1,47.33a5.33,5.33,0,0,0-5.33,5.33v87a5.34,5.34,0,0,0,10.67,0v-87A5.33,5.33,0,0,0,128.1,47.33Z"/><path class="cls-4" d="M148.86,47.33a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,0,0,10.66,0v-87A5.32,5.32,0,0,0,148.86,47.33Z"/><path class="cls-4" d="M169.62,47.33a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,0,0,10.66,0v-87A5.32,5.32,0,0,0,169.62,47.33Z"/><path class="cls-4" d="M190.38,47.33a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,0,0,10.66,0v-87A5.33,5.33,0,0,0,190.38,47.33Z"/><path class="cls-4" d="M211.14,47.33a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,0,0,10.66,0v-87A5.33,5.33,0,0,0,211.14,47.33Z"/><path class="cls-4" d="M231.9,47.33a5.33,5.33,0,0,0-5.34,5.33v87a5.34,5.34,0,0,0,10.67,0v-87A5.33,5.33,0,0,0,231.9,47.33Z"/><g class="cls-5"><rect class="cls-6" x="131.16" y="288.8" width="35.4" height="5.2"/><rect class="cls-6" x="131.16" y="360.72" width="35.4" height="5.2"/><rect class="cls-6" x="131.16" y="305.26" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="318.75" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="332.24" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="345.72" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="432.65" width="35.4" height="5.2"/><rect class="cls-6" x="131.16" y="377.18" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="390.67" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="404.16" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="417.65" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="504.57" width="35.4" height="5.2"/><rect class="cls-6" x="131.16" y="449.11" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="462.6" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="476.09" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="489.58" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="233.9" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="247.39" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="260.88" width="14.01" height="3.41"/><rect class="cls-6" x="131.16" y="274.37" width="14.01" height="3.41"/></g></g><g id="Calque_24" data-name="Calque 24"><path class="cls-7" d="M262,400a87,87,0,1,1-87-87A87,87,0,0,1,262,400Z"/><polygon class="cls-6" points="169.38 449.86 131.48 416.18 142.92 403.3 165.84 423.67 213.6 350.14 228.05 359.52 169.38 449.86"/></g></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
public/tubes/Tube2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

1
public/tubes/Tube2.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#203d6d;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}</style></defs><title>Tube2</title><g id="tube2"><path class="cls-1" d="M105.68,142.34V694.39A69.32,69.32,0,0,0,175,763.71h0a69.32,69.32,0,0,0,69.32-69.32v-552Z"/><path class="cls-2" d="M206.82,746.92a65.13,65.13,0,0,1-65.13-65.13V173.89H112V692.56a65.13,65.13,0,0,0,65.14,65.13h0a64.9,64.9,0,0,0,36.4-11.11c-2.2.22-4.44.34-6.7.34Z"/><path class="cls-2" d="M180.93,125.81V604.58a19.26,19.26,0,0,0,19.26,19.26h0a19.26,19.26,0,0,0,19.26-19.26V125.81Z"/><path class="cls-3" d="M245.15,44.5a8.2,8.2,0,0,0-8.2-8.21H113.05a8.2,8.2,0,0,0-8.2,8.21V151.62h140.3Z"/><rect class="cls-3" x="98.04" y="151.74" width="153.93" height="23.63"/><rect class="cls-2" x="98.04" y="151.74" width="153.93" height="2.96"/><rect class="cls-4" x="98.04" y="172.41" width="153.93" height="2.96"/><path class="cls-4" d="M123.1,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,123.1,45.12Z"/><path class="cls-4" d="M143.86,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,143.86,45.12Z"/><path class="cls-4" d="M164.62,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,164.62,45.12Z"/><path class="cls-4" d="M185.38,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,185.38,45.12Z"/><path class="cls-4" d="M206.14,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,206.14,45.12Z"/><path class="cls-4" d="M226.9,45.12a5.33,5.33,0,0,0-5.34,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,226.9,45.12Z"/><g class="cls-5"><rect class="cls-6" x="126.16" y="286.59" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="358.51" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="303.05" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="316.54" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="330.03" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="343.51" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="430.44" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="374.97" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="388.46" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="401.95" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="415.44" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="502.36" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="446.9" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="460.39" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="473.88" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="487.37" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="574.29" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="518.82" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="532.31" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="545.8" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="559.29" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="646.21" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="590.75" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="604.24" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="617.73" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="631.22" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="231.69" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="245.18" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="258.67" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="272.16" width="14.01" height="3.41"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#203d6d;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}.cls-7{fill:#3aaa35;}</style></defs><title>Tube2_check</title><g id="Calque_18" data-name="Calque 18"><path class="cls-1" d="M105.68,142.34V694.39A69.32,69.32,0,0,0,175,763.71h0a69.32,69.32,0,0,0,69.32-69.32v-552Z"/><path class="cls-2" d="M206.82,746.92a65.13,65.13,0,0,1-65.13-65.13V173.89H112V692.56a65.13,65.13,0,0,0,65.14,65.13h0a64.9,64.9,0,0,0,36.4-11.11c-2.2.22-4.44.34-6.7.34Z"/><path class="cls-2" d="M180.93,125.81V604.58a19.26,19.26,0,0,0,19.26,19.26h0a19.26,19.26,0,0,0,19.26-19.26V125.81Z"/><path class="cls-3" d="M245.15,44.5a8.2,8.2,0,0,0-8.2-8.21H113.05a8.2,8.2,0,0,0-8.2,8.21V151.62h140.3Z"/><rect class="cls-3" x="98.04" y="151.74" width="153.93" height="23.63"/><rect class="cls-2" x="98.04" y="151.74" width="153.93" height="2.96"/><rect class="cls-4" x="98.04" y="172.41" width="153.93" height="2.96"/><path class="cls-4" d="M123.1,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,123.1,45.12Z"/><path class="cls-4" d="M143.86,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,143.86,45.12Z"/><path class="cls-4" d="M164.62,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,164.62,45.12Z"/><path class="cls-4" d="M185.38,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,185.38,45.12Z"/><path class="cls-4" d="M206.14,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,206.14,45.12Z"/><path class="cls-4" d="M226.9,45.12a5.33,5.33,0,0,0-5.34,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,226.9,45.12Z"/><g class="cls-5"><rect class="cls-6" x="126.16" y="286.59" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="358.51" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="303.05" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="316.54" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="330.03" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="343.51" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="430.44" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="374.97" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="388.46" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="401.95" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="415.44" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="502.36" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="446.9" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="460.39" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="473.88" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="487.37" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="574.29" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="518.82" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="532.31" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="545.8" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="559.29" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="646.21" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="590.75" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="604.24" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="617.73" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="631.22" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="231.69" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="245.18" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="258.67" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="272.16" width="14.01" height="3.41"/></g></g><g id="Calque_23" data-name="Calque 23"><path class="cls-7" d="M262,400a87,87,0,1,1-87-87A87,87,0,0,1,262,400Z"/><polygon class="cls-6" points="164.38 449.86 126.48 416.18 137.92 403.3 160.84 423.67 208.6 350.14 223.05 359.52 164.38 449.86"/></g></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
public/tubes/Tube3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

1
public/tubes/Tube3.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#f39de4;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}</style></defs><title>Tube3</title><g id="Calque_13" data-name="Calque 13"><path class="cls-1" d="M105.68,142.34V694.39A69.32,69.32,0,0,0,175,763.71h0a69.32,69.32,0,0,0,69.32-69.32v-552Z"/><path class="cls-2" d="M206.82,746.92a65.13,65.13,0,0,1-65.13-65.13V173.89H112V692.56a65.13,65.13,0,0,0,65.14,65.13h0a64.9,64.9,0,0,0,36.4-11.11c-2.2.22-4.44.34-6.7.34Z"/><path class="cls-2" d="M180.93,125.81V604.58a19.26,19.26,0,0,0,19.26,19.26h0a19.26,19.26,0,0,0,19.26-19.26V125.81Z"/><path class="cls-3" d="M245.15,44.5a8.2,8.2,0,0,0-8.2-8.21H113.05a8.2,8.2,0,0,0-8.2,8.21V151.62h140.3Z"/><rect class="cls-3" x="98.04" y="151.74" width="153.93" height="23.63"/><rect class="cls-2" x="98.04" y="151.74" width="153.93" height="2.96"/><rect class="cls-4" x="98.04" y="172.41" width="153.93" height="2.96"/><path class="cls-4" d="M123.1,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,123.1,45.12Z"/><path class="cls-4" d="M143.86,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,143.86,45.12Z"/><path class="cls-4" d="M164.62,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,164.62,45.12Z"/><path class="cls-4" d="M185.38,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,185.38,45.12Z"/><path class="cls-4" d="M206.14,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,206.14,45.12Z"/><path class="cls-4" d="M226.9,45.12a5.33,5.33,0,0,0-5.34,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,226.9,45.12Z"/><g class="cls-5"><rect class="cls-6" x="126.16" y="286.59" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="358.51" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="303.05" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="316.54" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="330.03" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="343.51" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="430.44" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="374.97" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="388.46" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="401.95" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="415.44" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="502.36" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="446.9" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="460.39" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="473.88" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="487.37" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="574.29" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="518.82" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="532.31" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="545.8" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="559.29" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="646.21" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="590.75" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="604.24" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="617.73" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="631.22" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="231.69" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="245.18" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="258.67" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="272.16" width="14.01" height="3.41"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#f39de4;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}.cls-7{fill:#3aaa35;}</style></defs><title>Tube3_check</title><g id="Calque_19" data-name="Calque 19"><path class="cls-1" d="M115.68,142.34V694.39A69.32,69.32,0,0,0,185,763.71h0a69.32,69.32,0,0,0,69.32-69.32v-552Z"/><path class="cls-2" d="M216.82,746.92a65.13,65.13,0,0,1-65.13-65.13V173.89H122V692.56a65.13,65.13,0,0,0,65.14,65.13h0a64.9,64.9,0,0,0,36.4-11.11c-2.2.22-4.44.34-6.7.34Z"/><path class="cls-2" d="M190.93,125.81V604.58a19.26,19.26,0,0,0,19.26,19.26h0a19.26,19.26,0,0,0,19.26-19.26V125.81Z"/><path class="cls-3" d="M255.15,44.5a8.2,8.2,0,0,0-8.2-8.21H123.05a8.2,8.2,0,0,0-8.2,8.21V151.62h140.3Z"/><rect class="cls-3" x="108.04" y="151.74" width="153.93" height="23.63"/><rect class="cls-2" x="108.04" y="151.74" width="153.93" height="2.96"/><rect class="cls-4" x="108.04" y="172.41" width="153.93" height="2.96"/><path class="cls-4" d="M133.1,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,133.1,45.12Z"/><path class="cls-4" d="M153.86,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,153.86,45.12Z"/><path class="cls-4" d="M174.62,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,174.62,45.12Z"/><path class="cls-4" d="M195.38,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,195.38,45.12Z"/><path class="cls-4" d="M216.14,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,216.14,45.12Z"/><path class="cls-4" d="M236.9,45.12a5.33,5.33,0,0,0-5.34,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,236.9,45.12Z"/><g class="cls-5"><rect class="cls-6" x="136.16" y="286.59" width="35.4" height="5.2"/><rect class="cls-6" x="136.16" y="358.51" width="35.4" height="5.2"/><rect class="cls-6" x="136.16" y="303.05" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="316.54" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="330.03" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="343.51" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="430.44" width="35.4" height="5.2"/><rect class="cls-6" x="136.16" y="374.97" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="388.46" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="401.95" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="415.44" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="502.36" width="35.4" height="5.2"/><rect class="cls-6" x="136.16" y="446.9" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="460.39" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="473.88" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="487.37" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="574.29" width="35.4" height="5.2"/><rect class="cls-6" x="136.16" y="518.82" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="532.31" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="545.8" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="559.29" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="646.21" width="35.4" height="5.2"/><rect class="cls-6" x="136.16" y="590.75" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="604.24" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="617.73" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="631.22" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="231.69" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="245.18" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="258.67" width="14.01" height="3.41"/><rect class="cls-6" x="136.16" y="272.16" width="14.01" height="3.41"/></g></g><g id="Calque_25" data-name="Calque 25"><path class="cls-7" d="M262,400a87,87,0,1,1-87-87A87,87,0,0,1,262,400Z"/><polygon class="cls-6" points="164.61 449.86 126.72 416.18 138.16 403.3 161.08 423.67 208.83 350.14 223.28 359.52 164.61 449.86"/></g></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
public/tubes/Tube4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

1
public/tubes/Tube4.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#eab82d;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}</style></defs><title>Tube4</title><g id="Calque_14" data-name="Calque 14"><path class="cls-1" d="M120.91,141V693.1a69.32,69.32,0,0,0,69.32,69.32h0a69.32,69.32,0,0,0,69.32-69.32V141Z"/><path class="cls-2" d="M222.05,745.63a65.13,65.13,0,0,1-65.13-65.14V172.6H127.21V691.27a65.13,65.13,0,0,0,65.14,65.13h0a64.9,64.9,0,0,0,36.4-11.11c-2.2.22-4.44.34-6.7.34Z"/><path class="cls-2" d="M196.16,124.52V603.29a19.26,19.26,0,0,0,19.26,19.26h0a19.26,19.26,0,0,0,19.26-19.26V124.52Z"/><path class="cls-3" d="M260.38,43.2a8.2,8.2,0,0,0-8.21-8.2H128.28a8.2,8.2,0,0,0-8.2,8.2V150.33h140.3Z"/><rect class="cls-3" x="113.27" y="150.45" width="153.93" height="23.63"/><rect class="cls-2" x="113.27" y="150.45" width="153.93" height="2.96"/><rect class="cls-4" x="113.27" y="171.12" width="153.93" height="2.96"/><path class="cls-4" d="M138.33,43.83A5.33,5.33,0,0,0,133,49.16v87a5.34,5.34,0,0,0,10.67,0v-87A5.33,5.33,0,0,0,138.33,43.83Z"/><path class="cls-4" d="M159.09,43.83a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,0,0,10.66,0v-87A5.32,5.32,0,0,0,159.09,43.83Z"/><path class="cls-4" d="M179.85,43.83a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,0,0,10.66,0v-87A5.33,5.33,0,0,0,179.85,43.83Z"/><path class="cls-4" d="M200.61,43.83a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,0,0,10.66,0v-87A5.33,5.33,0,0,0,200.61,43.83Z"/><path class="cls-4" d="M221.37,43.83A5.33,5.33,0,0,0,216,49.16v87a5.34,5.34,0,0,0,10.67,0v-87A5.33,5.33,0,0,0,221.37,43.83Z"/><path class="cls-4" d="M242.12,43.83a5.33,5.33,0,0,0-5.33,5.33v87a5.34,5.34,0,0,0,10.67,0v-87A5.33,5.33,0,0,0,242.12,43.83Z"/><g class="cls-5"><rect class="cls-6" x="141.39" y="285.3" width="35.4" height="5.2"/><rect class="cls-6" x="141.39" y="357.22" width="35.4" height="5.2"/><rect class="cls-6" x="141.39" y="301.76" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="315.25" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="328.74" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="342.22" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="429.15" width="35.4" height="5.2"/><rect class="cls-6" x="141.39" y="373.68" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="387.17" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="400.66" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="414.15" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="501.07" width="35.4" height="5.2"/><rect class="cls-6" x="141.39" y="445.61" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="459.1" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="472.59" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="486.08" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="573" width="35.4" height="5.2"/><rect class="cls-6" x="141.39" y="517.53" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="531.02" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="544.51" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="558" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="644.92" width="35.4" height="5.2"/><rect class="cls-6" x="141.39" y="589.46" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="602.95" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="616.44" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="629.93" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="230.4" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="243.89" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="257.38" width="14.01" height="3.41"/><rect class="cls-6" x="141.39" y="270.87" width="14.01" height="3.41"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#eab82d;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}.cls-7{fill:#3aaa35;}</style></defs><title>Tube4_check</title><g id="Calque_20" data-name="Calque 20"><path class="cls-1" d="M105.68,142.34V694.39A69.32,69.32,0,0,0,175,763.71h0a69.32,69.32,0,0,0,69.32-69.32v-552Z"/><path class="cls-2" d="M206.82,746.92a65.13,65.13,0,0,1-65.13-65.13V173.89H112V692.56a65.13,65.13,0,0,0,65.14,65.13h0a64.9,64.9,0,0,0,36.4-11.11c-2.2.22-4.44.34-6.7.34Z"/><path class="cls-2" d="M180.93,125.81V604.58a19.26,19.26,0,0,0,19.26,19.26h0a19.26,19.26,0,0,0,19.26-19.26V125.81Z"/><path class="cls-3" d="M245.15,44.5a8.2,8.2,0,0,0-8.2-8.21H113.05a8.2,8.2,0,0,0-8.2,8.21V151.62h140.3Z"/><rect class="cls-3" x="98.04" y="151.74" width="153.93" height="23.63"/><rect class="cls-2" x="98.04" y="151.74" width="153.93" height="2.96"/><rect class="cls-4" x="98.04" y="172.41" width="153.93" height="2.96"/><path class="cls-4" d="M123.1,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,123.1,45.12Z"/><path class="cls-4" d="M143.86,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,143.86,45.12Z"/><path class="cls-4" d="M164.62,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,164.62,45.12Z"/><path class="cls-4" d="M185.38,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,185.38,45.12Z"/><path class="cls-4" d="M206.14,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,206.14,45.12Z"/><path class="cls-4" d="M226.9,45.12a5.33,5.33,0,0,0-5.34,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,226.9,45.12Z"/><g class="cls-5"><rect class="cls-6" x="126.16" y="286.59" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="358.51" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="303.05" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="316.54" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="330.03" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="343.51" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="430.44" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="374.97" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="388.46" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="401.95" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="415.44" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="502.36" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="446.9" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="460.39" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="473.88" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="487.37" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="574.29" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="518.82" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="532.31" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="545.8" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="559.29" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="646.21" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="590.75" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="604.24" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="617.73" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="631.22" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="231.69" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="245.18" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="258.67" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="272.16" width="14.01" height="3.41"/></g></g><g id="Calque_27" data-name="Calque 27"><path class="cls-7" d="M262,400a87,87,0,1,1-87-87A87,87,0,0,1,262,400Z"/><polygon class="cls-6" points="164.61 449.86 126.72 416.18 138.16 403.3 161.08 423.67 208.83 350.14 223.28 359.52 164.61 449.86"/></g></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
public/tubes/Tube5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

1
public/tubes/Tube5.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#773fa9;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}</style></defs><title>Tube5</title><g id="Calque_15" data-name="Calque 15"><path class="cls-1" d="M105.68,142.34V694.39A69.32,69.32,0,0,0,175,763.71h0a69.32,69.32,0,0,0,69.32-69.32v-552Z"/><path class="cls-2" d="M206.82,746.92a65.13,65.13,0,0,1-65.13-65.13V173.89H112V692.56a65.13,65.13,0,0,0,65.14,65.13h0a64.9,64.9,0,0,0,36.4-11.11c-2.2.22-4.44.34-6.7.34Z"/><path class="cls-2" d="M180.93,125.81V604.58a19.26,19.26,0,0,0,19.26,19.26h0a19.26,19.26,0,0,0,19.26-19.26V125.81Z"/><path class="cls-3" d="M245.15,44.5a8.2,8.2,0,0,0-8.2-8.21H113.05a8.2,8.2,0,0,0-8.2,8.21V151.62h140.3Z"/><rect class="cls-3" x="98.04" y="151.74" width="153.93" height="23.63"/><rect class="cls-2" x="98.04" y="151.74" width="153.93" height="2.96"/><rect class="cls-4" x="98.04" y="172.41" width="153.93" height="2.96"/><path class="cls-4" d="M123.1,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,123.1,45.12Z"/><path class="cls-4" d="M143.86,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,143.86,45.12Z"/><path class="cls-4" d="M164.62,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,164.62,45.12Z"/><path class="cls-4" d="M185.38,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,185.38,45.12Z"/><path class="cls-4" d="M206.14,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,206.14,45.12Z"/><path class="cls-4" d="M226.9,45.12a5.33,5.33,0,0,0-5.34,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,226.9,45.12Z"/><g class="cls-5"><rect class="cls-6" x="126.16" y="286.59" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="358.51" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="303.05" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="316.54" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="330.03" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="343.51" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="430.44" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="374.97" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="388.46" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="401.95" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="415.44" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="502.36" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="446.9" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="460.39" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="473.88" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="487.37" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="574.29" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="518.82" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="532.31" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="545.8" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="559.29" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="646.21" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="590.75" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="604.24" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="617.73" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="631.22" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="231.69" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="245.18" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="258.67" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="272.16" width="14.01" height="3.41"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#773fa9;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}.cls-7{fill:#3aaa35;}</style></defs><title>Tube5_check</title><g id="Calque_21" data-name="Calque 21"><path class="cls-1" d="M105.68,142.34V694.39A69.32,69.32,0,0,0,175,763.71h0a69.32,69.32,0,0,0,69.32-69.32v-552Z"/><path class="cls-2" d="M206.82,746.92a65.13,65.13,0,0,1-65.13-65.13V173.89H112V692.56a65.13,65.13,0,0,0,65.14,65.13h0a64.9,64.9,0,0,0,36.4-11.11c-2.2.22-4.44.34-6.7.34Z"/><path class="cls-2" d="M180.93,125.81V604.58a19.26,19.26,0,0,0,19.26,19.26h0a19.26,19.26,0,0,0,19.26-19.26V125.81Z"/><path class="cls-3" d="M245.15,44.5a8.2,8.2,0,0,0-8.2-8.21H113.05a8.2,8.2,0,0,0-8.2,8.21V151.62h140.3Z"/><rect class="cls-3" x="98.04" y="151.74" width="153.93" height="23.63"/><rect class="cls-2" x="98.04" y="151.74" width="153.93" height="2.96"/><rect class="cls-4" x="98.04" y="172.41" width="153.93" height="2.96"/><path class="cls-4" d="M123.1,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,123.1,45.12Z"/><path class="cls-4" d="M143.86,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,143.86,45.12Z"/><path class="cls-4" d="M164.62,45.12a5.33,5.33,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.32,5.32,0,0,0,164.62,45.12Z"/><path class="cls-4" d="M185.38,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,185.38,45.12Z"/><path class="cls-4" d="M206.14,45.12a5.32,5.32,0,0,0-5.33,5.33v87a5.33,5.33,0,1,0,10.66,0v-87A5.33,5.33,0,0,0,206.14,45.12Z"/><path class="cls-4" d="M226.9,45.12a5.33,5.33,0,0,0-5.34,5.33v87a5.34,5.34,0,1,0,10.67,0v-87A5.33,5.33,0,0,0,226.9,45.12Z"/><g class="cls-5"><rect class="cls-6" x="126.16" y="286.59" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="358.51" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="303.05" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="316.54" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="330.03" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="343.51" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="430.44" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="374.97" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="388.46" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="401.95" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="415.44" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="502.36" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="446.9" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="460.39" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="473.88" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="487.37" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="574.29" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="518.82" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="532.31" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="545.8" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="559.29" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="646.21" width="35.4" height="5.2"/><rect class="cls-6" x="126.16" y="590.75" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="604.24" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="617.73" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="631.22" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="231.69" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="245.18" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="258.67" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="272.16" width="14.01" height="3.41"/></g></g><g id="Calque_28" data-name="Calque 28"><path class="cls-7" d="M262,400a87,87,0,1,1-87-87A87,87,0,0,1,262,400Z"/><polygon class="cls-6" points="159.61 449.86 121.72 416.18 133.16 403.3 156.08 423.67 203.83 350.14 218.28 359.52 159.61 449.86"/></g></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
public/tubes/Tube6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

1
public/tubes/Tube6.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#ac3039;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}</style></defs><title>Tube6</title><g id="Calque_16" data-name="Calque 16"><path class="cls-1" d="M105.58,141.51l.18,388.21c0,26.92,31.06,48.73,69.35,48.72h0c38.28,0,69.31-21.86,69.3-48.78l-.18-388.21Z"/><path class="cls-2" d="M195,566c-31.45,0-57-20-57-44.65l-.16-348.33h-26l.16,355.73c0,24.67,25.52,44.65,57,44.64h0a68.16,68.16,0,0,0,31.83-7.64Q198,566,195,566Z"/><path class="cls-2" d="M180.83,125,181,517.64c0,8.72,8.63,15.79,19.26,15.79h0c10.64,0,19.26-7.09,19.26-15.81l-.18-392.69Z"/><path class="cls-3" d="M245,43.61a8.2,8.2,0,0,0-8.21-8.2l-123.89.06a8.2,8.2,0,0,0-8.2,8.2l.05,107.13,140.3-.06Z"/><rect class="cls-3" x="97.95" y="150.89" width="153.93" height="23.63"/><rect class="cls-2" x="97.95" y="150.89" width="153.93" height="2.96"/><rect class="cls-4" x="97.96" y="171.56" width="153.93" height="2.96"/><path class="cls-4" d="M123,44.29a5.33,5.33,0,0,0-5.33,5.33l0,87a5.33,5.33,0,1,0,10.66,0l0-87A5.33,5.33,0,0,0,123,44.29Z"/><path class="cls-4" d="M143.73,44.28a5.33,5.33,0,0,0-5.33,5.33l0,87a5.33,5.33,0,1,0,10.66,0l0-87A5.33,5.33,0,0,0,143.73,44.28Z"/><path class="cls-4" d="M164.48,44.27a5.33,5.33,0,0,0-5.33,5.33l0,87a5.34,5.34,0,1,0,10.67,0l0-87A5.33,5.33,0,0,0,164.48,44.27Z"/><path class="cls-4" d="M185.24,44.26a5.33,5.33,0,0,0-5.33,5.33l0,87a5.34,5.34,0,1,0,10.67,0l0-87A5.33,5.33,0,0,0,185.24,44.26Z"/><path class="cls-4" d="M206,44.25a5.33,5.33,0,0,0-5.33,5.33l0,87a5.33,5.33,0,1,0,10.66,0l0-87A5.32,5.32,0,0,0,206,44.25Z"/><path class="cls-4" d="M226.76,44.24a5.33,5.33,0,0,0-5.33,5.33l0,87a5.33,5.33,0,1,0,10.66,0l0-87A5.33,5.33,0,0,0,226.76,44.24Z"/><g class="cls-5"><rect class="cls-6" x="126.14" y="285.75" width="35.4" height="5.2"/><rect class="cls-6" x="126.17" y="357.67" width="35.4" height="5.2"/><rect class="cls-6" x="126.15" y="302.21" width="14.01" height="3.41"/><rect class="cls-6" x="126.15" y="315.7" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="329.19" width="14.01" height="3.41"/><rect class="cls-6" x="126.16" y="342.68" width="14.01" height="3.41"/><rect class="cls-6" x="126.2" y="429.6" width="35.4" height="5.2"/><rect class="cls-6" x="126.18" y="374.14" width="14.01" height="3.41"/><rect class="cls-6" x="126.18" y="387.63" width="14.01" height="3.41"/><rect class="cls-6" x="126.19" y="401.12" width="14.01" height="3.41"/><rect class="cls-6" x="126.2" y="414.61" width="14.01" height="3.41"/><rect class="cls-6" x="126.24" y="501.52" width="35.4" height="5.2"/><rect class="cls-6" x="126.21" y="446.06" width="14.01" height="3.41"/><rect class="cls-6" x="126.22" y="459.55" width="14.01" height="3.41"/><rect class="cls-6" x="126.22" y="473.04" width="14.01" height="3.41"/><rect class="cls-6" x="126.23" y="486.53" width="14.01" height="3.41"/><rect class="cls-6" x="126.11" y="230.86" width="14.01" height="3.41"/><rect class="cls-6" x="126.12" y="244.35" width="14.01" height="3.41"/><rect class="cls-6" x="126.13" y="257.84" width="14.01" height="3.41"/><rect class="cls-6" x="126.13" y="271.33" width="14.01" height="3.41"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350 800"><defs><style>.cls-1{fill:#c5deed;}.cls-2,.cls-6{fill:#fff;}.cls-2{opacity:0.34;}.cls-3{fill:#ac3039;}.cls-4{opacity:0.17;}.cls-5{opacity:0.72;}.cls-7{fill:#3aaa35;}</style></defs><title>Tube6_check</title><g id="Calque_22" data-name="Calque 22"><path class="cls-1" d="M105.67,141.51l.17,388.21c0,26.92,31.06,48.73,69.35,48.72h0c38.29,0,69.31-21.86,69.3-48.78l-.18-388.21Z"/><path class="cls-2" d="M195.1,566c-31.45,0-57-20-57-44.65L138,173.06H112l.16,355.73c0,24.67,25.52,44.65,57,44.64h0A68.22,68.22,0,0,0,201,565.8q-2.9.24-5.86.24Z"/><path class="cls-2" d="M180.91,125l.18,392.69c0,8.72,8.63,15.79,19.27,15.79h0c10.63,0,19.25-7.09,19.25-15.81l-.18-392.69Z"/><path class="cls-3" d="M245.1,43.61a8.21,8.21,0,0,0-8.21-8.2L113,35.47a8.19,8.19,0,0,0-8.2,8.2l0,107.13,140.3-.06Z"/><rect class="cls-3" x="98.04" y="150.89" width="153.93" height="23.63"/><rect class="cls-2" x="98.03" y="150.89" width="153.93" height="2.96"/><rect class="cls-4" x="98.04" y="171.56" width="153.93" height="2.96"/><path class="cls-4" d="M123.05,44.29a5.33,5.33,0,0,0-5.33,5.33l0,87a5.33,5.33,0,1,0,10.66,0l0-87A5.33,5.33,0,0,0,123.05,44.29Z"/><path class="cls-4" d="M143.81,44.28a5.33,5.33,0,0,0-5.33,5.33l0,87a5.33,5.33,0,1,0,10.66,0l0-87A5.33,5.33,0,0,0,143.81,44.28Z"/><path class="cls-4" d="M164.57,44.27a5.33,5.33,0,0,0-5.33,5.33l0,87a5.33,5.33,0,1,0,10.66,0l0-87A5.33,5.33,0,0,0,164.57,44.27Z"/><path class="cls-4" d="M185.32,44.26A5.32,5.32,0,0,0,180,49.59l0,87a5.33,5.33,0,1,0,10.66,0l0-87A5.33,5.33,0,0,0,185.32,44.26Z"/><path class="cls-4" d="M206.08,44.25a5.33,5.33,0,0,0-5.33,5.33l0,87a5.34,5.34,0,1,0,10.67,0l0-87A5.33,5.33,0,0,0,206.08,44.25Z"/><path class="cls-4" d="M226.84,44.24a5.33,5.33,0,0,0-5.33,5.33l0,87a5.34,5.34,0,1,0,10.67,0l0-87A5.34,5.34,0,0,0,226.84,44.24Z"/><g class="cls-5"><rect class="cls-6" x="126.22" y="285.75" width="35.4" height="5.2"/><rect class="cls-6" x="126.25" y="357.67" width="35.4" height="5.2"/><rect class="cls-6" x="126.23" y="302.21" width="14.01" height="3.41"/><rect class="cls-6" x="126.23" y="315.7" width="14.01" height="3.41"/><rect class="cls-6" x="126.24" y="329.19" width="14.01" height="3.41"/><rect class="cls-6" x="126.25" y="342.68" width="14.01" height="3.41"/><rect class="cls-6" x="126.29" y="429.6" width="35.4" height="5.2"/><rect class="cls-6" x="126.26" y="374.14" width="14.01" height="3.41"/><rect class="cls-6" x="126.27" y="387.63" width="14.01" height="3.41"/><rect class="cls-6" x="126.27" y="401.12" width="14.01" height="3.41"/><rect class="cls-6" x="126.28" y="414.61" width="14.01" height="3.41"/><rect class="cls-6" x="126.32" y="501.52" width="35.4" height="5.2"/><rect class="cls-6" x="126.29" y="446.06" width="14.01" height="3.41"/><rect class="cls-6" x="126.3" y="459.55" width="14.01" height="3.41"/><rect class="cls-6" x="126.31" y="473.04" width="14.01" height="3.41"/><rect class="cls-6" x="126.31" y="486.53" width="14.01" height="3.41"/><rect class="cls-6" x="126.2" y="230.86" width="14.01" height="3.41"/><rect class="cls-6" x="126.2" y="244.35" width="14.01" height="3.41"/><rect class="cls-6" x="126.21" y="257.84" width="14.01" height="3.41"/><rect class="cls-6" x="126.21" y="271.33" width="14.01" height="3.41"/></g></g><g id="Calque_29" data-name="Calque 29"><path class="cls-7" d="M262,400a87,87,0,1,1-87-87A87,87,0,0,1,262,400Z"/><polygon class="cls-6" points="164.61 449.86 126.72 416.18 138.16 403.3 161.08 423.67 208.83 350.14 223.28 359.52 164.61 449.86"/></g></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1,28 @@
<?php
namespace App\Controller\Admin;
use App\Repository\UserRepository;
use App\Repository\DonCatRepository;
use App\Repository\PatientRepository;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
/**
* Class AdminController
* @package App\Controller
* @Route("/admin", name="admin_app_")
*/
class AdminController extends AbstractController
{
/**
* @Route("/", name="index", methods={"GET"})
* @param UserRepository $userRepository
* PaginatorInterface $paginator
* Request $request
*/
public function index(): Response
{
return $this->render('admin/home.html.twig',);
}
}

View File

@ -1,5 +1,5 @@
<?php
namespace App\Controller;
namespace App\Controller\Admin;
use App\Entity\DmuCat;
use App\Form\DmuCatType;
@ -7,9 +7,7 @@ use App\Form\Handler\DmuCatHandler;
use App\Repository\DmuCatRepository;
use App\Services\Tools;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Container\ContainerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
@ -49,16 +47,17 @@ class DmuCatController extends AbstractController
'route'=> 'admin_app_dmu_cat',
'breadcrumb'=>[
[
'text'=>'tous les éléments'
'text'=>'toutes les catégories de DMU'
]
],
'fields' => [
'Id' => 'Id',
'CodeBarre' => 'CodeBarre',
'CodeBarre' => 'CodeBarre',
'PocheNumber'=>'PocheNumber'
],
'title' => 'Tous les élements',
'add_button_label'=>'Ajouter un élément'
'title' => 'Toutes les catégories de DMU',
'add_button_label'=>'Ajouter une catégorie de DMU'
]);
}
@ -82,14 +81,14 @@ class DmuCatController extends AbstractController
'el'=>$dmuCat,
'button_label'=>'Créer',
'route'=>'admin_app_dmu_cat',
'title'=>'Ajouter un élément',
'title'=>'Ajouter un une catégorie de DMU',
'breadcrumb'=>[
[
'route'=>'admin_app_dmu_cat_index',
'text'=>'tous les éléments'
'text'=>'toutes les catégories de DMU'
],
[
'text'=>'ajouter un élément'
'text'=>'Ajouter une catégorie de DMU'
]
],
@ -100,10 +99,9 @@ class DmuCatController extends AbstractController
* @Route("/edit/{id}", name="edit")
* @param Request $request
* @param DmuCat $dmuCat
* @param Tools $tools
* @return Response
*/
public function edit(Request $request, DmuCat $dmuCat, Tools $tools): Response
public function edit(Request $request, DmuCat $dmuCat, DmuCatHandler $dmuCatHandler): Response
{
$form = $this->createForm(DmuCatType::class, $dmuCat);
if ($dmuCatHandler->edit($form, $request)) {

View File

@ -1,5 +1,5 @@
<?php
namespace App\Controller;
namespace App\Controller\Admin;
use App\Entity\DonCat;
use App\Form\DonCatType;
@ -7,9 +7,7 @@ use App\Form\Handler\DonCatHandler;
use App\Repository\DonCatRepository;
use App\Services\Tools;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Container\ContainerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
@ -49,7 +47,7 @@ class DonCatController extends AbstractController
'route'=> 'admin_app_don_cat',
'breadcrumb'=>[
[
'text'=>'tous les éléments'
'text'=>'toutes les catégories de dons'
]
],
'fields' => [
@ -58,7 +56,7 @@ class DonCatController extends AbstractController
],
'title' => 'Tous les élements',
'add_button_label'=>'Ajouter un élément'
'add_button_label'=>'Ajouter une catégorie de don'
]);
}
@ -82,14 +80,14 @@ class DonCatController extends AbstractController
'el'=>$donCat,
'button_label'=>'Créer',
'route'=>'admin_app_don_cat',
'title'=>'Ajouter un élément',
'title'=>'Ajouter une catégorie de don',
'breadcrumb'=>[
[
'route'=>'admin_app_don_cat_index',
'text'=>'tous les éléments'
'text'=>'toutes les categories de don'
],
[
'text'=>'ajouter un élément'
'text'=>'ajouter une catégorie de don'
]
],
@ -103,7 +101,7 @@ class DonCatController extends AbstractController
* @param Tools $tools
* @return Response
*/
public function edit(Request $request, DonCat $donCat, Tools $tools): Response
public function edit(Request $request, DonCat $donCat,DonCatHandler $donCatHandler): Response
{
$form = $this->createForm(DonCatType::class, $donCat);
if ($donCatHandler->edit($form, $request)) {

View File

@ -1,5 +1,5 @@
<?php
namespace App\Controller;
namespace App\Controller\Admin;
use App\Entity\Don;
use App\Form\DonType;
@ -7,9 +7,7 @@ use App\Form\Handler\DonHandler;
use App\Repository\DonRepository;
use App\Services\Tools;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Container\ContainerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
@ -49,18 +47,19 @@ class DonController extends AbstractController
'route'=> 'admin_app_don',
'breadcrumb'=>[
[
'text'=>'tous les éléments'
'text'=>'tous les dons'
]
],
'fields' => [
'Id' => 'Id',
'GiftNumber' => 'GiftNumber',
'CodeBarre' => 'CodeBarre',
'Nombre tube'=> 'NbreTube',
'Categorie' => 'DonCat',
'Donneur' => 'Donneur',
],
'title' => 'Tous les élements',
'add_button_label'=>'Ajouter un élément'
'title' => 'Tous les dons',
'add_button_label'=>'Ajouter un don'
]);
}
@ -84,14 +83,14 @@ class DonController extends AbstractController
'el'=>$don,
'button_label'=>'Créer',
'route'=>'admin_app_don',
'title'=>'Ajouter un élément',
'title'=>'Ajouter un don',
'breadcrumb'=>[
[
'route'=>'admin_app_don_index',
'text'=>'tous les éléments'
'text'=>'tous les dons'
],
[
'text'=>'ajouter un élément'
'text'=>'ajouter un don'
]
],

View File

@ -1,5 +1,5 @@
<?php
namespace App\Controller;
namespace App\Controller\Admin;
use App\Entity\Patient;
use App\Form\PatientType;
@ -7,9 +7,7 @@ use App\Form\Handler\PatientHandler;
use App\Repository\PatientRepository;
use App\Services\Tools;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Container\ContainerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
@ -49,19 +47,19 @@ class PatientController extends AbstractController
'route'=> 'admin_app_patient',
'breadcrumb'=>[
[
'text'=>'tous les éléments'
'text'=>'tous les patients'
]
],
'fields' => [
'Id' => 'Id',
'Nom' => 'Lastname',
'Prénom' => 'Firstname',
'Date naissance' => 'Birthdate',
'Identifiant' => 'DonneurNumber',
'Nom' => 'Lastname',
'Prénom' => 'Firstname',
'Date naissance' => 'Birthdate',
'Identifiant' => 'DonneurNumber',
],
'title' => 'Tous les élements',
'add_button_label'=>'Ajouter un élément'
'title' => 'Tous les patients',
'add_button_label'=>'Ajouter un patient'
]);
}
@ -85,14 +83,14 @@ class PatientController extends AbstractController
'el'=>$patient,
'button_label'=>'Créer',
'route'=>'admin_app_patient',
'title'=>'Ajouter un élément',
'title'=>'Ajouter un patient',
'breadcrumb'=>[
[
'route'=>'admin_app_patient_index',
'text'=>'tous les éléments'
'text'=>'tous les patients'
],
[
'text'=>'ajouter un élément'
'text'=>'ajouter un patient'
]
],

View File

@ -1,5 +1,5 @@
<?php
namespace App\Controller;
namespace App\Controller\Admin;
use App\Entity\Tube;
use App\Form\TubeType;
@ -9,7 +9,6 @@ use App\Services\Tools;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Container\ContainerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
@ -49,7 +48,7 @@ class TubeController extends AbstractController
'route'=> 'admin_app_tube',
'breadcrumb'=>[
[
'text'=>'tous les éléments'
'text'=>'tous les tubes'
]
],
'fields' => [
@ -60,8 +59,8 @@ class TubeController extends AbstractController
'Analyse' => 'Analyse',
],
'title' => 'Tous les élements',
'add_button_label'=>'Ajouter un élément'
'title' => 'Tous les tubes',
'add_button_label'=>'Ajouter un tube'
]);
}
@ -85,14 +84,14 @@ class TubeController extends AbstractController
'el'=>$tube,
'button_label'=>'Créer',
'route'=>'admin_app_tube',
'title'=>'Ajouter un élément',
'title'=>'Ajouter un tube',
'breadcrumb'=>[
[
'route'=>'admin_app_tube_index',
'text'=>'tous les éléments'
'text'=>'tous les tubes'
],
[
'text'=>'ajouter un élément'
'text'=>'ajouter un tube'
]
],
@ -106,7 +105,7 @@ class TubeController extends AbstractController
* @param Tools $tools
* @return Response
*/
public function edit(Request $request, Tube $tube, Tools $tools): Response
public function edit(Request $request, Tube $tube, TubeHandler $tubeHandler): Response
{
$form = $this->createForm(TubeType::class, $tube);
if ($tubeHandler->edit($form, $request)) {

View File

@ -0,0 +1,143 @@
<?php
namespace App\Controller\Admin;
use App\Entity\User;
use App\Form\UserType;
use App\Form\Handler\UserHandler;
use App\Repository\UserRepository;
use App\Services\Tools;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Knp\Component\Pager\PaginatorInterface;
/**
* Class UserController
* @package App\Controller
* @Route("/admin/user", name="admin_app_user_")
*/
class UserController extends AbstractController
{
private EntityManagerInterface $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @Route("/", name="index", methods={"GET"})
* @param UserRepository $userRepository
* PaginatorInterface $paginator
* Request $request
*/
public function index(UserRepository $userRepository, PaginatorInterface $paginator, Request $request): Response
{
$els = $paginator->paginate(
$userRepository->createQueryBuilder('a')->getQuery(),
$request->query->getInt('page', 1),
10
);
return $this->render('admin/crud/index.html.twig', [
'els'=>$els,
'paginator'=>false,
'search'=>false,
'class'=> User::class,
'route'=> 'admin_app_user',
'breadcrumb'=>[
[
'text'=>'tous les utilisateur'
]
],
'fields' => [
'Id' => 'Id',
'Email' => 'Email',
'UserIdentifier' => 'UserIdentifier',
'Roles' => 'Roles',
],
'title' => 'Tous les utilisateurs',
'add_button_label'=>'Ajouter un utilisateur'
]);
}
/**
* @Route("/new", name="new", methods={"GET","POST"})
* @param Request $request
* @param UserHandler $userHandler
* @param Tools $tools
* @return Response
*/
public function new(Request $request, Tools $tools, UserHandler $userHandler): Response
{
$user = new User();
$form = $this->createForm(UserType::class, $user);
if ($userHandler->new($form, $request)) {
return $this->redirectToRoute('admin_app_user_index');
}
return $this->render('admin/crud/_form.html.twig', [
'form'=>$form->createView(),
'el'=>$user,
'button_label'=>'Créer',
'route'=>'admin_app_user',
'title'=>'Ajouter un utilisateur',
'breadcrumb'=>[
[
'route'=>'admin_app_user_index',
'text'=>'tous les utilisateurs'
],
[
'text'=>'ajouter un utilisateur'
]
],
]);
}
/**
* @Route("/edit/{id}", name="edit")
* @param Request $request
* @param User $user
* @param Tools $tools
* @return Response
*/
public function edit(Request $request, User $user, Tools $tools): Response
{
$form = $this->createForm(UserType::class, $user);
if ($userHandler->edit($form, $request)) {
return $this->redirectToRoute('admin_app_user_edit', ['id'=>$user->getId()]);
}
return $this->render('admin/crud/_form.html.twig', [
'el' => $user,
'route'=> 'admin_app_user',
'form' => $form->createView(),
'button_label' => 'Mettre à jour',
'title' => 'Edition',
'breadcrumb'=>[
[
'route'=>'admin_app_user_index',
'text'=>'users'
],
[
'text'=>'édition '
]
],
]);
}
/**
* @Route("/{id}", name="delete", methods={"DELETE"})
* @param Request $request
* @return Response
*/
public function delete(Request $request,User $user): Response
{
if ($this->isCsrfTokenValid('delete'.$user->getId(), $request->request->get('_token'))) {
$this->entityManager->remove($user);
$this->entityManager->flush();
}
return $this->redirectToRoute('admin_app_user_index');
}
}

View File

@ -0,0 +1,276 @@
<?php
namespace App\Controller\Api;
use App\Entity\Don;
use App\Repository\DonRepository;
use App\Repository\DmuCatRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
/**
* @Route("/api", name="front_api_")
*/
class ApiController extends AbstractController
{
public const REGEX_DON = '/^[0-9]{11}$/';
public const REGEX_GROUP_POCHE = '/[0-9]{6}-[A-Z]{2}-POCHE$/';
public const REGEX_ETIQUETTE = '/^\d{11}-[a-zA-Z]{2}$/';
public const NBRE_POCHE = 'nbre_poche';
public DonRepository $donRepository;
public DmuCatRepository $dmuCatRepository;
public RequestStack $requestStack;
// etiquette durand
// 12345678912-AA
// 12345678912-AB
// 12345678912-AC
// 12345678912-AD
// 12345678912-AE
// 12345678912-AF
// 12345678912-BA
// 12345678912-BB
// 12345678912-BC
// 12345678912-BD
// 12345678912-BE
// 12345678912-BF
// 12345678912-CA
// 12345678912-CB
// 12345678912-CC
// etiquette Gauthier
// 12345678913-AA
// 12345678913-AB
// 12345678913-AC
// 12345678913-AD
// 12345678913-AE
// 12345678913-AF
// 12345678913-BA
// 12345678913-BB
// 12345678913-BC
// 12345678913-BD
// 12345678913-BE
// 12345678913-BF
// 12345678913-CA
// 12345678913-CB
// 12345678913-CC
public function __construct(DonRepository $donRepository, RequestStack $requestStack, DmuCatRepository $dmuCatRepository)
{
$this->donRepository = $donRepository;
$this->requestStack = $requestStack;
$this->dmuCatRepository = $dmuCatRepository;
}
/**
* @Route("/get-code-barre-type", name="code_barre_type_", methods={"POST"})
*/
public function GetCodeBarreType(Request $request)
{
$codeBarre = $request->request->get('codeBarre');
$session = $request->getSession();
$step = null !== $session->get('step') ? $session->get('step') : 0;
// Réinitialisation de la séquence avec les données trouvées pour le donneur
if($step != 0 && preg_match(self::REGEX_DON, $codeBarre)){
$this->init($session, $don = $this->donRepository->findOneByCodeBarre($codeBarre));
return $this->json(['data'=>[
'status'=>'init',
'step'=> '0',
'codeBarre'=>$don->GetCodeBarre(),
'nbre_tube'=>0,
'nbre_tubemax'=>$don->getNbreTube(),
'type_don'=> $don->getDonCat()->getName(),
'nom'=>$don->getDonneur()->getLastname(),
'prenom'=>$don->getDonneur()->getFirstname(),
'birthdate'=>$don->getDonneur()->getBirthdate(), ]]);
}
switch($step){
case 0:
if(preg_match(self::REGEX_DON, $codeBarre)){
$don = $this->donRepository->findOneByCodeBarre($codeBarre);
$this->init($session, $don);
return $this->json(['data'=>[
'step'=> '0',
'status'=>'success',
'codeBarre'=>$don->GetCodeBarre(),
'nbre_tube'=>0,
'nbre_tubemax'=>$don->getNbreTube(),
'type_don'=> $don->getDonCat()->getName(),
'nom'=>$don->getDonneur()->getLastname(),
'prenom'=>$don->getDonneur()->getFirstname(),
'birthdate'=>$don->getDonneur()->getBirthdate(),
]]);
}else{
return $this->json(['data'=>[
'step'=>'0',
'status'=>'error_scan'
]
]);
}
break;
case 1:
if(preg_match(self::REGEX_GROUP_POCHE, $codeBarre)){
$dmuCatNumber = $this->dmuCatRepository->findOneByCodeBarre($codeBarre)->getPocheNumber();
$session->set('step', 2);
$session->set('nbre_poche' , 0);
$session->set('nbre_poche_max' , $dmuCatNumber);
return $this->json(['data'=>[
'step'=> '1',
'status'=>'success',
'nbre_poche'=>0,
'nbre_poche_max'=>$dmuCatNumber
]]);
}else{
return $this->json(['data'=>[
'step'=> '1',
'status'=>'error_scan',
'codebarre'=>$codeBarre
]
]);
}
break;
case 2:
if(preg_match(self::REGEX_ETIQUETTE, $codeBarre)){
$nbrePoche = $session->get('nbre_poche');
$donCodeBarre = $session->get('don_code_barre');
$in = str_contains($codeBarre, $donCodeBarre);
if(!$in){
return $this->json(['data'=>[
'step'=> '2',
'status'=>'error_donneur',
'donCodeBarre'=>$donCodeBarre,
'codeBarre'=>$codeBarre,
'result'=>$in
]]);
}
$listPoche = $session->get('liste_poche');
if(!in_array($codeBarre, $listPoche)){
$listPoche[] = $codeBarre;
$session->set('liste_poche', $listPoche);
}else{
return $this->json(['data'=>[
'step'=> '2',
'status'=>'error_doublon'
]]);
}
if($nbrePoche < ($session->get('nbre_poche_max')-1) ){
$session->set('nbre_poche', $nbrePoche + 1);
return $this->json(['data'=>[
'step'=> '2',
'status'=>'success',
'nbre_poche'=>$nbrePoche + 1,
'nbre_poche_max'=>$session->get('nbre_poche_max')
]
]);
}else{
$session->set('step', 3);
$session->set('nbre_poche', 0);
return $this->json(['data'=>[
'step'=> '2',
'status'=>'final',
'nbre_poche'=>$nbrePoche +1,
'nbre_poche_max'=>$session->get('nbre_poche_max')
]
]
);
}
}else{
return $this->json(['data'=>[
'step'=>'2',
'status'=> 'error_scan'
]]);
}
break;
case 3:
if(preg_match(self::REGEX_GROUP_POCHE, $codeBarre)){
$session->set('step', 4);
return $this->json(['data'=>[
'step'=>'3',
'status'=>'success',
'nbre_tube_max'=>$session->get('nbre_tube_max'),
]]);
}else{
return $this->json(['data'=>[
'step'=> '3',
'status'=>'error_scan',
]
]);
}
break;
case 4:
if(preg_match(self::REGEX_ETIQUETTE, $codeBarre)){
$nbreTube = $session->get('nbre_tube');
$donCodeBarre = $session->get('don_code_barre');
if(!str_contains($codeBarre, $donCodeBarre)){
return $this->json(['data'=>[
'step'=>'4',
'status'=>'error_donneur'
]
]);
}
$listTube = $session->get('liste_tube');
if(!in_array($codeBarre, $listTube)){
$listTube[] = $codeBarre;
$session->set('liste_tube', $listTube);
}else{
return $this->json(['data'=>[
'step'=>'4',
'status'=>'error_doublon']
]);
}
if($nbreTube < ($session->get('nbre_tube_max') -1)){
$session->set('nbre_tube', $nbreTube + 1);
return $this->json(['data'=>[
'step'=>'4',
'status'=>'success',
'nbre_tube_max'=>$session->get('nbre_tube_max'),
'nbre_tube'=>$nbreTube + 1
]
]);
}else{
$don = $this->donRepository->findOneByCodeBarre(substr($codeBarre, 0, -3));
$session->set('step', 0);
$session->set('nbre_tube', 0);
$session->clear();
return $this->json(['data'=>[
'step'=>'4',
'status'=>'final',
'nbre_tube'=>$nbreTube +1,
'nom'=>$don->getDonneur()->getLastname(),
'prenom'=>$don->getDonneur()->getFirstname(),
]
]
);
}
}else{
return $this->json(['data'=>[
'step'=>'4',
'status'=>'error_scan']
]);
}
break;
default:
return $this->json(['data'=>[
'step'=>'4',
'status'=>'error_scan']
]);
}
}
public function init($session, Don $don)
{
$session->set('don_code_barre' , $don->getCodeBarre());
$session->set('categorie_don' , $don->getDonCat()->getName());
$session->set('nbre_tube', 0);
$session->set('nbre_tube_max', $don->getNbreTube());
$session->set('liste_poche', []);
$session->remove('nbre_poche');
$session->remove('nbre_poche_max');
$session->set('liste_tube', []);
$session->set('donneur', $don->getDonneur()->getFirstname() . ' ' . $don->getDonneur()->getLastname());
$session->set('step', 1);
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class FrontController extends AbstractController
{
#[Route("/", name: "app_front")]
public function index(Request $request): Response
{
return $this->render('front/index.html.twig');
}
#[Route("/test", name: "app_reset_step")]
public function test(Request $request): Response
{
dump($request->getSession()->get('step'));
$request->getSession()->set('step', 0);
return $this->render('front/test.html.twig');
}
#[Route("/session", name: "app_session")]
public function session(Request $request): Response
{
dump($request->getSession()->get('liste_poche'));
return $this->render('front/session.html.twig', ['session'=>$request->getSession()->get('step')]);
}
}

View File

@ -1,17 +0,0 @@
<?php
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class HomeController extends AbstractController
{
/**
* @Route("/admin", name="admin_home")
*/
public function home()
{
return $this->render('admin/home.html.twig');
}
}

View File

@ -0,0 +1,41 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
private $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
/**
* @Route("/login", name="app_login")
*/
public function login(AuthenticationUtils $authenticationUtils): Response
{
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
if($error){
}
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
}
/**
* @Route("/logout", name="app_logout")
*/
public function logout()
{
throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
}

View File

@ -0,0 +1,33 @@
<?php
namespace App\DataFixtures;
use App\Entity\DmuCat;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\Fixture;
class CatDmuFixtures extends Fixture
{
public function load(ObjectManager $manager): void
{
$dmuCat1 = (new DmuCat())
->setCodeBarre('123456-FF-POCHE')
->setPocheNumber(3)
;
$manager->persist($dmuCat1);
$dmuCat2 = (new DmuCat())
->setCodeBarre('123456-BB-POCHE')
->setPocheNumber(4)
;
$manager->persist($dmuCat2);
$dmuCat3 = (new DmuCat())
->setCodeBarre('123456-CC-POCHE')
->setPocheNumber(5)
;
$manager->persist($dmuCat3);
$manager->flush();
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace App\DataFixtures;
use App\Entity\DonCat;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\Fixture;
class DonCatFixtures extends Fixture
{
public function load(ObjectManager $manager): void
{
$donCat1 = (new DonCat())->setName('cat1');
$manager->persist($donCat1);
$donCat2 = (new DonCat())->setName('cat2');
$manager->persist($donCat2);
$donCat3 = (new DonCat())->setName('cat3');
$manager->persist($donCat3);
$manager->flush();
}
}

View File

@ -0,0 +1,55 @@
<?php
namespace App\DataFixtures;
use App\Entity\Don;
use App\Repository\DonCatRepository;
use App\Repository\PatientRepository;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
class DonFixtures extends Fixture implements DependentFixtureInterface
{
protected PatientRepository $patientRepository;
protected DonCatRepository $donCatRepository;
public function __construct(PatientRepository $patientRepository, DonCatRepository $donCatRepository)
{
$this->patientRepository = $patientRepository;
$this->donCatRepository = $donCatRepository;
}
public function load(ObjectManager $manager): void
{
$donneur = $this->patientRepository->findOneBy(['lastname'=>'Durand']);
$donCat = $this->donCatRepository->findBy([], ['name'=>'ASC'], 1)[0];
$donneur = (new Don())
->setCodeBarre('12345678912')
->setDonCat($donCat)
->setNbreTube(5)
->setDonneur($donneur)
;
$manager->persist($donneur);
$manager->flush();
$donneur = $this->patientRepository->findOneBy(['lastname'=>'Gauthier']);
$donCat = $this->donCatRepository->findBy([], ['name'=>'ASC'], 1)[0];
$donneur = (new Don())
->setCodeBarre('12345678913')
->setDonCat($donCat)
->setNbreTube(6)
->setDonneur($donneur)
;
$manager->persist($donneur);
$manager->flush();
}
public function getDependencies()
{
return [
DonCatFixtures::class,
PatientFixtures::class
];
}
}

View File

@ -0,0 +1,39 @@
<?php
namespace App\DataFixtures;
use DateTime;
use App\Entity\Patient;
use App\Repository\PatientRepository;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\Fixture;
class PatientFixtures extends Fixture
{
protected PatientRepository $patientRepository;
public function __construct(PatientRepository $patientRepository)
{
$this->patientRepository = $patientRepository;
}
public function load(ObjectManager $manager): void
{
$donneur = (new Patient())
->setLastname('Durand')
->setFirstname('Pierre')
->setBirthdate(new DateTime('01-01-1990'))
->setDonneurNumber('123456')
;
$manager->persist($donneur);
$manager->flush();
$donneur = (new Patient())
->setLastname('Gauthier')
->setFirstname('Isabelle')
->setBirthdate(new DateTime('01-01-1980'))
->setDonneurNumber('123999')
;
$manager->persist($donneur);
$manager->flush();
}
}

View File

@ -0,0 +1,79 @@
<?php
namespace App\DataFixtures;
use App\Entity\Tube;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\Fixture;
class TubesFixtures extends Fixture
{
public function load(ObjectManager $manager): void
{
$tube1 = (new Tube())
->setReference('tube1')
->setColorCss('#fb2930')
->setColorName('rouge')
->setAnalyse('??')
;
$manager->persist($tube1);
$tube2 = (new Tube())
->setReference('tube2')
->setColorCss('#f7acb0')
->setColorName('rose')
->setAnalyse('??')
;
$manager->persist($tube2);
$tube3 = (new Tube())
->setReference('tube3')
->setColorCss('#01cdfe')
->setColorName('bleu')
->setAnalyse('??')
;
$manager->persist($tube3);
$tube4 = (new Tube())
->setReference('tube 4')
->setColorCss('#e34234')
->setColorName('orange')
->setAnalyse('??')
;
$manager->persist($tube4);
$tube5 = (new Tube())
->setReference('tube 5')
->setColorCss('#e47ff0')
->setColorName('violet')
->setAnalyse('??')
;
$manager->persist($tube5);
$tube6 = (new Tube())
->setReference('tube 6')
->setColorCss('#e7b210')
->setColorName('jaune')
->setAnalyse('??')
;
$manager->persist($tube6);
$tube7 = (new Tube())
->setReference('tube 7')
->setColorCss('#c4bad0')
->setColorName('gris')
->setAnalyse('??')
;
$manager->persist($tube7);
$tube8 = (new Tube())
->setReference('tube 8')
->setColorCss('#333333')
->setColorName('noir')
->setAnalyse('??')
;
$manager->persist($tube8);
$manager->flush();
}
}

View File

@ -0,0 +1,47 @@
<?php
namespace App\DataFixtures;
use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
class UserFixtures extends Fixture implements FixtureGroupInterface
{
private $passwordEncoder;
public function __construct(UserPasswordHasherInterface $passwordEncoder)
{
$this->passwordEncoder = $passwordEncoder;
}
public function load(ObjectManager $manager)
{
$user = new User();
$user->setPassword($this->passwordEncoder->hashPassword(
$user,
"rootroot"
));
$user->setEmail("rmasson.pro@gmail.com")
->setRoles(["ROLE_USER","ROLE_ADMIN"]);
$manager->persist($user);
$user = new User();
$user->setPassword($this->passwordEncoder->hashPassword(
$user,
"rootroot"
));
$user->setEmail("sebastien.rubier@efs.fr")
->setRoles(["ROLE_USER","ROLE_ADMIN"]);
$manager->persist($user);
$manager->flush();
}
public static function getGroups(): array
{
return ['userGroup'];
}
}

View File

@ -2,10 +2,10 @@
namespace App\Entity;
use App\Repository\TypeDmuRepository;
use App\Repository\DmuCatRepository;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: TypeDmuRepository::class)]
#[ORM\Entity(repositoryClass: DmuCatRepository::class)]
class DmuCat
{
#[ORM\Id]
@ -13,7 +13,7 @@ class DmuCat
#[ORM\Column]
private ?int $id = null;
#[ORM\Column]
#[ORM\Column(nullable: true)]
private ?int $pocheNumber = null;
#[ORM\Column(length: 1000)]

View File

@ -14,7 +14,7 @@ class Don
private ?int $id = null;
#[ORM\Column]
private ?int $giftNumber = null;
private ?string $codeBarre = null;
#[ORM\ManyToOne(inversedBy: 'dons')]
#[ORM\JoinColumn(nullable: false)]
@ -24,22 +24,22 @@ class Don
#[ORM\JoinColumn(nullable: false)]
private ?Patient $donneur = null;
#[ORM\Column(length: 1000, nullable: true)]
private ?string $codeBarre = null;
#[ORM\Column]
private ?int $nbreTube = null;
public function getId(): ?int
{
return $this->id;
}
public function getGiftNumber(): ?int
public function getCodeBarre(): ?string
{
return $this->giftNumber;
return $this->codeBarre;
}
public function setGiftNumber(int $giftNumber): self
public function setCodeBarre(string $codeBarre): self
{
$this->giftNumber = $giftNumber;
$this->codeBarre = $codeBarre;
return $this;
}
@ -68,14 +68,14 @@ class Don
return $this;
}
public function getCodeBarre(): ?string
public function getNbreTube(): ?int
{
return $this->codeBarre;
return $this->nbreTube;
}
public function setCodeBarre(?string $codeBarre): self
public function setNbreTube(int $nbreTube): self
{
$this->codeBarre = $codeBarre;
$this->nbreTube = $nbreTube;
return $this;
}

View File

@ -7,6 +7,8 @@ use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
#[ORM\Entity(repositoryClass: PatientRepository::class)]
class Patient
@ -17,6 +19,7 @@ class Patient
private ?int $id = null;
#[ORM\Column(length: 100)]
#[Assert\Regex('/[A-Z][a-z]{0,99}/')]
private ?string $lastname = null;
#[ORM\Column(length: 100)]
@ -26,7 +29,7 @@ class Patient
private ?\DateTimeInterface $birthdate = null;
#[ORM\Column]
private ?int $donneurNumber = null;
private ?string $donneurNumber = null;
#[ORM\OneToMany(mappedBy: 'donneur', targetEntity: Don::class, orphanRemoval: true)]
private Collection $dons;
@ -77,12 +80,12 @@ class Patient
return $this;
}
public function getDonneurNumber(): ?int
public function getDonneurNumber(): ?string
{
return $this->donneurNumber;
}
public function setDonneurNumber(int $donneurNumber): self
public function setDonneurNumber(string $donneurNumber): self
{
$this->donneurNumber = $donneurNumber;
@ -118,7 +121,7 @@ class Patient
return $this;
}
public function __toString()
{
return $this->firstname.' '.$this->lastname;

118
src/Entity/User.php Normal file
View File

@ -0,0 +1,118 @@
<?php
namespace App\Entity;
use App\Repository\UserRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
use Symfony\Component\Security\Core\User\UserInterface;
#[ORM\Entity(repositoryClass: UserRepository::class)]
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 180, unique: true)]
private ?string $email = null;
#[ORM\Column]
private array $roles = [];
/**
* @var string The hashed password
*/
#[ORM\Column]
private ?string $password = null;
public function getId(): ?int
{
return $this->id;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
/**
* A visual identifier that represents this user.
*
* @see UserInterface
*/
public function getUserIdentifier(): string
{
return (string) $this->email;
}
/**
* @deprecated since Symfony 5.3, use getUserIdentifier instead
*/
public function getUsername(): string
{
return (string) $this->email;
}
/**
* @see UserInterface
*/
public function getRoles(): array
{
$roles = $this->roles;
// guarantee every user at least has ROLE_USER
$roles[] = 'ROLE_USER';
return array_unique($roles);
}
public function setRoles(array $roles): self
{
$this->roles = $roles;
return $this;
}
/**
* @see PasswordAuthenticatedUserInterface
*/
public function getPassword(): string
{
return $this->password;
}
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
/**
* Returning a salt is only needed, if you are not using a modern
* hashing algorithm (e.g. bcrypt or sodium) in your security.yaml.
*
* @see UserInterface
*/
public function getSalt(): ?string
{
return null;
}
/**
* @see UserInterface
*/
public function eraseCredentials()
{
// If you store any temporary, sensitive data on the user, clear it here
// $this->plainPassword = null;
}
}

View File

@ -12,7 +12,9 @@ class DmuCatType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('pocheNumber')
->add('pocheNumber', null, [
'required'=>false,
])
->add('codeBarre')
;
}

View File

@ -15,12 +15,12 @@ class DonType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('giftNumber')
->add('codeBarre')
->add('donCat', EntityType::class, [
'class'=> DonCat::class,
'choice_label'=> 'name'
])
->add('nbreTube')
->add('donneur', EntityType::class, [
'class'=> Patient::class,
])

View File

@ -0,0 +1,40 @@
<?php
namespace App\Form\Handler;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\FormInterface;
class UserHandler extends AbstractController
{
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public function new(FormInterface $form, Request $request): bool
{
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
$this->entityManager->persist($user);
$this->entityManager->flush();
return true;
}
return false;
}
public function edit(FormInterface $form, Request $request): bool
{
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->entityManager->flush();
return true;
}
return false;
}
}

View File

@ -6,16 +6,23 @@ use App\Entity\Patient;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class PatientType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('lastname')
->add('lastname', TextType::class, [
'label'=> 'Nom'
])
->add('firstname')
->add('birthdate')
->add('donneurNumber')
->add('birthdate', DateType::class, [
'years' => range(intval(date('Y')) - 10, 1920),
])
->add('donneurNumber', TextType::class)
;
}

27
src/Form/UserType.php Normal file
View File

@ -0,0 +1,27 @@
<?php
namespace App\Form;
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('email')
->add('roles')
->add('password')
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}

View File

@ -0,0 +1,83 @@
<?php
namespace App\Repository;
use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
use Symfony\Component\Security\Core\User\PasswordUpgraderInterface;
/**
* @extends ServiceEntityRepository<User>
*
* @method User|null find($id, $lockMode = null, $lockVersion = null)
* @method User|null findOneBy(array $criteria, array $orderBy = null)
* @method User[] findAll()
* @method User[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class UserRepository extends ServiceEntityRepository implements PasswordUpgraderInterface
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, User::class);
}
public function save(User $entity, bool $flush = false): void
{
$this->getEntityManager()->persist($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
public function remove(User $entity, bool $flush = false): void
{
$this->getEntityManager()->remove($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
/**
* Used to upgrade (rehash) the user's password automatically over time.
*/
public function upgradePassword(PasswordAuthenticatedUserInterface $user, string $newHashedPassword): void
{
if (!$user instanceof User) {
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', \get_class($user)));
}
$user->setPassword($newHashedPassword);
$this->save($user, true);
}
// /**
// * @return User[] Returns an array of User objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('u')
// ->andWhere('u.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('u.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?User
// {
// return $this->createQueryBuilder('u')
// ->andWhere('u.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View File

@ -0,0 +1,89 @@
<?php
namespace App\Security;
use App\Entity\User;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Security\Http\Authenticator\AbstractAuthenticator;
use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
use Symfony\Component\Security\Http\Util\TargetPathTrait;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
class LoginFormAuthenticator extends AbstractLoginFormAuthenticator
{
use TargetPathTrait;
public const LOGIN_ROUTE = 'app_login';
private UserRepository $userRepository;
private RouterInterface $router;
public function __construct(RouterInterface $router, UserRepository $userRepository)
{
$this->userRepository = $userRepository;
$this->router = $router;
}
public function supports(Request $request): bool
{
return self::LOGIN_ROUTE === $request->attributes->get('_route')
&& $request->isMethod('POST');
}
public function authenticate(Request $request): Passport
{
$email = $request->request->get('email');
$password = $request->request->get('password');
return new Passport(
new UserBadge($email, function($userIdentifier) {
// optionally pass a callback to load the User manually
$user = $this->userRepository->findOneBy(['email' => $userIdentifier]);
if (!$user) {
throw new UserNotFoundException();
}
return $user;
}),
new PasswordCredentials($password),
[
new CsrfTokenBadge(
'authenticate',
$request->request->get('_csrf_token')
)
]
);
}
protected function getLoginUrl(Request $request): string
{
return $this->router->generate(self::LOGIN_ROUTE);
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
{
if ($targetPath = $this->getTargetPath($request->getSession(), $firewallName)) {
return new RedirectResponse($targetPath);
}
return new RedirectResponse($this->router->generate("admin_home"));
}
public function onAuthenticationFailure(Request $request, AuthenticationException $exception): Response
{
$request->getSession()->set(Security::AUTHENTICATION_ERROR, $exception);
return new RedirectResponse(
$this->router->generate(self::LOGIN_ROUTE)
);
}
}

View File

@ -25,6 +25,18 @@
"src/Repository/.gitignore"
]
},
"doctrine/doctrine-fixtures-bundle": {
"version": "3.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "3.0",
"ref": "1f5514cfa15b947298df4d771e694e578d4c204d"
},
"files": [
"src/DataFixtures/AppFixtures.php"
]
},
"doctrine/doctrine-migrations-bundle": {
"version": "3.2",
"recipe": {

View File

@ -114,10 +114,10 @@
<span data-bs-toggle="tooltip" title="editer">
<a href="{{ path( route~"_edit", {'id': el.id}) }}" class="btn btn-sm btn-info"><i class="fas fa-edit"></i></a>
</span>
<span data-bs-toggle="tooltip" title="Supprimer">
<span title="Supprimer">
<a href="#" data-bs-toggle="modal" data-bs-target="#deletePicture{{ el.id }}" class="btn btn-sm btn-danger"><i class="fas fa-trash-alt"></i></a>
</span>
<div id="deletePicture{{ el.id }}" class="text-left modal fade" role="dialog">
<div id="deletePicture{{ el.id }}" class="text-left modal fade" role="dialog" aria-hideen="true">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">

View File

@ -1,10 +1,13 @@
<header class="header">
<div class="header-logo">
<a href="{{ path('admin_home') }}">
{# <img src="{{ asset('uploads/logo.png') }}" alt="logo Madera">#}
<a href="{{ path('admin_app_index') }}">
</a>
</div>
<div class="header-nav">
</div>
</div>
<div class="header-deconnexion">
<a href="{{path('app_logout')}}">Déconnexion</a>
</div>
</header>

View File

@ -21,7 +21,7 @@
{% include 'admin/layouts/sidebar.html.twig' %}
<main class="page-container-content">
<div class="text-end m-4">
<!-- <a href="{{ path('admin_home') }}" target="_blank">Voir le site <i class="fas fa-eye"></i></a> -->
<a href="{{ path('app_front') }}" target="_blank">Voir le site <i class="fas fa-eye"></i></a>
</div>
<nav>
@ -31,7 +31,7 @@
</li>
<li class="breadcrumb-second">
<ol class="breadcrumb ">
<li class="breadcrumb-item"><a href="{{ path('admin_home') }}">Accueil</a></li>
<li class="breadcrumb-item"><a href="{{ path('admin_app_index') }}">Accueil</a></li>
{% block breadcrumb %}{% endblock %}
</ol>
</li>
@ -43,5 +43,7 @@
</div>
{% include 'admin/layouts/footer.html.twig' %}
</div>
{{ encore_entry_script_tags('app') }}
</body>
</html>

View File

@ -4,12 +4,13 @@
<ul>
{# <li><a href="{{ path('admin_customer_index') }}">Clients</a></li>#}
<li><a href="{{ path('admin_home') }}">Page d'accueil</a></li>
<li><a href="{{ path('admin_app_index') }}">Page d'accueil</a></li>
<li><a href="{{ path('admin_app_don_index') }}">Don</a></li>
<li><a href="{{ path('admin_app_don_cat_index') }}">Categorie de don</a></li>
<li><a href="{{ path('admin_app_patient_index') }}">Donneur</a></li>
<li><a href="{{ path('admin_app_tube_index') }}">Tube</a></li>
<li><a href="{{ path('admin_app_dmu_cat_index') }}">Categorie DMU</a></li>
<li><a href="{{ path('admin_app_user_index') }}">User</a></li>
</ul>
</div>

View File

@ -4,9 +4,9 @@
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text></svg>">
{# Run `composer require symfony/webpack-encore-bundle` to start using Symfony UX #}
{% block stylesheets %}
{{ encore_entry_link_tags('app') }}
{{ encore_entry_link_tags('frontStyle') }}
{% endblock %}
{% block javascripts %}

View File

@ -0,0 +1,77 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>{% block title %}Administration{% endblock %}</title>
<meta name="robots" content="noindex, nofollow">
<link rel="shortcut icon" type="image/png" href="{{ asset('favicon/favicon.ico') }}"/>
{{ encore_entry_link_tags('adminStyle') }}
{% block stylesheets %}
{% endblock %}
</head>
<body>
<div class="displaySuccess">
<div>Félicitation, procédure terminée</div>
</div>
<div class="error"></div>
<form action="">
<input type="text" id="saisie">
</form>
<header class="page_header">
<div class="gift_cb">
<div class="cb_cb">
</div>
<div class="cb_number">
<span id="don"></span>
</div>
</div>
<div class="identity">
<ul>
<li>Nom d'usage : <span id="nom"></span> <span id="prenom"></span></li>
<li>Date de naissance : <span id="naissance"></span></li>
</ul>
</div>
<div class="gift_specificity">
<ul>
<li>Type de don : <span id="typeDon"></span></li>
<li>DMU à étiqueter: <span id="typePoche"></span></li>
<li>Tubes à étiqueter: <span id="nbreTube"></span></li>
</ul>
</div>
</header>
<main>
<div class="container">
<div class="info">
<div id="step">
1 / 2
</div>
<div id="indication">
Scanner le code du don!
</div>
<div id="evolution">
<div id="label">
<span id="type"></span>
<span> : </span>
<span id="current"></span>
<span> / </span>
<span id="todo"></span>
</div>
<input id="inputRange" type="range" step="1" min="0" max="" value="">
</div>
<div id="picturePoche">
</div>
<div id="pictureTube">
</div>
</div>
</div>
</main>
{{ encore_entry_script_tags('app') }}
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More