This commit is contained in:
2025-08-04 21:10:10 +02:00
parent 76c3c2376c
commit 659c5536fa
23 changed files with 981 additions and 564 deletions

17
.editorconfig Normal file
View File

@ -0,0 +1,17 @@
# editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[{compose.yaml,compose.*.yaml}]
indent_size = 2
[*.md]
trim_trailing_whitespace = false

1
.env
View File

@ -17,3 +17,4 @@ CAS_USERNAME=uid
CAS_MAIL=mail
CAS_LASTNAME=lastname
CAS_FIRSTNAME=firstname

4
.env.dev Normal file
View File

@ -0,0 +1,4 @@
###> symfony/framework-bundle ###
APP_SECRET=628790eb09e2cf96d93a21f4f43433d8
###< symfony/framework-bundle ###

30
.gitignore vendored
View File

@ -16,4 +16,32 @@
phpstan.neon
/.php-cs-fixer.php
/.php-cs-fixer.cache
/volume
/volume
###> symfony/framework-bundle ###
/.env.local
/.env.local.php
/.env.*.local
/config/secrets/prod/prod.decrypt.private.php
/public/bundles/
/var/
/vendor/
###< symfony/framework-bundle ###
###> friendsofphp/php-cs-fixer ###
/.php-cs-fixer.php
/.php-cs-fixer.cache
###< friendsofphp/php-cs-fixer ###
###> phpstan/phpstan ###
phpstan.neon
###< phpstan/phpstan ###
###> phpunit/phpunit ###
/phpunit.xml
.phpunit.result.cache
###< phpunit/phpunit ###
###> symfony/phpunit-bridge ###
.phpunit.result.cache
/phpunit.xml
###< symfony/phpunit-bridge ###

2
assets/bootstrap.js vendored Normal file
View File

@ -0,0 +1,2 @@
// register any custom, 3rd party controllers here
// app.register('some_controller_name', SomeImportedController);

4
assets/controllers.json Normal file
View File

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

View File

@ -0,0 +1,79 @@
const nameCheck = /^[-_a-zA-Z0-9]{4,22}$/;
const tokenCheck = /^[-_/+a-zA-Z0-9]{24,}$/;
// Generate and double-submit a CSRF token in a form field and a cookie, as defined by Symfony's SameOriginCsrfTokenManager
document.addEventListener('submit', function (event) {
generateCsrfToken(event.target);
}, true);
// When @hotwired/turbo handles form submissions, send the CSRF token in a header in addition to a cookie
// The `framework.csrf_protection.check_header` config option needs to be enabled for the header to be checked
document.addEventListener('turbo:submit-start', function (event) {
const h = generateCsrfHeaders(event.detail.formSubmission.formElement);
Object.keys(h).map(function (k) {
event.detail.formSubmission.fetchRequest.headers[k] = h[k];
});
});
// When @hotwired/turbo handles form submissions, remove the CSRF cookie once a form has been submitted
document.addEventListener('turbo:submit-end', function (event) {
removeCsrfToken(event.detail.formSubmission.formElement);
});
export function generateCsrfToken (formElement) {
const csrfField = formElement.querySelector('input[data-controller="csrf-protection"], input[name="_csrf_token"]');
if (!csrfField) {
return;
}
let csrfCookie = csrfField.getAttribute('data-csrf-protection-cookie-value');
let csrfToken = csrfField.value;
if (!csrfCookie && nameCheck.test(csrfToken)) {
csrfField.setAttribute('data-csrf-protection-cookie-value', csrfCookie = csrfToken);
csrfField.defaultValue = csrfToken = btoa(String.fromCharCode.apply(null, (window.crypto || window.msCrypto).getRandomValues(new Uint8Array(18))));
csrfField.dispatchEvent(new Event('change', { bubbles: true }));
}
if (csrfCookie && tokenCheck.test(csrfToken)) {
const cookie = csrfCookie + '_' + csrfToken + '=' + csrfCookie + '; path=/; samesite=strict';
document.cookie = window.location.protocol === 'https:' ? '__Host-' + cookie + '; secure' : cookie;
}
}
export function generateCsrfHeaders (formElement) {
const headers = {};
const csrfField = formElement.querySelector('input[data-controller="csrf-protection"], input[name="_csrf_token"]');
if (!csrfField) {
return headers;
}
const csrfCookie = csrfField.getAttribute('data-csrf-protection-cookie-value');
if (tokenCheck.test(csrfField.value) && nameCheck.test(csrfCookie)) {
headers[csrfCookie] = csrfField.value;
}
return headers;
}
export function removeCsrfToken (formElement) {
const csrfField = formElement.querySelector('input[data-controller="csrf-protection"], input[name="_csrf_token"]');
if (!csrfField) {
return;
}
const csrfCookie = csrfField.getAttribute('data-csrf-protection-cookie-value');
if (tokenCheck.test(csrfField.value) && nameCheck.test(csrfCookie)) {
const cookie = csrfCookie + '_' + csrfField.value + '=0; path=/; samesite=strict; max-age=0';
document.cookie = window.location.protocol === 'https:' ? '__Host-' + cookie + '; secure' : cookie;
}
}
/* stimulusFetch: 'lazy' */
export default 'csrf-protection-controller';

View File

@ -0,0 +1,16 @@
import { Controller } from '@hotwired/stimulus';
/*
* This is an example Stimulus controller!
*
* Any element with a data-controller="hello" attribute will cause
* this controller to be executed. The name "hello" comes from the filename:
* hello_controller.js -> "hello"
*
* Delete this file or adapt it for your use!
*/
export default class extends Controller {
connect() {
this.element.textContent = 'Hello Stimulus! Edit me in assets/controllers/hello_controller.js';
}
}

View File

@ -21,34 +21,34 @@
"phpdocumentor/reflection-docblock": "^5.4",
"phpstan/phpdoc-parser": "^1.33",
"ramsey/uuid": "^4.7",
"symfony/asset": "7.1.*",
"symfony/console": "7.1.*",
"symfony/doctrine-messenger": "7.1.*",
"symfony/dotenv": "7.1.*",
"symfony/expression-language": "7.1.*",
"symfony/asset": "^7.2",
"symfony/console": "^7.2",
"symfony/doctrine-messenger": "^7.2",
"symfony/dotenv": "^7.2",
"symfony/expression-language": "^7.2",
"symfony/flex": "^2",
"symfony/form": "7.1.*",
"symfony/framework-bundle": "7.1.*",
"symfony/http-client": "7.1.*",
"symfony/intl": "7.1.*",
"symfony/mailer": "7.1.*",
"symfony/mime": "7.1.*",
"symfony/form": "^7.2",
"symfony/framework-bundle": "^7.2",
"symfony/http-client": "^7.2",
"symfony/intl": "^7.2",
"symfony/mailer": "^7.2",
"symfony/mime": "^7.2",
"symfony/monolog-bundle": "^3.0",
"symfony/notifier": "7.1.*",
"symfony/process": "7.1.*",
"symfony/property-access": "7.1.*",
"symfony/property-info": "7.1.*",
"symfony/runtime": "7.1.*",
"symfony/security-bundle": "7.1.*",
"symfony/serializer": "7.1.*",
"symfony/notifier": "^7.2",
"symfony/process": "^7.2",
"symfony/property-access": "^7.2",
"symfony/property-info": "^7.2",
"symfony/runtime": "^7.2",
"symfony/security-bundle": "^7.2",
"symfony/serializer": "^7.2",
"symfony/stimulus-bundle": "^2.21",
"symfony/string": "7.1.*",
"symfony/translation": "7.1.*",
"symfony/twig-bundle": "7.1.*",
"symfony/string": "^7.2",
"symfony/translation": "^7.2",
"symfony/twig-bundle": "^7.2",
"symfony/ux-turbo": "^2.21",
"symfony/validator": "7.1.*",
"symfony/web-link": "7.1.*",
"symfony/yaml": "7.1.*",
"symfony/validator": "^7.2",
"symfony/web-link": "^7.2",
"symfony/yaml": "^7.2",
"twig/extra-bundle": "^3.21",
"twig/markdown-extra": "^3.21",
"twig/twig": "^2.12|^3.0"
@ -99,7 +99,7 @@
"extra": {
"symfony": {
"allow-contrib": false,
"require": "7.1.*"
"require": "^7.2"
}
},
"require-dev": {
@ -108,12 +108,12 @@
"phpstan/phpstan-doctrine": "^2.0",
"phpstan/phpstan-symfony": "^2.0",
"phpunit/phpunit": "^9.5",
"symfony/browser-kit": "7.1.*",
"symfony/css-selector": "7.1.*",
"symfony/debug-bundle": "7.1.*",
"symfony/browser-kit": "^7.2",
"symfony/css-selector": "^7.2",
"symfony/debug-bundle": "^7.2",
"symfony/maker-bundle": "^1.0",
"symfony/phpunit-bridge": "^7.1",
"symfony/stopwatch": "7.1.*",
"symfony/web-profiler-bundle": "7.1.*"
"symfony/phpunit-bridge": "^7.2",
"symfony/stopwatch": "^7.2",
"symfony/web-profiler-bundle": "^7.2"
}
}

