Compare commits
18 Commits
Author | SHA1 | Date | |
---|---|---|---|
efea97228b | |||
fc7494be40 | |||
8c21a69556 | |||
659c5536fa | |||
76c3c2376c | |||
30de93b6c8 | |||
67767310d3 | |||
d7a36aca4c | |||
7547e11d39 | |||
a53f4be3e5 | |||
4e2971c942 | |||
81de4c1a81 | |||
cf4ec48113 | |||
ecf999aa76 | |||
52984edc3c | |||
1633c17c7b | |||
6afe38d089 | |||
f467b867da |
17
.editorconfig
Normal file
17
.editorconfig
Normal 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
1
.env
@ -17,3 +17,4 @@ CAS_USERNAME=uid
|
||||
CAS_MAIL=mail
|
||||
CAS_LASTNAME=lastname
|
||||
CAS_FIRSTNAME=firstname
|
||||
|
||||
|
4
.env.dev
Normal file
4
.env.dev
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
###> symfony/framework-bundle ###
|
||||
APP_SECRET=628790eb09e2cf96d93a21f4f43433d8
|
||||
###< symfony/framework-bundle ###
|
30
.gitignore
vendored
30
.gitignore
vendored
@ -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
2
assets/bootstrap.js
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
// register any custom, 3rd party controllers here
|
||||
// app.register('some_controller_name', SomeImportedController);
|
4
assets/controllers.json
Normal file
4
assets/controllers.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"controllers": [],
|
||||
"entrypoints": []
|
||||
}
|
79
assets/controllers/csrf_protection_controller.js
Normal file
79
assets/controllers/csrf_protection_controller.js
Normal 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';
|
16
assets/controllers/hello_controller.js
Normal file
16
assets/controllers/hello_controller.js
Normal 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';
|
||||
}
|
||||
}
|
@ -31,6 +31,9 @@ services:
|
||||
- ./misc:/app/misc:delegated
|
||||
- ./public/lib:/app/public/lib:delegated
|
||||
- ./.env.local:/app/.env.local
|
||||
- ./vendor:/app/vendor:delegated
|
||||
- ./public/bundles:/app/public/bundles:delegated
|
||||
|
||||
|
||||
adminer:
|
||||
image: adminer
|
||||
|
@ -8,6 +8,8 @@
|
||||
"ext-ctype": "*",
|
||||
"ext-iconv": "*",
|
||||
"apereo/phpcas": "^1.6",
|
||||
"bnine/filesbundle": "^1.0",
|
||||
"bnine/mdeditorbundle": "^1.1",
|
||||
"doctrine/dbal": "^3",
|
||||
"doctrine/doctrine-bundle": "^2.13",
|
||||
"doctrine/doctrine-migrations-bundle": "^3.3",
|
||||
@ -19,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"
|
||||
@ -97,7 +99,7 @@
|
||||
"extra": {
|
||||
"symfony": {
|
||||
"allow-contrib": false,
|
||||
"require": "7.1.*"
|
||||
"require": "^7.2"
|
||||
}
|
||||
},
|
||||
"require-dev": {
|
||||
@ -106,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"
|
||||
}
|
||||
}
|
||||
|
1437
composer.lock
generated
1437
composer.lock
generated
@ -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": "236661a47d3b0278e1198c4fb0940e3a",
|
||||
"content-hash": "67e324518270930150d990299cd0b613",
|
||||
"packages": [
|
||||
{
|
||||
"name": "apereo/phpcas",
|
||||
@ -77,6 +77,126 @@
|
||||
},
|
||||
"time": "2023-02-19T19:52:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "bnine/filesbundle",
|
||||
"version": "v1.0.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/afornerot/bNine-FilesBundle.git",
|
||||
"reference": "add22ab4bd7c7342968e901294a2990b7efc8895"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/afornerot/bNine-FilesBundle/zipball/add22ab4bd7c7342968e901294a2990b7efc8895",
|
||||
"reference": "add22ab4bd7c7342968e901294a2990b7efc8895",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"symfony/framework-bundle": "^7.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "^3.85"
|
||||
},
|
||||
"suggest": {
|
||||
"oneup/uploader-bundle": "^4.0"
|
||||
},
|
||||
"type": "symfony-bundle",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Bnine\\FilesBundle\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "afornerot",
|
||||
"email": "arno.nanor@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "Symfony bundle for entity-based file browser and management.",
|
||||
"keywords": [
|
||||
"bundle",
|
||||
"directory",
|
||||
"entity",
|
||||
"file-browser",
|
||||
"files",
|
||||
"symfony",
|
||||
"upload"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/afornerot/bNine-FilesBundle/issues",
|
||||
"source": "https://github.com/afornerot/bNine-FilesBundle/tree/v1.0.6"
|
||||
},
|
||||
"time": "2025-08-02T11:06:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "bnine/mdeditorbundle",
|
||||
"version": "v1.1.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/afornerot/bNine-MdEditorBundle.git",
|
||||
"reference": "ab56ca3601145d2a393160546a534eac9be33cf5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/afornerot/bNine-MdEditorBundle/zipball/ab56ca3601145d2a393160546a534eac9be33cf5",
|
||||
"reference": "ab56ca3601145d2a393160546a534eac9be33cf5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"symfony/framework-bundle": "^7.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "^3.85"
|
||||
},
|
||||
"suggest": {
|
||||
"oneup/uploader-bundle": "^4.0"
|
||||
},
|
||||
"type": "symfony-bundle",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Bnine\\MdEditorBundle\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "afornerot",
|
||||
"email": "arno.nanor@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "Symfony bundle for entity-based file browser and management.",
|
||||
"keywords": [
|
||||
"bundle",
|
||||
"editor",
|
||||
"entity",
|
||||
"markdown",
|
||||
"symfony"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/afornerot/bNine-MdEditorBundle/issues",
|
||||
"source": "https://github.com/afornerot/bNine-MdEditorBundle/tree/v1.1.5"
|
||||
},
|
||||
"time": "2025-08-04T17:34:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "brick/math",
|
||||
"version": "0.13.1",
|
||||
@ -212,99 +332,6 @@
|
||||
},
|
||||
"time": "2024-07-08T12:26:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/cache",
|
||||
"version": "2.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/cache.git",
|
||||
"reference": "1ca8f21980e770095a31456042471a57bc4c68fb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb",
|
||||
"reference": "1ca8f21980e770095a31456042471a57bc4c68fb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "~7.1 || ^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"doctrine/common": ">2.2,<2.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"cache/integration-tests": "dev-master",
|
||||
"doctrine/coding-standard": "^9",
|
||||
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
|
||||
"psr/cache": "^1.0 || ^2.0 || ^3.0",
|
||||
"symfony/cache": "^4.4 || ^5.4 || ^6",
|
||||
"symfony/var-exporter": "^4.4 || ^5.4 || ^6"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Guilherme Blanco",
|
||||
"email": "guilhermeblanco@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Roman Borschel",
|
||||
"email": "roman@code-factory.org"
|
||||
},
|
||||
{
|
||||
"name": "Benjamin Eberlei",
|
||||
"email": "kontakt@beberlei.de"
|
||||
},
|
||||
{
|
||||
"name": "Jonathan Wage",
|
||||
"email": "jonwage@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Johannes Schmitt",
|
||||
"email": "schmittjoh@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
|
||||
"homepage": "https://www.doctrine-project.org/projects/cache.html",
|
||||
"keywords": [
|
||||
"abstraction",
|
||||
"apcu",
|
||||
"cache",
|
||||
"caching",
|
||||
"couchdb",
|
||||
"memcached",
|
||||
"php",
|
||||
"redis",
|
||||
"xcache"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/cache/issues",
|
||||
"source": "https://github.com/doctrine/cache/tree/2.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://www.doctrine-project.org/sponsorship.html",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://www.patreon.com/phpdoctrine",
|
||||
"type": "patreon"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-20T20:07:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/collections",
|
||||
"version": "2.3.0",
|
||||
@ -393,28 +420,31 @@
|
||||
},
|
||||
{
|
||||
"name": "doctrine/dbal",
|
||||
"version": "3.9.5",
|
||||
"version": "3.10.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/dbal.git",
|
||||
"reference": "4a4e2eed3134036ee36a147ee0dac037dfa17868"
|
||||
"reference": "3626601014388095d3af9de7e9e958623b7ef005"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/dbal/zipball/4a4e2eed3134036ee36a147ee0dac037dfa17868",
|
||||
"reference": "4a4e2eed3134036ee36a147ee0dac037dfa17868",
|
||||
"url": "https://api.github.com/repos/doctrine/dbal/zipball/3626601014388095d3af9de7e9e958623b7ef005",
|
||||
"reference": "3626601014388095d3af9de7e9e958623b7ef005",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"composer-runtime-api": "^2",
|
||||
"doctrine/cache": "^1.11|^2.0",
|
||||
"doctrine/deprecations": "^0.5.3|^1",
|
||||
"doctrine/event-manager": "^1|^2",
|
||||
"php": "^7.4 || ^8.0",
|
||||
"psr/cache": "^1|^2|^3",
|
||||
"psr/log": "^1|^2|^3"
|
||||
},
|
||||
"conflict": {
|
||||
"doctrine/cache": "< 1.11"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/cache": "^1.11|^2.0",
|
||||
"doctrine/coding-standard": "13.0.0",
|
||||
"fig/log-test": "^1",
|
||||
"jetbrains/phpstorm-stubs": "2023.1",
|
||||
@ -484,7 +514,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/dbal/issues",
|
||||
"source": "https://github.com/doctrine/dbal/tree/3.9.5"
|
||||
"source": "https://github.com/doctrine/dbal/tree/3.10.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -500,7 +530,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-06-15T22:40:05+00:00"
|
||||
"time": "2025-08-05T12:18:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/deprecations",
|
||||
@ -552,16 +582,16 @@
|
||||
},
|
||||
{
|
||||
"name": "doctrine/doctrine-bundle",
|
||||
"version": "2.15.0",
|
||||
"version": "2.15.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/DoctrineBundle.git",
|
||||
"reference": "d88294521a1bca943240adca65fa19ca8a7288c6"
|
||||
"reference": "5a305c5e776f9d3eb87f5b94d40d50aff439211d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/d88294521a1bca943240adca65fa19ca8a7288c6",
|
||||
"reference": "d88294521a1bca943240adca65fa19ca8a7288c6",
|
||||
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/5a305c5e776f9d3eb87f5b94d40d50aff439211d",
|
||||
"reference": "5a305c5e776f9d3eb87f5b94d40d50aff439211d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -654,7 +684,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/DoctrineBundle/issues",
|
||||
"source": "https://github.com/doctrine/DoctrineBundle/tree/2.15.0"
|
||||
"source": "https://github.com/doctrine/DoctrineBundle/tree/2.15.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -670,7 +700,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-06-16T19:53:58+00:00"
|
||||
"time": "2025-07-30T15:48:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/doctrine-migrations-bundle",
|
||||
@ -1088,16 +1118,16 @@
|
||||
},
|
||||
{
|
||||
"name": "doctrine/migrations",
|
||||
"version": "3.9.1",
|
||||
"version": "3.9.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/migrations.git",
|
||||
"reference": "0f1e0c960ac29866d648a4f50142a74fe1cb6999"
|
||||
"reference": "fa94c6f06b1bc6d4759481ec20b8b81d13e861be"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/migrations/zipball/0f1e0c960ac29866d648a4f50142a74fe1cb6999",
|
||||
"reference": "0f1e0c960ac29866d648a4f50142a74fe1cb6999",
|
||||
"url": "https://api.github.com/repos/doctrine/migrations/zipball/fa94c6f06b1bc6d4759481ec20b8b81d13e861be",
|
||||
"reference": "fa94c6f06b1bc6d4759481ec20b8b81d13e861be",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1115,18 +1145,18 @@
|
||||
"doctrine/orm": "<2.12 || >=4"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "^12",
|
||||
"doctrine/coding-standard": "^13",
|
||||
"doctrine/orm": "^2.13 || ^3",
|
||||
"doctrine/persistence": "^2 || ^3 || ^4",
|
||||
"doctrine/sql-formatter": "^1.0",
|
||||
"ext-pdo_sqlite": "*",
|
||||
"fig/log-test": "^1",
|
||||
"phpstan/phpstan": "^1.10",
|
||||
"phpstan/phpstan-deprecation-rules": "^1.1",
|
||||
"phpstan/phpstan-phpunit": "^1.3",
|
||||
"phpstan/phpstan-strict-rules": "^1.4",
|
||||
"phpstan/phpstan-symfony": "^1.3",
|
||||
"phpunit/phpunit": "^10.3",
|
||||
"phpstan/phpstan": "^2",
|
||||
"phpstan/phpstan-deprecation-rules": "^2",
|
||||
"phpstan/phpstan-phpunit": "^2",
|
||||
"phpstan/phpstan-strict-rules": "^2",
|
||||
"phpstan/phpstan-symfony": "^2",
|
||||
"phpunit/phpunit": "^10.3 || ^11.0 || ^12.0",
|
||||
"symfony/cache": "^5.4 || ^6.0 || ^7.0",
|
||||
"symfony/process": "^5.4 || ^6.0 || ^7.0",
|
||||
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
|
||||
@ -1171,7 +1201,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/migrations/issues",
|
||||
"source": "https://github.com/doctrine/migrations/tree/3.9.1"
|
||||
"source": "https://github.com/doctrine/migrations/tree/3.9.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1187,20 +1217,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-06-27T07:19:23+00:00"
|
||||
"time": "2025-07-29T11:36:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/orm",
|
||||
"version": "3.5.0",
|
||||
"version": "3.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/orm.git",
|
||||
"reference": "6deec3655ba3e8f15280aac11e264225854d2369"
|
||||
"reference": "64444dcfd511089d526cd2c7f74b9d7ed583bdfc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/orm/zipball/6deec3655ba3e8f15280aac11e264225854d2369",
|
||||
"reference": "6deec3655ba3e8f15280aac11e264225854d2369",
|
||||
"url": "https://api.github.com/repos/doctrine/orm/zipball/64444dcfd511089d526cd2c7f74b9d7ed583bdfc",
|
||||
"reference": "64444dcfd511089d526cd2c7f74b9d7ed583bdfc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1275,9 +1305,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/orm/issues",
|
||||
"source": "https://github.com/doctrine/orm/tree/3.5.0"
|
||||
"source": "https://github.com/doctrine/orm/tree/3.5.1"
|
||||
},
|
||||
"time": "2025-07-01T17:40:53+00:00"
|
||||
"time": "2025-08-05T06:05:51+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/persistence",
|
||||
@ -1929,16 +1959,16 @@
|
||||
},
|
||||
{
|
||||
"name": "league/commonmark",
|
||||
"version": "2.7.0",
|
||||
"version": "2.7.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/commonmark.git",
|
||||
"reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405"
|
||||
"reference": "10732241927d3971d28e7ea7b5712721fa2296ca"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/6fbb36d44824ed4091adbcf4c7d4a3923cdb3405",
|
||||
"reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405",
|
||||
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/10732241927d3971d28e7ea7b5712721fa2296ca",
|
||||
"reference": "10732241927d3971d28e7ea7b5712721fa2296ca",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1967,7 +1997,7 @@
|
||||
"symfony/process": "^5.4 | ^6.0 | ^7.0",
|
||||
"symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0",
|
||||
"unleashedtech/php-coding-standard": "^3.1.1",
|
||||
"vimeo/psalm": "^4.24.0 || ^5.0.0"
|
||||
"vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
|
||||
},
|
||||
"suggest": {
|
||||
"symfony/yaml": "v2.3+ required if using the Front Matter extension"
|
||||
@ -2032,7 +2062,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-05-05T12:20:28+00:00"
|
||||
"time": "2025-07-20T12:47:49+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/config",
|
||||
@ -3347,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": {
|
||||
@ -3396,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": [
|
||||
{
|
||||
@ -3412,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"
|
||||
@ -3453,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",
|
||||
@ -3493,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": [
|
||||
{
|
||||
@ -3504,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",
|
||||
@ -3589,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": {
|
||||
@ -3643,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": [
|
||||
{
|
||||
@ -3659,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": {
|
||||
@ -3718,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": [
|
||||
{
|
||||
@ -3729,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",
|
||||
@ -3811,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": [
|
||||
{
|
||||
@ -3822,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": {
|
||||
@ -3848,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",
|
||||
@ -3891,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": [
|
||||
{
|
||||
@ -3902,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",
|
||||
@ -3978,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": {
|
||||
@ -4000,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",
|
||||
@ -4016,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",
|
||||
@ -4035,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"
|
||||
@ -4066,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": [
|
||||
{
|
||||
@ -4077,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": {
|
||||
@ -4138,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": [
|
||||
{
|
||||
@ -4149,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": {
|
||||
@ -4212,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": [
|
||||
{
|
||||
@ -4223,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": {
|
||||
@ -4254,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"
|
||||
@ -4287,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": [
|
||||
{
|
||||
@ -4298,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": {
|
||||
@ -4367,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": [
|
||||
{
|
||||
@ -4383,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",
|
||||
@ -4463,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": {
|
||||
@ -4507,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": [
|
||||
{
|
||||
@ -4518,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": {
|
||||
@ -4573,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": [
|
||||
{
|
||||
@ -4584,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": {
|
||||
@ -4637,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": [
|
||||
{
|
||||
@ -4648,25 +4723,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-30T18:59:46+00:00"
|
||||
"time": "2025-07-15T13:41:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/flex",
|
||||
"version": "v2.8.0",
|
||||
"version": "v2.8.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/flex.git",
|
||||
"reference": "68cdcde0b7e36b008a08bcf3709c07a20e757a29"
|
||||
"reference": "423c36e369361003dc31ef11c5f15fb589e52c01"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/flex/zipball/68cdcde0b7e36b008a08bcf3709c07a20e757a29",
|
||||
"reference": "68cdcde0b7e36b008a08bcf3709c07a20e757a29",
|
||||
"url": "https://api.github.com/repos/symfony/flex/zipball/423c36e369361003dc31ef11c5f15fb589e52c01",
|
||||
"reference": "423c36e369361003dc31ef11c5f15fb589e52c01",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -4705,7 +4784,7 @@
|
||||
"description": "Composer plugin for Symfony",
|
||||
"support": {
|
||||
"issues": "https://github.com/symfony/flex/issues",
|
||||
"source": "https://github.com/symfony/flex/tree/v2.8.0"
|
||||
"source": "https://github.com/symfony/flex/tree/v2.8.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -4721,27 +4800,27 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-07-04T06:30:46+00:00"
|
||||
"time": "2025-07-05T07:45:19+00:00"
|
||||
},
|
||||
{
|
||||
"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",
|
||||
@ -4802,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": [
|
||||
{
|
||||
@ -4813,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": {
|
||||
@ -4839,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"
|
||||
},
|
||||
@ -4863,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",
|
||||
@ -4899,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",
|
||||
@ -4911,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": {
|
||||
@ -4950,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": [
|
||||
{
|
||||
@ -4961,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": {
|
||||
@ -4990,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"
|
||||
},
|
||||
@ -5000,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",
|
||||
@ -5044,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": [
|
||||
{
|
||||
@ -5055,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",
|
||||
@ -5142,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"
|
||||
},
|
||||
@ -5167,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",
|
||||
@ -5199,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": [
|
||||
{
|
||||
@ -5210,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": {
|
||||
@ -5236,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": {
|
||||
@ -5257,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"
|
||||
@ -5285,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": {
|
||||
@ -5313,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": [
|
||||
{
|
||||
@ -5324,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": {
|
||||
@ -5399,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": [
|
||||
{
|
||||
@ -5410,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": {
|
||||
@ -5437,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": {
|
||||
@ -5479,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": [
|
||||
{
|
||||
@ -5490,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",
|
||||
@ -5565,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": [
|
||||
{
|
||||
@ -5576,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": {
|
||||
@ -5649,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": [
|
||||
{
|
||||
@ -5660,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": {
|
||||
@ -5727,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": [
|
||||
{
|
||||
@ -5743,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",
|
||||
@ -5828,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": {
|
||||
@ -5886,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": [
|
||||
{
|
||||
@ -5902,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": {
|
||||
@ -5953,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": [
|
||||
{
|
||||
@ -5964,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": {
|
||||
@ -6025,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": [
|
||||
{
|
||||
@ -6041,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",
|
||||
@ -6604,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": {
|
||||
@ -6645,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": [
|
||||
{
|
||||
@ -6661,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": {
|
||||
@ -6721,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": [
|
||||
{
|
||||
@ -6732,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",
|
||||
@ -6806,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": [
|
||||
{
|
||||
@ -6822,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": {
|
||||
@ -6887,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": [
|
||||
{
|
||||
@ -6898,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": {
|
||||
@ -6966,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": [
|
||||
{
|
||||
@ -6982,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": {
|
||||
@ -7003,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": {
|
||||
@ -7043,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",
|
||||
@ -7072,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": [
|
||||
{
|
||||
@ -7083,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"
|
||||
@ -7158,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": [
|
||||
{
|
||||
@ -7169,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": {
|
||||
@ -7198,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": {
|
||||
@ -7226,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": [
|
||||
{
|
||||
@ -7242,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": {
|
||||
@ -7265,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": {
|
||||
@ -7314,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": [
|
||||
{
|
||||
@ -7325,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": {
|
||||
@ -7357,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"
|
||||
@ -7369,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",
|
||||
@ -7380,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",
|
||||
@ -7413,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": [
|
||||
{
|
||||
@ -7424,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",
|
||||
@ -7516,16 +7674,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/stimulus-bundle",
|
||||
"version": "v2.27.0",
|
||||
"version": "v2.28.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/stimulus-bundle.git",
|
||||
"reference": "defaeb91bd366f9f43dbe54dbdfd9bc3c4138814"
|
||||
"reference": "4ebef4b41e2524b7b797a103144256e5f7b39226"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/defaeb91bd366f9f43dbe54dbdfd9bc3c4138814",
|
||||
"reference": "defaeb91bd366f9f43dbe54dbdfd9bc3c4138814",
|
||||
"url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/4ebef4b41e2524b7b797a103144256e5f7b39226",
|
||||
"reference": "4ebef4b41e2524b7b797a103144256e5f7b39226",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -7565,7 +7723,7 @@
|
||||
"symfony-ux"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/stimulus-bundle/tree/v2.27.0"
|
||||
"source": "https://github.com/symfony/stimulus-bundle/tree/v2.28.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -7576,25 +7734,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-06-22T19:07:55+00:00"
|
||||
"time": "2025-07-29T15:18:27+00:00"
|
||||
},
|
||||
{
|
||||
"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": {
|
||||
@ -7627,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": [
|
||||
{
|
||||
@ -7643,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": {
|
||||
@ -7714,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": [
|
||||
{
|
||||
@ -7725,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",
|
||||
@ -7765,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",
|
||||
@ -7808,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": [
|
||||
{
|
||||
@ -7819,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",
|
||||
@ -7906,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",
|
||||
@ -7946,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",
|
||||
@ -7962,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": {
|
||||
@ -7995,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": [
|
||||
{
|
||||
@ -8006,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",
|
||||
@ -8079,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": [
|
||||
{
|
||||
@ -8090,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": {
|
||||
@ -8161,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": [
|
||||
{
|
||||
@ -8172,25 +8351,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-11T12:11:39+00:00"
|
||||
"time": "2025-07-10T05:39:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/ux-turbo",
|
||||
"version": "v2.27.0",
|
||||
"version": "v2.28.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/ux-turbo.git",
|
||||
"reference": "b9ce9b30a9cf9bbd090c7ad290bdaf84a0e100b2"
|
||||
"reference": "6094406d9cddc4bf2b583cef86c20edce1d534fa"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/ux-turbo/zipball/b9ce9b30a9cf9bbd090c7ad290bdaf84a0e100b2",
|
||||
"reference": "b9ce9b30a9cf9bbd090c7ad290bdaf84a0e100b2",
|
||||
"url": "https://api.github.com/repos/symfony/ux-turbo/zipball/6094406d9cddc4bf2b583cef86c20edce1d534fa",
|
||||
"reference": "6094406d9cddc4bf2b583cef86c20edce1d534fa",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -8260,7 +8443,7 @@
|
||||
"turbo-stream"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/ux-turbo/tree/v2.27.0"
|
||||
"source": "https://github.com/symfony/ux-turbo/tree/v2.28.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -8271,25 +8454,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-06-06T20:27:21+00:00"
|
||||
"time": "2025-07-29T15:18:27+00:00"
|
||||
},
|
||||
{
|
||||
"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": {
|
||||
@ -8326,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",
|
||||
@ -8357,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": [
|
||||
{
|
||||
@ -8368,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"
|
||||
@ -8440,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": [
|
||||
{
|
||||
@ -8451,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",
|
||||
@ -8516,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": [
|
||||
{
|
||||
@ -8527,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": {
|
||||
@ -8599,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": [
|
||||
{
|
||||
@ -8615,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": {
|
||||
@ -8670,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": [
|
||||
{
|
||||
@ -8681,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",
|
||||
@ -9472,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",
|
||||
@ -9563,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": [
|
||||
{
|
||||
@ -9571,20 +9779,20 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-12-29T13:46:23+00:00"
|
||||
"time": "2025-07-29T22:22:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "masterminds/html5",
|
||||
"version": "2.9.0",
|
||||
"version": "2.10.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Masterminds/html5-php.git",
|
||||
"reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6"
|
||||
"reference": "fcf91eb64359852f00d921887b219479b4f21251"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6",
|
||||
"reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6",
|
||||
"url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251",
|
||||
"reference": "fcf91eb64359852f00d921887b219479b4f21251",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -9636,22 +9844,22 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/Masterminds/html5-php/issues",
|
||||
"source": "https://github.com/Masterminds/html5-php/tree/2.9.0"
|
||||
"source": "https://github.com/Masterminds/html5-php/tree/2.10.0"
|
||||
},
|
||||
"time": "2024-03-31T07:05:07+00:00"
|
||||
"time": "2025-07-25T09:04:22+00:00"
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
"version": "1.13.2",
|
||||
"version": "1.13.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/myclabs/DeepCopy.git",
|
||||
"reference": "d25e62e636b0a9b01e3bdebb7823b474876dd829"
|
||||
"reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/d25e62e636b0a9b01e3bdebb7823b474876dd829",
|
||||
"reference": "d25e62e636b0a9b01e3bdebb7823b474876dd829",
|
||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
|
||||
"reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -9690,7 +9898,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/myclabs/DeepCopy/issues",
|
||||
"source": "https://github.com/myclabs/DeepCopy/tree/1.13.2"
|
||||
"source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -9698,20 +9906,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-07-04T14:07:32+00:00"
|
||||
"time": "2025-08-01T08:46:24+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
"version": "v5.5.0",
|
||||
"version": "v5.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||
"reference": "ae59794362fe85e051a58ad36b289443f57be7a9"
|
||||
"reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9",
|
||||
"reference": "ae59794362fe85e051a58ad36b289443f57be7a9",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/221b0d0fdf1369c71047ad1d18bb5880017bbc56",
|
||||
"reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -9754,9 +9962,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||
"source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0"
|
||||
"source": "https://github.com/nikic/PHP-Parser/tree/v5.6.0"
|
||||
},
|
||||
"time": "2025-05-31T08:24:38+00:00"
|
||||
"time": "2025-07-27T20:03:57+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phar-io/manifest",
|
||||
@ -9878,16 +10086,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "2.1.17",
|
||||
"version": "2.1.22",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "89b5ef665716fa2a52ecd2633f21007a6a349053"
|
||||
"reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/89b5ef665716fa2a52ecd2633f21007a6a349053",
|
||||
"reference": "89b5ef665716fa2a52ecd2633f21007a6a349053",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/41600c8379eb5aee63e9413fe9e97273e25d57e4",
|
||||
"reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -9932,20 +10140,20 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2025-05-21T20:55:28+00:00"
|
||||
"time": "2025-08-04T19:17:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-doctrine",
|
||||
"version": "2.0.3",
|
||||
"version": "2.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan-doctrine.git",
|
||||
"reference": "4497663eb17b9d29211830df5aceaa3a4d256a35"
|
||||
"reference": "6271e66ce37545bd2edcddbe6bcbdd3b665ab7b8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/4497663eb17b9d29211830df5aceaa3a4d256a35",
|
||||
"reference": "4497663eb17b9d29211830df5aceaa3a4d256a35",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/6271e66ce37545bd2edcddbe6bcbdd3b665ab7b8",
|
||||
"reference": "6271e66ce37545bd2edcddbe6bcbdd3b665ab7b8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -10002,22 +10210,22 @@
|
||||
"description": "Doctrine extensions for PHPStan",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan-doctrine/issues",
|
||||
"source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.3"
|
||||
"source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.4"
|
||||
},
|
||||
"time": "2025-05-05T15:28:52+00:00"
|
||||
"time": "2025-07-17T11:57:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-symfony",
|
||||
"version": "2.0.6",
|
||||
"version": "2.0.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan-symfony.git",
|
||||
"reference": "5005288e07583546ea00b52de4a9ac412eb869d7"
|
||||
"reference": "392f7ab8f52a0a776977be4e62535358c28e1b15"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/5005288e07583546ea00b52de4a9ac412eb869d7",
|
||||
"reference": "5005288e07583546ea00b52de4a9ac412eb869d7",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/392f7ab8f52a0a776977be4e62535358c28e1b15",
|
||||
"reference": "392f7ab8f52a0a776977be4e62535358c28e1b15",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -10073,9 +10281,9 @@
|
||||
"description": "Symfony Framework extensions and rules for PHPStan",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan-symfony/issues",
|
||||
"source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.6"
|
||||
"source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.7"
|
||||
},
|
||||
"time": "2025-05-14T07:00:05+00:00"
|
||||
"time": "2025-07-22T09:40:57+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
@ -11998,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": {
|
||||
@ -12046,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": [
|
||||
{
|
||||
@ -12057,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": {
|
||||
@ -12111,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": [
|
||||
{
|
||||
@ -12127,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",
|
||||
@ -12185,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": [
|
||||
{
|
||||
@ -12201,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": {
|
||||
@ -12252,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": [
|
||||
{
|
||||
@ -12268,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",
|
||||
@ -12450,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",
|
||||
@ -12511,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": [
|
||||
{
|
||||
@ -12522,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",
|
||||
|
@ -15,4 +15,6 @@ return [
|
||||
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
|
||||
Oneup\UploaderBundle\OneupUploaderBundle::class => ['all' => true],
|
||||
FOS\RestBundle\FOSRestBundle::class => ['all' => true],
|
||||
Bnine\FilesBundle\BnineFilesBundle::class => ['all' => true],
|
||||
Bnine\MdEditorBundle\BnineMdEditorBundle::class => ['all' => true],
|
||||
];
|
||||
|
11
config/packages/csrf.yaml
Normal file
11
config/packages/csrf.yaml
Normal 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
|
@ -4,5 +4,5 @@ oneup_uploader:
|
||||
frontend: dropzone
|
||||
logo:
|
||||
frontend: dropzone
|
||||
file:
|
||||
bninefile:
|
||||
frontend: dropzone
|
3
config/packages/property_info.yaml
Normal file
3
config/packages/property_info.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
framework:
|
||||
property_info:
|
||||
with_constructor_extractor: true
|
@ -3,6 +3,9 @@ twig:
|
||||
form_themes: ['bootstrap_5_layout.html.twig']
|
||||
globals:
|
||||
appName: "%appName%"
|
||||
paths:
|
||||
'%kernel.project_dir%/vendor/bnine/filesbundle/templates': BnineFilesBundle
|
||||
'%kernel.project_dir%/vendor/bnine/mdeditorbundle/templates': BnineMdEditorBundle
|
||||
when@test:
|
||||
twig:
|
||||
strict_variables: true
|
||||
|
4
config/packages/ux_turbo.yaml
Normal file
4
config/packages/ux_turbo.yaml
Normal file
@ -0,0 +1,4 @@
|
||||
# Enable stateless CSRF protection for forms and logins/logouts
|
||||
framework:
|
||||
csrf_protection:
|
||||
check_header: true
|
@ -3,3 +3,11 @@ controllers:
|
||||
path: ../src/Controller/
|
||||
namespace: App\Controller
|
||||
type: attribute
|
||||
|
||||
bninefilesbundle:
|
||||
resource: '@BnineFilesBundle/config/routes.yaml'
|
||||
prefix: '/bninefiles'
|
||||
|
||||
bninemdeditorbundle:
|
||||
resource: '@BnineMdEditorBundle/config/routes.yaml'
|
||||
prefix: '/bninemdeditor'
|
@ -29,4 +29,3 @@ services:
|
||||
App\Security\DynamicAuthenticator:
|
||||
arguments:
|
||||
$modeAuth: '%env(MODE_AUTH)%'
|
||||
|
||||
|
8
phpstan.dist.neon
Normal file
8
phpstan.dist.neon
Normal file
@ -0,0 +1,8 @@
|
||||
parameters:
|
||||
level: 6
|
||||
paths:
|
||||
- bin/
|
||||
- config/
|
||||
- public/
|
||||
- src/
|
||||
- tests/
|
@ -105,4 +105,8 @@ content {
|
||||
margin-bottom: 2px;
|
||||
margin-right: 2px;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 18 KiB |
@ -1,109 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Service\FileService;
|
||||
use Oneup\UploaderBundle\Uploader\Response\ResponseInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
class FileController extends AbstractController
|
||||
{
|
||||
private FileService $fileService;
|
||||
|
||||
public function __construct(FileService $fileService)
|
||||
{
|
||||
$this->fileService = $fileService;
|
||||
}
|
||||
|
||||
#[Route('/user/file/{domain}/{id}/{editable}', name: 'app_files', methods: ['GET'])]
|
||||
public function browse(string $domain, int $id, int $editable, Request $request): Response
|
||||
{
|
||||
$relativePath = $request->query->get('path', '');
|
||||
|
||||
try {
|
||||
$files = $this->fileService->list($domain, (string) $id, $relativePath);
|
||||
|
||||
return $this->render('file/browse.html.twig', [
|
||||
'domain' => $domain,
|
||||
'id' => $id,
|
||||
'files' => $files,
|
||||
'path' => $relativePath,
|
||||
'editable' => $editable,
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
$this->addFlash('danger', $e->getMessage());
|
||||
dd($e->getMessage());
|
||||
|
||||
return $this->redirectToRoute('app_files', [
|
||||
'domain' => $domain,
|
||||
'id' => $id,
|
||||
'editable' => $editable,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
#[Route('/user/uploadmodal/{domain}/{id}', name: 'app_files_uploadmodal', methods: ['GET'])]
|
||||
public function uploadmodal(string $domain, int $id, Request $request): Response
|
||||
{
|
||||
$relativePath = $request->query->get('path', '');
|
||||
|
||||
return $this->render('file\upload.html.twig', [
|
||||
'useheader' => false,
|
||||
'usemenu' => false,
|
||||
'usesidebar' => false,
|
||||
'endpoint' => 'file',
|
||||
'domain' => $domain,
|
||||
'id' => $id,
|
||||
'path' => $relativePath,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/user/uploadfile', name: 'app_files_uploadfile', methods: ['POST'])]
|
||||
public function upload(Request $request): Response|ResponseInterface
|
||||
{
|
||||
/** @var UploadedFile $file */
|
||||
$file = $request->files->get('file');
|
||||
$domain = $request->query->get('domain');
|
||||
$id = $request->query->get('id');
|
||||
$relativePath = $request->query->get('path', '');
|
||||
|
||||
if (!$file || !$domain || !$id) {
|
||||
return new Response('Invalid parameters', 400);
|
||||
}
|
||||
|
||||
$baseDir = $this->getParameter('kernel.project_dir').'/uploads/'.$domain.'/'.$id.'/'.ltrim($relativePath, '/');
|
||||
|
||||
if (!is_dir($baseDir)) {
|
||||
mkdir($baseDir, 0775, true);
|
||||
}
|
||||
|
||||
$originalName = $file->getClientOriginalName();
|
||||
$file->move($baseDir, $originalName);
|
||||
|
||||
return new JsonResponse(['success' => true]);
|
||||
}
|
||||
|
||||
#[Route('/user/file/{domain}/{id}/delete', name: 'app_files_delete', methods: ['POST'])]
|
||||
public function delete(string $domain, int $id, Request $request): JsonResponse
|
||||
{
|
||||
$data = json_decode($request->getContent(), true);
|
||||
$relativePath = $data['path'] ?? null;
|
||||
|
||||
if (!$relativePath) {
|
||||
return $this->json(['error' => 'Chemin non fourni.'], 400);
|
||||
}
|
||||
|
||||
try {
|
||||
$this->fileService->delete($domain, (string) $id, $relativePath);
|
||||
|
||||
return $this->json(['success' => true]);
|
||||
} catch (\Exception $e) {
|
||||
return $this->json(['error' => $e->getMessage()], 400);
|
||||
}
|
||||
}
|
||||
}
|
@ -3,10 +3,10 @@
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Entity\Project;
|
||||
use App\Entity\User;
|
||||
use App\Form\ProjectType;
|
||||
use App\Repository\ProjectRepository;
|
||||
use App\Service\FileService;
|
||||
use App\Security\ProjectVoter;
|
||||
use Bnine\FilesBundle\Service\FileService;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
@ -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_update' : 'app_user_project_update', ['id' => $project->getId()]);
|
||||
}
|
||||
|
||||
return $this->render('project/edit.html.twig', [
|
||||
'usemenu' => true,
|
||||
'usesidebar' => true,
|
||||
'usesidebar' => $isAdmin,
|
||||
'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,50 +79,101 @@ 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');
|
||||
if ($isAdmin) {
|
||||
return $this->redirectToRoute('app_admin_project');
|
||||
} else {
|
||||
return $this->redirectToRoute('app_user_project_view', ['id' => $project->getId()]);
|
||||
}
|
||||
}
|
||||
|
||||
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',
|
||||
'routemove' => $isAdmin ? 'app_admin_project_move' : 'app_user_project_move',
|
||||
'routedelete' => $isAdmin ? 'app_admin_project_delete' : 'app_user_project_delete',
|
||||
'routesubmitoption' => $isAdmin ? 'app_admin_option_submit' : 'app_user_option_submit',
|
||||
'routeupdateoption' => $isAdmin ? 'app_admin_option_update' : 'app_user_option_update',
|
||||
'mode' => 'update',
|
||||
'form' => $form,
|
||||
'project' => $project,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/admin/project/delete/{id}', name: 'app_admin_project_delete')]
|
||||
public function delete(int $id, ProjectRepository $projectRepository, EntityManagerInterface $em): Response
|
||||
#[Route('/admin/project/moveto/{id}/{status}', name: 'app_admin_project_move')]
|
||||
#[Route('/user/project/moveto/{id}/{status}', name: 'app_user_project_move')]
|
||||
public function move(int $id, string $status, 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();
|
||||
$attribute = constant(ProjectVoter::class.'::MOVE'.$status);
|
||||
$this->denyAccessUnlessGranted($attribute, $project);
|
||||
|
||||
$project->setStatus(constant(Project::class.'::'.$status));
|
||||
$em->flush();
|
||||
|
||||
$isAdmin = str_starts_with($request->attributes->get('_route'), 'app_admin');
|
||||
|
||||
return $this->redirectToRoute($isAdmin ? 'app_admin_project' : 'app_user_project_view', ['id' => $project->getId()]);
|
||||
}
|
||||
|
||||
#[Route('/admin/project/delete/{id}', name: 'app_admin_project_delete')]
|
||||
#[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.');
|
||||
}
|
||||
|
||||
$this->denyAccessUnlessGranted(ProjectVoter::DELETE, $project);
|
||||
|
||||
$isAdmin = str_starts_with($request->attributes->get('_route'), 'app_admin');
|
||||
|
||||
// Tentative de suppression
|
||||
try {
|
||||
$em->remove($project);
|
||||
$em->flush();
|
||||
} catch (\Exception $e) {
|
||||
$this->addflash('error', $e->getMessage());
|
||||
|
||||
return $this->redirectToRoute('app_admin_project_update', ['id' => $id]);
|
||||
}
|
||||
|
||||
return $this->redirectToRoute('app_admin_project');
|
||||
return $this->redirectToRoute($isAdmin ? 'app_admin_project' : 'app_home');
|
||||
}
|
||||
|
||||
#[Route('/user/project/view/{id}', name: 'app_user_project_view')]
|
||||
public function view(int $id, Request $request, ProjectRepository $projectRepository, EntityManagerInterface $em): Response
|
||||
{
|
||||
$project = $projectRepository->find($id);
|
||||
if (!$project) {
|
||||
throw new NotFoundHttpException('La ressource demandée est introuvable.');
|
||||
}
|
||||
|
||||
$this->denyAccessUnlessGranted(ProjectVoter::VIEW, $project);
|
||||
|
||||
$isAdmin = str_starts_with($request->attributes->get('_route'), 'app_admin');
|
||||
|
||||
return $this->render('project/view.html.twig', [
|
||||
'usemenu' => true,
|
||||
'usesidebar' => false,
|
||||
'title' => 'Projet = '.$project->getTitle(),
|
||||
'routeupdate' => $isAdmin ? 'app_admin_project_update' : 'app_user_project_update',
|
||||
'routecancel' => $isAdmin ? 'app_admin_project' : 'app_home',
|
||||
'routedelete' => $isAdmin ? 'app_admin_project_delete' : 'app_user_project_delete',
|
||||
'routemove' => $isAdmin ? 'app_admin_project_move' : 'app_user_project_move',
|
||||
'project' => $project,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
111
src/Controller/ProjectOptionController.php
Normal file
111
src/Controller/ProjectOptionController.php
Normal file
@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Entity\ProjectOption;
|
||||
use App\Form\OptionType;
|
||||
use App\Repository\ProjectOptionRepository;
|
||||
use App\Repository\ProjectRepository;
|
||||
use App\Security\ProjectVoter;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
|
||||
class ProjectOptionController extends AbstractController
|
||||
{
|
||||
#[Route('/admin/option/submit/{idproject}', name: 'app_admin_option_submit')]
|
||||
#[Route('/user/option/submit/{idproject}', name: 'app_user_option_submit')]
|
||||
public function submit(int $idproject, Request $request, ProjectRepository $projectRepository, EntityManagerInterface $em): Response
|
||||
{
|
||||
$project = $projectRepository->find($idproject);
|
||||
if (!$project) {
|
||||
throw new NotFoundHttpException('La ressource demandée est introuvable.');
|
||||
}
|
||||
$this->denyAccessUnlessGranted(ProjectVoter::UPDATE, $project);
|
||||
|
||||
$option = new ProjectOption();
|
||||
$option->setProject($project);
|
||||
|
||||
$isAdmin = str_starts_with($request->attributes->get('_route'), 'app_admin');
|
||||
|
||||
$form = $this->createForm(OptionType::class, $option, ['mode' => 'submit']);
|
||||
$form->handleRequest($request);
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$em->persist($option);
|
||||
$em->flush();
|
||||
|
||||
return $this->redirectToRoute($isAdmin ? 'app_admin_project_update' : 'app_user_project_update', ['id' => $idproject]);
|
||||
}
|
||||
|
||||
return $this->render('option/edit.html.twig', [
|
||||
'usemenu' => true,
|
||||
'usesidebar' => $isAdmin,
|
||||
'title' => 'Création Option',
|
||||
'routecancel' => $isAdmin ? 'app_admin_project_update' : 'app_admin_project_update',
|
||||
'routedelete' => $isAdmin ? 'app_admin_option_delete' : 'app_user_option_delete',
|
||||
'mode' => 'submit',
|
||||
'idproject' => $idproject,
|
||||
'form' => $form,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/admin/option/update/{idproject}/{id}', name: 'app_admin_option_update')]
|
||||
#[Route('/user/option/update/{idproject}/{id}', name: 'app_user_option_update')]
|
||||
public function update(int $idproject, int $id, Request $request, ProjectOptionRepository $projectOptionResitory, EntityManagerInterface $em): Response
|
||||
{
|
||||
$option = $projectOptionResitory->find($id);
|
||||
if (!$option) {
|
||||
throw new NotFoundHttpException('La ressource demandée est introuvable.');
|
||||
}
|
||||
|
||||
$this->denyAccessUnlessGranted(ProjectVoter::UPDATE, $option->getProject());
|
||||
|
||||
$isAdmin = str_starts_with($request->attributes->get('_route'), 'app_admin');
|
||||
$form = $this->createForm(OptionType::class, $option, ['mode' => 'update']);
|
||||
$form->handleRequest($request);
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$em->flush();
|
||||
|
||||
return $this->redirectToRoute($isAdmin ? 'app_admin_project_update' : 'app_user_project_update', ['id' => $idproject]);
|
||||
}
|
||||
|
||||
return $this->render('option/edit.html.twig', [
|
||||
'usemenu' => true,
|
||||
'usesidebar' => $isAdmin,
|
||||
'title' => 'Modification Option = '.$option->getTitle(),
|
||||
'routecancel' => $isAdmin ? 'app_admin_project_update' : 'app_user_project_update',
|
||||
'routedelete' => $isAdmin ? 'app_admin_option_delete' : 'app_user_option_delete',
|
||||
'mode' => 'update',
|
||||
'idproject' => $idproject,
|
||||
'option' => $option,
|
||||
'form' => $form,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/admin/option/delete/{idproject}/{id}', name: 'app_admin_option_delete')]
|
||||
#[Route('/user/option/delete/{idproject}/{id}', name: 'app_user_option_delete')]
|
||||
public function delete(int $idproject, int $id, Request $request, ProjectOptionRepository $projectOptionResitory, EntityManagerInterface $em): Response
|
||||
{
|
||||
$option = $projectOptionResitory->find($id);
|
||||
if (!$option) {
|
||||
throw new NotFoundHttpException('La ressource demandée est introuvable.');
|
||||
}
|
||||
|
||||
$this->denyAccessUnlessGranted(ProjectVoter::UPDATE, $option->getProject());
|
||||
|
||||
$isAdmin = str_starts_with($request->attributes->get('_route'), 'app_admin');
|
||||
|
||||
// Tentative de suppression
|
||||
try {
|
||||
$em->remove($option);
|
||||
$em->flush();
|
||||
} catch (\Exception $e) {
|
||||
$this->addflash('error', $e->getMessage());
|
||||
}
|
||||
|
||||
return $this->redirectToRoute($isAdmin ? 'app_admin_project_update' : 'app_user_project_update', ['id' => $idproject]);
|
||||
}
|
||||
}
|
@ -8,21 +8,39 @@ use Doctrine\Common\Collections\Collection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity(repositoryClass: ProjectRepository::class)]
|
||||
#[ORM\HasLifecycleCallbacks]
|
||||
class Project
|
||||
{
|
||||
public const DRAFT = 'Brouillon';
|
||||
public const TOVOTE = 'A Voter';
|
||||
public const VOTED = 'Voté';
|
||||
public const ARCHIVED = 'Archivé';
|
||||
public const NATURE_COLLECTIVE = 'Collective';
|
||||
public const NATURE_STRATEGIC = 'Stratégique';
|
||||
public const NATURE_TACTICAL = 'Tactique';
|
||||
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue]
|
||||
#[ORM\Column]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\Column(length: 255, unique: true)]
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $title = null;
|
||||
|
||||
#[ORM\Column()]
|
||||
private int $status;
|
||||
#[ORM\Column(type: 'text')]
|
||||
private string $summary;
|
||||
|
||||
#[ORM\Column(type: 'text', nullable: true)]
|
||||
private ?string $description = null;
|
||||
|
||||
#[ORM\Column(type: 'string', length: 20)]
|
||||
private string $nature;
|
||||
|
||||
#[ORM\Column]
|
||||
private string $status;
|
||||
|
||||
#[ORM\Column(type: 'datetime', nullable: true)]
|
||||
private ?\DateTimeInterface $updateAt = null;
|
||||
private ?\DateTimeInterface $dueDate = null;
|
||||
|
||||
/**
|
||||
* @var Collection<int, User>
|
||||
@ -30,9 +48,25 @@ class Project
|
||||
#[ORM\ManyToMany(targetEntity: User::class, mappedBy: 'projects')]
|
||||
private Collection $users;
|
||||
|
||||
/**
|
||||
* @var Collection<int, ProjectTimeline>
|
||||
*/
|
||||
#[ORM\OneToMany(mappedBy: 'project', targetEntity: ProjectTimeline::class, cascade: ['remove'])]
|
||||
#[ORM\OrderBy(['createdAt' => 'DESC'])]
|
||||
private Collection $timelines;
|
||||
|
||||
/**
|
||||
* @var Collection<int, ProjectTimeline>
|
||||
*/
|
||||
#[ORM\OneToMany(mappedBy: 'project', targetEntity: ProjectOption::class, cascade: ['remove'])]
|
||||
#[ORM\OrderBy(['title' => 'ASC'])]
|
||||
private Collection $options;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->users = new ArrayCollection();
|
||||
$this->timelines = new ArrayCollection();
|
||||
$this->options = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function getId(): ?int
|
||||
@ -52,30 +86,66 @@ class Project
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getUpdateAt(): ?\DateTimeInterface
|
||||
public function getSummary(): string
|
||||
{
|
||||
return $this->updateAt;
|
||||
return $this->summary;
|
||||
}
|
||||
|
||||
public function setUpdateAt(?\DateTimeInterface $updateAt): static
|
||||
public function setSummary(string $summary): static
|
||||
{
|
||||
$this->updateAt = $updateAt;
|
||||
$this->summary = $summary;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getStatus(): ?int
|
||||
public function getDescription(): ?string
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
public function setDescription(?string $description): static
|
||||
{
|
||||
$this->description = $description;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getNature(): string
|
||||
{
|
||||
return $this->nature;
|
||||
}
|
||||
|
||||
public function setNature(string $nature): static
|
||||
{
|
||||
$this->nature = $nature;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getStatus(): string
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function setStatus(int $status): static
|
||||
public function setStatus(string $status): static
|
||||
{
|
||||
$this->status = $status;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getDueDate(): ?\DateTimeInterface
|
||||
{
|
||||
return $this->dueDate;
|
||||
}
|
||||
|
||||
public function setDueDate(?\DateTimeInterface $dueDate): static
|
||||
{
|
||||
$this->dueDate = $dueDate;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, User>
|
||||
*/
|
||||
@ -102,4 +172,14 @@ class Project
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTimelines(): Collection
|
||||
{
|
||||
return $this->timelines;
|
||||
}
|
||||
|
||||
public function getOptions(): Collection
|
||||
{
|
||||
return $this->options;
|
||||
}
|
||||
}
|
||||
|
81
src/Entity/ProjectOption.php
Normal file
81
src/Entity/ProjectOption.php
Normal file
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use App\Repository\ProjectOptionRepository;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity(repositoryClass: ProjectOptionRepository::class)]
|
||||
class ProjectOption
|
||||
{
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue]
|
||||
#[ORM\Column]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: Project::class, inversedBy: 'timelines')]
|
||||
#[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
|
||||
private Project $project;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private string $title;
|
||||
|
||||
#[ORM\Column(type: 'text', nullable: true)]
|
||||
private ?string $whyYes = null;
|
||||
|
||||
#[ORM\Column(type: 'text', nullable: true)]
|
||||
private ?string $whyNot = null;
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getProject(): Project
|
||||
{
|
||||
return $this->project;
|
||||
}
|
||||
|
||||
public function setProject(Project $project): self
|
||||
{
|
||||
$this->project = $project;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTitle(): string
|
||||
{
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
public function setTitle(string $title): self
|
||||
{
|
||||
$this->title = $title;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getWhyYes(): ?string
|
||||
{
|
||||
return $this->whyYes;
|
||||
}
|
||||
|
||||
public function setWhyYes(?string $whyYes): self
|
||||
{
|
||||
$this->whyYes = $whyYes;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getWhyNot(): ?string
|
||||
{
|
||||
return $this->whyNot;
|
||||
}
|
||||
|
||||
public function setWhyNot(?string $whyNot): self
|
||||
{
|
||||
$this->whyNot = $whyNot;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
86
src/Entity/ProjectTimeline.php
Normal file
86
src/Entity/ProjectTimeline.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use App\Repository\ProjectTimelineRepository;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity(repositoryClass: ProjectTimelineRepository::class)]
|
||||
class ProjectTimeline
|
||||
{
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue]
|
||||
#[ORM\Column]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: Project::class, inversedBy: 'timelines')]
|
||||
#[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
|
||||
private Project $project;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: User::class)]
|
||||
#[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
|
||||
private User $user;
|
||||
|
||||
#[ORM\Column(type: 'datetime')]
|
||||
private \DateTimeInterface $createdAt;
|
||||
|
||||
#[ORM\Column(type: 'array')]
|
||||
private array $description;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getProject(): Project
|
||||
{
|
||||
return $this->project;
|
||||
}
|
||||
|
||||
public function setProject(Project $project): static
|
||||
{
|
||||
$this->project = $project;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getUser(): User
|
||||
{
|
||||
return $this->user;
|
||||
}
|
||||
|
||||
public function setUser(User $user): static
|
||||
{
|
||||
$this->user = $user;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getCreatedAt(): \DateTimeInterface
|
||||
{
|
||||
return $this->createdAt;
|
||||
}
|
||||
|
||||
public function setCreatedAt(\DateTimeInterface $createAt): static
|
||||
{
|
||||
$this->createdAt = $createAt;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getDescription(): array
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
public function setDescription(array $description): static
|
||||
{
|
||||
$this->description = $description;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
@ -105,6 +105,11 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function hasRole(string $role): bool
|
||||
{
|
||||
return in_array($role, $this->getRoles());
|
||||
}
|
||||
|
||||
/**
|
||||
* @see PasswordAuthenticatedUserInterface
|
||||
*/
|
||||
|
155
src/EventListener/ProjectListener.php
Normal file
155
src/EventListener/ProjectListener.php
Normal file
@ -0,0 +1,155 @@
|
||||
<?php
|
||||
|
||||
namespace App\EventListener;
|
||||
|
||||
use App\Entity\Project;
|
||||
use App\Entity\ProjectTimeline;
|
||||
use Doctrine\Bundle\DoctrineBundle\Attribute\AsDoctrineListener;
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\Event\OnFlushEventArgs;
|
||||
use Symfony\Bundle\SecurityBundle\Security;
|
||||
|
||||
#[AsDoctrineListener(event: 'onFlush')]
|
||||
class ProjectListener
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Security $security,
|
||||
) {
|
||||
}
|
||||
|
||||
public function onFlush(OnFlushEventArgs $args): void
|
||||
{
|
||||
$em = $args->getObjectManager();
|
||||
if (!$em instanceof EntityManagerInterface) {
|
||||
return;
|
||||
}
|
||||
$uow = $em->getUnitOfWork();
|
||||
|
||||
$user = $this->security->getUser();
|
||||
if (!$user) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($uow->getScheduledEntityInsertions() as $entity) {
|
||||
if (!$entity instanceof Project) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$timeline = new ProjectTimeline();
|
||||
$timeline->setProject($entity);
|
||||
$timeline->setUser($user);
|
||||
$timeline->setCreatedAt(new \DateTime());
|
||||
$timeline->setDescription(['created' => true]);
|
||||
|
||||
$em->persist($timeline);
|
||||
$meta = $em->getClassMetadata(ProjectTimeline::class);
|
||||
$uow->computeChangeSet($meta, $timeline);
|
||||
}
|
||||
|
||||
foreach ($uow->getScheduledEntityUpdates() as $entity) {
|
||||
if (!$entity instanceof Project) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$changeSet = $uow->getEntityChangeSet($entity);
|
||||
$changes = [];
|
||||
|
||||
foreach ($changeSet as $field => [$old, $new]) {
|
||||
$oldStr = $this->stringify($old);
|
||||
$newStr = $this->stringify($new);
|
||||
|
||||
if ($oldStr !== $newStr) {
|
||||
$changes[$field] = [
|
||||
'old' => $oldStr,
|
||||
'new' => $newStr,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($changes)) {
|
||||
$timeline = new ProjectTimeline();
|
||||
$timeline->setProject($entity);
|
||||
$timeline->setUser($user);
|
||||
$timeline->setCreatedAt(new \DateTime());
|
||||
$timeline->setDescription($changes);
|
||||
|
||||
$em->persist($timeline);
|
||||
$meta = $em->getClassMetadata(ProjectTimeline::class);
|
||||
$uow->computeChangeSet($meta, $timeline);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($uow->getScheduledCollectionUpdates() as $col) {
|
||||
$owner = $col->getOwner();
|
||||
|
||||
if (!$owner instanceof Project) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$mapping = $col->getMapping();
|
||||
$fieldName = $mapping['fieldName'];
|
||||
|
||||
$added = $col->getInsertDiff();
|
||||
$removed = $col->getDeleteDiff();
|
||||
|
||||
$changes = [];
|
||||
|
||||
foreach ($added as $addedEntity) {
|
||||
$changes[$fieldName.'_added'][] = $this->stringify($addedEntity);
|
||||
}
|
||||
|
||||
foreach ($removed as $removedEntity) {
|
||||
$changes[$fieldName.'_removed'][] = $this->stringify($removedEntity);
|
||||
}
|
||||
|
||||
if (!empty($changes)) {
|
||||
$timeline = new ProjectTimeline();
|
||||
$timeline->setProject($owner);
|
||||
$timeline->setUser($user);
|
||||
$timeline->setCreatedAt(new \DateTime());
|
||||
$timeline->setDescription($changes);
|
||||
|
||||
$em->persist($timeline);
|
||||
$meta = $em->getClassMetadata(ProjectTimeline::class);
|
||||
$uow->computeChangeSet($meta, $timeline);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function stringify(mixed $value): string
|
||||
{
|
||||
if (is_null($value)) {
|
||||
return 'null';
|
||||
}
|
||||
|
||||
if (is_scalar($value)) {
|
||||
return (string) $value;
|
||||
}
|
||||
|
||||
if ($value instanceof Collection || is_array($value)) {
|
||||
$elements = [];
|
||||
foreach ($value as $item) {
|
||||
$elements[] = $this->stringify($item);
|
||||
}
|
||||
|
||||
return '['.implode(', ', $elements).']';
|
||||
}
|
||||
|
||||
if (is_object($value)) {
|
||||
if (method_exists($value, '__toString')) {
|
||||
return (string) $value;
|
||||
}
|
||||
|
||||
foreach (['getUsername', 'getName', 'getTitle', 'getEmail', 'getId'] as $method) {
|
||||
if (method_exists($value, $method)) {
|
||||
return (string) $value->{$method}();
|
||||
}
|
||||
}
|
||||
|
||||
return get_class($value);
|
||||
}
|
||||
|
||||
return json_encode($value);
|
||||
}
|
||||
}
|
45
src/Form/OptionType.php
Normal file
45
src/Form/OptionType.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Form;
|
||||
|
||||
use App\Entity\ProjectOption;
|
||||
use Bnine\MdEditorBundle\Form\Type\MarkdownType;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class OptionType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
$builder
|
||||
->add('submit', SubmitType::class, [
|
||||
'label' => 'Valider',
|
||||
'attr' => ['class' => 'btn btn-success no-print me-1'],
|
||||
])
|
||||
|
||||
->add('title', TextType::class, [
|
||||
'label' => 'Titre',
|
||||
])
|
||||
|
||||
->add('whyYes', MarkdownType::class, [
|
||||
'label' => 'Pourquoi Voter Pour',
|
||||
'markdown_height' => 200,
|
||||
])
|
||||
|
||||
->add('whyNot', MarkdownType::class, [
|
||||
'label' => 'Pourquoi Voter Contre',
|
||||
'markdown_height' => 200,
|
||||
]);
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
'data_class' => ProjectOption::class,
|
||||
'mode' => 'submit',
|
||||
]);
|
||||
}
|
||||
}
|
@ -4,10 +4,12 @@ namespace App\Form;
|
||||
|
||||
use App\Entity\Project;
|
||||
use App\Entity\User;
|
||||
use Bnine\MdEditorBundle\Form\Type\MarkdownType;
|
||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
@ -19,15 +21,24 @@ class ProjectType extends AbstractType
|
||||
$builder
|
||||
->add('submit', SubmitType::class, [
|
||||
'label' => 'Valider',
|
||||
'attr' => ['class' => 'btn btn-success no-print'],
|
||||
'attr' => ['class' => 'btn btn-success no-print me-1'],
|
||||
])
|
||||
|
||||
->add('title', TextType::class, [
|
||||
'label' => 'Titre',
|
||||
])
|
||||
|
||||
->add('status', ChoiceType::class, [
|
||||
'choices' => ['Brouillon' => 0],
|
||||
->add('summary', TextareaType::class, [
|
||||
'label' => 'Résumé',
|
||||
])
|
||||
|
||||
->add('nature', ChoiceType::class, [
|
||||
'label' => 'Nature',
|
||||
'choices' => [
|
||||
Project::NATURE_COLLECTIVE => Project::NATURE_COLLECTIVE,
|
||||
Project::NATURE_STRATEGIC => Project::NATURE_STRATEGIC,
|
||||
Project::NATURE_TACTICAL => Project::NATURE_TACTICAL,
|
||||
],
|
||||
])
|
||||
|
||||
->add('users', EntityType::class, [
|
||||
@ -39,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
|
||||
|
@ -24,7 +24,7 @@ class UserType extends AbstractType
|
||||
$builder
|
||||
->add('submit', SubmitType::class, [
|
||||
'label' => 'Valider',
|
||||
'attr' => ['class' => 'btn btn-success no-print'],
|
||||
'attr' => ['class' => 'btn btn-success no-print me-1'],
|
||||
])
|
||||
|
||||
->add('username', TextType::class, [
|
||||
|
18
src/Repository/ProjectOptionRepository.php
Normal file
18
src/Repository/ProjectOptionRepository.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Repository;
|
||||
|
||||
use App\Entity\ProjectOption;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
/**
|
||||
* @extends ServiceEntityRepository<ProjectOption>
|
||||
*/
|
||||
class ProjectOptionRepository extends ServiceEntityRepository
|
||||
{
|
||||
public function __construct(ManagerRegistry $registry)
|
||||
{
|
||||
parent::__construct($registry, ProjectOption::class);
|
||||
}
|
||||
}
|
18
src/Repository/ProjectTimelineRepository.php
Normal file
18
src/Repository/ProjectTimelineRepository.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Repository;
|
||||
|
||||
use App\Entity\ProjectTimeline;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
/**
|
||||
* @extends ServiceEntityRepository<ProjectTimeline>
|
||||
*/
|
||||
class ProjectTimelineRepository extends ServiceEntityRepository
|
||||
{
|
||||
public function __construct(ManagerRegistry $registry)
|
||||
{
|
||||
parent::__construct($registry, ProjectTimeline::class);
|
||||
}
|
||||
}
|
72
src/Security/FileVoter.php
Normal file
72
src/Security/FileVoter.php
Normal file
@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
namespace App\Security;
|
||||
|
||||
use App\Entity\User;
|
||||
use App\Repository\ProjectRepository;
|
||||
use Bnine\FilesBundle\Security\AbstractFileVoter;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
|
||||
class FileVoter extends AbstractFileVoter
|
||||
{
|
||||
private ProjectRepository $projectRepository;
|
||||
|
||||
public function __construct(ProjectRepository $projectRepository)
|
||||
{
|
||||
$this->projectRepository = $projectRepository;
|
||||
}
|
||||
|
||||
protected function canView(string $domain, $id, TokenInterface $token): bool
|
||||
{
|
||||
$user = $token->getUser();
|
||||
if (!$user instanceof User) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function canEdit(string $domain, $id, TokenInterface $token): bool
|
||||
{
|
||||
$user = $token->getUser();
|
||||
if (!$user instanceof User) {
|
||||
return false;
|
||||
}
|
||||
if ($user->hasRole('ROLE_ADMIN')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
switch ($domain) {
|
||||
case 'project':
|
||||
$project = $this->projectRepository->find($id);
|
||||
if ($project && $project->getUsers()->contains($user)) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function canDelete(string $domain, $id, TokenInterface $token): bool
|
||||
{
|
||||
$user = $token->getUser();
|
||||
if (!$user instanceof User) {
|
||||
return false;
|
||||
}
|
||||
if ($user->hasRole('ROLE_ADMIN')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
switch ($domain) {
|
||||
case 'project':
|
||||
$project = $this->projectRepository->find($id);
|
||||
if ($project && $project->getUsers()->contains($user)) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
115
src/Security/ProjectVoter.php
Normal file
115
src/Security/ProjectVoter.php
Normal file
@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
namespace App\Security;
|
||||
|
||||
use App\Entity\Project;
|
||||
use App\Entity\User;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
|
||||
|
||||
class ProjectVoter extends Voter
|
||||
{
|
||||
// Les actions que ce voter supporte
|
||||
public const VIEW = 'VIEW';
|
||||
public const SUBMIT = 'SUBMIT';
|
||||
public const UPDATE = 'UPDATE';
|
||||
public const DELETE = 'DELETE';
|
||||
public const MOVEDRAFT = 'MOVEDRAFT';
|
||||
public const MOVETOVOTE = 'MOVETOVOTE';
|
||||
public const MOVEVOTED = 'MOVEVOTED';
|
||||
public const MOVEARCHIVED = 'MOVEARCHIVED';
|
||||
|
||||
protected function supports(string $attribute, $subject): bool
|
||||
{
|
||||
$attributes = [self::VIEW, self::SUBMIT, self::UPDATE, self::DELETE, self::MOVEDRAFT, self::MOVETOVOTE, self::MOVEVOTED, self::MOVEARCHIVED];
|
||||
|
||||
return in_array($attribute, $attributes) && $subject instanceof Project;
|
||||
}
|
||||
|
||||
private function canView(Project $project, User $user): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
private function canSubmit(Project $project, User $user): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
private function canUpdate(Project $project, User $user): bool
|
||||
{
|
||||
$hasMaster = $user->hasRole('ROLE_ADMIN') || $user->hasRole('ROLE_MASTER');
|
||||
$hasUser = $project->getUsers()->contains($user);
|
||||
$hasStatus = Project::DRAFT === $project->getStatus();
|
||||
|
||||
return $hasMaster || ($hasUser && $hasStatus);
|
||||
}
|
||||
|
||||
private function canDelete(Project $project, User $user): bool
|
||||
{
|
||||
$hasMaster = $user->hasRole('ROLE_ADMIN') || $user->hasRole('ROLE_MASTER');
|
||||
$hasUser = $project->getUsers()->contains($user);
|
||||
$hasStatus = Project::DRAFT === $project->getStatus();
|
||||
|
||||
return $hasMaster || ($hasUser && $hasStatus);
|
||||
}
|
||||
|
||||
private function canMoveDraft(Project $project, User $user): bool
|
||||
{
|
||||
$hasUser = $user->hasRole('ROLE_ADMIN') || $user->hasRole('ROLE_MASTER') || $project->getUsers()->contains($user);
|
||||
$hasStatus = Project::TOVOTE === $project->getStatus();
|
||||
|
||||
return $hasUser && $hasStatus;
|
||||
}
|
||||
|
||||
private function canMoveToVote(Project $project, User $user): bool
|
||||
{
|
||||
$hasMaster = $user->hasRole('ROLE_ADMIN') || $user->hasRole('ROLE_MASTER');
|
||||
$hasUser = $project->getUsers()->contains($user);
|
||||
if (Project::VOTED === $project->getStatus()) {
|
||||
return $hasMaster;
|
||||
} elseif (Project::DRAFT === $project->getStatus()) {
|
||||
return $hasMaster || $hasUser;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private function canMoveVoted(Project $project, User $user): bool
|
||||
{
|
||||
$hasUser = $user->hasRole('ROLE_ADMIN') || $user->hasRole('ROLE_MASTER');
|
||||
$hasStatus = Project::TOVOTE === $project->getStatus() || Project::ARCHIVED === $project->getStatus();
|
||||
dump($hasStatus);
|
||||
|
||||
return $hasUser && $hasStatus;
|
||||
}
|
||||
|
||||
private function canMoveArchived(Project $project, User $user): bool
|
||||
{
|
||||
$hasUser = $user->hasRole('ROLE_ADMIN') || $user->hasRole('ROLE_MASTER');
|
||||
$hasStatus = Project::VOTED === $project->getStatus();
|
||||
|
||||
return $hasUser && $hasStatus;
|
||||
}
|
||||
|
||||
protected function voteOnAttribute(string $attribute, $project, TokenInterface $token): bool
|
||||
{
|
||||
$user = $token->getUser();
|
||||
if (!$user instanceof User) {
|
||||
return false;
|
||||
}
|
||||
dump($attribute);
|
||||
|
||||
return match ($attribute) {
|
||||
self::VIEW => $this->canView($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),
|
||||
self::MOVETOVOTE => $this->canMoveToVote($project, $user),
|
||||
self::MOVEVOTED => $this->canMoveVoted($project, $user),
|
||||
self::MOVEARCHIVED => $this->canMoveArchived($project, $user),
|
||||
default => false,
|
||||
};
|
||||
}
|
||||
}
|
@ -1,101 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Service;
|
||||
|
||||
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\Finder\Finder;
|
||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
use Symfony\Component\HttpKernel\KernelInterface;
|
||||
|
||||
class FileService
|
||||
{
|
||||
private string $basePath;
|
||||
private Filesystem $filesystem;
|
||||
|
||||
public function __construct(KernelInterface $kernel)
|
||||
{
|
||||
$this->filesystem = new Filesystem();
|
||||
$projectDir = $kernel->getProjectDir(); // chemin racine du projet
|
||||
$this->basePath = $projectDir.'/uploads';
|
||||
|
||||
if (!is_dir($this->basePath)) {
|
||||
// On crée le dossier uploads s'il n'existe pas
|
||||
try {
|
||||
$this->filesystem->mkdir($this->basePath, 0775);
|
||||
} catch (IOExceptionInterface $e) {
|
||||
throw new \RuntimeException('Impossible de créer le dossier /uploads : '.$e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise un répertoire pour une entité (ex: project/123)
|
||||
*/
|
||||
public function init(string $domain, string $id): void
|
||||
{
|
||||
$entityPath = $this->getEntityPath($domain, $id);
|
||||
if (!is_dir($entityPath)) {
|
||||
try {
|
||||
$this->filesystem->mkdir($entityPath, 0775);
|
||||
} catch (IOExceptionInterface $e) {
|
||||
throw new \RuntimeException(sprintf('Impossible de créer le répertoire pour %s/%s : %s', $domain, $id, $e->getMessage()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Liste les fichiers d’un répertoire lié à une entité (ex: project/123)
|
||||
*/
|
||||
public function list(string $domain, string $id, string $relativePath = ''): array
|
||||
{
|
||||
$targetPath = $this->getEntityPath($domain, $id).'/'.ltrim($relativePath, '/');
|
||||
$realPath = realpath($targetPath);
|
||||
|
||||
$baseEntityPath = $this->getEntityPath($domain, $id);
|
||||
if (!$realPath || !str_starts_with($realPath, $baseEntityPath)) {
|
||||
throw new NotFoundHttpException('Répertoire non autorisé ou inexistant.');
|
||||
}
|
||||
|
||||
$finder = new Finder();
|
||||
$finder->depth('== 0')->in($realPath);
|
||||
|
||||
$results = [];
|
||||
foreach ($finder as $file) {
|
||||
$results[] = [
|
||||
'name' => $file->getFilename(),
|
||||
'isDirectory' => $file->isDir(),
|
||||
'path' => ltrim(str_replace($baseEntityPath, '', $file->getRealPath()), '/'),
|
||||
];
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Supprime un fichier ou dossier (de façon sécurisée)
|
||||
*/
|
||||
public function delete(string $domain, string $id, string $relativePath): void
|
||||
{
|
||||
$baseEntityPath = $this->getEntityPath($domain, $id);
|
||||
$targetPath = realpath($baseEntityPath.'/'.ltrim($relativePath, '/'));
|
||||
|
||||
if (!$targetPath || !str_starts_with($targetPath, $baseEntityPath)) {
|
||||
throw new NotFoundHttpException('Fichier ou dossier non autorisé.');
|
||||
}
|
||||
|
||||
try {
|
||||
$this->filesystem->remove($targetPath);
|
||||
} catch (IOExceptionInterface $e) {
|
||||
throw new \RuntimeException('Erreur lors de la suppression : '.$e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Construit le chemin absolu d’un domaine/id
|
||||
*/
|
||||
private function getEntityPath(string $domain, string $id): string
|
||||
{
|
||||
return $this->basePath.'/'.$domain.'/'.$id;
|
||||
}
|
||||
}
|
114
symfony.lock
114
symfony.lock
@ -1,4 +1,10 @@
|
||||
{
|
||||
"bnine/filesbundle": {
|
||||
"version": "v1.0.6"
|
||||
},
|
||||
"bnine/mdeditorbundle": {
|
||||
"version": "v1.1.5"
|
||||
},
|
||||
"doctrine/deprecations": {
|
||||
"version": "1.1",
|
||||
"recipe": {
|
||||
@ -9,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",
|
||||
@ -23,7 +29,7 @@
|
||||
]
|
||||
},
|
||||
"doctrine/doctrine-migrations-bundle": {
|
||||
"version": "3.3",
|
||||
"version": "3.4",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
@ -36,7 +42,7 @@
|
||||
]
|
||||
},
|
||||
"friendsofphp/php-cs-fixer": {
|
||||
"version": "3.65",
|
||||
"version": "3.85",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
@ -73,7 +79,7 @@
|
||||
]
|
||||
},
|
||||
"phpstan/phpstan": {
|
||||
"version": "2.0",
|
||||
"version": "2.1",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes-contrib",
|
||||
"branch": "main",
|
||||
@ -90,7 +96,7 @@
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
"version": "9.6",
|
||||
"ref": "7364a21d87e658eb363c5020c072ecfdc12e2326"
|
||||
"ref": "6a9341aa97d441627f8bd424ae85dc04c944f8b4"
|
||||
},
|
||||
"files": [
|
||||
".env.test",
|
||||
@ -99,7 +105,7 @@
|
||||
]
|
||||
},
|
||||
"symfony/console": {
|
||||
"version": "7.1",
|
||||
"version": "7.3",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
@ -111,7 +117,7 @@
|
||||
]
|
||||
},
|
||||
"symfony/debug-bundle": {
|
||||
"version": "7.1",
|
||||
"version": "7.3",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
@ -123,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",
|
||||
@ -150,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",
|
||||
@ -175,7 +195,7 @@
|
||||
}
|
||||
},
|
||||
"symfony/messenger": {
|
||||
"version": "7.1",
|
||||
"version": "7.3",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
@ -199,7 +219,7 @@
|
||||
]
|
||||
},
|
||||
"symfony/notifier": {
|
||||
"version": "7.1",
|
||||
"version": "7.3",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
@ -211,7 +231,7 @@
|
||||
]
|
||||
},
|
||||
"symfony/phpunit-bridge": {
|
||||
"version": "7.1",
|
||||
"version": "7.3",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
@ -225,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",
|
||||
@ -239,7 +271,7 @@
|
||||
]
|
||||
},
|
||||
"symfony/security-bundle": {
|
||||
"version": "7.1",
|
||||
"version": "7.3",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
@ -252,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",
|
||||
@ -279,7 +312,7 @@
|
||||
]
|
||||
},
|
||||
"symfony/twig-bundle": {
|
||||
"version": "7.1",
|
||||
"version": "7.3",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
@ -292,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",
|
||||
@ -307,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",
|
||||
@ -320,6 +362,6 @@
|
||||
]
|
||||
},
|
||||
"twig/extra-bundle": {
|
||||
"version": "v3.13.0"
|
||||
"version": "v3.21.0"
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
<script src="{{ asset('lib/jquery/jquery.min.js') }}"></script>
|
||||
<script src="{{ asset('lib/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
|
||||
<script src="{{ asset('lib/fontawesome/fontawesome-free.index.js') }}"></script>
|
||||
<!-- <script src="{{ asset('lib/fontawesome/fontawesome-free.index.js') }}"></script> -->
|
||||
<script src="{{ asset('lib/datatables/datatables.min.js') }}"></script>
|
||||
<script src="{{ asset('lib/datatables/datatables.init.js') }}"></script>
|
||||
<script src="{{ asset('lib/select2/select2.min.js') }}"></script>
|
||||
@ -29,7 +29,8 @@
|
||||
<script src="{{ asset('lib/imgareaselect/js/jquery.imgareaselect.dev.js') }}"></script>
|
||||
<script src="{{ asset('lib/jqueryui/jquery-ui.min.js') }}"></script>
|
||||
<script src="{{ asset('lib/chart/chart.js') }}"></script>
|
||||
|
||||
|
||||
<script src="{{ asset('bundles/bninemdeditor/bninemdeditor.js') }}"></script>
|
||||
<script src="{{ asset('lib/app/app.js') }}"></script>
|
||||
|
||||
{% block javascripts %}
|
||||
|
@ -1,124 +0,0 @@
|
||||
<div id="file-browser-{{ domain }}-{{ id|e('html_attr') }}"
|
||||
class="file-browser"
|
||||
data-domain="{{ domain }}"
|
||||
data-id="{{ id }}"
|
||||
data-base-path="{{ path('app_files', { domain: domain, id: id, editable: editable }) }}"
|
||||
data-current-path="{{ path }}">
|
||||
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Fichiers</div>
|
||||
<div class="card-body">
|
||||
|
||||
{% if editable %}
|
||||
<div class="mb-3">
|
||||
<a class="btn btn-info" style="max-width:100%; margin-bottom:15px;" data-bs-toggle="modal" data-bs-target="#mymodal" onClick="ModalLoad('mymodal','Upload','{{ path('app_files_uploadmodal',{domain:domain, id:id,path:path}) }}');" title='Upload'>Upload</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<p><strong>Chemin :</strong> {{ path ?: '/' }}</p>
|
||||
|
||||
{% set parentPath = path|split('/')|slice(0, -1)|join('/') %}
|
||||
|
||||
<ul class="list-unstyled">
|
||||
{% if path %}
|
||||
<li><a href="#" class="file-nav" data-path="{{ parentPath }}">⬅️ ..</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% for file in files %}
|
||||
<li>
|
||||
{% if file.isDirectory %}
|
||||
📁 <a href="#" class="file-nav" data-path="{{ path ? path ~ '/' ~ file.name : file.name }}">{{ file.name }}/</a>
|
||||
{% if editable %}
|
||||
<button class="btn btn-sm btn-danger btn-delete ms-2" data-path="{{ file.path }}">🗑️</button>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
📄 {{ file.name }}
|
||||
{% if editable %}
|
||||
<button class="btn btn-sm btn-danger btn-delete ms-2" data-path="{{ file.path }}">🗑️</button>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</li>
|
||||
{% else %}
|
||||
<li><em>Dossier vide</em></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
function refreshContainer(containerId, path) {
|
||||
const $oldContainer = $('#' + containerId);
|
||||
const base = $oldContainer.data('base-path');
|
||||
|
||||
$.get(base, { path: path }, function (html) {
|
||||
console.log(html);
|
||||
const $doc = $('<div>').html(html);
|
||||
const $newContainer = $doc.find('#' + containerId);
|
||||
console.log(containerId);
|
||||
if ($newContainer.length) {
|
||||
console.log("HHHHHHHHHHHHHHHHHHHH");
|
||||
$oldContainer.replaceWith($newContainer);
|
||||
initFileBrowser($newContainer); // rebind events
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function initFileBrowser($container) {
|
||||
const containerId = $container.attr('id');
|
||||
|
||||
// Clear any previous bindings (important!)
|
||||
$container.off('click');
|
||||
|
||||
// Navigation dossier
|
||||
$container.on('click', '.file-nav', function (e) {
|
||||
e.preventDefault();
|
||||
const path = $(this).data('path');
|
||||
refreshContainer(containerId, path);
|
||||
});
|
||||
|
||||
// Suppression fichier ou dossier
|
||||
$container.on('click', '.btn-delete', function (e) {
|
||||
e.preventDefault();
|
||||
if (!confirm('Supprimer ce fichier ?')) return;
|
||||
|
||||
const pathToDelete = $(this).data('path');
|
||||
const currentPath = $container.data('current-path');
|
||||
|
||||
$.ajax({
|
||||
url: '/user/file/' + $container.data('domain') + '/' + $container.data('id') + '/delete',
|
||||
method: 'POST',
|
||||
contentType: 'application/json',
|
||||
data: JSON.stringify({ path: pathToDelete }),
|
||||
success: function (res) {
|
||||
if (res.success) {
|
||||
refreshContainer(containerId, currentPath);
|
||||
} else {
|
||||
alert('Erreur : ' + res.error);
|
||||
}
|
||||
},
|
||||
error: function (xhr) {
|
||||
alert('Erreur lors de la suppression : ' + xhr.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Init navigateur fichiers
|
||||
const containerId = 'file-browser-{{ domain }}-{{ id|e('html_attr') }}';
|
||||
const $browser = $('#' + containerId);
|
||||
initFileBrowser($browser);
|
||||
|
||||
// Rafraîchir après fermeture modale
|
||||
$('#mymodal').on('hidden.bs.modal', function () {
|
||||
const $browser = $('#' + containerId);
|
||||
const currentPath = $browser.data('current-path') || '';
|
||||
refreshContainer(containerId, currentPath);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
@ -1,45 +0,0 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block localstyle %}
|
||||
<style>
|
||||
body {
|
||||
background-color: transparent;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<a class="btn btn-secondary" onClick="closeModal();">Annuler</a>
|
||||
<form action="{{ path('app_files_uploadfile', {
|
||||
domain: domain,
|
||||
id: id,
|
||||
path: path
|
||||
}) }}"
|
||||
class="dropzone" id="myDropzone" style="margin-top:10px"></form>
|
||||
{% endblock %}
|
||||
|
||||
{% block localscript %}
|
||||
<script>
|
||||
Dropzone.options.myDropzone = {
|
||||
paramName: "{{endpoint}}",
|
||||
maxFilesize: 20, // MB
|
||||
parallelUploads: 5,
|
||||
uploadMultiple: false,
|
||||
dictDefaultMessage: "Déposez vos fichiers ici pour les téléverser",
|
||||
successmultiple: function (files, response) {
|
||||
console.log("multi uploaded", files);
|
||||
},
|
||||
queuecomplete: function () {
|
||||
// Quand tous les fichiers sont uploadés, on ferme la modale et rafraîchit le navigateur
|
||||
window.parent.$("#mymodal").modal('hide');
|
||||
if (typeof window.parent.refreshFileBrowser === 'function') {
|
||||
window.parent.refreshFileBrowser(); // à définir côté parent
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function closeModal() {
|
||||
window.parent.$("#mymodal").modal('hide');
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
@ -1,13 +1,36 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
|
||||
|
||||
{%block body%}
|
||||
<h2>Projets</h2>
|
||||
<a href="{{ path('app_user_project_submit') }}" class="btn btn-success mb-3">Ajouter</a>
|
||||
|
||||
<div class='d-flex' style='justify-content: center'>
|
||||
<div class='d-flex flex-wrap' style='justify-content: left'>
|
||||
{% for project in projects %}
|
||||
<div class='card'>
|
||||
<h5>{{project.title}}</h5>
|
||||
{{ render(path("app_files",{domain:'project',id:project.id, editable:0})) }}
|
||||
</div>
|
||||
{% 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'>
|
||||
<h5>{{project.title}}</h5>
|
||||
|
||||
<div>
|
||||
<a href="{{ path("app_user_project_view",{id:project.id}) }}" class="btn btn-secondary btn-sm"><i class="fas fa-eye"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class='card-body'>
|
||||
{{project.summary|nl2br}}
|
||||
</div>
|
||||
<div class='card-footer'>
|
||||
<small><em>
|
||||
<b>Statut</b> = {{ project.status }}<br>
|
||||
<b>Propriétaires</b> =
|
||||
{%for user in project.users%}
|
||||
{{loop.first ? user.username : ' - '~user.username}}
|
||||
{%endfor%}
|
||||
</em></small>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
|
58
templates/option/edit.html.twig
Normal file
58
templates/option/edit.html.twig
Normal file
@ -0,0 +1,58 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %} = {{title}}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1>{{title}}</h1>
|
||||
|
||||
|
||||
{{ form_start(form) }}
|
||||
{{ form_widget(form.submit) }}
|
||||
<a href="{{ path(routecancel,{id:idproject}) }}" class="btn btn-secondary me-5">Annuler</a>
|
||||
{% if mode=="update" %}
|
||||
<a href="{{ path(routedelete,{idproject:option.project.id,id:option.id}) }}" class="btn btn-danger float-end" onclick="return confirm('Confirmez-vous la suppression de cet enregistrement ?')">Supprimer</a>
|
||||
{% endif %}
|
||||
|
||||
{% include('include/error.html.twig') %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 mx-auto">
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Information</div>
|
||||
<div class="card-body">
|
||||
{{ form_row(form.title) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2"></div>
|
||||
<div class="col-md-4">
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Information</div>
|
||||
<div class="card-body">
|
||||
{{ form_row(form.whyYes) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Information</div>
|
||||
<div class="card-body">
|
||||
{{ form_row(form.whyNot) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ form_end(form) }}
|
||||
{% endblock %}
|
||||
|
||||
{% block localscript %}
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$("#project_title").focus();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
@ -8,37 +8,77 @@
|
||||
|
||||
{{ 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%}
|
||||
<a href="{{ path(routecancel) }}" class="btn btn-secondary me-5">Annuler</a>
|
||||
{% if mode=="update" and is_granted('DELETE', project) %}
|
||||
<a href="{{ path(routedelete,{id:project.id}) }}" class="btn btn-danger float-end" onclick="return confirm('Confirmez-vous la suppression de cet enregistrement ?')">Supprimer</a>
|
||||
{% endif %}
|
||||
|
||||
{% include('include/error.html.twig') %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mx-auto">
|
||||
<div class="col-md-4 mx-auto">
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Information</div>
|
||||
<div class="card-body">
|
||||
{{ form_row(form.title) }}
|
||||
{{ form_row(form.status) }}
|
||||
{{ form_row(form.nature) }}
|
||||
{{ form_row(form.users) }}
|
||||
{{ form_row(form.summary) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% 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>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 mx-auto">
|
||||
{% if mode=="update" %}
|
||||
<div class="col-md-8 mx-auto">
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Permissions</div>
|
||||
<div class="card-header">Options de Vote</div>
|
||||
<div class="card-body">
|
||||
{{ form_row(form.users) }}
|
||||
<a href="{{ path(routesubmitoption,{idproject:project.id}) }}" class="btn btn-success btn-sm mb-3">Ajouter</a>
|
||||
|
||||
<div class="dataTable_wrapper">
|
||||
<table class="table table-striped table-bordered table-hover" id="dataTables" style="width:100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="100px" class="no-sort">Action</th>
|
||||
<th>Title</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for option in project.options %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ path(routeupdateoption,{idproject:project.id,id:option.id}) }}" class="me-2"><i class="fas fa-file fa-2x"></i></a>
|
||||
</td>
|
||||
<td>{{option.title}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Description du Projet</div>
|
||||
<div class="card-body">
|
||||
{{ form_widget(form.description) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if mode=="update" %}
|
||||
{{ render(path("app_files",{domain:'project',id:project.id, editable:1})) }}
|
||||
{% endif %}
|
||||
{{ form_end(form) }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block localscript %}
|
||||
|
@ -22,7 +22,7 @@
|
||||
<a href="{{ path(routeupdate,{id:project.id}) }}" class="me-2"><i class="fas fa-file fa-2x"></i></a>
|
||||
</td>
|
||||
<td>{{project.title}}</td>
|
||||
<td>{{project.updateAt}}</td>
|
||||
<td>{{project.timelines.first ? project.timelines.first.createdAt|date('d/m/Y H:i') : '' }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
12
templates/project/status.html.twig
Normal file
12
templates/project/status.html.twig
Normal file
@ -0,0 +1,12 @@
|
||||
{% if is_granted('MOVEDRAFT', project) %}
|
||||
<a href="{{ path(routemove,{id:project.id, status:"DRAFT"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le passage au vote ?')">Mettre en Brouillon</a>
|
||||
{% endif %}
|
||||
{% if is_granted('MOVETOVOTE', project) %}
|
||||
<a href="{{ path(routemove,{id:project.id, status:"TOVOTE"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le passage au vote ?')">Mettre au Vote</a>
|
||||
{% endif %}
|
||||
{% if is_granted('MOVEVOTED', project) %}
|
||||
<a href="{{ path(routemove,{id:project.id, status:"VOTED"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le vote ?')">Voter</a>
|
||||
{% endif %}
|
||||
{% if is_granted('DELETE', project) %}
|
||||
<a href="{{ path(routedelete,{id:project.id}) }}" class="btn btn-danger float-end" onclick="return confirm('Confirmez-vous la suppression de cet enregistrement ?')">Supprimer</a>
|
||||
{% endif %}
|
57
templates/project/timeline.html.twig
Normal file
57
templates/project/timeline.html.twig
Normal file
@ -0,0 +1,57 @@
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css" rel="stylesheet">
|
||||
|
||||
<div class="timeline">
|
||||
{% for event in project.timelines %}
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-marker"></div>
|
||||
<div class="timeline-content">
|
||||
<p class="text-muted small mb-1">
|
||||
{{ event.createdAt|date('d/m/Y H:i') }} par <strong>{{ event.user.username }}</strong><br>
|
||||
{% for field, change in event.description %}
|
||||
<strong>{{ field }}</strong>
|
||||
{% if field=="status" %}
|
||||
<span class="text-danger">{{ change.old ?? '' }}</span>
|
||||
→
|
||||
<span class="text-success">{{ change.new ?? '' }}</span>
|
||||
{% endif %}
|
||||
|
||||
{% if not change.old is defined and change[0] is defined %}
|
||||
<span>{{ change[0] }}</span>
|
||||
{% endif %}
|
||||
<br>
|
||||
{% endfor %}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.timeline {
|
||||
border-left: 3px solid #dee2e6;
|
||||
padding-left: 2rem;
|
||||
position: relative;
|
||||
font-size: 14px;
|
||||
}
|
||||
.timeline-item {
|
||||
position: relative;
|
||||
margin-bottom: 10px;
|
||||
margin-left: -23px;
|
||||
}
|
||||
.timeline-content {
|
||||
line-height:14px;
|
||||
}
|
||||
.timeline-marker {
|
||||
position: absolute;
|
||||
left: -1.1rem;
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
border-radius: 50%;
|
||||
background: #0d6efd;
|
||||
border: 2px solid #fff;
|
||||
box-shadow: 0 0 0 3px #0d6efd44;
|
||||
}
|
||||
.timeline-content {
|
||||
padding-left: 1rem;
|
||||
}
|
||||
</style>
|
67
templates/project/view.html.twig
Normal file
67
templates/project/view.html.twig
Normal file
@ -0,0 +1,67 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %} = {{title}}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1 style="display:flex;">
|
||||
<div style="flex-grow:1">{{title}}</div>
|
||||
<div class="">{{project.status}}</div>
|
||||
</h1>
|
||||
|
||||
{% if is_granted('UPDATE', project) %}
|
||||
<a href="{{ path(routeupdate,{id:project.id}) }}" class="btn btn-success me-1">Modifier</a>
|
||||
{% endif %}
|
||||
|
||||
<a href="{{ path(routecancel) }}" class="btn btn-secondary me-5">Retour</a>
|
||||
|
||||
{% if is_granted('MOVEDRAFT', project) %}
|
||||
<a href="{{ path(routemove,{id:project.id, status:"DRAFT"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le passage au vote ?')">Mettre en Brouillon</a>
|
||||
{% endif %}
|
||||
{% if is_granted('MOVETOVOTE', project) %}
|
||||
<a href="{{ path(routemove,{id:project.id, status:"TOVOTE"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le passage au vote ?')">Mettre au Vote</a>
|
||||
{% endif %}
|
||||
{% if is_granted('MOVEVOTED', project) %}
|
||||
<a href="{{ path(routemove,{id:project.id, status:"VOTED"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le vote ?')">Voter</a>
|
||||
{% endif %}
|
||||
{% if is_granted('DELETE', project) %}
|
||||
<a href="{{ path(routedelete,{id:project.id}) }}" class="btn btn-danger float-end" onclick="return confirm('Confirmez-vous la suppression de cet enregistrement ?')">Supprimer</a>
|
||||
{% endif %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 mx-auto">
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Information</div>
|
||||
<div class="card-body">
|
||||
<b>Titre</b> = {{ project.title }}<br>
|
||||
<b>Nature</b> = {{ project.nature }}<br><br>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Résumé</div>
|
||||
<div class="card-body">
|
||||
{{ project.summary|nl2br }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ render(path("bninefiles_files",{domain:'project',id:project.id, editable:0})) }}
|
||||
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Timeline</div>
|
||||
<div class="card-body">
|
||||
{% include('project/timeline.html.twig') %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-8 mx-auto">
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Description du Projet</div>
|
||||
<div class="card-body">
|
||||
{{ project.description ? project.description|markdown_to_html : "" }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
Reference in New Issue
Block a user