diff --git a/.gitignore b/.gitignore index ca0c747b..d290b25e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ Thumbs.db .DS_Store .sass-cache +vendor diff --git a/README.md b/README.md index fd9da2f6..a0161e55 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ This bundle allows to assign nestable categories to arbitrary entities in Contao - the module is done in a generic way, i.e. you can assign category/categories field(s) to arbitrary DCAs - conveniently add single category fields (radio button) or multiple categories fields (checkbox) via a simple function call - specify overridable properties in categories and compute the correct result depending on the given context easily -- multilanguage support via [heimrichhannot/contao-categories-multilingual-bundle](https://github.com/heimrichhannot/contao-categories-multilingual-bundle) -- categories filter type for [Contao Filter Bundle](https://github.com/heimrichhannot/contao-filter-bundle) +- [DC_Multilingual](https://github.com/terminal42/contao-DC_Multilingual) support +- [Flare Bundle](https://github.com/heimrichhannot/contao-flare-bundle) support ## Impressions @@ -57,6 +57,19 @@ This bundle comes with two filter types: - CategoryChoiceType let you select categories to filter a list. - ParentCategoryChoiceType is an inital filter to filter your list based on a parent category (means all elements are in a child category of the selected parent). +### DC_Multilingual + +This bundle is prepared to work with DC_Multilingual. +If you have DC_Multilingual installed, you'll only have to activate it by setting the translatable languages for the tl_category table. + +Example: + +```php +$dca['config']['languages'] = ['de', 'en', 'pl']; +# Optional: set fallback language (default is en) +$dca['config']['fallbackLang'] = 'de'; +``` + ## Entity structure  diff --git a/composer.json b/composer.json index 711571c2..37506301 100644 --- a/composer.json +++ b/composer.json @@ -1,34 +1,35 @@ { - "name": "heimrichhannot/contao-categories-bundle", - "type": "contao-bundle", - "description": "This bundle allows to assign nestable categories to arbitrary entities in Contao-driven systems.", - "license": "LGPL-3.0-or-later", - "require": { - "php": "^7.4 || ^8.0", - "contao/core-bundle": "^4.4", - "heimrichhannot/contao-utils-bundle": "^2.210", - "heimrichhannot/contao-multi-column-editor-bundle": "^2.0", - "wa72/htmlpagedom": "^1.3 || ^2.0", - "heimrichhannot/contao-request-bundle": "^1.0" - }, - "autoload": { - "psr-4": { - "HeimrichHannot\\CategoriesBundle\\": "src/" + "name": "heimrichhannot/contao-categories-bundle", + "type": "contao-bundle", + "description": "This bundle allows to assign nestable categories to arbitrary entities in Contao-driven systems.", + "license": "LGPL-3.0-or-later", + "require": { + "php": "^8.2", + "contao/core-bundle": "^5.3", + "heimrichhannot/contao-utils-bundle": "^3.9", + "heimrichhannot/contao-multi-column-editor-bundle": "^2.0", + "wa72/htmlpagedom": "^3.0" }, - "classmap": [ - "src/" - ], - "exclude-from-classmap": [ - "src/Resources/contao/config/", - "src/Resources/contao/dca/", - "src/Resources/contao/languages/", - "src/Resources/contao/templates/" - ] - }, - "extra": { - "contao-manager-plugin": "HeimrichHannot\\CategoriesBundle\\ContaoManager\\Plugin" - }, - "suggest": { - "heimrichhannot/contao-categories-multilingual-bundle": "Adds multilanguage support for categories bundle." - } + "autoload": { + "psr-4": { + "HeimrichHannot\\CategoriesBundle\\": "src/" + } + }, + "extra": { + "contao-manager-plugin": "HeimrichHannot\\CategoriesBundle\\ContaoManager\\Plugin" + }, + "suggest": { + "heimrichhannot/contao-categories-multilingual-bundle": "Adds multilanguage support for categories bundle." + }, + "require-dev": { + "rector/rector": "^2.2", + "contao/contao-rector": "dev-main", + "symplify/easy-coding-standard": "^12.6", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-symfony": "^2.0", + "contao/manager-plugin": "^2.13" + }, + "conflict": { + "heimrichhannot/contao-categories-multilingual-bundle": "*" + } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..438522a0 --- /dev/null +++ b/composer.lock @@ -0,0 +1,14102 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "9a7386c7844f2b3a000a498ed0c10c74", + "packages": [ + { + "name": "ausi/slug-generator", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/ausi/slug-generator.git", + "reference": "4e761b08966c5d4aeecc1829ac997e5a5a29d231" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ausi/slug-generator/zipball/4e761b08966c5d4aeecc1829ac997e5a5a29d231", + "reference": "4e761b08966c5d4aeecc1829ac997e5a5a29d231", + "shasum": "" + }, + "require": { + "ext-intl": "*", + "ext-mbstring": "*", + "ext-pcre": "*", + "lib-icu": ">=4.2.1", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "contao/easy-coding-standard": "^3.0", + "phpstan/phpstan": "^0.12.40", + "phpstan/phpstan-phpunit": "^0.12.16", + "phpunit/phpunit": "^7.5.20 || ^8.5.4 || ^9.4.2", + "psalm/plugin-phpunit": "^0.9", + "slam/phpstan-extensions": "^5.0", + "vimeo/psalm": "^3.9" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ausi\\SlugGenerator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Martin Auswöger", + "email": "martin@auswoeger.com" + } + ], + "description": "Slug Generator", + "keywords": [ + "ascii", + "cldr", + "pretty-url", + "slug", + "slug-generator", + "slugify", + "transliteration", + "unicode" + ], + "support": { + "issues": "https://github.com/ausi/slug-generator/issues", + "source": "https://github.com/ausi/slug-generator/tree/v1.1.1" + }, + "funding": [ + { + "url": "https://github.com/ausi", + "type": "github" + } + ], + "time": "2020-10-19T15:25:33+00:00" + }, + { + "name": "bacon/bacon-qr-code", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22", + "shasum": "" + }, + "require": { + "dasprid/enum": "^1.0.3", + "ext-iconv": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phly/keep-a-changelog": "^2.1", + "phpunit/phpunit": "^7 | ^8 | ^9", + "spatie/phpunit-snapshot-assertions": "^4.2.9", + "squizlabs/php_codesniffer": "^3.4" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8" + }, + "time": "2022-12-07T17:46:57+00:00" + }, + { + "name": "brick/math", + "version": "0.13.1", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04", + "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "6.8.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.13.1" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2025-03-29T13:50:30+00:00" + }, + { + "name": "clue/stream-filter", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/clue/stream-filter.git", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.7.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2023-12-20T15:40:13+00:00" + }, + { + "name": "cmsig/seal", + "version": "0.12.3", + "source": { + "type": "git", + "url": "https://github.com/PHP-CMSIG/seal.git", + "reference": "bd27cdab23635816c90b9550312883743d26dc6c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CMSIG/seal/zipball/bd27cdab23635816c90b9550312883743d26dc6c", + "reference": "bd27cdab23635816c90b9550312883743d26dc6c", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "replace": { + "schranz-search/seal": "self.version" + }, + "require-dev": { + "php-cs-fixer/shim": "^3.51", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^10.3", + "rector/rector": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "CmsIg\\Seal\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Schranz", + "email": "alexander@sulu.io" + } + ], + "description": "Search Engine Abstraction Layer", + "keywords": [ + "abstraction", + "algolia", + "cmsig", + "elasticsearch", + "meilisearch", + "opensearch", + "redisearch", + "seal", + "search", + "search-abstraction", + "search-client", + "solr", + "typesense" + ], + "support": { + "source": "https://github.com/PHP-CMSIG/seal/tree/0.12.3" + }, + "funding": [ + { + "url": "https://paypal.me/L91", + "type": "custom" + }, + { + "url": "https://github.com/alexander-schranz", + "type": "github" + } + ], + "time": "2025-09-22T05:48:44+00:00" + }, + { + "name": "cmsig/seal-symfony-bundle", + "version": "0.12.2", + "source": { + "type": "git", + "url": "https://github.com/PHP-CMSIG/seal-symfony-bundle.git", + "reference": "dc4d77f050961a0022e8ed477f8bddbe1b36c726" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CMSIG/seal-symfony-bundle/zipball/dc4d77f050961a0022e8ed477f8bddbe1b36c726", + "reference": "dc4d77f050961a0022e8ed477f8bddbe1b36c726", + "shasum": "" + }, + "require": { + "cmsig/seal": "^0.12", + "php": "^8.1", + "symfony/config": "^6.1 || ^7.0", + "symfony/console": "^6.1 || ^7.0", + "symfony/dependency-injection": "^6.1 || ^7.0", + "symfony/http-kernel": "^6.1 || ^7.0" + }, + "conflict": { + "cmsig/seal-algolia-adapter": "<0.12 || >=0.13", + "cmsig/seal-elasticsearch-adapter": "<0.12 || >=0.13", + "cmsig/seal-loupe-adapter": "<0.12 || >=0.13", + "cmsig/seal-meilisearch-adapter": "<0.12 || >=0.13", + "cmsig/seal-memory-adapter": "<0.12 || >=0.13", + "cmsig/seal-multi-adapter": "<0.12 || >=0.13", + "cmsig/seal-opensearch-adapter": "<0.12 || >=0.13", + "cmsig/seal-read-write-adapter": "<0.12 || >=0.13", + "cmsig/seal-redisearch-adapter": "<0.12 || >=0.13", + "cmsig/seal-solr-adapter": "<0.12 || >=0.13", + "cmsig/seal-typesense-adapter": "<0.12 || >=0.13" + }, + "replace": { + "schranz-search/symfony-bundle": "self.version" + }, + "require-dev": { + "cmsig/seal-algolia-adapter": "^0.12", + "cmsig/seal-elasticsearch-adapter": "^0.12", + "cmsig/seal-loupe-adapter": "^0.12", + "cmsig/seal-meilisearch-adapter": "^0.12", + "cmsig/seal-memory-adapter": "^0.12", + "cmsig/seal-multi-adapter": "^0.12", + "cmsig/seal-opensearch-adapter": "^0.12", + "cmsig/seal-read-write-adapter": "^0.12", + "cmsig/seal-redisearch-adapter": "^0.12", + "cmsig/seal-solr-adapter": "^0.12", + "cmsig/seal-typesense-adapter": "^0.12", + "php-cs-fixer/shim": "^3.51", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^10.3", + "rector/rector": "^1.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "CmsIg\\Seal\\Integration\\Symfony\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Schranz", + "email": "alexander@sulu.io" + } + ], + "description": "An integration of CMS-IG SEAL search abstraction into Symfony Framework.", + "keywords": [ + "Bridge", + "abstraction", + "algolia", + "bundle", + "cmsig", + "elasticsearch", + "integration", + "loupe", + "meilisearch", + "opensearch", + "redisearch", + "seal", + "search", + "search-abstraction", + "search-client", + "solr", + "symfony", + "symfony-bundle", + "typesense" + ], + "support": { + "source": "https://github.com/PHP-CMSIG/seal-symfony-bundle/tree/0.12.2" + }, + "funding": [ + { + "url": "https://paypal.me/L91", + "type": "custom" + }, + { + "url": "https://github.com/alexander-schranz", + "type": "github" + } + ], + "time": "2025-08-18T07:52:34+00:00" + }, + { + "name": "composer/ca-bundle", + "version": "1.5.8", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "719026bb30813accb68271fee7e39552a58e9f65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/719026bb30813accb68271fee7e39552a58e9f65", + "reference": "719026bb30813accb68271fee7e39552a58e9f65", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8 || ^9", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/ca-bundle/issues", + "source": "https://github.com/composer/ca-bundle/tree/1.5.8" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2025-08-20T18:49:47+00:00" + }, + { + "name": "contao-components/ace", + "version": "1.43.3", + "source": { + "type": "git", + "url": "https://github.com/contao-components/ace.git", + "reference": "9f124437a7fa0f7a282dd00f892f4dc100bc7111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/ace/zipball/9f124437a7fa0f7a282dd00f892f4dc100bc7111", + "reference": "9f124437a7fa0f7a282dd00f892f4dc100bc7111", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabian Jakobs", + "homepage": "https://github.com/fjakobs" + } + ], + "description": "ACE code editor integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/ace/issues", + "source": "https://github.com/contao-components/ace/tree/1.43.3" + }, + "time": "2025-09-04T07:43:43+00:00" + }, + { + "name": "contao-components/altcha", + "version": "2.2.3", + "source": { + "type": "git", + "url": "https://github.com/contao-components/altcha.git", + "reference": "032ee9036bbe96a41133379ce15273624392c839" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/altcha/zipball/032ee9036bbe96a41133379ce15273624392c839", + "reference": "032ee9036bbe96a41133379ce15273624392c839", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Regeci", + "homepage": "https://github.com/ovx" + } + ], + "description": "ALTCHA integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/altcha/issues", + "source": "https://github.com/contao-components/altcha/tree/2.2.3" + }, + "time": "2025-09-16T06:29:35+00:00" + }, + { + "name": "contao-components/choices", + "version": "11.1.0", + "source": { + "type": "git", + "url": "https://github.com/contao-components/choices.git", + "reference": "f87382f3b8243d0b3c4972690906202dd5577eb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/choices/zipball/f87382f3b8243d0b3c4972690906202dd5577eb2", + "reference": "f87382f3b8243d0b3c4972690906202dd5577eb2", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Josh Johnson", + "homepage": "https://github.com/jshjohnson" + } + ], + "description": "Choices integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/choices/issues", + "source": "https://github.com/contao-components/choices/tree/11.1.0" + }, + "time": "2025-08-18T08:37:23+00:00" + }, + { + "name": "contao-components/colorbox", + "version": "1.6.4.2", + "source": { + "type": "git", + "url": "https://github.com/contao-components/colorbox.git", + "reference": "80c3b1b5adff4add0a7a54db93ad0bf15ae6bd9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/colorbox/zipball/80c3b1b5adff4add0a7a54db93ad0bf15ae6bd9d", + "reference": "80c3b1b5adff4add0a7a54db93ad0bf15ae6bd9d", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "Colorbox integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/colorbox/issues", + "source": "https://github.com/contao-components/colorbox/tree/1.6.6" + }, + "time": "2020-05-01T15:29:20+00:00" + }, + { + "name": "contao-components/contao", + "version": "9.4.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/contao.git", + "reference": "3fb3929e1859a6d6e5567b320eeea0e81ccf051f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/contao/zipball/3fb3929e1859a6d6e5567b320eeea0e81ccf051f", + "reference": "3fb3929e1859a6d6e5567b320eeea0e81ccf051f", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "Contao Open Source CMS components", + "support": { + "issues": "https://github.com/contao-components/contao/issues", + "source": "https://github.com/contao-components/contao/tree/9.4.1" + }, + "time": "2025-08-11T16:22:23+00:00" + }, + { + "name": "contao-components/datepicker", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/datepicker.git", + "reference": "f039ea6ea921abc60f02aee6991c479c85d90151" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/datepicker/zipball/f039ea6ea921abc60f02aee6991c479c85d90151", + "reference": "f039ea6ea921abc60f02aee6991c479c85d90151", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Arian Stolwijk", + "homepage": "https://github.com/arian" + } + ], + "description": "Date picker integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/datepicker/issues", + "source": "https://github.com/contao-components/datepicker/tree/3.0.1" + }, + "time": "2024-11-15T10:05:54+00:00" + }, + { + "name": "contao-components/dropzone", + "version": "5.9.3", + "source": { + "type": "git", + "url": "https://github.com/contao-components/dropzone.git", + "reference": "212c524e3c226b01e8232287c764b22d7469df6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/dropzone/zipball/212c524e3c226b01e8232287c764b22d7469df6a", + "reference": "212c524e3c226b01e8232287c764b22d7469df6a", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "DropZone integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/dropzone/issues", + "source": "https://github.com/contao-components/dropzone/tree/5.9.3" + }, + "time": "2021-09-28T07:38:53+00:00" + }, + { + "name": "contao-components/handorgel", + "version": "1.0.0.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/handorgel.git", + "reference": "37cf6c431e847b2dbbbb43fec3a9f134871da01a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/handorgel/zipball/37cf6c431e847b2dbbbb43fec3a9f134871da01a", + "reference": "37cf6c431e847b2dbbbb43fec3a9f134871da01a", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Manuel Sommerhalder", + "homepage": "https://github.com/oncode" + } + ], + "description": "Handorgel integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/handorgel/issues", + "source": "https://github.com/contao-components/handorgel/tree/1.0.0.1" + }, + "time": "2024-02-22T09:17:13+00:00" + }, + { + "name": "contao-components/installer", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/installer.git", + "reference": "eb0c34f0f61a3338dd985a55bd865483e78c3bb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/installer/zipball/eb0c34f0f61a3338dd985a55bd865483e78c3bb7", + "reference": "eb0c34f0f61a3338dd985a55bd865483e78c3bb7", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.6" + }, + "require-dev": { + "composer/composer": "^1.0 || ^2.0", + "phpunit/phpunit": "^5.7.26" + }, + "type": "composer-plugin", + "extra": { + "class": "Contao\\ComponentsInstaller\\Composer\\Plugin" + }, + "autoload": { + "psr-4": { + "Contao\\ComponentsInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "Contao components installer", + "support": { + "issues": "https://github.com/contao-components/installer/issues", + "source": "https://github.com/contao-components/installer/tree/1.4.1" + }, + "time": "2020-12-23T10:51:52+00:00" + }, + { + "name": "contao-components/jquery", + "version": "3.7.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/jquery.git", + "reference": "34215fee962fc9b9831600d6b983d2f77d9e6f71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/jquery/zipball/34215fee962fc9b9831600d6b983d2f77d9e6f71", + "reference": "34215fee962fc9b9831600d6b983d2f77d9e6f71", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "OpenJS Foundation and other contributors", + "homepage": "https://github.com/jquery/jquery/blob/main/AUTHORS.txt" + } + ], + "description": "jQuery integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/jquery/issues", + "source": "https://github.com/contao-components/jquery/tree/3.7.1" + }, + "time": "2023-08-31T10:23:57+00:00" + }, + { + "name": "contao-components/jquery-ui", + "version": "1.13.2", + "source": { + "type": "git", + "url": "https://github.com/contao-components/jquery-ui.git", + "reference": "f1ac19cfd2093663278ffa509038d0ffc6d38db5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/jquery-ui/zipball/f1ac19cfd2093663278ffa509038d0ffc6d38db5", + "reference": "f1ac19cfd2093663278ffa509038d0ffc6d38db5", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "jQuery Foundation and other contributors", + "homepage": "https://github.com/jquery/jquery-ui/blob/main/AUTHORS.txt" + } + ], + "description": "jQuery UI integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/jquery-ui/issues", + "source": "https://github.com/contao-components/jquery-ui/tree/1.13.2" + }, + "time": "2022-12-07T15:46:44+00:00" + }, + { + "name": "contao-components/mediabox", + "version": "1.5.4.3", + "source": { + "type": "git", + "url": "https://github.com/contao-components/mediabox.git", + "reference": "f22a38ec178c00a1331d22584649082c3fc4cfb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/mediabox/zipball/f22a38ec178c00a1331d22584649082c3fc4cfb5", + "reference": "f22a38ec178c00a1331d22584649082c3fc4cfb5", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Einselen", + "homepage": "https://github.com/iaian7" + } + ], + "description": "Mediabox integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/mediabox/issues", + "source": "https://github.com/contao-components/mediabox/tree/1.5.4.3" + }, + "time": "2024-07-05T15:06:42+00:00" + }, + { + "name": "contao-components/mootools", + "version": "1.6.0.9", + "source": { + "type": "git", + "url": "https://github.com/contao-components/mootools.git", + "reference": "89d1d111c663a6a438ff5478fa7053d07e59db10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/mootools/zipball/89d1d111c663a6a438ff5478fa7053d07e59db10", + "reference": "89d1d111c663a6a438ff5478fa7053d07e59db10", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "MooTools Development Team", + "homepage": "http://mootools.net/developers" + } + ], + "description": "MooTools integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/mootools/issues", + "source": "https://github.com/contao-components/mootools/tree/1.6.0.9" + }, + "time": "2024-07-05T14:21:21+00:00" + }, + { + "name": "contao-components/simplemodal", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/contao-components/simplemodal.git", + "reference": "3525e8bbd67e40767ec485864c5be40e04989984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/simplemodal/zipball/3525e8bbd67e40767ec485864c5be40e04989984", + "reference": "3525e8bbd67e40767ec485864c5be40e04989984", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Dell'Anna", + "homepage": "https://plasm.it" + } + ], + "description": "SimpleModal integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/simplemodal/issues", + "source": "https://github.com/contao-components/simplemodal/tree/3.0.3" + }, + "time": "2025-02-17T10:32:20+00:00" + }, + { + "name": "contao-components/swipe", + "version": "2.2.2", + "source": { + "type": "git", + "url": "https://github.com/contao-components/swipe.git", + "reference": "fb642c0c82980e6cb7175572aa29cc8c18cacdc5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/swipe/zipball/fb642c0c82980e6cb7175572aa29cc8c18cacdc5", + "reference": "fb642c0c82980e6cb7175572aa29cc8c18cacdc5", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brad Birdsall", + "homepage": "https://github.com/thebird" + }, + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "A JavaScript touch slider with dot menu", + "support": { + "issues": "https://github.com/contao-components/swipe/issues", + "source": "https://github.com/contao-components/swipe/tree/2.2.2" + }, + "time": "2024-07-05T15:28:51+00:00" + }, + { + "name": "contao-components/swiper", + "version": "11.2.10", + "source": { + "type": "git", + "url": "https://github.com/contao-components/swiper.git", + "reference": "5d8da897acb7716c5e2508b7fc3a53e9e5cb3ab8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/swiper/zipball/5d8da897acb7716c5e2508b7fc3a53e9e5cb3ab8", + "reference": "5d8da897acb7716c5e2508b7fc3a53e9e5cb3ab8", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Vladimir Kharlampidi", + "homepage": "https://github.com/nolimits4web" + } + ], + "description": "The most modern mobile touch slider", + "support": { + "issues": "https://github.com/contao-components/swiper/issues", + "source": "https://github.com/contao-components/swiper/tree/11.2.10" + }, + "time": "2025-07-02T08:21:38+00:00" + }, + { + "name": "contao-components/tablesort", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/contao-components/tablesort.git", + "reference": "3111796f82456a279feb9ad305e54fbd422a2f28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/tablesort/zipball/3111796f82456a279feb9ad305e54fbd422a2f28", + "reference": "3111796f82456a279feb9ad305e54fbd422a2f28", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "Contao Open Source CMS tablesort", + "support": { + "issues": "https://github.com/contao-components/tablesort/issues", + "source": "https://github.com/contao-components/tablesort/tree/4.0.2" + }, + "time": "2024-07-05T15:15:09+00:00" + }, + { + "name": "contao-components/tablesorter", + "version": "2.31.3.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/tablesorter.git", + "reference": "9b3439f59c8b7aa5e2d7a136726f7c2918c11e76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/tablesorter/zipball/9b3439f59c8b7aa5e2d7a136726f7c2918c11e76", + "reference": "9b3439f59c8b7aa5e2d7a136726f7c2918c11e76", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rob Garrison", + "homepage": "https://github.com/Mottie" + } + ], + "description": "jQuery tablesorter integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/tablesorter/issues", + "source": "https://github.com/contao-components/tablesorter/tree/2.31.3.1" + }, + "time": "2024-08-16T09:33:19+00:00" + }, + { + "name": "contao-components/tinymce4", + "version": "8.1.2", + "source": { + "type": "git", + "url": "https://github.com/contao-components/tinymce4.git", + "reference": "0ab6cd90c16333287c4fbe0405802ee3a1983add" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/tinymce4/zipball/0ab6cd90c16333287c4fbe0405802ee3a1983add", + "reference": "0ab6cd90c16333287c4fbe0405802ee3a1983add", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Tiny", + "homepage": "https://github.com/tinymce" + } + ], + "description": "TinyMCE integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/tinymce4/issues", + "source": "https://github.com/contao-components/tinymce4/tree/8.1.2" + }, + "time": "2025-09-22T05:28:00+00:00" + }, + { + "name": "contao-components/tristen-tablesort", + "version": "5.6.0", + "source": { + "type": "git", + "url": "https://github.com/contao-components/tristen-tablesort.git", + "reference": "3069dd402b07e16ea8bb5f8dcce377e0b2ead1ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/tristen-tablesort/zipball/3069dd402b07e16ea8bb5f8dcce377e0b2ead1ba", + "reference": "3069dd402b07e16ea8bb5f8dcce377e0b2ead1ba", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tristen Brown", + "homepage": "https://github.com/tristen" + } + ], + "description": "Tablesort integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/tristen-tablesort/issues", + "source": "https://github.com/contao-components/tristen-tablesort/tree/5.6.0" + }, + "time": "2025-04-28T09:32:41+00:00" + }, + { + "name": "contao/core-bundle", + "version": "5.6.3", + "source": { + "type": "git", + "url": "https://github.com/contao/core-bundle.git", + "reference": "534b9cd26c25b81325a234adae93005b883c85f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao/core-bundle/zipball/534b9cd26c25b81325a234adae93005b883c85f4", + "reference": "534b9cd26c25b81325a234adae93005b883c85f4", + "shasum": "" + }, + "require": { + "ausi/slug-generator": "^1.1", + "bacon/bacon-qr-code": "^2.0", + "cmsig/seal": "^0.12", + "cmsig/seal-symfony-bundle": "^0.12", + "composer-runtime-api": "^2.0.14", + "contao-components/ace": "^1.8", + "contao-components/altcha": "^1.0 || ^2.0", + "contao-components/choices": "^11.0", + "contao-components/colorbox": "^1.6", + "contao-components/contao": "^9.1", + "contao-components/datepicker": "^3.0", + "contao-components/dropzone": "^5.0.1", + "contao-components/handorgel": "^1.0", + "contao-components/jquery": "^3.5", + "contao-components/jquery-ui": "^1.11.4", + "contao-components/mediabox": "^1.5", + "contao-components/mootools": "^1.6.0.1", + "contao-components/simplemodal": "^3.0", + "contao-components/swipe": "^2.0.3", + "contao-components/swiper": "^11.0", + "contao-components/tablesort": "^4.0", + "contao-components/tablesorter": "^2.1", + "contao-components/tinymce4": "^5.0 || ^6.0 || ^7.0 || ^8.0", + "contao-components/tristen-tablesort": "^5.3", + "contao/image": "^1.2", + "contao/imagine-svg": "^1.0", + "doctrine/collections": "^2.1", + "doctrine/dbal": "^3.7 || ^4.3", + "doctrine/doctrine-bundle": "^2.8", + "doctrine/orm": "^2.17 || ^3.0", + "doctrine/persistence": "^3.2", + "dragonmantank/cron-expression": "^3.1", + "enshrined/svg-sanitize": "^0.22", + "ext-dom": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-intl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-pcre": "*", + "ext-pdo": "*", + "ext-session": "*", + "ext-zlib": "*", + "friendsofsymfony/http-cache": "^3.0", + "friendsofsymfony/http-cache-bundle": "^3.0", + "guzzlehttp/promises": "^1.5 || ^2.0", + "imagine/imagine": "^1.2.4", + "knplabs/knp-menu": "^3.1", + "knplabs/knp-menu-bundle": "^3.0", + "knplabs/knp-time-bundle": "^1.11 || ^2.0", + "lcobucci/jwt": "^4.0 || ^5.0", + "league/commonmark": "^2.2", + "league/flysystem": "^3.7", + "league/flysystem-bundle": "^3.0", + "league/flysystem-local": "^3.0", + "matthiasmullie/minify": "^1.3", + "monolog/monolog": "^3.0", + "nelmio/cors-bundle": "^2.0.1", + "nelmio/security-bundle": "^3.0", + "nikic/php-parser": "^5.0", + "nyholm/psr7": "^1.2", + "paragonie/constant_time_encoding": "^2.8 || ^3.1", + "php": "^8.2", + "php-feed-io/feed-io": "^6.0", + "phpspec/php-diff": "^1.0", + "psr/cache": "^3.0", + "psr/container": "^2.0", + "psr/http-message": "^1.0 || ^2.0", + "psr/log": "^1.1 || 2.0 || ^3.0", + "scheb/2fa-backup-code": "^6.0 || ^7.0", + "scheb/2fa-bundle": "^6.0 || ^7.0", + "scheb/2fa-trusted-device": "^6.0 || ^7.0", + "scrivo/highlight.php": "^9.18", + "scssphp/scssphp": "^1.5 || ^2.0", + "simplepie/simplepie": "^1.3", + "spatie/schema-org": "^3.4", + "spomky-labs/otphp": "^11.3", + "symfony-cmf/routing": "^3.0", + "symfony-cmf/routing-bundle": "^3.0", + "symfony/asset": "^6.4 || ^7.0", + "symfony/cache-contracts": "^3.0", + "symfony/clock": "^6.4 || ^7.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/deprecation-contracts": "^3.0", + "symfony/doctrine-bridge": "^6.4 || ^7.0", + "symfony/doctrine-messenger": "^6.4 || ^7.0", + "symfony/dom-crawler": "^6.4 || ^7.0", + "symfony/event-dispatcher": "^6.4 || ^7.0", + "symfony/event-dispatcher-contracts": "^3.0", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/filesystem": "^6.4 || ^7.0", + "symfony/finder": "^6.4 || ^7.0", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/html-sanitizer": "^6.4 || ^7.0", + "symfony/http-client": "^6.4 || ^7.0", + "symfony/http-client-contracts": "^3.1", + "symfony/http-foundation": "^6.4 || ^7.0", + "symfony/http-kernel": "^6.4 || ^7.0", + "symfony/intl": "^6.4 || ^7.0", + "symfony/mailer": "^6.4 || ^7.0", + "symfony/messenger": "^7.2", + "symfony/mime": "^6.4 || ^7.0", + "symfony/monolog-bridge": "^6.4 || ^7.0", + "symfony/password-hasher": "^6.4 || ^7.0", + "symfony/polyfill-intl-idn": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/process": "^6.4 || ^7.0", + "symfony/property-access": "^6.4 || ^7.0", + "symfony/rate-limiter": "^6.4 || ^7.0", + "symfony/routing": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/security-core": "^6.4 || ^7.0", + "symfony/security-csrf": "^6.4 || ^7.0", + "symfony/security-http": "^6.4 || ^7.0", + "symfony/service-contracts": "^3.0", + "symfony/string": "^6.4 || ^7.0", + "symfony/translation": "^6.4 || ^7.0", + "symfony/translation-contracts": "^3.0", + "symfony/twig-bridge": "^6.4 || ^7.0", + "symfony/twig-bundle": "^6.4 || ^7.0", + "symfony/uid": "^6.4 || ^7.0", + "symfony/var-dumper": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "terminal42/escargot": "^1.6", + "terminal42/service-annotation-bundle": "^1.1", + "toflar/cronjob-supervisor": "^2.0", + "twig/string-extra": "^3.0", + "twig/twig": "^3.15", + "ua-parser/uap-php": "^3.9", + "web-auth/webauthn-lib": "^5.0", + "web-auth/webauthn-stimulus": "^5.0", + "web-auth/webauthn-symfony-bundle": "^5.0", + "webignition/robots-txt-file": "^3.0", + "wikimedia/less.php": "^1.7" + }, + "conflict": { + "contao-community-alliance/composer-plugin": "<3.0", + "contao/core": "*", + "contao/manager-bundle": "^4.5 <4.5.2", + "contao/manager-plugin": "<2.0 || >=3.0", + "doctrine/cache": "<1.10", + "terminal42/contao-ce-access": "<3.0", + "thecodingmachine/safe": "<1.2", + "web-auth/webauthn-symfony-bundle": "5.1.* <5.1.3 || 5.2.0 || 5.2.1" + }, + "require-dev": { + "cmsig/seal-memory-adapter": "^0.12", + "contao/manager-plugin": "^2.3.1", + "contao/news-bundle": "self.version", + "contao/test-case": "self.version", + "doctrine/annotations": "^2.0", + "ext-fileinfo": "*", + "league/flysystem-memory": "^3.0", + "phpunit/phpunit": "^11.5", + "sebastian/diff": "^6.0", + "symfony/browser-kit": "^6.4 || ^7.0", + "symfony/cache": "^6.4 || ^7.0", + "symfony/monolog-bundle": "^3.1", + "symfony/web-profiler-bundle": "^6.4 || ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "contao-manager-plugin": "Contao\\CoreBundle\\ContaoManager\\Plugin" + }, + "autoload": { + "psr-4": { + "Contao\\CoreBundle\\": "src/" + }, + "classmap": [ + "contao/" + ], + "exclude-from-classmap": [ + "contao/config/", + "contao/dca/", + "contao/languages/", + "contao/templates/", + "contao/themes/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + }, + { + "name": "Contao Community", + "homepage": "https://contao.org/contributors" + } + ], + "description": "Contao Open Source CMS", + "homepage": "https://contao.org", + "support": { + "docs": "https://docs.contao.org", + "forum": "https://community.contao.org", + "issues": "https://github.com/contao/contao/issues", + "source": "https://github.com/contao/core-bundle" + }, + "funding": [ + { + "url": "https://to.contao.org/donate", + "type": "other" + } + ], + "time": "2025-09-30T09:14:31+00:00" + }, + { + "name": "contao/image", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/contao/image.git", + "reference": "8745f15d2d43351b85a261c9c1d23038f73e8dcc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao/image/zipball/8745f15d2d43351b85a261c9c1d23038f73e8dcc", + "reference": "8745f15d2d43351b85a261c9c1d23038f73e8dcc", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-gd": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-zlib": "*", + "imagine/imagine": "^1.3", + "php": "^7.2 || ^8.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-php73": "^1.27", + "symfony/polyfill-php80": "^1.27" + }, + "conflict": { + "contao/imagine-svg": "<1.0 || >=2.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4", + "contao/imagine-svg": "^1.0", + "contao/test-case": "^4.5", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-php81": "^1.27" + }, + "suggest": { + "ext-exif": "To support EXIF auto-rotation and preserve copyright metadata" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "target-directory": "tools" + } + }, + "autoload": { + "psr-4": { + "Contao\\Image\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Martin Auswöger", + "homepage": "https://github.com/ausi" + } + ], + "description": "Contao image library", + "support": { + "issues": "https://github.com/contao/image/issues", + "source": "https://github.com/contao/image/tree/1.2.3" + }, + "funding": [ + { + "url": "https://to.contao.org/donate", + "type": "custom" + } + ], + "time": "2025-02-13T13:02:15+00:00" + }, + { + "name": "contao/imagine-svg", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/contao/imagine-svg.git", + "reference": "3e8c7356951a94bc8ff6338296496a2a3cd23dc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao/imagine-svg/zipball/3e8c7356951a94bc8ff6338296496a2a3cd23dc4", + "reference": "3e8c7356951a94bc8ff6338296496a2a3cd23dc4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "imagine/imagine": "^1.1", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8", + "composer/semver": "^3.3", + "contao/test-case": "^4.4", + "phpunit/phpunit": "^8.5.4", + "symfony/filesystem": "^5.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "target-directory": "tools" + } + }, + "autoload": { + "psr-4": { + "Contao\\ImagineSvg\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Martin Auswöger", + "homepage": "https://github.com/ausi" + } + ], + "description": "Contao Imagine SVG library", + "support": { + "issues": "https://github.com/contao/imagine-svg/issues", + "source": "https://github.com/contao/imagine-svg/tree/1.0.4" + }, + "funding": [ + { + "url": "https://to.contao.org/donate", + "type": "custom" + } + ], + "time": "2024-10-02T10:47:33+00:00" + }, + { + "name": "dasprid/enum", + "version": "1.0.7", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "shasum": "" + }, + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" + }, + "time": "2025-09-16T12:23:56+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/annotations", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/901c2ee5d26eb64ff43c47976e114bf00843acf7", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2 || ^3", + "ext-tokenizer": "*", + "php": "^7.2 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.10.28", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/2.0.2" + }, + "abandoned": true, + "time": "2024-09-05T10:17:24+00:00" + }, + { + "name": "doctrine/collections", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/2eb07e5953eed811ce1b309a7478a3b236f2273d", + "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1", + "php": "^8.1", + "symfony/polyfill-php84": "^1.30" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ext-json": "*", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/2.3.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections", + "type": "tidelift" + } + ], + "time": "2025-03-22T10:17:19+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.10.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "65edaca19a752730f290ec2fb89d593cb40afb43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/65edaca19a752730f290ec2fb89d593cb40afb43", + "reference": "65edaca19a752730f290ec2fb89d593cb40afb43", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "conflict": { + "doctrine/cache": "< 1.11" + }, + "require-dev": { + "doctrine/cache": "^1.11|^2.0", + "doctrine/coding-standard": "14.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "9.6.29", + "slevomat/coding-standard": "8.24.0", + "squizlabs/php_codesniffer": "4.0.0", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.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": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.10.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2025-10-09T09:05:12+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + }, + "time": "2025-04-07T20:06:18+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.18.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "cd5d4da6a5f7cf3d8708e17211234657b5eb4e95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/cd5d4da6a5f7cf3d8708e17211234657b5eb4e95", + "reference": "cd5d4da6a5f7cf3d8708e17211234657b5eb4e95", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^3.7.0 || ^4.0", + "doctrine/deprecations": "^1.0", + "doctrine/persistence": "^3.1 || ^4", + "doctrine/sql-formatter": "^1.0.1", + "php": "^8.1", + "symfony/cache": "^6.4 || ^7.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/doctrine-bridge": "^6.4.3 || ^7.0.3", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/service-contracts": "^2.5 || ^3" + }, + "conflict": { + "doctrine/annotations": ">=3.0", + "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" + }, + "require-dev": { + "doctrine/annotations": "^1 || ^2", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^14", + "doctrine/orm": "^2.17 || ^3.1", + "friendsofphp/proxy-manager-lts": "^1.0", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", + "phpstan/phpstan-strict-rules": "^2", + "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/expression-language": "^6.4 || ^7.0", + "symfony/messenger": "^6.4 || ^7.0", + "symfony/property-info": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/stopwatch": "^6.4 || ^7.0", + "symfony/string": "^6.4 || ^7.0", + "symfony/twig-bridge": "^6.4 || ^7.0", + "symfony/validator": "^6.4 || ^7.0", + "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" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "ext-pdo": "*", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org/" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineBundle/issues", + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-bundle", + "type": "tidelift" + } + ], + "time": "2025-10-11T04:43:27+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2024-05-22T20:47:39+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "doctrine/orm", + "version": "3.5.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "5a541b8b3a327ab1ea5f93b1615b4ff67a34e109" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/5a541b8b3a327ab1ea5f93b1615b4ff67a34e109", + "reference": "5a541b8b3a327ab1ea5f93b1615b4ff67a34e109", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/collections": "^2.2", + "doctrine/dbal": "^3.8.2 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2", + "doctrine/inflector": "^1.4 || ^2.0", + "doctrine/instantiator": "^1.3 || ^2", + "doctrine/lexer": "^3", + "doctrine/persistence": "^3.3.1 || ^4", + "ext-ctype": "*", + "php": "^8.1", + "psr/cache": "^1 || ^2 || ^3", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^6.3.9 || ^7.0" + }, + "require-dev": { + "doctrine/coding-standard": "^13.0", + "phpbench/phpbench": "^1.0", + "phpdocumentor/guides-cli": "^1.4", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "2.0.3", + "phpstan/phpstan-deprecation-rules": "^2", + "phpunit/phpunit": "^10.4.0", + "psr/log": "^1 || ^2 || ^3", + "squizlabs/php_codesniffer": "3.12.0", + "symfony/cache": "^5.4 || ^6.2 || ^7.0" + }, + "suggest": { + "ext-dom": "Provides support for XSD validation for XML mapping files", + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\ORM\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Object-Relational-Mapper for PHP", + "homepage": "https://www.doctrine-project.org/projects/orm.html", + "keywords": [ + "database", + "orm" + ], + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/3.5.2" + }, + "time": "2025-08-08T17:00:40+00:00" + }, + { + "name": "doctrine/persistence", + "version": "3.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "23069c8cfc19d7825e9fbe3341227d8c51eff2bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/23069c8cfc19d7825e9fbe3341227d8c51eff2bc", + "reference": "23069c8cfc19d7825e9fbe3341227d8c51eff2bc", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^1 || ^2", + "php": "^7.2 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0" + }, + "conflict": { + "doctrine/common": "<2.10" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "doctrine/common": "^3.0", + "phpstan/phpstan": "1.12.7", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5.38 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Persistence\\": "src/Persistence" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", + "keywords": [ + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/3.4.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2025-09-29T06:33:58+00:00" + }, + { + "name": "doctrine/sql-formatter", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "https://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" + }, + "time": "2025-01-24T11:45:48+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "8c784d071debd117328803d86b2097615b457500" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2024-10-09T13:47:03+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "enshrined/svg-sanitize", + "version": "0.22.0", + "source": { + "type": "git", + "url": "https://github.com/darylldoyle/svg-sanitizer.git", + "reference": "0afa95ea74be155a7bcd6c6fb60c276c39984500" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/0afa95ea74be155a7bcd6c6fb60c276c39984500", + "reference": "0afa95ea74be155a7bcd6c6fb60c276c39984500", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5 || ^8.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "enshrined\\svgSanitize\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Daryll Doyle", + "email": "daryll@enshrined.co.uk" + } + ], + "description": "An SVG sanitizer for PHP", + "support": { + "issues": "https://github.com/darylldoyle/svg-sanitizer/issues", + "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.22.0" + }, + "time": "2025-08-12T10:13:48+00:00" + }, + { + "name": "friendsofsymfony/http-cache", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfSymfony/FOSHttpCache.git", + "reference": "c5ed7189df2cf0550541c6d1a3d2fb558213e403" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/zipball/c5ed7189df2cf0550541c6d1a3d2fb558213e403", + "reference": "c5ed7189df2cf0550541c6d1a3d2fb558213e403", + "shasum": "" + }, + "require": { + "php": "^8.1", + "php-http/async-client-implementation": "^1.1.0 || ^2.0", + "php-http/client-common": "^1.1.0 || ^2.0", + "php-http/discovery": "^1.12", + "psr/http-client-implementation": "^1.0 || ^2.0", + "psr/http-factory": "^1.0", + "symfony/event-dispatcher": "^6.4 || ^7.0", + "symfony/options-resolver": "^6.4 || ^7.0" + }, + "conflict": { + "toflar/psr6-symfony-http-cache-store": "<2.2.1" + }, + "require-dev": { + "mockery/mockery": "^1.6.0", + "monolog/monolog": "^1.0", + "php-http/guzzle7-adapter": "^1", + "php-http/mock-client": "^1.6.0", + "phpunit/phpunit": "^10.5", + "symfony/http-kernel": "^6.4|| ^7.0", + "symfony/process": "^6.4|| ^7.0" + }, + "suggest": { + "friendsofsymfony/http-cache-bundle": "For integration with the Symfony framework", + "monolog/monolog": "For logging issues while invalidating", + "phpunit/phpunit": "To build tests with the WebServerSubscriber, ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "FOS\\HttpCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Liip AG", + "homepage": "http://www.liip.ch/" + }, + { + "name": "Driebit", + "email": "tech@driebit.nl", + "homepage": "http://www.driebit.nl" + }, + { + "name": "Community contributions", + "homepage": "https://github.com/friendsofsymfony/FOSHttpCache/contributors" + } + ], + "description": "Tools to manage HTTP caching proxies with PHP", + "homepage": "https://github.com/friendsofsymfony/FOSHttpCache", + "keywords": [ + "caching", + "http", + "invalidation", + "nginx", + "purge", + "varnish" + ], + "support": { + "issues": "https://github.com/FriendsOfSymfony/FOSHttpCache/issues", + "source": "https://github.com/FriendsOfSymfony/FOSHttpCache/tree/3.1.1" + }, + "time": "2025-06-17T09:10:02+00:00" + }, + { + "name": "friendsofsymfony/http-cache-bundle", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfSymfony/FOSHttpCacheBundle.git", + "reference": "389b6d84d6fc754279eb52cbdd57f1952907dc0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSHttpCacheBundle/zipball/389b6d84d6fc754279eb52cbdd57f1952907dc0e", + "reference": "389b6d84d6fc754279eb52cbdd57f1952907dc0e", + "shasum": "" + }, + "require": { + "friendsofsymfony/http-cache": "^3.0", + "php": "^8.1", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/http-foundation": "^6.4 || ^7.0", + "symfony/http-kernel": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0" + }, + "conflict": { + "symfony/monolog-bridge": "<3.4.4", + "twig/twig": "<1.12.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.54", + "guzzlehttp/guzzle": "^7.2", + "jean-beru/fos-http-cache-cloudfront": "^1.1.1", + "matthiasnoback/symfony-config-test": "^4.3.0 || ^5.1", + "matthiasnoback/symfony-dependency-injection-test": "^4.3.1 || ^5.0", + "mockery/mockery": "^1.6.9", + "monolog/monolog": "*", + "php-http/discovery": "^1.13", + "php-http/guzzle7-adapter": "^0.1.1", + "php-http/httplug": "^2.2.0", + "php-http/message": "^1.0 || ^2.0", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2", + "phpstan/phpstan-symfony": "^2", + "phpunit/phpunit": "^10.5", + "symfony/browser-kit": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/css-selector": "^6.4 || ^7.0", + "symfony/finder": "^6.4 || ^7.0", + "symfony/monolog-bundle": "^3.0", + "symfony/routing": "^6.4 || ^7.0", + "symfony/twig-bundle": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "twig/twig": "^v3.8" + }, + "suggest": { + "jean-beru/fos-http-cache-cloudfront": "To use CloudFront proxy", + "sensio/framework-extra-bundle": "For Tagged Cache Invalidation", + "symfony/console": "To send invalidation requests from the command line", + "symfony/expression-language": "For Tagged Cache Invalidation" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "FOS\\HttpCacheBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Liip AG", + "homepage": "http://www.liip.ch/" + }, + { + "name": "Driebit", + "email": "tech@driebit.nl", + "homepage": "http://www.driebit.nl" + }, + { + "name": "Community contributions", + "homepage": "https://github.com/friendsofsymfony/FOSHttpCacheBundle/contributors" + } + ], + "description": "Set path based HTTP cache headers and send invalidation requests to your HTTP cache", + "homepage": "https://github.com/FriendsOfSymfony/FOSHttpCacheBundle", + "keywords": [ + "caching", + "esi", + "http", + "invalidation", + "purge", + "varnish" + ], + "support": { + "issues": "https://github.com/FriendsOfSymfony/FOSHttpCacheBundle/issues", + "source": "https://github.com/FriendsOfSymfony/FOSHttpCacheBundle/tree/3.2.0" + }, + "time": "2025-06-17T14:04:24+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "481557b130ef3790cf82b713667b43030dc9c957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2025-08-22T14:34:08+00:00" + }, + { + "name": "heimrichhannot-contao-components/sortablejs", + "version": "1.8.4", + "source": { + "type": "git", + "url": "https://github.com/heimrichhannot-contao-components/sortablejs.git", + "reference": "d4083809bf17094bb48383994bcc9b8e2a73171c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/heimrichhannot-contao-components/sortablejs/zipball/d4083809bf17094bb48383994bcc9b8e2a73171c", + "reference": "d4083809bf17094bb48383994bcc9b8e2a73171c", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Heimrich & Hannot", + "homepage": "http://www.heimrich-hannot.de" + } + ], + "description": "sortablejs integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/heimrichhannot-contao-components/sortablejs/issues", + "source": "https://github.com/heimrichhannot-contao-components/sortablejs/tree/1.8.4" + }, + "time": "2019-03-19T14:52:21+00:00" + }, + { + "name": "heimrichhannot/contao-ajax-bundle", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/heimrichhannot/contao-ajax-bundle.git", + "reference": "cc3d241415c3477c09dd89fccde7e7812614bad2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/heimrichhannot/contao-ajax-bundle/zipball/cc3d241415c3477c09dd89fccde7e7812614bad2", + "reference": "cc3d241415c3477c09dd89fccde7e7812614bad2", + "shasum": "" + }, + "require": { + "contao/core-bundle": "^4.13 || ^5.0", + "heimrichhannot/contao-utils-bundle": "^2.217 || ^3.0", + "php": "^8.2", + "symfony/http-foundation": "^5.4 || ^6.0" + }, + "require-dev": { + "contao/contao-rector": "dev-main", + "contao/manager-plugin": "^2.0", + "phpstan/phpstan": "^1.12", + "phpstan/phpstan-symfony": "^1.4", + "rector/rector": "^1.2", + "symplify/easy-coding-standard": "^12.5" + }, + "type": "contao-bundle", + "extra": { + "contao-manager-plugin": "HeimrichHannot\\AjaxBundle\\ContaoManager\\Plugin" + }, + "autoload": { + "psr-4": { + "HeimrichHannot\\AjaxBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Heimrich & Hannot", + "email": "digitales@heimrich-hannot.de", + "homepage": "http://www.heimrich-hannot.de", + "role": "Developer" + } + ], + "description": "Keep contao ajax requests organized and handle responses with ease.", + "homepage": "https://github.com/heimrichhannot/contao-ajax-bundle", + "keywords": [ + "ajax", + "contao", + "request", + "response" + ], + "support": { + "issues": "https://github.com/heimrichhannot/contao-ajax-bundle/issues", + "source": "https://github.com/heimrichhannot/contao-ajax-bundle/tree/1.5.1" + }, + "time": "2025-01-03T10:45:35+00:00" + }, + { + "name": "heimrichhannot/contao-encore-contracts", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/heimrichhannot/contao-encore-contracts.git", + "reference": "1ba9028736e551c79035475daeb5a91ee948628d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/heimrichhannot/contao-encore-contracts/zipball/1ba9028736e551c79035475daeb5a91ee948628d", + "reference": "1ba9028736e551c79035475daeb5a91ee948628d", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "HeimrichHannot\\EncoreContracts\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Heimrich & Hannot GmbH", + "email": "digitales@heimrich-hannot.de", + "homepage": "https://heimrich-hannot.de", + "role": "developer" + } + ], + "description": "A set of abstractions needed for encore bundle preparation.", + "homepage": "https://github.com/heimrichhannot/contao-encore-contracts", + "support": { + "issues": "https://github.com/heimrichhannot/contao-encore-contracts/issues", + "source": "https://github.com/heimrichhannot/contao-encore-contracts/tree/1.1.0" + }, + "time": "2025-09-04T09:47:11+00:00" + }, + { + "name": "heimrichhannot/contao-multi-column-editor-bundle", + "version": "2.20.3", + "source": { + "type": "git", + "url": "https://github.com/heimrichhannot/contao-multi-column-editor-bundle.git", + "reference": "273c289378485ab0c3b31cbbe6540a09185f5819" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/heimrichhannot/contao-multi-column-editor-bundle/zipball/273c289378485ab0c3b31cbbe6540a09185f5819", + "reference": "273c289378485ab0c3b31cbbe6540a09185f5819", + "shasum": "" + }, + "require": { + "contao/core-bundle": "^4.9 || ^5.0", + "heimrichhannot-contao-components/sortablejs": "^1.8", + "heimrichhannot/contao-ajax-bundle": "^1.0", + "heimrichhannot/contao-encore-contracts": "^1.0.2", + "heimrichhannot/contao-utils-bundle": "^2.225 || ^3.0", + "php": "^7.4 || ^8.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/deprecation-contracts": "^1.0 || ^2.0 || ^3.0", + "symfony/service-contracts": "^1.0 || ^2.0 || ^3.0" + }, + "replace": { + "heimrichhannot/contao-multi_column_editor": "*" + }, + "type": "contao-bundle", + "extra": { + "contao-manager-plugin": "HeimrichHannot\\MultiColumnEditorBundle\\ContaoManager\\Plugin" + }, + "autoload": { + "psr-4": { + "HeimrichHannot\\MultiColumnEditorBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Heimrich & Hannot", + "email": "digitales@heimrich-hannot.de", + "homepage": "https://www.heimrich-hannot.de", + "role": "Developer" + } + ], + "description": "This module offers an input type for editing one or more records in frontend and backend.", + "homepage": "https://github.com/heimrichhannot/contao-multi-column-editor-bundle", + "keywords": [ + "column", + "contao", + "edit", + "editor", + "multi", + "wizard" + ], + "support": { + "issues": "https://github.com/heimrichhannot/contao-multi-column-editor-bundle/issues", + "source": "https://github.com/heimrichhannot/contao-multi-column-editor-bundle/tree/2.20.3" + }, + "time": "2025-10-02T12:38:35+00:00" + }, + { + "name": "heimrichhannot/contao-utils-bundle", + "version": "3.9.4", + "source": { + "type": "git", + "url": "https://github.com/heimrichhannot/contao-utils-bundle.git", + "reference": "a28bbf7e889a3bb36cdc2166968fd3df3d2efbc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/heimrichhannot/contao-utils-bundle/zipball/a28bbf7e889a3bb36cdc2166968fd3df3d2efbc1", + "reference": "a28bbf7e889a3bb36cdc2166968fd3df3d2efbc1", + "shasum": "" + }, + "require": { + "contao/core-bundle": "^4.13 || ^5.0", + "doctrine/dbal": "^2.13 || ^3.0", + "ext-dom": "*", + "ext-simplexml": "*", + "php": "^8.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/config": "^5.4 || ^6.0", + "symfony/event-dispatcher-contracts": "^1.0 || ^2.0 || ^3.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/http-foundation": "^5.4 || ^6.0", + "symfony/http-kernel": "^5.4 || ^6.0", + "symfony/string": "^5.2 || ^6.0", + "twig/twig": "^3.0" + }, + "require-dev": { + "contao/contao-rector": "dev-main", + "contao/manager-plugin": "^2.0", + "contao/test-case": "^4.13 || ^5.0", + "heimrichhannot/contao-test-utilities-bundle": "^0.1", + "php-coveralls/php-coveralls": "^2.0", + "phpstan/phpstan": "^1.10 || ^2.0", + "phpstan/phpstan-symfony": "^1.2 || ^2.0", + "phpunit/phpunit": "^8.0 || ^9.0", + "rector/rector": "^1.2 || ^2.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0" + }, + "type": "contao-bundle", + "extra": { + "contao-manager-plugin": "HeimrichHannot\\UtilsBundle\\ContaoManager\\Plugin" + }, + "autoload": { + "psr-4": { + "HeimrichHannot\\UtilsBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "description": "This bundle offers various utility functionality for the Contao CMS.", + "support": { + "issues": "https://github.com/heimrichhannot/contao-utils-bundle/issues", + "source": "https://github.com/heimrichhannot/contao-utils-bundle/tree/3.9.4" + }, + "time": "2025-10-02T07:05:35+00:00" + }, + { + "name": "imagine/imagine", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/php-imagine/Imagine.git", + "reference": "80ab21434890dee9ba54969d31c51ac8d4d551e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-imagine/Imagine/zipball/80ab21434890dee9ba54969d31c51ac8d4d551e0", + "reference": "80ab21434890dee9ba54969d31c51ac8d4d551e0", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4 || ^9.3" + }, + "suggest": { + "ext-exif": "to read EXIF metadata", + "ext-gd": "to use the GD implementation", + "ext-gmagick": "to use the Gmagick implementation", + "ext-imagick": "to use the Imagick implementation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Imagine\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bulat Shakirzyanov", + "email": "mallluhuct@gmail.com", + "homepage": "http://avalanche123.com" + } + ], + "description": "Image processing for PHP", + "homepage": "http://imagine.readthedocs.org/", + "keywords": [ + "drawing", + "graphics", + "image manipulation", + "image processing" + ], + "support": { + "issues": "https://github.com/php-imagine/Imagine/issues", + "source": "https://github.com/php-imagine/Imagine/tree/1.5.0" + }, + "time": "2024-12-03T14:37:55+00:00" + }, + { + "name": "knplabs/knp-menu", + "version": "v3.8.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpMenu.git", + "reference": "79d325909a1d428a93f1a0f55e90177830e283bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpMenu/zipball/79d325909a1d428a93f1a0f55e90177830e283bb", + "reference": "79d325909a1d428a93f1a0f55e90177830e283bb", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "symfony/http-foundation": "<5.4", + "twig/twig": "<2.16" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^9.6", + "psr/container": "^1.0 || ^2.0", + "symfony/http-foundation": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^7.0", + "symfony/routing": "^5.4 || ^6.0 || ^7.0", + "twig/twig": "^2.16 || ^3.0" + }, + "suggest": { + "twig/twig": "for the TwigRenderer and the integration with your templates" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Menu\\": "src/Knp/Menu" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KnpLabs", + "homepage": "https://knplabs.com" + }, + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + }, + { + "name": "The Community", + "homepage": "https://github.com/KnpLabs/KnpMenu/contributors" + } + ], + "description": "An object oriented menu library", + "homepage": "https://knplabs.com", + "keywords": [ + "menu", + "tree" + ], + "support": { + "issues": "https://github.com/KnpLabs/KnpMenu/issues", + "source": "https://github.com/KnpLabs/KnpMenu/tree/v3.8.0" + }, + "time": "2025-06-13T15:03:33+00:00" + }, + { + "name": "knplabs/knp-menu-bundle", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpMenuBundle.git", + "reference": "eabe07859751a0ed77c04dcb6b908fcd2c336cf3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpMenuBundle/zipball/eabe07859751a0ed77c04dcb6b908fcd2c336cf3", + "reference": "eabe07859751a0ed77c04dcb6b908fcd2c336cf3", + "shasum": "" + }, + "require": { + "knplabs/knp-menu": "^3.8", + "php": "^8.1", + "symfony/config": "^5.4 | ^6.0 | ^7.0", + "symfony/dependency-injection": "^5.4 | ^6.0 | ^7.0", + "symfony/deprecation-contracts": "^2.5 | ^3.3", + "symfony/http-kernel": "^5.4 | ^6.0 | ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5 | ^11.5 | ^12.1", + "symfony/expression-language": "^5.4 | ^6.0 | ^7.0", + "symfony/phpunit-bridge": "^6.0 | ^7.0", + "symfony/templating": "^5.4 | ^6.0 | ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Bundle\\MenuBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Knplabs", + "homepage": "http://knplabs.com" + }, + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/KnpLabs/KnpMenuBundle/contributors" + } + ], + "description": "This bundle provides an integration of the KnpMenu library", + "keywords": [ + "menu" + ], + "support": { + "issues": "https://github.com/KnpLabs/KnpMenuBundle/issues", + "source": "https://github.com/KnpLabs/KnpMenuBundle/tree/v3.6.0" + }, + "time": "2025-06-14T11:37:33+00:00" + }, + { + "name": "knplabs/knp-time-bundle", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpTimeBundle.git", + "reference": "93e9528415b28a19872d74b28e816045c0fd217b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpTimeBundle/zipball/93e9528415b28a19872d74b28e816045c0fd217b", + "reference": "93e9528415b28a19872d74b28e816045c0fd217b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "phpunit/phpunit": "^9.6", + "symfony/framework-bundle": "^5.4|^6.0|^7.0", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0" + }, + "suggest": { + "symfony/twig-bundle": "to use the Twig `time_diff()` function and `|time_diff`/`|duration` filter" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Bundle\\TimeBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KnpLabs Team", + "homepage": "https://knplabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/KnpLabs/KnpTimeBundle/contributors" + } + ], + "description": "Making your dates and durations look sensible and descriptive", + "homepage": "https://github.com/KnpLabs/KnpTimeBundle", + "keywords": [ + "bundle", + "date", + "descriptive time", + "duration", + "knp", + "knplabs", + "time" + ], + "support": { + "issues": "https://github.com/KnpLabs/KnpTimeBundle/issues", + "source": "https://github.com/KnpLabs/KnpTimeBundle/tree/v2.4.0" + }, + "time": "2024-06-11T09:38:28+00:00" + }, + { + "name": "lcobucci/clock", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/clock.git", + "reference": "f91d84f65cb3e974988bbe872b5da8ca132a155f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/f91d84f65cb3e974988bbe872b5da8ca132a155f", + "reference": "f91d84f65cb3e974988bbe872b5da8ca132a155f", + "shasum": "" + }, + "require": { + "php": "~8.3.0 || ~8.4.0", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "infection/infection": "^0.31", + "lcobucci/coding-standard": "^11.1.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^2.0.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0.0", + "phpstan/phpstan-strict-rules": "^2.0.0", + "phpunit/phpunit": "^12.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" + } + ], + "description": "Yet another clock abstraction", + "support": { + "issues": "https://github.com/lcobucci/clock/issues", + "source": "https://github.com/lcobucci/clock/tree/3.4.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2025-10-08T18:00:48+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "5.5.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "a835af59b030d3f2967725697cf88300f579088e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a835af59b030d3f2967725697cf88300f579088e", + "reference": "a835af59b030d3f2967725697cf88300f579088e", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-sodium": "*", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "psr/clock": "^1.0" + }, + "require-dev": { + "infection/infection": "^0.29", + "lcobucci/clock": "^3.2", + "lcobucci/coding-standard": "^11.0", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10.7", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.10", + "phpstan/phpstan-strict-rules": "^1.5.0", + "phpunit/phpunit": "^11.1" + }, + "suggest": { + "lcobucci/clock": ">= 3.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/5.5.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2025-01-26T21:29:45+00:00" + }, + { + "name": "league/commonmark", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "10732241927d3971d28e7ea7b5712721fa2296ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/10732241927d3971d28e7ea7b5712721fa2296ca", + "reference": "10732241927d3971d28e7ea7b5712721fa2296ca", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2025-07-20T12:47:49+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.30.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "2203e3151755d874bb2943649dae1eb8533ac93e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2203e3151755d874bb2943649dae1eb8533ac93e", + "reference": "2203e3151755d874bb2943649dae1eb8533ac93e", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3|^2", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2|^2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.30.0" + }, + "time": "2025-06-25T13:29:59+00:00" + }, + { + "name": "league/flysystem-bundle", + "version": "3.5.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-bundle.git", + "reference": "bf5ab3c072c0def47872e28f69876548d8669657" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-bundle/zipball/bf5ab3c072c0def47872e28f69876548d8669657", + "reference": "bf5ab3c072c0def47872e28f69876548d8669657", + "shasum": "" + }, + "require": { + "league/flysystem": "^3.0", + "php": ">=8.0", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "doctrine/mongodb-odm": "^2.0", + "league/flysystem-async-aws-s3": "^3.1", + "league/flysystem-aws-s3-v3": "^3.1", + "league/flysystem-azure-blob-storage": "^3.1", + "league/flysystem-ftp": "^3.1", + "league/flysystem-google-cloud-storage": "^3.1", + "league/flysystem-gridfs": "^3.28", + "league/flysystem-memory": "^3.1", + "league/flysystem-read-only": "^3.15", + "league/flysystem-sftp-v3": "^3.1", + "league/flysystem-webdav": "^3.29", + "platformcommunity/flysystem-bunnycdn": "^3.3", + "symfony/dotenv": "^5.4 || ^6.0 || ^7.0", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "League\\FlysystemBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + } + ], + "description": "Symfony bundle integrating Flysystem into Symfony applications", + "keywords": [ + "Flysystem", + "bundle", + "filesystem", + "symfony" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-bundle/issues", + "source": "https://github.com/thephpleague/flysystem-bundle/tree/3.5.0" + }, + "time": "2025-06-22T12:43:01+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.30.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/6691915f77c7fb69adfb87dcd550052dc184ee10", + "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.0" + }, + "time": "2025-05-21T10:34:19+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+00:00" + }, + { + "name": "league/uri", + "version": "7.5.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "81fb5145d2644324614cc532b28efd0215bda430" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", + "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.5", + "php": "^8.1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.5.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:40:02+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.5.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:18:47+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "fcf91eb64359852f00d921887b219479b4f21251" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" + }, + "time": "2025-07-25T09:04:22+00:00" + }, + { + "name": "matthiasmullie/minify", + "version": "1.3.75", + "source": { + "type": "git", + "url": "https://github.com/matthiasmullie/minify.git", + "reference": "76ba4a5f555fd7bf4aa408af608e991569076671" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/76ba4a5f555fd7bf4aa408af608e991569076671", + "reference": "76ba4a5f555fd7bf4aa408af608e991569076671", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "matthiasmullie/path-converter": "~1.1", + "php": ">=5.3.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": ">=2.0", + "matthiasmullie/scrapbook": ">=1.3", + "phpunit/phpunit": ">=4.8" + }, + "suggest": { + "psr/cache-implementation": "Cache implementation to use with Minify::cache" + }, + "bin": [ + "bin/minifycss", + "bin/minifyjs" + ], + "type": "library", + "autoload": { + "psr-4": { + "MatthiasMullie\\Minify\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Mullie", + "email": "minify@mullie.eu", + "homepage": "https://www.mullie.eu", + "role": "Developer" + } + ], + "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.", + "homepage": "https://github.com/matthiasmullie/minify", + "keywords": [ + "JS", + "css", + "javascript", + "minifier", + "minify" + ], + "support": { + "issues": "https://github.com/matthiasmullie/minify/issues", + "source": "https://github.com/matthiasmullie/minify/tree/1.3.75" + }, + "funding": [ + { + "url": "https://github.com/matthiasmullie", + "type": "github" + } + ], + "time": "2025-06-25T09:56:19+00:00" + }, + { + "name": "matthiasmullie/path-converter", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/matthiasmullie/path-converter.git", + "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9", + "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "MatthiasMullie\\PathConverter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Mullie", + "email": "pathconverter@mullie.eu", + "homepage": "http://www.mullie.eu", + "role": "Developer" + } + ], + "description": "Relative path converter", + "homepage": "http://github.com/matthiasmullie/path-converter", + "keywords": [ + "converter", + "path", + "paths", + "relative" + ], + "support": { + "issues": "https://github.com/matthiasmullie/path-converter/issues", + "source": "https://github.com/matthiasmullie/path-converter/tree/1.1.3" + }, + "time": "2019-02-05T23:41:09+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.9.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2025-03-24T10:02:05+00:00" + }, + { + "name": "nelmio/cors-bundle", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/nelmio/NelmioCorsBundle.git", + "reference": "3a526fe025cd20e04a6a11370cf5ab28dbb5a544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/3a526fe025cd20e04a6a11370cf5ab28dbb5a544", + "reference": "3a526fe025cd20e04a6a11370cf5ab28dbb5a544", + "shasum": "" + }, + "require": { + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.3.6", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Nelmio\\CorsBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nelmio", + "homepage": "http://nelm.io" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/nelmio/NelmioCorsBundle/contributors" + } + ], + "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Symfony application", + "keywords": [ + "api", + "cors", + "crossdomain" + ], + "support": { + "issues": "https://github.com/nelmio/NelmioCorsBundle/issues", + "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.5.0" + }, + "time": "2024-06-24T21:25:28+00:00" + }, + { + "name": "nelmio/security-bundle", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/nelmio/NelmioSecurityBundle.git", + "reference": "f3a7bf628a0873788172a0d05d20c0224080f5eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nelmio/NelmioSecurityBundle/zipball/f3a7bf628a0873788172a0d05d20c0224080f5eb", + "reference": "f3a7bf628a0873788172a0d05d20c0224080f5eb", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3", + "symfony/framework-bundle": "^5.4 || ^6.3 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.3 || ^7.0", + "symfony/security-core": "^5.4 || ^6.3 || ^7.0", + "symfony/security-csrf": "^5.4 || ^6.3 || ^7.0", + "symfony/security-http": "^5.4 || ^6.3 || ^7.0", + "symfony/yaml": "^5.4 || ^6.3 || ^7.0", + "ua-parser/uap-php": "^3.4.4" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan-symfony": "^1.1", + "phpunit/phpunit": "^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/browser-kit": "^5.4 || ^6.3 || ^7.0", + "symfony/cache": "^5.4 || ^6.3 || ^7.0", + "symfony/phpunit-bridge": "^6.3 || ^7.0", + "symfony/twig-bundle": "^5.4 || ^6.3 || ^7.0", + "twig/twig": "^2.10 || ^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Nelmio\\SecurityBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nelmio", + "homepage": "http://nelm.io" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/nelmio/NelmioSecurityBundle/contributors" + } + ], + "description": "Extra security-related features for Symfony: signed/encrypted cookies, HTTPS/SSL/HSTS handling, cookie session storage, ...", + "keywords": [ + "security" + ], + "support": { + "issues": "https://github.com/nelmio/NelmioSecurityBundle/issues", + "source": "https://github.com/nelmio/NelmioSecurityBundle/tree/v3.6.0" + }, + "time": "2025-09-19T08:24:46+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.2", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.4" + }, + "require-dev": { + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.2" + }, + "time": "2024-10-06T23:10:23+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.8", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/c930ca4e3cf4f17dcfb03037703679d2396d2ede", + "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede", + "shasum": "" + }, + "require": { + "php": "8.0 - 8.5" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/tester": "^2.5", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.8" + }, + "time": "2025-08-06T21:43:34+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1" + }, + "time": "2025-08-13T20:13:15+00:00" + }, + { + "name": "nyholm/psr7", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.8.2" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2024-09-09T07:06:30+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v3.1.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "shasum": "" + }, + "require": { + "php": "^8" + }, + "require-dev": { + "infection/infection": "^0", + "nikic/php-fuzzer": "^0", + "phpunit/phpunit": "^9|^10|^11", + "vimeo/psalm": "^4|^5|^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2025-09-24T15:06:41+00:00" + }, + { + "name": "php-feed-io/feed-io", + "version": "v6.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-feed-io/feed-io.git", + "reference": "d82d09b92148612657e8203906a6f0b95a194ce7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-feed-io/feed-io/zipball/d82d09b92148612657e8203906a6f0b95a194ce7", + "reference": "d82d09b92148612657e8203906a6f0b95a194ce7", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "nyholm/psr7": "^1.5", + "php": ">=8.1", + "php-http/discovery": "^1.14", + "php-http/httplug": "^2.3", + "psr/http-client-implementation": "*", + "psr/log": "~1.0|~2.0|~3.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.5", + "monolog/monolog": "1.*|2.*", + "php-http/guzzle7-adapter": "^1.1", + "php-http/mock-client": "^1.5", + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "~9.3.0", + "rector/rector": "^2.1" + }, + "suggest": { + "monolog/monolog": "Allows to handle logs", + "php-http/guzzle7-adapter": "Handles HTTP requests and responses" + }, + "bin": [ + "bin/feedio" + ], + "type": "library", + "autoload": { + "psr-4": { + "FeedIo\\": "src/FeedIo" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Brahmer", + "email": "info@b-brahmer.de" + }, + { + "name": "Alexandre Debril", + "email": "alex.debril@gmail.com" + } + ], + "description": "PHP library built to consume and serve JSONFeed / RSS / Atom feeds", + "homepage": "https://php-feed-io.github.io/feed-io/", + "keywords": [ + "atom", + "cli", + "client", + "feed", + "jsonfeed", + "news", + "rss" + ], + "support": { + "issues": "https://github.com/php-feed-io/feed-io/issues", + "source": "https://github.com/php-feed-io/feed-io/tree/v6.1.2" + }, + "funding": [ + { + "url": "https://github.com/Grotax", + "type": "github" + } + ], + "time": "2025-09-29T06:16:27+00:00" + }, + { + "name": "php-http/client-common", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/client-common.git", + "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/client-common/zipball/0cfe9858ab9d3b213041b947c881d5b19ceeca46", + "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0 || ^2.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "nyholm/psr7": "^1.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "phpspec/prophecy": "^1.10.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" + }, + "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\Common\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "common", + "http", + "httplug" + ], + "support": { + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.7.2" + }, + "time": "2024-09-24T06:21:48+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.20.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "sebastian/comparator": "^3.0.5 || ^4.0.8", + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.20.0" + }, + "time": "2024-10-02T11:20:13+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", + "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.4.1" + }, + "time": "2024-09-23T11:39:58+00:00" + }, + { + "name": "php-http/message", + "version": "1.16.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/06dd5e8562f84e641bf929bfe699ee0f5ce8080a", + "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.5", + "php": "^7.2 || ^8.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.6", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0 || ^2.0", + "laminas/laminas-diactoros": "^2.0 || ^3.0", + "php-http/message-factory": "^1.0.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" + }, + "type": "library", + "autoload": { + "files": [ + "src/filters.php" + ], + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.16.2" + }, + "time": "2024-10-02T11:34:13+00:00" + }, + { + "name": "php-http/promise", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", + "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.3.1" + }, + "time": "2024-03-15T13:55:21+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.6.3", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94f8051919d1b0369a6bcc7931d679a511c03fe9", + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.3" + }, + "time": "2025-08-01T19:43:32+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + }, + "time": "2024-11-09T15:12:26+00:00" + }, + { + "name": "phpspec/php-diff", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/php-diff.git", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "shasum": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Diff": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Chris Boulton", + "homepage": "http://github.com/chrisboulton" + } + ], + "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", + "support": { + "source": "https://github.com/phpspec/php-diff/tree/v1.1.3" + }, + "time": "2020-09-18T13:47:07+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "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/2.3.0" + }, + "time": "2025-08-30T15:50:23+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "scheb/2fa-backup-code", + "version": "v7.11.0", + "source": { + "type": "git", + "url": "https://github.com/scheb/2fa-backup-code.git", + "reference": "62c6099b179903db5ab03b8059068cdb28659294" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scheb/2fa-backup-code/zipball/62c6099b179903db5ab03b8059068cdb28659294", + "reference": "62c6099b179903db5ab03b8059068cdb28659294", + "shasum": "" + }, + "require": { + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "scheb/2fa-bundle": "self.version" + }, + "type": "library", + "autoload": { + "psr-4": { + "Scheb\\TwoFactorBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Scheb", + "email": "me@christianscheb.de" + } + ], + "description": "Extends scheb/2fa-bundle with backup codes support", + "homepage": "https://github.com/scheb/2fa", + "keywords": [ + "2fa", + "Authentication", + "backup-codes", + "symfony", + "two-factor", + "two-step" + ], + "support": { + "source": "https://github.com/scheb/2fa-backup-code/tree/v7.11.0" + }, + "time": "2025-04-20T08:27:40+00:00" + }, + { + "name": "scheb/2fa-bundle", + "version": "v7.11.0", + "source": { + "type": "git", + "url": "https://github.com/scheb/2fa-bundle.git", + "reference": "06a343d14dad8cdd1670157d384738f9cfba29e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scheb/2fa-bundle/zipball/06a343d14dad8cdd1670157d384738f9cfba29e5", + "reference": "06a343d14dad8cdd1670157d384738f9cfba29e5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/event-dispatcher": "^6.4 || ^7.0", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/http-foundation": "^6.4 || ^7.0", + "symfony/http-kernel": "^6.4 || ^7.0", + "symfony/property-access": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/twig-bundle": "^6.4 || ^7.0" + }, + "conflict": { + "scheb/two-factor-bundle": "*" + }, + "suggest": { + "scheb/2fa-backup-code": "Emergency codes when you have no access to other methods", + "scheb/2fa-email": "Send codes by email", + "scheb/2fa-google-authenticator": "Google Authenticator support", + "scheb/2fa-totp": "Temporary one-time password (TOTP) support (Google Authenticator compatible)", + "scheb/2fa-trusted-device": "Trusted devices support" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Scheb\\TwoFactorBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Scheb", + "email": "me@christianscheb.de" + } + ], + "description": "A generic interface to implement two-factor authentication in Symfony applications", + "homepage": "https://github.com/scheb/2fa", + "keywords": [ + "2fa", + "Authentication", + "symfony", + "two-factor", + "two-step" + ], + "support": { + "source": "https://github.com/scheb/2fa-bundle/tree/v7.11.0" + }, + "time": "2025-06-27T12:14:20+00:00" + }, + { + "name": "scheb/2fa-trusted-device", + "version": "v7.11.0", + "source": { + "type": "git", + "url": "https://github.com/scheb/2fa-trusted-device.git", + "reference": "6ab98fdee3aa001ca6598eeb422d9abf2c85b5b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scheb/2fa-trusted-device/zipball/6ab98fdee3aa001ca6598eeb422d9abf2c85b5b3", + "reference": "6ab98fdee3aa001ca6598eeb422d9abf2c85b5b3", + "shasum": "" + }, + "require": { + "lcobucci/clock": "^3.0", + "lcobucci/jwt": "^5.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "scheb/2fa-bundle": "self.version" + }, + "type": "library", + "autoload": { + "psr-4": { + "Scheb\\TwoFactorBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Scheb", + "email": "me@christianscheb.de" + } + ], + "description": "Extends scheb/2fa-bundle with trusted devices support", + "homepage": "https://github.com/scheb/2fa", + "keywords": [ + "2fa", + "Authentication", + "symfony", + "trusted-device", + "two-factor", + "two-step" + ], + "support": { + "source": "https://github.com/scheb/2fa-trusted-device/tree/v7.11.0" + }, + "time": "2025-06-27T12:14:20+00:00" + }, + { + "name": "scrivo/highlight.php", + "version": "v9.18.1.10", + "source": { + "type": "git", + "url": "https://github.com/scrivo/highlight.php.git", + "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/850f4b44697a2552e892ffe71490ba2733c2fc6e", + "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.7", + "sabberworm/php-css-parser": "^8.3", + "symfony/finder": "^2.8|^3.4|^5.4", + "symfony/var-dumper": "^2.8|^3.4|^5.4" + }, + "suggest": { + "ext-mbstring": "Allows highlighting code with unicode characters and supports language with unicode keywords" + }, + "type": "library", + "autoload": { + "files": [ + "HighlightUtilities/functions.php" + ], + "psr-0": { + "Highlight\\": "", + "HighlightUtilities\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Geert Bergman", + "homepage": "http://www.scrivo.org/", + "role": "Project Author" + }, + { + "name": "Vladimir Jimenez", + "homepage": "https://allejo.io", + "role": "Maintainer" + }, + { + "name": "Martin Folkers", + "homepage": "https://twobrain.io", + "role": "Contributor" + } + ], + "description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js", + "keywords": [ + "code", + "highlight", + "highlight.js", + "highlight.php", + "syntax" + ], + "support": { + "issues": "https://github.com/scrivo/highlight.php/issues", + "source": "https://github.com/scrivo/highlight.php" + }, + "funding": [ + { + "url": "https://github.com/allejo", + "type": "github" + } + ], + "time": "2022-12-17T21:53:22+00:00" + }, + { + "name": "scssphp/scssphp", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/scssphp/scssphp.git", + "reference": "024f92cd9782e3033b41c2d1c66ab1c0e5c12c0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scssphp/scssphp/zipball/024f92cd9782e3033b41c2d1c66ab1c0e5c12c0f", + "reference": "024f92cd9782e3033b41c2d1c66ab1c0e5c12c0f", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "league/uri": "^7.4", + "league/uri-interfaces": "^7.4", + "php": ">=8.1", + "scssphp/source-span": "^1.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-mbstring": "^1.30" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4", + "phpunit/phpunit": "^9.5.6", + "sass/sass-spec": "*", + "squizlabs/php_codesniffer": "~3.5", + "symfony/phpunit-bridge": "^5.1", + "symfony/var-dumper": "^6.3", + "thoughtbot/bourbon": "^7.0", + "twbs/bootstrap": "~5.0", + "twbs/bootstrap4": "4.6.1", + "zurb/foundation": "~6.7.0" + }, + "suggest": { + "ext-mbstring": "For best performance, mbstring should be installed as it is faster than the polyfill" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "ScssPhp\\ScssPhp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthon Pang", + "email": "apang@softwaredevelopment.ca", + "homepage": "https://github.com/robocoder" + }, + { + "name": "Cédric Morin", + "email": "cedric@yterium.com", + "homepage": "https://github.com/Cerdic" + } + ], + "description": "scssphp is a compiler for SCSS written in PHP.", + "homepage": "http://scssphp.github.io/scssphp/", + "keywords": [ + "css", + "less", + "sass", + "scss", + "stylesheet" + ], + "support": { + "issues": "https://github.com/scssphp/scssphp/issues", + "source": "https://github.com/scssphp/scssphp/tree/v2.0.1" + }, + "time": "2025-01-31T12:28:20+00:00" + }, + { + "name": "scssphp/source-span", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/scssphp/source-span.git", + "reference": "f08fc78765e6fb6fa8ca0573fc61b3f8860f0114" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scssphp/source-span/zipball/f08fc78765e6fb6fa8ca0573fc61b3f8860f0114", + "reference": "f08fc78765e6fb6fa8ca0573fc61b3f8860f0114", + "shasum": "" + }, + "require": { + "league/uri": "^7.4", + "league/uri-interfaces": "^7.4", + "php": ">=8.1" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpunit/phpunit": "^9.5.6", + "squizlabs/php_codesniffer": "~3.5", + "symfony/phpunit-bridge": "^5.1", + "symfony/var-dumper": "^6.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "SourceSpan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christophe Coevoet", + "homepage": "https://github.com/stof" + } + ], + "description": "Provides a representation for source code locations and spans.", + "keywords": [ + "parsing" + ], + "support": { + "issues": "https://github.com/scssphp/source-span/issues", + "source": "https://github.com/scssphp/source-span/tree/v1.0.0" + }, + "time": "2024-12-09T23:08:15+00:00" + }, + { + "name": "simplepie/simplepie", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/simplepie/simplepie.git", + "reference": "76cccb1b2c5dcaf44f304c925ab30c0f48643992" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplepie/simplepie/zipball/76cccb1b2c5dcaf44f304c925ab30c0f48643992", + "reference": "76cccb1b2c5dcaf44f304c925ab30c0f48643992", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "php": ">=7.2.0" + }, + "require-dev": { + "donatj/mock-webserver": "^2.7", + "friendsofphp/php-cs-fixer": "^2.19 || ^3.8", + "mf2/mf2": "^0.5.0", + "phpstan/phpstan": "~1.12.2", + "phpunit/phpunit": "^8 || ^9 || ^10", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1 || ^2 || ^3" + }, + "suggest": { + "ext-curl": "", + "ext-iconv": "", + "ext-intl": "", + "ext-mbstring": "", + "mf2/mf2": "Microformat module that allows for parsing HTML for microformats" + }, + "type": "library", + "autoload": { + "psr-0": { + "SimplePie": "library" + }, + "psr-4": { + "SimplePie\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ryan Parman", + "homepage": "http://ryanparman.com/", + "role": "Creator, alumnus developer" + }, + { + "name": "Sam Sneddon", + "homepage": "https://gsnedders.com/", + "role": "Alumnus developer" + }, + { + "name": "Ryan McCue", + "email": "me@ryanmccue.info", + "homepage": "http://ryanmccue.info/", + "role": "Developer" + } + ], + "description": "A simple Atom/RSS parsing library for PHP", + "homepage": "http://simplepie.org/", + "keywords": [ + "atom", + "feeds", + "rss" + ], + "support": { + "issues": "https://github.com/simplepie/simplepie/issues", + "source": "https://github.com/simplepie/simplepie/tree/1.9.0" + }, + "time": "2025-09-12T06:34:27+00:00" + }, + { + "name": "spatie/schema-org", + "version": "3.23.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/schema-org.git", + "reference": "a8dc1b6fcdd06afc1ab084c3ead9b7a4c3d7a35d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/schema-org/zipball/a8dc1b6fcdd06afc1ab084c3ead9b7a4c3d7a35d", + "reference": "a8dc1b6fcdd06afc1ab084c3ead9b7a4c3d7a35d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.6", + "graham-campbell/analyzer": "^4.2", + "illuminate/collections": "^8.62.0", + "league/flysystem": "^2.3.0 || ^3.0", + "pestphp/pest": "^1.21", + "symfony/console": "^5.3.7 || 6.0", + "twig/twig": "^3.3.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\SchemaOrg\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + }, + { + "name": "Tom Witkowski", + "email": "dev.gummibeer@gmail.com", + "homepage": "https://gummibeer.de", + "role": "Developer" + } + ], + "description": "A fluent builder Schema.org types and ld+json generator", + "homepage": "https://github.com/spatie/schema-org", + "keywords": [ + "schema-org", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/schema-org/issues", + "source": "https://github.com/spatie/schema-org/tree/3.23.1" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-01-31T14:54:12+00:00" + }, + { + "name": "spomky-labs/cbor-php", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/cbor-php.git", + "reference": "5404f3e21cbe72f5cf612aa23db2b922fd2f43bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/5404f3e21cbe72f5cf612aa23db2b922fd2f43bf", + "reference": "5404f3e21cbe72f5cf612aa23db2b922fd2f43bf", + "shasum": "" + }, + "require": { + "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13", + "ext-mbstring": "*", + "php": ">=8.0" + }, + "require-dev": { + "deptrac/deptrac": "^3.0", + "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", + "ext-json": "*", + "infection/infection": "^0.29", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.0|^2.0", + "phpstan/phpstan-beberlei-assert": "^1.0|^2.0", + "phpstan/phpstan-deprecation-rules": "^1.0|^2.0", + "phpstan/phpstan-phpunit": "^1.0|^2.0", + "phpstan/phpstan-strict-rules": "^1.0|^2.0", + "phpunit/phpunit": "^10.1|^11.0|^12.0", + "rector/rector": "^1.0|^2.0", + "roave/security-advisories": "dev-latest", + "symfony/var-dumper": "^6.0|^7.0", + "symplify/easy-coding-standard": "^12.0" + }, + "suggest": { + "ext-bcmath": "GMP or BCMath extensions will drastically improve the library performance. BCMath extension needed to handle the Big Float and Decimal Fraction Tags", + "ext-gmp": "GMP or BCMath extensions will drastically improve the library performance" + }, + "type": "library", + "autoload": { + "psr-4": { + "CBOR\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/Spomky-Labs/cbor-php/contributors" + } + ], + "description": "CBOR Encoder/Decoder for PHP", + "keywords": [ + "Concise Binary Object Representation", + "RFC7049", + "cbor" + ], + "support": { + "issues": "https://github.com/Spomky-Labs/cbor-php/issues", + "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-06-13T11:57:55+00:00" + }, + { + "name": "spomky-labs/otphp", + "version": "11.3.0", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/otphp.git", + "reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33", + "reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "paragonie/constant_time_encoding": "^2.0 || ^3.0", + "php": ">=8.1", + "psr/clock": "^1.0", + "symfony/deprecation-contracts": "^3.2" + }, + "require-dev": { + "ekino/phpstan-banned-code": "^1.0", + "infection/infection": "^0.26|^0.27|^0.28|^0.29", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5.26|^10.0|^11.0", + "qossmic/deptrac-shim": "^1.0", + "rector/rector": "^1.0", + "symfony/phpunit-bridge": "^6.1|^7.0", + "symplify/easy-coding-standard": "^12.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "OTPHP\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/Spomky-Labs/otphp/contributors" + } + ], + "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator", + "homepage": "https://github.com/Spomky-Labs/otphp", + "keywords": [ + "FreeOTP", + "RFC 4226", + "RFC 6238", + "google authenticator", + "hotp", + "otp", + "totp" + ], + "support": { + "issues": "https://github.com/Spomky-Labs/otphp/issues", + "source": "https://github.com/Spomky-Labs/otphp/tree/11.3.0" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2024-06-12T11:22:32+00:00" + }, + { + "name": "spomky-labs/pki-framework", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/pki-framework.git", + "reference": "eced5b5ce70518b983ff2be486e902bbd15135ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/eced5b5ce70518b983ff2be486e902bbd15135ae", + "reference": "eced5b5ce70518b983ff2be486e902bbd15135ae", + "shasum": "" + }, + "require": { + "brick/math": "^0.10|^0.11|^0.12|^0.13", + "ext-mbstring": "*", + "php": ">=8.1" + }, + "require-dev": { + "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", + "ext-gmp": "*", + "ext-openssl": "*", + "infection/infection": "^0.28|^0.29", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/extension-installer": "^1.3|^2.0", + "phpstan/phpstan": "^1.8|^2.0", + "phpstan/phpstan-deprecation-rules": "^1.0|^2.0", + "phpstan/phpstan-phpunit": "^1.1|^2.0", + "phpstan/phpstan-strict-rules": "^1.3|^2.0", + "phpunit/phpunit": "^10.1|^11.0|^12.0", + "rector/rector": "^1.0|^2.0", + "roave/security-advisories": "dev-latest", + "symfony/string": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symplify/easy-coding-standard": "^12.0" + }, + "suggest": { + "ext-bcmath": "For better performance (or GMP)", + "ext-gmp": "For better performance (or BCMath)", + "ext-openssl": "For OpenSSL based cyphering" + }, + "type": "library", + "autoload": { + "psr-4": { + "SpomkyLabs\\Pki\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joni Eskelinen", + "email": "jonieske@gmail.com", + "role": "Original developer" + }, + { + "name": "Florent Morselli", + "email": "florent.morselli@spomky-labs.com", + "role": "Spomky-Labs PKI Framework developer" + } + ], + "description": "A PHP framework for managing Public Key Infrastructures. It comprises X.509 public key certificates, attribute certificates, certification requests and certification path validation.", + "homepage": "https://github.com/spomky-labs/pki-framework", + "keywords": [ + "DER", + "Private Key", + "ac", + "algorithm identifier", + "asn.1", + "asn1", + "attribute certificate", + "certificate", + "certification request", + "cryptography", + "csr", + "decrypt", + "ec", + "encrypt", + "pem", + "pkcs", + "public key", + "rsa", + "sign", + "signature", + "verify", + "x.509", + "x.690", + "x509", + "x690" + ], + "support": { + "issues": "https://github.com/Spomky-Labs/pki-framework/issues", + "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-06-13T08:35:04+00:00" + }, + { + "name": "symfony-cmf/routing", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony-cmf/Routing.git", + "reference": "86c3e36a94f8e47a94f7b92ce09877ba3a0809fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/86c3e36a94f8e47a94f7b92ce09877ba3a0809fb", + "reference": "86c3e36a94f8e47a94f7b92ce09877ba3a0809fb", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/http-kernel": "^6.0 || ^7.0", + "symfony/routing": "^6.0 || ^7.0" + }, + "require-dev": { + "symfony/config": "^6.0 || ^7.0", + "symfony/dependency-injection": "^6.0 || ^7.0", + "symfony/event-dispatcher": "^6.0 || ^7.0", + "symfony/phpunit-bridge": "^7.0.3" + }, + "suggest": { + "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version ^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Cmf\\Component\\Routing\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony CMF Community", + "homepage": "https://github.com/symfony-cmf/Routing/contributors" + } + ], + "description": "Extends the Symfony routing component for dynamic routes and chaining several routers", + "homepage": "http://cmf.symfony.com", + "keywords": [ + "database", + "routing" + ], + "support": { + "issues": "https://github.com/symfony-cmf/Routing/issues", + "source": "https://github.com/symfony-cmf/Routing/tree/3.0.4" + }, + "time": "2024-12-02T22:52:12+00:00" + }, + { + "name": "symfony-cmf/routing-bundle", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony-cmf/routing-bundle.git", + "reference": "7aab681c812e93a41d70349f560976b93da049ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony-cmf/routing-bundle/zipball/7aab681c812e93a41d70349f560976b93da049ca", + "reference": "7aab681c812e93a41d70349f560976b93da049ca", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony-cmf/routing": "^3.0.3", + "symfony/framework-bundle": "^6.4 || ^7.0" + }, + "conflict": { + "doctrine/common": "<3.1.1", + "doctrine/persistence": "<1.3.0", + "doctrine/phpcr-odm": "<2.0", + "symfony/doctrine-bridge": "<6.4.0", + "symfony/security-core": "<6.4.0" + }, + "require-dev": { + "doctrine/data-fixtures": "^1.0.0", + "doctrine/doctrine-bundle": "^2.8", + "doctrine/orm": "^2.9 || ^3.0.1", + "doctrine/phpcr-bundle": "^3.0", + "doctrine/phpcr-odm": "^2.0", + "jackalope/jackalope-doctrine-dbal": "^2.0", + "matthiasnoback/symfony-config-test": "^4.1.0 || ^5.1.0", + "matthiasnoback/symfony-dependency-injection-test": "^4.1.0 || ^5.1.0", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-doctrine": "^1.3", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-symfony": "^1.3", + "phpunit/phpunit": "^9.5.28", + "symfony-cmf/testing": "5.0.2", + "symfony/form": "^6.4 || ^7.0", + "symfony/monolog-bundle": "^3.5", + "symfony/phpunit-bridge": "^7.0.3", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/serializer": "^6.4 || ^7.0", + "symfony/translation": "^6.4 || ^7.0", + "symfony/twig-bundle": "^6.4 || ^7.0", + "symfony/validator": "^6.4 || ^7.0", + "twig/twig": "^2.4.4 || ^3.0" + }, + "suggest": { + "doctrine/orm": "To enable support for the ORM entities", + "doctrine/phpcr-bundle": "To enable support for the PHPCR ODM documents", + "doctrine/phpcr-odm": "To enable support for the PHPCR ODM documents" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Cmf\\Bundle\\RoutingBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony CMF Community", + "homepage": "https://github.com/symfony-cmf/RoutingBundle/contributors" + } + ], + "description": "Symfony RoutingBundle", + "homepage": "http://cmf.symfony.com", + "keywords": [ + "database", + "routing" + ], + "support": { + "issues": "https://github.com/symfony-cmf/routing-bundle/issues", + "source": "https://github.com/symfony-cmf/routing-bundle/tree/3.1.1" + }, + "time": "2025-03-31T07:12:15+00:00" + }, + { + "name": "symfony/asset", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "56c4d9f759247c4e07d8549e3baf7493cb9c3e4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/56c4d9f759247c4e07d8549e3baf7493cb9c3e4b", + "reference": "56c4d9f759247c4e07d8549e3baf7493cb9c3e4b", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/http-foundation": "<6.4" + }, + "require-dev": { + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/asset/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-03-05T10:15:41+00:00" + }, + { + "name": "symfony/cache", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f", + "reference": "bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^3.6", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.4|^7.0" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" + }, + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "classmap": [ + "Traits/ValueWrapper.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^3.0" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-03-13T15:25:07+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/config", + "version": "v6.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "f18dc5926cb203e125956987def795d052ee774e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/f18dc5926cb203e125956987def795d052ee774e", + "reference": "f18dc5926cb203e125956987def795d052ee774e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "require-dev": { + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T09:57:09+00:00" + }, + { + "name": "symfony/console", + "version": "v7.2.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "93518c2ff7ce9c1818224c6effed3cf2429c63d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/93518c2ff7ce9c1818224c6effed3cf2429c63d7", + "reference": "93518c2ff7ce9c1818224c6effed3cf2429c63d7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.2.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-30T17:03:27+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "82119812ab0bf3425c1234d413efd1b19bb92ae4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/82119812ab0bf3425c1234d413efd1b19bb92ae4", + "reference": "82119812ab0bf3425c1234d413efd1b19bb92ae4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^3.5", + "symfony/var-exporter": "^6.4.20|^7.2.5" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "symfony/config": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "21cd48c34a47a0d0e303a590a67c3450fde55888" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/21cd48c34a47a0d0e303a590a67c3450fde55888", + "reference": "21cd48c34a47a0d0e303a590a67c3450fde55888", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^2", + "doctrine/persistence": "^3.1|^4", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/collections": "<1.8", + "doctrine/dbal": "<3.6", + "doctrine/lexer": "<1.1", + "doctrine/orm": "<2.15", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/form": "<6.4.6|>=7,<7.0.6", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/messenger": "<6.4", + "symfony/property-info": "<6.4", + "symfony/security-bundle": "<6.4", + "symfony/security-core": "<6.4", + "symfony/validator": "<6.4" + }, + "require-dev": { + "doctrine/collections": "^1.8|^2.0", + "doctrine/data-fixtures": "^1.1|^2", + "doctrine/dbal": "^3.6|^4", + "doctrine/orm": "^2.15|^3", + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/doctrine-messenger": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4.6|^7.0.6", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/type-info": "^7.1.8", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Doctrine with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-24T09:56:23+00:00" + }, + { + "name": "symfony/doctrine-messenger", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-messenger.git", + "reference": "064159484ab330590b7b477f6c8835812f2e340f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/064159484ab330590b7b477f6c8835812f2e340f", + "reference": "064159484ab330590b7b477f6c8835812f2e340f", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^3.6|^4", + "php": ">=8.2", + "symfony/messenger": "^7.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "doctrine/persistence": "^1.3|^2|^3", + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "type": "symfony-messenger-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\Bridge\\Doctrine\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Doctrine Messenger Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-messenger/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/efa076ea0eeff504383ff0dcf827ea5ce15690ba", + "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba", + "shasum": "" + }, + "require": { + "masterminds/html5": "^2.6", + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases DOM navigation for HTML and XML documents", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-06T20:13:54+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/99f81bc944ab8e5dae4f21b4ca9972698bbad0e4", + "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191", + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-13T11:49:31+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "32d2d19c62e58767e6552166c32fb259975d2b23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/32d2d19c62e58767e6552166c32fb259975d2b23", + "reference": "32d2d19c62e58767e6552166c32fb259975d2b23", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an engine that can compile and evaluate expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/expression-language/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:29:33+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.4.24", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", + "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^5.4|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.4.24" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:14:14+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T13:41:35+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v7.0.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "07a37173aace78420ccaf5eceaf4a79c7dfab375" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/07a37173aace78420ccaf5eceaf4a79c7dfab375", + "reference": "07a37173aace78420ccaf5eceaf4a79c7dfab375", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^6.4|^7.0" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/asset": "<6.4", + "symfony/asset-mapper": "<6.4", + "symfony/clock": "<6.4", + "symfony/console": "<6.4", + "symfony/dom-crawler": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/lock": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", + "symfony/security-core": "<6.4", + "symfony/security-csrf": "<6.4", + "symfony/serializer": "<6.4", + "symfony/stopwatch": "<6.4", + "symfony/translation": "<6.4", + "symfony/twig-bridge": "<6.4", + "symfony/twig-bundle": "<6.4", + "symfony/validator": "<6.4", + "symfony/web-profiler-bundle": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "doctrine/persistence": "^1.3|^2|^3", + "dragonmantank/cron-expression": "^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "seld/jsonlint": "^1.10", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/dotenv": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/notifier": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/scheduler": "^6.4.4|^7.0.4", + "symfony/security-bundle": "^6.4|^7.0", + "symfony/semaphore": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.0.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-07-26T13:24:26+00:00" + }, + { + "name": "symfony/html-sanitizer", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/html-sanitizer.git", + "reference": "8740fc48979f649dee8b8fc51a2698e5c190bf12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/8740fc48979f649dee8b8fc51a2698e5c190bf12", + "reference": "8740fc48979f649dee8b8fc51a2698e5c190bf12", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "league/uri": "^6.5|^7.0", + "masterminds/html5": "^2.7.2", + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HtmlSanitizer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to sanitize untrusted HTML input for safe insertion into a document's DOM.", + "homepage": "https://symfony.com", + "keywords": [ + "Purifier", + "html", + "sanitizer" + ], + "support": { + "source": "https://github.com/symfony/html-sanitizer/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-12T10:34:03+00:00" + }, + { + "name": "symfony/http-client", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/4b62871a01c49457cf2a8e560af7ee8a94b87a62", + "reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-client-contracts": "~3.4.4|^3.5.2", + "symfony/polyfill-php83": "^1.29", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "amphp/amp": "<2.5", + "amphp/socket": "<1.1", + "php-http/discovery": "<1.15", + "symfony/http-foundation": "<6.4" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/http-client": "^4.2.1|^5.0", + "amphp/http-tunnel": "^1.0|^2.0", + "guzzlehttp/promises": "^1.4|^2.0", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/amphp-http-client-meta": "^1.0|^2.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "keywords": [ + "http" + ], + "support": { + "source": "https://github.com/symfony/http-client/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "75d7043853a42837e68111812f4d964b01e5101c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c", + "reference": "75d7043853a42837e68111812f4d964b01e5101c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-04-29T11:18:49+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "369241591d92bb5dfb4c6ccd6ee94378a45b1521" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/369241591d92bb5dfb4c6ccd6ee94378a45b1521", + "reference": "369241591d92bb5dfb4c6ccd6ee94378a45b1521", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-16T08:22:30+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "8b0f963293aede77593c9845c8c0af34752e893a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8b0f963293aede77593c9845c8c0af34752e893a", + "reference": "8b0f963293aede77593c9845c8c0af34752e893a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.3", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0|^7.0", + "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" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-27T12:20:56+00:00" + }, + { + "name": "symfony/intl", + "version": "v7.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/intl.git", + "reference": "4e4ffbfa65fae8bebb8e53712b3e493c85204612" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/intl/zipball/4e4ffbfa65fae8bebb8e53712b3e493c85204612", + "reference": "4e4ffbfa65fae8bebb8e53712b3e493c85204612", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Intl\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/data/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Eriksen Costa", + "email": "eriksen.costa@infranology.com.br" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides access to the localization data of the ICU library", + "homepage": "https://symfony.com", + "keywords": [ + "i18n", + "icu", + "internationalization", + "intl", + "l10n", + "localization" + ], + "support": { + "source": "https://github.com/symfony/intl/tree/v7.0.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:55:39+00:00" + }, + { + "name": "symfony/lock", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/lock.git", + "reference": "e025f32cfd1fa8e3a4485a8d810544474aac26da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/lock/zipball/e025f32cfd1fa8e3a4485a8d810544474aac26da", + "reference": "e025f32cfd1fa8e3a4485a8d810544474aac26da", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Lock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jérémy Derussé", + "email": "jeremy@derusse.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Creates and manages locks, a mechanism to provide exclusive access to a shared resource", + "homepage": "https://symfony.com", + "keywords": [ + "cas", + "flock", + "locking", + "mutex", + "redlock", + "semaphore" + ], + "support": { + "source": "https://github.com/symfony/lock/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "ab97ef2f7acf0216955f5845484235113047a31d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ab97ef2f7acf0216955f5845484235113047a31d", + "reference": "ab97ef2f7acf0216955f5845484235113047a31d", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^7.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-17T05:51:54+00:00" + }, + { + "name": "symfony/messenger", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/messenger.git", + "reference": "d9e04339404ba2dcd04c24172125516dc0e06c35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/messenger/zipball/d9e04339404ba2dcd04c24172125516dc0e06c35", + "reference": "d9e04339404ba2dcd04c24172125516dc0e06c35", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/clock": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<7.2", + "symfony/event-dispatcher": "<6.4", + "symfony/event-dispatcher-contracts": "<2.5", + "symfony/framework-bundle": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/serializer": "<6.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/console": "^7.2", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Roze", + "email": "samuel.roze@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-13T11:49:31+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/b1b828f69cbaf887fa835a091869e55df91d0e35", + "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-16T08:38:17+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "7acf2abe23e5019451399ba69fc8ed3d61d4d8f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/7acf2abe23e5019451399ba69fc8ed3d61d4d8f0", + "reference": "7acf2abe23e5019451399ba69fc8ed3d61d4d8f0", + "shasum": "" + }, + "require": { + "monolog/monolog": "^3", + "php": ">=8.2", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/security-core": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Monolog with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/monolog-bridge/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-24T16:45:39+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/0ff2f5c3df08a395232bbc3c2eb7e84912df911d", + "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-05T10:16:07+00:00" + }, + { + "name": "symfony/password-hasher", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/password-hasher.git", + "reference": "31fbe66af859582a20b803f38be96be8accdf2c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/31fbe66af859582a20b803f38be96be8accdf2c3", + "reference": "31fbe66af859582a20b803f38be96be8accdf2c3", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/security-core": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PasswordHasher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Robin Chalas", + "email": "robin.chalas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides password hashing utilities", + "homepage": "https://symfony.com", + "keywords": [ + "hashing", + "password" + ], + "support": { + "source": "https://github.com/symfony/password-hasher/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-02-04T08:22:58+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T09:58:17+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-10T14:38:51+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-08T02:45:35+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b", + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/property-access", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7", + "reference": "4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/property-info": "^6.4|^7.0" + }, + "require-dev": { + "symfony/cache": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property-path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-04T15:15:28+00:00" + }, + { + "name": "symfony/property-info", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "7b6db23f23d13ada41e1cb484748a8ec028fbace" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/7b6db23f23d13ada41e1cb484748a8ec028fbace", + "reference": "7b6db23f23d13ada41e1cb484748a8ec028fbace", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0", + "symfony/type-info": "~7.2.8|^7.3.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^5.2", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-15T13:55:54+00:00" + }, + { + "name": "symfony/rate-limiter", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/rate-limiter.git", + "reference": "7e855541d302ba752f86fb0e97932e7969fe9c04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/7e855541d302ba752f86fb0e97932e7969fe9c04", + "reference": "7e855541d302ba752f86fb0e97932e7969fe9c04", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/options-resolver": "^7.3" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/lock": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\RateLimiter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Wouter de Jong", + "email": "wouter@wouterj.nl" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a Token Bucket implementation to rate limit input and output in your application", + "homepage": "https://symfony.com", + "keywords": [ + "limiter", + "rate-limiter" + ], + "support": { + "source": "https://github.com/symfony/rate-limiter/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-07T08:17:57+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/8dc648e159e9bac02b703b9fbd937f19ba13d07c", + "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/security-bundle", + "version": "v7.2.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-bundle.git", + "reference": "4661890f7d2571e9ef58431401a390c2dde68c78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/4661890f7d2571e9ef58431401a390c2dde68c78", + "reference": "4661890f7d2571e9ef58431401a390c2dde68c78", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.2", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^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", + "symfony/password-hasher": "^6.4|^7.0", + "symfony/security-core": "^7.2", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/security-http": "^7.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/console": "<6.4", + "symfony/framework-bundle": "<6.4", + "symfony/http-client": "<6.4", + "symfony/ldap": "<6.4", + "symfony/serializer": "<6.4", + "symfony/twig-bundle": "<6.4", + "symfony/validator": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/ldap": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.12", + "web-token/jwt-library": "^3.3.2|^4.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SecurityBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.2.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-22T07:39:44+00:00" + }, + { + "name": "symfony/security-core", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "68b9d3ca57615afde6152a1e1441fa035bea43f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/68b9d3ca57615afde6152a1e1441fa035bea43f8", + "reference": "68b9d3ca57615afde6152a1e1441fa035bea43f8", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher-contracts": "^2.5|^3", + "symfony/password-hasher": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/ldap": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/validator": "<6.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "psr/container": "^1.1|^2.0", + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/ldap": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/validator": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Core\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - Core Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-core/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-24T14:32:13+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "2b4b0c46c901729e4e90719eacd980381f53e0a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/2b4b0c46c901729e4e90719eacd980381f53e0a3", + "reference": "2b4b0c46c901729e4e90719eacd980381f53e0a3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/security-core": "^6.4|^7.0" + }, + "conflict": { + "symfony/http-foundation": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Csrf\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - CSRF Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-csrf/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T18:42:10+00:00" + }, + { + "name": "symfony/security-http", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-http.git", + "reference": "1cf54d0648ebab23bf9b8972617b79f1995e13a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-http/zipball/1cf54d0648ebab23bf9b8972617b79f1995e13a9", + "reference": "1cf54d0648ebab23bf9b8972617b79f1995e13a9", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/security-core": "^7.3", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/clock": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/http-client-contracts": "<3.0", + "symfony/security-bundle": "<6.4", + "symfony/security-csrf": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-client-contracts": "^3.0", + "symfony/rate-limiter": "^6.4|^7.0", + "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|^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Http\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - HTTP Integration", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-http/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-09T17:06:44+00:00" + }, + { + "name": "symfony/serializer", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "0df5af266c6fe9a855af7db4fea86e13b9ca3ab1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/0df5af266c6fe9a855af7db4fea86e13b9ca3ab1", + "reference": "0df5af266c6fe9a855af7db4fea86e13b9ca3ab1", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php84": "^1.30" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<6.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "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|^2.0", + "seld/jsonlint": "^1.10", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^7.2", + "symfony/error-handler": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "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.8", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-15T13:39:02+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-04-25T09:37:31+00:00" + }, + { + "name": "symfony/string", + "version": "v6.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "5621f039a71a11c87c106c1c598bdcd04a19aeea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/5621f039a71a11c87c106c1c598bdcd04a19aeea", + "reference": "5621f039a71a11c87c106c1c598bdcd04a19aeea", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T14:32:46+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "ec25870502d0c7072d086e8ffba1420c85965174" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174", + "reference": "ec25870502d0c7072d086e8ffba1420c85965174", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-07T11:39:36+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-27T08:32:26+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "33558f013b7f6ed72805527c8405cae0062e47c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/33558f013b7f6ed72805527c8405cae0062e47c5", + "reference": "33558f013b7f6ed72805527c8405cae0062e47c5", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/translation-contracts": "^2.5|^3", + "twig/twig": "^3.21" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<6.4", + "symfony/form": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/mime": "<6.4", + "symfony/serializer": "<6.4", + "symfony/translation": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/emoji": "^7.1", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4.20|^7.2.5", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-foundation": "^7.3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/cssinliner-extra": "^3", + "twig/inky-extra": "^3", + "twig/markdown-extra": "^3" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Twig with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-18T13:10:53+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v7.2.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "157de579a9ec25d5dfeb7ee3b3e9b57d2e635c39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/157de579a9ec25d5dfeb7ee3b3e9b57d2e635c39", + "reference": "157de579a9ec25d5dfeb7ee3b3e9b57d2e635c39", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "php": ">=8.2", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "conflict": { + "symfony/framework-bundle": "<6.4", + "symfony/translation": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.2.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-10T08:29:33+00:00" + }, + { + "name": "symfony/type-info", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/type-info.git", + "reference": "d34eaeb57f39c8a9c97eb72a977c423207dfa35b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/type-info/zipball/d34eaeb57f39c8a9c97eb72a977c423207dfa35b", + "reference": "d34eaeb57f39c8a9c97eb72a977c423207dfa35b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "phpstan/phpdoc-parser": "<1.30" + }, + "require-dev": { + "phpstan/phpdoc-parser": "^1.30|^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\TypeInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts PHP types information.", + "homepage": "https://symfony.com", + "keywords": [ + "PHPStan", + "phpdoc", + "symfony", + "type" + ], + "support": { + "source": "https://github.com/symfony/type-info/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T15:33:27+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/a69f69f3159b852651a6bf45a9fdd149520525bb", + "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.3.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T19:55:54+00:00" + }, + { + "name": "symfony/validator", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "5e29a348b5fac2227b6938a54db006d673bb813a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/5e29a348b5fac2227b6938a54db006d673bb813a", + "reference": "5e29a348b5fac2227b6938a54db006d673bb813a", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php83": "^1.27", + "symfony/translation-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/lexer": "<1.1", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<7.0", + "symfony/expression-language": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<6.4", + "symfony/property-info": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/type-info": "^7.1.8", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/bin/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to validate values", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-24T06:32:27+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb", + "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0f020b544a30a7fe8ba972e53ee48a74c0bc87f4", + "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v7.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "d4f4a66866fe2451f61296924767280ab5732d9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/d4f4a66866fe2451f61296924767280ab5732d9d", + "reference": "d4f4a66866fe2451f61296924767280ab5732d9d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-27T11:34:33+00:00" + }, + { + "name": "terminal42/escargot", + "version": "1.6.3", + "source": { + "type": "git", + "url": "https://github.com/terminal42/escargot.git", + "reference": "dcdf7900b88c1e203bccde8a446732cc8126f8b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/terminal42/escargot/zipball/dcdf7900b88c1e203bccde8a446732cc8126f8b1", + "reference": "dcdf7900b88c1e203bccde8a446732cc8126f8b1", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "nyholm/psr7": "^1.1", + "php": "^8.1", + "psr/http-message": "^1.0 || ^2.0", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "symfony/clock": "^6.2 || ^7.0", + "symfony/dom-crawler": "^5.4 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", + "symfony/http-client": "^5.4 || ^6.0 || ^7.0", + "webignition/robots-txt-file": "^3.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6", + "fig/log-test": "^1.0", + "symfony/finder": "^5.4|| ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0", + "terminal42/contao-build-tools": "@dev" + }, + "type": "library", + "autoload": { + "psr-4": { + "Terminal42\\Escargot\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Yanick Witschi", + "homepage": "https://github.com/toflar", + "role": "Developer" + } + ], + "description": "A web crawler or spider library based on Symfony components", + "homepage": "https://www.terminal42.ch", + "keywords": [ + "crawl", + "escargot", + "index", + "search", + "spider" + ], + "support": { + "issues": "https://github.com/terminal42/escargot/issues", + "source": "https://github.com/terminal42/escargot" + }, + "time": "2025-09-10T10:36:01+00:00" + }, + { + "name": "terminal42/service-annotation-bundle", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/terminal42/service-annotation-bundle.git", + "reference": "114105fc20d6d07087d30c5cc60890338e375261" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/terminal42/service-annotation-bundle/zipball/114105fc20d6d07087d30c5cc60890338e375261", + "reference": "114105fc20d6d07087d30c5cc60890338e375261", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.6 || ^2.0", + "php": "^7.1 || ^8.0", + "symfony/dependency-injection": "^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/http-kernel": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "terminal42/contao-build-tools": "@dev" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Terminal42\\ServiceAnnotationBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "terminal42 gmbh", + "homepage": "https://www.terminal42.ch/" + } + ], + "description": "Add service tags from class annotations", + "support": { + "issues": "https://github.com/terminal42/service-annotation-bundle/issues", + "source": "https://github.com/terminal42/service-annotation-bundle" + }, + "funding": [ + { + "url": "https://github.com/sponsors/terminal42", + "type": "github" + }, + { + "url": "https://ko-fi.com/terminal42", + "type": "other" + } + ], + "time": "2024-08-14T14:01:08+00:00" + }, + { + "name": "toflar/cronjob-supervisor", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/Toflar/cronjob-supervisor.git", + "reference": "bbe5c63c83149ee2e474f5fbcbf3e7609b918710" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Toflar/cronjob-supervisor/zipball/bbe5c63c83149ee2e474f5fbcbf3e7609b918710", + "reference": "bbe5c63c83149ee2e474f5fbcbf3e7609b918710", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony/filesystem": "^6.0 || ^7.0", + "symfony/lock": "^6.0 || ^7.0", + "symfony/process": "^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "terminal42/contao-build-tools": "@dev" + }, + "type": "library", + "autoload": { + "psr-4": { + "Toflar\\CronjobSupervisor\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Yanick Witschi", + "email": "yanick.witschi@terminal42.ch" + } + ], + "description": "A simple supervisor for processes that can be triggered using a minutely cronjob", + "support": { + "issues": "https://github.com/Toflar/cronjob-supervisor/issues", + "source": "https://github.com/Toflar/cronjob-supervisor/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/Toflar", + "type": "github" + } + ], + "time": "2025-09-01T09:36:18+00:00" + }, + { + "name": "twig/string-extra", + "version": "v3.21.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/string-extra.git", + "reference": "4b3337544ac8f76c280def94e32b53acfaec0589" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/string-extra/zipball/4b3337544ac8f76c280def94e32b53acfaec0589", + "reference": "4b3337544ac8f76c280def94e32b53acfaec0589", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/string": "^5.4|^6.4|^7.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^3.13|^4.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Twig\\Extra\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Twig extension for Symfony String", + "homepage": "https://twig.symfony.com", + "keywords": [ + "html", + "string", + "twig", + "unicode" + ], + "support": { + "source": "https://github.com/twigphp/string-extra/tree/v3.21.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-01-31T20:45:36+00:00" + }, + { + "name": "twig/twig", + "version": "v3.21.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.21.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-05-03T07:21:55+00:00" + }, + { + "name": "ua-parser/uap-php", + "version": "v3.10.0", + "source": { + "type": "git", + "url": "https://github.com/ua-parser/uap-php.git", + "reference": "f44bdd1b38198801cf60b0681d2d842980e47af5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ua-parser/uap-php/zipball/f44bdd1b38198801cf60b0681d2d842980e47af5", + "reference": "f44bdd1b38198801cf60b0681d2d842980e47af5", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.1", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.33", + "phpunit/phpunit": "^8 || ^9", + "symfony/console": "^3.4 || ^4.2 || ^4.3 || ^5.0", + "symfony/filesystem": "^3.4 || ^4.2 || ^4.3 || ^5.0", + "symfony/finder": "^3.4 || ^4.2 || ^4.3 || ^5.0", + "symfony/yaml": "^3.4 || ^4.2 || ^4.3 || ^5.0", + "vimeo/psalm": "^3.12" + }, + "suggest": { + "symfony/console": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0", + "symfony/filesystem": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0", + "symfony/finder": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0", + "symfony/yaml": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0" + }, + "bin": [ + "bin/uaparser" + ], + "type": "library", + "autoload": { + "psr-4": { + "UAParser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dave Olsen", + "email": "dmolsen@gmail.com" + }, + { + "name": "Lars Strojny", + "email": "lars@strojny.net" + } + ], + "description": "A multi-language port of Browserscope's user agent parser.", + "support": { + "issues": "https://github.com/ua-parser/uap-php/issues", + "source": "https://github.com/ua-parser/uap-php/tree/v3.10.0" + }, + "time": "2025-07-17T15:43:24+00:00" + }, + { + "name": "wa72/htmlpagedom", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/wasinger/htmlpagedom.git", + "reference": "9fa7dfea493e913e81a2b0f8d61f7a94324a04ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wasinger/htmlpagedom/zipball/9fa7dfea493e913e81a2b0f8d61f7a94324a04ea", + "reference": "9fa7dfea493e913e81a2b0f8d61f7a94324a04ea", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^8.0", + "symfony/css-selector": "^6.0 || ^7.0", + "symfony/dom-crawler": "^6.0 || ^7.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "clean/phpdoc-md": "^0.19.3", + "mikey179/vfsstream": "^1.6.10", + "phpunit/phpunit": "^9", + "scrutinizer/ocular": "^1.9", + "wa72/html-pretty-min": "~0.1" + }, + "suggest": { + "wa72/html-pretty-min": "Minify or indent HTML documents" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Wa72\\HtmlPageDom\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christoph Singer", + "email": "singer@webagentur72.de", + "homepage": "http://www.webagentur72.de" + } + ], + "description": "jQuery-inspired DOM manipulation extension for Symfony's Crawler", + "homepage": "http://github.com/wasinger/htmlpagedom", + "keywords": [ + "crawler", + "dom", + "html" + ], + "support": { + "issues": "https://github.com/wasinger/htmlpagedom/issues", + "source": "https://github.com/wasinger/htmlpagedom/tree/v3.0.2" + }, + "time": "2023-12-05T20:36:58+00:00" + }, + { + "name": "web-auth/cose-lib", + "version": "4.4.2", + "source": { + "type": "git", + "url": "https://github.com/web-auth/cose-lib.git", + "reference": "a93b61c48fb587855f64a9ec11ad7b60e867cb15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/a93b61c48fb587855f64a9ec11ad7b60e867cb15", + "reference": "a93b61c48fb587855f64a9ec11ad7b60e867cb15", + "shasum": "" + }, + "require": { + "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13", + "ext-json": "*", + "ext-openssl": "*", + "php": ">=8.1", + "spomky-labs/pki-framework": "^1.0" + }, + "require-dev": { + "deptrac/deptrac": "^3.0", + "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", + "infection/infection": "^0.29", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/extension-installer": "^1.3", + "phpstan/phpstan": "^1.7|^2.0", + "phpstan/phpstan-deprecation-rules": "^1.0|^2.0", + "phpstan/phpstan-phpunit": "^1.1|^2.0", + "phpstan/phpstan-strict-rules": "^1.0|^2.0", + "phpunit/phpunit": "^10.1|^11.0|^12.0", + "rector/rector": "^2.0", + "symfony/phpunit-bridge": "^6.4|^7.0", + "symplify/easy-coding-standard": "^12.0" + }, + "suggest": { + "ext-bcmath": "For better performance, please install either GMP (recommended) or BCMath extension", + "ext-gmp": "For better performance, please install either GMP (recommended) or BCMath extension" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cose\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/web-auth/cose/contributors" + } + ], + "description": "CBOR Object Signing and Encryption (COSE) For PHP", + "homepage": "https://github.com/web-auth", + "keywords": [ + "COSE", + "RFC8152" + ], + "support": { + "issues": "https://github.com/web-auth/cose-lib/issues", + "source": "https://github.com/web-auth/cose-lib/tree/4.4.2" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-08-14T20:33:29+00:00" + }, + { + "name": "web-auth/webauthn-lib", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/web-auth/webauthn-lib.git", + "reference": "8937c397c8ae91b5af422ca8aa915c756062da74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/8937c397c8ae91b5af422ca8aa915c756062da74", + "reference": "8937c397c8ae91b5af422ca8aa915c756062da74", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-openssl": "*", + "paragonie/constant_time_encoding": "^2.6|^3.0", + "php": ">=8.2", + "phpdocumentor/reflection-docblock": "^5.3", + "psr/clock": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/log": "^1.0|^2.0|^3.0", + "spomky-labs/cbor-php": "^3.0", + "spomky-labs/pki-framework": "^1.0", + "symfony/clock": "^6.4|^7.0", + "symfony/deprecation-contracts": "^3.2", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "web-auth/cose-lib": "^4.2.3" + }, + "suggest": { + "psr/log-implementation": "Recommended to receive logs from the library", + "symfony/event-dispatcher": "Recommended to use dispatched events", + "web-token/jwt-library": "Mandatory for fetching Metadata Statement from distant sources" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/web-auth/webauthn-framework", + "name": "web-auth/webauthn-framework" + } + }, + "autoload": { + "psr-4": { + "Webauthn\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/web-auth/webauthn-library/contributors" + } + ], + "description": "FIDO2/Webauthn Support For PHP", + "homepage": "https://github.com/web-auth", + "keywords": [ + "FIDO2", + "fido", + "webauthn" + ], + "support": { + "source": "https://github.com/web-auth/webauthn-lib/tree/5.2.2" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-03-16T14:38:43+00:00" + }, + { + "name": "web-auth/webauthn-stimulus", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/web-auth/ux.git", + "reference": "196ea14c0966dc5be10c0a8c6a52af3461102341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/web-auth/ux/zipball/196ea14c0966dc5be10c0a8c6a52af3461102341", + "reference": "196ea14c0966dc5be10c0a8c6a52af3461102341", + "shasum": "" + }, + "conflict": { + "symfony/flex": "<1.13" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "url": "https://github.com/web-auth/webauthn-framework", + "name": "web-auth/webauthn-framework" + } + }, + "autoload": { + "psr-4": { + "Webauthn\\Stimulus\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/web-auth/ux/contributors" + } + ], + "description": "Webauthn integration for Symfony", + "homepage": "https://github.com/web-auth", + "keywords": [ + "FIDO2", + "fido", + "symfony", + "symfony-ux", + "webauthn" + ], + "support": { + "source": "https://github.com/web-auth/ux/tree/5.2.2" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-03-16T14:38:43+00:00" + }, + { + "name": "web-auth/webauthn-symfony-bundle", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/web-auth/webauthn-symfony-bundle.git", + "reference": "aebb0315b43728a92973cc3d4d471cbe414baa54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/web-auth/webauthn-symfony-bundle/zipball/aebb0315b43728a92973cc3d4d471cbe414baa54", + "reference": "aebb0315b43728a92973cc3d4d471cbe414baa54", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/event-dispatcher": "^1.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/security-bundle": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "web-auth/webauthn-lib": "self.version" + }, + "suggest": { + "symfony/security-bundle": "Symfony firewall using a JSON API (perfect for script applications)" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "url": "https://github.com/web-auth/webauthn-framework", + "name": "web-auth/webauthn-framework" + } + }, + "autoload": { + "psr-4": { + "Webauthn\\Bundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/web-auth/webauthn-symfony-bundle/contributors" + } + ], + "description": "FIDO2/Webauthn Security Bundle For Symfony", + "homepage": "https://github.com/web-auth", + "keywords": [ + "FIDO2", + "bundle", + "fido", + "symfony", + "symfony-bundle", + "webauthn" + ], + "support": { + "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.2.2" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-03-24T12:00:00+00:00" + }, + { + "name": "webignition/disallowed-character-terminated-string", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/webignition/disallowed-character-terminated-string.git", + "reference": "1c35b8bacbb2e76837c0aa8538dc2468a1f10e6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webignition/disallowed-character-terminated-string/zipball/1c35b8bacbb2e76837c0aa8538dc2468a1f10e6e", + "reference": "1c35b8bacbb2e76837c0aa8538dc2468a1f10e6e", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.3", + "phpunit/phpunit": "~8.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "webignition\\DisallowedCharacterTerminatedString\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jon Cram", + "email": "webignition@gmail.com" + } + ], + "description": "A string terminated by one or more disallowed characters", + "homepage": "https://github.com/webignition/disallowed-character-terminated-string", + "keywords": [ + "string", + "terminated" + ], + "support": { + "issues": "https://github.com/webignition/disallowed-character-terminated-string/issues", + "source": "https://github.com/webignition/disallowed-character-terminated-string/tree/master" + }, + "time": "2019-12-20T15:52:44+00:00" + }, + { + "name": "webignition/robots-txt-file", + "version": "3.0", + "source": { + "type": "git", + "url": "https://github.com/webignition/robots-txt-file.git", + "reference": "51bd7b1045348d94177cf6b21415385bf0923fa6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webignition/robots-txt-file/zipball/51bd7b1045348d94177cf6b21415385bf0923fa6", + "reference": "51bd7b1045348d94177cf6b21415385bf0923fa6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": ">=7.2.0", + "webignition/disallowed-character-terminated-string": ">=2,<3" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.3", + "phpunit/phpunit": "^8.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "webignition\\RobotsTxt\\": "src/", + "webignition\\RobotsTxt\\Tests\\": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jon Cram", + "email": "webignition@gmail.com" + } + ], + "description": "Models a robots.txt file", + "homepage": "https://github.com/webignition/robots-txt-file", + "keywords": [ + "parser", + "robots.txt" + ], + "support": { + "issues": "https://github.com/webignition/robots-txt-file/issues", + "source": "https://github.com/webignition/robots-txt-file/tree/3.0" + }, + "time": "2019-12-20T17:50:44+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "wikimedia/less.php", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/less.php.git", + "reference": "e238ad228d74b6ffd38209c799b34e9826909266" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/less.php/zipball/e238ad228d74b6ffd38209c799b34e9826909266", + "reference": "e238ad228d74b6ffd38209c799b34e9826909266", + "shasum": "" + }, + "require": { + "php": ">=7.2.9" + }, + "require-dev": { + "phpunit/phpunit": "7.5.14" + }, + "bin": [ + "bin/lessc" + ], + "type": "library", + "autoload": { + "psr-0": { + "Less": "lib/" + }, + "classmap": [ + "lessc.inc.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Josh Schmidt", + "homepage": "https://github.com/oyejorge" + }, + { + "name": "Matt Agar", + "homepage": "https://github.com/agar" + }, + { + "name": "Martin Jantošovič", + "homepage": "https://github.com/Mordred" + } + ], + "description": "PHP port of the Javascript version of LESS http://lesscss.org (Originally maintained by Josh Schmidt)", + "keywords": [ + "css", + "less", + "less.js", + "lesscss", + "php", + "stylesheet" + ], + "support": { + "source": "https://github.com/wikimedia/less.php/tree/1.8.2" + }, + "time": "2019-11-06T18:30:11+00:00" + } + ], + "packages-dev": [ + { + "name": "contao/contao-rector", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/contao/contao-rector.git", + "reference": "5323c853073f0cefcd0c4b5c816298530ab965ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao/contao-rector/zipball/5323c853073f0cefcd0c4b5c816298530ab965ca", + "reference": "5323c853073f0cefcd0c4b5c816298530ab965ca", + "shasum": "" + }, + "require": { + "php": "^8.1", + "phpstan/phpstan": "^2.0", + "rector/rector": "^2.0", + "webmozart/assert": "^1.7" + }, + "require-dev": { + "contao/core-bundle": "^4.4 || ^5.0", + "phpunit/phpunit": "^10.0", + "symplify/rule-doc-generator": "^12.2" + }, + "default-branch": true, + "type": "rector-extension", + "autoload": { + "psr-4": { + "Contao\\Rector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "description": "Rector upgrades rules for Contao CMS", + "homepage": "https://contao.org", + "support": { + "docs": "https://docs.contao.org", + "forum": "https://community.contao.org", + "issues": "https://github.com/contao/contao-rector/issues", + "source": "https://github.com/contao/contao-rector" + }, + "funding": [ + { + "url": "https://to.contao.org/donate", + "type": "other" + } + ], + "time": "2025-05-16T15:19:37+00:00" + }, + { + "name": "contao/manager-plugin", + "version": "2.13.5", + "source": { + "type": "git", + "url": "https://github.com/contao/manager-plugin.git", + "reference": "53a6f5b2289406ead1e80a631664c314a3e66b68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao/manager-plugin/zipball/53a6f5b2289406ead1e80a631664c314a3e66b68", + "reference": "53a6f5b2289406ead1e80a631664c314a3e66b68", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.7 || ^2.0", + "php": "^7.1 || ^8.0", + "symfony/config": "^3.3 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^3.3 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/filesystem": "^3.3 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/http-kernel": "^3.3 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/routing": "^3.3 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "conflict": { + "contao/manager-bundle": "4.9.* <4.9.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4", + "composer/composer": "^1.7 || ^2.0", + "contao/core-bundle": "^4.4 || ^5.0", + "ext-zip": "*", + "php-http/guzzle6-adapter": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.3", + "symfony/phpunit-bridge": "^3.4.40 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "webmozart/path-util": "^2.0" + }, + "type": "composer-plugin", + "extra": { + "class": [ + "Contao\\ManagerPlugin\\Composer\\ArtifactsPlugin", + "Contao\\ManagerPlugin\\Composer\\ManagerPluginInstaller", + "Contao\\ManagerPlugin\\Composer\\AppAutoloadPlugin" + ], + "bamarni-bin": { + "bin-links": false, + "target-directory": "tools" + } + }, + "autoload": { + "psr-4": { + "Contao\\ManagerPlugin\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Andreas Schempp", + "homepage": "https://github.com/aschempp" + } + ], + "description": "Contao 4 manager plugin", + "support": { + "issues": "https://github.com/contao/manager-plugin/issues", + "source": "https://github.com/contao/manager-plugin/tree/2.13.5" + }, + "funding": [ + { + "url": "https://to.contao.org/donate", + "type": "custom" + } + ], + "time": "2025-06-26T11:56:06+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "2.1.31", + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ead89849d879fe203ce9292c6ef5e7e76f867b96", + "reference": "ead89849d879fe203ce9292c6ef5e7e76f867b96", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2025-10-10T14:14:11+00:00" + }, + { + "name": "phpstan/phpstan-symfony", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-symfony.git", + "reference": "8820c22d785c235f69bb48da3d41e688bc8a1796" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/8820c22d785c235f69bb48da3d41e688bc8a1796", + "reference": "8820c22d785c235f69bb48da3d41e688bc8a1796", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.1.13" + }, + "conflict": { + "symfony/framework-bundle": "<3.0" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "psr/container": "1.1.2", + "symfony/config": "^5.4 || ^6.1", + "symfony/console": "^5.4 || ^6.1", + "symfony/dependency-injection": "^5.4 || ^6.1", + "symfony/form": "^5.4 || ^6.1", + "symfony/framework-bundle": "^5.4 || ^6.1", + "symfony/http-foundation": "^5.4 || ^6.1", + "symfony/messenger": "^5.4", + "symfony/polyfill-php80": "^1.24", + "symfony/serializer": "^5.4", + "symfony/service-contracts": "^2.2.0" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lukáš Unger", + "email": "looky.msc@gmail.com", + "homepage": "https://lookyman.net" + } + ], + "description": "Symfony Framework extensions and rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-symfony/issues", + "source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.8" + }, + "time": "2025-09-07T06:55:50+00:00" + }, + { + "name": "rector/rector", + "version": "2.2.3", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "d27f976a332a87b5d03553c2e6f04adbe5da034f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/d27f976a332a87b5d03553c2e6f04adbe5da034f", + "reference": "d27f976a332a87b5d03553c2e6f04adbe5da034f", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "phpstan/phpstan": "^2.1.26" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "suggest": { + "ext-dom": "To manipulate phpunit.xml via the custom-rule command" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "homepage": "https://getrector.com/", + "keywords": [ + "automation", + "dev", + "migration", + "refactoring" + ], + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/2.2.3" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2025-10-11T21:50:23+00:00" + }, + { + "name": "symplify/easy-coding-standard", + "version": "12.6.0", + "source": { + "type": "git", + "url": "https://github.com/easy-coding-standard/easy-coding-standard.git", + "reference": "781e6124dc7e14768ae999a8f5309566bbe62004" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/781e6124dc7e14768ae999a8f5309566bbe62004", + "reference": "781e6124dc7e14768ae999a8f5309566bbe62004", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "conflict": { + "friendsofphp/php-cs-fixer": "<3.46", + "phpcsstandards/php_codesniffer": "<3.8", + "symplify/coding-standard": "<12.1" + }, + "suggest": { + "ext-dom": "Needed to support checkstyle output format in class CheckstyleOutputFormatter" + }, + "bin": [ + "bin/ecs" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Use Coding Standard with 0-knowledge of PHP-CS-Fixer and PHP_CodeSniffer", + "keywords": [ + "Code style", + "automation", + "fixer", + "static analysis" + ], + "support": { + "issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues", + "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.6.0" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2025-09-10T14:21:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "contao/contao-rector": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^8.1" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/config/flare.yaml b/config/flare.yaml new file mode 100644 index 00000000..caa0ebae --- /dev/null +++ b/config/flare.yaml @@ -0,0 +1,5 @@ +services: + HeimrichHannot\CategoriesBundle\Flare\: + resource: '../src/Flare/*' + autowire: true + autoconfigure: true \ No newline at end of file diff --git a/config/services.yaml b/config/services.yaml new file mode 100644 index 00000000..e3f27fe8 --- /dev/null +++ b/config/services.yaml @@ -0,0 +1,55 @@ +services: + + HeimrichHannot\CategoriesBundle\: + resource: '../src/{Twig}/*' + autowire: true + autoconfigure: true + + HeimrichHannot\CategoriesBundle\EventListener\: + resource: '../src/EventListener/*' + autowire: true + autoconfigure: true + public: true + + huh.categories.manager: + class: HeimrichHannot\CategoriesBundle\Manager\CategoryManager + public: true + autowire: true + huh.categories.config_manager: + class: HeimrichHannot\CategoriesBundle\Manager\CategoryConfigManager + public: true + arguments: + - "@contao.framework" + huh.categories.context_manager: + class: HeimrichHannot\CategoriesBundle\Manager\CategoryContextManager + public: true + arguments: + - "@contao.framework" + huh.categories.property_cache_manager: + class: HeimrichHannot\CategoriesBundle\Manager\CategoryPropertyCacheManager + public: true + arguments: + - "@contao.framework" + huh.categories.picker.category_provider: + class: HeimrichHannot\CategoriesBundle\Picker\CategoryPickerProvider + public: false + arguments: + - "@knp_menu.factory" + - "@router" + - "@translator" + calls: + - [ setTokenStorage, [ "@security.token_storage" ] ] + tags: + - { name: contao.picker_provider, priority: 512 } + + # Symfony 4 + HeimrichHannot\CategoriesBundle\Manager\CategoryManager: + alias: huh.categories.manager + public: true + + # Commands + + HeimrichHannot\CategoriesBundle\Command\NewsCategoriesMigrationCommand: + autowire: true + autoconfigure: true + public: false diff --git a/src/Resources/contao/config/config.php b/contao/config/config.php similarity index 70% rename from src/Resources/contao/config/config.php rename to contao/config/config.php index 53e84829..21158846 100644 --- a/src/Resources/contao/config/config.php +++ b/contao/config/config.php @@ -8,6 +8,7 @@ use HeimrichHannot\CategoriesBundle\DataContainer\NewsContainer; use HeimrichHannot\CategoriesBundle\EventListener\HookListener; +use Contao\ArrayUtil; $GLOBALS['BE_MOD']['content']['categories'] = [ 'tables' => ['tl_category', 'tl_category_config', 'tl_category_context'], @@ -16,16 +17,16 @@ /* * Front end modules */ -array_insert($GLOBALS['FE_MOD'], 2, [ - 'categoriesBundle' => [ - 'categoriesMenu' => 'HeimrichHannot\CategoriesBundle\Module\ModuleCategoriesMenu', - ], -]); +//$GLOBALS['FE_MOD'] = ArrayUtil::arrayInsert($GLOBALS['FE_MOD'], 2, [ +// 'categoriesBundle' => [ +// 'categoriesMenu' => 'HeimrichHannot\CategoriesBundle\Module\ModuleCategoriesMenu', +// ], +//]); /* * JavaScript */ -if (System::getContainer()->get('huh.utils.container')->isBackend()) { +if (($GLOBALS['TL_MODE'] ?? '') === 'BE') { $GLOBALS['TL_JAVASCRIPT']['contao-categories-bundle'] = 'bundles/categories/js/contao-categories-bundle.be.min.js|static'; } @@ -39,19 +40,11 @@ */ $GLOBALS['TL_HOOKS']['executePostActions']['reloadCategoryTree'] = [HookListener::class, 'reloadCategoryTree']; $GLOBALS['TL_HOOKS']['parseBackendTemplate']['adjustCategoryTree'] = [HookListener::class, 'adjustCategoryTree']; -$GLOBALS['TL_HOOKS']['generateXmlFiles']['generateFeed_huhCategories'] = [NewsContainer::class, 'generateFeeds']; -$GLOBALS['TL_HOOKS']['loadDataContainer']['huh_categories'] = [ - \HeimrichHannot\CategoriesBundle\EventListener\LoadDataContainerListener::class, '__invoke', ]; - -/* - * Crons - */ -$GLOBALS['TL_CRON']['daily']['generateFeed_huhCategories'] = [NewsContainer::class, 'generateFeeds']; /* * Assets */ -if (System::getContainer()->get('huh.utils.container')->isBackend()) { +if (($GLOBALS['TL_MODE'] ?? '') === 'BE') { $GLOBALS['TL_CSS']['contao-categories-bundle'] = 'bundles/categories/css/contao-categories-bundle.be.css|static'; } diff --git a/src/Resources/contao/dca/tl_category.php b/contao/dca/tl_category.php similarity index 97% rename from src/Resources/contao/dca/tl_category.php rename to contao/dca/tl_category.php index 9df49251..3a89ac7d 100644 --- a/src/Resources/contao/dca/tl_category.php +++ b/contao/dca/tl_category.php @@ -6,12 +6,15 @@ * @license LGPL-3.0-or-later */ -\System::loadLanguageFile('tl_news_archive'); +use Contao\DC_Table; +use Contao\System; + +System::loadLanguageFile('tl_news_archive'); $GLOBALS['TL_DCA']['tl_category'] = [ 'config' => [ 'label' => &$GLOBALS['TL_LANG']['tl_news_archive']['categories'][0], - 'dataContainer' => 'Table', + 'dataContainer' => DC_Table::class, 'enableVersioning' => true, 'onload_callback' => [ ['\HeimrichHannot\CategoriesBundle\Backend\Category', 'checkPermission'], @@ -21,9 +24,6 @@ 'ondelete_callback' => [ ['\HeimrichHannot\CategoriesBundle\Backend\Category', 'deleteCategoryAssociations'], ], - 'onsubmit_callback' => [ - ['huh.utils.dca', 'setDateAdded'], - ], 'sql' => [ 'keys' => [ 'id' => 'primary', @@ -112,9 +112,6 @@ ], ], 'palettes' => [ - '__selector__' => [ - 'type', - ], 'default' => '{general_legend},title,alias,frontendTitle,cssClass,selectable;{redirect_legend},jumpTo;', ], 'fields' => [ @@ -132,6 +129,8 @@ ], 'dateAdded' => [ 'label' => &$GLOBALS['TL_LANG']['MSC']['dateAdded'], + 'exclude' => true, + 'filter' => true, 'sorting' => true, 'flag' => 6, 'eval' => ['rgxp' => 'datim', 'doNotCopy' => true], diff --git a/src/Resources/contao/dca/tl_category_association.php b/contao/dca/tl_category_association.php similarity index 100% rename from src/Resources/contao/dca/tl_category_association.php rename to contao/dca/tl_category_association.php diff --git a/src/Resources/contao/dca/tl_category_config.php b/contao/dca/tl_category_config.php similarity index 90% rename from src/Resources/contao/dca/tl_category_config.php rename to contao/dca/tl_category_config.php index d56b6836..711b7ec5 100644 --- a/src/Resources/contao/dca/tl_category_config.php +++ b/contao/dca/tl_category_config.php @@ -6,14 +6,13 @@ * @license LGPL-3.0-or-later */ +use Contao\DC_Table; + $GLOBALS['TL_DCA']['tl_category_config'] = [ 'config' => [ - 'dataContainer' => 'Table', + 'dataContainer' => DC_Table::class, 'enableVersioning' => true, 'ptable' => 'tl_category', - 'onsubmit_callback' => [ - ['huh.utils.dca', 'setDateAdded'], - ], 'sql' => [ 'keys' => [ 'id' => 'primary', @@ -82,6 +81,8 @@ ], 'dateAdded' => [ 'label' => &$GLOBALS['TL_LANG']['MSC']['dateAdded'], + 'exclude' => true, + 'filter' => true, 'sorting' => true, 'flag' => 6, 'eval' => ['rgxp' => 'datim', 'doNotCopy' => true], @@ -100,6 +101,4 @@ ], ]; -System::getContainer()->get('huh.utils.dca')->addOverridableFields(['jumpTo'], 'tl_category', 'tl_category_config', [ - 'save_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'deleteCachedPropertyValuesByCategoryAndPropertyBool']], -]); + diff --git a/src/Resources/contao/dca/tl_category_context.php b/contao/dca/tl_category_context.php similarity index 95% rename from src/Resources/contao/dca/tl_category_context.php rename to contao/dca/tl_category_context.php index f445b7c7..931ac971 100644 --- a/src/Resources/contao/dca/tl_category_context.php +++ b/contao/dca/tl_category_context.php @@ -5,14 +5,12 @@ * * @license LGPL-3.0-or-later */ +use Contao\DC_Table; $GLOBALS['TL_DCA']['tl_category_context'] = [ 'config' => [ - 'dataContainer' => 'Table', + 'dataContainer' => DC_Table::class, 'enableVersioning' => true, - 'onsubmit_callback' => [ - ['huh.utils.dca', 'setDateAdded'], - ], 'sql' => [ 'keys' => [ 'id' => 'primary', @@ -76,6 +74,8 @@ ], 'dateAdded' => [ 'label' => &$GLOBALS['TL_LANG']['MSC']['dateAdded'], + 'exclude' => true, + 'filter' => true, 'sorting' => true, 'flag' => 6, 'eval' => ['rgxp' => 'datim', 'doNotCopy' => true], diff --git a/src/Resources/contao/dca/tl_category_property_cache.php b/contao/dca/tl_category_property_cache.php similarity index 100% rename from src/Resources/contao/dca/tl_category_property_cache.php rename to contao/dca/tl_category_property_cache.php diff --git a/src/Resources/contao/dca/tl_module.php b/contao/dca/tl_module.php similarity index 100% rename from src/Resources/contao/dca/tl_module.php rename to contao/dca/tl_module.php diff --git a/src/Resources/contao/dca/tl_page.php b/contao/dca/tl_page.php similarity index 100% rename from src/Resources/contao/dca/tl_page.php rename to contao/dca/tl_page.php diff --git a/src/Resources/contao/dca/tl_user.php b/contao/dca/tl_user.php similarity index 100% rename from src/Resources/contao/dca/tl_user.php rename to contao/dca/tl_user.php diff --git a/src/Resources/contao/dca/tl_user_group.php b/contao/dca/tl_user_group.php similarity index 95% rename from src/Resources/contao/dca/tl_user_group.php rename to contao/dca/tl_user_group.php index 5f42dab3..66f173ba 100644 --- a/src/Resources/contao/dca/tl_user_group.php +++ b/contao/dca/tl_user_group.php @@ -1,6 +1,7 @@ 'Konfigurationen verfügbar', 'primaryCategory' => 'Primäre Kategorie', @@ -16,3 +18,6 @@ */ $GLOBALS['TL_LANG']['MSC']['cm_resetCategories'] = ['Alle Kategorien', 'Zeigt Nachrichten aus allen Kategorien']; $GLOBALS['TL_LANG']['MSC']['categoryPicker'] = 'Kategorien'; + +$GLOBALS['TL_LANG']['FLARE']['filter'][ParentCategoryFilterElement::TYPE][0] = 'Elternkategorie (Kindkategorien der ausgewählten Kategorie)'; +$GLOBALS['TL_LANG']['FLARE']['filter'][ParentCategoryFilterElement::TYPE][1] = 'Filtert Einträge nach den Kindkategorien der ausgewählten Kategorie.'; \ No newline at end of file diff --git a/src/Resources/contao/languages/de/modules.php b/contao/languages/de/modules.php similarity index 100% rename from src/Resources/contao/languages/de/modules.php rename to contao/languages/de/modules.php diff --git a/src/Resources/contao/languages/de/tl_category.php b/contao/languages/de/tl_category.php similarity index 92% rename from src/Resources/contao/languages/de/tl_category.php rename to contao/languages/de/tl_category.php index 23f02ea0..a691b41a 100644 --- a/src/Resources/contao/languages/de/tl_category.php +++ b/contao/languages/de/tl_category.php @@ -9,7 +9,6 @@ $lang['frontendTitle'] = ['Frontend Titel', 'Titel, der im Frontend angezeigt wird.']; $lang['alias'] = ['Kategorie-Alias', 'Der Kategorie-Alias ist eine eindeutige Referenz, die anstelle der numerischen ID aufgerufen werden kann.']; $lang['cssClass'] = ['CSS-Klasse', 'Hier kann eine CSS-Klasse vergeben werden, welche zur Kategorie im Front-End hinzugefügt wird.']; -$lang['overrideJumpTo'] = ['Weiterleitungsseite überschreiben', 'Wählen Sie diese Option, um die in der Eltern-Kategorie festgelegte Weiterleitungsseite zu überschreiben.']; $lang['jumpTo'] = ['Weiterleitungsseite', 'Wählen Sie hier eine Seite aus.']; $lang['category'] = ['Kategorie', 'Bitte wählen Sie hier eine Kategorie aus.']; $lang['categories'] = ['Kategorien', 'Bitte wählen Sie hier die gewünschten Kategorien aus.']; diff --git a/src/Resources/contao/languages/de/tl_category_config.php b/contao/languages/de/tl_category_config.php similarity index 85% rename from src/Resources/contao/languages/de/tl_category_config.php rename to contao/languages/de/tl_category_config.php index 14ed47bd..69cba94d 100644 --- a/src/Resources/contao/languages/de/tl_category_config.php +++ b/contao/languages/de/tl_category_config.php @@ -7,7 +7,6 @@ */ $lang['tstamp'] = ['Änderungsdatum', '']; $lang['context'] = ['Kategorie-Kontext', 'Wählen Sie hier einen Kategorie-Kontext aus.']; -$lang['overrideJumpTo'] = ['Weiterleitungsseite überschreiben', 'Wählen Sie diese Option, um die in der Kategorie festgelegte Weiterleitungsseite zu überschreiben.']; /** * Legends diff --git a/src/Resources/contao/languages/de/tl_category_context.php b/contao/languages/de/tl_category_context.php similarity index 100% rename from src/Resources/contao/languages/de/tl_category_context.php rename to contao/languages/de/tl_category_context.php diff --git a/src/Resources/contao/languages/de/tl_module.php b/contao/languages/de/tl_module.php similarity index 100% rename from src/Resources/contao/languages/de/tl_module.php rename to contao/languages/de/tl_module.php diff --git a/src/Resources/contao/languages/de/tl_page.php b/contao/languages/de/tl_page.php similarity index 100% rename from src/Resources/contao/languages/de/tl_page.php rename to contao/languages/de/tl_page.php diff --git a/src/Resources/contao/languages/de/tl_user.php b/contao/languages/de/tl_user.php similarity index 100% rename from src/Resources/contao/languages/de/tl_user.php rename to contao/languages/de/tl_user.php diff --git a/src/Resources/contao/languages/de/tl_user_group.php b/contao/languages/de/tl_user_group.php similarity index 75% rename from src/Resources/contao/languages/de/tl_user_group.php rename to contao/languages/de/tl_user_group.php index 582cee20..aae15f45 100644 --- a/src/Resources/contao/languages/de/tl_user_group.php +++ b/contao/languages/de/tl_user_group.php @@ -1,9 +1,10 @@ 'Configuration available', 'primaryCategory' => 'Primary category', @@ -16,3 +18,6 @@ */ $GLOBALS['TL_LANG']['MSC']['cm_resetCategories'] = ['All categories', 'Show news from all categories']; $GLOBALS['TL_LANG']['MSC']['categoryPicker'] = 'Categories'; + +$GLOBALS['TL_LANG']['FLARE']['filter'][ParentCategoryFilterElement::TYPE][0] = 'Parent Category (child categories of the selected category)'; +$GLOBALS['TL_LANG']['FLARE']['filter'][ParentCategoryFilterElement::TYPE][1] = 'Filters entries by the child categories of the selected category.'; diff --git a/src/Resources/contao/languages/en/modules.php b/contao/languages/en/modules.php similarity index 100% rename from src/Resources/contao/languages/en/modules.php rename to contao/languages/en/modules.php diff --git a/src/Resources/contao/languages/en/tl_page.php b/contao/languages/en/tl_page.php similarity index 100% rename from src/Resources/contao/languages/en/tl_page.php rename to contao/languages/en/tl_page.php diff --git a/src/Resources/contao/templates/modules/mod_categoriesMenu.html5 b/contao/templates/modules/mod_categoriesMenu.html5 similarity index 100% rename from src/Resources/contao/templates/modules/mod_categoriesMenu.html5 rename to contao/templates/modules/mod_categoriesMenu.html5 diff --git a/src/Resources/public/css/contao-categories-bundle.be.css b/public/css/contao-categories-bundle.be.css similarity index 100% rename from src/Resources/public/css/contao-categories-bundle.be.css rename to public/css/contao-categories-bundle.be.css diff --git a/src/Resources/public/css/contao-categories-bundle.be.css.map b/public/css/contao-categories-bundle.be.css.map similarity index 100% rename from src/Resources/public/css/contao-categories-bundle.be.css.map rename to public/css/contao-categories-bundle.be.css.map diff --git a/src/Resources/public/css/contao-categories-bundle.be.scss b/public/css/contao-categories-bundle.be.scss similarity index 100% rename from src/Resources/public/css/contao-categories-bundle.be.scss rename to public/css/contao-categories-bundle.be.scss diff --git a/src/Resources/public/img/icon_primarized.png b/public/img/icon_primarized.png similarity index 100% rename from src/Resources/public/img/icon_primarized.png rename to public/img/icon_primarized.png diff --git a/src/Resources/public/img/icon_unprimarized.png b/public/img/icon_unprimarized.png similarity index 100% rename from src/Resources/public/img/icon_unprimarized.png rename to public/img/icon_unprimarized.png diff --git a/src/Resources/public/js/contao-categories-bundle.be.js b/public/js/contao-categories-bundle.be.js similarity index 100% rename from src/Resources/public/js/contao-categories-bundle.be.js rename to public/js/contao-categories-bundle.be.js diff --git a/src/Resources/public/js/contao-categories-bundle.be.min.js b/public/js/contao-categories-bundle.be.min.js similarity index 100% rename from src/Resources/public/js/contao-categories-bundle.be.min.js rename to public/js/contao-categories-bundle.be.min.js diff --git a/rector.php b/rector.php new file mode 100644 index 00000000..92e86f02 --- /dev/null +++ b/rector.php @@ -0,0 +1,43 @@ +withPaths([ + __DIR__ . '/src', + __DIR__ . '/contao', + + ]) + ->withPhpVersion(PhpVersion::PHP_84) + ->withRules([ + AddVoidReturnTypeWhereNoReturnRector::class, + # In Vorbereitung für PHP 8.4: + ExplicitNullableParamTypeRector::class + ]) + + ->withImportNames( + importShortClasses: false, + removeUnusedImports: true + ) + ->withComposerBased( + doctrine: true, + phpunit: true, + symfony: true, + ) + ->withSets([ + LevelSetList::UP_TO_PHP_82, + ContaoLevelSetList::UP_TO_CONTAO_53, + ContaoSetList::FQCN, + ContaoSetList::ANNOTATIONS_TO_ATTRIBUTES, + ]) + ->withSkip([ + \Rector\Php81\Rector\Array_\FirstClassCallableRector::class + ]); \ No newline at end of file diff --git a/src/Backend/Category.php b/src/Backend/Category.php index 736ee360..59d7ca5e 100644 --- a/src/Backend/Category.php +++ b/src/Backend/Category.php @@ -8,16 +8,20 @@ namespace HeimrichHannot\CategoriesBundle\Backend; +use Contao\Validator; +use Contao\Database; +use Contao\Input; use Contao\Backend; +use Contao\BackendUser; use Contao\Controller; use Contao\CoreBundle\Exception\AccessDeniedException; use Contao\DataContainer; use Contao\Environment; use Contao\Image; use Contao\PageModel; -use Contao\RequestToken; use Contao\StringUtil; use Contao\System; +use HeimrichHannot\UtilsBundle\Util\Utils; use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBagInterface; class Category extends Backend @@ -26,28 +30,35 @@ class Category extends Backend protected static $defaultPrimaryCategorySet = false; + public function __construct() + { + parent::__construct(); + $this->utils = System::getContainer()->get(Utils::class); + $this->request = System::getContainer()->get('request_stack')->getCurrentRequest(); + } + /** * Add a breadcrumb menu to the page tree. * * @throws AccessDeniedException * @throws \RuntimeException */ - public function addBreadcrumb() + public function addBreadcrumb(): void { $strKey = 'tl_category_node'; /** @var AttributeBagInterface $objSession */ - $objSession = \System::getContainer()->get('session')->getBag('contao_backend'); + $objSession = System::getContainer()->get('request_stack')->getSession()->getBag('contao_backend'); // Set a new node - if (System::getContainer()->get('huh.request')->hasGet('cn')) { + if ($this->request && $this->request->query->has('cn')) { // Check the path - if (\Validator::isInsecurePath(System::getContainer()->get('huh.request')->getGet('cn', true))) { - throw new \RuntimeException('Insecure path '.System::getContainer()->get('huh.request')->getGet('cn', true)); + if (Validator::isInsecurePath(htmlspecialchars($this->request->get('cn')))) { + throw new \RuntimeException('Insecure path ' . htmlspecialchars($this->request->get('cn'))); } - $objSession->set($strKey, System::getContainer()->get('huh.request')->getGet('cn', true)); - \Controller::redirect(preg_replace('/&cn=[^&]*/', '', Environment::get('request'))); + $objSession->set($strKey, htmlspecialchars($this->request->get('cn'))); + Controller::redirect(preg_replace('/&cn=[^&]*/', '', (string)Environment::get('request'))); } $intNode = $objSession->get($strKey); @@ -57,8 +68,8 @@ public function addBreadcrumb() } // Check the path (thanks to Arnaud Buchoux) - if (\Validator::isInsecurePath($intNode)) { - throw new \RuntimeException('Insecure path '.$intNode); + if (Validator::isInsecurePath($intNode)) { + throw new \RuntimeException('Insecure path ' . $intNode); } $arrIds = []; @@ -67,7 +78,7 @@ public function addBreadcrumb() // Generate breadcrumb trail if ($intNode) { $intId = $intNode; - $objDatabase = \Database::getInstance(); + $objDatabase = Database::getInstance(); do { $objCategory = $objDatabase->prepare('SELECT * FROM tl_category WHERE id=?')->limit(1)->execute($intId); @@ -87,9 +98,9 @@ public function addBreadcrumb() // No link for the active page if ($objCategory->id == $intNode) { - $arrLinks[] = \Backend::addPageIcon($objCategory->row(), '', null, '', true).' '.$objCategory->title; + $arrLinks[] = Backend::addPageIcon($objCategory->row(), '', null, '', true) . ' ' . $objCategory->title; } else { - $arrLinks[] = \Backend::addPageIcon($objCategory->row(), '', null, '', true).' '.$objCategory->title.''; + $arrLinks[] = Backend::addPageIcon($objCategory->row(), '', null, '', true) . ' ' . $objCategory->title . ''; } // FIXME: Implement permission check @@ -113,21 +124,21 @@ public function addBreadcrumb() $GLOBALS['TL_DCA']['tl_category']['list']['sorting']['root'] = [$intNode]; // Add root link - $arrLinks[] = \Image::getHtml('pagemounts.svg').' '.$GLOBALS['TL_LANG']['MSC']['filterAll'].''; + $arrLinks[] = Image::getHtml('pagemounts.svg') . ' ' . $GLOBALS['TL_LANG']['MSC']['filterAll'] . ''; $arrLinks = array_reverse($arrLinks); // Insert breadcrumb menu $GLOBALS['TL_DCA']['tl_category']['list']['sorting']['breadcrumb'] .= '
'; } /** * Shorthand function for adding a single category field to your dca. * - * @param array $evalOverride + * @param array $evalOverride * @param string $label * * @return array @@ -136,7 +147,7 @@ public function addBreadcrumb() */ public static function getCategoryFieldDca($evalOverride = null, $label = null) { - \System::loadLanguageFile('tl_category'); + System::loadLanguageFile('tl_category'); $eval = [ 'tl_class' => 'w50 autoheight', @@ -160,8 +171,8 @@ public static function getCategoryFieldDca($evalOverride = null, $label = null) 'filter' => true, 'inputType' => 'categoryTree', 'foreignKey' => 'tl_category.title', - 'load_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'loadCategoriesFromAssociations']], - 'save_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'storeToCategoryAssociations']], + 'load_callback' => [Category::class, 'loadCategoriesFromAssociations'], + 'save_callback' => [Category::class, 'storeToCategoryAssociations'], 'eval' => $eval, 'sql' => "int(10) unsigned NOT NULL default '0'", ]; @@ -179,12 +190,12 @@ public static function getCategoryFieldDca($evalOverride = null, $label = null) * * @param string $table * @param string $name - * @param array $evalOverride + * @param array $evalOverride * @param string $label */ - public static function addSingleCategoryFieldToDca($table, $name, $evalOverride = null, $label = null) + public static function addSingleCategoryFieldToDca($table, $name, $evalOverride = null, $label = null): void { - \System::loadLanguageFile('tl_category'); + System::loadLanguageFile('tl_category'); $eval = [ 'tl_class' => 'w50 autoheight clr', @@ -208,8 +219,8 @@ public static function addSingleCategoryFieldToDca($table, $name, $evalOverride 'filter' => true, 'inputType' => 'categoryTree', 'foreignKey' => 'tl_category.title', - 'load_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'loadCategoriesFromAssociations']], - 'save_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'storeToCategoryAssociations']], + 'load_callback' => [[Category::class, 'loadCategoriesFromAssociations']], + 'save_callback' => [[Category::class, 'storeToCategoryAssociations']], 'eval' => $eval, 'sql' => "int(10) unsigned NOT NULL default '0'", ]; @@ -220,8 +231,7 @@ public static function addSingleCategoryFieldToDca($table, $name, $evalOverride } // add the deletion callback on record level - $dca['config']['ondelete_callback'] = isset($dca['config']['ondelete_callback']) && \is_array($dca['config']['ondelete_callback']) ? $dca['config']['ondelete_callback'] : []; - + $dca['config']['ondelete_callback'] = $dca['config']['ondelete_callback'] ?? []; $dca['config']['ondelete_callback']['deleteEntityCategoryAssociations'] = [static::class, 'deleteEntityCategoryAssociations']; } @@ -230,10 +240,10 @@ public static function addSingleCategoryFieldToDca($table, $name, $evalOverride * * @param string $table * @param string $name - * @param array $evalOverride + * @param array $evalOverride * @param string $label */ - public static function addMultipleCategoriesFieldToDca($table, $name, $evalOverride = null, $label = null) + public static function addMultipleCategoriesFieldToDca($table, $name, $evalOverride = null, $label = null): void { System::loadLanguageFile('tl_category'); @@ -262,10 +272,10 @@ public static function addMultipleCategoriesFieldToDca($table, $name, $evalOverr 'filter' => true, 'inputType' => 'categoryTree', 'foreignKey' => 'tl_category.title', - 'load_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'loadCategoriesFromAssociations']], + 'load_callback' => [[Category::class, 'loadCategoriesFromAssociations']], 'save_callback' => [ - ['HeimrichHannot\CategoriesBundle\Backend\Category', 'storePrimaryCategory'], - ['HeimrichHannot\CategoriesBundle\Backend\Category', 'storeToCategoryAssociations'], + [Category::class, 'storePrimaryCategory'], + [Category::class, 'storeToCategoryAssociations'], ], 'eval' => $eval, 'sql' => 'blob NULL', @@ -277,24 +287,25 @@ public static function addMultipleCategoriesFieldToDca($table, $name, $evalOverr } if ($eval['addPrimaryCategory']) { - $dca['fields'][$name.static::PRIMARY_CATEGORY_SUFFIX] = [ + $dca['fields'][$name . static::PRIMARY_CATEGORY_SUFFIX] = [ 'sql' => "int(10) unsigned NOT NULL default '0'", ]; } // add the deletion callback on record level - $dca['config']['ondelete_callback'] = isset($dca['config']['ondelete_callback']) && \is_array($dca['config']['ondelete_callback']) ? $dca['config']['ondelete_callback'] : []; - + $dca['config']['ondelete_callback'] = $dca['config']['ondelete_callback'] ?? []; $dca['config']['ondelete_callback']['deleteEntityCategoryAssociations'] = [static::class, 'deleteEntityCategoryAssociations']; } public static function deleteCachedPropertyValuesByCategoryAndProperty($value, DataContainer $dc) { - if (null !== ($instance = System::getContainer()->get('huh.utils.model')->findModelInstanceByPk($dc->table, $dc->id))) { + $utils = System::getContainer()->get(Utils::class); + + if (null !== ($instance = $utils->model()->findModelInstanceByPk($dc->table, $dc->id))) { $valueOld = $instance->{$dc->field}; if ($value != $valueOld) { - \System::getContainer()->get('huh.categories.property_cache_manager')->delete( + System::getContainer()->get('huh.categories.property_cache_manager')->delete( [ 'category=?', 'property=?', @@ -312,11 +323,13 @@ public static function deleteCachedPropertyValuesByCategoryAndProperty($value, D public static function deleteCachedPropertyValuesByCategoryAndPropertyBool($value, DataContainer $dc) { - if (null !== ($instance = System::getContainer()->get('huh.utils.model')->findModelInstanceByPk($dc->table, $dc->id))) { + $utils = System::getContainer()->get(Utils::class); + + if (null !== ($instance = $utils->model()->findModelInstanceByPk($dc->table, $dc->id))) { // compute name of the field being overridden $overrideField = lcfirst(str_replace('override', '', $dc->field)); - \System::getContainer()->get('huh.categories.property_cache_manager')->delete( + System::getContainer()->get('huh.categories.property_cache_manager')->delete( [ 'category=?', 'property=?', @@ -335,15 +348,15 @@ public function getPrimarizeOperation($row, $href, $label, $title, $icon) { $checked = ''; - if (!($field = \Input::get('category_field')) || !($table = \Input::get('category_table'))) { + if (!($field = Input::get('category_field')) || !($table = Input::get('category_table'))) { return ''; } - if (null === ($category = System::getContainer()->get('huh.utils.model')->findModelInstanceByPk('tl_category', $row['id']))) { + if (null === ($category = $this->utils->model()->findModelInstanceByPk('tl_category', $row['id']))) { return ''; } - \Controller::loadDataContainer($table); + Controller::loadDataContainer($table); $dcaEval = $GLOBALS['TL_DCA'][$table]['fields'][$field]['eval']; @@ -351,37 +364,37 @@ public function getPrimarizeOperation($row, $href, $label, $title, $icon) return ''; } - $primaryCategory = System::getContainer()->get('huh.request')->getGet('primaryCategory'); + $primaryCategory = $this->request->get('primaryCategory'); $isParentCategory = System::getContainer()->get('huh.categories.manager')->hasChildren($row['id']); $checkAsDefaultPrimaryCategory = (!$isParentCategory || !$dcaEval['parentsUnselectable'] || $category->selectable) && !$primaryCategory && $dcaEval['forcePrimaryCategory'] && !static::$defaultPrimaryCategorySet; - if ($checkAsDefaultPrimaryCategory || $row['id'] === \Input::get('primaryCategory')) { + if ($checkAsDefaultPrimaryCategory || $row['id'] === Input::get('primaryCategory')) { static::$defaultPrimaryCategorySet = true; $checked = ' checked'; } - return ''.''; + return '' . ''; } /** * Automatically add overridable fields to the dca (including palettes, ...). */ - public static function addOverridableFieldSelectors() + public static function addOverridableFieldSelectors(): void { $dca = &$GLOBALS['TL_DCA']['tl_category']; // add overridable fields foreach ($dca['fields'] as $field => $data) { if ($data['eval']['overridable'] ?? false) { - $overrideFieldName = 'override'.ucfirst($field); + $overrideFieldName = 'override' . ucfirst((string)$field); // boolean field $dca['fields'][$overrideFieldName] = [ 'label' => &$GLOBALS['TL_LANG']['tl_category'][$overrideFieldName], 'exclude' => true, 'inputType' => 'checkbox', - 'save_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'deleteCachedPropertyValuesByCategoryAndPropertyBool']], + 'save_callback' => [[Category::class, 'deleteCachedPropertyValuesByCategoryAndPropertyBool']], 'eval' => ['tl_class' => 'w50', 'submitOnChange' => true], 'sql' => "char(1) NOT NULL default ''", ]; @@ -395,18 +408,18 @@ public static function addOverridableFieldSelectors() } } - public function modifyDca(DataContainer $dc) + public function modifyDca(DataContainer $dc): void { - $modelUtil = System::getContainer()->get('huh.utils.model'); + $modelUtil = $this->utils->model(); - $category = $modelUtil->findModelInstanceByPk('tl_category', $dc->id); + $category = $modelUtil->findModelInstanceByPk('tl_category', $dc->id ?? 0); $dca = &$GLOBALS['TL_DCA']['tl_category']; if ($category) { if ($category->pid) { foreach ($dca['fields'] as $field => $data) { if (isset($data['eval']['overridable']) && $data['eval']['overridable']) { - $dca['palettes']['default'] = str_replace($field, 'override'.ucfirst($field), $dca['palettes']['default']); + $dca['palettes']['default'] = str_replace($field, 'override' . ucfirst((string)$field), $dca['palettes']['default']); } } } @@ -418,23 +431,22 @@ public function modifyDca(DataContainer $dc) // hide primarize operation if not in picker context // show only in picker - if (!\Input::get('picker')) { + if (!Input::get('picker')) { unset($dca['list']['operations']['primarize']); } } - public function deleteCategoryAssociations(DataContainer $dc, $undoId) + public function deleteCategoryAssociations(DataContainer $dc, $undoId): void { if (!$dc->id) { return; } - System::getContainer()->get('huh.utils.database')->delete( - 'tl_category_association', 'tl_category_association.category=?', [$dc->id] - ); + Database::getInstance()->prepare('DELETE FROM tl_category_association WHERE category=?') + ->execute($dc->id); } - public function deleteEntityCategoryAssociations(DataContainer $dc, $undoId) + public function deleteEntityCategoryAssociations(DataContainer $dc, $undoId): void { $table = $dc->table; @@ -466,10 +478,9 @@ public function deleteEntityCategoryAssociations(DataContainer $dc, $undoId) */ public function storePrimaryCategory($value, DataContainer $dc) { - if ($primaryCategory = \Input::post($dc->field.static::PRIMARY_CATEGORY_SUFFIX)) { - System::getContainer()->get('huh.utils.database')->update($dc->table, [ - $dc->field.static::PRIMARY_CATEGORY_SUFFIX => $primaryCategory, - ], "$dc->table.id=?", [$dc->id]); + if ($primaryCategory = Input::post($dc->field . static::PRIMARY_CATEGORY_SUFFIX)) { + Database::getInstance()->prepare("UPDATE $dc->table SET " . $dc->field . static::PRIMARY_CATEGORY_SUFFIX . "=? WHERE id=?") + ->execute($primaryCategory, $dc->id); } return $value; @@ -480,7 +491,7 @@ public function storePrimaryCategory($value, DataContainer $dc) */ public function storeToCategoryAssociations($value, DataContainer $dc) { - $manager = \System::getContainer()->get('huh.categories.manager'); + $manager = System::getContainer()->get('huh.categories.manager'); if ($value) { switch ($GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['fieldType']) { @@ -539,13 +550,15 @@ public function loadCategoriesFromAssociations($value, DataContainer $dc) /** * @param string $varValue * + * @return string * @throws \Exception * - * @return string */ public static function generateAlias($varValue, DataContainer $dc) { - if (null === ($category = System::getContainer()->get('huh.utils.model')->findModelInstanceByPk('tl_category', $dc->id))) { + $utils = System::getContainer()->get(Utils::class); + + if (null === ($category = $utils->model()->findModelInstanceByPk('tl_category', $dc->id))) { return ''; } @@ -554,9 +567,9 @@ public static function generateAlias($varValue, DataContainer $dc) return System::getContainer()->get('huh.utils.dca')->generateAlias($varValue, $dc->id, 'tl_category', $title); } - public function checkPermission() + public function checkPermission(): void { - $user = \BackendUser::getInstance(); + $user = BackendUser::getInstance(); if (!$user->isAdmin && !$user->hasAccess('manage', 'categories')) { Controller::redirect('contao/main.php?act=error'); @@ -592,12 +605,20 @@ public function pasteCategory(DataContainer $dc, $row, $table, $cr, $arrClipboar $imagePasteInto = Image::getHtml('pasteinto.svg', sprintf($GLOBALS['TL_LANG'][$table]['pasteinto'][1], $row['id'])); if ($row['id'] > 0) { - $return = $disablePA ? Image::getHtml('pasteafter_.svg').' ' : ''.$imagePasteAfter.' '; - } - - return $return.($disablePI ? Image::getHtml('pasteinto_.svg').' ' : ''.$imagePasteInto.' '); + $return = $disablePA ? Image::getHtml('pasteafter_.svg') . ' ' : '' . $imagePasteAfter . ' '; + } + + return $return . ($disablePI ? Image::getHtml('pasteinto_.svg') . ' ' : '' . $imagePasteInto . ' '); } /** @@ -611,23 +632,23 @@ public function pasteCategory(DataContainer $dc, $row, $table, $cr, $arrClipboar public function generateLabel($row, $label, $dca, $attributes) { if (isset($row['frontendTitle']) && $row['frontendTitle']) { - $label .= '['.$row['frontendTitle'].']'; + $label .= '[' . $row['frontendTitle'] . ']'; } // add category breadcrumb link - $label = ' '.$label.''; + $label = ' ' . $label . ''; - if ('edit' !== System::getContainer()->get('huh.request')->getGet('act') && null !== (System::getContainer())->get('huh.categories.config_manager')->findBy(['tl_category_config.pid=?'], [$row['id']])) { - $label .= '– '.$GLOBALS['TL_LANG']['MSC']['categoriesBundle']['configsAvailable'].''; + if ('edit' !== $this->request->query->get('act') && null !== (System::getContainer())->get('huh.categories.config_manager')->findBy(['tl_category_config.pid=?'], [$row['id']])) { + $label .= '– ' . $GLOBALS['TL_LANG']['MSC']['categoriesBundle']['configsAvailable'] . ''; } - return Image::getHtml('iconPLAIN.svg', '', $attributes).' '.$label; + return Image::getHtml('iconPLAIN.svg', '', $attributes) . ' ' . $label; } /** * Shorthand function for adding a category filter list field to your dca. * - * @param array $evalOverride + * @param array $evalOverride * @param string $label * * @return array diff --git a/src/Backend/CategoryConfig.php b/src/Backend/CategoryConfig.php index a96e923e..c90b5711 100644 --- a/src/Backend/CategoryConfig.php +++ b/src/Backend/CategoryConfig.php @@ -8,6 +8,7 @@ namespace HeimrichHannot\CategoriesBundle\Backend; +use Contao\System; use Contao\Backend; use Contao\DataContainer; use HeimrichHannot\CategoriesBundle\Model\CategoryContextModel; @@ -29,11 +30,11 @@ public static function getContextsAsOptions() public static function deleteCachedPropertyValuesByCategoryAndContext($value, DataContainer $dc) { - if (null !== ($config = \System::getContainer()->get('huh.categories.config_manager')->findOneBy('id', $dc->id))) { + if (null !== ($config = System::getContainer()->get('huh.categories.config_manager')->findOneBy('id', $dc->id))) { $valueOld = $config->context; if ($value != $valueOld) { - \System::getContainer()->get('huh.categories.property_cache_manager')->delete( + System::getContainer()->get('huh.categories.property_cache_manager')->delete( [ 'category=?', '(context=? OR context=?)', diff --git a/src/Backend/CategoryContext.php b/src/Backend/CategoryContext.php index d419d726..c9f3a678 100644 --- a/src/Backend/CategoryContext.php +++ b/src/Backend/CategoryContext.php @@ -13,12 +13,13 @@ use Contao\DataContainer; use Contao\StringUtil; use Contao\System; +use HeimrichHannot\UtilsBundle\Util\Utils; class CategoryContext extends Backend { const CATEGORY_FIELD_CONTEXT_MAPPING_FIELD = 'categoryFieldContextMapping'; - public static function addFieldContextMappingFieldToDca($table, $categoryFieldTable, $label = null) + public static function addFieldContextMappingFieldToDca($table, $categoryFieldTable, $label = null): void { System::loadLanguageFile('tl_category_context'); Controller::loadDataContainer($table); @@ -27,7 +28,7 @@ public static function addFieldContextMappingFieldToDca($table, $categoryFieldTa 'label' => &$GLOBALS['TL_LANG']['tl_category_context'][static::CATEGORY_FIELD_CONTEXT_MAPPING_FIELD], 'exclude' => true, 'inputType' => 'multiColumnEditor', - 'save_callback' => [['HeimrichHannot\CategoriesBundle\Backend\CategoryContext', 'deleteCachedPropertyValuesByFieldOrContext']], + 'save_callback' => [CategoryContext::deleteCachedPropertyValuesByFieldOrContext(...)], 'eval' => [ 'tl_class' => 'long clr', 'multiColumnEditor' => [ @@ -42,7 +43,7 @@ public static function addFieldContextMappingFieldToDca($table, $categoryFieldTa 'context' => [ 'label' => &$GLOBALS['TL_LANG']['tl_category_context']['context'], 'inputType' => 'select', - 'options_callback' => ['HeimrichHannot\CategoriesBundle\Backend\CategoryConfig', 'getContextsAsOptions'], + 'options_callback' => CategoryConfig::getContextsAsOptions(...), 'eval' => ['mandatory' => true, 'includeBlankOption' => true, 'groupStyle' => 'width: 200px'], ], ], @@ -93,7 +94,7 @@ public static function deleteCachedPropertyValuesByFieldOrContext($value, DataCo public static function deleteCachedPropertyValuesByContext($value, DataContainer $dc) { - if (System::getContainer()->get('huh.utils.model')->hasValueChanged($value, $dc)) { + if (System::getContainer()->get(Utils::class)->model()->hasValueChanged($value, $dc)) { $fields = []; $contexts = []; diff --git a/src/CategoriesBundle.php b/src/CategoriesBundle.php index 8ba450b4..e513a260 100644 --- a/src/CategoriesBundle.php +++ b/src/CategoriesBundle.php @@ -8,16 +8,24 @@ namespace HeimrichHannot\CategoriesBundle; -use HeimrichHannot\CategoriesBundle\DependencyInjection\CategoriesExtension; -use Symfony\Component\HttpKernel\Bundle\Bundle; +use Composer\InstalledVersions; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; +use Symfony\Component\HttpKernel\Bundle\AbstractBundle; -class CategoriesBundle extends Bundle +class CategoriesBundle extends AbstractBundle { - /** - * {@inheritdoc} - */ - public function getContainerExtension() + public function getPath(): string { - return new CategoriesExtension(); + return \dirname(__DIR__); + } + + public function loadExtension(array $config, ContainerConfigurator $configurator, ContainerBuilder $builder): void + { + $configurator->import('../config/services.yaml'); + + if (InstalledVersions::isInstalled('heimrichhannot/contao-flare-bundle')) { + $configurator->import('../config/flare.yaml'); + } } } diff --git a/src/Command/NewsCategoriesMigrationCommand.php b/src/Command/NewsCategoriesMigrationCommand.php index f5fda30d..cdf5e5dc 100644 --- a/src/Command/NewsCategoriesMigrationCommand.php +++ b/src/Command/NewsCategoriesMigrationCommand.php @@ -8,8 +8,8 @@ namespace HeimrichHannot\CategoriesBundle\Command; +use Contao\CoreBundle\Framework\ContaoFramework; use Contao\CoreBundle\Command\AbstractLockedCommand; -use Contao\CoreBundle\Framework\ContaoFrameworkInterface; use Contao\Database; use Doctrine\DBAL\Connection; use Doctrine\DBAL\Query\QueryBuilder; @@ -63,15 +63,10 @@ class NewsCategoriesMigrationCommand extends AbstractLockedCommand * @var bool */ protected $dryRun = false; - /** - * @var ContaoFrameworkInterface - */ - private $framework; - public function __construct(ContaoFrameworkInterface $framework) + public function __construct(private readonly ContaoFramework $framework) { parent::__construct(); - $this->framework = $framework; } /** diff --git a/src/ContaoManager/Plugin.php b/src/ContaoManager/Plugin.php index b15bf41b..6adc28a0 100644 --- a/src/ContaoManager/Plugin.php +++ b/src/ContaoManager/Plugin.php @@ -12,12 +12,9 @@ use Contao\ManagerPlugin\Bundle\BundlePluginInterface; use Contao\ManagerPlugin\Bundle\Config\BundleConfig; use Contao\ManagerPlugin\Bundle\Parser\ParserInterface; -use Contao\ManagerPlugin\Config\ContainerBuilder; -use Contao\ManagerPlugin\Config\ExtensionPluginInterface; use HeimrichHannot\CategoriesBundle\CategoriesBundle; -use HeimrichHannot\UtilsBundle\Container\ContainerUtil; -class Plugin implements BundlePluginInterface, ExtensionPluginInterface +class Plugin implements BundlePluginInterface { /** * {@inheritdoc} @@ -33,21 +30,4 @@ public function getBundles(ParserInterface $parser) ]), ]; } - - /** - * Allows a plugin to override extension configuration. - * - * @param string $extensionName - * - * @return array - */ - public function getExtensionConfig($extensionName, array $extensionConfigs, ContainerBuilder $container) - { - return ContainerUtil::mergeConfigFile( - 'huh_filter', - $extensionName, - $extensionConfigs, - __DIR__.'/../Resources/config/huh_filter.yml' - ); - } } diff --git a/src/DataContainer/NewsContainer.php b/src/DataContainer/NewsContainer.php deleted file mode 100644 index 56da52cf..00000000 --- a/src/DataContainer/NewsContainer.php +++ /dev/null @@ -1,285 +0,0 @@ -stringUtil = $stringUtil; - $this->modelUtil = $modelUtil; - } - - public function generateFeeds() - { - if (!class_exists('Contao\NewsFeedModel')) { - return; - } - - $objFeed = \Contao\NewsFeedModel::findAll(); - - if (null !== $objFeed) { - while ($objFeed->next()) { - $objFeed->feedName = $objFeed->alias ?: 'news'.$objFeed->id; - $this->generateFiles($objFeed->row()); - System::log('Generated news feed "'.$objFeed->feedName.'.xml"', __METHOD__, TL_CRON); - } - } - } - - /** - * Adapted from \NewsCategories\News. - * - * @param $arrFeed - * - * @throws \Exception - */ - public function generateFiles($arrFeed) - { - $arrArchives = StringUtil::deserialize($arrFeed['archives']); - - if (!\is_array($arrArchives) || empty($arrArchives)) { - return; - } - - $arrCategories = StringUtil::deserialize($arrFeed['huhCategories']); - - if (!\is_array($arrCategories) || empty($arrCategories)) { - return; - } - - $arrFields = StringUtil::deserialize($arrFeed['huhCategoriesFields']); - - if (!\is_array($arrFields) || empty($arrFields)) { - return; - } - - $arrFields = array_map(function ($val) { - return '"'.$val.'"'; - }, $arrFields); - - $strType = ('atom' == $arrFeed['format']) ? 'generateAtom' : 'generateRss'; - $strLink = $arrFeed['feedBase'] ?: \Environment::get('base'); - $strFile = $arrFeed['feedName']; - - $objFeed = new \Feed($strFile); - $objFeed->link = $strLink; - $objFeed->title = $arrFeed['title']; - $objFeed->description = $arrFeed['description']; - $objFeed->language = $arrFeed['language']; - $objFeed->published = $arrFeed['tstamp']; - - $db = Database::getInstance(); - - // Get the items - $time = \Date::floorToMinute(); - - $query = 'SELECT n.* FROM tl_news n INNER JOIN tl_category_association a ON n.id = a.entity WHERE a.categoryField IN ('.implode(',', $arrFields).')'. - ' AND a.category IN ('.implode(',', $arrCategories).') AND n.pid IN ('.implode(',', $arrArchives).')'. - " AND (n.start='' OR n.start<='$time') AND (n.stop='' OR n.stop>'".($time + 60)."') AND n.published='1' GROUP BY n.id ORDER BY date DESC"; - - if ($arrFeed['maxItems'] > 0) { - $query .= ' LIMIT '.$arrFeed['maxItems']; - - $objArticle = $db->execute($query); - } else { - $objArticle = $db->execute($query); - } - - // Parse the items - if ($objArticle->numRows > 0) { - $arrUrls = []; - - while ($objArticle->next()) { - if (null === ($archive = $this->modelUtil->findModelInstanceByPk('tl_news_archive', $objArticle->pid))) { - continue; - } - - $jumpTo = $archive->jumpTo; - - // No jumpTo page set (see #4784) - if (!$jumpTo) { - continue; - } - - // Get the jumpTo URL - if (!isset($arrUrls[$jumpTo])) { - $objParent = \PageModel::findWithDetails($jumpTo); - - // A jumpTo page is set but does no longer exist (see #5781) - if (null === $objParent) { - $arrUrls[$jumpTo] = false; - } else { - $arrUrls[$jumpTo] = $objParent->getAbsoluteUrl((\Config::get('useAutoItem') && !\Config::get('disableAlias')) ? '/%s' : '/items/%s'); - } - } - - // Skip the event if it requires a jumpTo URL but there is none - if (false === $arrUrls[$jumpTo] && 'default' == $objArticle->source) { - continue; - } - - // Get the categories - if ($arrFeed['categories_show']) { - $arrCategories = []; - $ids = StringUtil::deserialize($objArticle->categories, true); - - if (null !== ($objCategories = $this->modelUtil->findMultipleModelInstancesByIds('tl_category', $ids))) { - $arrCategories = $objCategories->fetchEach('title'); - } - } - - $strUrl = $arrUrls[$jumpTo]; - $objItem = new \FeedItem(); - - // Add the categories to the title - if ('title' == $arrFeed['categories_show']) { - $objItem->title = sprintf('[%s] %s', implode(', ', $arrCategories), $objArticle->headline); - } else { - $objItem->title = $objArticle->headline; - } - - $objItem->link = $this->getLink($objArticle, $strUrl); - $objItem->published = $objArticle->date; - $objItem->author = $objArticle->authorName; - - // Prepare the description - if ('source_text' == $arrFeed['source']) { - $strDescription = ''; - $objElement = \ContentModel::findPublishedByPidAndTable($objArticle->id, 'tl_news'); - - if (null !== $objElement) { - // Overwrite the request (see #7756) - $strRequest = \Environment::get('request'); - \Environment::set('request', $objItem->link); - - while ($objElement->next()) { - $strDescription .= Controller::getContentElement($objElement->current()); - } - - \Environment::set('request', $strRequest); - } - } else { - $strDescription = $objArticle->teaser; - } - - // Add the categories to the description - if ('text_before' == $arrFeed['categories_show'] || 'text_after' == $arrFeed['categories_show']) { - $strCategories = ''.$GLOBALS['TL_LANG']['MSC']['newsCategories'].' '.implode(', ', $arrCategories).'
'; - - if ('text_before' == $arrFeed['categories_show']) { - $strDescription = $strCategories.$strDescription; - } else { - $strDescription .= $strCategories; - } - } - - $strDescription = $this->stringUtil->replaceInsertTags($strDescription, false); - $objItem->description = Controller::convertRelativeUrls($strDescription, $strLink); - - // Add the article image as enclosure - if ($objArticle->addImage) { - $objFile = \FilesModel::findByUuid($objArticle->singleSRC); - - if (null !== $objFile) { - $objItem->addEnclosure($objFile->path, $strLink); - } - } - - // Enclosures - if ($objArticle->addEnclosure) { - $arrEnclosure = StringUtil::deserialize($objArticle->enclosure, true); - - if (\is_array($arrEnclosure)) { - $objFile = \FilesModel::findMultipleByUuids($arrEnclosure); - - if (null !== $objFile) { - while ($objFile->next()) { - $objItem->addEnclosure($objFile->path, $strLink); - } - } - } - } - - $objFeed->addItem($objItem); - } - } - - // Create the file - if (class_exists('Contao\CoreBundle\ContaoCoreBundle')) { - \File::putContent('web/share/'.$strFile.'.xml', $this->stringUtil->replaceInsertTags($objFeed->$strType(), false)); - } else { - \File::putContent('share/'.$strFile.'.xml', $this->stringUtil->replaceInsertTags($objFeed->$strType(), false)); - } - } - - /** - * Taken from \Contao\News. - * - * @param $objItem - * @param $strUrl - * @param string $strBase - * - * @throws \Exception - * - * @return string|string[]|null - */ - protected function getLink($objItem, $strUrl, $strBase = '') - { - switch ($objItem->source) { - // Link to an external page - case 'external': - return $objItem->url; - - break; - - // Link to an internal page - case 'internal': - if (($objTarget = $objItem->getRelated('jumpTo')) instanceof PageModel) { - /* @var PageModel $objTarget */ - return $objTarget->getAbsoluteUrl(); - } - - break; - - // Link to an article - case 'article': - if (null !== ($objArticle = \ArticleModel::findByPk($objItem->articleId, ['eager' => true])) && ($objPid = $objArticle->getRelated('pid')) instanceof PageModel) { - /* @var PageModel $objPid */ - return ampersand($objPid->getAbsoluteUrl('/articles/'.($objArticle->alias ?: $objArticle->id))); - } - - break; - } - - // Backwards compatibility (see #8329) - if ('' != $strBase && !preg_match('#^https?://#', $strUrl)) { - $strUrl = $strBase.$strUrl; - } - - // Link to the default page - return sprintf(preg_replace('/%(?!s)/', '%%', $strUrl), ($objItem->alias ?: $objItem->id)); - } -} diff --git a/src/DataContainer/NewsFeedContainer.php b/src/DataContainer/NewsFeedContainer.php deleted file mode 100644 index 14ea1180..00000000 --- a/src/DataContainer/NewsFeedContainer.php +++ /dev/null @@ -1,27 +0,0 @@ -newsContainer = $newsContainer; - } - - public function generateFeed() - { - $this->newsContainer->generateFeeds(); - } -} diff --git a/src/DependencyInjection/CategoriesExtension.php b/src/DependencyInjection/CategoriesExtension.php deleted file mode 100644 index cd43db75..00000000 --- a/src/DependencyInjection/CategoriesExtension.php +++ /dev/null @@ -1,28 +0,0 @@ -load('services.yml'); - $loader->load('datacontainers.yml'); - } -} diff --git a/src/EventListener/DateAddedListener.php b/src/EventListener/DateAddedListener.php new file mode 100644 index 00000000..2e2433a9 --- /dev/null +++ b/src/EventListener/DateAddedListener.php @@ -0,0 +1,62 @@ +id || !$dc->table) { + return; + } + + // Check if dateAdded is already set + $result = Database::getInstance() + ->prepare("SELECT dateAdded FROM {$dc->table} WHERE id=?") + ->execute($dc->id); + + // Only set dateAdded if it's 0 (not set yet) + if ($result->numRows && $result->dateAdded == 0) { + Database::getInstance() + ->prepare("UPDATE {$dc->table} SET dateAdded=? WHERE id=?") + ->execute(time(), $dc->id); + } + } + + public function setDateAddedOnCopy(int $insertId, DataContainer $dc): void + { + if (!$insertId || !$dc->table) { + return; + } + + // When copying, always set a new dateAdded timestamp + Database::getInstance() + ->prepare("UPDATE {$dc->table} SET dateAdded=? WHERE id=?") + ->execute(time(), $insertId); + } +} + diff --git a/src/EventListener/DcMultilingualListener.php b/src/EventListener/DcMultilingualListener.php new file mode 100644 index 00000000..f1b3970c --- /dev/null +++ b/src/EventListener/DcMultilingualListener.php @@ -0,0 +1,49 @@ +request = $request; - $this->utils = $utils; - $this->categoryManager = $categoryManager; + return $this->requestStack->getCurrentRequest(); } public function adjustCategoryTree($buffer, $template) { - if (!$this->request->getGet('picker') || !($field = $this->request->getGet('category_field')) || !($table = $this->request->getGet('category_table'))) { + if (!$this->getRequest()?->query->get('picker') || !($field = $this->getRequest()?->query->get('category_field')) || !($table = $this->getRequest()?->query->get('category_table'))) { return $buffer; } @@ -57,7 +55,7 @@ public function adjustCategoryTree($buffer, $template) if ($dcaEval['parentsUnselectable'] ?? false) { $selectedableCategories = []; - if (null !== ($categories = System::getContainer()->get('huh.utils.model')->findModelInstancesBy('tl_category', ['tl_category.selectable=?'], [true]))) { + if (null !== ($categories = $this->utils->model()->findModelInstancesBy('tl_category', ['tl_category.selectable=?'], [true]))) { $selectedableCategories = $categories->fetchEach('id'); } @@ -75,24 +73,24 @@ public function adjustCategoryTree($buffer, $template) return $buffer; } - public function reloadCategoryTree($action, DataContainer $dc) + public function reloadCategoryTree($action, DataContainer $dc): void { switch ($action) { case 'reloadCategoryTree': - $id = $this->request->getGet('id'); - $field = $dc->inputName = $this->request->getPost('name'); + $id = $this->getRequest()?->query->get('id'); + $field = $dc->inputName = $this->getRequest()?->request->get('name'); // Handle the keys in "edit multiple" mode - if ('editAll' === $this->request->getGet('act')) { - $id = preg_replace('/.*_([0-9a-zA-Z]+)$/', '$1', $field); - $field = preg_replace('/(.*)_[0-9a-zA-Z]+$/', '$1', $field); + if ('editAll' === $this->getRequest()?->query->get('act')) { + $id = preg_replace('/.*_([0-9a-zA-Z]+)$/', '$1', (string) $field); + $field = preg_replace('/(.*)_[0-9a-zA-Z]+$/', '$1', (string) $field); } $dc->field = $field; // The field does not exist if (!isset($GLOBALS['TL_DCA'][$dc->table]['fields'][$field])) { - System::getContainer()->get('monolog.logger.contao')->log(LogLevel::ERROR, 'Field "'.$field.'" does not exist in DCA "'.$dc->table.'"', ['contao' => new ContaoContext(__METHOD__, TL_ERROR)]); + System::getContainer()->get('monolog.logger.contao')->log(LogLevel::ERROR, 'Field "'.$field.'" does not exist in DCA "'.$dc->table.'"', ['contao' => new ContaoContext(__METHOD__, ContaoContext::ERROR)]); throw new BadRequestHttpException('Bad request'); } @@ -101,7 +99,7 @@ public function reloadCategoryTree($action, DataContainer $dc) $value = null; // Load the value - if ('overrideAll' !== $this->request->getGet('act')) { + if ('overrideAll' !== $this->getRequest()?->query->get('act')) { if ('File' === $GLOBALS['TL_DCA'][$dc->table]['config']['dataContainer']) { $value = Config::get($field); } elseif ($id > 0 && Database::getInstance()->tableExists($dc->table)) { @@ -109,7 +107,7 @@ public function reloadCategoryTree($action, DataContainer $dc) // The record does not exist if ($row->numRows < 1) { - System::getContainer()->get('monolog.logger.contao')->log(LogLevel::ERROR, 'A record with the ID "'.$id.'" does not exist in table "'.$dc->table.'"', ['contao' => new ContaoContext(__METHOD__, TL_ERROR)]); + System::getContainer()->get('monolog.logger.contao')->log(LogLevel::ERROR, 'A record with the ID "'.$id.'" does not exist in table "'.$dc->table.'"', ['contao' => new ContaoContext(__METHOD__, ContaoContext::ERROR)]); throw new BadRequestHttpException('Bad request'); } @@ -132,7 +130,7 @@ public function reloadCategoryTree($action, DataContainer $dc) } // Set the new value - $value = $this->request->getPost('value', true); + $value = $this->getRequest()?->request->get('value'); $key = 'categoryTree'; // Convert the selected values @@ -159,7 +157,7 @@ protected function hideUnselectableCheckboxes(string $buffer, array $selectableC $objNode->filter('.tree_view input[name="picker[]"]')->each(function ($objElement) use ($selectableCategories) { $categoryId = $objElement->getAttribute('value'); - if (\System::getContainer()->get('huh.categories.manager')->hasChildren($categoryId) && !\in_array($categoryId, $selectableCategories)) { + if (System::getContainer()->get('huh.categories.manager')->hasChildren($categoryId) && !\in_array($categoryId, $selectableCategories)) { $objElement->replaceWith(''); } }); @@ -199,8 +197,13 @@ protected static function replaceOldBePaths($strContext) { $router = System::getContainer()->get('router'); - $generate = function ($route) use ($router) { - return substr($router->generate($route), \strlen(Environment::get('path')) + 1); + $generate = function($route) use ($router) { + try { + return substr((string) $router->generate($route), \strlen((string) Environment::get('path')) + 1); + } catch (\Exception $e) { + // Fallback für nicht existierende Routen + return $route; + } }; $arrMapper = [ @@ -217,5 +220,6 @@ protected static function replaceOldBePaths($strContext) ]; return str_replace(array_keys($arrMapper), array_values($arrMapper), $strContext); + } } diff --git a/src/EventListener/LoadDataContainerListener.php b/src/EventListener/LoadDataContainerListener.php deleted file mode 100644 index dbdbdc95..00000000 --- a/src/EventListener/LoadDataContainerListener.php +++ /dev/null @@ -1,64 +0,0 @@ -prepareTlFilterConfigElementTable(); - } - } - - protected function prepareTlFilterConfigElementTable() - { - if (!class_exists('HeimrichHannot\FilterBundle\HeimrichHannotContaoFilterBundle')) { - return; - } - - System::loadLanguageFile('tl_filter_config_element'); - - $dca = &$GLOBALS['TL_DCA']['tl_filter_config_element']; - - $dca['palettes'][CategoryChoiceType::TYPE] = str_replace( - 'field,', - 'field,parentCategories,', - $dca['palettes'][ChoiceType::TYPE] - ); - $dca['palettes'][ParentCategoryChoiceType::TYPE] = - '{general_legend},title,type; - {config_legend},field,parentCategories; - {publish_legend},published;'; - - Category::addMultipleCategoriesFieldToDca( - 'tl_filter_config_element', - 'parentCategories', - [ - 'addPrimaryCategory' => false, - 'forcePrimaryCategory' => false, - 'parentsUnselectable' => false, - 'mandatory' => false, - 'tl_class' => 'autoheight clr', - ], - $GLOBALS['TL_LANG']['tl_filter_config_element']['parentCategories'] - ); - } -} diff --git a/src/Filter/Choice/CategoriesChoice.php b/src/Filter/Choice/CategoriesChoice.php deleted file mode 100644 index d51120d8..00000000 --- a/src/Filter/Choice/CategoriesChoice.php +++ /dev/null @@ -1,59 +0,0 @@ -categoryManager = $categoryManager; - } - - /** - * Get category widget options. - * - * @return array - */ - protected function getCategoryWidgetOptions(FilterConfigElementModel $element, array $filter, array $dca) - { - $options = []; - $parentCategories = StringUtil::deserialize($element->parentCategories, true); - - if (!$categories = $this->categoryManager->findByCategoryFieldAndTableAndPids( - $element->field, - $filter['dataContainer'], - $parentCategories - ) - ) { - return $options; - } - - $isFrontend = System::getContainer()->get('huh.utils.container')->isFrontend(); - - /** @var \HeimrichHannot\CategoriesBundle\Model\CategoryModel $category */ - foreach ($categories as $category) { - $options[] = ['label' => ($category->frontendTitle ?: $category->title).($isFrontend ? '' : ' (ID '.$category->id.')'), 'value' => $category->id]; - } - - return $options; - } -} diff --git a/src/Filter/Type/CategoryChoiceType.php b/src/Filter/Type/CategoryChoiceType.php deleted file mode 100644 index f426304c..00000000 --- a/src/Filter/Type/CategoryChoiceType.php +++ /dev/null @@ -1,32 +0,0 @@ -fieldOptions = System::getContainer()->get('huh.categories.filter.choice'); - } - - public function getChoices(FilterConfigElementModel $element) - { - return $this->fieldOptions->getCachedChoices(['element' => $element, 'filter' => $this->config->getFilter()]); - } -} diff --git a/src/Filter/Type/ParentCategoryChoiceType.php b/src/Filter/Type/ParentCategoryChoiceType.php deleted file mode 100644 index ce7c679e..00000000 --- a/src/Filter/Type/ParentCategoryChoiceType.php +++ /dev/null @@ -1,73 +0,0 @@ -parentCategories, true); - /** @var CategoryModel[]|Collection|null $parentCategories */ - $parentCategories = System::getContainer()->get('huh.utils.model')->findMultipleModelInstancesByIds('tl_category', $parentCategoryIds); - - if (!$parentCategories) { - return; - } - $childCategories = []; - - foreach ($parentCategories as $category) { - $descendants = $category->getDescendantCategories(); - - if (!$descendants) { - continue; - } - $childCategories = array_merge($childCategories, $descendants->getModels()); - } - $childCategoryIds = (new Collection($childCategories, 'tl_category'))->fetchEach('id'); - - $table = $this->config->getFilter()['dataContainer']; - $field = &$GLOBALS['TL_DCA'][$table]['fields'][$element->field]; - - if (isset($field['eval']['multiple']) && true === $field['eval']['multiple']) { - $whereCondition = System::getContainer()->get('huh.utils.database') - ->createWhereForSerializedBlob($element->field, $childCategoryIds, DatabaseUtil::SQL_CONDITION_OR, ['inline_values' => true]); - - $builder->andWhere($whereCondition[0]); - } else { - $builder->andWhere(System::getContainer()->get('huh.utils.database') - ->composeWhereForQueryBuilder($builder, $element->field, DatabaseUtil::OPERATOR_IN, $field, $childCategoryIds)); - } - } - - public function buildForm(FilterConfigElementModel $element, FormBuilderInterface $builder) - { - } - - public function getDefaultOperator(FilterConfigElementModel $element) - { - return DatabaseUtil::OPERATOR_LIKE; - } - - public function getDefaultName(FilterConfigElementModel $element) - { - return null; - } -} diff --git a/src/Flare/FilterElement/ParentCategoryFilterElement.php b/src/Flare/FilterElement/ParentCategoryFilterElement.php new file mode 100644 index 00000000..10341337 --- /dev/null +++ b/src/Flare/FilterElement/ParentCategoryFilterElement.php @@ -0,0 +1,64 @@ +getSubmittedData()) { + return; + } + + if (!$targetField = $context->getFilterModel()->fieldGeneric) { + $qb->abort(); + } + + $colField = $qb->column($targetField); + + $qb->where($qb->expr()->like($colField, ':category')) + ->setParameter('category', '%"' . $context->getSubmittedData() . '"%'); + } + + public function getFormTypeOptions(FilterContext $context, ChoicesBuilder $choices): array + { + $options = $this->defaultFormTypeOptions( + $context, + ['placeholder' => true] + ); + $options['choices'] = []; + + $categoryIds = StringUtil::deserialize($context->getFilterModel()->filterCategory, true); + + if (empty($categoryIds)) { + return $options; + } + + $categories = CategoryModel::findByPids( + $categoryIds, + ['order' => 'title ASC'] + ); + + while ($categories->next()) { + $options['choices'][$categories->title] = (string) $categories->id; + } + + return $options; + } +} \ No newline at end of file diff --git a/src/Manager/CategoryConfigManager.php b/src/Manager/CategoryConfigManager.php index 2852e68c..1aef3011 100644 --- a/src/Manager/CategoryConfigManager.php +++ b/src/Manager/CategoryConfigManager.php @@ -8,20 +8,21 @@ namespace HeimrichHannot\CategoriesBundle\Manager; -use Contao\CoreBundle\Framework\ContaoFrameworkInterface; +use Contao\CoreBundle\Framework\ContaoFramework; +use Contao\Model\Collection; use HeimrichHannot\CategoriesBundle\Model\CategoryConfigModel; class CategoryConfigManager { /** - * @var ContaoFrameworkInterface + * @var ContaoFramework */ protected $framework; /** * Constructor. */ - public function __construct(ContaoFrameworkInterface $framework) + public function __construct(ContaoFramework $framework) { $this->framework = $framework; } @@ -32,7 +33,7 @@ public function __construct(ContaoFrameworkInterface $framework) * @param mixed $column * @param mixed $value * - * @return \Contao\Model\Collection|CategoryConfigModel|null + * @return Collection|CategoryConfigModel|null */ public function findBy($column, $value, array $options = []) { diff --git a/src/Manager/CategoryContextManager.php b/src/Manager/CategoryContextManager.php index 3a63d3bf..5d926b42 100644 --- a/src/Manager/CategoryContextManager.php +++ b/src/Manager/CategoryContextManager.php @@ -8,20 +8,21 @@ namespace HeimrichHannot\CategoriesBundle\Manager; -use Contao\CoreBundle\Framework\ContaoFrameworkInterface; +use Contao\CoreBundle\Framework\ContaoFramework; +use Contao\Model\Collection; use HeimrichHannot\CategoriesBundle\Model\CategoryContextModel; class CategoryContextManager { /** - * @var ContaoFrameworkInterface + * @var ContaoFramework */ protected $framework; /** * Constructor. */ - public function __construct(ContaoFrameworkInterface $framework) + public function __construct(ContaoFramework $framework) { $this->framework = $framework; } @@ -32,7 +33,7 @@ public function __construct(ContaoFrameworkInterface $framework) * @param mixed $column * @param mixed $value * - * @return \Contao\Model\Collection|CategoryContextModel|null + * @return Collection|CategoryContextModel|null */ public function findBy($column, $value, array $options = []) { diff --git a/src/Manager/CategoryManager.php b/src/Manager/CategoryManager.php index 00d443ec..233c70cc 100644 --- a/src/Manager/CategoryManager.php +++ b/src/Manager/CategoryManager.php @@ -8,28 +8,23 @@ namespace HeimrichHannot\CategoriesBundle\Manager; +use Contao\Database; use Contao\Controller; -use Contao\CoreBundle\Framework\ContaoFrameworkInterface; +use Contao\CoreBundle\Framework\ContaoFramework; +use Contao\Model; use Contao\Model\Collection; use Contao\StringUtil; use Contao\System; use HeimrichHannot\CategoriesBundle\Backend\CategoryContext; use HeimrichHannot\CategoriesBundle\Model\CategoryAssociationModel; use HeimrichHannot\CategoriesBundle\Model\CategoryModel; +use HeimrichHannot\UtilsBundle\Util\Utils; class CategoryManager { - /** - * @var ContaoFrameworkInterface - */ - protected $framework; - - /** - * Constructor. - */ - public function __construct(ContaoFrameworkInterface $framework) + public function __construct(private readonly ContaoFramework $framework, private readonly Utils $utils) { - $this->framework = $framework; + $this->framework->initialize(); } /** @@ -37,7 +32,7 @@ public function __construct(ContaoFrameworkInterface $framework) */ public function findByEntityAndCategoryFieldAndTable(int $entity, string $categoryField, string $table, array $options = []) { - $modelUtil = System::getContainer()->get('huh.utils.model'); + $modelUtil = $this->utils->model(); if (null === ($categoryAssociations = $modelUtil->findModelInstancesBy('tl_category_association', ['tl_category_association.categoryField=?', 'tl_category_association.entity=?', 'tl_category_association.parentTable=?'], [$categoryField, $entity, $table], $options))) { return null; @@ -53,7 +48,7 @@ public function findByEntityAndCategoryFieldAndTable(int $entity, string $catego */ public function findByCategoryFieldAndTable(string $categoryField, string $table, array $options = []) { - $modelUtil = System::getContainer()->get('huh.utils.model'); + $modelUtil = $this->utils->model(); if (null === ($categoryAssociations = $modelUtil->findModelInstancesBy('tl_category_association', ['tl_category_association.categoryField=?', 'tl_category_association.parentTable=?'], [$categoryField, $table], $options))) { return null; @@ -75,7 +70,7 @@ public function findByCategoryFieldAndTable(string $categoryField, string $table */ public function findByCategoryFieldAndTableAndPids(string $categoryField, string $table, array $pids = [], array $options = []) { - $modelUtil = System::getContainer()->get('huh.utils.model'); + $modelUtil = $this->utils->model(); if (null === ($categoryAssociations = $modelUtil->findModelInstancesBy('tl_category_association', ['tl_category_association.categoryField=?', 'tl_category_association.parentTable=?'], [$categoryField, $table], $options))) { return null; @@ -102,7 +97,7 @@ public function findByCategoryFieldAndTableAndPids(string $categoryField, string public function findOneByEntityAndCategoryFieldAndTable(int $entity, string $categoryField, string $table, array $options = []): ?CategoryModel { - $modelUtil = System::getContainer()->get('huh.utils.model'); + $modelUtil = $this->utils->model(); if (null === ($categoryAssociations = $modelUtil->findOneModelInstanceBy('tl_category_association', ['tl_category_association.entity=?', 'tl_category_association.categoryField=?', 'tl_category_association.parentTable=?'], [$entity, $categoryField, $table], $options))) { return null; @@ -243,7 +238,7 @@ public function computeContext($contextObj, string $categoryField): ?int * * @param $contextObj */ - public function addOverridablePropertiesToCategory(CategoryModel $category, $contextObj, string $categoryField, int $primaryCategory, bool $skipCache = false) + public function addOverridablePropertiesToCategory(CategoryModel $category, $contextObj, string $categoryField, int $primaryCategory, bool $skipCache = false): void { Controller::loadDataContainer('tl_category'); @@ -264,7 +259,7 @@ public function addOverridablePropertiesToCategory(CategoryModel $category, $con */ public function findBy($column, $value, array $options = []) { - return System::getContainer()->get('huh.utils.model')->findModelInstancesBy('tl_category', $column, $value, $options); + return $this->utils->model()->findModelInstancesBy('tl_category', $column, $value, $options); } /** @@ -274,7 +269,7 @@ public function findBy($column, $value, array $options = []) */ public function findAll(array $options = []) { - return System::getContainer()->get('huh.utils.model')->findAllModelInstances('tl_category', $options); + return $this->utils->model()->findAllModelInstances('tl_category', $options); } /** @@ -284,7 +279,7 @@ public function findAll(array $options = []) */ public function findMultipleByIds(array $ids, array $options = []) { - return System::getContainer()->get('huh.utils.model')->findMultipleModelInstancesByIds('tl_category', $ids, $options); + return $this->utils->model()->findMultipleModelInstancesByIds('tl_category', $ids, $options); } /** @@ -297,7 +292,7 @@ public function findMultipleByIds(array $ids, array $options = []) */ public function findOneBy($column, $value, array $options = []) { - return System::getContainer()->get('huh.utils.model')->findOneModelInstanceBy('tl_category', $column, $value, $options); + return $this->utils->model()->findOneModelInstanceBy('tl_category', $column, $value, $options); } /** @@ -362,7 +357,7 @@ public function getParentCategoryIds(int $category, bool $insertCurrent = false) public function removeAllAssociations(int $entity, string $categoryField, string $table): void { // clean up beforehand - if (null !== ($categoryAssociations = System::getContainer()->get('huh.utils.model')->findModelInstancesBy('tl_category_association', ['tl_category_association.entity=?', 'tl_category_association.parentTable=?', 'tl_category_association.categoryField=?'], [$entity, $table, $categoryField]))) { + if (null !== ($categoryAssociations = $this->utils->model()->findModelInstancesBy('tl_category_association', ['tl_category_association.entity=?', 'tl_category_association.parentTable=?', 'tl_category_association.categoryField=?'], [$entity, $table, $categoryField]))) { while ($categoryAssociations->next()) { $categoryAssociations->delete(); } @@ -396,7 +391,8 @@ public function createAssociations(int $entity, string $categoryField, string $t */ public function hasChildren(int $category): bool { - return null !== System::getContainer()->get('huh.utils.model')->findModelInstancesBy('tl_category', ['tl_category.pid=?'], [$category]); + $modelUtil = $this->utils->model(); + return null !== $modelUtil->findModelInstancesBy('tl_category', ['tl_category.pid=?'], [$category]); } /** @@ -431,19 +427,17 @@ public function findAssociationsByParentTableAndCategory(int $categoryId, string public function findAssociationsByParentTableAndEntityAndField(string $parentTable, int $entityId, string $field) { - return System::getContainer()->get('huh.utils.model')->findModelInstancesBy('tl_category_association', ['tl_category_association.parentTable=?', 'tl_category_association.entity=?', 'tl_category_association.categoryField=?'], [$parentTable, $entityId, $field]); + return $this->utils->model()->findModelInstancesBy('tl_category_association', ['tl_category_association.parentTable=?', 'tl_category_association.entity=?', 'tl_category_association.categoryField=?'], [$parentTable, $entityId, $field]); } /** * find category by id or alias. * - * @param int $id - * * @return CategoryModel|null */ - public function findByIdOrAlias($idOrAlias, array $options = []) + public function findByIdOrAlias(int|string $idOrAlias, array $options = []): ?Model { - return System::getContainer()->get('huh.utils.model')->findModelInstanceByIdOrAlias('tl_category', $idOrAlias, $options); + return $this->utils->model()->findModelInstanceByIdOrAlias('tl_category', $idOrAlias, $options); } /** @@ -452,7 +446,7 @@ public function findByIdOrAlias($idOrAlias, array $options = []) * @param int $intPid The parent ID * @param array $arrIds An array of categories * - * @return \Model\Collection|CategoryModel[]|CategoryModel|null A collection of models or null if there are no categories + * @return Collection|CategoryModel[]|CategoryModel|null A collection of models or null if there are no categories */ public function findCategoryAndSubcategoryByPidAndIds(int $pid, array $arrIds) { @@ -460,13 +454,13 @@ public function findCategoryAndSubcategoryByPidAndIds(int $pid, array $arrIds) return null; } - $objCategories = \Database::getInstance()->prepare('SELECT c1.*, (SELECT COUNT(*) FROM tl_category c2 WHERE c2.pid=c1.id AND c2.id IN ('.implode(',', array_map('intval', $arrIds)).')) AS subcategories FROM tl_category c1 WHERE c1.pid=? AND c1.id IN ('.implode(',', array_map('intval', $arrIds)).') ORDER BY sorting ASC')->execute($pid); + $objCategories = Database::getInstance()->prepare('SELECT c1.*, (SELECT COUNT(*) FROM tl_category c2 WHERE c2.pid=c1.id AND c2.id IN ('.implode(',', array_map('intval', $arrIds)).')) AS subcategories FROM tl_category c1 WHERE c1.pid=? AND c1.id IN ('.implode(',', array_map('intval', $arrIds)).') ORDER BY sorting ASC')->execute($pid); if ($objCategories->numRows < 1) { return null; } - return \Model\Collection::createFromDbResult($objCategories, 'tl_category'); + return Collection::createFromDbResult($objCategories, 'tl_category'); } /** diff --git a/src/Manager/CategoryPropertyCacheManager.php b/src/Manager/CategoryPropertyCacheManager.php index dfd5c710..006d7a3a 100644 --- a/src/Manager/CategoryPropertyCacheManager.php +++ b/src/Manager/CategoryPropertyCacheManager.php @@ -8,20 +8,21 @@ namespace HeimrichHannot\CategoriesBundle\Manager; -use Contao\CoreBundle\Framework\ContaoFrameworkInterface; +use Contao\CoreBundle\Framework\ContaoFramework; +use Contao\Model\Collection; use HeimrichHannot\CategoriesBundle\Model\CategoryPropertyCacheModel; class CategoryPropertyCacheManager { /** - * @var ContaoFrameworkInterface + * @var ContaoFramework */ protected $framework; /** * Constructor. */ - public function __construct(ContaoFrameworkInterface $framework) + public function __construct(ContaoFramework $framework) { $this->framework = $framework; } @@ -32,7 +33,7 @@ public function __construct(ContaoFrameworkInterface $framework) * @param mixed $column * @param mixed $value * - * @return \Contao\Model\Collection|CategoryPropertyCacheModel|null + * @return Collection|CategoryPropertyCacheModel|null */ public function findBy($column, $value, array $options = []) { @@ -65,7 +66,7 @@ public function add(string $property, string $categoryField, int $category, int } /** - * @return \Contao\Model\Collection|CategoryPropertyCacheModel|null + * @return Collection|CategoryPropertyCacheModel|null */ public function get(string $property, string $categoryField, int $category, int $context) { diff --git a/src/Model/AbstractModel.php b/src/Model/AbstractModel.php new file mode 100644 index 00000000..d96a6f3e --- /dev/null +++ b/src/Model/AbstractModel.php @@ -0,0 +1,17 @@ +frontendTitle ?: $this->title; + } } diff --git a/src/Module/ModuleCategoriesMenu.php b/src/Module/ModuleCategoriesMenu.php index 86748c49..de1ffd3d 100644 --- a/src/Module/ModuleCategoriesMenu.php +++ b/src/Module/ModuleCategoriesMenu.php @@ -8,6 +8,8 @@ namespace HeimrichHannot\CategoriesBundle\Module; +use Symfony\Component\HttpFoundation\Request; +use Contao\Module; use Contao\BackendTemplate; use Contao\FrontendTemplate; use Contao\PageModel; @@ -15,7 +17,7 @@ use Contao\System; use HeimrichHannot\CategoriesBundle\Backend\Category; -class ModuleCategoriesMenu extends \Contao\Module +class ModuleCategoriesMenu extends Module { /** * Template. @@ -52,7 +54,7 @@ class ModuleCategoriesMenu extends \Contao\Module */ public function generate() { - if (TL_MODE == 'BE') { + if (System::getContainer()->get('contao.routing.scope_matcher')->isBackendRequest(System::getContainer()->get('request_stack')->getCurrentRequest() ?? Request::create(''))) { $objTemplate = new BackendTemplate('be_wildcard'); $objTemplate->wildcard = '### CATEGORIES MENU ###'; @@ -178,7 +180,7 @@ protected function renderCategories($intPid, $arrIds, $strUrl, $intLevel = 1) 'title' => StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['cm_resetCategories'][1]), 'linkTitle' => StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['cm_resetCategories'][1]), 'link' => $GLOBALS['TL_LANG']['MSC']['cm_resetCategories'][0], - 'href' => ampersand(str_replace('/'.$strParam.'/%s', '', $strUrl)), + 'href' => StringUtil::ampersand(str_replace('/'.$strParam.'/%s', '', $strUrl)), ]; $count = 1; @@ -203,8 +205,8 @@ protected function renderCategories($intPid, $arrIds, $strUrl, $intLevel = 1) ) ? ' cm_trail' : ''); $strTitle = $category->frontendTitle ?: $category->title; - if (\System::getContainer()->get('translator')->getCatalogue()->has($strTitle)) { - $strTitle = \System::getContainer()->get('translator')->trans($strTitle); + if (System::getContainer()->get('translator')->getCatalogue()->has($strTitle)) { + $strTitle = System::getContainer()->get('translator')->trans($strTitle); } $arrRow = $category->row(); @@ -214,7 +216,7 @@ protected function renderCategories($intPid, $arrIds, $strUrl, $intLevel = 1) $arrRow['title'] = StringUtil::specialchars($strTitle, true); $arrRow['linkTitle'] = StringUtil::specialchars($strTitle, true); $arrRow['link'] = $strTitle; - $arrRow['href'] = ampersand(str_replace('%s', ($GLOBALS['TL_CONFIG']['disableAlias'] ? $category->id : $category->alias), $strUrl)); + $arrRow['href'] = StringUtil::ampersand(str_replace('%s', ($GLOBALS['TL_CONFIG']['disableAlias'] ? $category->id : $category->alias), $strUrl)); $arrCategories[] = $arrRow; } diff --git a/src/Picker/CategoryPickerProvider.php b/src/Picker/CategoryPickerProvider.php index e33daa67..7fb15bf0 100644 --- a/src/Picker/CategoryPickerProvider.php +++ b/src/Picker/CategoryPickerProvider.php @@ -11,14 +11,18 @@ use Contao\CoreBundle\Picker\AbstractPickerProvider; use Contao\CoreBundle\Picker\DcaPickerProviderInterface; use Contao\CoreBundle\Picker\PickerConfig; +use Contao\Input; use Contao\System; +use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; class CategoryPickerProvider extends AbstractPickerProvider implements DcaPickerProviderInterface { + private TokenStorageInterface $tokenStorage; + /** * {@inheritdoc} */ - public function getName() + public function getName(): string { return 'categoryPicker'; } @@ -26,27 +30,27 @@ public function getName() /** * {@inheritdoc} */ - public function supportsContext($context) + public function supportsContext($context): bool { - return \in_array($context, ['category'], true) && $this->getUser()->hasAccess('categories', 'modules'); + return \in_array($context, ['category'], true) && $this->tokenStorage->getToken()?->getUser()->hasAccess('categories', 'modules'); } /** * {@inheritdoc} */ - public function supportsValue(PickerConfig $config) + public function supportsValue(PickerConfig $config): bool { if ('category' === $config->getContext()) { return is_numeric($config->getValue()); } - return false !== strpos($config->getValue(), '{{category_url::'); + return str_contains($config->getValue(), '{{category_url::'); } /** * {@inheritdoc} */ - public function getDcaTable() + public function getDcaTable(PickerConfig|null $config = null): string { return 'tl_category'; } @@ -54,7 +58,7 @@ public function getDcaTable() /** * {@inheritdoc} */ - public function getDcaAttributes(PickerConfig $config) + public function getDcaAttributes(PickerConfig $config): array { $value = $config->getValue(); $attributes = ['fieldType' => 'radio']; @@ -79,7 +83,7 @@ public function getDcaAttributes(PickerConfig $config) return $attributes; } - if ($value && false !== strpos($value, '{{category_url::')) { + if ($value && str_contains($value, '{{category_url::')) { $attributes['value'] = str_replace(['{{category_url::', '}}'], '', $value); } @@ -89,7 +93,7 @@ public function getDcaAttributes(PickerConfig $config) /** * {@inheritdoc} */ - public function convertDcaValue(PickerConfig $config, $value) + public function convertDcaValue(PickerConfig $config, mixed $value): string|int { if ('category' === $config->getContext()) { return (int) $value; @@ -98,17 +102,22 @@ public function convertDcaValue(PickerConfig $config, $value) return '{{category_url::'.$value.'}}'; } + public function setTokenStorage(TokenStorageInterface $storage): void + { + $this->tokenStorage = $storage; + } + /** * {@inheritdoc} */ - protected function getRouteParameters(PickerConfig $config = null) + protected function getRouteParameters(PickerConfig $config = null): array { return [ 'do' => 'categories', - 'category_field' => System::getContainer()->get('huh.request')->getGet('category_field'), - 'category_table' => System::getContainer()->get('huh.request')->getGet('category_table'), - 'primaryCategory' => System::getContainer()->get('huh.request')->getGet('primaryCategory'), - 'usePrimaryCategory' => System::getContainer()->get('huh.request')->getGet('usePrimaryCategory'), + 'category_field' => Input::get('category_field'), + 'category_table' => Input::get('category_table'), + 'primaryCategory' => Input::get('primaryCategory'), + 'usePrimaryCategory' => Input::get('usePrimaryCategory'), ]; } } diff --git a/src/Resources/config/datacontainers.yml b/src/Resources/config/datacontainers.yml deleted file mode 100644 index f4019464..00000000 --- a/src/Resources/config/datacontainers.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - _defaults: - public: true - autowire: true - - HeimrichHannot\CategoriesBundle\DataContainer\: - resource: '../../DataContainer/*' diff --git a/src/Resources/config/huh_filter.yml b/src/Resources/config/huh_filter.yml deleted file mode 100644 index 12919435..00000000 --- a/src/Resources/config/huh_filter.yml +++ /dev/null @@ -1,5 +0,0 @@ -huh: - filter: - types: - - {name: category_choice, class: HeimrichHannot\CategoriesBundle\Filter\Type\CategoryChoiceType, type: choice} - - {name: parent_category_choice, class: HeimrichHannot\CategoriesBundle\Filter\Type\ParentCategoryChoiceType, type: choice} \ No newline at end of file diff --git a/src/Resources/config/services.yml b/src/Resources/config/services.yml deleted file mode 100644 index d133ca6c..00000000 --- a/src/Resources/config/services.yml +++ /dev/null @@ -1,62 +0,0 @@ -services: - - HeimrichHannot\CategoriesBundle\EventListener\: - resource: '../../EventListener/*' - autowire: true - public: true - - huh.categories.manager: - class: HeimrichHannot\CategoriesBundle\Manager\CategoryManager - public: true - arguments: - - "@contao.framework" - huh.categories.config_manager: - class: HeimrichHannot\CategoriesBundle\Manager\CategoryConfigManager - public: true - arguments: - - "@contao.framework" - huh.categories.context_manager: - class: HeimrichHannot\CategoriesBundle\Manager\CategoryContextManager - public: true - arguments: - - "@contao.framework" - huh.categories.property_cache_manager: - class: HeimrichHannot\CategoriesBundle\Manager\CategoryPropertyCacheManager - public: true - arguments: - - "@contao.framework" - huh.categories.picker.category_provider: - class: HeimrichHannot\CategoriesBundle\Picker\CategoryPickerProvider - public: false - arguments: - - "@knp_menu.factory" - - "@router" - calls: - - [setTokenStorage, ["@security.token_storage"]] - tags: - - { name: contao.picker_provider, priority: 512 } - huh.categories.twig_extension: - class: HeimrichHannot\CategoriesBundle\Twig\CategoryExtension - public: false - tags: - - {name: twig.extension} - -# Symfony 4 - HeimrichHannot\CategoriesBundle\Manager\CategoryManager: - alias: huh.categories.manager - public: true -# Filter - - huh.categories.filter.choice: - class: HeimrichHannot\CategoriesBundle\Filter\Choice\CategoriesChoice - public: true - arguments: - - "@contao.framework" - - '@huh.categories.manager' - -# Commands - - HeimrichHannot\CategoriesBundle\Command\NewsCategoriesMigrationCommand: - autowire: true - autoconfigure: true - public: false diff --git a/src/Resources/contao/dca/tl_news.php b/src/Resources/contao/dca/tl_news.php deleted file mode 100644 index 4c227f32..00000000 --- a/src/Resources/contao/dca/tl_news.php +++ /dev/null @@ -1,8 +0,0 @@ - [ - 'label' => &$GLOBALS['TL_LANG']['tl_news_feed']['huhCategoriesFields'], - 'exclude' => true, - 'filter' => true, - 'inputType' => 'select', - 'options_callback' => function (Contao\DataContainer $dc) { - return System::getContainer()->get('huh.utils.choice.field')->getCachedChoices([ - 'dataContainer' => 'tl_news', - ]); - }, - 'eval' => ['tl_class' => 'long clr', 'includeBlankOption' => true, 'chosen' => true, 'multiple' => true], - 'sql' => 'blob NULL', - ], - 'huhCategories' => [ - 'label' => &$GLOBALS['TL_LANG']['tl_news_feed']['huhCategories'], - 'exclude' => true, - 'filter' => true, - 'inputType' => 'checkbox', - 'options_callback' => function (Contao\DataContainer $dc) { - return System::getContainer()->get('huh.utils.choice.model_instance')->getCachedChoices([ - 'dataContainer' => 'tl_category', - 'labelPattern' => '%title% (ID %id%)', - ]); - }, - 'eval' => ['multiple' => true, 'tl_class' => 'long clr'], - 'sql' => 'blob NULL', - ], - 'huhCategoriesShow' => [ - 'label' => &$GLOBALS['TL_LANG']['tl_news_feed']['huhCategoriesShow'], - 'exclude' => true, - 'filter' => true, - 'inputType' => 'select', - 'options' => ['title', 'text_before', 'text_after'], - 'reference' => &$GLOBALS['TL_LANG']['tl_news_feed']['huhCategoriesShow'], - 'eval' => [ - 'includeBlankOption' => true, - 'blankOptionLabel' => &$GLOBALS['TL_LANG']['tl_news_feed']['huhCategoriesShow']['empty'], - 'tl_class' => 'long clr', - ], - 'sql' => "varchar(16) NOT NULL default ''", - ], - ]; - - $dca['fields'] = array_merge(is_array($dca['fields']) ? $dca['fields'] : [], $fields); -} diff --git a/src/Resources/contao/languages/de/tl_filter_config_element.php b/src/Resources/contao/languages/de/tl_filter_config_element.php deleted file mode 100644 index f27220d3..00000000 --- a/src/Resources/contao/languages/de/tl_filter_config_element.php +++ /dev/null @@ -1,14 +0,0 @@ -get('huh.categories.manager'); - - $category = $manager->findByIdOrAlias($id); - - if (null === $category) { - return null; - } - - return $category->row(); - } - - /** - * Get the category for a given category id taking into account the contextual (overridable) properties -> see README.md for more detail. - * - * @param $id - * @param $contextObj - * - * @return array|null - */ - public function getContextualCategory($id, $contextObj, string $categoryField, int $primaryCategory, bool $skipCache = false) - { - $manager = System::getContainer()->get('huh.categories.manager'); - - $category = $manager->findByIdOrAlias($id); - - if (null === $category) { - return null; - } - - $manager->addOverridablePropertiesToCategory($category, $contextObj, $categoryField, $primaryCategory, $skipCache); - - return $category->row(); - } - - /** - * Get the category for a given category id. - * - * @param string|array $ids - * - * @return array|null - */ - public function getCategories($ids) - { - $ids = StringUtil::deserialize($ids, true); - - if (empty($ids)) { - return []; - } - - $categories = System::getContainer()->get('huh.categories.manager')->findMultipleByIds($ids); - - if (null === $categories) { - return null; - } - - return $categories->fetchAll(); - } } diff --git a/src/Twig/Runtime/CategoriesRuntime.php b/src/Twig/Runtime/CategoriesRuntime.php new file mode 100644 index 00000000..a02b6396 --- /dev/null +++ b/src/Twig/Runtime/CategoriesRuntime.php @@ -0,0 +1,66 @@ +categoryManager->findByIdOrAlias($id); + + if (null === $category) { + return null; + } + + return $category->row(); + } + + /** + * Get the category for a given category id. + */ + public function getCategories(array|string $ids): ?array + { + $ids = StringUtil::deserialize($ids, true); + + if (empty($ids)) { + return []; + } + + $categories = $this->categoryManager->findMultipleByIds($ids); + + if (null === $categories) { + return null; + } + + return $categories->fetchAll(); + } + + /** + * Get the category for a given category id taking into account the contextual (overridable) properties -> see README.md for more detail. + */ + public function getContextualCategory(int|string $id, $contextObj, string $categoryField, int $primaryCategory, bool $skipCache = false): ?array + { + $category = $this->categoryManager->findByIdOrAlias($id); + + if (null === $category) { + return null; + } + + $this->categoryManager->addOverridablePropertiesToCategory($category, $contextObj, $categoryField, $primaryCategory, $skipCache); + + return $category->row(); + } +} \ No newline at end of file diff --git a/src/Widget/CategoryTree.php b/src/Widget/CategoryTree.php index b4aa0f44..1f2e6c80 100644 --- a/src/Widget/CategoryTree.php +++ b/src/Widget/CategoryTree.php @@ -8,6 +8,7 @@ namespace HeimrichHannot\CategoriesBundle\Widget; +use Contao\Image; use Contao\FormHidden; use Contao\StringUtil; use Contao\System; @@ -31,16 +32,6 @@ class CategoryTree extends Widget */ protected $strTemplate = 'be_widget'; - /** - * Load the database object. - * - * @param array $arrAttributes - */ - public function __construct($arrAttributes = null) - { - $this->import('Database'); - parent::__construct($arrAttributes); - } /** * Generate the widget and return it as string. @@ -59,11 +50,11 @@ public function generate() if (!empty($this->varValue)) { // can be an array if ($usePrimaryCategory) { - if ('reloadCategoryTree' === System::getContainer()->get('huh.request')->getPost('action')) { + if ('reloadCategoryTree' === System::getContainer()->get('request_stack')->getCurrentRequest()->request->get('action')) { $value = []; foreach ($this->varValue as $category) { - if (System::getContainer()->get('huh.utils.string')->startsWith($category, 'primary_')) { + if (str_starts_with($category, 'primary_')) { $primaryCategory = str_replace('primary_', '', $category); } else { $value[] = $category; @@ -81,7 +72,7 @@ public function generate() if (null !== $objCategories) { while ($objCategories->next()) { $arrSet[] = $objCategories->id; - $arrValues[$objCategories->id] = \Image::getHtml('iconPLAIN.svg').' '.$objCategories->title; + $arrValues[$objCategories->id] = Image::getHtml('iconPLAIN.svg').' '.$objCategories->title; } } } @@ -118,7 +109,7 @@ public function generate() $readonly = $dca['eval']['readonly'] ?? false; $return .= ' -'.(($dca['eval']['disabled'] ?? false) || $readonly ? '' : ''.$GLOBALS['TL_LANG']['MSC']['changeSelection'].'').'
+'.(($dca['eval']['disabled'] ?? false) || $readonly ? '' : ''.$GLOBALS['TL_LANG']['MSC']['changeSelection'].'').'