diff --git a/composer.json b/composer.json index 1d8c99d..f52297a 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "doctrine/orm": "^3.3", "embed/embed": "^4.4", "gedmo/doctrine-extensions": "^3.22", - "goteo/benzina": "^0.5", + "goteo/benzina": "^0.6.0", "jolicode/automapper": "9.2.1", "knpuniversity/oauth2-client-bundle": "^2.20", "kyzegs/doctrine-encryption-bundle": "^1.1", diff --git a/composer.lock b/composer.lock index c47d913..d7af667 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": "f9b4c951ba8f2afcc4cedfba6827a654", + "content-hash": "9230762cbf676fa02e262fc9ffa99c80", "packages": [ { "name": "api-platform/doctrine-common", @@ -1637,16 +1637,16 @@ }, { "name": "doctrine/dbal", - "version": "3.10.5", + "version": "3.10.6", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "95d84866bf3c04b2ddca1df7c049714660959aef" + "reference": "c95589d775a0b2e543467d40f8c3ecccf586f2b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/95d84866bf3c04b2ddca1df7c049714660959aef", - "reference": "95d84866bf3c04b2ddca1df7c049714660959aef", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/c95589d775a0b2e543467d40f8c3ecccf586f2b4", + "reference": "c95589d775a0b2e543467d40f8c3ecccf586f2b4", "shasum": "" }, "require": { @@ -1731,7 +1731,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.10.5" + "source": "https://github.com/doctrine/dbal/tree/3.10.6" }, "funding": [ { @@ -1747,7 +1747,7 @@ "type": "tidelift" } ], - "time": "2026-02-24T08:03:57+00:00" + "time": "2026-07-21T12:57:49+00:00" }, { "name": "doctrine/deprecations", @@ -1799,16 +1799,16 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.18.3", + "version": "2.19.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "241d61f6bbc77275d5a9f95d514241c058bf2d0a" + "reference": "07b90f707b82981097731c419f546e7ba97fba3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/241d61f6bbc77275d5a9f95d514241c058bf2d0a", - "reference": "241d61f6bbc77275d5a9f95d514241c058bf2d0a", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/07b90f707b82981097731c419f546e7ba97fba3c", + "reference": "07b90f707b82981097731c419f546e7ba97fba3c", "shasum": "" }, "require": { @@ -1830,7 +1830,7 @@ "doctrine/cache": "< 1.11", "doctrine/orm": "<2.17 || >=4.0", "symfony/var-exporter": "< 6.4.1 || 7.0.0", - "twig/twig": "<2.13 || >=3.0 <3.0.4" + "twig/twig": "<2.13 || >=3.0 <3.0.4 || >=5" }, "require-dev": { "doctrine/annotations": "^1 || ^2", @@ -1844,10 +1844,12 @@ "phpunit/phpunit": "^10.5.53 || ^12.3.10", "psr/log": "^1.1.4 || ^2.0 || ^3.0", "symfony/doctrine-messenger": "^6.4 || ^7.0", + "symfony/event-dispatcher": "^6.4 || ^7.0", "symfony/expression-language": "^6.4 || ^7.0", "symfony/http-kernel": "^6.4 || ^7.0", "symfony/messenger": "^6.4 || ^7.0", "symfony/property-info": "^6.4 || ^7.0", + "symfony/runtime": "^6.4 || ^7.0", "symfony/security-bundle": "^6.4 || ^7.0", "symfony/stopwatch": "^6.4 || ^7.0", "symfony/string": "^6.4 || ^7.0", @@ -1856,7 +1858,7 @@ "symfony/var-exporter": "^6.4.1 || ^7.0.1", "symfony/web-profiler-bundle": "^6.4 || ^7.0", "symfony/yaml": "^6.4 || ^7.0", - "twig/twig": "^2.14.7 || ^3.0.4" + "twig/twig": "^2.14.7 || ^3.0.4 || ^4" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -1901,7 +1903,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.3" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.19.0" }, "funding": [ { @@ -1917,7 +1919,7 @@ "type": "tidelift" } ], - "time": "2026-06-08T08:22:50+00:00" + "time": "2026-07-23T14:52:05+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", @@ -2437,16 +2439,16 @@ }, { "name": "doctrine/orm", - "version": "3.6.7", + "version": "3.6.8", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "bc217c0e19c3a9eadfa67697143b87c9ba01272c" + "reference": "a4d13ed5b11e7f7b4d654b1adf95432031ae3ffc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/bc217c0e19c3a9eadfa67697143b87c9ba01272c", - "reference": "bc217c0e19c3a9eadfa67697143b87c9ba01272c", + "url": "https://api.github.com/repos/doctrine/orm/zipball/a4d13ed5b11e7f7b4d654b1adf95432031ae3ffc", + "reference": "a4d13ed5b11e7f7b4d654b1adf95432031ae3ffc", "shasum": "" }, "require": { @@ -2476,6 +2478,7 @@ "symfony/cache": "^5.4 || ^6.2 || ^7.0 || ^8.0" }, "suggest": { + "ext-deepclone": "Improves performance when not using native lazy objects (Symfony 8.1+)", "ext-dom": "Provides support for XSD validation for XML mapping files", "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" }, @@ -2519,9 +2522,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/3.6.7" + "source": "https://github.com/doctrine/orm/tree/3.6.8" }, - "time": "2026-05-25T16:45:47+00:00" + "time": "2026-08-05T19:05:32+00:00" }, { "name": "doctrine/persistence", @@ -2826,16 +2829,16 @@ }, { "name": "gedmo/doctrine-extensions", - "version": "v3.22.0", + "version": "v3.22.1", "source": { "type": "git", "url": "https://github.com/doctrine-extensions/DoctrineExtensions.git", - "reference": "e4350ee2daa7f34aa5806f2e1ea11fa4b5800e57" + "reference": "a973a68a990392b96f5ccbd4d713ae33e4bde95f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/e4350ee2daa7f34aa5806f2e1ea11fa4b5800e57", - "reference": "e4350ee2daa7f34aa5806f2e1ea11fa4b5800e57", + "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/a973a68a990392b96f5ccbd4d713ae33e4bde95f", + "reference": "a973a68a990392b96f5ccbd4d713ae33e4bde95f", "shasum": "" }, "require": { @@ -2934,7 +2937,7 @@ "support": { "docs": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/main/doc", "issues": "https://github.com/doctrine-extensions/DoctrineExtensions/issues", - "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.22.0" + "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.22.1" }, "funding": [ { @@ -2954,27 +2957,26 @@ "type": "github" } ], - "time": "2025-12-13T19:37:35+00:00" + "time": "2026-08-01T13:57:40+00:00" }, { "name": "goteo/benzina", - "version": "0.5.2", + "version": "0.6", "source": { "type": "git", "url": "https://github.com/goteo/benzina.git", - "reference": "5fafb74117704e5b778232d39811b6e66884ba56" + "reference": "acceb2150fc08457a019bd85da46fdd5888dab11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/goteo/benzina/zipball/5fafb74117704e5b778232d39811b6e66884ba56", - "reference": "5fafb74117704e5b778232d39811b6e66884ba56", + "url": "https://api.github.com/repos/goteo/benzina/zipball/acceb2150fc08457a019bd85da46fdd5888dab11", + "reference": "acceb2150fc08457a019bd85da46fdd5888dab11", "shasum": "" }, "require": { "doctrine/orm": "^3.3", "ext-ctype": "*", "ext-iconv": "*", - "ocramius/doctrine-batch-utils": "^2.10", "php": ">=8.1", "symfony/console": "6.4.*", "symfony/dotenv": "6.4.*", @@ -3013,9 +3015,9 @@ "description": "Migration tool to pump v3 data into a v4 schema", "support": { "issues": "https://github.com/goteo/benzina/issues", - "source": "https://github.com/goteo/benzina/tree/0.5.2" + "source": "https://github.com/goteo/benzina/tree/0.6" }, - "time": "2025-10-21T10:06:39+00:00" + "time": "2026-07-30T14:13:45+00:00" }, { "name": "guzzlehttp/guzzle", @@ -4588,70 +4590,6 @@ ], "time": "2024-09-09T07:06:30+00:00" }, - { - "name": "ocramius/doctrine-batch-utils", - "version": "2.11.0", - "source": { - "type": "git", - "url": "https://github.com/Ocramius/DoctrineBatchUtils.git", - "reference": "35b164ea216da00ecccde6a0152f8be67bfb841f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Ocramius/DoctrineBatchUtils/zipball/35b164ea216da00ecccde6a0152f8be67bfb841f", - "reference": "35b164ea216da00ecccde6a0152f8be67bfb841f", - "shasum": "" - }, - "require": { - "doctrine/orm": "^3.3.2", - "doctrine/persistence": "^4.0.0", - "php": "~8.2.0 || ~8.3.0 || ~8.4.0" - }, - "require-dev": { - "doctrine/coding-standard": "^12.0.0", - "doctrine/dbal": "^4.2.2", - "phpunit/phpunit": "^11.5.6", - "psalm/plugin-phpunit": "^0.19.2", - "roave/infection-static-analysis-plugin": "^1.36.0", - "vimeo/psalm": "^6.3.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "DoctrineBatchUtils\\": "src/DoctrineBatchUtils" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.io/" - } - ], - "description": "A set of utilities to operate with Doctrine ORM's batch processing functionality", - "homepage": "https://github.com/Ocramius/DoctrineBatchUtils", - "keywords": [ - "batch processing", - "doctrine", - "doctrine2", - "orm" - ], - "support": { - "issues": "https://github.com/Ocramius/DoctrineBatchUtils/issues", - "source": "https://github.com/Ocramius/DoctrineBatchUtils/tree/2.11.0" - }, - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - } - ], - "time": "2025-02-05T12:04:35+00:00" - }, { "name": "oscarotero/html-parser", "version": "v0.1.8", @@ -5996,16 +5934,16 @@ }, { "name": "symfony/cache", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "704edf29f1c97ff6e36e248def6ff4a51f765ce1" + "reference": "8f0b5de5d9f5131aa99fdab78d7802efef9322dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/704edf29f1c97ff6e36e248def6ff4a51f765ce1", - "reference": "704edf29f1c97ff6e36e248def6ff4a51f765ce1", + "url": "https://api.github.com/repos/symfony/cache/zipball/8f0b5de5d9f5131aa99fdab78d7802efef9322dc", + "reference": "8f0b5de5d9f5131aa99fdab78d7802efef9322dc", "shasum": "" }, "require": { @@ -6072,7 +6010,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.42" + "source": "https://github.com/symfony/cache/tree/v6.4.43" }, "funding": [ { @@ -6092,7 +6030,7 @@ "type": "tidelift" } ], - "time": "2026-06-17T14:17:34+00:00" + "time": "2026-07-28T21:33:22+00:00" }, { "name": "symfony/cache-contracts", @@ -6254,16 +6192,16 @@ }, { "name": "symfony/config", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "922d980c90a69ffdd63e6ee551efb338b58be677" + "reference": "e39cdd91b2adf67a117bea29660b73d896937d86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/922d980c90a69ffdd63e6ee551efb338b58be677", - "reference": "922d980c90a69ffdd63e6ee551efb338b58be677", + "url": "https://api.github.com/repos/symfony/config/zipball/e39cdd91b2adf67a117bea29660b73d896937d86", + "reference": "e39cdd91b2adf67a117bea29660b73d896937d86", "shasum": "" }, "require": { @@ -6309,7 +6247,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.4.42" + "source": "https://github.com/symfony/config/tree/v6.4.43" }, "funding": [ { @@ -6329,20 +6267,20 @@ "type": "tidelift" } ], - "time": "2026-06-09T07:36:15+00:00" + "time": "2026-07-21T09:46:53+00:00" }, { "name": "symfony/console", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "9ef84af84a7b66396da483634227650506428639" + "reference": "3b643aa587acbc42f967a429af088a56ed8f046d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/9ef84af84a7b66396da483634227650506428639", - "reference": "9ef84af84a7b66396da483634227650506428639", + "url": "https://api.github.com/repos/symfony/console/zipball/3b643aa587acbc42f967a429af088a56ed8f046d", + "reference": "3b643aa587acbc42f967a429af088a56ed8f046d", "shasum": "" }, "require": { @@ -6407,7 +6345,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.42" + "source": "https://github.com/symfony/console/tree/v6.4.43" }, "funding": [ { @@ -6427,20 +6365,20 @@ "type": "tidelift" } ], - "time": "2026-06-15T05:35:29+00:00" + "time": "2026-07-26T14:44:19+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "ba3538ae8d14dd9a3a8758229e8ddaeff1a23643" + "reference": "f11815fd2f5f80ce94bf527b5ecfd4bd0b1cc905" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ba3538ae8d14dd9a3a8758229e8ddaeff1a23643", - "reference": "ba3538ae8d14dd9a3a8758229e8ddaeff1a23643", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f11815fd2f5f80ce94bf527b5ecfd4bd0b1cc905", + "reference": "f11815fd2f5f80ce94bf527b5ecfd4bd0b1cc905", "shasum": "" }, "require": { @@ -6492,7 +6430,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/v6.4.42" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.43" }, "funding": [ { @@ -6512,7 +6450,7 @@ "type": "tidelift" } ], - "time": "2026-06-08T07:06:12+00:00" + "time": "2026-07-20T15:13:12+00:00" }, { "name": "symfony/deprecation-contracts", @@ -6587,16 +6525,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "5508d06e0b97526c2ebcba094412ac25d221af8d" + "reference": "653001640a2ba86bb5fcec7f58832b74e6b3aa76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/5508d06e0b97526c2ebcba094412ac25d221af8d", - "reference": "5508d06e0b97526c2ebcba094412ac25d221af8d", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/653001640a2ba86bb5fcec7f58832b74e6b3aa76", + "reference": "653001640a2ba86bb5fcec7f58832b74e6b3aa76", "shasum": "" }, "require": { @@ -6675,7 +6613,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.42" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.43" }, "funding": [ { @@ -6695,20 +6633,20 @@ "type": "tidelift" } ], - "time": "2026-06-16T10:12:24+00:00" + "time": "2026-07-21T10:19:36+00:00" }, { "name": "symfony/dotenv", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "d71597dab17919afbdffa4de14177137a4d56fdc" + "reference": "9b827002b54f89a5ac605c21c349a42161996afb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/d71597dab17919afbdffa4de14177137a4d56fdc", - "reference": "d71597dab17919afbdffa4de14177137a4d56fdc", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/9b827002b54f89a5ac605c21c349a42161996afb", + "reference": "9b827002b54f89a5ac605c21c349a42161996afb", "shasum": "" }, "require": { @@ -6753,7 +6691,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.4.42" + "source": "https://github.com/symfony/dotenv/tree/v6.4.43" }, "funding": [ { @@ -6773,20 +6711,20 @@ "type": "tidelift" } ], - "time": "2026-06-05T06:18:55+00:00" + "time": "2026-07-26T10:10:07+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.36", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "2ea68f0e1835ad6a126f93bbc14cd236c10ab361" + "reference": "ecec4c500623ee0ac0c925c3426bcb3e7f429b14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/2ea68f0e1835ad6a126f93bbc14cd236c10ab361", - "reference": "2ea68f0e1835ad6a126f93bbc14cd236c10ab361", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/ecec4c500623ee0ac0c925c3426bcb3e7f429b14", + "reference": "ecec4c500623ee0ac0c925c3426bcb3e7f429b14", "shasum": "" }, "require": { @@ -6832,7 +6770,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/v6.4.36" + "source": "https://github.com/symfony/error-handler/tree/v6.4.43" }, "funding": [ { @@ -6852,20 +6790,20 @@ "type": "tidelift" } ], - "time": "2026-03-10T15:56:14+00:00" + "time": "2026-07-21T10:11:50+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.37", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "2e3bf817ba9347341ab15926700fb6320367c0e1" + "reference": "ac405d324c10ebbbde6a6e58379bf81db10f1dbf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2e3bf817ba9347341ab15926700fb6320367c0e1", - "reference": "2e3bf817ba9347341ab15926700fb6320367c0e1", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ac405d324c10ebbbde6a6e58379bf81db10f1dbf", + "reference": "ac405d324c10ebbbde6a6e58379bf81db10f1dbf", "shasum": "" }, "require": { @@ -6916,7 +6854,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.37" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.43" }, "funding": [ { @@ -6936,7 +6874,7 @@ "type": "tidelift" } ], - "time": "2026-04-13T14:11:12+00:00" + "time": "2026-07-21T14:00:19+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -7088,16 +7026,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.39", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "c507b077756b4e3e09adbbe7975fac81cd3722ca" + "reference": "9ff03da12d67649fbd1f34ca95951554624d0a16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/c507b077756b4e3e09adbbe7975fac81cd3722ca", - "reference": "c507b077756b4e3e09adbbe7975fac81cd3722ca", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/9ff03da12d67649fbd1f34ca95951554624d0a16", + "reference": "9ff03da12d67649fbd1f34ca95951554624d0a16", "shasum": "" }, "require": { @@ -7134,7 +7072,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.39" + "source": "https://github.com/symfony/filesystem/tree/v6.4.43" }, "funding": [ { @@ -7154,7 +7092,7 @@ "type": "tidelift" } ], - "time": "2026-05-07T13:11:42+00:00" + "time": "2026-06-27T10:13:35+00:00" }, { "name": "symfony/finder", @@ -7299,16 +7237,16 @@ }, { "name": "symfony/framework-bundle", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "fde24f8e5f6aeadbc092ed894d569846c8bc1304" + "reference": "dcec940410874561f58edb75e2f3574c8a1340d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/fde24f8e5f6aeadbc092ed894d569846c8bc1304", - "reference": "fde24f8e5f6aeadbc092ed894d569846c8bc1304", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/dcec940410874561f58edb75e2f3574c8a1340d3", + "reference": "dcec940410874561f58edb75e2f3574c8a1340d3", "shasum": "" }, "require": { @@ -7336,7 +7274,7 @@ "symfony/asset": "<5.4", "symfony/asset-mapper": "<6.4", "symfony/clock": "<6.3", - "symfony/console": "<5.4|>=7.0", + "symfony/console": "<6.4.43|>=7.0", "symfony/dom-crawler": "<6.4", "symfony/dotenv": "<5.4", "symfony/form": "<5.4", @@ -7370,7 +7308,7 @@ "symfony/asset-mapper": "^6.4|^7.0", "symfony/browser-kit": "^5.4|^6.0|^7.0", "symfony/clock": "^6.2|^7.0", - "symfony/console": "^5.4.9|^6.0.9|^7.0", + "symfony/console": "^6.4.43|^7.0", "symfony/css-selector": "^5.4|^6.0|^7.0", "symfony/dom-crawler": "^6.4|^7.0", "symfony/dotenv": "^5.4|^6.0|^7.0", @@ -7400,7 +7338,7 @@ "symfony/web-link": "^5.4|^6.0|^7.0", "symfony/workflow": "^6.4|^7.0", "symfony/yaml": "^5.4|^6.0|^7.0", - "twig/twig": "^2.10|^3.0.4" + "twig/twig": "^2.10|^3.0.4|^4.0" }, "type": "symfony-bundle", "autoload": { @@ -7428,7 +7366,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/v6.4.42" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.43" }, "funding": [ { @@ -7448,20 +7386,20 @@ "type": "tidelift" } ], - "time": "2026-06-16T07:50:05+00:00" + "time": "2026-07-26T09:00:38+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "b71b312ca0f211fbb19a20a51bde50fbefb66a99" + "reference": "38540911e9e3c3ca12e562dcce758d9bfcfa7cdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/b71b312ca0f211fbb19a20a51bde50fbefb66a99", - "reference": "b71b312ca0f211fbb19a20a51bde50fbefb66a99", + "url": "https://api.github.com/repos/symfony/http-client/zipball/38540911e9e3c3ca12e562dcce758d9bfcfa7cdd", + "reference": "38540911e9e3c3ca12e562dcce758d9bfcfa7cdd", "shasum": "" }, "require": { @@ -7526,7 +7464,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.42" + "source": "https://github.com/symfony/http-client/tree/v6.4.43" }, "funding": [ { @@ -7546,7 +7484,7 @@ "type": "tidelift" } ], - "time": "2026-06-12T09:42:32+00:00" + "time": "2026-07-29T06:36:08+00:00" }, { "name": "symfony/http-client-contracts", @@ -7632,16 +7570,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "23dcf8e0f59cbbfa9d2894f58fd8be6833794372" + "reference": "ea0c801ec34e9017a8c9363e55c8ef5f1717216e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/23dcf8e0f59cbbfa9d2894f58fd8be6833794372", - "reference": "23dcf8e0f59cbbfa9d2894f58fd8be6833794372", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ea0c801ec34e9017a8c9363e55c8ef5f1717216e", + "reference": "ea0c801ec34e9017a8c9363e55c8ef5f1717216e", "shasum": "" }, "require": { @@ -7689,7 +7627,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.42" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.43" }, "funding": [ { @@ -7709,20 +7647,20 @@ "type": "tidelift" } ], - "time": "2026-06-16T10:12:24+00:00" + "time": "2026-07-29T06:55:26+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "51fd5bb7d4f221ceeac927e14ade63962e27a47c" + "reference": "cc35556a9bc9e9a6a35fb1114609d1e3c9a63738" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/51fd5bb7d4f221ceeac927e14ade63962e27a47c", - "reference": "51fd5bb7d4f221ceeac927e14ade63962e27a47c", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/cc35556a9bc9e9a6a35fb1114609d1e3c9a63738", + "reference": "cc35556a9bc9e9a6a35fb1114609d1e3c9a63738", "shasum": "" }, "require": { @@ -7779,7 +7717,7 @@ "symfony/validator": "^6.4|^7.0", "symfony/var-dumper": "^5.4|^6.4|^7.0", "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "twig/twig": "^2.13|^3.0.4|^4.0" }, "type": "library", "autoload": { @@ -7807,7 +7745,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/v6.4.42" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.43" }, "funding": [ { @@ -7827,7 +7765,7 @@ "type": "tidelift" } ], - "time": "2026-06-27T09:10:20+00:00" + "time": "2026-07-29T11:30:30+00:00" }, { "name": "symfony/intl", @@ -8100,16 +8038,16 @@ }, { "name": "symfony/monolog-bridge", - "version": "v6.4.40", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "85500da808ce785c6c95fafdbc226cd8af349007" + "reference": "68e9e40663e8af73901653f49ca149d13b6b581e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/85500da808ce785c6c95fafdbc226cd8af349007", - "reference": "85500da808ce785c6c95fafdbc226cd8af349007", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/68e9e40663e8af73901653f49ca149d13b6b581e", + "reference": "68e9e40663e8af73901653f49ca149d13b6b581e", "shasum": "" }, "require": { @@ -8159,7 +8097,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.40" + "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.43" }, "funding": [ { @@ -8179,7 +8117,7 @@ "type": "tidelift" } ], - "time": "2026-05-19T20:33:22+00:00" + "time": "2026-07-26T13:45:43+00:00" }, { "name": "symfony/monolog-bundle", @@ -8339,16 +8277,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.38.1", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603" + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", "shasum": "" }, "require": { @@ -8397,7 +8335,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.41.0" }, "funding": [ { @@ -8417,7 +8355,7 @@ "type": "tidelift" } ], - "time": "2026-05-26T05:58:03+00:00" + "time": "2026-07-28T08:25:59+00:00" }, { "name": "symfony/polyfill-intl-normalizer", @@ -8591,16 +8529,16 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.38.2", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8" + "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/796a26abb75ce49f3a84433cd81bf1009d73d5f8", - "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/5ea99087fb99c273a9b9236ed4c31e78b16103c6", + "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6", "shasum": "" }, "require": { @@ -8647,7 +8585,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.38.2" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.41.0" }, "funding": [ { @@ -8667,7 +8605,7 @@ "type": "tidelift" } ], - "time": "2026-05-27T06:51:48+00:00" + "time": "2026-07-01T12:47:55+00:00" }, { "name": "symfony/polyfill-php84", @@ -8980,16 +8918,16 @@ }, { "name": "symfony/property-info", - "version": "v6.4.34", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "916455e4c9dcddbebfd101f29d7983841c3564e0" + "reference": "ff32a0d7885f6f8997ee0aca499fd008852ad5bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/916455e4c9dcddbebfd101f29d7983841c3564e0", - "reference": "916455e4c9dcddbebfd101f29d7983841c3564e0", + "url": "https://api.github.com/repos/symfony/property-info/zipball/ff32a0d7885f6f8997ee0aca499fd008852ad5bd", + "reference": "ff32a0d7885f6f8997ee0aca499fd008852ad5bd", "shasum": "" }, "require": { @@ -9046,7 +8984,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.4.34" + "source": "https://github.com/symfony/property-info/tree/v6.4.43" }, "funding": [ { @@ -9066,7 +9004,7 @@ "type": "tidelift" } ], - "time": "2026-02-13T09:42:46+00:00" + "time": "2026-07-22T12:35:29+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -9157,16 +9095,16 @@ }, { "name": "symfony/routing", - "version": "v6.4.41", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "af04c79671fd8df0805a44c83fa2b0ba56c8329e" + "reference": "f8dedd42e7a511906aa54be6cebffbbe826ff20e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/af04c79671fd8df0805a44c83fa2b0ba56c8329e", - "reference": "af04c79671fd8df0805a44c83fa2b0ba56c8329e", + "url": "https://api.github.com/repos/symfony/routing/zipball/f8dedd42e7a511906aa54be6cebffbbe826ff20e", + "reference": "f8dedd42e7a511906aa54be6cebffbbe826ff20e", "shasum": "" }, "require": { @@ -9220,7 +9158,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.41" + "source": "https://github.com/symfony/routing/tree/v6.4.43" }, "funding": [ { @@ -9240,7 +9178,7 @@ "type": "tidelift" } ], - "time": "2026-05-24T11:18:16+00:00" + "time": "2026-07-21T13:51:56+00:00" }, { "name": "symfony/runtime", @@ -9327,16 +9265,16 @@ }, { "name": "symfony/security-bundle", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "c74078bc1949fbd407a87656c7e683617afd5829" + "reference": "c77d9d6076e6bb8ba706b8616519e3f52f6b2660" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/c74078bc1949fbd407a87656c7e683617afd5829", - "reference": "c74078bc1949fbd407a87656c7e683617afd5829", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/c77d9d6076e6bb8ba706b8616519e3f52f6b2660", + "reference": "c77d9d6076e6bb8ba706b8616519e3f52f6b2660", "shasum": "" }, "require": { @@ -9385,7 +9323,7 @@ "symfony/twig-bundle": "^5.4|^6.0|^7.0", "symfony/validator": "^6.4|^7.0", "symfony/yaml": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4", + "twig/twig": "^2.13|^3.0.4|^4.0", "web-token/jwt-checker": "^3.1", "web-token/jwt-signature-algorithm-ecdsa": "^3.1", "web-token/jwt-signature-algorithm-eddsa": "^3.1", @@ -9419,7 +9357,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/v6.4.42" + "source": "https://github.com/symfony/security-bundle/tree/v6.4.43" }, "funding": [ { @@ -9439,20 +9377,20 @@ "type": "tidelift" } ], - "time": "2026-06-16T12:40:39+00:00" + "time": "2026-07-29T06:43:01+00:00" }, { "name": "symfony/security-core", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "7ce2c661de04368e8c000ed7b6e96e613ed1ad55" + "reference": "9d2741948b0eb1fc08fd5431909dac8316ba49c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/7ce2c661de04368e8c000ed7b6e96e613ed1ad55", - "reference": "7ce2c661de04368e8c000ed7b6e96e613ed1ad55", + "url": "https://api.github.com/repos/symfony/security-core/zipball/9d2741948b0eb1fc08fd5431909dac8316ba49c2", + "reference": "9d2741948b0eb1fc08fd5431909dac8316ba49c2", "shasum": "" }, "require": { @@ -9509,7 +9447,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v6.4.42" + "source": "https://github.com/symfony/security-core/tree/v6.4.43" }, "funding": [ { @@ -9529,7 +9467,7 @@ "type": "tidelift" } ], - "time": "2026-06-09T07:36:15+00:00" + "time": "2026-07-13T05:00:30+00:00" }, { "name": "symfony/security-csrf", @@ -9697,16 +9635,16 @@ }, { "name": "symfony/serializer", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "dd3c671b794d4a4c936420aa4709743953a444b5" + "reference": "9a74371980b9eea34a39804fcfd7d0e4c81ccff1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/dd3c671b794d4a4c936420aa4709743953a444b5", - "reference": "dd3c671b794d4a4c936420aa4709743953a444b5", + "url": "https://api.github.com/repos/symfony/serializer/zipball/9a74371980b9eea34a39804fcfd7d0e4c81ccff1", + "reference": "9a74371980b9eea34a39804fcfd7d0e4c81ccff1", "shasum": "" }, "require": { @@ -9720,7 +9658,7 @@ "phpdocumentor/type-resolver": "<1.4.0", "symfony/dependency-injection": "<5.4", "symfony/property-access": "<5.4", - "symfony/property-info": "<5.4.24|>=6,<6.2.11", + "symfony/property-info": "<6.4.43", "symfony/uid": "<5.4", "symfony/validator": "<6.4", "symfony/yaml": "<5.4" @@ -9741,7 +9679,7 @@ "symfony/messenger": "^5.4|^6.0|^7.0", "symfony/mime": "^5.4|^6.0|^7.0", "symfony/property-access": "^5.4.26|^6.3|^7.0", - "symfony/property-info": "^5.4.24|^6.2.11|^7.0", + "symfony/property-info": "^6.4.43|^7.4.15", "symfony/translation-contracts": "^2.5|^3", "symfony/uid": "^5.4|^6.0|^7.0", "symfony/validator": "^6.4|^7.0", @@ -9775,7 +9713,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/v6.4.42" + "source": "https://github.com/symfony/serializer/tree/v6.4.43" }, "funding": [ { @@ -9795,7 +9733,7 @@ "type": "tidelift" } ], - "time": "2026-06-26T12:38:00+00:00" + "time": "2026-07-29T07:59:11+00:00" }, { "name": "symfony/service-contracts", @@ -10025,16 +9963,16 @@ }, { "name": "symfony/string", - "version": "v6.4.39", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "62e3c927de664edadb5bef260987eb047a17a113" + "reference": "2a8d515c3eaa5d33cf76d5fa277cdadd0a4e5b49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/62e3c927de664edadb5bef260987eb047a17a113", - "reference": "62e3c927de664edadb5bef260987eb047a17a113", + "url": "https://api.github.com/repos/symfony/string/zipball/2a8d515c3eaa5d33cf76d5fa277cdadd0a4e5b49", + "reference": "2a8d515c3eaa5d33cf76d5fa277cdadd0a4e5b49", "shasum": "" }, "require": { @@ -10090,7 +10028,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.39" + "source": "https://github.com/symfony/string/tree/v6.4.43" }, "funding": [ { @@ -10110,7 +10048,7 @@ "type": "tidelift" } ], - "time": "2026-05-12T11:44:19+00:00" + "time": "2026-07-28T07:28:15+00:00" }, { "name": "symfony/translation", @@ -10295,23 +10233,23 @@ }, { "name": "symfony/twig-bridge", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "bc8a4cad8d95722666ce4a572cdbc96f7a50bdbb" + "reference": "a94c869d1dd4df385a30cf8a9a86d1f7ba70466b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/bc8a4cad8d95722666ce4a572cdbc96f7a50bdbb", - "reference": "bc8a4cad8d95722666ce4a572cdbc96f7a50bdbb", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/a94c869d1dd4df385a30cf8a9a86d1f7ba70466b", + "reference": "a94c869d1dd4df385a30cf8a9a86d1f7ba70466b", "shasum": "" }, "require": { "php": ">=8.1", "symfony/deprecation-contracts": "^2.5|^3", "symfony/translation-contracts": "^2.5|^3", - "twig/twig": "^2.13|^3.0.4" + "twig/twig": "^2.13|^3.0.4|^4.0" }, "conflict": { "phpdocumentor/reflection-docblock": "<3.2.2", @@ -10384,7 +10322,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.42" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.43" }, "funding": [ { @@ -10404,20 +10342,20 @@ "type": "tidelift" } ], - "time": "2026-06-09T07:36:15+00:00" + "time": "2026-07-21T10:37:57+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.4.32", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "a5c8dcc11a5bf9c96320da20070d2e158a4e0b30" + "reference": "15bad71434a8bbc64db852a14ac6360af7f4ea4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/a5c8dcc11a5bf9c96320da20070d2e158a4e0b30", - "reference": "a5c8dcc11a5bf9c96320da20070d2e158a4e0b30", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/15bad71434a8bbc64db852a14ac6360af7f4ea4a", + "reference": "15bad71434a8bbc64db852a14ac6360af7f4ea4a", "shasum": "" }, "require": { @@ -10428,7 +10366,7 @@ "symfony/http-foundation": "^5.4|^6.0|^7.0", "symfony/http-kernel": "^6.2", "symfony/twig-bridge": "^6.4", - "twig/twig": "^2.13|^3.0.4" + "twig/twig": "^2.13|^3.0.4|^4.0" }, "conflict": { "symfony/framework-bundle": "<5.4", @@ -10472,7 +10410,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/v6.4.32" + "source": "https://github.com/symfony/twig-bundle/tree/v6.4.43" }, "funding": [ { @@ -10492,7 +10430,7 @@ "type": "tidelift" } ], - "time": "2026-01-05T12:44:39+00:00" + "time": "2026-07-06T08:03:42+00:00" }, { "name": "symfony/type-info", @@ -10657,16 +10595,16 @@ }, { "name": "symfony/validator", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "3044bdf8079efafdc8164094d32c53d10b8d6c19" + "reference": "ddde49bfa032b6c7f7b70fd3c82310d3d8cf952e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/3044bdf8079efafdc8164094d32c53d10b8d6c19", - "reference": "3044bdf8079efafdc8164094d32c53d10b8d6c19", + "url": "https://api.github.com/repos/symfony/validator/zipball/ddde49bfa032b6c7f7b70fd3c82310d3d8cf952e", + "reference": "ddde49bfa032b6c7f7b70fd3c82310d3d8cf952e", "shasum": "" }, "require": { @@ -10734,7 +10672,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.42" + "source": "https://github.com/symfony/validator/tree/v6.4.43" }, "funding": [ { @@ -10754,20 +10692,20 @@ "type": "tidelift" } ], - "time": "2026-06-26T05:21:23+00:00" + "time": "2026-07-28T13:57:03+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "29adc5e34255f42ca9b8ae61c22b4d9e3f611317" + "reference": "6638cfe00907b2b980b749fcf2cd4cd6b2b1396e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/29adc5e34255f42ca9b8ae61c22b4d9e3f611317", - "reference": "29adc5e34255f42ca9b8ae61c22b4d9e3f611317", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6638cfe00907b2b980b749fcf2cd4cd6b2b1396e", + "reference": "6638cfe00907b2b980b749fcf2cd4cd6b2b1396e", "shasum": "" }, "require": { @@ -10784,7 +10722,7 @@ "symfony/http-kernel": "^5.4|^6.0|^7.0", "symfony/process": "^5.4|^6.0|^7.0", "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" + "twig/twig": "^2.13|^3.0.4|^4.0" }, "bin": [ "Resources/bin/var-dump-server" @@ -10822,7 +10760,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.42" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.43" }, "funding": [ { @@ -10842,7 +10780,7 @@ "type": "tidelift" } ], - "time": "2026-06-08T07:06:12+00:00" + "time": "2026-07-06T08:03:42+00:00" }, { "name": "symfony/var-exporter", @@ -11090,16 +11028,16 @@ }, { "name": "symfony/yaml", - "version": "v6.4.42", + "version": "v6.4.43", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "989dfb75049b77884f3f8cf9e99f103c8f91ca1c" + "reference": "d2ee2daa59be8cd0864835ea918ea209149796a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/989dfb75049b77884f3f8cf9e99f103c8f91ca1c", - "reference": "989dfb75049b77884f3f8cf9e99f103c8f91ca1c", + "url": "https://api.github.com/repos/symfony/yaml/zipball/d2ee2daa59be8cd0864835ea918ea209149796a3", + "reference": "d2ee2daa59be8cd0864835ea918ea209149796a3", "shasum": "" }, "require": { @@ -11142,7 +11080,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.42" + "source": "https://github.com/symfony/yaml/tree/v6.4.43" }, "funding": [ { @@ -11162,7 +11100,7 @@ "type": "tidelift" } ], - "time": "2026-06-08T07:06:12+00:00" + "time": "2026-07-20T15:18:49+00:00" }, { "name": "twig/twig", @@ -14527,16 +14465,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v7.4.14", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "11eeee9d109963145e66f5b1919e5cf5411da58b" + "reference": "49757f773056f1180f16667e0a5a533d262cbe9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/11eeee9d109963145e66f5b1919e5cf5411da58b", - "reference": "11eeee9d109963145e66f5b1919e5cf5411da58b", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/49757f773056f1180f16667e0a5a533d262cbe9a", + "reference": "49757f773056f1180f16667e0a5a533d262cbe9a", "shasum": "" }, "require": { @@ -14588,7 +14526,7 @@ "testing" ], "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.4.14" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.4.16" }, "funding": [ { @@ -14608,7 +14546,7 @@ "type": "tidelift" } ], - "time": "2026-06-08T20:24:16+00:00" + "time": "2026-08-07T14:56:57+00:00" }, { "name": "theseer/tokenizer", diff --git a/migrations/Version20260812124026.php b/migrations/Version20260812124026.php new file mode 100644 index 0000000..0ea0a06 --- /dev/null +++ b/migrations/Version20260812124026.php @@ -0,0 +1,30 @@ +addSql('ALTER TABLE match_call CHANGE territory_address territory_address LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE project CHANGE territory_address territory_address LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE user CHANGE territory_address territory_address LONGTEXT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE user CHANGE territory_address territory_address VARCHAR(255) DEFAULT NULL'); + $this->addSql('ALTER TABLE project CHANGE territory_address territory_address VARCHAR(255) DEFAULT NULL'); + $this->addSql('ALTER TABLE ext_translations CHANGE foreign_key foreign_key INT NOT NULL'); + } +} diff --git a/migrations/Version20260813144440.php b/migrations/Version20260813144440.php new file mode 100644 index 0000000..0f1e6fd --- /dev/null +++ b/migrations/Version20260813144440.php @@ -0,0 +1,26 @@ +addSql('ALTER TABLE project ADD desc_about LONGTEXT DEFAULT NULL, ADD desc_goal LONGTEXT DEFAULT NULL, ADD desc_team LONGTEXT DEFAULT NULL, CHANGE description desc_brief LONGTEXT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE project ADD description LONGTEXT DEFAULT NULL, DROP desc_brief, DROP desc_about, DROP desc_goal, DROP desc_team'); + } +} diff --git a/migrations/Version20260813171902.php b/migrations/Version20260813171902.php new file mode 100644 index 0000000..4aa19e8 --- /dev/null +++ b/migrations/Version20260813171902.php @@ -0,0 +1,39 @@ +addSql('DROP TABLE IF EXISTS category'); + $this->addSql('DROP TABLE IF EXISTS project_category'); + $this->addSql('CREATE TABLE category (id INT AUTO_INCREMENT NOT NULL, slug VARCHAR(56) NOT NULL, name VARCHAR(255) NOT NULL, locales JSON NOT NULL COMMENT \'(DC2Type:json)\', UNIQUE INDEX UNIQ_64C19C1989D9B62 (slug), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE project_category (project_id INT NOT NULL, category_id INT NOT NULL, INDEX IDX_3B02921A166D1F9C (project_id), INDEX IDX_3B02921A12469DE2 (category_id), PRIMARY KEY(project_id, category_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE project_category ADD CONSTRAINT FK_3B02921A166D1F9C FOREIGN KEY (project_id) REFERENCES project (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE project_category ADD CONSTRAINT FK_3B02921A12469DE2 FOREIGN KEY (category_id) REFERENCES category (id) ON DELETE CASCADE'); + } + + public function down(Schema $schema): void + { + $this->addSql('DROP TABLE IF EXISTS category'); + $this->addSql('DROP TABLE IF EXISTS project_category'); + $this->addSql('CREATE TABLE category (id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, locales JSON NOT NULL COMMENT \'(DC2Type:json)\', PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE project_category (project_id INT NOT NULL, category_id VARCHAR(255) NOT NULL, INDEX IDX_3B02921A166D1F9C (project_id), INDEX IDX_3B02921A12469DE2 (category_id), PRIMARY KEY(project_id, category_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE project_category ADD CONSTRAINT FK_3B02921A166D1F9C FOREIGN KEY (project_id) REFERENCES project (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE project_category ADD CONSTRAINT FK_3B02921A12469DE2 FOREIGN KEY (category_id) REFERENCES category (id) ON DELETE CASCADE'); + } +} diff --git a/src/ApiResource/CategoryApiResource.php b/src/ApiResource/CategoryApiResource.php index 0f22b46..71f7b49 100644 --- a/src/ApiResource/CategoryApiResource.php +++ b/src/ApiResource/CategoryApiResource.php @@ -2,11 +2,13 @@ namespace App\ApiResource; +use ApiPlatform\Doctrine\Orm\Filter\SearchFilter; use ApiPlatform\Doctrine\Orm\State\Options; use ApiPlatform\Metadata as API; use App\Entity\Category; use App\State\ApiResourceStateProcessor; use App\State\ApiResourceStateProvider; +use App\State\CategoryStateProvider; use Symfony\Component\Validator\Constraints as Assert; /** @@ -25,7 +27,15 @@ use Symfony\Component\Validator\Constraints as Assert; )] #[API\GetCollection()] #[API\Post(security: 'is_granted("ROLE_ADMIN")')] -#[API\Get()] +#[API\Get( + provider: CategoryStateProvider::class, + uriTemplate: '/categories/{idOrSlug}', + uriVariables: [ + 'idOrSlug' => new API\Link( + description: 'Category identifier or slug', + ), + ] +)] #[API\Patch(security: 'is_granted("ROLE_ADMIN")')] #[API\Delete(security: 'is_granted("ROLE_ADMIN")')] class CategoryApiResource @@ -36,13 +46,20 @@ class CategoryApiResource * This value will identify this Category in relationships with other resources. */ #[API\ApiProperty(identifier: true)] - #[Assert\NotBlank()] public string $id; + /** + * A unique, non white space, string identifier for this Category. + */ + #[API\ApiProperty(writable: false)] + #[API\ApiFilter(SearchFilter::class, strategy: 'exact')] + public string $slug; + /** * A human-readable self-descriptive string of what this Category is about. */ - #[API\ApiProperty()] #[Assert\NotBlank()] + #[API\ApiProperty()] + #[API\ApiFilter(SearchFilter::class, strategy: 'partial')] public string $name; } diff --git a/src/ApiResource/Project/ProjectApiResource.php b/src/ApiResource/Project/ProjectApiResource.php index 87a23f0..3a850f8 100644 --- a/src/ApiResource/Project/ProjectApiResource.php +++ b/src/ApiResource/Project/ProjectApiResource.php @@ -141,11 +141,25 @@ class ProjectApiResource public Territory $territory; /** - * Free-form rich text description for the Project. + * Rich-text (markdown) introduction to the project. */ #[API\ApiFilter(filterClass: SearchFilter::class, strategy: 'partial')] - #[Assert\NotBlank()] - public string $description; + public string $descBrief; + + /** + * Rich-text (markdown) description on the main features of the project. + */ + public string $descAbout; + + /** + * Rich-text (markdown) about why this project is important. + */ + public string $descGoal; + + /** + * Rich-text (markdown) about team and previous experience. + */ + public string $descTeam; /** * Extracted embedding data from the Project's video. diff --git a/src/Benzina/ProjectsPump.php b/src/Benzina/ProjectsPump.php index 537ba7b..a53a9af 100644 --- a/src/Benzina/ProjectsPump.php +++ b/src/Benzina/ProjectsPump.php @@ -58,7 +58,7 @@ class ProjectsPump implements PumpInterface } $created = new \DateTime($record['created']); - if (\in_array($status, [ProjectStatus::InDraft]) && $created < new \DateTime('2025-01-01')) { + if (\in_array($status, [ProjectStatus::InDraft]) && $created < new \DateTime('2026-01-01')) { return; } @@ -92,7 +92,10 @@ class ProjectsPump implements PumpInterface $project->addLocale($record['lang']); $project->setTitle($record['name'] ?? ''); $project->setSubtitle($record['subtitle'] ?? ''); - $project->setDescription($this->getProjectDescription($record)); + $project->setDescBrief($record['description']); + $project->setDescAbout($record['about']); + $project->setDescGoal($record['motivation']); + $project->setDescTeam($record['related']); $this->setPreventFlushAndClear(true); $this->persist($project, $context); @@ -103,7 +106,10 @@ class ProjectsPump implements PumpInterface $this->localize($project, $localizations, $context, [ 'title' => fn($l) => $l['name'], 'subtitle' => fn($l) => $l['subtitle'], - 'description' => fn($l) => $this->getProjectDescription($l), + 'descBrief' => fn($l) => $l['description'], + 'descAbout' => fn($l) => $l['about'], + 'descGoal' => fn($l) => $l['motivation'], + 'descTeam' => fn($l) => $l['related'], ]); } @@ -123,34 +129,6 @@ class ProjectsPump implements PumpInterface return $this->userRepository->matching($criteria)->first() ?? null; } - private function getProjectDescription(array $record): string - { - $lang = $record['lang']; - $hasTitles = \array_key_exists($lang, self::PROJECT_DESC_TITLES); - - $description = $record['description']; - - if ($hasTitles) { - $description .= \sprintf("\n\n## %s", self::PROJECT_DESC_TITLES[$lang]['about']); - } - - $description .= \sprintf("\n%s", $record['about']); - - if ($hasTitles) { - $description .= \sprintf("\n\n## %s", self::PROJECT_DESC_TITLES[$lang]['motivation']); - } - - $description .= \sprintf("\n\n%s", $record['motivation']); - - if ($hasTitles) { - $description .= \sprintf("\n\n## %s", self::PROJECT_DESC_TITLES[$lang]['related']); - } - - $description .= \sprintf("\n%s", $record['related']); - - return $description; - } - private function getProjectLocalizations(Project $project, array $context): array { $query = $this->getDbConnection($context)->prepare( @@ -194,14 +172,30 @@ class ProjectsPump implements PumpInterface private function getProjectTerritory(array $record): Territory { - if ($record['project_location'] === null) { + $address = $record['project_location']; + + if ($address === null) { + if ($record['address'] !== null) { + $address = $record['address']; + } + + if ($record['location'] !== null) { + $address = $record['location']; + } + + if ($record['address'] !== null && $record['location'] !== null) { + $address = \sprintf('%s, %s', $record['address'], $record['location']); + } + } + + if ($address === null) { return Territory::unknown(); } - $cleanAddress = $this->cleanLocation($record['project_location'], 2); + $cleanAddress = $this->cleanLocation($address, 2); if ($cleanAddress === '') { - return Territory::unknown($record['project_location']); + return Territory::unknown($address); } return $this->territoryService->search($cleanAddress); @@ -209,12 +203,14 @@ class ProjectsPump implements PumpInterface private function getProjectVideoSource(array $record): ?string { - if ($record['video'] !== null) { - return \trim($record['video']); + $video = \trim($record['video']); + if ($video !== '' && $record['video'] !== null) { + return $video; } - if ($record['media'] !== null) { - return \trim($record['media']); + $media = \trim($record['media']); + if ($media !== '' && $record['media'] !== null) { + return $media; } return null; diff --git a/src/Dto/ProjectUpdationDto.php b/src/Dto/ProjectUpdationDto.php index 5d5857c..79adc99 100644 --- a/src/Dto/ProjectUpdationDto.php +++ b/src/Dto/ProjectUpdationDto.php @@ -24,6 +24,7 @@ class ProjectUpdationDto * Main headline for the Project. */ #[Assert\Regex('/[a-zA-Z]{1,}/')] + #[Assert\Length(min: 3)] public string $title; /** @@ -47,9 +48,28 @@ class ProjectUpdationDto public Territory $territory; /** - * Free-form rich text description for the Project. + * Rich-text (markdown allowed) introduction to the project. */ - public string $description; + #[Assert\Length(min: 20)] + public string $descBrief; + + /** + * Rich-text (markdown allowed) description on the main features of the project. + */ + #[Assert\Length(min: 20)] + public string $descAbout; + + /** + * Rich-text (markdown allowed) about why this project is important. + */ + #[Assert\Length(min: 20)] + public string $descGoal; + + /** + * Rich-text (markdown allowed) about team and previous experience. + */ + #[Assert\Length(min: 20)] + public string $descTeam; /** * On `minimum`, Project will campaign until the minimum deadline.\ diff --git a/src/Entity/Category.php b/src/Entity/Category.php index 85544cd..07a1f12 100644 --- a/src/Entity/Category.php +++ b/src/Entity/Category.php @@ -15,8 +15,13 @@ class Category implements LocalizedInterface use LocalizedTrait; #[ORM\Id] - #[ORM\Column(length: 255)] - private ?string $id = null; + #[ORM\GeneratedValue] + #[ORM\Column] + private ?int $id = null; + + #[ORM\Column(length: 56, unique: true)] + #[Gedmo\Slug(fields: ['name'])] + private ?string $slug = null; #[ORM\Column(length: 255)] #[Gedmo\Translatable()] @@ -27,9 +32,14 @@ class Category implements LocalizedInterface return $this->id; } - public function setId(string $id): static + public function getSlug(): ?string { - $this->id = $id; + return $this->slug; + } + + public function setSlug(string $slug): static + { + $this->slug = $slug; return $this; } diff --git a/src/Entity/Project/Project.php b/src/Entity/Project/Project.php index 763b79c..b6c9b91 100644 --- a/src/Entity/Project/Project.php +++ b/src/Entity/Project/Project.php @@ -78,12 +78,21 @@ class Project implements UserOwnedInterface, AccountingOwnerInterface, Localized #[ORM\Embedded(class: Territory::class)] private ?Territory $territory; - /** - * The description body for the Project. - */ #[ORM\Column(type: Types::TEXT, nullable: true)] #[Gedmo\Translatable()] - private ?string $description = null; + private ?string $descBrief = null; + + #[ORM\Column(type: Types::TEXT, nullable: true)] + #[Gedmo\Translatable()] + private ?string $descAbout = null; + + #[ORM\Column(type: Types::TEXT, nullable: true)] + #[Gedmo\Translatable()] + private ?string $descGoal = null; + + #[ORM\Column(type: Types::TEXT, nullable: true)] + #[Gedmo\Translatable()] + private ?string $descTeam = null; /** * A video showcasing the Project. @@ -277,14 +286,50 @@ class Project implements UserOwnedInterface, AccountingOwnerInterface, Localized return $this; } - public function getDescription(): ?string + public function getDescBrief(): ?string { - return $this->description; + return $this->descBrief; } - public function setDescription(string $description): static + public function setDescBrief(?string $descBrief): static { - $this->description = $description; + $this->descBrief = $descBrief; + + return $this; + } + + public function getDescAbout(): ?string + { + return $this->descAbout; + } + + public function setDescAbout(?string $descAbout): static + { + $this->descAbout = $descAbout; + + return $this; + } + + public function getDescGoal(): ?string + { + return $this->descGoal; + } + + public function setDescGoal(?string $descGoal): static + { + $this->descGoal = $descGoal; + + return $this; + } + + public function getDescTeam(): ?string + { + return $this->descTeam; + } + + public function setDescTeam(?string $descTeam): static + { + $this->descTeam = $descTeam; return $this; } diff --git a/src/Entity/Territory.php b/src/Entity/Territory.php index 30b416f..ca444b1 100644 --- a/src/Entity/Territory.php +++ b/src/Entity/Territory.php @@ -40,7 +40,7 @@ class Territory * Plain-text address.\ * e.g: Forn de l’Olivera 22B, 07012 Palma, Illes Balears. */ - #[ORM\Column(type: Types::STRING, nullable: true)] + #[ORM\Column(type: Types::TEXT, nullable: true)] public readonly ?string $address; public function __construct( diff --git a/src/Factory/CategoryFactory.php b/src/Factory/CategoryFactory.php index 86d6c15..34e00b3 100644 --- a/src/Factory/CategoryFactory.php +++ b/src/Factory/CategoryFactory.php @@ -16,11 +16,9 @@ final class CategoryFactory extends PersistentProxyObjectFactory } protected function defaults( - string $id = 'test', string $name = 'Test Category', ): array|callable { return [ - 'id' => $id, 'name' => $name, ]; } diff --git a/src/Factory/Project/ProjectFactory.php b/src/Factory/Project/ProjectFactory.php index 56262aa..fcb895d 100644 --- a/src/Factory/Project/ProjectFactory.php +++ b/src/Factory/Project/ProjectFactory.php @@ -41,8 +41,11 @@ final class ProjectFactory extends PersistentProxyObjectFactory { return [ 'deadline' => ProjectDeadline::Minimum, - 'description' => '', 'territory' => new Territory('ES'), + 'descBrief' => 'Brief information on this Project', + 'descAbout' => 'About this Project', + 'descGoal' => 'Project\'s goal', + 'descTeam' => 'Project\'s team', 'owner' => new User(), 'status' => ProjectStatus::InDraft, 'subtitle' => 'Subtitle', @@ -54,7 +57,10 @@ final class ProjectFactory extends PersistentProxyObjectFactory { return [ 'deadline' => self::faker()->randomElement(ProjectDeadline::cases()), - 'description' => self::faker()->text(), + 'descBrief' => self::faker()->text(), + 'descAbout' => self::faker()->text(), + 'descGoal' => self::faker()->text(), + 'descTeam' => self::faker()->text(), 'territory' => new Territory('ES'), 'owner' => UserFactory::createWithMode(), 'status' => self::faker()->randomElement(ProjectStatus::cases()), diff --git a/src/Service/Nominatim/NominatimService.php b/src/Service/Nominatim/NominatimService.php index 7d4fa75..e574548 100644 --- a/src/Service/Nominatim/NominatimService.php +++ b/src/Service/Nominatim/NominatimService.php @@ -13,10 +13,10 @@ class NominatimService private float $lastRequestTime = 0.0; /** - * Cache calls to Nominatim for 1 hour. + * Cache calls to Nominatim for 24 hours. * This ensures freshness of the data but minimizes bulk-operations hit rates to Nominatim. */ - public const NOMINATIM_CACHE_TTL = 3600; + public const NOMINATIM_CACHE_TTL = 86400; private HttpClientInterface $httpClient; diff --git a/src/State/CategoryStateProvider.php b/src/State/CategoryStateProvider.php new file mode 100644 index 0000000..f832bff --- /dev/null +++ b/src/State/CategoryStateProvider.php @@ -0,0 +1,39 @@ +categoryRepository->createQueryBuilder('c'); + $queryBuilder->where(\is_numeric($idOrSlug) ? 'c.id = :value' : 'c.slug = :value'); + $queryBuilder->setParameter('value', $idOrSlug); + + $query = $this->addLocalizationHints($queryBuilder, $this->getAcceptedLanguages($context)); + + $project = $query->getOneOrNullResult(); + + if ($project === null) { + return null; + } + + return $this->autoMapper->map($project, CategoryApiResource::class); + } +} diff --git a/tests/Entity/ProjectApi/GetAllTest.php b/tests/Entity/ProjectApi/GetAllTest.php index 09b9ee3..8e801c5 100644 --- a/tests/Entity/ProjectApi/GetAllTest.php +++ b/tests/Entity/ProjectApi/GetAllTest.php @@ -249,7 +249,7 @@ class GetAllTest extends ProjectTestCase $partialDescription = 'Physically defined as a modulable space'; $this->testGetAllByParam( - 'description', + 'descBrief', "lorem ipsum $partialDescription", 'lorem ipsum vitae' ); diff --git a/tests/Entity/ProjectApi/GetOneTest.php b/tests/Entity/ProjectApi/GetOneTest.php index fc06954..4c815c5 100644 --- a/tests/Entity/ProjectApi/GetOneTest.php +++ b/tests/Entity/ProjectApi/GetOneTest.php @@ -21,7 +21,6 @@ class GetOneTest extends ProjectTestCase 'title' => $project->getTitle(), 'subtitle' => $project->getSubtitle(), 'territory' => ['country' => $project->getTerritory()->country], - 'description' => $project->getDescription(), 'deadline' => $project->getDeadline()->value, 'status' => $project->getStatus()->value, ]; diff --git a/tests/Entity/ProjectApi/ProjectTestCase.php b/tests/Entity/ProjectApi/ProjectTestCase.php index 5fe1154..5044229 100644 --- a/tests/Entity/ProjectApi/ProjectTestCase.php +++ b/tests/Entity/ProjectApi/ProjectTestCase.php @@ -26,7 +26,7 @@ abstract class ProjectTestCase extends ApiTestCase { self::bootKernel(); - save(CategoryFactory::createOne(['id' => 'test'])); + save(CategoryFactory::createOne(['name' => 'test'])); } // Auxiliary Methods diff --git a/tests/Entity/ProjectApi/UpdateTest.php b/tests/Entity/ProjectApi/UpdateTest.php index d925a33..e7e9560 100644 --- a/tests/Entity/ProjectApi/UpdateTest.php +++ b/tests/Entity/ProjectApi/UpdateTest.php @@ -25,7 +25,7 @@ class UpdateTest extends ProjectTestCase 'headers' => $this->withAuthHeader(TestUser::get()), 'json' => [ 'title' => 'New project title', - 'description' => 'Updated project description', + 'descBrief' => 'Updated Project\'s brief description', ], ]); diff --git a/tests/Entity/ProjectCalendarTest.php b/tests/Entity/ProjectCalendarTest.php index 1bbe5a5..cfc2b4f 100644 --- a/tests/Entity/ProjectCalendarTest.php +++ b/tests/Entity/ProjectCalendarTest.php @@ -6,14 +6,16 @@ use ApiPlatform\Symfony\Bundle\Test\ApiTestCase; use App\Entity\Project\Project; use App\Entity\Project\ProjectDeadline; use App\Entity\Project\ProjectStatus; -use App\Entity\Territory; use App\Entity\User\User; +use App\Factory\Project\ProjectFactory; use Doctrine\ORM\EntityManagerInterface; +use Zenstruck\Foundry\Test\Factories; use Zenstruck\Foundry\Test\ResetDatabase; class ProjectCalendarTest extends ApiTestCase { use ResetDatabase; + use Factories; private EntityManagerInterface $entityManager; private User $owner; @@ -40,16 +42,10 @@ class ProjectCalendarTest extends ApiTestCase private function createTestProject(ProjectDeadline $deadline = ProjectDeadline::Minimum): Project { - $project = new Project(); - $project->setTitle('Test Project'); - $project->setSubtitle('Test Project Subtitle'); - $project->setDeadline($deadline); - $project->setDescription('Test Project Description'); - $project->setTerritory(new Territory('ES')); - $project->setOwner($this->owner); - $project->setStatus(ProjectStatus::InCampaignReview); - - return $project; + return ProjectFactory::createOne([ + 'owner' => $this->owner, + 'deadline' => $deadline, + ])->_real(); } private function createProjectAndSetToInCampaign( @@ -104,6 +100,8 @@ class ProjectCalendarTest extends ApiTestCase $this->entityManager->persist($project); $this->entityManager->flush(); - $this->assertNull($project->getCalendar()); + $this->assertNull($project->getCalendar()->release); + $this->assertNull($project->getCalendar()->minimum); + $this->assertNull($project->getCalendar()->optimum); } }