diff --git a/composer.lock b/composer.lock
index 836d4ba..b7dece2 100644
--- a/composer.lock
+++ b/composer.lock
@@ -65,75 +65,25 @@
},
"time": "2024-04-02T19:30:07+00:00"
},
- {
- "name": "mustache/mustache",
- "version": "v2.14.2",
- "source": {
- "type": "git",
- "url": "https://github.com/bobthecow/mustache.php.git",
- "reference": "e62b7c3849d22ec55f3ec425507bf7968193a6cb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/e62b7c3849d22ec55f3ec425507bf7968193a6cb",
- "reference": "e62b7c3849d22ec55f3ec425507bf7968193a6cb",
- "shasum": ""
- },
- "require": {
- "php": ">=5.2.4"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "~1.11",
- "phpunit/phpunit": "~3.7|~4.0|~5.0"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "Mustache": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Justin Hileman",
- "email": "justin@justinhileman.info",
- "homepage": "http://justinhileman.com"
- }
- ],
- "description": "A Mustache implementation in PHP.",
- "homepage": "https://github.com/bobthecow/mustache.php",
- "keywords": [
- "mustache",
- "templating"
- ],
- "support": {
- "issues": "https://github.com/bobthecow/mustache.php/issues",
- "source": "https://github.com/bobthecow/mustache.php/tree/v2.14.2"
- },
- "time": "2022-08-23T13:07:01+00:00"
- },
{
"name": "symfony/finder",
- "version": "v6.4.17",
+ "version": "v7.4.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7"
+ "reference": "e0be088d22278583a82da281886e8c3592fbf149"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
- "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149",
+ "reference": "e0be088d22278583a82da281886e8c3592fbf149",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"require-dev": {
- "symfony/filesystem": "^6.0|^7.0"
+ "symfony/filesystem": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -161,7 +111,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v6.4.17"
+ "source": "https://github.com/symfony/finder/tree/v7.4.8"
},
"funding": [
{
@@ -172,25 +122,81 @@
"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-29T13:51:37+00:00"
+ "time": "2026-03-24T13:12:05+00:00"
+ },
+ {
+ "name": "wp-cli/mustache",
+ "version": "v2.14.99",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/mustache.php.git",
+ "reference": "ca23b97ac35fbe01c160549eb634396183d04a59"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/mustache.php/zipball/ca23b97ac35fbe01c160549eb634396183d04a59",
+ "reference": "ca23b97ac35fbe01c160549eb634396183d04a59",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "replace": {
+ "mustache/mustache": "^2.14.2"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "~2.19.3",
+ "yoast/phpunit-polyfills": "^2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Mustache": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Justin Hileman",
+ "email": "justin@justinhileman.info",
+ "homepage": "http://justinhileman.com"
+ }
+ ],
+ "description": "A Mustache implementation in PHP.",
+ "homepage": "https://github.com/bobthecow/mustache.php",
+ "keywords": [
+ "mustache",
+ "templating"
+ ],
+ "support": {
+ "source": "https://github.com/wp-cli/mustache.php/tree/v2.14.99"
+ },
+ "time": "2025-05-06T16:15:37+00:00"
},
{
"name": "wp-cli/mustangostang-spyc",
- "version": "0.6.3",
+ "version": "0.6.6",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/spyc.git",
- "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7"
+ "reference": "30f25baaaba939caaff1f4b8c7ed998632f59fe2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/spyc/zipball/6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7",
- "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7",
+ "url": "https://api.github.com/repos/wp-cli/spyc/zipball/30f25baaaba939caaff1f4b8c7ed998632f59fe2",
+ "reference": "30f25baaaba939caaff1f4b8c7ed998632f59fe2",
"shasum": ""
},
"require": {
@@ -226,35 +232,35 @@
"description": "A simple YAML loader/dumper class for PHP (WP-CLI fork)",
"homepage": "https://github.com/mustangostang/spyc/",
"support": {
- "source": "https://github.com/wp-cli/spyc/tree/autoload"
+ "source": "https://github.com/wp-cli/spyc/tree/0.6.6"
},
- "time": "2017-04-25T11:26:20+00:00"
+ "time": "2026-03-12T12:30:41+00:00"
},
{
"name": "wp-cli/php-cli-tools",
- "version": "v0.11.22",
+ "version": "v0.12.9",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/php-cli-tools.git",
- "reference": "a6bb94664ca36d0962f9c2ff25591c315a550c51"
+ "reference": "c3d25138ce46a66647ec0dc9b17bf300338494aa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/php-cli-tools/zipball/a6bb94664ca36d0962f9c2ff25591c315a550c51",
- "reference": "a6bb94664ca36d0962f9c2ff25591c315a550c51",
+ "url": "https://api.github.com/repos/wp-cli/php-cli-tools/zipball/c3d25138ce46a66647ec0dc9b17bf300338494aa",
+ "reference": "c3d25138ce46a66647ec0dc9b17bf300338494aa",
"shasum": ""
},
"require": {
- "php": ">= 5.3.0"
+ "php": ">= 7.2.24"
},
"require-dev": {
"roave/security-advisories": "dev-latest",
- "wp-cli/wp-cli-tests": "^4"
+ "wp-cli/wp-cli-tests": "^5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.11.x-dev"
+ "dev-main": "0.12.x-dev"
}
},
"autoload": {
@@ -289,39 +295,38 @@
],
"support": {
"issues": "https://github.com/wp-cli/php-cli-tools/issues",
- "source": "https://github.com/wp-cli/php-cli-tools/tree/v0.11.22"
+ "source": "https://github.com/wp-cli/php-cli-tools/tree/v0.12.9"
},
- "time": "2023-12-03T19:25:05+00:00"
+ "time": "2026-03-29T11:12:54+00:00"
},
{
"name": "wp-cli/wp-cli",
- "version": "v2.11.0",
+ "version": "v2.12.0",
"source": {
"type": "git",
"url": "https://github.com/wp-cli/wp-cli.git",
- "reference": "53f0df112901fcf95099d0f501912a209429b6a9"
+ "reference": "03d30d4138d12b4bffd8b507b82e56e129e0523f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/wp-cli/wp-cli/zipball/53f0df112901fcf95099d0f501912a209429b6a9",
- "reference": "53f0df112901fcf95099d0f501912a209429b6a9",
+ "url": "https://api.github.com/repos/wp-cli/wp-cli/zipball/03d30d4138d12b4bffd8b507b82e56e129e0523f",
+ "reference": "03d30d4138d12b4bffd8b507b82e56e129e0523f",
"shasum": ""
},
"require": {
"ext-curl": "*",
- "mustache/mustache": "^2.14.1",
"php": "^5.6 || ^7.0 || ^8.0",
"symfony/finder": ">2.7",
+ "wp-cli/mustache": "^2.14.99",
"wp-cli/mustangostang-spyc": "^0.6.3",
- "wp-cli/php-cli-tools": "~0.11.2"
+ "wp-cli/php-cli-tools": "~0.12.4"
},
"require-dev": {
- "roave/security-advisories": "dev-latest",
"wp-cli/db-command": "^1.3 || ^2",
"wp-cli/entity-command": "^1.2 || ^2",
"wp-cli/extension-command": "^1.1 || ^2",
"wp-cli/package-command": "^1 || ^2",
- "wp-cli/wp-cli-tests": "^4.0.1"
+ "wp-cli/wp-cli-tests": "^4.3.10"
},
"suggest": {
"ext-readline": "Include for a better --prompt implementation",
@@ -334,7 +339,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.11.x-dev"
+ "dev-main": "2.12.x-dev"
}
},
"autoload": {
@@ -361,20 +366,20 @@
"issues": "https://github.com/wp-cli/wp-cli/issues",
"source": "https://github.com/wp-cli/wp-cli"
},
- "time": "2024-08-08T03:04:55+00:00"
+ "time": "2025-05-07T01:16:12+00:00"
},
{
"name": "yahnis-elsts/plugin-update-checker",
- "version": "v5.5",
+ "version": "v5.6",
"source": {
"type": "git",
"url": "https://github.com/YahnisElsts/plugin-update-checker.git",
- "reference": "845d65da93bcff31649ede00d9d73b1beadbb7f0"
+ "reference": "a2db6871deec989a74e1f90fafc6d58ae526a879"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/YahnisElsts/plugin-update-checker/zipball/845d65da93bcff31649ede00d9d73b1beadbb7f0",
- "reference": "845d65da93bcff31649ede00d9d73b1beadbb7f0",
+ "url": "https://api.github.com/repos/YahnisElsts/plugin-update-checker/zipball/a2db6871deec989a74e1f90fafc6d58ae526a879",
+ "reference": "a2db6871deec989a74e1f90fafc6d58ae526a879",
"shasum": ""
},
"require": {
@@ -384,7 +389,7 @@
"type": "library",
"autoload": {
"files": [
- "load-v5p5.php"
+ "load-v5p6.php"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -409,9 +414,9 @@
],
"support": {
"issues": "https://github.com/YahnisElsts/plugin-update-checker/issues",
- "source": "https://github.com/YahnisElsts/plugin-update-checker/tree/v5.5"
+ "source": "https://github.com/YahnisElsts/plugin-update-checker/tree/v5.6"
},
- "time": "2024-10-16T14:25:00+00:00"
+ "time": "2025-05-20T12:29:01+00:00"
}
],
"packages-dev": [
@@ -462,16 +467,16 @@
},
{
"name": "antecedent/patchwork",
- "version": "2.2.1",
+ "version": "2.2.3",
"source": {
"type": "git",
"url": "https://github.com/antecedent/patchwork.git",
- "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245"
+ "reference": "8b6b235f405af175259c8f56aea5fc23ab9f03ce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/antecedent/patchwork/zipball/1bf183a3e1bd094f231a2128b9ecc5363c269245",
- "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245",
+ "url": "https://api.github.com/repos/antecedent/patchwork/zipball/8b6b235f405af175259c8f56aea5fc23ab9f03ce",
+ "reference": "8b6b235f405af175259c8f56aea5fc23ab9f03ce",
"shasum": ""
},
"require": {
@@ -504,9 +509,9 @@
],
"support": {
"issues": "https://github.com/antecedent/patchwork/issues",
- "source": "https://github.com/antecedent/patchwork/tree/2.2.1"
+ "source": "https://github.com/antecedent/patchwork/tree/2.2.3"
},
- "time": "2024-12-11T10:19:54+00:00"
+ "time": "2025-09-17T09:00:56+00:00"
},
{
"name": "clue/ndjson-react",
@@ -653,16 +658,16 @@
},
{
"name": "composer/semver",
- "version": "3.4.3",
+ "version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
+ "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"shasum": ""
},
"require": {
@@ -714,7 +719,7 @@
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.4.3"
+ "source": "https://github.com/composer/semver/tree/3.4.4"
},
"funding": [
{
@@ -724,13 +729,9 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2024-09-19T14:15:21+00:00"
+ "time": "2025-08-20T19:15:30+00:00"
},
{
"name": "composer/xdebug-handler",
@@ -847,16 +848,16 @@
},
{
"name": "fidry/cpu-core-counter",
- "version": "1.2.0",
+ "version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/theofidry/cpu-core-counter.git",
- "reference": "8520451a140d3f46ac33042715115e290cf5785f"
+ "reference": "db9508f7b1474469d9d3c53b86f817e344732678"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f",
- "reference": "8520451a140d3f46ac33042715115e290cf5785f",
+ "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678",
+ "reference": "db9508f7b1474469d9d3c53b86f817e344732678",
"shasum": ""
},
"require": {
@@ -866,10 +867,10 @@
"fidry/makefile": "^0.2.0",
"fidry/php-cs-fixer-config": "^1.1.2",
"phpstan/extension-installer": "^1.2.0",
- "phpstan/phpstan": "^1.9.2",
- "phpstan/phpstan-deprecation-rules": "^1.0.0",
- "phpstan/phpstan-phpunit": "^1.2.2",
- "phpstan/phpstan-strict-rules": "^1.4.4",
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-deprecation-rules": "^2.0.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
"phpunit/phpunit": "^8.5.31 || ^9.5.26",
"webmozarts/strict-phpunit": "^7.5"
},
@@ -896,7 +897,7 @@
],
"support": {
"issues": "https://github.com/theofidry/cpu-core-counter/issues",
- "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0"
+ "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0"
},
"funding": [
{
@@ -904,61 +905,62 @@
"type": "github"
}
],
- "time": "2024-08-06T10:04:20+00:00"
+ "time": "2025-08-14T07:29:31+00:00"
},
{
"name": "friendsofphp/php-cs-fixer",
- "version": "v3.72.0",
+ "version": "v3.94.2",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "900389362c43d116fee1ffc51f7878145fa61b57"
+ "reference": "7787ceff91365ba7d623ec410b8f429cdebb4f63"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/900389362c43d116fee1ffc51f7878145fa61b57",
- "reference": "900389362c43d116fee1ffc51f7878145fa61b57",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/7787ceff91365ba7d623ec410b8f429cdebb4f63",
+ "reference": "7787ceff91365ba7d623ec410b8f429cdebb4f63",
"shasum": ""
},
"require": {
- "clue/ndjson-react": "^1.0",
+ "clue/ndjson-react": "^1.3",
"composer/semver": "^3.4",
- "composer/xdebug-handler": "^3.0.3",
+ "composer/xdebug-handler": "^3.0.5",
"ext-filter": "*",
+ "ext-hash": "*",
"ext-json": "*",
"ext-tokenizer": "*",
- "fidry/cpu-core-counter": "^1.2",
+ "fidry/cpu-core-counter": "^1.3",
"php": "^7.4 || ^8.0",
- "react/child-process": "^0.6.5",
- "react/event-loop": "^1.0",
- "react/promise": "^2.0 || ^3.0",
- "react/socket": "^1.0",
- "react/stream": "^1.0",
- "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0",
- "symfony/console": "^5.4 || ^6.4 || ^7.0",
- "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0",
- "symfony/filesystem": "^5.4 || ^6.4 || ^7.0",
- "symfony/finder": "^5.4 || ^6.4 || ^7.0",
- "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0",
- "symfony/polyfill-mbstring": "^1.31",
- "symfony/polyfill-php80": "^1.31",
- "symfony/polyfill-php81": "^1.31",
- "symfony/process": "^5.4 || ^6.4 || ^7.2",
- "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0"
+ "react/child-process": "^0.6.6",
+ "react/event-loop": "^1.5",
+ "react/socket": "^1.16",
+ "react/stream": "^1.4",
+ "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0",
+ "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0",
+ "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
+ "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
+ "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
+ "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.33",
+ "symfony/polyfill-php80": "^1.33",
+ "symfony/polyfill-php81": "^1.33",
+ "symfony/polyfill-php84": "^1.33",
+ "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0",
+ "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0"
},
"require-dev": {
- "facile-it/paraunit": "^1.3.1 || ^2.6",
- "infection/infection": "^0.29.14",
- "justinrainbow/json-schema": "^5.3 || ^6.2",
- "keradus/cli-executor": "^2.1",
+ "facile-it/paraunit": "^1.3.1 || ^2.7.1",
+ "infection/infection": "^0.32.3",
+ "justinrainbow/json-schema": "^6.6.4",
+ "keradus/cli-executor": "^2.3",
"mikey179/vfsstream": "^1.6.12",
- "php-coveralls/php-coveralls": "^2.7",
- "php-cs-fixer/accessible-object": "^1.1",
- "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
- "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
- "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.12",
- "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.3",
- "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.3"
+ "php-coveralls/php-coveralls": "^2.9.1",
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.7",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.7",
+ "phpunit/phpunit": "^9.6.34 || ^10.5.63 || ^11.5.51",
+ "symfony/polyfill-php85": "^1.33",
+ "symfony/var-dumper": "^5.4.48 || ^6.4.32 || ^7.4.4 || ^8.0.4",
+ "symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0.1"
},
"suggest": {
"ext-dom": "For handling output formats in XML",
@@ -973,7 +975,7 @@
"PhpCsFixer\\": "src/"
},
"exclude-from-classmap": [
- "src/Fixer/Internal/*"
+ "src/**/Internal/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -999,7 +1001,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
- "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.72.0"
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.94.2"
},
"funding": [
{
@@ -1007,24 +1009,24 @@
"type": "github"
}
],
- "time": "2025-03-13T11:25:37+00:00"
+ "time": "2026-02-20T16:13:53+00:00"
},
{
"name": "hamcrest/hamcrest-php",
- "version": "v2.0.1",
+ "version": "v2.1.1",
"source": {
"type": "git",
"url": "https://github.com/hamcrest/hamcrest-php.git",
- "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
- "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
"shasum": ""
},
"require": {
- "php": "^5.3|^7.0|^8.0"
+ "php": "^7.4|^8.0"
},
"replace": {
"cordoval/hamcrest-php": "*",
@@ -1032,8 +1034,8 @@
"kodova/hamcrest-php": "*"
},
"require-dev": {
- "phpunit/php-file-iterator": "^1.4 || ^2.0",
- "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
+ "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"extra": {
@@ -1056,9 +1058,9 @@
],
"support": {
"issues": "https://github.com/hamcrest/hamcrest-php/issues",
- "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
+ "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1"
},
- "time": "2020-07-09T08:09:16+00:00"
+ "time": "2025-04-30T06:54:44+00:00"
},
{
"name": "mockery/mockery",
@@ -1145,16 +1147,16 @@
},
{
"name": "myclabs/deep-copy",
- "version": "1.13.0",
+ "version": "1.13.4",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "024473a478be9df5fdaca2c793f2232fe788e414"
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414",
- "reference": "024473a478be9df5fdaca2c793f2232fe788e414",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
"shasum": ""
},
"require": {
@@ -1193,7 +1195,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
},
"funding": [
{
@@ -1201,20 +1203,20 @@
"type": "tidelift"
}
],
- "time": "2025-02-12T12:17:51+00:00"
+ "time": "2025-08-01T08:46:24+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v5.4.0",
+ "version": "v5.7.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "447a020a1f875a434d62f2a401f53b82a396e494"
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
- "reference": "447a020a1f875a434d62f2a401f53b82a396e494",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82",
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82",
"shasum": ""
},
"require": {
@@ -1233,7 +1235,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.x-dev"
}
},
"autoload": {
@@ -1257,9 +1259,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0"
},
- "time": "2024-12-30T11:07:19+00:00"
+ "time": "2025-12-06T11:56:16+00:00"
},
{
"name": "phar-io/manifest",
@@ -1754,16 +1756,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.5.45",
+ "version": "10.5.63",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "bd68a781d8e30348bc297449f5234b3458267ae8"
+ "reference": "33198268dad71e926626b618f3ec3966661e4d90"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bd68a781d8e30348bc297449f5234b3458267ae8",
- "reference": "bd68a781d8e30348bc297449f5234b3458267ae8",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33198268dad71e926626b618f3ec3966661e4d90",
+ "reference": "33198268dad71e926626b618f3ec3966661e4d90",
"shasum": ""
},
"require": {
@@ -1773,7 +1775,7 @@
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.12.1",
+ "myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.1",
@@ -1784,13 +1786,13 @@
"phpunit/php-timer": "^6.0.0",
"sebastian/cli-parser": "^2.0.1",
"sebastian/code-unit": "^2.0.0",
- "sebastian/comparator": "^5.0.3",
+ "sebastian/comparator": "^5.0.5",
"sebastian/diff": "^5.1.1",
"sebastian/environment": "^6.1.0",
- "sebastian/exporter": "^5.1.2",
+ "sebastian/exporter": "^5.1.4",
"sebastian/global-state": "^6.0.2",
"sebastian/object-enumerator": "^5.0.0",
- "sebastian/recursion-context": "^5.0.0",
+ "sebastian/recursion-context": "^5.0.1",
"sebastian/type": "^4.0.0",
"sebastian/version": "^4.0.1"
},
@@ -1835,7 +1837,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.45"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.63"
},
"funding": [
{
@@ -1846,12 +1848,20 @@
"url": "https://github.com/sebastianbergmann",
"type": "github"
},
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
"type": "tidelift"
}
],
- "time": "2025-02-06T16:08:12+00:00"
+ "time": "2026-01-27T05:48:37+00:00"
},
{
"name": "psr/container",
@@ -2080,16 +2090,16 @@
},
{
"name": "react/child-process",
- "version": "v0.6.6",
+ "version": "v0.6.7",
"source": {
"type": "git",
"url": "https://github.com/reactphp/child-process.git",
- "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159"
+ "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159",
- "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159",
+ "url": "https://api.github.com/repos/reactphp/child-process/zipball/970f0e71945556422ee4570ccbabaedc3cf04ad3",
+ "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3",
"shasum": ""
},
"require": {
@@ -2143,7 +2153,7 @@
],
"support": {
"issues": "https://github.com/reactphp/child-process/issues",
- "source": "https://github.com/reactphp/child-process/tree/v0.6.6"
+ "source": "https://github.com/reactphp/child-process/tree/v0.6.7"
},
"funding": [
{
@@ -2151,20 +2161,20 @@
"type": "open_collective"
}
],
- "time": "2025-01-01T16:37:48+00:00"
+ "time": "2025-12-23T15:25:20+00:00"
},
{
"name": "react/dns",
- "version": "v1.13.0",
+ "version": "v1.14.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/dns.git",
- "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5"
+ "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5",
- "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5",
+ "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3",
+ "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3",
"shasum": ""
},
"require": {
@@ -2219,7 +2229,7 @@
],
"support": {
"issues": "https://github.com/reactphp/dns/issues",
- "source": "https://github.com/reactphp/dns/tree/v1.13.0"
+ "source": "https://github.com/reactphp/dns/tree/v1.14.0"
},
"funding": [
{
@@ -2227,20 +2237,20 @@
"type": "open_collective"
}
],
- "time": "2024-06-13T14:18:03+00:00"
+ "time": "2025-11-18T19:34:28+00:00"
},
{
"name": "react/event-loop",
- "version": "v1.5.0",
+ "version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/event-loop.git",
- "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354"
+ "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354",
- "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354",
+ "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a",
+ "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a",
"shasum": ""
},
"require": {
@@ -2291,7 +2301,7 @@
],
"support": {
"issues": "https://github.com/reactphp/event-loop/issues",
- "source": "https://github.com/reactphp/event-loop/tree/v1.5.0"
+ "source": "https://github.com/reactphp/event-loop/tree/v1.6.0"
},
"funding": [
{
@@ -2299,27 +2309,27 @@
"type": "open_collective"
}
],
- "time": "2023-11-13T13:48:05+00:00"
+ "time": "2025-11-17T20:46:25+00:00"
},
{
"name": "react/promise",
- "version": "v3.2.0",
+ "version": "v3.3.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise.git",
- "reference": "8a164643313c71354582dc850b42b33fa12a4b63"
+ "reference": "23444f53a813a3296c1368bb104793ce8d88f04a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63",
- "reference": "8a164643313c71354582dc850b42b33fa12a4b63",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a",
+ "reference": "23444f53a813a3296c1368bb104793ce8d88f04a",
"shasum": ""
},
"require": {
"php": ">=7.1.0"
},
"require-dev": {
- "phpstan/phpstan": "1.10.39 || 1.4.10",
+ "phpstan/phpstan": "1.12.28 || 1.4.10",
"phpunit/phpunit": "^9.6 || ^7.5"
},
"type": "library",
@@ -2364,7 +2374,7 @@
],
"support": {
"issues": "https://github.com/reactphp/promise/issues",
- "source": "https://github.com/reactphp/promise/tree/v3.2.0"
+ "source": "https://github.com/reactphp/promise/tree/v3.3.0"
},
"funding": [
{
@@ -2372,20 +2382,20 @@
"type": "open_collective"
}
],
- "time": "2024-05-24T10:39:05+00:00"
+ "time": "2025-08-19T18:57:03+00:00"
},
{
"name": "react/socket",
- "version": "v1.16.0",
+ "version": "v1.17.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/socket.git",
- "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1"
+ "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
- "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
+ "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08",
+ "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08",
"shasum": ""
},
"require": {
@@ -2444,7 +2454,7 @@
],
"support": {
"issues": "https://github.com/reactphp/socket/issues",
- "source": "https://github.com/reactphp/socket/tree/v1.16.0"
+ "source": "https://github.com/reactphp/socket/tree/v1.17.0"
},
"funding": [
{
@@ -2452,7 +2462,7 @@
"type": "open_collective"
}
],
- "time": "2024-07-26T10:38:09+00:00"
+ "time": "2025-11-19T20:47:34+00:00"
},
{
"name": "react/stream",
@@ -2702,16 +2712,16 @@
},
{
"name": "sebastian/comparator",
- "version": "5.0.3",
+ "version": "5.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e"
+ "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
- "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d",
+ "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d",
"shasum": ""
},
"require": {
@@ -2767,15 +2777,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
+ "type": "tidelift"
}
],
- "time": "2024-10-18T14:56:07+00:00"
+ "time": "2026-01-24T09:25:16+00:00"
},
{
"name": "sebastian/complexity",
@@ -2968,16 +2990,16 @@
},
{
"name": "sebastian/exporter",
- "version": "5.1.2",
+ "version": "5.1.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "955288482d97c19a372d3f31006ab3f37da47adf"
+ "reference": "0735b90f4da94969541dac1da743446e276defa6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf",
- "reference": "955288482d97c19a372d3f31006ab3f37da47adf",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6",
+ "reference": "0735b90f4da94969541dac1da743446e276defa6",
"shasum": ""
},
"require": {
@@ -2986,7 +3008,7 @@
"sebastian/recursion-context": "^5.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^10.5"
},
"type": "library",
"extra": {
@@ -3034,15 +3056,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"security": "https://github.com/sebastianbergmann/exporter/security/policy",
- "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2"
+ "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
+ "type": "tidelift"
}
],
- "time": "2024-03-02T07:17:12+00:00"
+ "time": "2025-09-24T06:09:11+00:00"
},
{
"name": "sebastian/global-state",
@@ -3278,23 +3312,23 @@
},
{
"name": "sebastian/recursion-context",
- "version": "5.0.0",
+ "version": "5.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "05909fb5bc7df4c52992396d0116aed689f93712"
+ "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712",
- "reference": "05909fb5bc7df4c52992396d0116aed689f93712",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a",
+ "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^10.5"
},
"type": "library",
"extra": {
@@ -3329,15 +3363,28 @@
"homepage": "https://github.com/sebastianbergmann/recursion-context",
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0"
+ "security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
+ "type": "tidelift"
}
],
- "time": "2023-02-03T07:05:40+00:00"
+ "time": "2025-08-10T07:50:56+00:00"
},
{
"name": "sebastian/type",
@@ -3450,16 +3497,16 @@
},
{
"name": "squizlabs/php_codesniffer",
- "version": "3.11.3",
+ "version": "3.13.5",
"source": {
"type": "git",
"url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
- "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10"
+ "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10",
- "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4",
+ "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4",
"shasum": ""
},
"require": {
@@ -3476,11 +3523,6 @@
"bin/phpcs"
],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.x-dev"
- }
- },
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
@@ -3526,55 +3568,55 @@
"type": "open_collective"
},
{
- "url": "https://thanks.dev/phpcsstandards",
+ "url": "https://thanks.dev/u/gh/phpcsstandards",
"type": "thanks_dev"
}
],
- "time": "2025-01-23T17:04:15+00:00"
+ "time": "2025-11-04T16:30:35+00:00"
},
{
"name": "symfony/console",
- "version": "v6.4.17",
+ "version": "v7.4.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "799445db3f15768ecc382ac5699e6da0520a0a04"
+ "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/799445db3f15768ecc382ac5699e6da0520a0a04",
- "reference": "799445db3f15768ecc382ac5699e6da0520a0a04",
+ "url": "https://api.github.com/repos/symfony/console/zipball/1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707",
+ "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/string": "^5.4|^6.0|^7.0"
+ "symfony/string": "^7.2|^8.0"
},
"conflict": {
- "symfony/dependency-injection": "<5.4",
- "symfony/dotenv": "<5.4",
- "symfony/event-dispatcher": "<5.4",
- "symfony/lock": "<5.4",
- "symfony/process": "<5.4"
+ "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": "^5.4|^6.0|^7.0",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
- "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/lock": "^5.4|^6.0|^7.0",
- "symfony/messenger": "^5.4|^6.0|^7.0",
- "symfony/process": "^5.4|^6.0|^7.0",
- "symfony/stopwatch": "^5.4|^6.0|^7.0",
- "symfony/var-dumper": "^5.4|^6.0|^7.0"
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/lock": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -3608,7 +3650,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.17"
+ "source": "https://github.com/symfony/console/tree/v7.4.8"
},
"funding": [
{
@@ -3619,25 +3661,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-07T12:07:30+00:00"
+ "time": "2026-03-30T13:54:39+00:00"
},
{
"name": "symfony/deprecation-contracts",
- "version": "v3.5.1",
+ "version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
- "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
"shasum": ""
},
"require": {
@@ -3650,7 +3696,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.5-dev"
+ "dev-main": "3.6-dev"
}
},
"autoload": {
@@ -3675,7 +3721,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
},
"funding": [
{
@@ -3691,28 +3737,28 @@
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v6.4.13",
+ "version": "v7.4.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e"
+ "reference": "f57b899fa736fd71121168ef268f23c206083f0a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e",
- "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f57b899fa736fd71121168ef268f23c206083f0a",
+ "reference": "f57b899fa736fd71121168ef268f23c206083f0a",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/event-dispatcher-contracts": "^2.5|^3"
},
"conflict": {
- "symfony/dependency-injection": "<5.4",
+ "symfony/dependency-injection": "<6.4",
"symfony/service-contracts": "<2.5"
},
"provide": {
@@ -3721,13 +3767,14 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^5.4|^6.0|^7.0",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
- "symfony/error-handler": "^5.4|^6.0|^7.0",
- "symfony/expression-language": "^5.4|^6.0|^7.0",
- "symfony/http-foundation": "^5.4|^6.0|^7.0",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/error-handler": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/framework-bundle": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/stopwatch": "^5.4|^6.0|^7.0"
+ "symfony/stopwatch": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -3755,7 +3802,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.13"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.8"
},
"funding": [
{
@@ -3766,25 +3813,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:18:03+00:00"
+ "time": "2026-03-30T13:54:39+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
- "version": "v3.5.1",
+ "version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f"
+ "reference": "59eb412e93815df44f05f342958efa9f46b1e586"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f",
- "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
+ "reference": "59eb412e93815df44f05f342958efa9f46b1e586",
"shasum": ""
},
"require": {
@@ -3798,7 +3849,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.5-dev"
+ "dev-main": "3.6-dev"
}
},
"autoload": {
@@ -3831,7 +3882,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1"
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0"
},
"funding": [
{
@@ -3847,29 +3898,29 @@
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v6.4.13",
+ "version": "v7.4.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3"
+ "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3",
- "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/58b9790d12f9670b7f53a1c1738febd3108970a5",
+ "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8"
},
"require-dev": {
- "symfony/process": "^5.4|^6.4|^7.0"
+ "symfony/process": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -3897,7 +3948,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v6.4.13"
+ "source": "https://github.com/symfony/filesystem/tree/v7.4.8"
},
"funding": [
{
@@ -3908,29 +3959,33 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-10-25T15:07:50+00:00"
+ "time": "2026-03-24T13:12:05+00:00"
},
{
"name": "symfony/options-resolver",
- "version": "v6.4.16",
+ "version": "v7.4.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
- "reference": "368128ad168f20e22c32159b9f761e456cec0c78"
+ "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/368128ad168f20e22c32159b9f761e456cec0c78",
- "reference": "368128ad168f20e22c32159b9f761e456cec0c78",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2888fcdc4dc2fd5f7c7397be78631e8af12e02b4",
+ "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3"
},
"type": "library",
@@ -3964,7 +4019,7 @@
"options"
],
"support": {
- "source": "https://github.com/symfony/options-resolver/tree/v6.4.16"
+ "source": "https://github.com/symfony/options-resolver/tree/v7.4.8"
},
"funding": [
{
@@ -3975,16 +4030,20 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-11-20T10:57:02+00:00"
+ "time": "2026-03-24T13:12:05+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
@@ -4043,7 +4102,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
},
"funding": [
{
@@ -4054,6 +4113,10 @@
"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"
@@ -4063,16 +4126,16 @@
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
"shasum": ""
},
"require": {
@@ -4121,7 +4184,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
},
"funding": [
{
@@ -4132,16 +4195,20 @@
"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"
+ "time": "2025-06-27T09:58:17+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -4202,7 +4269,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
},
"funding": [
{
@@ -4213,6 +4280,10 @@
"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"
@@ -4222,19 +4293,20 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
"shasum": ""
},
"require": {
+ "ext-iconv": "*",
"php": ">=7.2"
},
"provide": {
@@ -4282,7 +4354,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
},
"funding": [
{
@@ -4293,25 +4365,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2024-12-23T08:48:59+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
- "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"shasum": ""
},
"require": {
@@ -4362,7 +4438,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
},
"funding": [
{
@@ -4373,16 +4449,20 @@
"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"
+ "time": "2025-01-02T08:10:11+00:00"
},
{
"name": "symfony/polyfill-php81",
- "version": "v1.31.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
@@ -4438,7 +4518,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0"
},
"funding": [
{
@@ -4449,6 +4529,10 @@
"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"
@@ -4456,22 +4540,102 @@
],
"time": "2024-09-09T11:45:10+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/process",
- "version": "v6.4.19",
+ "version": "v7.4.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3"
+ "reference": "60f19cd3badc8de688421e21e4305eba50f8089a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3",
- "reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3",
+ "url": "https://api.github.com/repos/symfony/process/zipball/60f19cd3badc8de688421e21e4305eba50f8089a",
+ "reference": "60f19cd3badc8de688421e21e4305eba50f8089a",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"type": "library",
"autoload": {
@@ -4499,7 +4663,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.19"
+ "source": "https://github.com/symfony/process/tree/v7.4.8"
},
"funding": [
{
@@ -4510,25 +4674,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-04T13:35:48+00:00"
+ "time": "2026-03-24T13:12:05+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v3.5.1",
+ "version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0"
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
- "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
"shasum": ""
},
"require": {
@@ -4546,7 +4714,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.5-dev"
+ "dev-main": "3.6-dev"
}
},
"autoload": {
@@ -4582,7 +4750,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.5.1"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
},
"funding": [
{
@@ -4593,29 +4761,33 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2025-07-15T11:30:57+00:00"
},
{
"name": "symfony/stopwatch",
- "version": "v6.4.19",
+ "version": "v7.4.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
- "reference": "dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c"
+ "reference": "70a852d72fec4d51efb1f48dcd968efcaf5ccb89"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c",
- "reference": "dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/70a852d72fec4d51efb1f48dcd968efcaf5ccb89",
+ "reference": "70a852d72fec4d51efb1f48dcd968efcaf5ccb89",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/service-contracts": "^2.5|^3"
},
"type": "library",
@@ -4644,7 +4816,7 @@
"description": "Provides a way to profile code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/stopwatch/tree/v6.4.19"
+ "source": "https://github.com/symfony/stopwatch/tree/v7.4.8"
},
"funding": [
{
@@ -4655,31 +4827,36 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-21T10:06:30+00:00"
+ "time": "2026-03-24T13:12:05+00:00"
},
{
"name": "symfony/string",
- "version": "v6.4.15",
+ "version": "v7.4.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f"
+ "reference": "114ac57257d75df748eda23dd003878080b8e688"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f",
- "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f",
+ "url": "https://api.github.com/repos/symfony/string/zipball/114ac57257d75df748eda23dd003878080b8e688",
+ "reference": "114ac57257d75df748eda23dd003878080b8e688",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3.0",
"symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-grapheme": "~1.33",
"symfony/polyfill-intl-normalizer": "~1.0",
"symfony/polyfill-mbstring": "~1.0"
},
@@ -4687,11 +4864,11 @@
"symfony/translation-contracts": "<2.5"
},
"require-dev": {
- "symfony/error-handler": "^5.4|^6.0|^7.0",
- "symfony/http-client": "^5.4|^6.0|^7.0",
- "symfony/intl": "^6.2|^7.0",
+ "symfony/emoji": "^7.1|^8.0",
+ "symfony/http-client": "^6.4|^7.0|^8.0",
+ "symfony/intl": "^6.4|^7.0|^8.0",
"symfony/translation-contracts": "^2.5|^3.0",
- "symfony/var-exporter": "^5.4|^6.0|^7.0"
+ "symfony/var-exporter": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -4730,7 +4907,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.4.15"
+ "source": "https://github.com/symfony/string/tree/v7.4.8"
},
"funding": [
{
@@ -4741,25 +4918,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-11-13T13:31:12+00:00"
+ "time": "2026-03-24T13:12:05+00:00"
},
{
"name": "theseer/tokenizer",
- "version": "1.2.3",
+ "version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c",
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c",
"shasum": ""
},
"require": {
@@ -4788,7 +4969,7 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+ "source": "https://github.com/theseer/tokenizer/tree/1.3.1"
},
"funding": [
{
@@ -4796,7 +4977,7 @@
"type": "github"
}
],
- "time": "2024-03-03T12:36:25+00:00"
+ "time": "2025-11-17T20:03:58+00:00"
}
],
"aliases": [],
diff --git a/js/metabox-toggle.js b/js/metabox-toggle.js
new file mode 100644
index 0000000..ab31704
--- /dev/null
+++ b/js/metabox-toggle.js
@@ -0,0 +1,32 @@
+(function () {
+ var checkbox = document.getElementById('_pdc-lege-use-percentage');
+
+ if (!checkbox) {
+ return;
+ }
+
+ var priceFields = [
+ document.getElementById('_pdc-lege-price').closest('.cmb-row'),
+ document.getElementById('_pdc-lege-new-price').closest('.cmb-row'),
+ ];
+
+ var percentageFields = [
+ document.getElementById('_pdc-lege-percentage').closest('.cmb-row'),
+ document.getElementById('_pdc-lege-new-percentage').closest('.cmb-row'),
+ ];
+
+ function toggle() {
+ var usePercentage = checkbox.checked;
+
+ priceFields.forEach(function (row) {
+ row.style.display = usePercentage ? 'none' : '';
+ });
+
+ percentageFields.forEach(function (row) {
+ row.style.display = usePercentage ? '' : 'none';
+ });
+ }
+
+ checkbox.addEventListener('change', toggle);
+ toggle();
+})();
diff --git a/languages/pdc-leges-nl_NL.mo b/languages/pdc-leges-nl_NL.mo
index bb3242e..70e6226 100644
Binary files a/languages/pdc-leges-nl_NL.mo and b/languages/pdc-leges-nl_NL.mo differ
diff --git a/languages/pdc-leges-nl_NL.po b/languages/pdc-leges-nl_NL.po
index cb41ba0..ea2bd9a 100644
--- a/languages/pdc-leges-nl_NL.po
+++ b/languages/pdc-leges-nl_NL.po
@@ -51,17 +51,25 @@ msgstr "Breid de geregistreerde metaboxen uit met de volgende functies: een drem
msgid "The following plugins are required to use the PDC Leges:"
msgstr "De PDC Leges plugin heeft de volgende plugins nodig om te functioneren:"
-#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:186
+#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:154
msgid "New price"
msgstr "Nieuw bedrag"
-#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:190
+#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:158
msgid "Price"
msgstr "Bedrag"
-#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:194
-#: src/Leges/Metabox/Metabox.php:64
-#: src/Leges/PostType/LegesPostTypeServiceProvider.php:68
+#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:162
+msgid "Percentage"
+msgstr "Percentage"
+
+#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:167
+msgid "New percentage"
+msgstr "Nieuw percentage"
+
+#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:172
+#: src/Leges/Metabox/Metabox.php:78
+#: src/Leges/PostType/LegesPostTypeServiceProvider.php:89
msgid "Date new lege active"
msgstr "Datum actief nieuwe lege"
@@ -82,7 +90,24 @@ msgstr "Prijs in €"
msgid "Lege new price"
msgstr "Lege nieuw bedrag"
-#: src/Leges/Metabox/Metabox.php:69
+#: src/Leges/Metabox/Metabox.php:56
+msgid "Lege percentage"
+msgstr "Lege percentage"
+
+#: src/Leges/Metabox/Metabox.php:57
+#: src/Leges/Metabox/Metabox.php:65
+msgid "Percentage (%)"
+msgstr "Percentage (%)"
+
+#: src/Leges/Metabox/Metabox.php:64
+msgid "Lege new percentage"
+msgstr "Nieuw percentage"
+
+#: src/Leges/Metabox/Metabox.php:72
+msgid "Use percentage instead of price"
+msgstr "Gebruik percentage in plaats van prijs"
+
+#: src/Leges/Metabox/Metabox.php:83
msgid "dd-mm-yy"
msgstr "dd-mm-yy"
@@ -183,10 +208,6 @@ msgstr "Geen leges gevonden."
msgid "No leges found in Trash."
msgstr "Geen leges gevonden in de prullenbak."
-#: src/Leges/PostType/LegesPostTypeServiceProvider.php:45
-msgid "PDC leges"
-msgstr "PDC leges"
-
#: src/Leges/PostType/LegesPostTypeServiceProvider.php:60
msgid "Lege price (in €)"
msgstr "Lege prijs (in €)"
@@ -195,7 +216,15 @@ msgstr "Lege prijs (in €)"
msgid "Lege new price (in €)"
msgstr "Nieuwe lege prijs (in €)"
-#: src/Leges/PostType/LegesPostTypeServiceProvider.php:73
+#: src/Leges/PostType/LegesPostTypeServiceProvider.php:75
+msgid "Lege percentage (%)"
+msgstr "Lege percentage (%)"
+
+#: src/Leges/PostType/LegesPostTypeServiceProvider.php:82
+msgid "Lege new percentage (%)"
+msgstr "Nieuw lege percentage (%)"
+
+#: src/Leges/PostType/LegesPostTypeServiceProvider.php:94
msgid "Lege shortcode"
msgstr "Lege shortcode"
diff --git a/languages/pdc-leges.pot b/languages/pdc-leges.pot
index 9667e3a..2d2139b 100644
--- a/languages/pdc-leges.pot
+++ b/languages/pdc-leges.pot
@@ -51,17 +51,25 @@ msgstr ""
msgid "The following plugins are required to use the PDC Leges:"
msgstr ""
-#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:186
+#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:154
msgid "New price"
msgstr ""
-#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:190
+#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:158
msgid "Price"
msgstr ""
-#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:194
-#: src/Leges/Metabox/Metabox.php:64
-#: src/Leges/PostType/LegesPostTypeServiceProvider.php:68
+#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:162
+msgid "Percentage"
+msgstr ""
+
+#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:167
+msgid "New percentage"
+msgstr ""
+
+#: src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php:172
+#: src/Leges/Metabox/Metabox.php:78
+#: src/Leges/PostType/LegesPostTypeServiceProvider.php:89
msgid "Date new lege active"
msgstr ""
@@ -82,7 +90,24 @@ msgstr ""
msgid "Lege new price"
msgstr ""
-#: src/Leges/Metabox/Metabox.php:69
+#: src/Leges/Metabox/Metabox.php:56
+msgid "Lege percentage"
+msgstr ""
+
+#: src/Leges/Metabox/Metabox.php:57
+#: src/Leges/Metabox/Metabox.php:65
+msgid "Percentage (%)"
+msgstr ""
+
+#: src/Leges/Metabox/Metabox.php:64
+msgid "Lege new percentage"
+msgstr ""
+
+#: src/Leges/Metabox/Metabox.php:72
+msgid "Use percentage instead of price"
+msgstr ""
+
+#: src/Leges/Metabox/Metabox.php:83
msgid "dd-mm-yy"
msgstr ""
@@ -195,7 +220,15 @@ msgstr ""
msgid "Lege new price (in €)"
msgstr ""
-#: src/Leges/PostType/LegesPostTypeServiceProvider.php:73
+#: src/Leges/PostType/LegesPostTypeServiceProvider.php:75
+msgid "Lege percentage (%)"
+msgstr ""
+
+#: src/Leges/PostType/LegesPostTypeServiceProvider.php:82
+msgid "Lege new percentage (%)"
+msgstr ""
+
+#: src/Leges/PostType/LegesPostTypeServiceProvider.php:94
msgid "Lege shortcode"
msgstr ""
diff --git a/src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php b/src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php
index d61bea0..a811f23 100644
--- a/src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php
+++ b/src/Leges/Admin/QuickEdit/QuickEditServiceProvider.php
@@ -3,10 +3,12 @@
namespace OWC\PDC\Leges\Admin\QuickEdit;
use OWC\PDC\Base\Foundation\ServiceProvider;
+use OWC\PDC\Leges\Traits\NumberSanitizer;
use WP_Post;
class QuickEditServiceProvider extends ServiceProvider
{
+ use NumberSanitizer;
/**
* Prefix for the quickedit.
*/
@@ -120,13 +122,7 @@ public function registerQuickEditHandler(string $columnName, string $postType):
continue;
}
- $method = explode('-', $key);
- $method = array_map('ucfirst', $method);
- $method = implode('', $method);
-
- if (method_exists($this, $method)) {
- $this->$method($handler);
- }
+ $this->renderField($handler);
}
echo '
@@ -134,37 +130,9 @@ public function registerQuickEditHandler(string $columnName, string $postType):
}
/**
- * Adds active date to quickedit handler.
+ * Renders a quickedit input field for the given handler.
*/
- protected function activeDate(array $item): void
- {
- $value = get_post_meta(get_the_ID(), $item['metaboxKey'], true); ?>
-
-
-
-
-
-
@@ -189,6 +157,16 @@ public function setQuickEditHandlers(): array
'metaboxKey' => sprintf('%s-%s', $this->prefix, 'price'),
'label' => __('Price', 'pdc-leges'),
],
+ 'percentage' => [
+ 'metaboxKey' => sprintf('%s-%s', $this->prefix, 'percentage'),
+ 'label' => __('Percentage', 'pdc-leges'),
+ 'sanitize_cb' => [$this, 'sanitizeFloatFourDecimals'],
+ ],
+ 'new-percentage' => [
+ 'metaboxKey' => sprintf('%s-%s', $this->prefix, 'new-percentage'),
+ 'label' => __('New percentage', 'pdc-leges'),
+ 'sanitize_cb' => [$this, 'sanitizeFloatFourDecimals'],
+ ],
'active-date' => [
'metaboxKey' => sprintf('%s-%s', $this->prefix, 'active-date'),
'label' => __('Date new lege active', 'pdc-leges'),
@@ -220,10 +198,17 @@ public function registerSavePostHandler(int $postID, WP_Post $post): void
}
foreach ($this->getQuickEditHandlers() as $key => $handler) {
- // update!
- if (isset($_POST["{$this->prefix}-{$key}"])) {
- update_post_meta($postID, "{$this->prefix}-{$key}", $_POST["{$this->prefix}-{$key}"]);
+ if (! isset($_POST["{$this->prefix}-{$key}"])) {
+ continue;
}
+
+ $value = wp_unslash($_POST["{$this->prefix}-{$key}"]);
+
+ if (isset($handler['sanitize_cb']) && is_callable($handler['sanitize_cb'])) {
+ $value = call_user_func($handler['sanitize_cb'], $value);
+ }
+
+ update_post_meta($postID, "{$this->prefix}-{$key}", $value);
}
}
diff --git a/src/Leges/Foundation/Plugin.php b/src/Leges/Foundation/Plugin.php
index ee9b499..4491a95 100644
--- a/src/Leges/Foundation/Plugin.php
+++ b/src/Leges/Foundation/Plugin.php
@@ -25,6 +25,11 @@ class Plugin extends BasePlugin
*/
const VERSION = '2.2.10';
+ public function loadTextDomain(): void
+ {
+ load_plugin_textdomain($this->getName(), false, basename($this->rootPath) . '/languages/');
+ }
+
protected function checkForUpdate()
{
if (! class_exists(PucFactory::class) || $this->isExtendedClass()) {
diff --git a/src/Leges/Metabox/Metabox.php b/src/Leges/Metabox/Metabox.php
index 8f335f7..715f50e 100644
--- a/src/Leges/Metabox/Metabox.php
+++ b/src/Leges/Metabox/Metabox.php
@@ -52,6 +52,28 @@ protected function addDefaultFields(CMB2 $cmb): void
'sanitization_cb' => [$this, 'sanitizeFloat'],
]);
+ $cmb->add_field([
+ 'name' => __('Lege percentage', 'pdc-leges'),
+ 'desc' => __('Percentage (%)', 'pdc-leges'),
+ 'id' => sprintf('%s-percentage', self::PREFIX),
+ 'type' => 'text',
+ 'sanitization_cb' => [$this, 'sanitizeFloatFourDecimals'],
+ ]);
+
+ $cmb->add_field([
+ 'name' => __('Lege new percentage', 'pdc-leges'),
+ 'desc' => __('Percentage (%)', 'pdc-leges'),
+ 'id' => sprintf('%s-new-percentage', self::PREFIX),
+ 'type' => 'text',
+ 'sanitization_cb' => [$this, 'sanitizeFloatFourDecimals'],
+ ]);
+
+ $cmb->add_field([
+ 'name' => __('Use percentage instead of price', 'pdc-leges'),
+ 'id' => sprintf('%s-use-percentage', self::PREFIX),
+ 'type' => 'checkbox',
+ ]);
+
$cmb->add_field([
'name' => esc_html__('Date new lege active', 'pdc-leges'),
'id' => sprintf('%s-active-date', self::PREFIX),
diff --git a/src/Leges/Metabox/MetaboxServiceProvider.php b/src/Leges/Metabox/MetaboxServiceProvider.php
index e04de0b..0a9eb3f 100644
--- a/src/Leges/Metabox/MetaboxServiceProvider.php
+++ b/src/Leges/Metabox/MetaboxServiceProvider.php
@@ -3,11 +3,30 @@
namespace OWC\PDC\Leges\Metabox;
use OWC\PDC\Base\Foundation\ServiceProvider;
+use OWC\PDC\Leges\Foundation\Plugin;
class MetaboxServiceProvider extends ServiceProvider
{
public function register(): void
{
add_filter('cmb2_admin_init', [new Metabox(), 'registerMetaboxes'], 10, 0);
+ add_action('admin_enqueue_scripts', [$this, 'enqueueScripts']);
+ }
+
+ public function enqueueScripts(): void
+ {
+ $screen = get_current_screen();
+
+ if (! $screen || 'pdc-leges' !== $screen->post_type || 'post' !== $screen->base) {
+ return;
+ }
+
+ wp_enqueue_script(
+ 'pdc-leges-metabox-toggle',
+ plugins_url('/js/metabox-toggle.js', $this->plugin->getRootPath() . '/pdc-leges.php'),
+ [],
+ Plugin::VERSION,
+ true
+ );
}
}
diff --git a/src/Leges/PostType/LegesPostTypeServiceProvider.php b/src/Leges/PostType/LegesPostTypeServiceProvider.php
index 499ffb6..13ca3ef 100644
--- a/src/Leges/PostType/LegesPostTypeServiceProvider.php
+++ b/src/Leges/PostType/LegesPostTypeServiceProvider.php
@@ -71,6 +71,20 @@ public function registerPostType(): PostType
echo $price ? number_format_i18n((float) $price, 2) : '';
},
],
+ 'percentage' => [
+ 'title' => __('Lege percentage (%)', 'pdc-leges'),
+ 'function' => function () {
+ $percentage = get_post_meta(get_the_ID(), "{$this->prefix}-percentage", true);
+ echo ('' !== $percentage && null !== $percentage) ? esc_html(str_replace('.', ',', $percentage)) . '%' : '';
+ },
+ ],
+ 'new-percentage' => [
+ 'title' => __('Lege new percentage (%)', 'pdc-leges'),
+ 'function' => function () {
+ $percentage = get_post_meta(get_the_ID(), "{$this->prefix}-new-percentage", true);
+ echo ('' !== $percentage && null !== $percentage) ? esc_html(str_replace('.', ',', $percentage)) . '%' : '';
+ },
+ ],
'active-date' => [
'title' => __('Date new lege active', 'pdc-leges'),
'meta_key' => "{$this->prefix}-active-date",
diff --git a/src/Leges/RestAPI/Controllers/LegesController.php b/src/Leges/RestAPI/Controllers/LegesController.php
index 500dfe8..8212c24 100644
--- a/src/Leges/RestAPI/Controllers/LegesController.php
+++ b/src/Leges/RestAPI/Controllers/LegesController.php
@@ -62,6 +62,8 @@ protected function checkAllowedMetaKeys(string $metaKey): bool
$allowed = apply_filters('owc/pdc/leges/rest-api/args/allowed-meta-keys', [
'_pdc-lege-price',
'_pdc-lege-new-price',
+ '_pdc-lege-percentage',
+ '_pdc-lege-new-percentage',
'_pdc-lege-active-date',
'_pdc-lege-start-time',
'_pdc-lege-end-time',
diff --git a/src/Leges/RestAPI/Repositories/LegesRepository.php b/src/Leges/RestAPI/Repositories/LegesRepository.php
index 5c9ff58..a8b3f4f 100644
--- a/src/Leges/RestAPI/Repositories/LegesRepository.php
+++ b/src/Leges/RestAPI/Repositories/LegesRepository.php
@@ -30,6 +30,9 @@ public function transform(WP_Post $post): array
'price' => get_post_meta($post->ID, '_pdc-lege-price', true) ?: null,
'new_price' => get_post_meta($post->ID, '_pdc-lege-new-price', true) ?: null,
'new_price_active_date' => get_post_meta($post->ID, '_pdc-lege-active-date', true) ?: null,
+ 'percentage' => '' === ($percentage = get_post_meta($post->ID, '_pdc-lege-percentage', true)) ? null : $percentage,
+ 'new_percentage' => '' === ($newPercentage = get_post_meta($post->ID, '_pdc-lege-new-percentage', true)) ? null : $newPercentage,
+ 'use_percentage' => get_post_meta($post->ID, '_pdc-lege-use-percentage', true) === 'on',
], $this->extendedMetaboxValues($post));
}
diff --git a/src/Leges/Shortcode/Shortcode.php b/src/Leges/Shortcode/Shortcode.php
index 086670f..b542df0 100644
--- a/src/Leges/Shortcode/Shortcode.php
+++ b/src/Leges/Shortcode/Shortcode.php
@@ -17,6 +17,9 @@ class Shortcode
'_pdc-lege-active-date' => null,
'_pdc-lege-price' => null,
'_pdc-lege-new-price' => null,
+ '_pdc-lege-percentage' => null,
+ '_pdc-lege-new-percentage' => null,
+ '_pdc-lege-use-percentage' => null,
];
/**
@@ -36,7 +39,19 @@ public function addShortcode(array $attributes): string
return false;
}
- ['price' => $price, 'newPrice' => $newPrice, 'dateActive' => $dateActive] = $this->extractMeta($attributes);
+ ['price' => $price, 'newPrice' => $newPrice, 'dateActive' => $dateActive, 'percentage' => $percentage, 'newPercentage' => $newPercentage, 'usePercentage' => $usePercentage] = $this->extractMeta($attributes);
+
+ if ('on' === $usePercentage) {
+ if ($this->hasDate($dateActive) && $this->dateIsNow($dateActive) && '' !== $newPercentage && null !== $newPercentage) {
+ $percentage = $newPercentage;
+ }
+
+ $format = apply_filters('owc/pdc/leges/shortcode/percentage/format', '%s%%');
+ $output = sprintf($format, esc_html(str_replace('.', ',', $percentage)));
+ $output = apply_filters('owc/pdc/leges/shortcode/after-format', $output);
+
+ return wp_kses_post($output) ?? '';
+ }
if ($this->hasDate($dateActive) && $this->dateIsNow($dateActive) && (0 < strlen($newPrice) || $this->sanitizeAndCheckNumeric($newPrice))) {
$price = $newPrice;
@@ -58,6 +73,9 @@ protected function extractMeta(array $attributes): array
'price' => $metaData['_pdc-lege-price'] ?? '',
'newPrice' => $metaData['_pdc-lege-new-price'] ?? '',
'dateActive' => $metaData['_pdc-lege-active-date'] ?? '',
+ 'percentage' => $metaData['_pdc-lege-percentage'] ?? '',
+ 'newPercentage' => $metaData['_pdc-lege-new-percentage'] ?? '',
+ 'usePercentage' => $metaData['_pdc-lege-use-percentage'] ?? '',
];
}
diff --git a/src/Leges/Traits/NumberSanitizer.php b/src/Leges/Traits/NumberSanitizer.php
index ef0d417..d819628 100644
--- a/src/Leges/Traits/NumberSanitizer.php
+++ b/src/Leges/Traits/NumberSanitizer.php
@@ -8,6 +8,22 @@ trait NumberSanitizer
* Sanitize and format a value to a float with two decimal places.
*/
public function sanitizeFloat($value): string
+ {
+ return $this->sanitizeFloatWithDecimals($value, 2);
+ }
+
+ /**
+ * Sanitize and format a value to a float with four decimal places.
+ */
+ public function sanitizeFloatFourDecimals($value): string
+ {
+ return $this->sanitizeFloatWithDecimals($value, 4);
+ }
+
+ /**
+ * Sanitize and format a value to a float with the given number of decimal places.
+ */
+ private function sanitizeFloatWithDecimals($value, int $decimals): string
{
// Ensure the input is a string and not empty.
if (! is_string($value) || strlen($value) < 1) {
@@ -23,8 +39,7 @@ public function sanitizeFloat($value): string
// Sanitize the value to allow only numeric data with fractional parts.
$sanitized_value = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
- // Convert the value to a float and format it with two decimal places.
- return number_format((float)$sanitized_value, 2, '.', '');
+ return number_format((float)$sanitized_value, $decimals, '.', '');
}
/**
diff --git a/src/Leges/WPCron/Events/UpdateLegesPrices.php b/src/Leges/WPCron/Events/UpdateLegesPrices.php
index 79b5cf6..15f438c 100644
--- a/src/Leges/WPCron/Events/UpdateLegesPrices.php
+++ b/src/Leges/WPCron/Events/UpdateLegesPrices.php
@@ -15,6 +15,8 @@ class UpdateLegesPrices extends AbstractEvent
private const META_NEW_PRICE = '_pdc-lege-new-price';
private const META_ACTIVE_DATE = '_pdc-lege-active-date';
private const META_PRICE = '_pdc-lege-price';
+ private const META_PERCENTAGE = '_pdc-lege-percentage';
+ private const META_NEW_PERCENTAGE = '_pdc-lege-new-percentage';
protected function execute(): void
{
@@ -46,14 +48,22 @@ protected function getLeges(): array
'meta_query' => [
'relation' => 'AND',
[
- 'key' => self::META_NEW_PRICE,
+ 'key' => self::META_ACTIVE_DATE,
'value' => '',
'compare' => '!=',
],
[
- 'key' => self::META_ACTIVE_DATE,
- 'value' => '',
- 'compare' => '!=',
+ 'relation' => 'OR',
+ [
+ 'key' => self::META_NEW_PRICE,
+ 'value' => '',
+ 'compare' => '!=',
+ ],
+ [
+ 'key' => self::META_NEW_PERCENTAGE,
+ 'value' => '',
+ 'compare' => '!=',
+ ],
],
],
]);
@@ -102,9 +112,20 @@ public function shouldUpdate(int $postID): bool
*/
protected function updatePostMeta(WP_Post $lege): void
{
- $currentPrice = get_post_meta($lege->ID, self::META_PRICE, true);
+ $this->updatePrice($lege);
+ $this->updatePercentage($lege);
+
+ update_post_meta($lege->ID, self::META_ACTIVE_DATE, '');
+ }
+
+ protected function updatePrice(WP_Post $lege): void
+ {
$newPrice = get_post_meta($lege->ID, self::META_NEW_PRICE, true);
+ if (empty($newPrice)) {
+ return;
+ }
+
if (! $this->sanitizeAndCheckNumeric($newPrice)) {
$this->logError(sprintf(
'Could not update lege [%s], new price meta field is not numeric (value: %s).',
@@ -115,6 +136,7 @@ protected function updatePostMeta(WP_Post $lege): void
return;
}
+ $currentPrice = get_post_meta($lege->ID, self::META_PRICE, true);
$updated = update_post_meta($lege->ID, self::META_PRICE, $newPrice);
/**
@@ -123,13 +145,42 @@ protected function updatePostMeta(WP_Post $lege): void
* If they are not the same, something else went wrong, so stop the current iteration.
*/
if (! $updated && $currentPrice !== $newPrice) {
- $this->logError(sprintf('could not update lege [%s].', $lege->post_title));
+ $this->logError(sprintf('could not update lege price [%s].', $lege->post_title));
return;
}
update_post_meta($lege->ID, self::META_NEW_PRICE, '');
- update_post_meta($lege->ID, self::META_ACTIVE_DATE, '');
+ }
+
+ protected function updatePercentage(WP_Post $lege): void
+ {
+ $newPercentage = get_post_meta($lege->ID, self::META_NEW_PERCENTAGE, true);
+
+ if (empty($newPercentage)) {
+ return;
+ }
+
+ if (! $this->sanitizeAndCheckNumeric($newPercentage)) {
+ $this->logError(sprintf(
+ 'Could not update lege [%s], new percentage meta field is not numeric (value: %s).',
+ $lege->post_title,
+ var_export($newPercentage, true)
+ ));
+
+ return;
+ }
+
+ $currentPercentage = get_post_meta($lege->ID, self::META_PERCENTAGE, true);
+ $updated = update_post_meta($lege->ID, self::META_PERCENTAGE, $newPercentage);
+
+ if (! $updated && $currentPercentage !== $newPercentage) {
+ $this->logError(sprintf('could not update lege percentage [%s].', $lege->post_title));
+
+ return;
+ }
+
+ update_post_meta($lege->ID, self::META_NEW_PERCENTAGE, '');
}
/**
diff --git a/tests/Unit/Leges/Admin/QuickEdit/QuickEditServiceProviderTest.php b/tests/Unit/Leges/Admin/QuickEdit/QuickEditServiceProviderTest.php
index 018e582..2c6b4a4 100644
--- a/tests/Unit/Leges/Admin/QuickEdit/QuickEditServiceProviderTest.php
+++ b/tests/Unit/Leges/Admin/QuickEdit/QuickEditServiceProviderTest.php
@@ -119,17 +119,19 @@ public function it_adds_actions_to_rows_if_all_metadata_is_filled_in()
$actions['inline hide-if-no-js'] = 'Snel bewerken';
WP_Mock::userFunction('get_post_meta', [
- 'times' => 3,
+ 'times' => 5,
'return_in_order' => [
'130',
'120',
+ '0.1234',
+ '0.5678',
'23-05-2018',
],
]);
$this->service->setQuickEditHandlers();
$actual = $this->service->addRowActions($actions, $this->post);
- $expected['inline hide-if-no-js'] = 'Snel bewerken';
+ $expected['inline hide-if-no-js'] = 'Snel bewerken';
$this->assertEquals($expected, $actual);
}
@@ -140,10 +142,12 @@ public function it_adds_actions_to_rows_if_not_all_metadata_is_filled_in()
$actions['inline hide-if-no-js'] = 'Snel bewerken';
WP_Mock::userFunction('get_post_meta', [
- 'times' => 3,
+ 'times' => 5,
'return_in_order' => [
null,
'120',
+ null,
+ null,
'23-05-2018',
],
]);
@@ -212,6 +216,10 @@ public function if_returns_null_if_all_the_checks_pass()
$_POST['_pdc-lege-price'] = '10';
+ WP_Mock::userFunction('wp_unslash', [
+ 'return' => '10',
+ ]);
+
WP_Mock::userFunction('update_post_meta', [
'times' => 1,
'return' => true,
diff --git a/tests/Unit/Leges/Shortcode/ShortcodeTest.php b/tests/Unit/Leges/Shortcode/ShortcodeTest.php
index cff6c1f..568e220 100644
--- a/tests/Unit/Leges/Shortcode/ShortcodeTest.php
+++ b/tests/Unit/Leges/Shortcode/ShortcodeTest.php
@@ -294,6 +294,182 @@ public function shortcode_is_rendered_correctly_when_date_is_active_but_price_is
$this->assertEquals($actual, $expected);
}
+ /** @test */
+ public function shortcode_is_rendered_correctly_when_percentage_is_set()
+ {
+ \WP_Mock::passthruFunction('shortcode_atts', [
+ 'return_arg' => 1,
+ ]);
+
+ \WP_Mock::userFunction(
+ 'get_post_status',
+ [
+ 'args' => $this->postID,
+ 'return' => true,
+ ]
+ );
+
+ \WP_Mock::passthruFunction('absint', [
+ 'return_args' => 1,
+ ]);
+
+ \WP_Mock::userFunction(
+ 'get_metadata',
+ [
+ 'args' => [
+ 'post',
+ $this->postID,
+ ],
+ 'return' => [
+ '_pdc-lege-active-date' => null,
+ '_pdc-lege-price' => '572,41',
+ '_pdc-lege-new-price' => null,
+ '_pdc-lege-percentage' => '0.1234',
+ '_pdc-lege-use-percentage' => 'on',
+ ],
+ ]
+ );
+
+ \WP_Mock::passthruFunction('esc_html');
+
+ \WP_Mock::userFunction(
+ 'wp_kses_post',
+ [
+ 'args' => [
+ '0,1234%',
+ ],
+ 'return' => '0,1234%',
+ ]
+ );
+
+ $attributes = [
+ 'id' => $this->postID,
+ ];
+
+ $actual = $this->service->addShortcode($attributes);
+ $expected = '0,1234%';
+
+ $this->assertEquals($actual, $expected);
+ }
+
+ /** @test */
+ public function shortcode_is_rendered_correctly_when_new_percentage_is_set_and_date_is_active()
+ {
+ \WP_Mock::passthruFunction('shortcode_atts', [
+ 'return_arg' => 1,
+ ]);
+
+ \WP_Mock::userFunction(
+ 'get_post_status',
+ [
+ 'args' => $this->postID,
+ 'return' => true,
+ ]
+ );
+
+ \WP_Mock::passthruFunction('absint', [
+ 'return_args' => 1,
+ ]);
+
+ \WP_Mock::userFunction(
+ 'get_metadata',
+ [
+ 'args' => [
+ 'post',
+ $this->postID,
+ ],
+ 'return' => [
+ '_pdc-lege-active-date' => '06-05-2018',
+ '_pdc-lege-price' => '572,41',
+ '_pdc-lege-new-price' => null,
+ '_pdc-lege-percentage' => '0.1234',
+ '_pdc-lege-new-percentage' => '0.5678',
+ '_pdc-lege-use-percentage' => 'on',
+ ],
+ ]
+ );
+
+ \WP_Mock::passthruFunction('esc_html');
+
+ \WP_Mock::userFunction(
+ 'wp_kses_post',
+ [
+ 'args' => [
+ '0,5678%',
+ ],
+ 'return' => '0,5678%',
+ ]
+ );
+
+ $attributes = [
+ 'id' => $this->postID,
+ ];
+
+ $actual = $this->service->addShortcode($attributes);
+ $expected = '0,5678%';
+
+ $this->assertEquals($actual, $expected);
+ }
+
+ /** @test */
+ public function shortcode_is_rendered_correctly_when_new_percentage_is_set_but_date_is_not_active()
+ {
+ \WP_Mock::passthruFunction('shortcode_atts', [
+ 'return_arg' => 1,
+ ]);
+
+ \WP_Mock::userFunction(
+ 'get_post_status',
+ [
+ 'args' => $this->postID,
+ 'return' => true,
+ ]
+ );
+
+ \WP_Mock::passthruFunction('absint', [
+ 'return_args' => 1,
+ ]);
+
+ \WP_Mock::userFunction(
+ 'get_metadata',
+ [
+ 'args' => [
+ 'post',
+ $this->postID,
+ ],
+ 'return' => [
+ '_pdc-lege-active-date' => '23-05-3000',
+ '_pdc-lege-price' => '572,41',
+ '_pdc-lege-new-price' => null,
+ '_pdc-lege-percentage' => '0.1234',
+ '_pdc-lege-new-percentage' => '0.5678',
+ '_pdc-lege-use-percentage' => 'on',
+ ],
+ ]
+ );
+
+ \WP_Mock::passthruFunction('esc_html');
+
+ \WP_Mock::userFunction(
+ 'wp_kses_post',
+ [
+ 'args' => [
+ '0,1234%',
+ ],
+ 'return' => '0,1234%',
+ ]
+ );
+
+ $attributes = [
+ 'id' => $this->postID,
+ ];
+
+ $actual = $this->service->addShortcode($attributes);
+ $expected = '0,1234%';
+
+ $this->assertEquals($actual, $expected);
+ }
+
/** @test */
public function shortcode_is_rendered_correctly_when_date_is_active()
{