1031
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "2d59dc750783494ae1dbf58d9a3025c3",
"content-hash": "67e324518270930150d990299cd0b613",
"packages": [
{
"name": "apereo/phpcas",
@ -3377,16 +3377,16 @@
},
{
"name": "symfony/asset",
"version": "v7.1.6",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/asset.git",
"reference": "0dcd51490d7fc9fbf3c8f5aec6df182920fc0426"
"reference": "56c4d9f759247c4e07d8549e3baf7493cb9c3e4b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/asset/zipball/0dcd51490d7fc9fbf3c8f5aec6df182920fc0426",
"reference": "0dcd51490d7fc9fbf3c8f5aec6df182920fc0426",
"url": "https://api.github.com/repos/symfony/asset/zipball/56c4d9f759247c4e07d8549e3baf7493cb9c3e4b",
"reference": "56c4d9f759247c4e07d8549e3baf7493cb9c3e4b",
"shasum": ""
},
"require": {
@ -3426,7 +3426,7 @@
"description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/asset/tree/v7.1.6"
"source": "https://github.com/symfony/asset/tree/v7.3.0"
},
"funding": [
{
@ -3442,27 +3442,27 @@
"type": "tidelift"
}
],
"time": "2024-10-25T15:11:02+00:00"
"time": "2025-03-05T10:15:41+00:00"
},
{
"name": "symfony/cache",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "3828c0375578ff3ca1ddc54cc5c6fa4cc89fb3fb"
"reference": "6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/3828c0375578ff3ca1ddc54cc5c6fa4cc89fb3fb",
"reference": "3828c0375578ff3ca1ddc54cc5c6fa4cc89fb3fb",
"url": "https://api.github.com/repos/symfony/cache/zipball/6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6",
"reference": "6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6",
"shasum": ""
},
"require": {
"php": ">=8.2",
"psr/cache": "^2.0|^3.0",
"psr/log": "^1.1|^2|^3",
"symfony/cache-contracts": "^2.5|^3",
"symfony/cache-contracts": "^3.6",
"symfony/deprecation-contracts": "^2.5|^3.0",
"symfony/service-contracts": "^2.5|^3",
"symfony/var-exporter": "^6.4|^7.0"
@ -3483,6 +3483,7 @@
"doctrine/dbal": "^3.6|^4",
"predis/predis": "^1.1|^2.0",
"psr/simple-cache": "^1.0|^2.0|^3.0",
"symfony/clock": "^6.4|^7.0",
"symfony/config": "^6.4|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/filesystem": "^6.4|^7.0",
@ -3523,7 +3524,7 @@
"psr6"
],
"support": {
"source": "https://github.com/symfony/cache/tree/v7.1.11"
"source": "https://github.com/symfony/cache/tree/v7.3.2"
},
"funding": [
{
@ -3534,12 +3535,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-27T10:57:12+00:00"
"time": "2025-07-30T17:13:41+00:00"
},
{
"name": "symfony/cache-contracts",
@ -3619,16 +3624,16 @@
},
{
"name": "symfony/clock",
"version": "v7.1.6",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/clock.git",
"reference": "97bebc53548684c17ed696bc8af016880f0f098d"
"reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/clock/zipball/97bebc53548684c17ed696bc8af016880f0f098d",
"reference": "97bebc53548684c17ed696bc8af016880f0f098d",
"url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24",
"reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24",
"shasum": ""
},
"require": {
@ -3673,7 +3678,7 @@
"time"
],
"support": {
"source": "https://github.com/symfony/clock/tree/v7.1.6"
"source": "https://github.com/symfony/clock/tree/v7.3.0"
},
"funding": [
{
@ -3689,20 +3694,20 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/config",
"version": "v7.1.7",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8"
"reference": "faef36e271bbeb74a9d733be4b56419b157762e2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8",
"reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8",
"url": "https://api.github.com/repos/symfony/config/zipball/faef36e271bbeb74a9d733be4b56419b157762e2",
"reference": "faef36e271bbeb74a9d733be4b56419b157762e2",
"shasum": ""
},
"require": {
@ -3748,7 +3753,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/config/tree/v7.1.7"
"source": "https://github.com/symfony/config/tree/v7.3.2"
},
"funding": [
{
@ -3759,32 +3764,37 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-11-04T11:34:07+00:00"
"time": "2025-07-26T13:55:06+00:00"
},
{
"name": "symfony/console",
"version": "v7.1.10",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "bb06e2d7f8dd9dffe5eada8a5cbe0f68f1482db7"
"reference": "5f360ebc65c55265a74d23d7fe27f957870158a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/bb06e2d7f8dd9dffe5eada8a5cbe0f68f1482db7",
"reference": "bb06e2d7f8dd9dffe5eada8a5cbe0f68f1482db7",
"url": "https://api.github.com/repos/symfony/console/zipball/5f360ebc65c55265a74d23d7fe27f957870158a1",
"reference": "5f360ebc65c55265a74d23d7fe27f957870158a1",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3",
"symfony/string": "^6.4|^7.0"
"symfony/string": "^7.2"
},
"conflict": {
"symfony/dependency-injection": "<6.4",
@ -3841,7 +3851,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v7.1.10"
"source": "https://github.com/symfony/console/tree/v7.3.2"
},
"funding": [
{
@ -3852,25 +3862,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-12-09T07:30:10+00:00"
"time": "2025-07-30T17:13:41+00:00"
},
{
"name": "symfony/dependency-injection",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "5ebf7d4dfda126b442450effaec421a106c010de"
"reference": "6cd2a1a77e8a0676a26e8bcddf10acfe7b0ba352"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5ebf7d4dfda126b442450effaec421a106c010de",
"reference": "5ebf7d4dfda126b442450effaec421a106c010de",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6cd2a1a77e8a0676a26e8bcddf10acfe7b0ba352",
"reference": "6cd2a1a77e8a0676a26e8bcddf10acfe7b0ba352",
"shasum": ""
},
"require": {
@ -3878,7 +3892,7 @@
"psr/container": "^1.1|^2.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/service-contracts": "^3.5",
"symfony/var-exporter": "^6.4|^7.0"
"symfony/var-exporter": "^6.4.20|^7.2.5"
},
"conflict": {
"ext-psr": "<1.1|>=2",
@ -3921,7 +3935,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/v7.1.11"
"source": "https://github.com/symfony/dependency-injection/tree/v7.3.2"
},
"funding": [
{
@ -3932,12 +3946,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-10T09:29:52+00:00"
"time": "2025-07-30T17:31:46+00:00"
},
{
"name": "symfony/deprecation-contracts",
@ -4008,16 +4026,16 @@
},
{
"name": "symfony/doctrine-bridge",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-bridge.git",
"reference": "b0247c25b71409c23c0cf3e090030950a86cc61b"
"reference": "a2cbc12baf9bcc5d0c125e4c0f8330b98af841ca"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/b0247c25b71409c23c0cf3e090030950a86cc61b",
"reference": "b0247c25b71409c23c0cf3e090030950a86cc61b",
"url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/a2cbc12baf9bcc5d0c125e4c0f8330b98af841ca",
"reference": "a2cbc12baf9bcc5d0c125e4c0f8330b98af841ca",
"shasum": ""
},
"require": {
@ -4030,6 +4048,7 @@
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
"doctrine/collections": "<1.8",
"doctrine/dbal": "<3.6",
"doctrine/lexer": "<1.1",
"doctrine/orm": "<2.15",
@ -4046,7 +4065,7 @@
"symfony/validator": "<6.4"
},
"require-dev": {
"doctrine/collections": "^1.0|^2.0",
"doctrine/collections": "^1.8|^2.0",
"doctrine/data-fixtures": "^1.1|^2",
"doctrine/dbal": "^3.6|^4",
"doctrine/orm": "^2.15|^3",
@ -4065,7 +4084,7 @@
"symfony/security-core": "^6.4|^7.0",
"symfony/stopwatch": "^6.4|^7.0",
"symfony/translation": "^6.4|^7.0",
"symfony/type-info": "^7.1",
"symfony/type-info": "^7.1.8",
"symfony/uid": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0"
@ -4096,7 +4115,7 @@
"description": "Provides integration for Doctrine with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.11"
"source": "https://github.com/symfony/doctrine-bridge/tree/v7.3.2"
},
"funding": [
{
@ -4107,31 +4126,35 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-27T10:57:12+00:00"
"time": "2025-07-15T11:36:08+00:00"
},
{
"name": "symfony/doctrine-messenger",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-messenger.git",
"reference": "a7813f3cfc8c66bd5930f15fcf591a1dee27b089"
"reference": "31ef09fa3185c8ef9a331170b7a9dd891047f5cb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/a7813f3cfc8c66bd5930f15fcf591a1dee27b089",
"reference": "a7813f3cfc8c66bd5930f15fcf591a1dee27b089",
"url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/31ef09fa3185c8ef9a331170b7a9dd891047f5cb",
"reference": "31ef09fa3185c8ef9a331170b7a9dd891047f5cb",
"shasum": ""
},
"require": {
"doctrine/dbal": "^3.6|^4",
"php": ">=8.2",
"symfony/messenger": "^6.4|^7.0",
"symfony/messenger": "^7.2",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
@ -4168,7 +4191,7 @@
"description": "Symfony Doctrine Messenger Bridge",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/doctrine-messenger/tree/v7.1.11"
"source": "https://github.com/symfony/doctrine-messenger/tree/v7.3.2"
},
"funding": [
{
@ -4179,25 +4202,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-07T09:23:14+00:00"
"time": "2025-07-30T17:13:41+00:00"
},
{
"name": "symfony/dotenv",
"version": "v7.1.9",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
"reference": "245d1afe223664d2276afb75177d8988c328fb78"
"reference": "2192790a11f9e22cbcf9dc705a3ff22a5503923a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/245d1afe223664d2276afb75177d8988c328fb78",
"reference": "245d1afe223664d2276afb75177d8988c328fb78",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/2192790a11f9e22cbcf9dc705a3ff22a5503923a",
"reference": "2192790a11f9e22cbcf9dc705a3ff22a5503923a",
"shasum": ""
},
"require": {
@ -4242,7 +4269,7 @@
"environment"
],
"support": {
"source": "https://github.com/symfony/dotenv/tree/v7.1.9"
"source": "https://github.com/symfony/dotenv/tree/v7.3.2"
},
"funding": [
{
@ -4253,25 +4280,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-11-27T11:17:28+00:00"
"time": "2025-07-10T08:29:33+00:00"
},
{
"name": "symfony/error-handler",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "f4d1fd1bcb4bce9983d034111b7ea3edc88e1a57"
"reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/f4d1fd1bcb4bce9983d034111b7ea3edc88e1a57",
"reference": "f4d1fd1bcb4bce9983d034111b7ea3edc88e1a57",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/0b31a944fcd8759ae294da4d2808cbc53aebd0c3",
"reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3",
"shasum": ""
},
"require": {
@ -4284,9 +4315,11 @@
"symfony/http-kernel": "<6.4"
},
"require-dev": {
"symfony/console": "^6.4|^7.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/serializer": "^6.4|^7.0"
"symfony/serializer": "^6.4|^7.0",
"symfony/webpack-encore-bundle": "^1.0|^2.0"
},
"bin": [
"Resources/bin/patch-type-declarations"
@ -4317,7 +4350,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/v7.1.11"
"source": "https://github.com/symfony/error-handler/tree/v7.3.2"
},
"funding": [
{
@ -4328,25 +4361,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-07T09:23:14+00:00"
"time": "2025-07-07T08:17:57+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v7.1.6",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "87254c78dd50721cfd015b62277a8281c5589702"
"reference": "497f73ac996a598c92409b44ac43b6690c4f666d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702",
"reference": "87254c78dd50721cfd015b62277a8281c5589702",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d",
"reference": "497f73ac996a598c92409b44ac43b6690c4f666d",
"shasum": ""
},
"require": {
@ -4397,7 +4434,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/v7.1.6"
"source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0"
},
"funding": [
{
@ -4413,7 +4450,7 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2025-04-22T09:11:45+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@ -4493,16 +4530,16 @@
},
{
"name": "symfony/expression-language",
"version": "v7.1.6",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/expression-language.git",
"reference": "c3a1224bc144b36cd79149b42c1aecd5f81395a5"
"reference": "32d2d19c62e58767e6552166c32fb259975d2b23"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/expression-language/zipball/c3a1224bc144b36cd79149b42c1aecd5f81395a5",
"reference": "c3a1224bc144b36cd79149b42c1aecd5f81395a5",
"url": "https://api.github.com/repos/symfony/expression-language/zipball/32d2d19c62e58767e6552166c32fb259975d2b23",
"reference": "32d2d19c62e58767e6552166c32fb259975d2b23",
"shasum": ""
},
"require": {
@ -4537,7 +4574,7 @@
"description": "Provides an engine that can compile and evaluate expressions",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/expression-language/tree/v7.1.6"
"source": "https://github.com/symfony/expression-language/tree/v7.3.2"
},
"funding": [
{
@ -4548,25 +4585,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-10-09T08:46:59+00:00"
"time": "2025-07-10T08:29:33+00:00"
},
{
"name": "symfony/filesystem",
"version": "v7.1.6",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4"
"reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/c835867b3c62bb05c7fe3d637c871c7ae52024d4",
"reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/edcbb768a186b5c3f25d0643159a787d3e63b7fd",
"reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd",
"shasum": ""
},
"require": {
@ -4603,7 +4644,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v7.1.6"
"source": "https://github.com/symfony/filesystem/tree/v7.3.2"
},
"funding": [
{
@ -4614,25 +4655,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-10-25T15:11:02+00:00"
"time": "2025-07-07T08:17:47+00:00"
},
{
"name": "symfony/finder",
"version": "v7.1.10",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "b8b526e051ac0b33feabbec7893adcab96b23bf3"
"reference": "2a6614966ba1074fa93dae0bc804227422df4dfe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/b8b526e051ac0b33feabbec7893adcab96b23bf3",
"reference": "b8b526e051ac0b33feabbec7893adcab96b23bf3",
"url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe",
"reference": "2a6614966ba1074fa93dae0bc804227422df4dfe",
"shasum": ""
},
"require": {
@ -4667,7 +4712,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v7.1.10"
"source": "https://github.com/symfony/finder/tree/v7.3.2"
},
"funding": [
{
@ -4678,12 +4723,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-12-30T18:59:46+00:00"
"time": "2025-07-15T13:41:35+00:00"
},
{
"name": "symfony/flex",
@ -4755,23 +4804,23 @@
},
{
"name": "symfony/form",
"version": "v7.1.6",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
"reference": "7a48dda96fe16711fc042df38ca1a7dd4d9d6387"
"reference": "e83e898d1589f3ec647824bd4416defe3d6e3875"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/form/zipball/7a48dda96fe16711fc042df38ca1a7dd4d9d6387",
"reference": "7a48dda96fe16711fc042df38ca1a7dd4d9d6387",
"url": "https://api.github.com/repos/symfony/form/zipball/e83e898d1589f3ec647824bd4416defe3d6e3875",
"reference": "e83e898d1589f3ec647824bd4416defe3d6e3875",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/options-resolver": "^6.4|^7.0",
"symfony/options-resolver": "^7.3",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-icu": "^1.21",
"symfony/polyfill-mbstring": "~1.0",
@ -4832,7 +4881,7 @@
"description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/form/tree/v7.1.6"
"source": "https://github.com/symfony/form/tree/v7.3.2"
},
"funding": [
{
@ -4843,25 +4892,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-10-09T08:46:59+00:00"
"time": "2025-07-24T12:10:26+00:00"
},
{
"name": "symfony/framework-bundle",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
"reference": "1eae7a4e095a2a3851cb41ac2aea9aa60fba1df8"
"reference": "06c0f678129f99bda8b5cf8873b3d8ef5a0029e7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/1eae7a4e095a2a3851cb41ac2aea9aa60fba1df8",
"reference": "1eae7a4e095a2a3851cb41ac2aea9aa60fba1df8",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/06c0f678129f99bda8b5cf8873b3d8ef5a0029e7",
"reference": "06c0f678129f99bda8b5cf8873b3d8ef5a0029e7",
"shasum": ""
},
"require": {
@ -4869,15 +4922,15 @@
"ext-xml": "*",
"php": ">=8.2",
"symfony/cache": "^6.4|^7.0",
"symfony/config": "^6.4|^7.0",
"symfony/dependency-injection": "^7.1.5",
"symfony/config": "^7.3",
"symfony/dependency-injection": "^7.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/error-handler": "^6.4|^7.0",
"symfony/error-handler": "^7.3",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/filesystem": "^7.1",
"symfony/finder": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/http-foundation": "^7.3",
"symfony/http-kernel": "^7.2",
"symfony/polyfill-mbstring": "~1.0",
"symfony/routing": "^6.4|^7.0"
},
@ -4893,24 +4946,27 @@
"symfony/dotenv": "<6.4",
"symfony/form": "<6.4",
"symfony/http-client": "<6.4",
"symfony/json-streamer": ">=7.4",
"symfony/lock": "<6.4",
"symfony/mailer": "<6.4",
"symfony/messenger": "<6.4",
"symfony/mime": "<6.4",
"symfony/object-mapper": ">=7.4",
"symfony/property-access": "<6.4",
"symfony/property-info": "<6.4",
"symfony/runtime": "<6.4.13|>=7.0,<7.1.6",
"symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4",
"symfony/security-core": "<6.4",
"symfony/security-csrf": "<6.4",
"symfony/serializer": "<6.4",
"symfony/security-csrf": "<7.2",
"symfony/serializer": "<7.2.5",
"symfony/stopwatch": "<6.4",
"symfony/translation": "<6.4",
"symfony/translation": "<7.3",
"symfony/twig-bridge": "<6.4",
"symfony/twig-bundle": "<6.4",
"symfony/validator": "<6.4",
"symfony/web-profiler-bundle": "<6.4",
"symfony/workflow": "<6.4"
"symfony/webhook": "<7.2",
"symfony/workflow": "<7.3.0-beta2"
},
"require-dev": {
"doctrine/persistence": "^1.3|^2|^3",
@ -4929,11 +4985,13 @@
"symfony/form": "^6.4|^7.0",
"symfony/html-sanitizer": "^6.4|^7.0",
"symfony/http-client": "^6.4|^7.0",
"symfony/json-streamer": "7.3.*",
"symfony/lock": "^6.4|^7.0",
"symfony/mailer": "^6.4|^7.0",
"symfony/messenger": "^6.4|^7.0",
"symfony/mime": "^6.4|^7.0",
"symfony/notifier": "^6.4|^7.0",
"symfony/object-mapper": "^v7.3.0-beta2",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/process": "^6.4|^7.0",
"symfony/property-info": "^6.4|^7.0",
@ -4941,18 +4999,19 @@
"symfony/scheduler": "^6.4.4|^7.0.4",
"symfony/security-bundle": "^6.4|^7.0",
"symfony/semaphore": "^6.4|^7.0",
"symfony/serializer": "^6.4|^7.0",
"symfony/serializer": "^7.2.5",
"symfony/stopwatch": "^6.4|^7.0",
"symfony/string": "^6.4|^7.0",
"symfony/translation": "^6.4|^7.0",
"symfony/translation": "^7.3",
"symfony/twig-bundle": "^6.4|^7.0",
"symfony/type-info": "^7.1",
"symfony/type-info": "^7.1.8",
"symfony/uid": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/web-link": "^6.4|^7.0",
"symfony/workflow": "^6.4|^7.0",
"symfony/webhook": "^7.2",
"symfony/workflow": "^7.3",
"symfony/yaml": "^6.4|^7.0",
"twig/twig": "^3.0.4"
"twig/twig": "^3.12"
},
"type": "symfony-bundle",
"autoload": {
@ -4980,7 +5039,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/v7.1.11"
"source": "https://github.com/symfony/framework-bundle/tree/v7.3.2"
},
"funding": [
{
@ -4991,25 +5050,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-29T07:13:42+00:00"
"time": "2025-07-30T17:13:41+00:00"
},
{
"name": "symfony/http-client",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "71632c1f13b36cb4c23ccdd255946dc02753afef"
"reference": "1c064a0c67749923483216b081066642751cc2c7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/71632c1f13b36cb4c23ccdd255946dc02753afef",
"reference": "71632c1f13b36cb4c23ccdd255946dc02753afef",
"url": "https://api.github.com/repos/symfony/http-client/zipball/1c064a0c67749923483216b081066642751cc2c7",
"reference": "1c064a0c67749923483216b081066642751cc2c7",
"shasum": ""
},
"require": {
@ -5020,6 +5083,8 @@
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
"amphp/amp": "<2.5",
"amphp/socket": "<1.1",
"php-http/discovery": "<1.15",
"symfony/http-foundation": "<6.4"
},
@ -5030,14 +5095,13 @@
"symfony/http-client-implementation": "3.0"
},
"require-dev": {
"amphp/amp": "^2.5",
"amphp/http-client": "^4.2.1",
"amphp/http-tunnel": "^1.0",
"amphp/socket": "^1.1",
"amphp/http-client": "^4.2.1|^5.0",
"amphp/http-tunnel": "^1.0|^2.0",
"guzzlehttp/promises": "^1.4|^2.0",
"nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0",
"psr/http-client": "^1.0",
"symfony/amphp-http-client-meta": "^1.0|^2.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/messenger": "^6.4|^7.0",
@ -5074,7 +5138,7 @@
"http"
],
"support": {
"source": "https://github.com/symfony/http-client/tree/v7.1.11"
"source": "https://github.com/symfony/http-client/tree/v7.3.2"
},
"funding": [
{
@ -5085,12 +5149,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-28T15:50:57+00:00"
"time": "2025-07-15T11:36:08+00:00"
},
{
"name": "symfony/http-client-contracts",
@ -5172,20 +5240,21 @@
},
{
"name": "symfony/http-foundation",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "7ced01aa123612666a7a4fb72c627f969c01fa8d"
"reference": "6877c122b3a6cc3695849622720054f6e6fa5fa6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/7ced01aa123612666a7a4fb72c627f969c01fa8d",
"reference": "7ced01aa123612666a7a4fb72c627f969c01fa8d",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/6877c122b3a6cc3695849622720054f6e6fa5fa6",
"reference": "6877c122b3a6cc3695849622720054f6e6fa5fa6",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3.0",
"symfony/polyfill-mbstring": "~1.1",
"symfony/polyfill-php83": "^1.27"
},
@ -5197,6 +5266,7 @@
"doctrine/dbal": "^3.6|^4",
"predis/predis": "^1.1|^2.0",
"symfony/cache": "^6.4.12|^7.1.5",
"symfony/clock": "^6.4|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/expression-language": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
@ -5229,7 +5299,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v7.1.11"
"source": "https://github.com/symfony/http-foundation/tree/v7.3.2"
},
"funding": [
{
@ -5240,25 +5310,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-17T10:33:21+00:00"
"time": "2025-07-10T08:47:49+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "576eb3368037dd139f67b8ac71db56c3f69f7d66"
"reference": "6ecc895559ec0097e221ed2fd5eb44d5fede083c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/576eb3368037dd139f67b8ac71db56c3f69f7d66",
"reference": "576eb3368037dd139f67b8ac71db56c3f69f7d66",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/6ecc895559ec0097e221ed2fd5eb44d5fede083c",
"reference": "6ecc895559ec0097e221ed2fd5eb44d5fede083c",
"shasum": ""
},
"require": {
@ -5266,8 +5340,8 @@
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/error-handler": "^6.4|^7.0",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/event-dispatcher": "^7.3",
"symfony/http-foundation": "^7.3",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
@ -5287,7 +5361,7 @@
"symfony/twig-bridge": "<6.4",
"symfony/validator": "<6.4",
"symfony/var-dumper": "<6.4",
"twig/twig": "<3.0.4"
"twig/twig": "<3.12"
},
"provide": {
"psr/log-implementation": "1.0|2.0|3.0"
@ -5315,7 +5389,7 @@
"symfony/validator": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0",
"symfony/var-exporter": "^6.4|^7.0",
"twig/twig": "^3.0.4"
"twig/twig": "^3.12"
},
"type": "library",
"autoload": {
@ -5343,7 +5417,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/v7.1.11"
"source": "https://github.com/symfony/http-kernel/tree/v7.3.2"
},
"funding": [
{
@ -5354,25 +5428,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-29T07:34:05+00:00"
"time": "2025-07-31T10:45:04+00:00"
},
{
"name": "symfony/intl",
"version": "v7.1.8",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/intl.git",
"reference": "e56b243fc0afa5a12bd11dace4002ada5a7d99f8"
"reference": "d1197fb6661b05f6178ddb2dc9c6d576f6f67ec8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/intl/zipball/e56b243fc0afa5a12bd11dace4002ada5a7d99f8",
"reference": "e56b243fc0afa5a12bd11dace4002ada5a7d99f8",
"url": "https://api.github.com/repos/symfony/intl/zipball/d1197fb6661b05f6178ddb2dc9c6d576f6f67ec8",
"reference": "d1197fb6661b05f6178ddb2dc9c6d576f6f67ec8",
"shasum": ""
},
"require": {
@ -5429,7 +5507,7 @@
"localization"
],
"support": {
"source": "https://github.com/symfony/intl/tree/v7.1.8"
"source": "https://github.com/symfony/intl/tree/v7.3.2"
},
"funding": [
{
@ -5440,25 +5518,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-11-08T15:46:42+00:00"
"time": "2025-07-10T08:47:49+00:00"
},
{
"name": "symfony/mailer",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
"reference": "e3790ddd7448cc6797fbd06749db70d147992321"
"reference": "d43e84d9522345f96ad6283d5dfccc8c1cfc299b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mailer/zipball/e3790ddd7448cc6797fbd06749db70d147992321",
"reference": "e3790ddd7448cc6797fbd06749db70d147992321",
"url": "https://api.github.com/repos/symfony/mailer/zipball/d43e84d9522345f96ad6283d5dfccc8c1cfc299b",
"reference": "d43e84d9522345f96ad6283d5dfccc8c1cfc299b",
"shasum": ""
},
"require": {
@ -5467,7 +5549,7 @@
"psr/event-dispatcher": "^1",
"psr/log": "^1|^2|^3",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/mime": "^6.4|^7.0",
"symfony/mime": "^7.2",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
@ -5509,7 +5591,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/mailer/tree/v7.1.11"
"source": "https://github.com/symfony/mailer/tree/v7.3.2"
},
"funding": [
{
@ -5520,46 +5602,53 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-27T10:57:12+00:00"
"time": "2025-07-15T11:36:08+00:00"
},
{
"name": "symfony/messenger",
"version": "v7.1.9",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/messenger.git",
"reference": "51e2b8b6a14b78ad7db60ef5f195ae893c16b9cc"
"reference": "f990f0d09deaa45955593be6aafbafe73b0682b9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/messenger/zipball/51e2b8b6a14b78ad7db60ef5f195ae893c16b9cc",
"reference": "51e2b8b6a14b78ad7db60ef5f195ae893c16b9cc",
"url": "https://api.github.com/repos/symfony/messenger/zipball/f990f0d09deaa45955593be6aafbafe73b0682b9",
"reference": "f990f0d09deaa45955593be6aafbafe73b0682b9",
"shasum": ""
},
"require": {
"php": ">=8.2",
"psr/log": "^1|^2|^3",
"symfony/clock": "^6.4|^7.0"
"symfony/clock": "^6.4|^7.0",
"symfony/deprecation-contracts": "^2.5|^3"
},
"conflict": {
"symfony/console": "<6.4",
"symfony/console": "<7.2",
"symfony/event-dispatcher": "<6.4",
"symfony/event-dispatcher-contracts": "<2.5",
"symfony/framework-bundle": "<6.4",
"symfony/http-kernel": "<6.4",
"symfony/lock": "<6.4",
"symfony/serializer": "<6.4"
},
"require-dev": {
"psr/cache": "^1.0|^2.0|^3.0",
"symfony/console": "^6.4|^7.0",
"symfony/console": "^7.2",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/lock": "^6.4|^7.0",
"symfony/process": "^6.4|^7.0",
"symfony/property-access": "^6.4|^7.0",
"symfony/rate-limiter": "^6.4|^7.0",
@ -5595,7 +5684,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/v7.1.9"
"source": "https://github.com/symfony/messenger/tree/v7.3.2"
},
"funding": [
{
@ -5606,25 +5695,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-11-26T09:50:51+00:00"
"time": "2025-07-15T11:36:08+00:00"
},
{
"name": "symfony/mime",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "c252e20d1179dd35a5bfdb4a61a2084387ce97f4"
"reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/c252e20d1179dd35a5bfdb4a61a2084387ce97f4",
"reference": "c252e20d1179dd35a5bfdb4a61a2084387ce97f4",
"url": "https://api.github.com/repos/symfony/mime/zipball/e0a0f859148daf1edf6c60b398eb40bfc96697d1",
"reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1",
"shasum": ""
},
"require": {
@ -5679,7 +5772,7 @@
"mime-type"
],
"support": {
"source": "https://github.com/symfony/mime/tree/v7.1.11"
"source": "https://github.com/symfony/mime/tree/v7.3.2"
},
"funding": [
{
@ -5690,25 +5783,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-27T10:57:12+00:00"
"time": "2025-07-15T13:41:35+00:00"
},
{
"name": "symfony/monolog-bridge",
"version": "v7.1.6",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bridge.git",
"reference": "e1da878cf5f701df5f5c1799bdbf827acee5a76e"
"reference": "1b188c8abbbef25b111da878797514b7a8d33990"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/e1da878cf5f701df5f5c1799bdbf827acee5a76e",
"reference": "e1da878cf5f701df5f5c1799bdbf827acee5a76e",
"url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/1b188c8abbbef25b111da878797514b7a8d33990",
"reference": "1b188c8abbbef25b111da878797514b7a8d33990",
"shasum": ""
},
"require": {
@ -5757,7 +5854,7 @@
"description": "Provides integration for Monolog with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/monolog-bridge/tree/v7.1.6"
"source": "https://github.com/symfony/monolog-bridge/tree/v7.3.0"
},
"funding": [
{
@ -5773,7 +5870,7 @@
"type": "tidelift"
}
],
"time": "2024-10-14T08:49:35+00:00"
"time": "2025-03-21T12:17:46+00:00"
},
{
"name": "symfony/monolog-bundle",
@ -5858,16 +5955,16 @@
},
{
"name": "symfony/notifier",
"version": "v7.1.6",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/notifier.git",
"reference": "e45a3db2dd184060fa9c0d5c0b94dfa82bc0a13f"
"reference": "9e68a3266c8b0381f8756022b1c1ba3c0264416e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/notifier/zipball/e45a3db2dd184060fa9c0d5c0b94dfa82bc0a13f",
"reference": "e45a3db2dd184060fa9c0d5c0b94dfa82bc0a13f",
"url": "https://api.github.com/repos/symfony/notifier/zipball/9e68a3266c8b0381f8756022b1c1ba3c0264416e",
"reference": "9e68a3266c8b0381f8756022b1c1ba3c0264416e",
"shasum": ""
},
"require": {
@ -5916,7 +6013,7 @@
"notifier"
],
"support": {
"source": "https://github.com/symfony/notifier/tree/v7.1.6"
"source": "https://github.com/symfony/notifier/tree/v7.3.0"
},
"funding": [
{
@ -5932,20 +6029,20 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2025-05-01T12:12:53+00:00"
},
{
"name": "symfony/options-resolver",
"version": "v7.1.9",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "0f4099f5306a92487d13b2a4589068c36a93c447"
"reference": "119bcf13e67dbd188e5dbc74228b1686f66acd37"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/0f4099f5306a92487d13b2a4589068c36a93c447",
"reference": "0f4099f5306a92487d13b2a4589068c36a93c447",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/119bcf13e67dbd188e5dbc74228b1686f66acd37",
"reference": "119bcf13e67dbd188e5dbc74228b1686f66acd37",
"shasum": ""
},
"require": {
@ -5983,7 +6080,7 @@
"options"
],
"support": {
"source": "https://github.com/symfony/options-resolver/tree/v7.1.9"
"source": "https://github.com/symfony/options-resolver/tree/v7.3.2"
},
"funding": [
{
@ -5994,25 +6091,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-11-20T11:08:58+00:00"
"time": "2025-07-15T11:36:08+00:00"
},
{
"name": "symfony/password-hasher",
"version": "v7.1.6",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/password-hasher.git",
"reference": "2e618d1af51805e5a1fbda326d00b77c6c1037d5"
"reference": "31fbe66af859582a20b803f38be96be8accdf2c3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/2e618d1af51805e5a1fbda326d00b77c6c1037d5",
"reference": "2e618d1af51805e5a1fbda326d00b77c6c1037d5",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/31fbe66af859582a20b803f38be96be8accdf2c3",
"reference": "31fbe66af859582a20b803f38be96be8accdf2c3",
"shasum": ""
},
"require": {
@ -6055,7 +6156,7 @@
"password"
],
"support": {
"source": "https://github.com/symfony/password-hasher/tree/v7.1.6"
"source": "https://github.com/symfony/password-hasher/tree/v7.3.0"
},
"funding": [
{
@ -6071,7 +6172,7 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2025-02-04T08:22:58+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
@ -6634,16 +6735,16 @@
},
{
"name": "symfony/process",
"version": "v7.1.8",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892"
"reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892",
"reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892",
"url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af",
"reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af",
"shasum": ""
},
"require": {
@ -6675,7 +6776,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/process/tree/v7.1.8"
"source": "https://github.com/symfony/process/tree/v7.3.0"
},
"funding": [
{
@ -6691,20 +6792,20 @@
"type": "tidelift"
}
],
"time": "2024-11-06T14:23:19+00:00"
"time": "2025-04-17T09:11:12+00:00"
},
{
"name": "symfony/property-access",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
"reference": "83e46f0266186e76929257426ddaa151248781c6"
"reference": "317916e49b2577a1908f321796f2b67984e61eab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/83e46f0266186e76929257426ddaa151248781c6",
"reference": "83e46f0266186e76929257426ddaa151248781c6",
"url": "https://api.github.com/repos/symfony/property-access/zipball/317916e49b2577a1908f321796f2b67984e61eab",
"reference": "317916e49b2577a1908f321796f2b67984e61eab",
"shasum": ""
},
"require": {
@ -6751,7 +6852,7 @@
"reflection"
],
"support": {
"source": "https://github.com/symfony/property-access/tree/v7.1.11"
"source": "https://github.com/symfony/property-access/tree/v7.3.2"
},
"funding": [
{
@ -6762,31 +6863,36 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-10T14:50:02+00:00"
"time": "2025-07-15T17:58:03+00:00"
},
{
"name": "symfony/property-info",
"version": "v7.1.11",
"version": "v7.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
"reference": "df9002f8381cc074300dc2bf9726075e4bf00458"
"reference": "90586acbf2a6dd13bee4f09f09111c8bd4773970"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/df9002f8381cc074300dc2bf9726075e4bf00458",
"reference": "df9002f8381cc074300dc2bf9726075e4bf00458",
"url": "https://api.github.com/repos/symfony/property-info/zipball/90586acbf2a6dd13bee4f09f09111c8bd4773970",
"reference": "90586acbf2a6dd13bee4f09f09111c8bd4773970",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/string": "^6.4|^7.0",
"symfony/type-info": "~7.1.9|^7.2.2"
"symfony/type-info": "~7.2.8|^7.3.1"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<5.2",
@ -6836,7 +6942,7 @@
"validator"
],
"support": {
"source": "https://github.com/symfony/property-info/tree/v7.1.11"
"source": "https://github.com/symfony/property-info/tree/v7.3.1"
},
"funding": [
{
@ -6852,20 +6958,20 @@
"type": "tidelift"
}
],
"time": "2025-01-27T10:57:12+00:00"
"time": "2025-06-27T19:55:54+00:00"
},
{
"name": "symfony/routing",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "07f6463a8ff4377944222b69b126bd5495e9d44e"
"reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/07f6463a8ff4377944222b69b126bd5495e9d44e",
"reference": "07f6463a8ff4377944222b69b126bd5495e9d44e",
"url": "https://api.github.com/repos/symfony/routing/zipball/7614b8ca5fa89b9cd233e21b627bfc5774f586e4",
"reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4",
"shasum": ""
},
"require": {
@ -6917,7 +7023,7 @@
"url"
],
"support": {
"source": "https://github.com/symfony/routing/tree/v7.1.11"
"source": "https://github.com/symfony/routing/tree/v7.3.2"
},
"funding": [
{
@ -6928,25 +7034,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-17T10:33:21+00:00"
"time": "2025-07-15T11:36:08+00:00"
},
{
"name": "symfony/runtime",
"version": "v7.1.7",
"version": "v7.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/runtime.git",
"reference": "9889783c17e8a68fa5e88c8e8a1a85e802558dba"
"reference": "9516056d432f8acdac9458eb41b80097da7a05c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/runtime/zipball/9889783c17e8a68fa5e88c8e8a1a85e802558dba",
"reference": "9889783c17e8a68fa5e88c8e8a1a85e802558dba",
"url": "https://api.github.com/repos/symfony/runtime/zipball/9516056d432f8acdac9458eb41b80097da7a05c9",
"reference": "9516056d432f8acdac9458eb41b80097da7a05c9",
"shasum": ""
},
"require": {
@ -6996,7 +7106,7 @@
"runtime"
],
"support": {
"source": "https://github.com/symfony/runtime/tree/v7.1.7"
"source": "https://github.com/symfony/runtime/tree/v7.3.1"
},
"funding": [
{
@ -7012,20 +7122,20 @@
"type": "tidelift"
}
],
"time": "2024-11-05T16:45:54+00:00"
"time": "2025-06-13T07:48:40+00:00"
},
{
"name": "symfony/security-bundle",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
"reference": "4012dbc0884fc7cbf555615a5aaa16f7c0d3f222"
"reference": "d8278a973b305c0b79b162f265d8ce1e96703236"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/4012dbc0884fc7cbf555615a5aaa16f7c0d3f222",
"reference": "4012dbc0884fc7cbf555615a5aaa16f7c0d3f222",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/d8278a973b305c0b79b162f265d8ce1e96703236",
"reference": "d8278a973b305c0b79b162f265d8ce1e96703236",
"shasum": ""
},
"require": {
@ -7033,15 +7143,15 @@
"ext-xml": "*",
"php": ">=8.2",
"symfony/clock": "^6.4|^7.0",
"symfony/config": "^6.4|^7.0",
"symfony/config": "^7.3",
"symfony/dependency-injection": "^6.4.11|^7.1.4",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/password-hasher": "^6.4|^7.0",
"symfony/security-core": "^6.4|^7.0",
"symfony/security-core": "^7.3",
"symfony/security-csrf": "^6.4|^7.0",
"symfony/security-http": "^7.1",
"symfony/security-http": "^7.3",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
@ -7073,7 +7183,7 @@
"symfony/twig-bundle": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/yaml": "^6.4|^7.0",
"twig/twig": "^3.0.4",
"twig/twig": "^3.12",
"web-token/jwt-library": "^3.3.2|^4.0"
},
"type": "symfony-bundle",
@ -7102,7 +7212,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/v7.1.11"
"source": "https://github.com/symfony/security-bundle/tree/v7.3.2"
},
"funding": [
{
@ -7113,29 +7223,34 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-12-31T17:57:35+00:00"
"time": "2025-07-22T08:15:39+00:00"
},
{
"name": "symfony/security-core",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
"reference": "0931c6bb15b696e1a4da8405c255b3a8673dcb3c"
"reference": "d8e1bb0de26266e2e4525beda0aed7f774e9c80d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-core/zipball/0931c6bb15b696e1a4da8405c255b3a8673dcb3c",
"reference": "0931c6bb15b696e1a4da8405c255b3a8673dcb3c",
"url": "https://api.github.com/repos/symfony/security-core/zipball/d8e1bb0de26266e2e4525beda0aed7f774e9c80d",
"reference": "d8e1bb0de26266e2e4525beda0aed7f774e9c80d",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/event-dispatcher-contracts": "^2.5|^3",
"symfony/password-hasher": "^6.4|^7.0",
"symfony/service-contracts": "^2.5|^3"
@ -7188,7 +7303,7 @@
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-core/tree/v7.1.11"
"source": "https://github.com/symfony/security-core/tree/v7.3.2"
},
"funding": [
{
@ -7199,25 +7314,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-27T10:57:12+00:00"
"time": "2025-07-23T09:11:24+00:00"
},
{
"name": "symfony/security-csrf",
"version": "v7.1.6",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
"reference": "23b460d3447fd61970e0ed5ec7a0301296a17f06"
"reference": "2b4b0c46c901729e4e90719eacd980381f53e0a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/23b460d3447fd61970e0ed5ec7a0301296a17f06",
"reference": "23b460d3447fd61970e0ed5ec7a0301296a17f06",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/2b4b0c46c901729e4e90719eacd980381f53e0a3",
"reference": "2b4b0c46c901729e4e90719eacd980381f53e0a3",
"shasum": ""
},
"require": {
@ -7228,7 +7347,9 @@
"symfony/http-foundation": "<6.4"
},
"require-dev": {
"symfony/http-foundation": "^6.4|^7.0"
"psr/log": "^1|^2|^3",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@ -7256,7 +7377,7 @@
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-csrf/tree/v7.1.6"
"source": "https://github.com/symfony/security-csrf/tree/v7.3.0"
},
"funding": [
{
@ -7272,20 +7393,20 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2025-01-02T18:42:10+00:00"
},
{
"name": "symfony/security-http",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
"reference": "c5ef4cb3bb013cf02c1d8459d1c51bc9f616cd80"
"reference": "ca8d92035a5c8d31012458589bdaef30ef3c54d6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/c5ef4cb3bb013cf02c1d8459d1c51bc9f616cd80",
"reference": "c5ef4cb3bb013cf02c1d8459d1c51bc9f616cd80",
"url": "https://api.github.com/repos/symfony/security-http/zipball/ca8d92035a5c8d31012458589bdaef30ef3c54d6",
"reference": "ca8d92035a5c8d31012458589bdaef30ef3c54d6",
"shasum": ""
},
"require": {
@ -7295,7 +7416,7 @@
"symfony/http-kernel": "^6.4|^7.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/property-access": "^6.4|^7.0",
"symfony/security-core": "^6.4|^7.0",
"symfony/security-core": "^7.3",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
@ -7344,7 +7465,7 @@
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-http/tree/v7.1.11"
"source": "https://github.com/symfony/security-http/tree/v7.3.2"
},
"funding": [
{
@ -7355,25 +7476,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-28T15:50:57+00:00"
"time": "2025-07-10T08:47:49+00:00"
},
{
"name": "symfony/serializer",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
"reference": "cb88edf0d4d63472c50b5f77bcb3227a103966e6"
"reference": "0ed011583fd24899fa003abf77c45d4a901714da"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/serializer/zipball/cb88edf0d4d63472c50b5f77bcb3227a103966e6",
"reference": "cb88edf0d4d63472c50b5f77bcb3227a103966e6",
"url": "https://api.github.com/repos/symfony/serializer/zipball/0ed011583fd24899fa003abf77c45d4a901714da",
"reference": "0ed011583fd24899fa003abf77c45d4a901714da",
"shasum": ""
},
"require": {
@ -7387,7 +7512,6 @@
"symfony/dependency-injection": "<6.4",
"symfony/property-access": "<6.4",
"symfony/property-info": "<6.4",
"symfony/type-info": "<7.1.5",
"symfony/uid": "<6.4",
"symfony/validator": "<6.4",
"symfony/yaml": "<6.4"
@ -7399,7 +7523,7 @@
"symfony/cache": "^6.4|^7.0",
"symfony/config": "^6.4|^7.0",
"symfony/console": "^6.4|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/dependency-injection": "^7.2",
"symfony/error-handler": "^6.4|^7.0",
"symfony/filesystem": "^6.4|^7.0",
"symfony/form": "^6.4|^7.0",
@ -7410,7 +7534,7 @@
"symfony/property-access": "^6.4|^7.0",
"symfony/property-info": "^6.4|^7.0",
"symfony/translation-contracts": "^2.5|^3",
"symfony/type-info": "^7.1.5",
"symfony/type-info": "^7.1.8",
"symfony/uid": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0",
@ -7443,7 +7567,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/v7.1.11"
"source": "https://github.com/symfony/serializer/tree/v7.3.2"
},
"funding": [
{
@ -7454,12 +7578,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-29T07:13:42+00:00"
"time": "2025-07-26T13:07:17+00:00"
},
{
"name": "symfony/service-contracts",
@ -7619,16 +7747,16 @@
},
{
"name": "symfony/stopwatch",
"version": "v7.1.6",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
"reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05"
"reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/8b4a434e6e7faf6adedffb48783a5c75409a1a05",
"reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd",
"reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd",
"shasum": ""
},
"require": {
@ -7661,7 +7789,7 @@
"description": "Provides a way to profile code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/stopwatch/tree/v7.1.6"
"source": "https://github.com/symfony/stopwatch/tree/v7.3.0"
},
"funding": [
{
@ -7677,20 +7805,20 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2025-02-24T10:49:57+00:00"
},
{
"name": "symfony/string",
"version": "v7.1.8",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "591ebd41565f356fcd8b090fe64dbb5878f50281"
"reference": "42f505aff654e62ac7ac2ce21033818297ca89ca"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281",
"reference": "591ebd41565f356fcd8b090fe64dbb5878f50281",
"url": "https://api.github.com/repos/symfony/string/zipball/42f505aff654e62ac7ac2ce21033818297ca89ca",
"reference": "42f505aff654e62ac7ac2ce21033818297ca89ca",
"shasum": ""
},
"require": {
@ -7748,7 +7876,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v7.1.8"
"source": "https://github.com/symfony/string/tree/v7.3.2"
},
"funding": [
{
@ -7759,33 +7887,39 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-11-13T13:31:21+00:00"
"time": "2025-07-10T08:47:49+00:00"
},
{
"name": "symfony/translation",
"version": "v7.1.6",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f"
"reference": "81b48f4daa96272efcce9c7a6c4b58e629df3c90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f",
"reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f",
"url": "https://api.github.com/repos/symfony/translation/zipball/81b48f4daa96272efcce9c7a6c4b58e629df3c90",
"reference": "81b48f4daa96272efcce9c7a6c4b58e629df3c90",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/translation-contracts": "^2.5|^3.0"
},
"conflict": {
"nikic/php-parser": "<5.0",
"symfony/config": "<6.4",
"symfony/console": "<6.4",
"symfony/dependency-injection": "<6.4",
@ -7799,7 +7933,7 @@
"symfony/translation-implementation": "2.3|3.0"
},
"require-dev": {
"nikic/php-parser": "^4.18|^5.0",
"nikic/php-parser": "^5.0",
"psr/log": "^1|^2|^3",
"symfony/config": "^6.4|^7.0",
"symfony/console": "^6.4|^7.0",
@ -7842,7 +7976,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/translation/tree/v7.1.6"
"source": "https://github.com/symfony/translation/tree/v7.3.2"
},
"funding": [
{
@ -7853,12 +7987,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-09-28T12:35:13+00:00"
"time": "2025-07-30T17:31:46+00:00"
},
{
"name": "symfony/translation-contracts",
@ -7940,22 +8078,23 @@
},
{
"name": "symfony/twig-bridge",
"version": "v7.1.10",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
"reference": "c027c54611cd194273b924c8d24d9706695171ff"
"reference": "81d1c69769cf913240afdd4c9673304ddca964b0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/c027c54611cd194273b924c8d24d9706695171ff",
"reference": "c027c54611cd194273b924c8d24d9706695171ff",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/81d1c69769cf913240afdd4c9673304ddca964b0",
"reference": "81d1c69769cf913240afdd4c9673304ddca964b0",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/translation-contracts": "^2.5|^3",
"twig/twig": "^3.9"
"twig/twig": "^3.21"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<3.2.2",
@ -7980,9 +8119,9 @@
"symfony/emoji": "^7.1",
"symfony/expression-language": "^6.4|^7.0",
"symfony/finder": "^6.4|^7.0",
"symfony/form": "^6.4|^7.0",
"symfony/form": "^6.4.20|^7.2.5",
"symfony/html-sanitizer": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-foundation": "^7.3",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/intl": "^6.4|^7.0",
"symfony/mime": "^6.4|^7.0",
@ -7996,12 +8135,13 @@
"symfony/serializer": "^6.4.3|^7.0.3",
"symfony/stopwatch": "^6.4|^7.0",
"symfony/translation": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/web-link": "^6.4|^7.0",
"symfony/workflow": "^6.4|^7.0",
"symfony/yaml": "^6.4|^7.0",
"twig/cssinliner-extra": "^2.12|^3",
"twig/inky-extra": "^2.12|^3",
"twig/markdown-extra": "^2.12|^3"
"twig/cssinliner-extra": "^3",
"twig/inky-extra": "^3",
"twig/markdown-extra": "^3"
},
"type": "symfony-bridge",
"autoload": {
@ -8029,7 +8169,7 @@
"description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bridge/tree/v7.1.10"
"source": "https://github.com/symfony/twig-bridge/tree/v7.3.2"
},
"funding": [
{
@ -8040,36 +8180,40 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-12-19T14:23:39+00:00"
"time": "2025-07-26T16:47:03+00:00"
},
{
"name": "symfony/twig-bundle",
"version": "v7.1.6",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
"reference": "af902314a71fb412ae412094f7e1d7e49594507b"
"reference": "5d85220df4d8d79e6a9ca57eea6f70004de39657"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/af902314a71fb412ae412094f7e1d7e49594507b",
"reference": "af902314a71fb412ae412094f7e1d7e49594507b",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/5d85220df4d8d79e6a9ca57eea6f70004de39657",
"reference": "5d85220df4d8d79e6a9ca57eea6f70004de39657",
"shasum": ""
},
"require": {
"composer-runtime-api": ">=2.1",
"php": ">=8.2",
"symfony/config": "^6.4|^7.0",
"symfony/config": "^7.3",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/twig-bridge": "^6.4|^7.0",
"twig/twig": "^3.0.4"
"symfony/twig-bridge": "^7.3",
"twig/twig": "^3.12"
},
"conflict": {
"symfony/framework-bundle": "<6.4",
@ -8113,7 +8257,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/v7.1.6"
"source": "https://github.com/symfony/twig-bundle/tree/v7.3.2"
},
"funding": [
{
@ -8124,40 +8268,41 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2025-07-10T08:47:49+00:00"
},
{
"name": "symfony/type-info",
"version": "v7.1.10",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/type-info.git",
"reference": "8f980bdd1d6a2834503afbfcf3f39de8133e48fe"
"reference": "b72d44c7d6638480fce101b7c4cd3abea4c2efba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/type-info/zipball/8f980bdd1d6a2834503afbfcf3f39de8133e48fe",
"reference": "8f980bdd1d6a2834503afbfcf3f39de8133e48fe",
"url": "https://api.github.com/repos/symfony/type-info/zipball/b72d44c7d6638480fce101b7c4cd3abea4c2efba",
"reference": "b72d44c7d6638480fce101b7c4cd3abea4c2efba",
"shasum": ""
},
"require": {
"php": ">=8.2",
"psr/container": "^1.1|^2.0"
"psr/container": "^1.1|^2.0",
"symfony/deprecation-contracts": "^2.5|^3"
},
"conflict": {
"phpstan/phpdoc-parser": "<1.0",
"symfony/dependency-injection": "<6.4",
"symfony/property-info": "<6.4"
"phpstan/phpdoc-parser": "<1.30"
},
"require-dev": {
"phpstan/phpdoc-parser": "^1.0|^2.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/property-info": "^6.4|^7.0"
"phpstan/phpdoc-parser": "^1.30|^2.0"
},
"type": "library",
"autoload": {
@ -8195,7 +8340,7 @@
"type"
],
"support": {
"source": "https://github.com/symfony/type-info/tree/v7.1.10"
"source": "https://github.com/symfony/type-info/tree/v7.3.2"
},
"funding": [
{
@ -8206,12 +8351,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-12-11T12:11:39+00:00"
"time": "2025-07-10T05:39:45+00:00"
},
{
"name": "symfony/ux-turbo",
@ -8318,16 +8467,16 @@
},
{
"name": "symfony/validator",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
"reference": "bb226e43829a6554cf891bd7c176dc73d49bc6c1"
"reference": "e5cc60fd44aab8e1d662fc0d954da322c2e08b43"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/bb226e43829a6554cf891bd7c176dc73d49bc6c1",
"reference": "bb226e43829a6554cf891bd7c176dc73d49bc6c1",
"url": "https://api.github.com/repos/symfony/validator/zipball/e5cc60fd44aab8e1d662fc0d954da322c2e08b43",
"reference": "e5cc60fd44aab8e1d662fc0d954da322c2e08b43",
"shasum": ""
},
"require": {
@ -8364,8 +8513,9 @@
"symfony/mime": "^6.4|^7.0",
"symfony/property-access": "^6.4|^7.0",
"symfony/property-info": "^6.4|^7.0",
"symfony/string": "^6.4|^7.0",
"symfony/translation": "^6.4.3|^7.0.3",
"symfony/type-info": "^7.1",
"symfony/type-info": "^7.1.8",
"symfony/yaml": "^6.4|^7.0"
},
"type": "library",
@ -8395,7 +8545,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/validator/tree/v7.1.11"
"source": "https://github.com/symfony/validator/tree/v7.3.2"
},
"funding": [
{
@ -8406,41 +8556,45 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-28T15:50:57+00:00"
"time": "2025-07-29T20:02:46+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "a563c5aeacb98cd46f9885a63cf241ea7794b307"
"reference": "53205bea27450dc5c65377518b3275e126d45e75"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/a563c5aeacb98cd46f9885a63cf241ea7794b307",
"reference": "a563c5aeacb98cd46f9885a63cf241ea7794b307",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/53205bea27450dc5c65377518b3275e126d45e75",
"reference": "53205bea27450dc5c65377518b3275e126d45e75",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
"symfony/console": "<6.4"
},
"require-dev": {
"ext-iconv": "*",
"symfony/console": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/process": "^6.4|^7.0",
"symfony/uid": "^6.4|^7.0",
"twig/twig": "^3.0.4"
"twig/twig": "^3.12"
},
"bin": [
"Resources/bin/var-dump-server"
@ -8478,7 +8632,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v7.1.11"
"source": "https://github.com/symfony/var-dumper/tree/v7.3.2"
},
"funding": [
{
@ -8489,29 +8643,34 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-17T11:38:41+00:00"
"time": "2025-07-29T20:02:46+00:00"
},
{
"name": "symfony/var-exporter",
"version": "v7.1.6",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
"reference": "90173ef89c40e7c8c616653241048705f84130ef"
"reference": "05b3e90654c097817325d6abd284f7938b05f467"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/90173ef89c40e7c8c616653241048705f84130ef",
"reference": "90173ef89c40e7c8c616653241048705f84130ef",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/05b3e90654c097817325d6abd284f7938b05f467",
"reference": "05b3e90654c097817325d6abd284f7938b05f467",
"shasum": ""
},
"require": {
"php": ">=8.2"
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3"
},
"require-dev": {
"symfony/property-access": "^6.4|^7.0",
@ -8554,7 +8713,7 @@
"serialize"
],
"support": {
"source": "https://github.com/symfony/var-exporter/tree/v7.1.6"
"source": "https://github.com/symfony/var-exporter/tree/v7.3.2"
},
"funding": [
{
@ -8565,25 +8724,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2025-07-10T08:47:49+00:00"
},
{
"name": "symfony/web-link",
"version": "v7.1.6",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-link.git",
"reference": "383aa7566f25e3a1ab323732c2cc6a1748120d3a"
"reference": "7697f74fce67555665339423ce453cc8216a98ff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/web-link/zipball/383aa7566f25e3a1ab323732c2cc6a1748120d3a",
"reference": "383aa7566f25e3a1ab323732c2cc6a1748120d3a",
"url": "https://api.github.com/repos/symfony/web-link/zipball/7697f74fce67555665339423ce453cc8216a98ff",
"reference": "7697f74fce67555665339423ce453cc8216a98ff",
"shasum": ""
},
"require": {
@ -8637,7 +8800,7 @@
"push"
],
"support": {
"source": "https://github.com/symfony/web-link/tree/v7.1.6"
"source": "https://github.com/symfony/web-link/tree/v7.3.0"
},
"funding": [
{
@ -8653,24 +8816,25 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2025-05-19T13:28:18+00:00"
},
{
"name": "symfony/yaml",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "4921b8c1db90c13ba2ee0520080ef6800912b018"
"reference": "b8d7d868da9eb0919e99c8830431ea087d6aae30"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/4921b8c1db90c13ba2ee0520080ef6800912b018",
"reference": "4921b8c1db90c13ba2ee0520080ef6800912b018",
"url": "https://api.github.com/repos/symfony/yaml/zipball/b8d7d868da9eb0919e99c8830431ea087d6aae30",
"reference": "b8d7d868da9eb0919e99c8830431ea087d6aae30",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3.0",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
@ -8708,7 +8872,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v7.1.11"
"source": "https://github.com/symfony/yaml/tree/v7.3.2"
},
"funding": [
{
@ -8719,12 +8883,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-07T12:50:05+00:00"
"time": "2025-07-10T08:47:49+00:00"
},
{
"name": "twig/extra-bundle",
@ -9510,57 +9678,59 @@
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v3.66.0",
"version": "v3.85.1",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
"reference": "5f5f2a142ff36b93c41885bca29cc5f861c013e6"
"reference": "2fb6d7f6c3398dca5786a1635b27405d73a417ba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/5f5f2a142ff36b93c41885bca29cc5f861c013e6",
"reference": "5f5f2a142ff36b93c41885bca29cc5f861c013e6",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2fb6d7f6c3398dca5786a1635b27405d73a417ba",
"reference": "2fb6d7f6c3398dca5786a1635b27405d73a417ba",
"shasum": ""
},
"require": {
"clue/ndjson-react": "^1.0",
"clue/ndjson-react": "^1.3",
"composer/semver": "^3.4",
"composer/xdebug-handler": "^3.0.3",
"composer/xdebug-handler": "^3.0.5",
"ext-filter": "*",
"ext-hash": "*",
"ext-json": "*",
"ext-tokenizer": "*",
"fidry/cpu-core-counter": "^1.2",
"php": "^7.4 || ^8.0",
"react/child-process": "^0.6.5",
"react/event-loop": "^1.0",
"react/promise": "^2.0 || ^3.0",
"react/socket": "^1.0",
"react/stream": "^1.0",
"sebastian/diff": "^4.0 || ^5.0 || ^6.0",
"symfony/console": "^5.4 || ^6.0 || ^7.0",
"symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0",
"symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
"symfony/finder": "^5.4 || ^6.0 || ^7.0",
"symfony/options-resolver": "^5.4 || ^6.0 || ^7.0",
"symfony/polyfill-mbstring": "^1.28",
"symfony/polyfill-php80": "^1.28",
"symfony/polyfill-php81": "^1.28",
"symfony/process": "^5.4 || ^6.0 || ^7.0 <7.2",
"symfony/stopwatch": "^5.4 || ^6.0 || ^7.0"
"react/child-process": "^0.6.6",
"react/event-loop": "^1.5",
"react/promise": "^3.2",
"react/socket": "^1.16",
"react/stream": "^1.4",
"sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0",
"symfony/console": "^5.4.47 || ^6.4.13 || ^7.0",
"symfony/event-dispatcher": "^5.4.45 || ^6.4.13 || ^7.0",
"symfony/filesystem": "^5.4.45 || ^6.4.13 || ^7.0",
"symfony/finder": "^5.4.45 || ^6.4.17 || ^7.0",
"symfony/options-resolver": "^5.4.45 || ^6.4.16 || ^7.0",
"symfony/polyfill-mbstring": "^1.32",
"symfony/polyfill-php80": "^1.32",
"symfony/polyfill-php81": "^1.32",
"symfony/process": "^5.4.47 || ^6.4.20 || ^7.2",
"symfony/stopwatch": "^5.4.45 || ^6.4.19 || ^7.0"
},
"require-dev": {
"facile-it/paraunit": "^1.3.1 || ^2.4",
"infection/infection": "^0.29.8",
"justinrainbow/json-schema": "^5.3 || ^6.0",
"keradus/cli-executor": "^2.1",
"facile-it/paraunit": "^1.3.1 || ^2.6",
"infection/infection": "^0.29.14",
"justinrainbow/json-schema": "^5.3 || ^6.4",
"keradus/cli-executor": "^2.2",
"mikey179/vfsstream": "^1.6.12",
"php-coveralls/php-coveralls": "^2.7",
"php-coveralls/php-coveralls": "^2.8",
"php-cs-fixer/accessible-object": "^1.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5",
"phpunit/phpunit": "^9.6.21 || ^10.5.38 || ^11.4.3",
"symfony/var-dumper": "^5.4.47 || ^6.4.15 || ^7.1.8",
"symfony/yaml": "^5.4.45 || ^6.4.13 || ^7.1.6"
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
"phpunit/phpunit": "^9.6.23 || ^10.5.47 || ^11.5.25",
"symfony/polyfill-php84": "^1.32",
"symfony/var-dumper": "^5.4.48 || ^6.4.23 || ^7.3.1",
"symfony/yaml": "^5.4.45 || ^6.4.23 || ^7.3.1"
},
"suggest": {
"ext-dom": "For handling output formats in XML",
@ -9601,7 +9771,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.66.0"
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.85.1"
},
"funding": [
{
@ -9609,7 +9779,7 @@
"type": "github"
}
],
"time": "2024-12-29T13:46:23+00:00"
"time": "2025-07-29T22:22:50+00:00"
},
{
"name": "masterminds/html5",
@ -12036,16 +12206,16 @@
},
{
"name": "symfony/browser-kit",
"version": "v7.1.6",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
"reference": "714becc9ba9b20115ffededc58f6b7172dc394cf"
"reference": "f0b889b73a845cddef1d25fe207b37fd04cb5419"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/714becc9ba9b20115ffededc58f6b7172dc394cf",
"reference": "714becc9ba9b20115ffededc58f6b7172dc394cf",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/f0b889b73a845cddef1d25fe207b37fd04cb5419",
"reference": "f0b889b73a845cddef1d25fe207b37fd04cb5419",
"shasum": ""
},
"require": {
@ -12084,7 +12254,7 @@
"description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/browser-kit/tree/v7.1.6"
"source": "https://github.com/symfony/browser-kit/tree/v7.3.2"
},
"funding": [
{
@ -12095,25 +12265,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-10-25T15:11:02+00:00"
"time": "2025-07-10T08:47:49+00:00"
},
{
"name": "symfony/css-selector",
"version": "v7.1.6",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66"
"reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/4aa4f6b3d6749c14d3aa815eef8226632e7bbc66",
"reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2",
"reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2",
"shasum": ""
},
"require": {
@ -12149,7 +12323,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/css-selector/tree/v7.1.6"
"source": "https://github.com/symfony/css-selector/tree/v7.3.0"
},
"funding": [
{
@ -12165,36 +12339,33 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/debug-bundle",
"version": "v7.1.6",
"version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-bundle.git",
"reference": "c91a650aa390071d22dfaf32c2ff77fda27e9583"
"reference": "781acc90f31f5fe18915f9276890864ebbbe3da8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/c91a650aa390071d22dfaf32c2ff77fda27e9583",
"reference": "c91a650aa390071d22dfaf32c2ff77fda27e9583",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/781acc90f31f5fe18915f9276890864ebbbe3da8",
"reference": "781acc90f31f5fe18915f9276890864ebbbe3da8",
"shasum": ""
},
"require": {
"composer-runtime-api": ">=2.1",
"ext-xml": "*",
"php": ">=8.2",
"symfony/config": "^7.3",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/twig-bridge": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0"
},
"conflict": {
"symfony/config": "<6.4",
"symfony/dependency-injection": "<6.4"
},
"require-dev": {
"symfony/config": "^6.4|^7.0",
"symfony/web-profiler-bundle": "^6.4|^7.0"
},
"type": "symfony-bundle",
@ -12223,7 +12394,7 @@
"description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/debug-bundle/tree/v7.1.6"
"source": "https://github.com/symfony/debug-bundle/tree/v7.3.0"
},
"funding": [
{
@ -12239,20 +12410,20 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2025-05-04T13:21:13+00:00"
},
{
"name": "symfony/dom-crawler",
"version": "v7.1.11",
"version": "v7.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
"reference": "7361d8f7e7eecbca17efe68ca1ee677bf23cfe5a"
"reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/7361d8f7e7eecbca17efe68ca1ee677bf23cfe5a",
"reference": "7361d8f7e7eecbca17efe68ca1ee677bf23cfe5a",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8b2ee2e06ab99fa5f067b6699296d4e35c156bb9",
"reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9",
"shasum": ""
},
"require": {
@ -12290,7 +12461,7 @@
"description": "Eases DOM navigation for HTML and XML documents",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dom-crawler/tree/v7.1.11"
"source": "https://github.com/symfony/dom-crawler/tree/v7.3.1"
},
"funding": [
{
@ -12306,7 +12477,7 @@
"type": "tidelift"
}
],
"time": "2025-01-27T10:57:12+00:00"
"time": "2025-06-15T10:07:06+00:00"
},
{
"name": "symfony/maker-bundle",
@ -12488,31 +12659,35 @@
},
{
"name": "symfony/web-profiler-bundle",
"version": "v7.1.11",
"version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
"reference": "328b2728bb5d85d0d38b18d1458834098202afe2"
"reference": "c5e02451fe4e430c5067ddbf0899493522782390"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/328b2728bb5d85d0d38b18d1458834098202afe2",
"reference": "328b2728bb5d85d0d38b18d1458834098202afe2",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/c5e02451fe4e430c5067ddbf0899493522782390",
"reference": "c5e02451fe4e430c5067ddbf0899493522782390",
"shasum": ""
},
"require": {
"composer-runtime-api": ">=2.1",
"php": ">=8.2",
"symfony/config": "^6.4|^7.0",
"symfony/config": "^7.3",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/framework-bundle": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/routing": "^6.4|^7.0",
"symfony/twig-bundle": "^6.4|^7.0",
"twig/twig": "^3.10"
"twig/twig": "^3.12"
},
"conflict": {
"symfony/form": "<6.4",
"symfony/mailer": "<6.4",
"symfony/messenger": "<6.4"
"symfony/messenger": "<6.4",
"symfony/serializer": "<7.2",
"symfony/workflow": "<7.3"
},
"require-dev": {
"symfony/browser-kit": "^6.4|^7.0",
@ -12549,7 +12724,7 @@
"dev"
],
"support": {
"source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.11"
"source": "https://github.com/symfony/web-profiler-bundle/tree/v7.3.2"
},
"funding": [
{
@ -12560,12 +12735,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-07T09:23:14+00:00"
"time": "2025-07-26T16:47:03+00:00"
},
{
"name": "theseer/tokenizer",

11
config/packages/csrf.yaml Normal file
View File

@ -0,0 +1,11 @@
# Enable stateless CSRF protection for forms and logins/logouts
framework:
form:
csrf_protection:
token_id: submit
csrf_protection:
stateless_token_ids:
- submit
- authenticate
- logout

View File

@ -0,0 +1,3 @@
framework:
property_info:
with_constructor_extractor: true

View File

@ -0,0 +1,4 @@
# Enable stateless CSRF protection for forms and logins/logouts
framework:
csrf_protection:
check_header: true

8
phpstan.dist.neon Normal file
View File

@ -0,0 +1,8 @@
parameters:
level: 6
paths:
- bin/
- config/
- public/
- src/
- tests/

View File

@ -105,4 +105,8 @@ content {
margin-bottom: 2px;
margin-right: 2px;
padding: 3px;
}
small {
font-size: 80%;
}

View File

@ -3,9 +3,9 @@
namespace App\Controller;
use App\Entity\Project;
use App\Entity\User;
use App\Form\ProjectType;
use App\Repository\ProjectRepository;
use App\Security\ProjectVoter;
use Bnine\FilesBundle\Service\FileService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
@ -39,11 +39,16 @@ class ProjectController extends AbstractController
}
#[Route('/admin/project/submit', name: 'app_admin_project_submit')]
#[Route('/user/project/submit', name: 'app_user_project_submit')]
public function submit(Request $request, EntityManagerInterface $em): Response
{
$project = new Project();
$project->addUser($this->getUser());
$project->setStatus(Project::DRAFT);
$this->denyAccessUnlessGranted(ProjectVoter::SUBMIT, $project);
$isAdmin = str_starts_with($request->attributes->get('_route'), 'app_admin');
$form = $this->createForm(ProjectType::class, $project, ['mode' => 'submit']);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@ -51,21 +56,22 @@ class ProjectController extends AbstractController
$em->flush();
$this->fileService->init('project', $project->getId());
return $this->redirectToRoute('app_admin_project');
return $this->redirectToRoute($isAdmin ? 'app_admin_project' : 'app_user_update', ['id' => $project->getId()]);
}
return $this->render('project/edit.html.twig', [
'usemenu' => true,
'usesidebar' => true,
'title' => 'Création Projet',
'routecancel' => 'app_admin_project',
'routedelete' => 'app_admin_project_delete',
'routecancel' => $isAdmin ? 'app_admin_project' : 'app_home',
'routedelete' => $isAdmin ? 'app_admin_project_delete' : 'app_user_project_delete',
'mode' => 'submit',
'form' => $form,
]);
}
#[Route('/admin/project/update/{id}', name: 'app_admin_project_update')]
#[Route('/user/project/update/{id}', name: 'app_user_project_update')]
public function update(int $id, Request $request, ProjectRepository $projectRepository, EntityManagerInterface $em): Response
{
$project = $projectRepository->find($id);
@ -73,20 +79,23 @@ class ProjectController extends AbstractController
throw new NotFoundHttpException('La ressource demandée est introuvable.');
}
$this->denyAccessUnlessGranted(ProjectVoter::UPDATE, $project);
$isAdmin = str_starts_with($request->attributes->get('_route'), 'app_admin');
$form = $this->createForm(ProjectType::class, $project, ['mode' => 'update']);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em->flush();
// return $this->redirectToRoute('app_admin_project');
return $this->redirectToRoute($isAdmin ? 'app_admin_project' : 'app_home');
}
return $this->render('project/edit.html.twig', [
'usemenu' => true,
'usesidebar' => true,
'usesidebar' => $isAdmin,
'title' => 'Modification Projet = '.$project->getTitle(),
'routecancel' => 'app_admin_project',
'routedelete' => 'app_admin_project_delete',
'routecancel' => $isAdmin ? 'app_admin_project' : 'app_home',
'routedelete' => $isAdmin ? 'app_admin_project_delete' : 'app_user_project_delete',
'mode' => 'update',
'form' => $form,
'project' => $project,
@ -94,18 +103,17 @@ class ProjectController extends AbstractController
}
#[Route('/admin/project/delete/{id}', name: 'app_admin_project_delete')]
public function delete(int $id, ProjectRepository $projectRepository, EntityManagerInterface $em): Response
#[Route('/user/project/delete/{id}', name: 'app_user_project_delete')]
public function delete(int $id, Request $request, ProjectRepository $projectRepository, EntityManagerInterface $em): Response
{
$project = $projectRepository->find($id);
if (!$project) {
throw new NotFoundHttpException('La ressource demandée est introuvable.');
}
$users = $em->getRepository(User::class)->findBy(['project' => $project]);
foreach ($users as $user) {
$user->setProject(null);
$em->flush();
}
$this->denyAccessUnlessGranted(ProjectVoter::DELETE, $project);
$isAdmin = str_starts_with($request->attributes->get('_route'), 'app_admin');
// Tentative de suppression
try {
@ -114,9 +122,9 @@ class ProjectController extends AbstractController
} catch (\Exception $e) {
$this->addflash('error', $e->getMessage());
return $this->redirectToRoute('app_admin_project_update', ['id' => $id]);
return $this->redirectToRoute($isAdmin ? 'app_admin_project' : 'app_user_update', ['id' => $project->getId()]);
}
return $this->redirectToRoute('app_admin_project');
return $this->redirectToRoute($isAdmin ? 'app_admin_project' : 'app_home');
}
}

View File

@ -25,7 +25,7 @@ class Project
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255, unique: true)]
#[ORM\Column(length: 255)]
private ?string $title = null;
#[ORM\Column(type: 'text')]

View File

@ -32,16 +32,6 @@ class ProjectType extends AbstractType
'label' => 'Résumé',
])
->add('status', ChoiceType::class, [
'label' => 'Statut',
'choices' => [
Project::DRAFT => Project::DRAFT,
Project::TOVOTE => Project::TOVOTE,
Project::VOTED => Project::VOTED,
Project::ARCHIVED => Project::ARCHIVED,
],
])
->add('nature', ChoiceType::class, [
'label' => 'Nature',
'choices' => [
@ -51,11 +41,6 @@ class ProjectType extends AbstractType
],
])
->add('description', MarkdownType::class, [
'label' => 'Description du Projet',
'markdown_height' => 900,
])
->add('users', EntityType::class, [
'label' => 'Propriétaires',
'class' => User::class,
@ -65,6 +50,14 @@ class ProjectType extends AbstractType
'required' => false,
'by_reference' => false,
]);
if ('update' == $options['mode']) {
$builder
->add('description', MarkdownType::class, [
'label' => 'Description du Projet',
'markdown_height' => 900,
]);
}
}
public function configureOptions(OptionsResolver $resolver): void

View File

@ -10,14 +10,15 @@ use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class ProjectVoter extends Voter
{
// Les actions que ce voter supporte
private const EDIT = 'EDIT';
private const VIEW = 'VIEW';
private const DELETE = 'DELETE';
private const MOVEDRAFT = 'MOVEDRAFT';
public const VIEW = 'VIEW';
public const SUBMIT = 'SUBMIT';
public const UPDATE = 'UPDATE';
public const DELETE = 'DELETE';
public const MOVEDRAFT = 'MOVEDRAFT';
protected function supports(string $attribute, $subject): bool
{
$attributes = [self::EDIT, self::VIEW, self::DELETE, self::MOVEDRAFT];
$attributes = [self::VIEW, self::SUBMIT, self::UPDATE, self::DELETE, self::MOVEDRAFT];
return in_array($attribute, $attributes) && $subject instanceof Project;
}
@ -27,7 +28,12 @@ class ProjectVoter extends Voter
return true;
}
private function canEdit(Project $project, User $user): bool
private function canSubmit(Project $project, User $user): bool
{
return true;
}
private function canUpdate(Project $project, User $user): bool
{
return $user->hasRole('ROLE_ADMIN') || (Project::DRAFT === $project->getStatus() && $project->getUsers()->contains($user));
}
@ -51,7 +57,8 @@ class ProjectVoter extends Voter
return match ($attribute) {
self::VIEW => $this->canView($project, $user),
self::EDIT => $this->canEdit($project, $user),
self::SUBMIT => $this->canSubmit($project, $user),
self::UPDATE => $this->canUpdate($project, $user),
self::DELETE => $this->canDelete($project, $user),
self::MOVEDRAFT => $this->canMoveDraft($project, $user),
default => false,

View File

@ -1,12 +1,9 @@
{
"bnine/files-bundle": {
"version": "v1.0.1"
},
"bnine/filesbundle": {
"version": "v1.0.4"
"version": "v1.0.6"
},
"bnine/mdeditorbundle": {
"version": "v1.1.1"
"version": "v1.1.5"
},
"doctrine/deprecations": {
"version": "1.1",
@ -18,12 +15,12 @@
}
},
"doctrine/doctrine-bundle": {
"version": "2.13",
"version": "2.15",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "2.13",
"ref": "8d96c0b51591ffc26794d865ba3ee7d193438a83"
"ref": "620b57f496f2e599a6015a9fa222c2ee0a32adcb"
},
"files": [
"config/packages/doctrine.yaml",
@ -32,7 +29,7 @@
]
},
"doctrine/doctrine-migrations-bundle": {
"version": "3.3",
"version": "3.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -45,7 +42,7 @@
]
},
"friendsofphp/php-cs-fixer": {
"version": "3.65",
"version": "3.85",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -82,7 +79,7 @@
]
},
"phpstan/phpstan": {
"version": "2.0",
"version": "2.1",
"recipe": {
"repo": "github.com/symfony/recipes-contrib",
"branch": "main",
@ -99,7 +96,7 @@
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "9.6",
"ref": "7364a21d87e658eb363c5020c072ecfdc12e2326"
"ref": "6a9341aa97d441627f8bd424ae85dc04c944f8b4"
},
"files": [
".env.test",
@ -108,7 +105,7 @@
]
},
"symfony/console": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -120,7 +117,7 @@
]
},
"symfony/debug-bundle": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -132,24 +129,37 @@
]
},
"symfony/flex": {
"version": "2.4",
"version": "2.8",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.0",
"ref": "146251ae39e06a95be0fe3d13c807bcf3938b172"
"version": "2.4",
"ref": "52e9754527a15e2b79d9a610f98185a1fe46622a"
},
"files": [
".env"
".env",
".env.dev"
]
},
"symfony/form": {
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "7.2",
"ref": "7d86a6723f4a623f59e2bf966b6aad2fc461d36b"
},
"files": [
"config/packages/csrf.yaml"
]
},
"symfony/framework-bundle": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "7.0",
"ref": "6356c19b9ae08e7763e4ba2d9ae63043efc75db5"
"version": "7.3",
"ref": "5a1497d539f691b96afd45ae397ce5fe30beb4b9"
},
"files": [
"config/packages/cache.yaml",
@ -159,23 +169,24 @@
"config/services.yaml",
"public/index.php",
"src/Controller/.gitignore",
"src/Kernel.php"
"src/Kernel.php",
".editorconfig"
]
},
"symfony/mailer": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "4.3",
"ref": "df66ee1f226c46f01e85c29c2f7acce0596ba35a"
"ref": "09051cfde49476e3c12cd3a0e44289ace1c75a4f"
},
"files": [
"config/packages/mailer.yaml"
]
},
"symfony/maker-bundle": {
"version": "1.61",
"version": "1.64",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -184,7 +195,7 @@
}
},
"symfony/messenger": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -208,7 +219,7 @@
]
},
"symfony/notifier": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -220,7 +231,7 @@
]
},
"symfony/phpunit-bridge": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -234,8 +245,20 @@
"tests/bootstrap.php"
]
},
"symfony/property-info": {
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "7.3",
"ref": "dae70df71978ae9226ae915ffd5fad817f5ca1f7"
},
"files": [
"config/packages/property_info.yaml"
]
},
"symfony/routing": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -248,7 +271,7 @@
]
},
"symfony/security-bundle": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -261,26 +284,27 @@
]
},
"symfony/stimulus-bundle": {
"version": "2.21",
"version": "2.28",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "2.13",
"ref": "6acd9ff4f7fd5626d2962109bd4ebab351d43c43"
"version": "2.20",
"ref": "e058471c5502e549c1404ebdd510099107bb5549"
},
"files": [
"assets/bootstrap.js",
"assets/controllers.json",
"assets/controllers/csrf_protection_controller.js",
"assets/controllers/hello_controller.js"
]
},
"symfony/translation": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "6.3",
"ref": "e28e27f53663cc34f0be2837aba18e3a1bef8e7b"
"ref": "620a1b84865ceb2ba304c8f8bf2a185fbf32a843"
},
"files": [
"config/packages/translation.yaml",
@ -288,7 +312,7 @@
]
},
"symfony/twig-bundle": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -301,10 +325,19 @@
]
},
"symfony/ux-turbo": {
"version": "v2.21.0"
"version": "2.28",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "2.20",
"ref": "287f7c6eb6e9b65e422d34c00795b360a787380b"
},
"files": [
"config/packages/ux_turbo.yaml"
]
},
"symfony/validator": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -316,12 +349,12 @@
]
},
"symfony/web-profiler-bundle": {
"version": "7.1",
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "6.1",
"ref": "e42b3f0177df239add25373083a564e5ead4e13a"
"version": "7.3",
"ref": "a363460c1b0b4a4d0242f2ce1a843ca0f6ac9026"
},
"files": [
"config/packages/web_profiler.yaml",
@ -329,6 +362,6 @@
]
},
"twig/extra-bundle": {
"version": "v3.13.0"
"version": "v3.21.0"
}
}

