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() {