diff --git a/.env.test b/.env.test index 9e7162f..9296f23 100644 --- a/.env.test +++ b/.env.test @@ -4,3 +4,6 @@ APP_SECRET='$ecretf0rt3st' SYMFONY_DEPRECATIONS_HELPER=999999 PANTHER_APP_ENV=panther PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots + +APP_ENV=test +DATABASE_URL="mysql://root:root@db:3306/db_test?serverVersion=10.11.0-MariaDB" diff --git a/.github/files/.env.local b/.github/files/.env.local new file mode 100644 index 0000000..e9d8196 --- /dev/null +++ b/.github/files/.env.local @@ -0,0 +1,2 @@ +ENV=test +DEBUG=true diff --git a/.github/files/console b/.github/files/console new file mode 100755 index 0000000..d8d530e --- /dev/null +++ b/.github/files/console @@ -0,0 +1,21 @@ +#!/usr/bin/env php +- + --health-cmd="mysqladmin ping" + --health-interval=10s + --health-timeout=5s + --health-retries=3 + steps: - - name: Setup PHP with PECL extension - uses: shivammathur/setup-php@v2 - with: - php-version: '8.3' - extensions: json, openssl, pdo, redis - - uses: actions/checkout@v4 - - - name: Validate composer.json and composer.lock - run: composer validate --strict - - - name: Cache Composer packages - id: composer-cache - uses: actions/cache@v4 - with: - path: vendor - key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} - restore-keys: | - ${{ runner.os }}-php- - - - name: Install dependencies - run: composer install --prefer-dist --no-progress --no-suggest - - - name: Phpstan - run: | - composer install --working-dir=tools/phpstan - tools/phpstan/vendor/bin/phpstan - - - name: PHP Coding Standards Fixer - run: | - composer install --working-dir=tools/php-cs-fixer - tools/php-cs-fixer/vendor/bin/php-cs-fixer fix -v --dry-run --stop-on-violation - - - name: PHPUnit - run: | - bin/phpunit + - name: Setup PHP with PECL extension + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + extensions: json, openssl, pdo, redis + - uses: actions/checkout@v4 + + - name: Validate composer.json and composer.lock + run: composer validate --strict + + - name: Cache Composer packages + id: composer-cache + uses: actions/cache@v4 + with: + path: vendor + key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-php- + + - name: Install dependencies + run: composer install --prefer-dist --no-progress --no-suggest + + - name: Phpstan + run: | + composer install --working-dir=tools/phpstan + tools/phpstan/vendor/bin/phpstan + + - name: PHP Coding Standards Fixer + run: | + composer install --working-dir=tools/php-cs-fixer + tools/php-cs-fixer/vendor/bin/php-cs-fixer fix -v --dry-run --stop-on-violation + + - name: "Setup environment" + run: | + .github/scripts/setup-environment.sh + + - name: PHPUnit + run: | + console doctrine:database:create --env=test + console doctrine:schema:update --env=test --force + bin/phpunit diff --git a/.gitignore b/.gitignore index ac74742..7ce8dd3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea +.vscode .DS_Store *.cache diff --git a/composer.json b/composer.json index 08929a7..992ee19 100644 --- a/composer.json +++ b/composer.json @@ -1,119 +1,124 @@ { - "name": "symfony/skeleton", - "type": "project", - "license": "MIT", - "description": "A minimal Symfony project recommended to create bare bones applications", - "minimum-stability": "stable", - "prefer-stable": true, - "require": { - "php": ">=8.3", - "ext-ctype": "*", - "ext-iconv": "*", - "beberlei/assert": "^3.3", - "doctrine/dbal": "^3", - "doctrine/doctrine-bundle": "^2.12", - "doctrine/doctrine-migrations-bundle": "^3.3", - "doctrine/orm": "^3.2", - "gedmo/doctrine-extensions": "^3.16", - "phpdocumentor/reflection-docblock": "^5.4", - "phpstan/phpdoc-parser": "^1.29", - "stof/doctrine-extensions-bundle": "^1.12", - "symfony/asset": "7.1.*", - "symfony/asset-mapper": "7.1.*", - "symfony/console": "7.1.*", - "symfony/doctrine-messenger": "7.1.*", - "symfony/dotenv": "7.1.*", - "symfony/expression-language": "7.1.*", - "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/monolog-bundle": "^3.0", - "symfony/notifier": "7.1.*", - "symfony/password-hasher": "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/stimulus-bundle": "^2.18", - "symfony/string": "7.1.*", - "symfony/translation": "7.1.*", - "symfony/twig-bundle": "7.1.*", - "symfony/uid": "7.1.*", - "symfony/ux-turbo": "^2.18", - "symfony/validator": "7.1.*", - "symfony/web-link": "7.1.*", - "symfony/yaml": "7.1.*", - "symfonycasts/reset-password-bundle": "^1.22", - "symfonycasts/tailwind-bundle": "^0.6.0", - "twig/extra-bundle": "^2.12|^3.0", - "twig/twig": "^2.12|^3.0" + "name": "symfony/skeleton", + "type": "project", + "license": "MIT", + "description": "A minimal Symfony project recommended to create bare bones applications", + "minimum-stability": "stable", + "prefer-stable": true, + "require": { + "php": ">=8.3", + "ext-ctype": "*", + "ext-iconv": "*", + "beberlei/assert": "^3.3", + "commerceguys/addressing": "^2.2", + "doctrine/dbal": "^4.2", + "doctrine/doctrine-bundle": "^2.13", + "doctrine/doctrine-migrations-bundle": "^3.3", + "doctrine/orm": "^3.2", + "gedmo/doctrine-extensions": "^3.17", + "jetbrains/phpstorm-attributes": "^1.1", + "openspout/openspout": "^4.24", + "phpdocumentor/reflection-docblock": "^5.4", + "phpstan/phpdoc-parser": "^1.29", + "stof/doctrine-extensions-bundle": "^1.12", + "symfony/asset": "7.1.*", + "symfony/asset-mapper": "7.1.*", + "symfony/console": "7.1.*", + "symfony/doctrine-messenger": "7.1.*", + "symfony/dotenv": "7.1.*", + "symfony/expression-language": "7.1.*", + "symfony/filesystem": "7.1.*", + "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/messenger": "7.1.*", + "symfony/mime": "7.1.*", + "symfony/monolog-bundle": "^3.0", + "symfony/notifier": "7.1.*", + "symfony/password-hasher": "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/stimulus-bundle": "^2.18", + "symfony/string": "7.1.*", + "symfony/translation": "7.1.*", + "symfony/twig-bundle": "7.1.*", + "symfony/uid": "7.1.*", + "symfony/ux-turbo": "^2.18", + "symfony/validator": "7.1.*", + "symfony/web-link": "7.1.*", + "symfony/yaml": "7.1.*", + "symfonycasts/reset-password-bundle": "^1.22", + "symfonycasts/tailwind-bundle": "^0.6.0", + "twig/extra-bundle": "^2.12|^3.0", + "twig/twig": "^2.12|^3.0" + }, + "config": { + "allow-plugins": { + "php-http/discovery": true, + "symfony/flex": true, + "symfony/runtime": true }, - "config": { - "allow-plugins": { - "php-http/discovery": true, - "symfony/flex": true, - "symfony/runtime": true - }, - "sort-packages": true - }, - "autoload": { - "psr-4": { - "App\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "App\\Tests\\": "tests/" - } - }, - "replace": { - "symfony/polyfill-ctype": "*", - "symfony/polyfill-iconv": "*", - "symfony/polyfill-php72": "*", - "symfony/polyfill-php73": "*", - "symfony/polyfill-php74": "*", - "symfony/polyfill-php80": "*", - "symfony/polyfill-php81": "*", - "symfony/polyfill-php82": "*" - }, - "scripts": { - "auto-scripts": { - "cache:clear": "symfony-cmd", - "assets:install %PUBLIC_DIR%": "symfony-cmd", - "importmap:install": "symfony-cmd" - }, - "post-install-cmd": [ - "@auto-scripts" - ], - "post-update-cmd": [ - "@auto-scripts" - ] - }, - "conflict": { - "symfony/symfony": "*" - }, - "extra": { - "symfony": { - "allow-contrib": false, - "require": "7.1.*", - "docker": false - } + "sort-packages": true + }, + "autoload": { + "psr-4": { + "App\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "replace": { + "symfony/polyfill-ctype": "*", + "symfony/polyfill-iconv": "*", + "symfony/polyfill-php72": "*", + "symfony/polyfill-php73": "*", + "symfony/polyfill-php74": "*", + "symfony/polyfill-php80": "*", + "symfony/polyfill-php81": "*", + "symfony/polyfill-php82": "*" + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd", + "importmap:install": "symfony-cmd" }, - "require-dev": { - "doctrine/doctrine-fixtures-bundle": "^3.6", - "phpunit/phpunit": "^9.5", - "symfony/browser-kit": "7.1.*", - "symfony/css-selector": "7.1.*", - "symfony/debug-bundle": "7.1.*", - "symfony/maker-bundle": "^1.0", - "symfony/phpunit-bridge": "^7.1", - "symfony/stopwatch": "7.1.*", - "symfony/web-profiler-bundle": "7.1.*" + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ] + }, + "conflict": { + "symfony/symfony": "*" + }, + "extra": { + "symfony": { + "allow-contrib": false, + "require": "7.1.*", + "docker": false } + }, + "require-dev": { + "doctrine/doctrine-fixtures-bundle": "^3.6", + "phpunit/phpunit": "^9.5", + "symfony/browser-kit": "7.1.*", + "symfony/css-selector": "7.1.*", + "symfony/debug-bundle": "7.1.*", + "symfony/maker-bundle": "^1.0", + "symfony/phpunit-bridge": "^7.1", + "symfony/stopwatch": "7.1.*", + "symfony/web-profiler-bundle": "7.1.*" + } } diff --git a/composer.lock b/composer.lock index cb671cd..14b0080 100644 --- a/composer.lock +++ b/composer.lock @@ -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": "3a010bee6ecbe167555ba23844aed64c", + "content-hash": "def26725b1ec8ff1a54b98570264afb4", "packages": [ { "name": "beberlei/assert", @@ -122,26 +122,90 @@ }, "time": "2022-03-30T09:27:43+00:00" }, + { + "name": "commerceguys/addressing", + "version": "v2.2.2", + "source": { + "type": "git", + "url": "https://github.com/commerceguys/addressing.git", + "reference": "4d23e46ea32534268ea121453c93ceda2bc3ee69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/commerceguys/addressing/zipball/4d23e46ea32534268ea121453c93ceda2bc3ee69", + "reference": "4d23e46ea32534268ea121453c93ceda2bc3ee69", + "shasum": "" + }, + "require": { + "doctrine/collections": "^1.6 || ^2.0", + "php": ">=8.0" + }, + "require-dev": { + "ext-json": "*", + "mikey179/vfsstream": "^1.6.11", + "phpunit/phpunit": "^9.6", + "squizlabs/php_codesniffer": "^3.7", + "symfony/validator": "^5.4 || ^6.3 || ^7.0" + }, + "suggest": { + "symfony/validator": "to validate addresses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "CommerceGuys\\Addressing\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bojan Zivanovic" + }, + { + "name": "Damien Tournoud" + } + ], + "description": "Addressing library powered by CLDR and Google's address data.", + "keywords": [ + "address", + "internationalization", + "localization", + "postal" + ], + "support": { + "issues": "https://github.com/commerceguys/addressing/issues", + "source": "https://github.com/commerceguys/addressing/tree/v2.2.2" + }, + "time": "2024-07-12T11:53:22+00:00" + }, { "name": "composer/semver", - "version": "3.4.2", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -185,7 +249,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.2" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -201,7 +265,7 @@ "type": "tidelift" } ], - "time": "2024-07-12T11:35:52+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "doctrine/cache", @@ -384,16 +448,16 @@ }, { "name": "doctrine/common", - "version": "3.4.4", + "version": "3.4.5", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a" + "reference": "6c8fef961f67b8bc802ce3e32e3ebd1022907286" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a", - "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a", + "url": "https://api.github.com/repos/doctrine/common/zipball/6c8fef961f67b8bc802ce3e32e3ebd1022907286", + "reference": "6c8fef961f67b8bc802ce3e32e3ebd1022907286", "shasum": "" }, "require": { @@ -455,7 +519,7 @@ ], "support": { "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.4.4" + "source": "https://github.com/doctrine/common/tree/3.4.5" }, "funding": [ { @@ -471,51 +535,46 @@ "type": "tidelift" } ], - "time": "2024-04-16T13:35:33+00:00" + "time": "2024-10-08T15:53:43+00:00" }, { "name": "doctrine/dbal", - "version": "3.8.6", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "b7411825cf7efb7e51f9791dea19d86e43b399a1" + "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/b7411825cf7efb7e51f9791dea19d86e43b399a1", - "reference": "b7411825cf7efb7e51f9791dea19d86e43b399a1", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/dadd35300837a3a2184bd47d403333b15d0a9bd0", + "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0", "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", + "php": "^8.1", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.11.5", + "jetbrains/phpstorm-stubs": "2023.2", + "phpstan/phpstan": "1.12.6", + "phpstan/phpstan-phpunit": "1.4.0", "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "9.6.19", - "psalm/plugin-phpunit": "0.18.4", + "phpunit/phpunit": "10.5.30", + "psalm/plugin-phpunit": "0.19.0", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.1", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0", - "vimeo/psalm": "4.30.0" + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^6.3.8|^7.0", + "symfony/console": "^5.4|^6.3|^7.0", + "vimeo/psalm": "5.25.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "bin": [ - "bin/doctrine-dbal" - ], "type": "library", "autoload": { "psr-4": { @@ -568,7 +627,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.8.6" + "source": "https://github.com/doctrine/dbal/tree/4.2.1" }, "funding": [ { @@ -584,7 +643,7 @@ "type": "tidelift" } ], - "time": "2024-06-19T10:38:17+00:00" + "time": "2024-10-10T18:01:27+00:00" }, { "name": "doctrine/deprecations", @@ -635,16 +694,16 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.12.0", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "5418e811a14724068e95e0ba43353b903ada530f" + "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/5418e811a14724068e95e0ba43353b903ada530f", - "reference": "5418e811a14724068e95e0ba43353b903ada530f", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/ca59d84b8e63143ce1aed90cdb333ba329d71563", + "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563", "shasum": "" }, "require": { @@ -735,7 +794,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.12.0" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.0" }, "funding": [ { @@ -751,7 +810,7 @@ "type": "tidelift" } ], - "time": "2024-03-19T07:20:37+00:00" + "time": "2024-09-01T09:46:40+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", @@ -1176,16 +1235,16 @@ }, { "name": "doctrine/migrations", - "version": "3.8.0", + "version": "3.8.2", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "535a70dcbd88b8c6ba945be050977457f4f4c06c" + "reference": "5007eb1168691225ac305fe16856755c20860842" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/535a70dcbd88b8c6ba945be050977457f4f4c06c", - "reference": "535a70dcbd88b8c6ba945be050977457f4f4c06c", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/5007eb1168691225ac305fe16856755c20860842", + "reference": "5007eb1168691225ac305fe16856755c20860842", "shasum": "" }, "require": { @@ -1208,6 +1267,7 @@ "doctrine/persistence": "^2 || ^3", "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", @@ -1258,7 +1318,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.8.0" + "source": "https://github.com/doctrine/migrations/tree/3.8.2" }, "funding": [ { @@ -1274,20 +1334,20 @@ "type": "tidelift" } ], - "time": "2024-06-26T14:12:46+00:00" + "time": "2024-10-10T21:35:27+00:00" }, { "name": "doctrine/orm", - "version": "3.2.1", + "version": "3.2.3", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "722cea6536775206e81744542b36fa7c9a4ea3e5" + "reference": "522863116a245c7bfcf6f5f2458755601b1d1909" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/722cea6536775206e81744542b36fa7c9a4ea3e5", - "reference": "722cea6536775206e81744542b36fa7c9a4ea3e5", + "url": "https://api.github.com/repos/doctrine/orm/zipball/522863116a245c7bfcf6f5f2458755601b1d1909", + "reference": "522863116a245c7bfcf6f5f2458755601b1d1909", "shasum": "" }, "require": { @@ -1309,7 +1369,8 @@ "require-dev": { "doctrine/coding-standard": "^12.0", "phpbench/phpbench": "^1.0", - "phpstan/phpstan": "1.11.1", + "phpdocumentor/guides-cli": "^1.4", + "phpstan/phpstan": "1.12.6", "phpunit/phpunit": "^10.4.0", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.2", @@ -1360,9 +1421,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/3.2.1" + "source": "https://github.com/doctrine/orm/tree/3.2.3" }, - "time": "2024-06-26T21:48:58+00:00" + "time": "2024-10-11T18:23:33+00:00" }, { "name": "doctrine/persistence", @@ -1463,16 +1524,16 @@ }, { "name": "doctrine/sql-formatter", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc" + "reference": "16ca9e39877369d664f06dacde468548298bdc40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d1ac84aef745c69ea034929eb6d65a6908b675cc", - "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/16ca9e39877369d664f06dacde468548298bdc40", + "reference": "16ca9e39877369d664f06dacde468548298bdc40", "shasum": "" }, "require": { @@ -1480,6 +1541,7 @@ }, "require-dev": { "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^10.5", "vimeo/psalm": "^5.24" @@ -1512,9 +1574,9 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.4.0" + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.0" }, - "time": "2024-05-08T08:12:09+00:00" + "time": "2024-09-11T07:29:40+00:00" }, { "name": "egulias/email-validator", @@ -1585,16 +1647,16 @@ }, { "name": "gedmo/doctrine-extensions", - "version": "v3.16.1", + "version": "v3.17.1", "source": { "type": "git", "url": "https://github.com/doctrine-extensions/DoctrineExtensions.git", - "reference": "e85560ed96f977b8c29428a99222cb2ef2f0e80d" + "reference": "eabb45018c5a4362b46c5beae3881261da89f900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/e85560ed96f977b8c29428a99222cb2ef2f0e80d", - "reference": "e85560ed96f977b8c29428a99222cb2ef2f0e80d", + "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/eabb45018c5a4362b46c5beae3881261da89f900", + "reference": "eabb45018c5a4362b46c5beae3881261da89f900", "shasum": "" }, "require": { @@ -1611,14 +1673,14 @@ }, "conflict": { "doctrine/annotations": "<1.13 || >=3.0", - "doctrine/dbal": "<3.2 || >=4.0", + "doctrine/dbal": "<3.7 || >=5.0", "doctrine/mongodb-odm": "<2.3 || >=3.0", "doctrine/orm": "<2.14.0 || 2.16.0 || 2.16.1 || >=4.0" }, "require-dev": { "doctrine/annotations": "^1.13 || ^2.0", "doctrine/cache": "^1.11 || ^2.0", - "doctrine/dbal": "^3.2", + "doctrine/dbal": "^3.7 || ^4.0", "doctrine/doctrine-bundle": "^2.3", "doctrine/mongodb-odm": "^2.3", "doctrine/orm": "^2.14.0 || ^3.0", @@ -1690,7 +1752,7 @@ "support": { "email": "gediminas.morkevicius@gmail.com", "issues": "https://github.com/doctrine-extensions/DoctrineExtensions/issues", - "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.16.1", + "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.17.1", "wiki": "https://github.com/Atlantic18/DoctrineExtensions/tree/main/doc" }, "funding": [ @@ -1711,7 +1773,49 @@ "type": "github" } ], - "time": "2024-06-25T16:22:14+00:00" + "time": "2024-10-07T22:30:27+00:00" + }, + { + "name": "jetbrains/phpstorm-attributes", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/JetBrains/phpstorm-attributes.git", + "reference": "22fb28d679deceedba8366dbae65cc8ebfc17e26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JetBrains/phpstorm-attributes/zipball/22fb28d679deceedba8366dbae65cc8ebfc17e26", + "reference": "22fb28d679deceedba8366dbae65cc8ebfc17e26", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "JetBrains\\PhpStorm\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "JetBrains", + "homepage": "https://www.jetbrains.com" + } + ], + "description": "PhpStorm specific attributes", + "keywords": [ + "attributes", + "jetbrains", + "phpstorm" + ], + "support": { + "issues": "https://youtrack.jetbrains.com/newIssue?project=WI", + "source": "https://github.com/JetBrains/phpstorm-attributes/tree/1.1" + }, + "time": "2023-09-01T08:50:25+00:00" }, { "name": "monolog/monolog", @@ -1814,6 +1918,99 @@ ], "time": "2024-06-28T09:40:51+00:00" }, + { + "name": "openspout/openspout", + "version": "v4.26.0", + "source": { + "type": "git", + "url": "https://github.com/openspout/openspout.git", + "reference": "a49b947c0c109f4fd112f9b5c6d6cb3e6baf8b50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/openspout/openspout/zipball/a49b947c0c109f4fd112f9b5c6d6cb3e6baf8b50", + "reference": "a49b947c0c109f4fd112f9b5c6d6cb3e6baf8b50", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-filter": "*", + "ext-libxml": "*", + "ext-xmlreader": "*", + "ext-zip": "*", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "ext-zlib": "*", + "friendsofphp/php-cs-fixer": "^3.64.0", + "infection/infection": "^0.29.6", + "phpbench/phpbench": "^1.3.1", + "phpstan/phpstan": "^1.12.4", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.1", + "phpunit/phpunit": "^11.3.6" + }, + "suggest": { + "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)", + "ext-mbstring": "To handle non UTF-8 CSV files (if \"iconv\" is not already installed)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "OpenSpout\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrien Loison", + "email": "adrien@box.com" + } + ], + "description": "PHP Library to read and write spreadsheet files (CSV, XLSX and ODS), in a fast and scalable way", + "homepage": "https://github.com/openspout/openspout", + "keywords": [ + "OOXML", + "csv", + "excel", + "memory", + "odf", + "ods", + "office", + "open", + "php", + "read", + "scale", + "spreadsheet", + "stream", + "write", + "xlsx" + ], + "support": { + "issues": "https://github.com/openspout/openspout/issues", + "source": "https://github.com/openspout/openspout/tree/v4.26.0" + }, + "funding": [ + { + "url": "https://paypal.me/filippotessarotto", + "type": "custom" + }, + { + "url": "https://github.com/Slamdunk", + "type": "github" + } + ], + "time": "2024-09-24T14:04:43+00:00" + }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -1991,16 +2188,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.29.1", + "version": "1.32.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4" + "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6ca22b154efdd9e3c68c56f5d94670920a1c19a4", + "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4", "shasum": "" }, "require": { @@ -2032,9 +2229,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.32.0" }, - "time": "2024-05-31T08:52:43+00:00" + "time": "2024-09-26T07:23:32+00:00" }, { "name": "psr/cache", @@ -2294,16 +2491,16 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -2338,9 +2535,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "stof/doctrine-extensions-bundle", @@ -2493,16 +2690,16 @@ }, { "name": "symfony/asset-mapper", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/asset-mapper.git", - "reference": "5a388ee31d6536103b8a6a9d4e63b18670578fe0" + "reference": "e3ae56f965f1fe503db1f604756a44d40e6dea16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/5a388ee31d6536103b8a6a9d4e63b18670578fe0", - "reference": "5a388ee31d6536103b8a6a9d4e63b18670578fe0", + "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/e3ae56f965f1fe503db1f604756a44d40e6dea16", + "reference": "e3ae56f965f1fe503db1f604756a44d40e6dea16", "shasum": "" }, "require": { @@ -2552,7 +2749,7 @@ "description": "Maps directories of assets & makes them available in a public directory with versioned filenames.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset-mapper/tree/v7.1.2" + "source": "https://github.com/symfony/asset-mapper/tree/v7.1.5" }, "funding": [ { @@ -2568,20 +2765,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-19T08:57:32+00:00" }, { "name": "symfony/cache", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "e933e1d947ffb88efcdd34a2bd51561cab7deaae" + "reference": "86e5296b10e4dec8c8441056ca606aedb8a3be0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/e933e1d947ffb88efcdd34a2bd51561cab7deaae", - "reference": "e933e1d947ffb88efcdd34a2bd51561cab7deaae", + "url": "https://api.github.com/repos/symfony/cache/zipball/86e5296b10e4dec8c8441056ca606aedb8a3be0a", + "reference": "86e5296b10e4dec8c8441056ca606aedb8a3be0a", "shasum": "" }, "require": { @@ -2649,7 +2846,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.2" + "source": "https://github.com/symfony/cache/tree/v7.1.5" }, "funding": [ { @@ -2665,7 +2862,7 @@ "type": "tidelift" } ], - "time": "2024-06-11T13:32:38+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/cache-contracts", @@ -2894,16 +3091,16 @@ }, { "name": "symfony/console", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae" + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0aa29ca177f432ab68533432db0de059f39c92ae", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae", + "url": "https://api.github.com/repos/symfony/console/zipball/0fa539d12b3ccf068a722bbbffa07ca7079af9ee", + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee", "shasum": "" }, "require": { @@ -2967,7 +3164,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.2" + "source": "https://github.com/symfony/console/tree/v7.1.5" }, "funding": [ { @@ -2983,20 +3180,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/dependency-injection", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "6e108cded928bdafaf1da3fabe30dd5af20e36b9" + "reference": "38465f925ec4e0707b090e9147c65869837d639d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6e108cded928bdafaf1da3fabe30dd5af20e36b9", - "reference": "6e108cded928bdafaf1da3fabe30dd5af20e36b9", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/38465f925ec4e0707b090e9147c65869837d639d", + "reference": "38465f925ec4e0707b090e9147c65869837d639d", "shasum": "" }, "require": { @@ -3047,7 +3244,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.2" + "source": "https://github.com/symfony/dependency-injection/tree/v7.1.5" }, "funding": [ { @@ -3063,7 +3260,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3134,16 +3331,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "9fc4bebf69f00d4ebb12ee904d808b496035e2f6" + "reference": "2568d0adaa5b0018b07beaa90363b880a43cc957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/9fc4bebf69f00d4ebb12ee904d808b496035e2f6", - "reference": "9fc4bebf69f00d4ebb12ee904d808b496035e2f6", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/2568d0adaa5b0018b07beaa90363b880a43cc957", + "reference": "2568d0adaa5b0018b07beaa90363b880a43cc957", "shasum": "" }, "require": { @@ -3222,7 +3419,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.2" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.5" }, "funding": [ { @@ -3238,20 +3435,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:27:18+00:00" + "time": "2024-09-08T12:32:26+00:00" }, { "name": "symfony/doctrine-messenger", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "64e2195442df86a7a0c85a77162d0247601e9da9" + "reference": "29015027fb63461e035246e07d74eeab9cb03304" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/64e2195442df86a7a0c85a77162d0247601e9da9", - "reference": "64e2195442df86a7a0c85a77162d0247601e9da9", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/29015027fb63461e035246e07d74eeab9cb03304", + "reference": "29015027fb63461e035246e07d74eeab9cb03304", "shasum": "" }, "require": { @@ -3294,7 +3491,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v7.1.2" + "source": "https://github.com/symfony/doctrine-messenger/tree/v7.1.5" }, "funding": [ { @@ -3310,20 +3507,20 @@ "type": "tidelift" } ], - "time": "2024-06-20T15:47:37+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/dotenv", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "efa715ec40c098f2fba62444f4fd75d0d4248ede" + "reference": "6d966200b399fa59759286f3fc7c919f0677c449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/efa715ec40c098f2fba62444f4fd75d0d4248ede", - "reference": "efa715ec40c098f2fba62444f4fd75d0d4248ede", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/6d966200b399fa59759286f3fc7c919f0677c449", + "reference": "6d966200b399fa59759286f3fc7c919f0677c449", "shasum": "" }, "require": { @@ -3368,7 +3565,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v7.1.1" + "source": "https://github.com/symfony/dotenv/tree/v7.1.5" }, "funding": [ { @@ -3384,20 +3581,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/error-handler", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32" + "reference": "432bb369952795c61ca1def65e078c4a80dad13c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", - "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c", "shasum": "" }, "require": { @@ -3443,7 +3640,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.2" + "source": "https://github.com/symfony/error-handler/tree/v7.1.3" }, "funding": [ { @@ -3459,7 +3656,7 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T13:02:51+00:00" }, { "name": "symfony/event-dispatcher", @@ -3619,16 +3816,16 @@ }, { "name": "symfony/expression-language", - "version": "v7.1.1", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "463cb95f80c14136175f4e03f7f6199b01c6b8b4" + "reference": "b9e4bc6685d513c10235145ed1042a6081635806" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/463cb95f80c14136175f4e03f7f6199b01c6b8b4", - "reference": "463cb95f80c14136175f4e03f7f6199b01c6b8b4", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/b9e4bc6685d513c10235145ed1042a6081635806", + "reference": "b9e4bc6685d513c10235145ed1042a6081635806", "shasum": "" }, "require": { @@ -3663,7 +3860,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.1" + "source": "https://github.com/symfony/expression-language/tree/v7.1.4" }, "funding": [ { @@ -3679,20 +3876,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-08-12T09:59:40+00:00" }, { "name": "symfony/filesystem", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c" + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/92a91985250c251de9b947a14bb2c9390b1a562c", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/61fe0566189bf32e8cfee78335d8776f64a66f5a", + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a", "shasum": "" }, "require": { @@ -3729,7 +3926,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.1.2" + "source": "https://github.com/symfony/filesystem/tree/v7.1.5" }, "funding": [ { @@ -3745,20 +3942,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/finder", - "version": "v7.1.1", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6" + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6", + "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", "shasum": "" }, "require": { @@ -3793,7 +3990,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.1" + "source": "https://github.com/symfony/finder/tree/v7.1.4" }, "funding": [ { @@ -3809,26 +4006,29 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-08-13T14:28:19+00:00" }, { "name": "symfony/flex", - "version": "v2.4.5", + "version": "v2.4.7", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "b0a405f40614c9f584b489d54f91091817b0e26e" + "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/b0a405f40614c9f584b489d54f91091817b0e26e", - "reference": "b0a405f40614c9f584b489d54f91091817b0e26e", + "url": "https://api.github.com/repos/symfony/flex/zipball/92f4fba342161ff36072bd3b8e0b3c6c23160402", + "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402", "shasum": "" }, "require": { "composer-plugin-api": "^2.1", "php": ">=8.0" }, + "conflict": { + "composer/semver": "<1.7.2" + }, "require-dev": { "composer/composer": "^2.1", "symfony/dotenv": "^5.4|^6.0", @@ -3858,7 +4058,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.4.5" + "source": "https://github.com/symfony/flex/tree/v2.4.7" }, "funding": [ { @@ -3874,20 +4074,20 @@ "type": "tidelift" } ], - "time": "2024-03-02T08:16:47+00:00" + "time": "2024-10-07T08:51:54+00:00" }, { "name": "symfony/form", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "b23a44f0edaceb8d70b0e7f8937feae81e6dede5" + "reference": "6b8b53ad6d42f14b158c896163b96ff260d78222" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/b23a44f0edaceb8d70b0e7f8937feae81e6dede5", - "reference": "b23a44f0edaceb8d70b0e7f8937feae81e6dede5", + "url": "https://api.github.com/repos/symfony/form/zipball/6b8b53ad6d42f14b158c896163b96ff260d78222", + "reference": "6b8b53ad6d42f14b158c896163b96ff260d78222", "shasum": "" }, "require": { @@ -3955,7 +4155,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.1" + "source": "https://github.com/symfony/form/tree/v7.1.5" }, "funding": [ { @@ -3971,20 +4171,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "54a84f49658e2e87167396b2259a55e55e11f4a2" + "reference": "8a792de86230c13a9de7750c0c8b23cc083183d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/54a84f49658e2e87167396b2259a55e55e11f4a2", - "reference": "54a84f49658e2e87167396b2259a55e55e11f4a2", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/8a792de86230c13a9de7750c0c8b23cc083183d4", + "reference": "8a792de86230c13a9de7750c0c8b23cc083183d4", "shasum": "" }, "require": { @@ -3993,7 +4193,7 @@ "php": ">=8.2", "symfony/cache": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^7.1", + "symfony/dependency-injection": "^7.1.5", "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.4|^7.0", "symfony/event-dispatcher": "^6.4|^7.0", @@ -4102,7 +4302,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.2" + "source": "https://github.com/symfony/framework-bundle/tree/v7.1.5" }, "funding": [ { @@ -4118,20 +4318,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-20T13:35:23+00:00" }, { "name": "symfony/http-client", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "90ace27d17ccc9afc6f7ec0081e8529fb0e29425" + "reference": "abca35865118edf35a23f2f24978a1784c831cb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/90ace27d17ccc9afc6f7ec0081e8529fb0e29425", - "reference": "90ace27d17ccc9afc6f7ec0081e8529fb0e29425", + "url": "https://api.github.com/repos/symfony/http-client/zipball/abca35865118edf35a23f2f24978a1784c831cb4", + "reference": "abca35865118edf35a23f2f24978a1784c831cb4", "shasum": "" }, "require": { @@ -4196,7 +4396,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.1.2" + "source": "https://github.com/symfony/http-client/tree/v7.1.5" }, "funding": [ { @@ -4212,7 +4412,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-20T13:35:23+00:00" }, { "name": "symfony/http-client-contracts", @@ -4294,16 +4494,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa" + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/74d171d5b6a1d9e4bfee09a41937c17a7536acfa", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e30ef73b1e44eea7eb37ba69600a354e553f694b", + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b", "shasum": "" }, "require": { @@ -4351,7 +4551,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.1" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.5" }, "funding": [ { @@ -4367,20 +4567,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6" + "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", - "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/44204d96150a9df1fc57601ec933d23fefc2d65b", + "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b", "shasum": "" }, "require": { @@ -4465,7 +4665,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.2" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.5" }, "funding": [ { @@ -4481,20 +4681,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T13:13:31+00:00" + "time": "2024-09-21T06:09:21+00:00" }, { "name": "symfony/intl", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "66c1ecda092b1130ada2cf5f59dacfd5b6e9c99c" + "reference": "a0ba7a400e4c915500762c998355bea219a32d6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/66c1ecda092b1130ada2cf5f59dacfd5b6e9c99c", - "reference": "66c1ecda092b1130ada2cf5f59dacfd5b6e9c99c", + "url": "https://api.github.com/repos/symfony/intl/zipball/a0ba7a400e4c915500762c998355bea219a32d6b", + "reference": "a0ba7a400e4c915500762c998355bea219a32d6b", "shasum": "" }, "require": { @@ -4551,7 +4751,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v7.1.1" + "source": "https://github.com/symfony/intl/tree/v7.1.5" }, "funding": [ { @@ -4567,20 +4767,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/mailer", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee" + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/8fcff0af9043c8f8a8e229437cea363e282f9aee", - "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee", + "url": "https://api.github.com/repos/symfony/mailer/zipball/bbf21460c56f29810da3df3e206e38dfbb01e80b", + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b", "shasum": "" }, "require": { @@ -4631,7 +4831,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.2" + "source": "https://github.com/symfony/mailer/tree/v7.1.5" }, "funding": [ { @@ -4647,20 +4847,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-08T12:32:26+00:00" }, { "name": "symfony/messenger", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "8cafca5f0fade46acf4a6b32b2d5e495f798a56b" + "reference": "e1c0ced845e3dac12ab428c5ed42dbe7a58ca576" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/8cafca5f0fade46acf4a6b32b2d5e495f798a56b", - "reference": "8cafca5f0fade46acf4a6b32b2d5e495f798a56b", + "url": "https://api.github.com/repos/symfony/messenger/zipball/e1c0ced845e3dac12ab428c5ed42dbe7a58ca576", + "reference": "e1c0ced845e3dac12ab428c5ed42dbe7a58ca576", "shasum": "" }, "require": { @@ -4717,7 +4917,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.2" + "source": "https://github.com/symfony/messenger/tree/v7.1.5" }, "funding": [ { @@ -4733,20 +4933,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-08T12:32:26+00:00" }, { "name": "symfony/mime", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc" + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/26a00b85477e69a4bab63b66c5dce64f18b0cbfc", - "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc", + "url": "https://api.github.com/repos/symfony/mime/zipball/711d2e167e8ce65b05aea6b258c449671cdd38ff", + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff", "shasum": "" }, "require": { @@ -4801,7 +5001,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.2" + "source": "https://github.com/symfony/mime/tree/v7.1.5" }, "funding": [ { @@ -4817,7 +5017,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/monolog-bridge", @@ -4980,16 +5180,16 @@ }, { "name": "symfony/notifier", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/notifier.git", - "reference": "17079e564159b77f5314b7130a7516677afc075e" + "reference": "843946b0b1018ddc714b467f223607c71f9f6c8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/notifier/zipball/17079e564159b77f5314b7130a7516677afc075e", - "reference": "17079e564159b77f5314b7130a7516677afc075e", + "url": "https://api.github.com/repos/symfony/notifier/zipball/843946b0b1018ddc714b467f223607c71f9f6c8f", + "reference": "843946b0b1018ddc714b467f223607c71f9f6c8f", "shasum": "" }, "require": { @@ -5038,7 +5238,7 @@ "notifier" ], "support": { - "source": "https://github.com/symfony/notifier/tree/v7.1.2" + "source": "https://github.com/symfony/notifier/tree/v7.1.5" }, "funding": [ { @@ -5054,7 +5254,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-08T12:32:26+00:00" }, { "name": "symfony/options-resolver", @@ -5197,20 +5397,20 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -5255,7 +5455,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -5271,24 +5471,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "e76343c631b453088e2260ac41dfebe21954de81" + "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e76343c631b453088e2260ac41dfebe21954de81", - "reference": "e76343c631b453088e2260ac41dfebe21954de81", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", + "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance and support of other locales than \"en\"" @@ -5339,7 +5539,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.31.0" }, "funding": [ { @@ -5355,26 +5555,25 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c" + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", - "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -5423,7 +5622,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -5439,24 +5638,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -5504,7 +5703,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -5520,24 +5719,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -5584,7 +5783,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -5600,24 +5799,24 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9" + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", - "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -5660,7 +5859,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" }, "funding": [ { @@ -5676,24 +5875,24 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:35:24+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9" + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/2ba1f33797470debcda07fe9dce20a0003df18e9", - "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-uuid": "*" @@ -5739,7 +5938,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" }, "funding": [ { @@ -5755,20 +5954,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028" + "reference": "5c03ee6369281177f07f7c68252a280beccba847" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028", + "url": "https://api.github.com/repos/symfony/process/zipball/5c03ee6369281177f07f7c68252a280beccba847", + "reference": "5c03ee6369281177f07f7c68252a280beccba847", "shasum": "" }, "require": { @@ -5800,7 +5999,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.1" + "source": "https://github.com/symfony/process/tree/v7.1.5" }, "funding": [ { @@ -5816,20 +6015,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-19T21:48:23+00:00" }, { "name": "symfony/property-access", - "version": "v7.1.1", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "74e39e6a6276b8e384f34c6ddbc10a6c9a60193a" + "reference": "6c709f97103355016e5782d0622437ae381012ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/74e39e6a6276b8e384f34c6ddbc10a6c9a60193a", - "reference": "74e39e6a6276b8e384f34c6ddbc10a6c9a60193a", + "url": "https://api.github.com/repos/symfony/property-access/zipball/6c709f97103355016e5782d0622437ae381012ad", + "reference": "6c709f97103355016e5782d0622437ae381012ad", "shasum": "" }, "require": { @@ -5876,7 +6075,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.1.1" + "source": "https://github.com/symfony/property-access/tree/v7.1.4" }, "funding": [ { @@ -5892,20 +6091,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-08-30T16:12:47+00:00" }, { "name": "symfony/property-info", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "d7b91e4aa07e822a9b935fc29a7254c12d502f16" + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/d7b91e4aa07e822a9b935fc29a7254c12d502f16", - "reference": "d7b91e4aa07e822a9b935fc29a7254c12d502f16", + "url": "https://api.github.com/repos/symfony/property-info/zipball/88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", "shasum": "" }, "require": { @@ -5960,7 +6159,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.1.2" + "source": "https://github.com/symfony/property-info/tree/v7.1.3" }, "funding": [ { @@ -5976,20 +6175,20 @@ "type": "tidelift" } ], - "time": "2024-06-26T07:21:35+00:00" + "time": "2024-07-26T07:36:36+00:00" }, { "name": "symfony/routing", - "version": "v7.1.1", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0" + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/60c31bab5c45af7f13091b87deb708830f3c96c0", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0", + "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", "shasum": "" }, "require": { @@ -6041,7 +6240,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.1" + "source": "https://github.com/symfony/routing/tree/v7.1.4" }, "funding": [ { @@ -6057,7 +6256,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-08-29T08:16:25+00:00" }, { "name": "symfony/runtime", @@ -6140,16 +6339,16 @@ }, { "name": "symfony/security-bundle", - "version": "v7.1.2", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "a6746372202512d2c75ba9bdbc36e15022a56c42" + "reference": "5e10107856ff64d477c61fed7bcbb8a16125ea01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/a6746372202512d2c75ba9bdbc36e15022a56c42", - "reference": "a6746372202512d2c75ba9bdbc36e15022a56c42", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/5e10107856ff64d477c61fed7bcbb8a16125ea01", + "reference": "5e10107856ff64d477c61fed7bcbb8a16125ea01", "shasum": "" }, "require": { @@ -6158,7 +6357,7 @@ "php": ">=8.2", "symfony/clock": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", + "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", @@ -6198,7 +6397,7 @@ "symfony/validator": "^6.4|^7.0", "symfony/yaml": "^6.4|^7.0", "twig/twig": "^3.0.4", - "web-token/jwt-library": "^3.3.2" + "web-token/jwt-library": "^3.3.2|^4.0" }, "type": "symfony-bundle", "autoload": { @@ -6226,7 +6425,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.2" + "source": "https://github.com/symfony/security-bundle/tree/v7.1.4" }, "funding": [ { @@ -6242,20 +6441,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:35:32+00:00" + "time": "2024-08-20T11:38:55+00:00" }, { "name": "symfony/security-core", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "d615960211a11913e70f8576e5c38cd05d90ec3f" + "reference": "dbeb09f0b786590d126c0da297e2320e66ec353b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/d615960211a11913e70f8576e5c38cd05d90ec3f", - "reference": "d615960211a11913e70f8576e5c38cd05d90ec3f", + "url": "https://api.github.com/repos/symfony/security-core/zipball/dbeb09f0b786590d126c0da297e2320e66ec353b", + "reference": "dbeb09f0b786590d126c0da297e2320e66ec353b", "shasum": "" }, "require": { @@ -6312,7 +6511,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v7.1.2" + "source": "https://github.com/symfony/security-core/tree/v7.1.5" }, "funding": [ { @@ -6328,7 +6527,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-20T13:35:23+00:00" }, { "name": "symfony/security-csrf", @@ -6400,16 +6599,16 @@ }, { "name": "symfony/security-http", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "e9dc3ef093dac3d4982fcd96002525aa7a1d6989" + "reference": "d47c013bccf4b81a1496826d42dfa05da549131a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/e9dc3ef093dac3d4982fcd96002525aa7a1d6989", - "reference": "e9dc3ef093dac3d4982fcd96002525aa7a1d6989", + "url": "https://api.github.com/repos/symfony/security-http/zipball/d47c013bccf4b81a1496826d42dfa05da549131a", + "reference": "d47c013bccf4b81a1496826d42dfa05da549131a", "shasum": "" }, "require": { @@ -6440,7 +6639,7 @@ "symfony/routing": "^6.4|^7.0", "symfony/security-csrf": "^6.4|^7.0", "symfony/translation": "^6.4|^7.0", - "web-token/jwt-library": "^3.3.2" + "web-token/jwt-library": "^3.3.2|^4.0" }, "type": "library", "autoload": { @@ -6468,7 +6667,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v7.1.2" + "source": "https://github.com/symfony/security-http/tree/v7.1.5" }, "funding": [ { @@ -6484,20 +6683,20 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/serializer", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "d2077674aaaff02a95f290de512aa358947e6bbe" + "reference": "71d6e1f70f00752d1469d0f5e83b0a51716f288b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/d2077674aaaff02a95f290de512aa358947e6bbe", - "reference": "d2077674aaaff02a95f290de512aa358947e6bbe", + "url": "https://api.github.com/repos/symfony/serializer/zipball/71d6e1f70f00752d1469d0f5e83b0a51716f288b", + "reference": "71d6e1f70f00752d1469d0f5e83b0a51716f288b", "shasum": "" }, "require": { @@ -6511,12 +6710,14 @@ "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" }, "require-dev": { "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", + "phpstan/phpdoc-parser": "^1.0", "seld/jsonlint": "^1.10", "symfony/cache": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", @@ -6532,7 +6733,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", + "symfony/type-info": "^7.1.5", "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0", @@ -6565,7 +6766,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.2" + "source": "https://github.com/symfony/serializer/tree/v7.1.5" }, "funding": [ { @@ -6581,7 +6782,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T07:42:43+00:00" + "time": "2024-09-20T12:13:15+00:00" }, { "name": "symfony/service-contracts", @@ -6668,16 +6869,16 @@ }, { "name": "symfony/stimulus-bundle", - "version": "v2.18.1", + "version": "v2.20.0", "source": { "type": "git", "url": "https://github.com/symfony/stimulus-bundle.git", - "reference": "017b60e036c366c8ce0e77864d5aabab436ad73d" + "reference": "ae69e3a764694b9f45d8a009dd2b8c22444c5e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/017b60e036c366c8ce0e77864d5aabab436ad73d", - "reference": "017b60e036c366c8ce0e77864d5aabab436ad73d", + "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/ae69e3a764694b9f45d8a009dd2b8c22444c5e0c", + "reference": "ae69e3a764694b9f45d8a009dd2b8c22444c5e0c", "shasum": "" }, "require": { @@ -6717,7 +6918,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/stimulus-bundle/tree/v2.18.1" + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.20.0" }, "funding": [ { @@ -6733,7 +6934,7 @@ "type": "tidelift" } ], - "time": "2024-06-11T13:21:54+00:00" + "time": "2024-09-24T09:27:42+00:00" }, { "name": "symfony/stopwatch", @@ -6799,16 +7000,16 @@ }, { "name": "symfony/string", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8" + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/14221089ac66cf82e3cf3d1c1da65de305587ff8", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8", + "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", "shasum": "" }, "require": { @@ -6866,7 +7067,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.2" + "source": "https://github.com/symfony/string/tree/v7.1.5" }, "funding": [ { @@ -6882,20 +7083,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:27:18+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/translation", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3" + "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", - "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", + "url": "https://api.github.com/repos/symfony/translation/zipball/235535e3f84f3dfbdbde0208ede6ca75c3a489ea", + "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea", "shasum": "" }, "require": { @@ -6960,7 +7161,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.1" + "source": "https://github.com/symfony/translation/tree/v7.1.5" }, "funding": [ { @@ -6976,7 +7177,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-16T06:30:38+00:00" }, { "name": "symfony/translation-contracts", @@ -7058,16 +7259,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "96e6e12a63db80bcedefc012042d2cb2d1a015f8" + "reference": "e997e5025b53c0f7b17632802daefdd6a04540ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/96e6e12a63db80bcedefc012042d2cb2d1a015f8", - "reference": "96e6e12a63db80bcedefc012042d2cb2d1a015f8", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/e997e5025b53c0f7b17632802daefdd6a04540ae", + "reference": "e997e5025b53c0f7b17632802daefdd6a04540ae", "shasum": "" }, "require": { @@ -7147,7 +7348,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.1" + "source": "https://github.com/symfony/twig-bridge/tree/v7.1.5" }, "funding": [ { @@ -7163,20 +7364,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-15T06:48:17+00:00" }, { "name": "symfony/twig-bundle", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "d48c2f08c2f315e749f0e18fc4945b7be8afe1e5" + "reference": "4e6afd0dc8396f16861b682f3b854ff6e24bfb7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d48c2f08c2f315e749f0e18fc4945b7be8afe1e5", - "reference": "d48c2f08c2f315e749f0e18fc4945b7be8afe1e5", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/4e6afd0dc8396f16861b682f3b854ff6e24bfb7e", + "reference": "4e6afd0dc8396f16861b682f3b854ff6e24bfb7e", "shasum": "" }, "require": { @@ -7231,7 +7432,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.1" + "source": "https://github.com/symfony/twig-bundle/tree/v7.1.5" }, "funding": [ { @@ -7247,20 +7448,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-08T12:32:26+00:00" }, { "name": "symfony/type-info", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "60b28eb733f1453287f1263ed305b96091e0d1dc" + "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/60b28eb733f1453287f1263ed305b96091e0d1dc", - "reference": "60b28eb733f1453287f1263ed305b96091e0d1dc", + "url": "https://api.github.com/repos/symfony/type-info/zipball/9f6094aa900d2c06bd61576a6f279d4ac441515f", + "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f", "shasum": "" }, "require": { @@ -7313,7 +7514,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.1.1" + "source": "https://github.com/symfony/type-info/tree/v7.1.5" }, "funding": [ { @@ -7329,20 +7530,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:59:31+00:00" + "time": "2024-09-19T21:48:23+00:00" }, { "name": "symfony/uid", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "bb59febeecc81528ff672fad5dab7f06db8c8277" + "reference": "8c7bb8acb933964055215d89f9a9871df0239317" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/bb59febeecc81528ff672fad5dab7f06db8c8277", - "reference": "bb59febeecc81528ff672fad5dab7f06db8c8277", + "url": "https://api.github.com/repos/symfony/uid/zipball/8c7bb8acb933964055215d89f9a9871df0239317", + "reference": "8c7bb8acb933964055215d89f9a9871df0239317", "shasum": "" }, "require": { @@ -7387,7 +7588,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.1" + "source": "https://github.com/symfony/uid/tree/v7.1.5" }, "funding": [ { @@ -7403,20 +7604,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/ux-turbo", - "version": "v2.18.0", + "version": "v2.20.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-turbo.git", - "reference": "e447231ddcc09ab68d29047f47d31a524837dc7a" + "reference": "5eaa803dea9f954aa124963f2c872b414d97cc97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/e447231ddcc09ab68d29047f47d31a524837dc7a", - "reference": "e447231ddcc09ab68d29047f47d31a524837dc7a", + "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/5eaa803dea9f954aa124963f2c872b414d97cc97", + "reference": "5eaa803dea9f954aa124963f2c872b414d97cc97", "shasum": "" }, "require": { @@ -7484,7 +7685,7 @@ "turbo-stream" ], "support": { - "source": "https://github.com/symfony/ux-turbo/tree/v2.18.0" + "source": "https://github.com/symfony/ux-turbo/tree/v2.20.0" }, "funding": [ { @@ -7500,20 +7701,20 @@ "type": "tidelift" } ], - "time": "2024-06-01T17:56:14+00:00" + "time": "2024-09-10T12:38:04+00:00" }, { "name": "symfony/validator", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "bed12b7d5bd4dac452db5fa6203331c876b489e7" + "reference": "e57592782dc2a86997477f28164c51af53512ad8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/bed12b7d5bd4dac452db5fa6203331c876b489e7", - "reference": "bed12b7d5bd4dac452db5fa6203331c876b489e7", + "url": "https://api.github.com/repos/symfony/validator/zipball/e57592782dc2a86997477f28164c51af53512ad8", + "reference": "e57592782dc2a86997477f28164c51af53512ad8", "shasum": "" }, "require": { @@ -7581,7 +7782,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.1.2" + "source": "https://github.com/symfony/validator/tree/v7.1.5" }, "funding": [ { @@ -7597,20 +7798,20 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d" + "reference": "e20e03889539fd4e4211e14d2179226c513c010d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5857c57c6b4b86524c08cf4f4bc95327270a816d", - "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e20e03889539fd4e4211e14d2179226c513c010d", + "reference": "e20e03889539fd4e4211e14d2179226c513c010d", "shasum": "" }, "require": { @@ -7664,7 +7865,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.2" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.5" }, "funding": [ { @@ -7680,7 +7881,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-16T10:07:02+00:00" }, { "name": "symfony/var-exporter", @@ -7843,16 +8044,16 @@ }, { "name": "symfony/yaml", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "fa34c77015aa6720469db7003567b9f772492bf2" + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/fa34c77015aa6720469db7003567b9f772492bf2", - "reference": "fa34c77015aa6720469db7003567b9f772492bf2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4e561c316e135e053bd758bf3b3eb291d9919de4", + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4", "shasum": "" }, "require": { @@ -7894,7 +8095,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.1" + "source": "https://github.com/symfony/yaml/tree/v7.1.5" }, "funding": [ { @@ -7910,7 +8111,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-17T12:49:58+00:00" }, { "name": "symfonycasts/reset-password-bundle", @@ -8015,23 +8216,23 @@ }, { "name": "twig/extra-bundle", - "version": "v3.10.0", + "version": "v3.13.0", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "cdc6e23aeb7f4953c1039568c3439aab60c56454" + "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/cdc6e23aeb7f4953c1039568c3439aab60c56454", - "reference": "cdc6e23aeb7f4953c1039568c3439aab60c56454", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/21a9a7aa9f79d4493bb6fed4eb2794339f9551f5", + "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/framework-bundle": "^5.4|^6.4|^7.0", "symfony/twig-bundle": "^5.4|^6.4|^7.0", - "twig/twig": "^3.0" + "twig/twig": "^3.0|^4.0" }, "require-dev": { "league/commonmark": "^1.0|^2.0", @@ -8073,7 +8274,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.10.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.13.0" }, "funding": [ { @@ -8085,28 +8286,28 @@ "type": "tidelift" } ], - "time": "2024-05-11T07:35:57+00:00" + "time": "2024-09-01T20:39:12+00:00" }, { "name": "twig/twig", - "version": "v3.10.3", + "version": "v3.14.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572" + "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72", + "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.22" + "symfony/polyfill-php81": "^1.29" }, "require-dev": { "psr/container": "^1.0|^2.0", @@ -8152,7 +8353,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.10.3" + "source": "https://github.com/twigphp/Twig/tree/v3.14.0" }, "funding": [ { @@ -8164,7 +8365,7 @@ "type": "tidelift" } ], - "time": "2024-05-16T10:04:27+00:00" + "time": "2024-09-09T17:55:12+00:00" }, { "name": "webmozart/assert", @@ -8526,16 +8727,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.1.0", + "version": "v5.3.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", "shasum": "" }, "require": { @@ -8578,9 +8779,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" }, - "time": "2024-07-01T20:03:41+00:00" + "time": "2024-10-08T18:51:32+00:00" }, { "name": "phar-io/manifest", @@ -8702,35 +8903,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.31", + "version": "9.2.32", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -8739,7 +8940,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -8768,7 +8969,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -8776,7 +8977,7 @@ "type": "github" } ], - "time": "2024-03-02T06:37:42+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -9021,16 +9222,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.20", + "version": "9.6.21", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "49d7820565836236411f5dc002d16dd689cde42f" + "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/49d7820565836236411f5dc002d16dd689cde42f", - "reference": "49d7820565836236411f5dc002d16dd689cde42f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", + "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", "shasum": "" }, "require": { @@ -9045,7 +9246,7 @@ "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.31", + "phpunit/php-code-coverage": "^9.2.32", "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.4", @@ -9104,7 +9305,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.20" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.21" }, "funding": [ { @@ -9120,7 +9321,7 @@ "type": "tidelift" } ], - "time": "2024-07-10T11:45:39+00:00" + "time": "2024-09-19T10:50:18+00:00" }, { "name": "sebastian/cli-parser", @@ -10294,16 +10495,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "01ce8174447f1f1dd33a5854b01beef79061d9fa" + "reference": "b92af238457a7cdd2738f941cd525d76313e8283" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/01ce8174447f1f1dd33a5854b01beef79061d9fa", - "reference": "01ce8174447f1f1dd33a5854b01beef79061d9fa", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b92af238457a7cdd2738f941cd525d76313e8283", + "reference": "b92af238457a7cdd2738f941cd525d76313e8283", "shasum": "" }, "require": { @@ -10341,7 +10542,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.1" + "source": "https://github.com/symfony/dom-crawler/tree/v7.1.5" }, "funding": [ { @@ -10357,20 +10558,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-15T06:48:17+00:00" }, { "name": "symfony/maker-bundle", - "version": "v1.60.0", + "version": "v1.61.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "c305a02a22974670f359d4274c9431e1a191f559" + "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c305a02a22974670f359d4274c9431e1a191f559", - "reference": "c305a02a22974670f359d4274c9431e1a191f559", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a3b7f14d349f8f44ed752d4dde2263f77510cc18", + "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18", "shasum": "" }, "require": { @@ -10433,7 +10634,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.60.0" + "source": "https://github.com/symfony/maker-bundle/tree/v1.61.0" }, "funding": [ { @@ -10449,20 +10650,20 @@ "type": "tidelift" } ], - "time": "2024-06-10T06:03:18+00:00" + "time": "2024-08-29T22:50:23+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v7.1.2", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8" + "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8", - "reference": "8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e876eb90e32a8fc4c4911d458e09f88d65877d1c", + "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c", "shasum": "" }, "require": { @@ -10515,7 +10716,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.2" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.4" }, "funding": [ { @@ -10531,20 +10732,20 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-08-13T14:28:19+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v7.1.2", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "82b22245d9f3ef8ccb1d55d4e8ade8bc3885c302" + "reference": "3cfc775277a8f2dacdd0f72d196bc87b272a763f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/82b22245d9f3ef8ccb1d55d4e8ade8bc3885c302", - "reference": "82b22245d9f3ef8ccb1d55d4e8ade8bc3885c302", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/3cfc775277a8f2dacdd0f72d196bc87b272a763f", + "reference": "3cfc775277a8f2dacdd0f72d196bc87b272a763f", "shasum": "" }, "require": { @@ -10596,7 +10797,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.2" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.4" }, "funding": [ { @@ -10612,7 +10813,7 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-08-12T09:59:40+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index a089598..37d79e8 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -8,6 +8,7 @@ doctrine: profiling_collect_backtrace: '%kernel.debug%' use_savepoints: true + logging: true orm: auto_generate_proxy_classes: true enable_lazy_ghost_objects: true @@ -22,6 +23,30 @@ doctrine: dir: '%kernel.project_dir%/src/Core/Domain/Model' prefix: 'App\Core' alias: Core + Group: + type: attribute + is_bundle: false + dir: '%kernel.project_dir%/src/Core/Domain/Model' + prefix: 'App\Core' + alias: Group + Unit: + type: attribute + is_bundle: false + dir: '%kernel.project_dir%/src/Core/Domain/Model' + prefix: 'App\Core' + alias: Unit + Leader: + type: attribute + is_bundle: false + dir: '%kernel.project_dir%/src/Core/Domain/Model' + prefix: 'App\Core' + alias: Leader + Scout: + type: attribute + is_bundle: false + dir: '%kernel.project_dir%/src/Core/Domain/Model' + prefix: 'App\Core' + alias: Scout Medical: type: attribute is_bundle: false diff --git a/config/packages/messenger.yaml b/config/packages/messenger.yaml index 270f3c7..338fe92 100644 --- a/config/packages/messenger.yaml +++ b/config/packages/messenger.yaml @@ -1,29 +1,29 @@ framework: - messenger: - failure_transport: failed + messenger: + failure_transport: failed - transports: - # https://symfony.com/doc/current/messenger.html#transport-configuration - async: - dsn: '%env(MESSENGER_TRANSPORT_DSN)%' - options: - use_notify: true - check_delayed_interval: 60000 - retry_strategy: - max_retries: 3 - multiplier: 2 - failed: 'doctrine://default?queue_name=failed' - # sync: 'sync://' + transports: + # https://symfony.com/doc/current/messenger.html#transport-configuration + async: + dsn: '%env(MESSENGER_TRANSPORT_DSN)%' + options: + use_notify: true + check_delayed_interval: 60000 + retry_strategy: + max_retries: 3 + multiplier: 2 + failed: 'doctrine://default?queue_name=failed' + # sync: 'sync://' - default_bus: messenger.bus.default + default_bus: messenger.bus.default - buses: - messenger.bus.default: [] + buses: + messenger.bus.default: [ ] - routing: - Symfony\Component\Mailer\Messenger\SendEmailMessage: async - Symfony\Component\Notifier\Message\ChatMessage: async - Symfony\Component\Notifier\Message\SmsMessage: async + routing: + Symfony\Component\Mailer\Messenger\SendEmailMessage: async + Symfony\Component\Notifier\Message\ChatMessage: async + Symfony\Component\Notifier\Message\SmsMessage: async - # Route your messages to the transports - # 'App\Message\YourMessage': async + # Route your messages to the transports + # 'App\Message\YourMessage': async diff --git a/config/packages/security.yaml b/config/packages/security.yaml index a41cece..653c681 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -1,39 +1,39 @@ security: - password_hashers: - App\Core\Domain\Model\User: 'auto' - providers: - app_user_provider: - entity: - class: App\Core\Domain\Model\User - property: email.address - firewalls: - dev: - pattern: ^/(_(profiler|wdt)|css|images|js)/ - security: false - main: - lazy: true - provider: app_user_provider - custom_authenticators: - - App\Core\Infrastructure\Security\AppAuthenticator - logout: - path: app_logout - switch_user: true + password_hashers: + App\Core\Domain\Model\User: 'auto' + providers: + app_user_provider: + entity: + class: App\Core\Domain\Model\User + property: email.address + firewalls: + dev: + pattern: ^/(_(profiler|wdt)|css|images|js)/ + security: false + main: + lazy: true + provider: app_user_provider + custom_authenticators: + - App\Core\Infrastructure\Security\AppAuthenticator + logout: + path: app_logout + switch_user: true - # Easy way to control access for large sections of your site - # Note: Only the *first* access control that matches will be used - access_control: - # - { path: ^/admin, roles: ROLE_ADMIN } - # - { path: ^/profile, roles: ROLE_USER } + # Easy way to control access for large sections of your site + # Note: Only the *first* access control that matches will be used + access_control: + # - { path: ^/admin, roles: ROLE_ADMIN } + # - { path: ^/profile, roles: ROLE_USER } when@test: - security: - password_hashers: - # By default, password hashers are resource intensive and take time. This is - # important to generate secure password hashes. In tests however, secure hashes - # are not important, waste resources and increase test times. The following - # reduces the work factor to the lowest possible values. - Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: - algorithm: auto - cost: 4 # Lowest possible value for bcrypt - time_cost: 3 # Lowest possible value for argon - memory_cost: 10 # Lowest possible value for argon + security: + password_hashers: + # By default, password hashers are resource intensive and take time. This is + # important to generate secure password hashes. In tests however, secure hashes + # are not important, waste resources and increase test times. The following + # reduces the work factor to the lowest possible values. + Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: + algorithm: auto + cost: 4 # Lowest possible value for bcrypt + time_cost: 3 # Lowest possible value for argon + memory_cost: 10 # Lowest possible value for argon diff --git a/import.xlsx b/import.xlsx new file mode 100644 index 0000000..b8655ed Binary files /dev/null and b/import.xlsx differ diff --git a/migrations/Version20240828140508.php b/migrations/Version20241013145735.php similarity index 51% rename from migrations/Version20240828140508.php rename to migrations/Version20241013145735.php index 3538f61..e9d6ca9 100644 --- a/migrations/Version20240828140508.php +++ b/migrations/Version20241013145735.php @@ -10,7 +10,7 @@ /** * Auto-generated Migration: Please modify to your needs! */ -final class Version20240828140508 extends AbstractMigration +final class Version20241013145735 extends AbstractMigration { public function getDescription(): string { @@ -20,17 +20,17 @@ public function getDescription(): string public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->addSql('CREATE TABLE `group` (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', name VARCHAR(255) NOT NULL, description LONGTEXT NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE medical_data (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE person (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', medical_data_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', profile_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', parent1_profile_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', parent2_profile_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', own_profile_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', discr VARCHAR(255) NOT NULL, created_at DATETIME DEFAULT NULL, updated_at DATETIME DEFAULT NULL, deleted_at DATETIME DEFAULT NULL, is_adult TINYINT(1) DEFAULT NULL, INDEX IDX_34DCD17671F741F2 (medical_data_id), INDEX IDX_34DCD176CCFA12B8 (profile_id), INDEX IDX_34DCD1765FE4FA6 (parent1_profile_id), INDEX IDX_34DCD17672609D56 (parent2_profile_id), INDEX IDX_34DCD176C920D4FE (own_profile_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE leader_role_in_unit (leader_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', role_in_unit_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', INDEX IDX_2E1589A973154ED4 (leader_id), INDEX IDX_2E1589A93C3A39CF (role_in_unit_id), PRIMARY KEY(leader_id, role_in_unit_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE profile (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', firstname VARCHAR(255) NOT NULL, lastname VARCHAR(255) NOT NULL, phone VARCHAR(20) DEFAULT NULL, gender VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE reset_password_request (id INT AUTO_INCREMENT NOT NULL, user_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', selector VARCHAR(20) NOT NULL, hashed_token VARCHAR(100) NOT NULL, requested_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', expires_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_7CE748AA76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE role_in_unit (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', unit_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', role VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_4ACD96CCF8BD700D (unit_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE unit (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', group_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', name VARCHAR(255) NOT NULL, type VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, INDEX IDX_DCBB0C53FE54D947 (group_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE user (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', is_first_login TINYINT(1) NOT NULL, password VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, email_address VARCHAR(180) NOT NULL, UNIQUE INDEX UNIQ_8D93D649B08E074E (email_address), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE user_person (user_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', person_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', INDEX IDX_518ECA4BA76ED395 (user_id), INDEX IDX_518ECA4B217BBB47 (person_id), PRIMARY KEY(user_id, person_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE messenger_messages (id BIGINT AUTO_INCREMENT NOT NULL, body LONGTEXT NOT NULL, headers LONGTEXT NOT NULL, queue_name VARCHAR(190) NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', available_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', delivered_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_75EA56E0FB7336F0 (queue_name), INDEX IDX_75EA56E0E3BD61CE (available_at), INDEX IDX_75EA56E016BA31DB (delivered_at), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE groups (id BINARY(16) NOT NULL, name VARCHAR(255) NOT NULL, codice_ordinale VARCHAR(5) NOT NULL, iban VARCHAR(27) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, address_country_code VARCHAR(3) NOT NULL, address_administrative_area VARCHAR(32) NOT NULL, address_locality VARCHAR(256) DEFAULT NULL, address_dependent_locality VARCHAR(256) DEFAULT NULL, address_postal_code VARCHAR(5) DEFAULT NULL, address_address_line1 VARCHAR(256) DEFAULT NULL, address_address_line2 VARCHAR(256) DEFAULT NULL, address_locale VARCHAR(2) DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); + $this->addSql('CREATE TABLE medical_data (id BINARY(16) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); + $this->addSql('CREATE TABLE person (id BINARY(16) NOT NULL, medical_data_id BINARY(16) DEFAULT NULL, discr VARCHAR(255) NOT NULL, created_at DATETIME DEFAULT NULL, updated_at DATETIME DEFAULT NULL, deleted_at DATETIME DEFAULT NULL, profile_id BINARY(16) DEFAULT NULL, is_adult TINYINT(1) DEFAULT NULL, parent1_profile_id BINARY(16) DEFAULT NULL, parent2_profile_id BINARY(16) DEFAULT NULL, own_profile_id BINARY(16) DEFAULT NULL, INDEX IDX_34DCD17671F741F2 (medical_data_id), INDEX IDX_34DCD176CCFA12B8 (profile_id), INDEX IDX_34DCD1765FE4FA6 (parent1_profile_id), INDEX IDX_34DCD17672609D56 (parent2_profile_id), INDEX IDX_34DCD176C920D4FE (own_profile_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); + $this->addSql('CREATE TABLE leader_role_in_unit (leader_id BINARY(16) NOT NULL, role_in_unit_id BINARY(16) NOT NULL, INDEX IDX_2E1589A973154ED4 (leader_id), INDEX IDX_2E1589A93C3A39CF (role_in_unit_id), PRIMARY KEY(leader_id, role_in_unit_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); + $this->addSql('CREATE TABLE profile (id BINARY(16) NOT NULL, firstname VARCHAR(255) NOT NULL, lastname VARCHAR(255) NOT NULL, phone VARCHAR(20) DEFAULT NULL, gender VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); + $this->addSql('CREATE TABLE reset_password_request (id INT AUTO_INCREMENT NOT NULL, selector VARCHAR(20) NOT NULL, hashed_token VARCHAR(100) NOT NULL, requested_at DATETIME NOT NULL, expires_at DATETIME NOT NULL, user_id BINARY(16) NOT NULL, INDEX IDX_7CE748AA76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); + $this->addSql('CREATE TABLE role_in_unit (id BINARY(16) NOT NULL, role VARCHAR(255) NOT NULL, unit_id BINARY(16) NOT NULL, UNIQUE INDEX UNIQ_4ACD96CCF8BD700D (unit_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); + $this->addSql('CREATE TABLE unit (id BINARY(16) NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, group_id BINARY(16) DEFAULT NULL, INDEX IDX_DCBB0C53FE54D947 (group_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); + $this->addSql('CREATE TABLE user (id BINARY(16) NOT NULL, is_first_login TINYINT(1) NOT NULL, password VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, email_address VARCHAR(180) NOT NULL, UNIQUE INDEX UNIQ_8D93D649B08E074E (email_address), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); + $this->addSql('CREATE TABLE user_person (user_id BINARY(16) NOT NULL, person_id BINARY(16) NOT NULL, INDEX IDX_518ECA4BA76ED395 (user_id), INDEX IDX_518ECA4B217BBB47 (person_id), PRIMARY KEY(user_id, person_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); + $this->addSql('CREATE TABLE messenger_messages (id BIGINT AUTO_INCREMENT NOT NULL, body LONGTEXT NOT NULL, headers LONGTEXT NOT NULL, queue_name VARCHAR(190) NOT NULL, created_at DATETIME NOT NULL, available_at DATETIME NOT NULL, delivered_at DATETIME DEFAULT NULL, INDEX IDX_75EA56E0FB7336F0 (queue_name), INDEX IDX_75EA56E0E3BD61CE (available_at), INDEX IDX_75EA56E016BA31DB (delivered_at), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); $this->addSql('ALTER TABLE person ADD CONSTRAINT FK_34DCD17671F741F2 FOREIGN KEY (medical_data_id) REFERENCES medical_data (id)'); $this->addSql('ALTER TABLE person ADD CONSTRAINT FK_34DCD176CCFA12B8 FOREIGN KEY (profile_id) REFERENCES profile (id)'); $this->addSql('ALTER TABLE person ADD CONSTRAINT FK_34DCD1765FE4FA6 FOREIGN KEY (parent1_profile_id) REFERENCES profile (id)'); @@ -40,7 +40,7 @@ public function up(Schema $schema): void $this->addSql('ALTER TABLE leader_role_in_unit ADD CONSTRAINT FK_2E1589A93C3A39CF FOREIGN KEY (role_in_unit_id) REFERENCES role_in_unit (id) ON DELETE CASCADE'); $this->addSql('ALTER TABLE reset_password_request ADD CONSTRAINT FK_7CE748AA76ED395 FOREIGN KEY (user_id) REFERENCES user (id)'); $this->addSql('ALTER TABLE role_in_unit ADD CONSTRAINT FK_4ACD96CCF8BD700D FOREIGN KEY (unit_id) REFERENCES unit (id)'); - $this->addSql('ALTER TABLE unit ADD CONSTRAINT FK_DCBB0C53FE54D947 FOREIGN KEY (group_id) REFERENCES `group` (id)'); + $this->addSql('ALTER TABLE unit ADD CONSTRAINT FK_DCBB0C53FE54D947 FOREIGN KEY (group_id) REFERENCES groups (id)'); $this->addSql('ALTER TABLE user_person ADD CONSTRAINT FK_518ECA4BA76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE'); $this->addSql('ALTER TABLE user_person ADD CONSTRAINT FK_518ECA4B217BBB47 FOREIGN KEY (person_id) REFERENCES person (id) ON DELETE CASCADE'); } @@ -60,7 +60,7 @@ public function down(Schema $schema): void $this->addSql('ALTER TABLE unit DROP FOREIGN KEY FK_DCBB0C53FE54D947'); $this->addSql('ALTER TABLE user_person DROP FOREIGN KEY FK_518ECA4BA76ED395'); $this->addSql('ALTER TABLE user_person DROP FOREIGN KEY FK_518ECA4B217BBB47'); - $this->addSql('DROP TABLE `group`'); + $this->addSql('DROP TABLE groups'); $this->addSql('DROP TABLE medical_data'); $this->addSql('DROP TABLE person'); $this->addSql('DROP TABLE leader_role_in_unit'); diff --git a/migrations/Version20241016152248.php b/migrations/Version20241016152248.php new file mode 100644 index 0000000..7ad092c --- /dev/null +++ b/migrations/Version20241016152248.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE profile ADD birth_date DATETIME DEFAULT NULL, ADD fiscal_code VARCHAR(16) DEFAULT NULL, ADD birth_address_country_code VARCHAR(3) NOT NULL, ADD birth_address_administrative_area VARCHAR(32) NOT NULL, ADD birth_address_locality VARCHAR(256) DEFAULT NULL, ADD birth_address_dependent_locality VARCHAR(256) DEFAULT NULL, ADD birth_address_postal_code VARCHAR(5) DEFAULT NULL, ADD birth_address_address_line1 VARCHAR(256) DEFAULT NULL, ADD birth_address_address_line2 VARCHAR(256) DEFAULT NULL, ADD birth_address_locale VARCHAR(2) DEFAULT NULL, ADD email_address VARCHAR(180) NOT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE profile DROP birth_date, DROP fiscal_code, DROP birth_address_country_code, DROP birth_address_administrative_area, DROP birth_address_locality, DROP birth_address_dependent_locality, DROP birth_address_postal_code, DROP birth_address_address_line1, DROP birth_address_address_line2, DROP birth_address_locale, DROP email_address'); + } +} diff --git a/src/Core/Domain/Command/ImportData.php b/src/Core/Domain/Command/ImportData.php new file mode 100644 index 0000000..1a7ce53 --- /dev/null +++ b/src/Core/Domain/Command/ImportData.php @@ -0,0 +1,17 @@ +filePath; + } +} diff --git a/src/Core/Domain/Command/ImportDataHandler.php b/src/Core/Domain/Command/ImportDataHandler.php new file mode 100644 index 0000000..6c16e6c --- /dev/null +++ b/src/Core/Domain/Command/ImportDataHandler.php @@ -0,0 +1,29 @@ +getFilePath(); + $this->dataImportService->import($fileToImportPath); + } catch (\Exception $e) { + $this->logger->error($e->getMessage()); + } + } +} diff --git a/src/Core/Domain/Model/Address.php b/src/Core/Domain/Model/Address.php new file mode 100644 index 0000000..7c27556 --- /dev/null +++ b/src/Core/Domain/Model/Address.php @@ -0,0 +1,85 @@ +addressLine1, $this->postalCode, $this->locality, $this->administrativeArea); + } + + public function isEmpty(): bool + { + return empty($this->countryCode) || empty($this->administrativeArea) || empty($this->locality); + } +} diff --git a/src/Core/Domain/Model/Group.php b/src/Core/Domain/Model/Group.php index 6cb6926..bddd568 100644 --- a/src/Core/Domain/Model/Group.php +++ b/src/Core/Domain/Model/Group.php @@ -9,14 +9,16 @@ use App\Core\Domain\Model\Traits\TimestampableEntity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; +use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping\Column; -use Doctrine\ORM\Mapping\Entity; +use Doctrine\ORM\Mapping\Embedded; use Doctrine\ORM\Mapping\Id; use Doctrine\ORM\Mapping\OneToMany; use Gedmo\Mapping\Annotation as Gedmo; use Symfony\Component\Uid\UuidV4; -#[Entity] +#[ORM\Entity] +#[ORM\Table(name: 'groups')] #[Gedmo\SoftDeleteable(fieldName: 'deletedAt')] class Group implements GroupInterface { @@ -31,8 +33,14 @@ class Group implements GroupInterface #[Column(type: 'string', length: 255)] private string $name; - #[Column(type: 'text')] - private string $description; + #[Column(type: 'string', length: 5)] + private string $codiceOrdinale; + + #[Column(type: 'string', length: 27)] + private string $iban; + + #[Embedded(class: 'App\Core\Domain\Model\Address', columnPrefix: 'address_')] + private Address $address; /** * @var \Doctrine\Common\Collections\Collection @@ -45,11 +53,16 @@ class Group implements GroupInterface */ public function __construct( string $name, - string $description, + string $codiceOrdinale, + string $iban, + Address $address, + ?UuidV4 $id = null, ) { - $this->id = new UuidV4(); + $this->id = $id ?: new UuidV4(); $this->name = $name; - $this->description = $description; + $this->codiceOrdinale = $codiceOrdinale; + $this->iban = $iban; + $this->address = $address; $this->units = new ArrayCollection(); } @@ -63,17 +76,36 @@ public function getName(): string return $this->name; } - public function getDescription(): string + public function getCodiceOrdinale(): string + { + return $this->codiceOrdinale; + } + + public function getIban(): string + { + return $this->iban; + } + + public function getAddress(): Address + { + return $this->address; + } + + public function getUnits(): Collection { - return $this->description; + return $this->units; } public function update( string $name, - string $description, + string $codiceOrdinale, + string $iban, + Address $address, ): self { $this->name = $name; - $this->description = $description; + $this->codiceOrdinale = $codiceOrdinale; + $this->iban = $iban; + $this->address = $address; return $this; } diff --git a/src/Core/Domain/Model/GroupInterface.php b/src/Core/Domain/Model/GroupInterface.php index 775270d..5bdb264 100644 --- a/src/Core/Domain/Model/GroupInterface.php +++ b/src/Core/Domain/Model/GroupInterface.php @@ -4,6 +4,7 @@ namespace App\Core\Domain\Model; +use Doctrine\Common\Collections\Collection; use Symfony\Component\Uid\UuidV4; /** @@ -15,11 +16,22 @@ public function getId(): UuidV4; public function getName(): string; - public function getDescription(): string; + public function getCodiceOrdinale(): string; + + public function getIban(): string; + + public function getAddress(): Address; + + /** + * @return Collection + */ + public function getUnits(): Collection; public function update( string $name, - string $description, + string $codiceOrdinale, + string $iban, + Address $address, ): self; /** diff --git a/src/Core/Domain/Model/GroupRepositoryInterface.php b/src/Core/Domain/Model/GroupRepositoryInterface.php new file mode 100644 index 0000000..1517f3e --- /dev/null +++ b/src/Core/Domain/Model/GroupRepositoryInterface.php @@ -0,0 +1,24 @@ + $rolesInUnits */ - #[ORM\ManyToMany(targetEntity: RoleInUnit::class, inversedBy: 'leaders')] + #[ORM\ManyToMany(targetEntity: RoleInUnit::class, inversedBy: 'leaders', cascade: ['persist'])] private Collection $rolesInUnits; #[ORM\OneToOne(cascade: ['persist', 'remove'])] private ?Profile $profile = null; - public function __construct() + public function __construct( + // @var Collection + Collection $rolesInUnit, + ?Profile $profile = null, + ?UuidV4 $id = null, + ) { - $this->id = new UuidV4(); - $this->rolesInUnits = new ArrayCollection(); + $this->rolesInUnits = $rolesInUnit; + $this->profile = $profile; + $this->id = $id ?: new UuidV4(); } /** diff --git a/src/Core/Domain/Model/Profile.php b/src/Core/Domain/Model/Profile.php index 8ed6a31..18da356 100644 --- a/src/Core/Domain/Model/Profile.php +++ b/src/Core/Domain/Model/Profile.php @@ -5,20 +5,23 @@ use App\Core\Domain\Model\Enum\Gender; use App\Core\Domain\Model\Traits\SoftDeleteableEntity; use App\Core\Domain\Model\Traits\TimestampableEntity; -use App\Core\Infrastructure\Persistence\Repository\ProfileRepository; use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping\Column; +use Doctrine\ORM\Mapping\Embedded; use Doctrine\ORM\Mapping\Id; use Gedmo\Mapping\Annotation as Gedmo; use Symfony\Component\Uid\UuidV4; -#[ORM\Entity(repositoryClass: ProfileRepository::class)] +#[ORM\Entity] #[Gedmo\SoftDeleteable(fieldName: 'deletedAt')] class Profile { use TimestampableEntity; use SoftDeleteableEntity; + #[Column(type: 'datetime', nullable: true)] + protected ?\DateTime $birthDate = null; + #[Id] #[Column(type: 'uuid', unique: true)] private UuidV4 $id; @@ -29,15 +32,41 @@ class Profile #[Column(length: 255)] private ?string $lastname = null; + #[Column(length: 16, nullable: true)] + private ?string $fiscalCode = null; + + #[Embedded(class: Address::class, columnPrefix: 'birth_address_')] + private Address $birthAddress; + + #[Embedded(class: Email::class, columnPrefix: 'email_')] + private EmailInterface $email; + #[Column(length: 20, nullable: true)] private ?string $phone = null; #[Column(enumType: Gender::class)] private ?Gender $gender = null; - public function __construct() - { - $this->id = new UuidV4(); + public function __construct( + string $firstname, + string $lastname, + Address $birthAddress, + \DateTime $birthDate, + string $fiscalCode, + EmailInterface $email, + string $phone, + Gender $gender, + ?UuidV4 $id = null, + ) { + $this->firstname = $firstname; + $this->lastname = $lastname; + $this->birthAddress = $birthAddress; + $this->birthDate = $birthDate; + $this->fiscalCode = $fiscalCode; + $this->email = $email; + $this->phone = $phone; + $this->gender = $gender; + $this->id = $id ?: new UuidV4(); } public function getId(): ?UuidV4 @@ -92,4 +121,71 @@ public function setGender(?Gender $gender): static return $this; } + + public function getFiscalCode(): ?string + { + return $this->fiscalCode; + } + + public function setFiscalCode(?string $fiscalCode): void + { + $this->fiscalCode = $fiscalCode; + } + + public function getBirthAddress(): Address + { + return $this->birthAddress; + } + + public function setBirthAddress(Address $birthAddress): void + { + $this->birthAddress = $birthAddress; + } + + public function getBirthDate(): ?\DateTime + { + return $this->birthDate; + } + + public function setBirthDate(?\DateTime $birthDate): void + { + $this->birthDate = $birthDate; + } + + public function getEmail(): EmailInterface + { + return $this->email; + } + + public function setEmail(EmailInterface $email): void + { + $this->email = $email; + } + + public function update( + string $firstname, + string $lastname, + Address $birthAddress, + \DateTime $birthDate, + string $fiscalCode, + EmailInterface $email, + string $phone, + Gender $gender, + ): self { + $this->firstname = $firstname; + $this->lastname = $lastname; + $this->birthAddress = $birthAddress; + $this->birthDate = $birthDate; + $this->fiscalCode = $fiscalCode; + $this->email = $email; + $this->phone = $phone; + $this->gender = $gender; + + return $this; + } + + public function equal(Profile $other): bool + { + return $this->getId() === $other->getId(); + } } diff --git a/src/Core/Domain/Model/ResetPasswordRequest.php b/src/Core/Domain/Model/ResetPasswordRequest.php index fc917b5..27e120a 100644 --- a/src/Core/Domain/Model/ResetPasswordRequest.php +++ b/src/Core/Domain/Model/ResetPasswordRequest.php @@ -2,12 +2,11 @@ namespace App\Core\Domain\Model; -use App\Core\Infrastructure\Persistence\Repository\ResetPasswordRequestRepository; use Doctrine\ORM\Mapping as ORM; use SymfonyCasts\Bundle\ResetPassword\Model\ResetPasswordRequestInterface; use SymfonyCasts\Bundle\ResetPassword\Model\ResetPasswordRequestTrait; -#[ORM\Entity(repositoryClass: ResetPasswordRequestRepository::class)] +#[ORM\Entity] class ResetPasswordRequest implements ResetPasswordRequestInterface { use ResetPasswordRequestTrait; diff --git a/src/Core/Domain/Model/RoleInUnit.php b/src/Core/Domain/Model/RoleInUnit.php index 9334dd3..ee0b982 100644 --- a/src/Core/Domain/Model/RoleInUnit.php +++ b/src/Core/Domain/Model/RoleInUnit.php @@ -22,9 +22,11 @@ class RoleInUnit #[ORM\JoinColumn(nullable: false)] private ?Unit $unit = null; - public function __construct() + public function __construct(Role $role, Unit $unit, ?UuidV4 $id = null) { - $this->id = new UuidV4(); + $this->role = $role; + $this->unit = $unit; + $this->id = $id ?: new UuidV4(); } public function getId(): UuidV4 diff --git a/src/Core/Domain/Model/Scout.php b/src/Core/Domain/Model/Scout.php index 83a7a84..e5a8d95 100644 --- a/src/Core/Domain/Model/Scout.php +++ b/src/Core/Domain/Model/Scout.php @@ -2,12 +2,11 @@ namespace App\Core\Domain\Model; -use App\Core\Infrastructure\Persistence\Repository\ScoutRepository; use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping\Column; use Symfony\Component\Uid\UuidV4; -#[ORM\Entity(repositoryClass: ScoutRepository::class)] +#[ORM\Entity] class Scout extends Person { #[Column(type: 'boolean')] diff --git a/src/Core/Domain/Model/Unit.php b/src/Core/Domain/Model/Unit.php index 67143b7..c53f347 100644 --- a/src/Core/Domain/Model/Unit.php +++ b/src/Core/Domain/Model/Unit.php @@ -27,7 +27,7 @@ class Unit implements UnitInterface #[Column(type: 'string', length: 255)] private string $name; - #[ManyToOne(targetEntity: 'App\Core\Domain\Model\Group', inversedBy: 'units')] + #[ManyToOne(targetEntity: Group::class, inversedBy: 'units')] #[JoinColumn(name: 'group_id', referencedColumnName: 'id')] private GroupInterface $group; @@ -36,11 +36,14 @@ class Unit implements UnitInterface public function __construct( string $name, + UnitType $type, GroupInterface $group, + ?UuidV4 $id = null, ) { - $this->id = new UuidV4(); $this->name = $name; $this->group = $group; + $this->type = $type; + $this->id = $id ?: new UuidV4(); } public function getGroup(): GroupInterface diff --git a/src/Core/Domain/Model/User.php b/src/Core/Domain/Model/User.php index 59a2d18..773c113 100644 --- a/src/Core/Domain/Model/User.php +++ b/src/Core/Domain/Model/User.php @@ -29,7 +29,7 @@ class User implements UserInterface #[Column(type: 'uuid')] private UuidV4 $id; - #[Embedded(class: 'App\Core\Domain\Model\UniqueEmail', columnPrefix: 'email_')] + #[Embedded(class: UniqueEmail::class, columnPrefix: 'email_')] private EmailInterface $email; #[Column(type: 'boolean')] diff --git a/src/Core/Domain/Service/DataImporterService.php b/src/Core/Domain/Service/DataImporterService.php new file mode 100644 index 0000000..5659a31 --- /dev/null +++ b/src/Core/Domain/Service/DataImporterService.php @@ -0,0 +1,111 @@ +exists([$fileToImportPath])) { + throw new \Exception('File not found: '.$fileToImportPath); + } + $reader = new Reader(); + $reader->open($fileToImportPath); + $groups = []; + $groupsProcessed = false; + $units = []; + $unitsProcessed = false; + $profiles = []; + $profilesProcessed = false; + $leaders = []; + $leadersProcessed = false; + $scouts = []; + $scoutsProcessed = false; + foreach ($reader->getSheetIterator() as $sheet) { + // only read data from "summary" sheet + $i = 0; + foreach ($sheet->getRowIterator() as $row) { + if (0 == $i) { + ++$i; + + continue; + } + + $rowData = []; + foreach ($row->getCells() as $cell) { + /** @var bool|int|string $value */ + $value = $cell->getValue(); + + $rowData[] = $value; + } + if (!empty($rowData) && self::EXECL_WORKSHEET_GROUPS === strtolower($sheet->getName())) { + $groups[] = $rowData; + } + if (!empty($rowData) && self::EXECL_WORKSHEET_UNITS === strtolower($sheet->getName())) { + $units[] = $rowData; + } + if (!empty($rowData) && self::EXECL_WORKSHEET_PROFILES === strtolower($sheet->getName())) { + $profiles[] = $rowData; + } + if (!empty($rowData) && self::EXECL_WORKSHEET_LEADERS === strtolower($sheet->getName())) { + $leaders[] = $rowData; + } + } + + if (!$groupsProcessed) { + $this->groupImporterService->processGroups($groups); + $groupsProcessed = true; + + continue; + } + + if (!$unitsProcessed) { + $this->unitImporterService->processUnits($units); + $unitsProcessed = true; + + continue; + } + + if (!$profilesProcessed) { + $this->profileImporterService->processProfiles($profiles); + $profilesProcessed = true; + + continue; + } + + if (!$leadersProcessed) { + $this->leaderImporterService->processLeaders($leaders); + $leadersProcessed = true; + + continue; + } + } + $reader->close(); + } catch (\Throwable $e) { + throw new \Exception('Exception at line '.$e->getLine().' [file: '.$e->getFile().'] :'.$e->getMessage(), $e->getCode()); + } + } +} diff --git a/src/Core/Domain/Service/GroupImporterService.php b/src/Core/Domain/Service/GroupImporterService.php new file mode 100644 index 0000000..eca48cb --- /dev/null +++ b/src/Core/Domain/Service/GroupImporterService.php @@ -0,0 +1,47 @@ +> $groups + */ + public function processGroups(array $groups): void + { + foreach ($groups as $rowData) { + $uuid = (string) $rowData[0]; + + /** @var ?GroupInterface $group */ + $group = $this->groupRepository->find($uuid); + if (null !== $group) { + continue; + } + $group = new Group( + name: (string) $rowData[1], + codiceOrdinale: (string) $rowData[2], + iban: (string) $rowData[3], + address: new Address( + countryCode: 'IT', + administrativeArea: (string) $rowData[7], + locality: (string) $rowData[5], + postalCode: (string) $rowData[6], + addressLine1: (string) $rowData[4], + locale: 'it' + ), + id: new UuidV4($uuid) + ); + $this->groupRepository->add($group); + } + } +} diff --git a/src/Core/Domain/Service/LeaderImporterService.php b/src/Core/Domain/Service/LeaderImporterService.php new file mode 100644 index 0000000..468bc9b --- /dev/null +++ b/src/Core/Domain/Service/LeaderImporterService.php @@ -0,0 +1,63 @@ +> $leaders + */ + public function processLeaders(array $leaders): void + { + foreach ($leaders as $rowData) { + $leader = $this->leaderRepository->find((string)$rowData[0]); + if (null !== $leader) { + continue; + } + + $roleInUnit = null; + $unit = $this->unitRepository->find((string)$rowData[1]); + if (null !== $unit) { + $roleInUnit = new RoleInUnit( + Role::from((string)$rowData[3]), + $unit, + ); + } else { + throw new \Exception('Unknown unit with id: ' . $rowData[1]); + } + + $profile = $this->profileRepository->find((string)$rowData[2]); + if (null === $profile) { + throw new \Exception('Unknown profile with id: ' . $rowData[2]); + } + + $rolesInUnits = new ArrayCollection(); + $rolesInUnits->add($roleInUnit); + + $leader = new Leader( + rolesInUnit: $rolesInUnits, + profile: $profile, + id: new UuidV4((string)$rowData[0]) + ); + $this->leaderRepository->add($leader); + } + } +} diff --git a/src/Core/Domain/Service/ProfileImporterService.php b/src/Core/Domain/Service/ProfileImporterService.php new file mode 100644 index 0000000..4942a07 --- /dev/null +++ b/src/Core/Domain/Service/ProfileImporterService.php @@ -0,0 +1,57 @@ +> $profiles + */ + public function processProfiles(array $profiles): void + { + foreach ($profiles as $rowData) { + $profile = $this->profileRepository->find((string) $rowData[0]); + if (null !== $profile) { + continue; + } + + /** @var \DateTimeInterface $birthDate */ + $birthDate = $rowData[5]; + if (!$birthDate instanceof \DateTimeInterface) { + throw new \RuntimeException('Invalid birth date'); + } + $birthDate = (new \DateTime())->setTimestamp($birthDate->getTimestamp()); + + $profile = new Profile( + firstname: (string) $rowData[1], + lastname: (string) $rowData[2], + birthAddress: new Address( + countryCode: 'IT', + administrativeArea: (string) $rowData[3], + locality: (string) $rowData[4], + postalCode: '', + addressLine1: '', + locale: 'it' + ), + birthDate: $birthDate, + fiscalCode: (string) $rowData[6], + email: (isset($rowData[9]) ? new Email((string) $rowData[9]) : new Email('')), + phone: (string) ($rowData[8] ?? ''), + gender: Gender::UNDEFINED, + id: new UuidV4((string) $rowData[0]), + ); + $this->profileRepository->add($profile); + } + } +} diff --git a/src/Core/Domain/Service/UnitImporterService.php b/src/Core/Domain/Service/UnitImporterService.php new file mode 100644 index 0000000..347a3b8 --- /dev/null +++ b/src/Core/Domain/Service/UnitImporterService.php @@ -0,0 +1,46 @@ +> $units + */ + public function processUnits(array $units): void + { + foreach ($units as $rowData) { + $type = UnitType::tryFrom(strtolower((string) $rowData[3])); + if (null === $type) { + throw new \Exception('Unknown unit type: '.$rowData[3]); + } + + /** @var GroupInterface $group */ + $group = $this->groupRepository->find((string) $rowData[1]); + $unit = $this->unitRepository->find((string) $rowData[0]); + if (null !== $unit) { + continue; + } + + $unit = new Unit( + name: (string) $rowData[1], + type: $type, + group: $group, + id: new UuidV4((string) $rowData[0]) + ); + $this->unitRepository->add($unit); + } + } +} diff --git a/src/Core/Infrastructure/Persistence/Repository/GroupRepository.php b/src/Core/Infrastructure/Persistence/Repository/GroupRepository.php index 4f52bc7..4738840 100644 --- a/src/Core/Infrastructure/Persistence/Repository/GroupRepository.php +++ b/src/Core/Infrastructure/Persistence/Repository/GroupRepository.php @@ -66,4 +66,16 @@ public function findAll(bool $allowDeleted = false): array return $this->objectRepository->findAll(); } + + public function add(Group $group): void + { + $this->entityManager->persist($group); + $this->entityManager->flush(); + } + + public function delete(Group $group): void + { + $this->entityManager->remove($group); + $this->entityManager->flush(); + } } diff --git a/src/Core/Infrastructure/Persistence/Repository/LeaderRepository.php b/src/Core/Infrastructure/Persistence/Repository/LeaderRepository.php index aca137b..8e2b8ee 100644 --- a/src/Core/Infrastructure/Persistence/Repository/LeaderRepository.php +++ b/src/Core/Infrastructure/Persistence/Repository/LeaderRepository.php @@ -1,18 +1,49 @@ - */ -class LeaderRepository extends ServiceEntityRepository +class LeaderRepository { - public function __construct(ManagerRegistry $registry) + private EntityManagerInterface $entityManager; + + /** + * @var EntityRepository + */ + private EntityRepository $objectRepository; + + public function __construct(EntityManagerInterface $entityManager) + { + $this->entityManager = $entityManager; + + $repository = $this->entityManager->getRepository(Leader::class); + assert($repository instanceof EntityRepository); + $this->objectRepository = $repository; + } + + public function find(string $id, bool $allowDeleted = false): ?Leader + { + if ($allowDeleted && $this->entityManager->getFilters()->isEnabled('softdeleteable')) { + $this->entityManager->getFilters()->disable('softdeleteable'); + } + + return $this->objectRepository->find($id); + } + + public function add(Leader $leader): void + { + $this->entityManager->persist($leader); + $this->entityManager->flush(); + } + + public function delete(Leader $leader): void { - parent::__construct($registry, Leader::class); + $this->entityManager->remove($leader); + $this->entityManager->flush(); } } diff --git a/src/Core/Infrastructure/Persistence/Repository/ProfileRepository.php b/src/Core/Infrastructure/Persistence/Repository/ProfileRepository.php index b4c76df..f389468 100644 --- a/src/Core/Infrastructure/Persistence/Repository/ProfileRepository.php +++ b/src/Core/Infrastructure/Persistence/Repository/ProfileRepository.php @@ -1,18 +1,65 @@ - */ -class ProfileRepository extends ServiceEntityRepository +class ProfileRepository { - public function __construct(ManagerRegistry $registry) + private EntityManagerInterface $entityManager; + + /** + * @var \Doctrine\ORM\EntityRepository + */ + private EntityRepository $objectRepository; + + public function __construct(EntityManagerInterface $entityManager) + { + $this->entityManager = $entityManager; + + $repository = $this->entityManager->getRepository(Profile::class); + assert($repository instanceof EntityRepository); + $this->objectRepository = $repository; + } + + /** + * @return \App\Core\Domain\Model\Profile[] + */ + public function all(): array + { + return $this->objectRepository->findAll(); + } + + public function find(string $id, bool $allowDeleted = false): ?Profile + { + if ($allowDeleted && $this->entityManager->getFilters()->isEnabled('softdeleteable')) { + $this->entityManager->getFilters()->disable('softdeleteable'); + } + + return $this->objectRepository->find($id); + } + + public function add(Profile $profile): void + { + $this->entityManager->persist($profile); + $this->entityManager->flush(); + } + + public function delete(Profile $user): void + { + $this->entityManager->remove($user); + $this->entityManager->flush(); + } + + public function count(): int { - parent::__construct($registry, Profile::class); + return intval($this->objectRepository->createQueryBuilder('u') + ->select('count(u.id)') + ->getQuery() + ->getSingleScalarResult()); } } diff --git a/src/Core/Infrastructure/Persistence/Repository/UnitRepository.php b/src/Core/Infrastructure/Persistence/Repository/UnitRepository.php index 7db836e..21ae4c5 100644 --- a/src/Core/Infrastructure/Persistence/Repository/UnitRepository.php +++ b/src/Core/Infrastructure/Persistence/Repository/UnitRepository.php @@ -56,4 +56,10 @@ public function find(string $id, bool $allowDeleted = false): ?Unit return $this->objectRepository->find($id); } + + public function add(Unit $unit): void + { + $this->entityManager->persist($unit); + $this->entityManager->flush(); + } } diff --git a/src/Core/Presentation/Command/ImportDataCommand.php b/src/Core/Presentation/Command/ImportDataCommand.php new file mode 100644 index 0000000..4a5e5e1 --- /dev/null +++ b/src/Core/Presentation/Command/ImportDataCommand.php @@ -0,0 +1,60 @@ +io = new SymfonyStyle($input, $output); + } + + protected function configure(): void + { + $this->setHelp('This command allows you to create a new group'); + $this->addArgument('fileToImport', InputArgument::REQUIRED, 'XLSX File to import'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + try { + $fileToImport = $input->getArgument('fileToImport'); + $this->io->info('File to import set to: '.$fileToImport); + $this->dataImportService->import($fileToImport); + $this->io->info('Import complete for file: '.$fileToImport); + } catch (\Throwable $e) { + $this->logger->error($e->getMessage()); + $this->io->error($e->getMessage().', stacktrace: '.$e->getTraceAsString()); + + return Command::FAILURE; + } + + return Command::SUCCESS; + } +} diff --git a/templates/home_page/index.html.twig b/templates/home_page/index.html.twig index 21d1e3e..acaf5c0 100644 --- a/templates/home_page/index.html.twig +++ b/templates/home_page/index.html.twig @@ -16,7 +16,8 @@
@@ -46,7 +48,8 @@ -