View File

@ -4,23 +4,34 @@
{%block body%}
<h2>Projets</h2>
<div class='d-flex' style='justify-content: left'>
<div class='d-flex flex-wrap' style='justify-content: left'>
{% for project in projects %}
<div class='card' style='width:300px'>
<div class='card-header d-flex justify-content-between align-items-center'>
{{project.title}}
<div>
{% if is_granted('EDIT', project) %}
<button type="button" class="btn btn-primary btn-sm"><i class="fas fa-pencil"></i></button>
{% endif %}
{% if is_granted('VIEW', project) %}
<div class='card' style='width:300px; margin-right:10px;'>
<div class='card-header d-flex justify-content-between align-items-center'>
{{project.title}}
<div>
{% if is_granted('UPDATE', project) %}
<a href="{{ path("app_user_project_update",{id:project.id}) }}" class="btn btn-primary btn-sm"><i class="fas fa-pencil"></i></a>
{% endif %}
<button type="button" class="btn btn-secondary btn-sm"><i class="fas fa-eye"></i></button>
</div>
<button type="button" class="btn btn-secondary btn-sm"><i class="fas fa-eye"></i></button>
</div>
</div>
<div class='card-body'>
{{project.summary|raw}}
<br>
<small><em>
Propriétaires =
{%for user in project.users%}
{{' '~user.username}}
{%endfor%}
</em></small>
</div>
</div>
<div class='card-body'>
</div>
</div>
{% endif %}
{% endfor %}
</div>

View File

@ -9,7 +9,11 @@
{{ form_start(form) }}
{{ form_widget(form.submit) }}
<a href="{{ path(routecancel) }}" class="btn btn-secondary ms-1">Annuler</a>
{%if mode=="update" %}<a href="{{ path(routedelete,{id:form.vars.value.id}) }}" class="btn btn-danger float-end" onclick="return confirm('Confirmez-vous la suppression de cet enregistrement ?')">Supprimer</a>{%endif%}
{%if mode=="update" %}
{% if is_granted('DELETE', project) %}
<a href="{{ path(routedelete,{id:form.vars.value.id}) }}" class="btn btn-danger float-end" onclick="return confirm('Confirmez-vous la suppression de cet enregistrement ?')">Supprimer</a>
{% endif %}
{%endif%}
{% include('include/error.html.twig') %}
@ -20,24 +24,24 @@
<div class="card-body">
{{ form_row(form.title) }}
{{ form_row(form.nature) }}
{{ form_row(form.status) }}
{{ form_row(form.users) }}
{{ form_row(form.summary) }}
</div>
</div>
{{ render(path("bninefiles_files",{domain:'project',id:project.id, editable:1})) }}
{% if mode=="update" %}
{{ render(path("bninefiles_files",{domain:'project',id:project.id, editable:1})) }}
<div class="card mt-3">
<div class="card-header">Timeline</div>
<div class="card-body">
{% include('project/timeline.html.twig') %}
<div class="card mt-3">
<div class="card-header">Timeline</div>
<div class="card-body">
{% include('project/timeline.html.twig') %}
</div>
</div>
</div>
{% endif %}
</div>
{% if mode=="update" %}
<div class="col-md-8 mx-auto">
<div class="card mt-3">
<div class="card-header">Description du Projet</div>
@ -46,6 +50,7 @@
</div>
</div>
</div>
{% endif %}
</div>
{{ form_end(form) }}
{% endblock %}

View File

@ -15,8 +15,8 @@
<span class="text-success">{{ change.new ?? '' }}</span>
{% endif %}
{% if not change.old is defined %}
= <span>{{ change[0] }}</span>
{% if not change.old is defined and change[0] is defined %}
<span>{{ change[0] }}</span>
{% endif %}
<br>
{% endfor %}