diff --git a/composer.lock b/composer.lock index 9c62fc1..6db0f0e 100644 --- a/composer.lock +++ b/composer.lock @@ -164,30 +164,30 @@ }, { "name": "christian-riesen/base32", - "version": "1.6.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/ChristianRiesen/base32.git", - "reference": "03082b946c111eb6ab41a98626fee33360c5232c" + "reference": "be07b4a4a2d6056975934d71e111c64e7d8babf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ChristianRiesen/base32/zipball/03082b946c111eb6ab41a98626fee33360c5232c", - "reference": "03082b946c111eb6ab41a98626fee33360c5232c", + "url": "https://api.github.com/repos/ChristianRiesen/base32/zipball/be07b4a4a2d6056975934d71e111c64e7d8babf9", + "reference": "be07b4a4a2d6056975934d71e111c64e7d8babf9", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^8.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.17", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^8.5.13 || ^9.5" + "friendsofphp/php-cs-fixer": "^3.64", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -217,9 +217,9 @@ ], "support": { "issues": "https://github.com/ChristianRiesen/base32/issues", - "source": "https://github.com/ChristianRiesen/base32/tree/1.6.1" + "source": "https://github.com/ChristianRiesen/base32/tree/2.0.1" }, - "time": "2026-07-11T19:29:43+00:00" + "time": "2026-07-11T21:00:30+00:00" }, { "name": "composer/ca-bundle", @@ -1581,27 +1581,27 @@ }, { "name": "georgringer/news", - "version": "14.0.3", + "version": "14.1.1", "source": { "type": "git", "url": "https://github.com/georgringer/news.git", - "reference": "cec1cd776a32e5cec527575b97ca7b044ceac19c" + "reference": "4524b92db01754830a0625a0d16e88fd07808a64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/georgringer/news/zipball/cec1cd776a32e5cec527575b97ca7b044ceac19c", - "reference": "cec1cd776a32e5cec527575b97ca7b044ceac19c", + "url": "https://api.github.com/repos/georgringer/news/zipball/4524b92db01754830a0625a0d16e88fd07808a64", + "reference": "4524b92db01754830a0625a0d16e88fd07808a64", "shasum": "" }, "require": { "php": ">= 8.2 < 8.6", "symfony/console": "^5.4 || ^6.4 || ^7.0", - "typo3/cms-backend": "^13.4.20 || ^14.0", - "typo3/cms-core": "^13.4.20 || ^14.0", - "typo3/cms-extbase": "^13.4.20 || ^14.0", - "typo3/cms-fluid": "^13.4.20 || ^14.0", - "typo3/cms-frontend": "^13.4.20 || ^14.0", - "typo3/cms-install": "^13.4.20 || ^14.0" + "typo3/cms-backend": "^13.4.29 || ^14.0", + "typo3/cms-core": "^13.4.29 || ^14.0", + "typo3/cms-extbase": "^13.4.29 || ^14.0", + "typo3/cms-fluid": "^13.4.29 || ^14.0", + "typo3/cms-frontend": "^13.4.29 || ^14.0", + "typo3/cms-install": "^13.4.29 || ^14.0" }, "conflict": { "sebastian/recursion-context": "6.0.0 || 6.0.1 || 6.0.2" @@ -1615,7 +1615,7 @@ "phpstan/phpdoc-parser": "^1.33.0", "phpunit/phpunit": "^10.5.58", "ssch/typo3-rector": "^3.7", - "typo3/cms-seo": "^13.4.20 || ^14.0", + "typo3/cms-seo": "^13.4.29 || ^14.0", "typo3/coding-standards": "^0.8.0", "typo3/testing-framework": "^8.3.1", "webmozart/assert": "^1.12.1" @@ -1682,25 +1682,25 @@ "type": "patreon" } ], - "time": "2026-05-18T20:53:26+00:00" + "time": "2026-08-11T16:25:20+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.15.2", + "version": "7.15.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "744101956d78b7c1384d0cbf379db13e859167bf" + "reference": "ae311b8f045ea93ce7b1c9cdb7cec06c53f944bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/744101956d78b7c1384d0cbf379db13e859167bf", - "reference": "744101956d78b7c1384d0cbf379db13e859167bf", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ae311b8f045ea93ce7b1c9cdb7cec06c53f944bc", + "reference": "ae311b8f045ea93ce7b1c9cdb7cec06c53f944bc", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^2.5.1", + "guzzlehttp/promises": "^2.5.2", "guzzlehttp/psr7": "^2.13", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", @@ -1794,7 +1794,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.15.2" + "source": "https://github.com/guzzle/guzzle/tree/7.15.3" }, "funding": [ { @@ -1810,20 +1810,20 @@ "type": "tidelift" } ], - "time": "2026-07-26T23:23:20+00:00" + "time": "2026-08-05T19:48:21+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.5.1", + "version": "2.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29" + "reference": "2823687acff28b2dbe67b2508a6b300e2c3fa4ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/9ad1e4fc607446a055b95870c7f668e93b5cff29", - "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29", + "url": "https://api.github.com/repos/guzzle/promises/zipball/2823687acff28b2dbe67b2508a6b300e2c3fa4ce", + "reference": "2823687acff28b2dbe67b2508a6b300e2c3fa4ce", "shasum": "" }, "require": { @@ -1878,7 +1878,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.5.1" + "source": "https://github.com/guzzle/promises/tree/2.5.2" }, "funding": [ { @@ -1894,7 +1894,7 @@ "type": "tidelift" } ], - "time": "2026-07-08T15:48:39+00:00" + "time": "2026-08-05T19:30:54+00:00" }, { "name": "guzzlehttp/psr7", @@ -3600,16 +3600,16 @@ }, { "name": "seld/phar-utils", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c" + "reference": "990bbd0e92caa216d52eca0935f6e35e589bfaa5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", - "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/990bbd0e92caa216d52eca0935f6e35e589bfaa5", + "reference": "990bbd0e92caa216d52eca0935f6e35e589bfaa5", "shasum": "" }, "require": { @@ -3642,9 +3642,9 @@ ], "support": { "issues": "https://github.com/Seldaek/phar-utils/issues", - "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1" + "source": "https://github.com/Seldaek/phar-utils/tree/1.2.2" }, - "time": "2022-08-31T10:31:18+00:00" + "time": "2026-08-01T12:48:55+00:00" }, { "name": "seld/signal-handler", @@ -3709,16 +3709,16 @@ }, { "name": "symfony/cache", - "version": "v8.0.14", + "version": "v8.0.15", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "76ec84217eb39e4787d03928bba86a25cc859f76" + "reference": "3e9c898a1c2d78661676befcc2f9dd610c56c9dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/76ec84217eb39e4787d03928bba86a25cc859f76", - "reference": "76ec84217eb39e4787d03928bba86a25cc859f76", + "url": "https://api.github.com/repos/symfony/cache/zipball/3e9c898a1c2d78661676befcc2f9dd610c56c9dd", + "reference": "3e9c898a1c2d78661676befcc2f9dd610c56c9dd", "shasum": "" }, "require": { @@ -3784,7 +3784,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v8.0.14" + "source": "https://github.com/symfony/cache/tree/v8.0.15" }, "funding": [ { @@ -3804,7 +3804,7 @@ "type": "tidelift" } ], - "time": "2026-06-17T15:00:27+00:00" + "time": "2026-07-29T04:09:38+00:00" }, { "name": "symfony/cache-contracts", @@ -3965,16 +3965,16 @@ }, { "name": "symfony/config", - "version": "v7.4.14", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "7b665e443381ea7c4db03eb03b4bf79ea2b020eb" + "reference": "e896f5e874e6983d0a098f554ca82a08a924c298" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/7b665e443381ea7c4db03eb03b4bf79ea2b020eb", - "reference": "7b665e443381ea7c4db03eb03b4bf79ea2b020eb", + "url": "https://api.github.com/repos/symfony/config/zipball/e896f5e874e6983d0a098f554ca82a08a924c298", + "reference": "e896f5e874e6983d0a098f554ca82a08a924c298", "shasum": "" }, "require": { @@ -4020,7 +4020,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v7.4.14" + "source": "https://github.com/symfony/config/tree/v7.4.16" }, "funding": [ { @@ -4040,20 +4040,20 @@ "type": "tidelift" } ], - "time": "2026-06-09T07:51:57+00:00" + "time": "2026-07-30T15:04:16+00:00" }, { "name": "symfony/console", - "version": "v7.4.14", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87" + "reference": "f4c69c9aed03abf933b294257d618bdd9b30a06d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87", - "reference": "92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87", + "url": "https://api.github.com/repos/symfony/console/zipball/f4c69c9aed03abf933b294257d618bdd9b30a06d", + "reference": "f4c69c9aed03abf933b294257d618bdd9b30a06d", "shasum": "" }, "require": { @@ -4118,7 +4118,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.14" + "source": "https://github.com/symfony/console/tree/v7.4.16" }, "funding": [ { @@ -4138,20 +4138,20 @@ "type": "tidelift" } ], - "time": "2026-06-16T11:50:14+00:00" + "time": "2026-07-31T12:37:14+00:00" }, { "name": "symfony/dependency-injection", - "version": "v7.4.14", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "2c8c64a33e2e6911579e1ff79a8e06c27d48d402" + "reference": "7f59a843c1fbcceafecdf6863d3e38ea6ecd5061" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2c8c64a33e2e6911579e1ff79a8e06c27d48d402", - "reference": "2c8c64a33e2e6911579e1ff79a8e06c27d48d402", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7f59a843c1fbcceafecdf6863d3e38ea6ecd5061", + "reference": "7f59a843c1fbcceafecdf6863d3e38ea6ecd5061", "shasum": "" }, "require": { @@ -4202,7 +4202,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.4.14" + "source": "https://github.com/symfony/dependency-injection/tree/v7.4.16" }, "funding": [ { @@ -4222,7 +4222,7 @@ "type": "tidelift" } ], - "time": "2026-06-24T07:41:05+00:00" + "time": "2026-08-06T09:45:22+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4297,16 +4297,16 @@ }, { "name": "symfony/doctrine-messenger", - "version": "v7.4.14", + "version": "v7.4.15", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "c29901ea81dff6557ae3c78c0bad1d559500c2d8" + "reference": "2356265da4dd8e8b689e735dcce33f5fd40506e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/c29901ea81dff6557ae3c78c0bad1d559500c2d8", - "reference": "c29901ea81dff6557ae3c78c0bad1d559500c2d8", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/2356265da4dd8e8b689e735dcce33f5fd40506e5", + "reference": "2356265da4dd8e8b689e735dcce33f5fd40506e5", "shasum": "" }, "require": { @@ -4349,7 +4349,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v7.4.14" + "source": "https://github.com/symfony/doctrine-messenger/tree/v7.4.15" }, "funding": [ { @@ -4369,20 +4369,20 @@ "type": "tidelift" } ], - "time": "2026-06-11T07:31:44+00:00" + "time": "2026-07-29T06:18:55+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v8.0.14", + "version": "v8.0.15", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "3973836dd335445d0c622ffe98e418eed304d95b" + "reference": "4ad08142e63219fdcb75ea1a0ac1c9e5c0fc7686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3973836dd335445d0c622ffe98e418eed304d95b", - "reference": "3973836dd335445d0c622ffe98e418eed304d95b", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4ad08142e63219fdcb75ea1a0ac1c9e5c0fc7686", + "reference": "4ad08142e63219fdcb75ea1a0ac1c9e5c0fc7686", "shasum": "" }, "require": { @@ -4434,7 +4434,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/v8.0.14" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.15" }, "funding": [ { @@ -4454,7 +4454,7 @@ "type": "tidelift" } ], - "time": "2026-06-06T11:11:34+00:00" + "time": "2026-07-22T15:20:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4606,16 +4606,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.4.11", + "version": "v7.4.15", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "d721ea61b4a5fba8c5b6e7c1feda19efea144b50" + "reference": "ff16a16bf87fdf264638b8f6995b3515975e3c79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/d721ea61b4a5fba8c5b6e7c1feda19efea144b50", - "reference": "d721ea61b4a5fba8c5b6e7c1feda19efea144b50", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/ff16a16bf87fdf264638b8f6995b3515975e3c79", + "reference": "ff16a16bf87fdf264638b8f6995b3515975e3c79", "shasum": "" }, "require": { @@ -4652,7 +4652,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.11" + "source": "https://github.com/symfony/filesystem/tree/v7.4.15" }, "funding": [ { @@ -4672,7 +4672,7 @@ "type": "tidelift" } ], - "time": "2026-05-11T16:38:44+00:00" + "time": "2026-07-22T07:36:05+00:00" }, { "name": "symfony/finder", @@ -4744,16 +4744,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.4.14", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "06db5ae1552177bf8572f8908839f12e3c06aed3" + "reference": "b676451bb638e99a7d34d8a2be90406822e301eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/06db5ae1552177bf8572f8908839f12e3c06aed3", - "reference": "06db5ae1552177bf8572f8908839f12e3c06aed3", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b676451bb638e99a7d34d8a2be90406822e301eb", + "reference": "b676451bb638e99a7d34d8a2be90406822e301eb", "shasum": "" }, "require": { @@ -4802,7 +4802,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.4.14" + "source": "https://github.com/symfony/http-foundation/tree/v7.4.16" }, "funding": [ { @@ -4822,20 +4822,20 @@ "type": "tidelift" } ], - "time": "2026-06-11T07:31:44+00:00" + "time": "2026-08-07T11:50:27+00:00" }, { "name": "symfony/mailer", - "version": "v7.4.14", + "version": "v7.4.15", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "f88ce03ae73e3edb5c176ce1f337709996e88495" + "reference": "68c1f27c97edd0222eb8d440a6c8c4da5354ab46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/f88ce03ae73e3edb5c176ce1f337709996e88495", - "reference": "f88ce03ae73e3edb5c176ce1f337709996e88495", + "url": "https://api.github.com/repos/symfony/mailer/zipball/68c1f27c97edd0222eb8d440a6c8c4da5354ab46", + "reference": "68c1f27c97edd0222eb8d440a6c8c4da5354ab46", "shasum": "" }, "require": { @@ -4886,7 +4886,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.4.14" + "source": "https://github.com/symfony/mailer/tree/v7.4.15" }, "funding": [ { @@ -4906,20 +4906,20 @@ "type": "tidelift" } ], - "time": "2026-06-13T08:51:35+00:00" + "time": "2026-07-28T07:33:02+00:00" }, { "name": "symfony/messenger", - "version": "v7.4.14", + "version": "v7.4.15", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "1ebe448527c77d9efaf2d3205b23707ebaaa28c4" + "reference": "6338eed8f65c593469fdbdbe043d2a7552264403" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/1ebe448527c77d9efaf2d3205b23707ebaaa28c4", - "reference": "1ebe448527c77d9efaf2d3205b23707ebaaa28c4", + "url": "https://api.github.com/repos/symfony/messenger/zipball/6338eed8f65c593469fdbdbe043d2a7552264403", + "reference": "6338eed8f65c593469fdbdbe043d2a7552264403", "shasum": "" }, "require": { @@ -4980,7 +4980,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v7.4.14" + "source": "https://github.com/symfony/messenger/tree/v7.4.15" }, "funding": [ { @@ -5000,20 +5000,20 @@ "type": "tidelift" } ], - "time": "2026-06-08T20:24:16+00:00" + "time": "2026-07-22T12:46:20+00:00" }, { "name": "symfony/mime", - "version": "v7.4.13", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "a845722765c4f6b2ce88beaf4f4479975b186770" + "reference": "20094b76a7106dbe978d31cd3bd7aa1ed248d0e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/a845722765c4f6b2ce88beaf4f4479975b186770", - "reference": "a845722765c4f6b2ce88beaf4f4479975b186770", + "url": "https://api.github.com/repos/symfony/mime/zipball/20094b76a7106dbe978d31cd3bd7aa1ed248d0e5", + "reference": "20094b76a7106dbe978d31cd3bd7aa1ed248d0e5", "shasum": "" }, "require": { @@ -5069,7 +5069,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.4.13" + "source": "https://github.com/symfony/mime/tree/v7.4.16" }, "funding": [ { @@ -5089,7 +5089,7 @@ "type": "tidelift" } ], - "time": "2026-05-23T16:22:37+00:00" + "time": "2026-08-07T14:56:57+00:00" }, { "name": "symfony/options-resolver", @@ -5247,16 +5247,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.38.1", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603" + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", "shasum": "" }, "require": { @@ -5305,7 +5305,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.41.0" }, "funding": [ { @@ -5325,7 +5325,7 @@ "type": "tidelift" } ], - "time": "2026-05-26T05:58:03+00:00" + "time": "2026-07-28T08:25:59+00:00" }, { "name": "symfony/polyfill-intl-idn", @@ -5830,16 +5830,16 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.38.2", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8" + "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/796a26abb75ce49f3a84433cd81bf1009d73d5f8", - "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/5ea99087fb99c273a9b9236ed4c31e78b16103c6", + "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6", "shasum": "" }, "require": { @@ -5886,7 +5886,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.38.2" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.41.0" }, "funding": [ { @@ -5906,7 +5906,7 @@ "type": "tidelift" } ], - "time": "2026-05-27T06:51:48+00:00" + "time": "2026-07-01T12:47:55+00:00" }, { "name": "symfony/polyfill-php84", @@ -5990,16 +5990,16 @@ }, { "name": "symfony/polyfill-php85", - "version": "v1.38.1", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1" + "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", - "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/255fab485aaa1006ed411040c42aecd7b5302d7a", + "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a", "shasum": "" }, "require": { @@ -6046,7 +6046,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.38.1" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.41.0" }, "funding": [ { @@ -6066,7 +6066,7 @@ "type": "tidelift" } ], - "time": "2026-05-26T02:25:22+00:00" + "time": "2026-07-01T12:47:55+00:00" }, { "name": "symfony/polyfill-uuid", @@ -6218,16 +6218,16 @@ }, { "name": "symfony/property-access", - "version": "v7.4.8", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc" + "reference": "c3dce76a6697c6428f7d80d5cd1cf0aa5d9679f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", - "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", + "url": "https://api.github.com/repos/symfony/property-access/zipball/c3dce76a6697c6428f7d80d5cd1cf0aa5d9679f3", + "reference": "c3dce76a6697c6428f7d80d5cd1cf0aa5d9679f3", "shasum": "" }, "require": { @@ -6275,7 +6275,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.4.8" + "source": "https://github.com/symfony/property-access/tree/v7.4.16" }, "funding": [ { @@ -6295,20 +6295,20 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-07-30T12:37:26+00:00" }, { "name": "symfony/property-info", - "version": "v7.4.8", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "ac5e82528b986c4f7cfccbf7764b5d2e824d6175" + "reference": "c79afdb2e720db8ee4f7050a07b3116b92cb896b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/ac5e82528b986c4f7cfccbf7764b5d2e824d6175", - "reference": "ac5e82528b986c4f7cfccbf7764b5d2e824d6175", + "url": "https://api.github.com/repos/symfony/property-info/zipball/c79afdb2e720db8ee4f7050a07b3116b92cb896b", + "reference": "c79afdb2e720db8ee4f7050a07b3116b92cb896b", "shasum": "" }, "require": { @@ -6365,7 +6365,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.4.8" + "source": "https://github.com/symfony/property-info/tree/v7.4.16" }, "funding": [ { @@ -6385,20 +6385,20 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-08-07T14:56:57+00:00" }, { "name": "symfony/rate-limiter", - "version": "v7.4.14", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/rate-limiter.git", - "reference": "5c0af3fdc93e6115d9b806a6ea73e7de040e711d" + "reference": "6703d040ab83401b27f3c7b29ff4c8c8106fedba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/5c0af3fdc93e6115d9b806a6ea73e7de040e711d", - "reference": "5c0af3fdc93e6115d9b806a6ea73e7de040e711d", + "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/6703d040ab83401b27f3c7b29ff4c8c8106fedba", + "reference": "6703d040ab83401b27f3c7b29ff4c8c8106fedba", "shasum": "" }, "require": { @@ -6439,7 +6439,7 @@ "rate-limiter" ], "support": { - "source": "https://github.com/symfony/rate-limiter/tree/v7.4.14" + "source": "https://github.com/symfony/rate-limiter/tree/v7.4.16" }, "funding": [ { @@ -6459,20 +6459,20 @@ "type": "tidelift" } ], - "time": "2026-06-08T20:24:16+00:00" + "time": "2026-08-07T15:34:54+00:00" }, { "name": "symfony/routing", - "version": "v7.4.13", + "version": "v7.4.15", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d" + "reference": "80c0a93d3f8e7499f716204a1fb38ead942a7a2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3a162171bb008e5e0f15dce6581373a4c0e8390d", - "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d", + "url": "https://api.github.com/repos/symfony/routing/zipball/80c0a93d3f8e7499f716204a1fb38ead942a7a2b", + "reference": "80c0a93d3f8e7499f716204a1fb38ead942a7a2b", "shasum": "" }, "require": { @@ -6524,7 +6524,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.4.13" + "source": "https://github.com/symfony/routing/tree/v7.4.15" }, "funding": [ { @@ -6544,7 +6544,7 @@ "type": "tidelift" } ], - "time": "2026-05-24T11:20:33+00:00" + "time": "2026-07-21T15:13:06+00:00" }, { "name": "symfony/service-contracts", @@ -6635,16 +6635,16 @@ }, { "name": "symfony/string", - "version": "v8.0.13", + "version": "v8.0.15", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f2e3e4d33579350d1b12001ef2872f86b27ed3dc" + "reference": "1a6a4245943af4dabe57d269bd0903f9d140a15e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f2e3e4d33579350d1b12001ef2872f86b27ed3dc", - "reference": "f2e3e4d33579350d1b12001ef2872f86b27ed3dc", + "url": "https://api.github.com/repos/symfony/string/zipball/1a6a4245943af4dabe57d269bd0903f9d140a15e", + "reference": "1a6a4245943af4dabe57d269bd0903f9d140a15e", "shasum": "" }, "require": { @@ -6701,7 +6701,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.0.13" + "source": "https://github.com/symfony/string/tree/v8.0.15" }, "funding": [ { @@ -6721,20 +6721,20 @@ "type": "tidelift" } ], - "time": "2026-05-23T18:05:53+00:00" + "time": "2026-07-28T07:34:23+00:00" }, { "name": "symfony/translation", - "version": "v7.4.14", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a1af4dacb24eb7ef4f1ca71b94da8ddbce572281" + "reference": "501e0ff4553c744209ca1a68790d8a4541563710" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a1af4dacb24eb7ef4f1ca71b94da8ddbce572281", - "reference": "a1af4dacb24eb7ef4f1ca71b94da8ddbce572281", + "url": "https://api.github.com/repos/symfony/translation/zipball/501e0ff4553c744209ca1a68790d8a4541563710", + "reference": "501e0ff4553c744209ca1a68790d8a4541563710", "shasum": "" }, "require": { @@ -6801,7 +6801,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.4.14" + "source": "https://github.com/symfony/translation/tree/v7.4.16" }, "funding": [ { @@ -6821,7 +6821,7 @@ "type": "tidelift" } ], - "time": "2026-06-06T09:33:19+00:00" + "time": "2026-07-30T12:37:26+00:00" }, { "name": "symfony/translation-contracts", @@ -7067,16 +7067,16 @@ }, { "name": "symfony/validator", - "version": "v7.4.14", + "version": "v7.4.16", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "306d904336166d001751759351d40d5e82312596" + "reference": "3aee77358ab14090337183657e554668bc94ab4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/306d904336166d001751759351d40d5e82312596", - "reference": "306d904336166d001751759351d40d5e82312596", + "url": "https://api.github.com/repos/symfony/validator/zipball/3aee77358ab14090337183657e554668bc94ab4a", + "reference": "3aee77358ab14090337183657e554668bc94ab4a", "shasum": "" }, "require": { @@ -7147,7 +7147,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.4.14" + "source": "https://github.com/symfony/validator/tree/v7.4.16" }, "funding": [ { @@ -7167,20 +7167,20 @@ "type": "tidelift" } ], - "time": "2026-06-27T06:16:12+00:00" + "time": "2026-08-06T09:41:15+00:00" }, { "name": "symfony/var-exporter", - "version": "v8.0.14", + "version": "v8.0.16", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "5185b7a7ea87a177be5fb16e8dc7756bea9b6eee" + "reference": "ea291a085c804869b333804706b0a58231014671" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/5185b7a7ea87a177be5fb16e8dc7756bea9b6eee", - "reference": "5185b7a7ea87a177be5fb16e8dc7756bea9b6eee", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/ea291a085c804869b333804706b0a58231014671", + "reference": "ea291a085c804869b333804706b0a58231014671", "shasum": "" }, "require": { @@ -7227,7 +7227,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v8.0.14" + "source": "https://github.com/symfony/var-exporter/tree/v8.0.16" }, "funding": [ { @@ -7247,20 +7247,20 @@ "type": "tidelift" } ], - "time": "2026-06-27T08:56:37+00:00" + "time": "2026-07-29T16:27:17+00:00" }, { "name": "symfony/yaml", - "version": "v7.4.14", + "version": "v7.4.15", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "f8f328665ace2370d1e10645b807ba1646dc7dcc" + "reference": "e101850ded5d2c0d44bf32abb8996404afec2dec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f8f328665ace2370d1e10645b807ba1646dc7dcc", - "reference": "f8f328665ace2370d1e10645b807ba1646dc7dcc", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e101850ded5d2c0d44bf32abb8996404afec2dec", + "reference": "e101850ded5d2c0d44bf32abb8996404afec2dec", "shasum": "" }, "require": { @@ -7303,7 +7303,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.4.14" + "source": "https://github.com/symfony/yaml/tree/v7.4.15" }, "funding": [ { @@ -7323,7 +7323,7 @@ "type": "tidelift" } ], - "time": "2026-06-08T20:24:16+00:00" + "time": "2026-07-21T15:13:06+00:00" }, { "name": "typo3/class-alias-loader", @@ -7390,23 +7390,23 @@ }, { "name": "typo3/cms-backend", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/backend.git", - "reference": "dc6163417a8a41b46790ec37cb5f59e5d6c45e73" + "reference": "a19fb339ad606185754b569f810d77edefb256d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/backend/zipball/dc6163417a8a41b46790ec37cb5f59e5d6c45e73", - "reference": "dc6163417a8a41b46790ec37cb5f59e5d6c45e73", + "url": "https://api.github.com/repos/TYPO3-CMS/backend/zipball/a19fb339ad606185754b569f810d77edefb256d8", + "reference": "a19fb339ad606185754b569f810d77edefb256d8", "shasum": "" }, "require": { "ext-intl": "*", "ext-libxml": "*", "psr/event-dispatcher": "^1.0", - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -7479,24 +7479,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-belog", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/belog.git", - "reference": "428858d2a07d4560a11e13aae40f0208961c2c00" + "reference": "668ccbbea2bb4bc51c66e9ec54b325538ecf96bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/belog/zipball/428858d2a07d4560a11e13aae40f0208961c2c00", - "reference": "428858d2a07d4560a11e13aae40f0208961c2c00", + "url": "https://api.github.com/repos/TYPO3-CMS/belog/zipball/668ccbbea2bb4bc51c66e9ec54b325538ecf96bd", + "reference": "668ccbbea2bb4bc51c66e9ec54b325538ecf96bd", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -7546,24 +7546,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-beuser", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/beuser.git", - "reference": "9cee11be80a34a23dd4d5f8a816119039462771d" + "reference": "43afb0acfe144d5b322ae504bb307f56b3fbf072" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/beuser/zipball/9cee11be80a34a23dd4d5f8a816119039462771d", - "reference": "9cee11be80a34a23dd4d5f8a816119039462771d", + "url": "https://api.github.com/repos/TYPO3-CMS/beuser/zipball/43afb0acfe144d5b322ae504bb307f56b3fbf072", + "reference": "43afb0acfe144d5b322ae504bb307f56b3fbf072", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -7613,7 +7613,7 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-cli", @@ -7722,21 +7722,21 @@ }, { "name": "typo3/cms-core", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/core.git", - "reference": "2c739f805ba6e05d3864f3cbdfdf7fbecd8ca0ea" + "reference": "3615717fdcf4e069ac2da346a533d97a86a3d2a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/2c739f805ba6e05d3864f3cbdfdf7fbecd8ca0ea", - "reference": "2c739f805ba6e05d3864f3cbdfdf7fbecd8ca0ea", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/3615717fdcf4e069ac2da346a533d97a86a3d2a9", + "reference": "3615717fdcf4e069ac2da346a533d97a86a3d2a9", "shasum": "" }, "require": { "bacon/bacon-qr-code": "^3.1.1", - "christian-riesen/base32": "^1.6", + "christian-riesen/base32": "^2.0", "composer-runtime-api": "^2.1", "composer/class-map-generator": "^1.7.2", "composer/semver": "^3.4", @@ -7756,11 +7756,12 @@ "ext-tokenizer": "*", "ext-xml": "*", "firebase/php-jwt": "^6.10.2 || ^7.0.5", - "guzzlehttp/guzzle": "^7.12.1", + "guzzlehttp/guzzle": "^7.15.2", "guzzlehttp/psr7": "^2.10.2", "lolli42/finediff": "^1.1.2", "masterminds/html5": "^2.10.0", "php": "^8.2", + "psr/clock": "^1.0", "psr/container": "^2.0", "psr/event-dispatcher": "^1.0", "psr/http-client": "^1.0.3", @@ -7879,28 +7880,28 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-dashboard", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/dashboard.git", - "reference": "9fb42e261187767e4ffb6ce99c6390ea85b1c415" + "reference": "9a26e3a9ef375d1107bedead7bd6531625fd799f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/dashboard/zipball/9fb42e261187767e4ffb6ce99c6390ea85b1c415", - "reference": "9fb42e261187767e4ffb6ce99c6390ea85b1c415", + "url": "https://api.github.com/repos/TYPO3-CMS/dashboard/zipball/9a26e3a9ef375d1107bedead7bd6531625fd799f", + "reference": "9a26e3a9ef375d1107bedead7bd6531625fd799f", "shasum": "" }, "require": { - "typo3/cms-backend": "14.3.5", - "typo3/cms-core": "14.3.5", - "typo3/cms-extbase": "14.3.5", - "typo3/cms-fluid": "14.3.5", - "typo3/cms-frontend": "14.3.5" + "typo3/cms-backend": "14.3.6", + "typo3/cms-core": "14.3.6", + "typo3/cms-extbase": "14.3.6", + "typo3/cms-fluid": "14.3.6", + "typo3/cms-frontend": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -7951,20 +7952,20 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-extbase", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/extbase.git", - "reference": "1f50f2faa83364387af8a921d51bc72a8580eb9f" + "reference": "866a40995d9d30687268dd73f16bd56eb1c30548" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/extbase/zipball/1f50f2faa83364387af8a921d51bc72a8580eb9f", - "reference": "1f50f2faa83364387af8a921d51bc72a8580eb9f", + "url": "https://api.github.com/repos/TYPO3-CMS/extbase/zipball/866a40995d9d30687268dd73f16bd56eb1c30548", + "reference": "866a40995d9d30687268dd73f16bd56eb1c30548", "shasum": "" }, "require": { @@ -7974,9 +7975,9 @@ "phpstan/phpdoc-parser": "^2.1", "symfony/dependency-injection": "^7.4.8", "symfony/property-access": "^7.4.8", - "symfony/property-info": "^7.4.8", + "symfony/property-info": "^7.4.15", "symfony/validator": "^7.4.8", - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8037,25 +8038,25 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-extensionmanager", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/extensionmanager.git", - "reference": "536178e47137d4db8b855649d89e8eb35fe3bd22" + "reference": "c946412b584e55c33a6120b108f133a982b4618f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/extensionmanager/zipball/536178e47137d4db8b855649d89e8eb35fe3bd22", - "reference": "536178e47137d4db8b855649d89e8eb35fe3bd22", + "url": "https://api.github.com/repos/TYPO3-CMS/extensionmanager/zipball/c946412b584e55c33a6120b108f133a982b4618f", + "reference": "c946412b584e55c33a6120b108f133a982b4618f", "shasum": "" }, "require": { "ext-libxml": "*", - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8107,24 +8108,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-felogin", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/felogin.git", - "reference": "26a9e4204966798c8fa05f9a03b069688ba72390" + "reference": "ed0e21f43f04151276da0c61a715ea68978a8665" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/felogin/zipball/26a9e4204966798c8fa05f9a03b069688ba72390", - "reference": "26a9e4204966798c8fa05f9a03b069688ba72390", + "url": "https://api.github.com/repos/TYPO3-CMS/felogin/zipball/ed0e21f43f04151276da0c61a715ea68978a8665", + "reference": "ed0e21f43f04151276da0c61a715ea68978a8665", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8174,24 +8175,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-filelist", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/filelist.git", - "reference": "efbc1c8a9822f977bf49db476f51b94246631029" + "reference": "0b4a61275e3a7b377a047abaec10bd09ecd28709" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/filelist/zipball/efbc1c8a9822f977bf49db476f51b94246631029", - "reference": "efbc1c8a9822f977bf49db476f51b94246631029", + "url": "https://api.github.com/repos/TYPO3-CMS/filelist/zipball/0b4a61275e3a7b377a047abaec10bd09ecd28709", + "reference": "0b4a61275e3a7b377a047abaec10bd09ecd28709", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8243,27 +8244,27 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-fluid", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/fluid.git", - "reference": "2859efa69f30ea632e43ec5a8a7385ffb863e036" + "reference": "34adb02bd7eb87417ef2804da19c649f343df8af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/fluid/zipball/2859efa69f30ea632e43ec5a8a7385ffb863e036", - "reference": "2859efa69f30ea632e43ec5a8a7385ffb863e036", + "url": "https://api.github.com/repos/TYPO3-CMS/fluid/zipball/34adb02bd7eb87417ef2804da19c649f343df8af", + "reference": "34adb02bd7eb87417ef2804da19c649f343df8af", "shasum": "" }, "require": { "symfony/dependency-injection": "^7.4.8", "symfony/finder": "^7.4.8", - "typo3/cms-core": "14.3.5", - "typo3/cms-extbase": "14.3.5", + "typo3/cms-core": "14.3.6", + "typo3/cms-extbase": "14.3.6", "typo3fluid/fluid": "^5.3.1" }, "conflict": { @@ -8317,26 +8318,26 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-fluid-styled-content", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/fluid_styled_content.git", - "reference": "4fa54be5e51328f7e908d5a79649824a5da2f56e" + "reference": "44b71d3be1e32b40ae4b67ea370faeb5d0a3b53f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/fluid_styled_content/zipball/4fa54be5e51328f7e908d5a79649824a5da2f56e", - "reference": "4fa54be5e51328f7e908d5a79649824a5da2f56e", + "url": "https://api.github.com/repos/TYPO3-CMS/fluid_styled_content/zipball/44b71d3be1e32b40ae4b67ea370faeb5d0a3b53f", + "reference": "44b71d3be1e32b40ae4b67ea370faeb5d0a3b53f", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5", - "typo3/cms-fluid": "14.3.5", - "typo3/cms-frontend": "14.3.5" + "typo3/cms-core": "14.3.6", + "typo3/cms-fluid": "14.3.6", + "typo3/cms-frontend": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8386,27 +8387,27 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-form", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/form.git", - "reference": "97d4c3d0b8f9bf1d3d00ba8facb442511a339442" + "reference": "b465f891ab33c715c9ad2dd45675660dd17672a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/form/zipball/97d4c3d0b8f9bf1d3d00ba8facb442511a339442", - "reference": "97d4c3d0b8f9bf1d3d00ba8facb442511a339442", + "url": "https://api.github.com/repos/TYPO3-CMS/form/zipball/b465f891ab33c715c9ad2dd45675660dd17672a7", + "reference": "b465f891ab33c715c9ad2dd45675660dd17672a7", "shasum": "" }, "require": { "psr/http-message": "^1.1 || ^2.0", "symfony/expression-language": "^7.4.8", - "typo3/cms-core": "14.3.5", - "typo3/cms-frontend": "14.3.5" + "typo3/cms-core": "14.3.6", + "typo3/cms-frontend": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8461,25 +8462,25 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-frontend", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/frontend.git", - "reference": "222a74b6ecae6be99f056f6939091db4b6beb240" + "reference": "5794317270a8b7560755b226127f745dc33a8753" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/frontend/zipball/222a74b6ecae6be99f056f6939091db4b6beb240", - "reference": "222a74b6ecae6be99f056f6939091db4b6beb240", + "url": "https://api.github.com/repos/TYPO3-CMS/frontend/zipball/5794317270a8b7560755b226127f745dc33a8753", + "reference": "5794317270a8b7560755b226127f745dc33a8753", "shasum": "" }, "require": { "ext-libxml": "*", - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8539,24 +8540,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-impexp", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/impexp.git", - "reference": "346236cc3157af112c52a2d31e380521db0a5b5b" + "reference": "c5eaabd9fd6456f26d8420699b8284cc9f9433fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/impexp/zipball/346236cc3157af112c52a2d31e380521db0a5b5b", - "reference": "346236cc3157af112c52a2d31e380521db0a5b5b", + "url": "https://api.github.com/repos/TYPO3-CMS/impexp/zipball/c5eaabd9fd6456f26d8420699b8284cc9f9433fb", + "reference": "c5eaabd9fd6456f26d8420699b8284cc9f9433fb", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8606,24 +8607,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-info", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/info.git", - "reference": "6b19609dd439c2070d14c5037a83e3b95c8c08c6" + "reference": "bfc112bc518167ef88da7e7b453cd545e7c901a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/info/zipball/6b19609dd439c2070d14c5037a83e3b95c8c08c6", - "reference": "6b19609dd439c2070d14c5037a83e3b95c8c08c6", + "url": "https://api.github.com/repos/TYPO3-CMS/info/zipball/bfc112bc518167ef88da7e7b453cd545e7c901a5", + "reference": "bfc112bc518167ef88da7e7b453cd545e7c901a5", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8676,20 +8677,20 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-install", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/install.git", - "reference": "fd964477a16b906ef817c45bbf61bbb0d58788ee" + "reference": "445d83327c8e4de51e80da151d2e70714bc30930" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/install/zipball/fd964477a16b906ef817c45bbf61bbb0d58788ee", - "reference": "fd964477a16b906ef817c45bbf61bbb0d58788ee", + "url": "https://api.github.com/repos/TYPO3-CMS/install/zipball/445d83327c8e4de51e80da151d2e70714bc30930", + "reference": "445d83327c8e4de51e80da151d2e70714bc30930", "shasum": "" }, "require": { @@ -8698,9 +8699,9 @@ "nikic/php-parser": "^5.4.0", "symfony/finder": "^7.4.8", "symfony/http-foundation": "^7.4.13", - "typo3/cms-core": "14.3.5", - "typo3/cms-extbase": "14.3.5", - "typo3/cms-fluid": "14.3.5" + "typo3/cms-core": "14.3.6", + "typo3/cms-extbase": "14.3.6", + "typo3/cms-fluid": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8753,24 +8754,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-reactions", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/reactions.git", - "reference": "d631fd081515dc83ff0b82402930e3f11bfb49ba" + "reference": "48384bfd14f2c63b2f5010cb7904122caf93a5d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/reactions/zipball/d631fd081515dc83ff0b82402930e3f11bfb49ba", - "reference": "d631fd081515dc83ff0b82402930e3f11bfb49ba", + "url": "https://api.github.com/repos/TYPO3-CMS/reactions/zipball/48384bfd14f2c63b2f5010cb7904122caf93a5d1", + "reference": "48384bfd14f2c63b2f5010cb7904122caf93a5d1", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8820,24 +8821,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-recycler", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/recycler.git", - "reference": "aef17058b7a838ca23f74673732c27161cee1ea0" + "reference": "72fa6a7c18b044d487726dd73c23544974e16393" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/recycler/zipball/aef17058b7a838ca23f74673732c27161cee1ea0", - "reference": "aef17058b7a838ca23f74673732c27161cee1ea0", + "url": "https://api.github.com/repos/TYPO3-CMS/recycler/zipball/72fa6a7c18b044d487726dd73c23544974e16393", + "reference": "72fa6a7c18b044d487726dd73c23544974e16393", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8890,24 +8891,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-rte-ckeditor", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/rte_ckeditor.git", - "reference": "056f77dab6350067c52691e113144fdd41340713" + "reference": "01facd6eae020faa648d1bb335220fd5a1117120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/rte_ckeditor/zipball/056f77dab6350067c52691e113144fdd41340713", - "reference": "056f77dab6350067c52691e113144fdd41340713", + "url": "https://api.github.com/repos/TYPO3-CMS/rte_ckeditor/zipball/01facd6eae020faa648d1bb335220fd5a1117120", + "reference": "01facd6eae020faa648d1bb335220fd5a1117120", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -8957,24 +8958,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-scheduler", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/scheduler.git", - "reference": "534e433d84ff618bdf17e9d8518016ad3b719101" + "reference": "85a73bf9edf817856bdc4c3e84bfe72a1e73ea4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/scheduler/zipball/534e433d84ff618bdf17e9d8518016ad3b719101", - "reference": "534e433d84ff618bdf17e9d8518016ad3b719101", + "url": "https://api.github.com/repos/TYPO3-CMS/scheduler/zipball/85a73bf9edf817856bdc4c3e84bfe72a1e73ea4e", + "reference": "85a73bf9edf817856bdc4c3e84bfe72a1e73ea4e", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -9021,26 +9022,26 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-seo", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/seo.git", - "reference": "e9c10a916a93ce7970aadbb5cec6cc3a170e63ce" + "reference": "0e7a5b0ab289ea8032e05300bb8d6a6929f86b97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/seo/zipball/e9c10a916a93ce7970aadbb5cec6cc3a170e63ce", - "reference": "e9c10a916a93ce7970aadbb5cec6cc3a170e63ce", + "url": "https://api.github.com/repos/TYPO3-CMS/seo/zipball/0e7a5b0ab289ea8032e05300bb8d6a6929f86b97", + "reference": "0e7a5b0ab289ea8032e05300bb8d6a6929f86b97", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5", - "typo3/cms-extbase": "14.3.5", - "typo3/cms-frontend": "14.3.5" + "typo3/cms-core": "14.3.6", + "typo3/cms-extbase": "14.3.6", + "typo3/cms-frontend": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -9093,24 +9094,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-sys-note", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/sys_note.git", - "reference": "02e5f699794c2da762ab3c705226082586d70958" + "reference": "5fb786d976ebbdff039a726860a5b660e152bd89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/sys_note/zipball/02e5f699794c2da762ab3c705226082586d70958", - "reference": "02e5f699794c2da762ab3c705226082586d70958", + "url": "https://api.github.com/repos/TYPO3-CMS/sys_note/zipball/5fb786d976ebbdff039a726860a5b660e152bd89", + "reference": "5fb786d976ebbdff039a726860a5b660e152bd89", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -9163,24 +9164,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-tstemplate", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/tstemplate.git", - "reference": "c04c795a48856775fec7daf71bdf8e953f6d91b3" + "reference": "4b8e78335bc6792e71879b4e3bb52e56072e76d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/tstemplate/zipball/c04c795a48856775fec7daf71bdf8e953f6d91b3", - "reference": "c04c795a48856775fec7daf71bdf8e953f6d91b3", + "url": "https://api.github.com/repos/TYPO3-CMS/tstemplate/zipball/4b8e78335bc6792e71879b4e3bb52e56072e76d0", + "reference": "4b8e78335bc6792e71879b4e3bb52e56072e76d0", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -9230,24 +9231,24 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-viewpage", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/viewpage.git", - "reference": "e50a2d25a46461aebf7ea64e29e27edc11a5da1e" + "reference": "839c8442f56cbde023defe750a1f1c37c592c785" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/viewpage/zipball/e50a2d25a46461aebf7ea64e29e27edc11a5da1e", - "reference": "e50a2d25a46461aebf7ea64e29e27edc11a5da1e", + "url": "https://api.github.com/repos/TYPO3-CMS/viewpage/zipball/839c8442f56cbde023defe750a1f1c37c592c785", + "reference": "839c8442f56cbde023defe750a1f1c37c592c785", "shasum": "" }, "require": { - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -9297,25 +9298,25 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/cms-webhooks", - "version": "v14.3.5", + "version": "v14.3.6", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/webhooks.git", - "reference": "9bad1109e9da1151c1b1a770426d679240651e72" + "reference": "d7b094a4f5e6aed485ba981a62aaf2f9980c3383" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/webhooks/zipball/9bad1109e9da1151c1b1a770426d679240651e72", - "reference": "9bad1109e9da1151c1b1a770426d679240651e72", + "url": "https://api.github.com/repos/TYPO3-CMS/webhooks/zipball/d7b094a4f5e6aed485ba981a62aaf2f9980c3383", + "reference": "d7b094a4f5e6aed485ba981a62aaf2f9980c3383", "shasum": "" }, "require": { "symfony/uid": "^7.4.8", - "typo3/cms-core": "14.3.5" + "typo3/cms-core": "14.3.6" }, "conflict": { "typo3/cms": "*" @@ -9365,7 +9366,7 @@ "type": "membership" } ], - "time": "2026-07-14T12:26:05+00:00" + "time": "2026-08-11T07:21:33+00:00" }, { "name": "typo3/html-sanitizer", diff --git a/packages/vitec/Classes/UserFunc/EventlistJsonRenderer.php b/packages/vitec/Classes/UserFunc/EventlistJsonRenderer.php index 2514001..80ced8f 100755 --- a/packages/vitec/Classes/UserFunc/EventlistJsonRenderer.php +++ b/packages/vitec/Classes/UserFunc/EventlistJsonRenderer.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Evomedien\Vitec\UserFunc; +use Doctrine\DBAL\ArrayParameterType; use Doctrine\DBAL\ParameterType; use TYPO3\CMS\Core\Attribute\AsAllowedCallable; use TYPO3\CMS\Core\Database\ConnectionPool; @@ -20,12 +21,23 @@ use TYPO3\CMS\Extbase\Service\ImageService; * today or later), soonest first. FlexForm options: showpast (append past * events, most recent first, under "pastEvents"), limit, debug. * + * Layout `regions` additionally emits "regions": the regions that actually have + * an upcoming event, each with the image of its next one. See fetchRegions(). + * * `render()` = TypoScript entry (cObj->data or page discovery). * `renderForRecord()` = one specific tt_content row; reused by * ContainerChildrenProcessor / ContentElementResolver. Exception-safe. */ class EventlistJsonRenderer { + /** + * Parent of the region categories. Hard-coded like the other taxonomy roots + * in this extension (Annex B-5 tracks them); making it a FlexForm setting + * would put a raw uid in front of editors for a value that belongs to the + * content model, not to a single content element. + */ + private const REGION_PARENT_CATEGORY = 104; + #[AsAllowedCallable] public function render(string $content, array $conf): string { @@ -101,6 +113,10 @@ class EventlistJsonRenderer ], ]; + if ($layout === 'regions') { + $response['regions'] = $this->fetchRegions($daysInAdvance); + } + if ($showPast) { $past = $this->fetchEvents(false, $limit); $response['pastEvents'] = array_map(fn($e) => $this->serializeEvent($e), $past); @@ -111,6 +127,9 @@ class EventlistJsonRenderer 'upcomingCount' => count($upcoming), 'settings' => $settings, ]; + if (isset($response['regions'])) { + $response['debug']['regionCount'] = count($response['regions']); + } } return json_encode($response); @@ -181,6 +200,215 @@ class EventlistJsonRenderer return $qb->executeQuery()->fetchAllAssociative(); } + /** + * Regions for the `regions` layout: the categories below + * REGION_PARENT_CATEGORY that have at least one upcoming event, each + * carrying the image of its next one as the card logo. + * + * A region without an upcoming event is left out entirely -- that is the + * whole point of the layout, so `showpast` does not resurrect it. `limit` + * stays out too: it caps events, and applying it before the grouping would + * drop whole regions from the carousel without the editor seeing why. + * + * Order is the backend sorting of the categories, so the editor arranges the + * carousel by dragging them; `nextEvent.eventstart` is in the payload for a + * frontend that would rather sort chronologically. + * + * @return array> + */ + private function fetchRegions(int $daysInAdvance): array + { + $regions = $this->fetchRegionCategories(); + if ($regions === []) { + return []; + } + + // Every category below a region -- the region itself included -- points + // at that region, so an event filed under a sub-category still counts. + $regionByCategory = []; + foreach ($regions as $regionUid => $region) { + foreach ($region['categoryUids'] as $categoryUid) { + $regionByCategory[$categoryUid] = $regionUid; + } + } + + $rows = $this->fetchUpcomingEventsByCategory(array_keys($regionByCategory), $daysInAdvance); + + // One row per event/category pair, sorted by eventstart -- so the first + // row seen for a region is its next event, and the ??= keeps it. + $eventsPerRegion = []; + foreach ($rows as $row) { + $regionUid = $regionByCategory[(int)$row['uid_local']] ?? null; + if ($regionUid === null) { + continue; + } + $eventsPerRegion[$regionUid][(int)$row['uid']] ??= $row; + } + + $result = []; + foreach ($regions as $regionUid => $region) { + $regionEvents = $eventsPerRegion[$regionUid] ?? []; + if ($regionEvents === []) { + continue; + } + + $next = reset($regionEvents); + $start = (int)($next['eventstart'] ?? 0); + $end = (int)($next['eventend'] ?? 0); + + $result[] = [ + 'uid' => $regionUid, + 'title' => $region['title'], + // Plain text, not RTE: sys_category descriptions are named as + // out of scope for the richtext conversion in Clause 9.11. + 'description' => $region['description'], + 'eventCount' => count($regionEvents), + 'image' => $this->getEventImage((int)$next['uid']), + 'nextEvent' => [ + 'uid' => (int)$next['uid'], + 'title' => (string)($next['title'] ?? ''), + 'slug' => (string)($next['slug'] ?? ''), + 'eventstart' => $start > 0 ? date('Y-m-d', $start) : null, + 'eventend' => $end > 0 ? date('Y-m-d', $end) : null, + 'eventurl' => (string)($next['eventurl'] ?? ''), + ], + ]; + } + + return $result; + } + + /** + * The region categories, keyed by uid and in backend sorting order, each + * with its own uid plus every descendant. + * + * sys_category is read in one go rather than per level: the table is small, + * and CustomerlogosJsonRenderer and MarketListJsonRenderer make the same + * trade-off. + * + * @return array + */ + private function fetchRegionCategories(): array + { + $qb = GeneralUtility::makeInstance(ConnectionPool::class) + ->getQueryBuilderForTable('sys_category'); + + $rows = $qb + ->select('uid', 'title', 'description', 'parent') + ->from('sys_category') + ->where( + $qb->expr()->eq('deleted', 0), + $qb->expr()->eq('hidden', 0) + ) + ->orderBy('sorting', 'ASC') + ->executeQuery() + ->fetchAllAssociative(); + + $byUid = []; + $childrenByParent = []; + foreach ($rows as $row) { + $uid = (int)$row['uid']; + $byUid[$uid] = $row; + $childrenByParent[(int)($row['parent'] ?? 0)][] = $uid; + } + + $regions = []; + foreach ($childrenByParent[self::REGION_PARENT_CATEGORY] ?? [] as $regionUid) { + $regions[$regionUid] = [ + 'title' => (string)($byUid[$regionUid]['title'] ?? ''), + 'description' => (string)($byUid[$regionUid]['description'] ?? ''), + 'categoryUids' => $this->collectCategoryBranch($regionUid, $childrenByParent), + ]; + } + + return $regions; + } + + /** + * A category plus every descendant, breadth first. Iterative and + * seen-guarded: a parent pointing back up the tree would otherwise loop. + * + * @param array $childrenByParent + * @return int[] + */ + private function collectCategoryBranch(int $uid, array $childrenByParent): array + { + $collected = [$uid]; + $seen = [$uid => true]; + $queue = [$uid]; + + while ($queue !== []) { + $current = array_shift($queue); + foreach ($childrenByParent[$current] ?? [] as $childUid) { + if (isset($seen[$childUid])) { + continue; + } + $seen[$childUid] = true; + $collected[] = $childUid; + $queue[] = $childUid; + } + } + + return $collected; + } + + /** + * Upcoming events assigned to any of the given categories, soonest first. + * One row per event/category pair, so an event in two regions appears in + * both. The "upcoming" test is the one fetchEvents() uses. + * + * @param int[] $categoryUids + * @return array> + */ + private function fetchUpcomingEventsByCategory(array $categoryUids, int $daysInAdvance): array + { + if ($categoryUids === []) { + return []; + } + + $todayMidnight = strtotime('today'); + + $qb = GeneralUtility::makeInstance(ConnectionPool::class) + ->getQueryBuilderForTable('tx_vitec_domain_model_event'); + $expr = $qb->expr(); + + $qb + ->select('e.uid', 'e.title', 'e.slug', 'e.eventstart', 'e.eventend', 'e.eventurl') + ->addSelect('mm.uid_local') + ->from('tx_vitec_domain_model_event', 'e') + ->join( + 'e', + 'sys_category_record_mm', + 'mm', + 'mm.uid_foreign = e.uid AND mm.tablenames = ' . + $qb->createNamedParameter('tx_vitec_domain_model_event', ParameterType::STRING) . + ' AND mm.fieldname = ' . + $qb->createNamedParameter('categories', ParameterType::STRING) + ) + ->where( + $expr->in('mm.uid_local', $qb->createNamedParameter($categoryUids, ArrayParameterType::INTEGER)), + $expr->eq('e.deleted', 0), + $expr->eq('e.hidden', 0), + $expr->eq('e.hideonwebsite', 0), + $expr->or( + $expr->gte('e.eventend', $qb->createNamedParameter($todayMidnight, ParameterType::INTEGER)), + $expr->and( + $expr->eq('e.eventend', 0), + $expr->gte('e.eventstart', $qb->createNamedParameter($todayMidnight, ParameterType::INTEGER)) + ) + ) + ) + ->orderBy('e.eventstart', 'ASC'); + + if ($daysInAdvance > 0) { + $qb->andWhere( + $expr->lt('e.eventstart', $qb->createNamedParameter($todayMidnight + ($daysInAdvance * 86400), ParameterType::INTEGER)) + ); + } + + return $qb->executeQuery()->fetchAllAssociative(); + } + /** * @param array $event * @return array diff --git a/packages/vitec/Configuration/FlexForms/Eventlist.xml b/packages/vitec/Configuration/FlexForms/Eventlist.xml index 541385a..842cc0c 100755 --- a/packages/vitec/Configuration/FlexForms/Eventlist.xml +++ b/packages/vitec/Configuration/FlexForms/Eventlist.xml @@ -27,6 +27,10 @@ teaserbar + + + regions + list diff --git a/packages/vitec/Configuration/RTE/Vitec.yaml b/packages/vitec/Configuration/RTE/Vitec.yaml index 5fc5456..dd350ca 100644 --- a/packages/vitec/Configuration/RTE/Vitec.yaml +++ b/packages/vitec/Configuration/RTE/Vitec.yaml @@ -110,6 +110,12 @@ editor: - { name: 'Keyboard input', element: 'kbd' } - { name: 'Delete / Strike', element: 'del' } - { name: 'Insert / Underline', element: 'ins' } + # Inline text colours. Class names mirror the button styles + # (btn-vitec--blue -> text-vitec--blue) so both share one vocabulary. + - { name: 'Text: VITEC Blue', element: 'span', classes: ['text-vitec--blue'] } + - { name: 'Text: VITEC Orange', element: 'span', classes: ['text-vitec--orange'] } + - { name: 'Text: VITEC Midnight', element: 'span', classes: ['text-vitec--midnight'] } + - { name: 'Text: VITEC White', element: 'span', classes: ['text-vitec--white'] } # ---- Alignment ----------------------------------------- alignment: diff --git a/packages/vitec/Configuration/TCA/Overrides/tt_content.php b/packages/vitec/Configuration/TCA/Overrides/tt_content.php index 14c38c1..18b97f9 100644 --- a/packages/vitec/Configuration/TCA/Overrides/tt_content.php +++ b/packages/vitec/Configuration/TCA/Overrides/tt_content.php @@ -125,6 +125,26 @@ use TYPO3\CMS\Extbase\Utility\ExtensionUtility; ['label' => 'Vitec: Card Style', 'value' => 'vitec-card'], ['label' => 'Vitec: Dark Background', 'value' => 'vitec-dark'], ['label' => 'Vitec: Highlight Box', 'value' => 'vitec-highlight'], + + // Background variants, ordered light to dark. Mutually exclusive by + // intent, but frame_class is a multi-select here (selectCheckBox, + // see above) and stays that way on purpose -- a restriction would + // have to be built for every other class too. If an editor ticks two + // backgrounds, both end up comma-separated in the JSON `frameClass` + // and the frontend decides which one wins. + // + // `vitec-bg-graphite`, `-blue` and `-midnight` were already styled in + // the frontend bundle but had no backend option; `-white` and + // `-light-grey` still need their CSS. + // + // The older 'Vitec: Dark Background' (vitec-dark) above stays as it + // is: existing content depends on it, and it is the most heavily + // styled class of them all. + ['label' => 'Vitec: White Background', 'value' => 'vitec-bg-white'], + ['label' => 'Vitec: Light-Grey Background', 'value' => 'vitec-bg-light-grey'], + ['label' => 'Vitec: VITEC-Graphite Background', 'value' => 'vitec-bg-graphite'], + ['label' => 'Vitec: VITEC-Blue Background', 'value' => 'vitec-bg-blue'], + ['label' => 'Vitec: VITEC-Midnight Background', 'value' => 'vitec-bg-midnight'], ] ); @@ -132,4 +152,53 @@ use TYPO3\CMS\Extbase\Utility\ExtensionUtility; $GLOBALS['TCA']['tt_content']['columns']['tx_vitec_usecase_content'] = [ 'config' => ['type' => 'passthrough'], ]; + + // The standard TYPO3 "Appearance" tab for the Content Blocks elements. + // + // Content Blocks builds each element's showitem itself + // (TcaGenerator::getContentElementStandardShowItem) and appends only the + // "Extended" tab -- Appearance is never part of it. The Extbase plugins are + // unaffected: ExtensionManagementUtility::addPlugin() seeds their type from + // tt_content types['header'], which carries the tab already. + // + // Until now that meant an editor could not reach layout, frame_class + // (including the Vitec classes registered above), spaceBefore/spaceAfter, + // sectionIndex or linkToTop on a Content Block at all. + // + // Deliberately NOT declared as a palette in every config.yaml: palettes live + // in TCA under a global identifier, so a second definition of `frames` would + // collide with the Core one -- the same trap that took the page module down + // on 2026-08-10. Pointing at the Core palettes keeps a single definition. + // + // This file runs after Content Blocks, which generates its TCA on + // BeforeTcaOverridesEvent. + $appearanceTab = '--div--;core.form.tabs:appearance,' + . '--palette--;;frames,' + . '--palette--;;appearanceLinks'; + $extendedTab = '--div--;core.form.tabs:extended'; + + foreach ($GLOBALS['TCA']['tt_content']['types'] as $cType => &$typeConfig) { + // Own elements only, and only those still missing the tab -- that skips + // the plugins and makes a repeated run a no-op. + if (!str_starts_with((string)$cType, 'vitec_') + || !isset($typeConfig['showitem']) + || str_contains($typeConfig['showitem'], '--palette--;;frames') + ) { + continue; + } + + // Content Blocks puts "Extended" last, so Appearance goes in front of it + // and the tab order matches the Core content elements. Should a future + // version drop that marker, append rather than silently do nothing. + if (str_contains($typeConfig['showitem'], $extendedTab)) { + $typeConfig['showitem'] = str_replace( + $extendedTab, + $appearanceTab . ',' . $extendedTab, + $typeConfig['showitem'] + ); + } else { + $typeConfig['showitem'] = rtrim($typeConfig['showitem'], ", \t\n\r") . ',' . $appearanceTab; + } + } + unset($typeConfig); })(); diff --git a/packages/vitec/ContentBlocks/Basics/ButtonStyle.yaml b/packages/vitec/ContentBlocks/Basics/ButtonStyle.yaml index 42b0302..233b32d 100755 --- a/packages/vitec/ContentBlocks/Basics/ButtonStyle.yaml +++ b/packages/vitec/ContentBlocks/Basics/ButtonStyle.yaml @@ -19,5 +19,11 @@ fields: value: light - label: 'LLL:EXT:vitec/Resources/Private/Language/locallang_buttons.xlf:button_style.items.dark.label' value: dark + - label: 'LLL:EXT:vitec/Resources/Private/Language/locallang_buttons.xlf:button_style.items.transparent_white_outline.label' + value: transparent_white_outline + - label: 'LLL:EXT:vitec/Resources/Private/Language/locallang_buttons.xlf:button_style.items.transparent_black_outline.label' + value: transparent_black_outline + - label: 'LLL:EXT:vitec/Resources/Private/Language/locallang_buttons.xlf:button_style.items.transparent_red_outline.label' + value: transparent_red_outline - label: 'LLL:EXT:vitec/Resources/Private/Language/locallang_buttons.xlf:button_style.items.text_only.label' value: text_only diff --git a/packages/vitec/ContentBlocks/Basics/SecondaryButtonStyle.yaml b/packages/vitec/ContentBlocks/Basics/SecondaryButtonStyle.yaml index 3097162..d9f5486 100755 --- a/packages/vitec/ContentBlocks/Basics/SecondaryButtonStyle.yaml +++ b/packages/vitec/ContentBlocks/Basics/SecondaryButtonStyle.yaml @@ -19,5 +19,11 @@ fields: value: light - label: 'LLL:EXT:vitec/Resources/Private/Language/locallang_buttons.xlf:secondary_button_style.items.dark.label' value: dark + - label: 'LLL:EXT:vitec/Resources/Private/Language/locallang_buttons.xlf:secondary_button_style.items.transparent_white_outline.label' + value: transparent_white_outline + - label: 'LLL:EXT:vitec/Resources/Private/Language/locallang_buttons.xlf:secondary_button_style.items.transparent_black_outline.label' + value: transparent_black_outline + - label: 'LLL:EXT:vitec/Resources/Private/Language/locallang_buttons.xlf:secondary_button_style.items.transparent_red_outline.label' + value: transparent_red_outline - label: 'LLL:EXT:vitec/Resources/Private/Language/locallang_buttons.xlf:secondary_button_style.items.text_only.label' value: text_only diff --git a/packages/vitec/ContentBlocks/ContentElements/featured-content/assets/icon.svg b/packages/vitec/ContentBlocks/ContentElements/featured-content/assets/icon.svg new file mode 100644 index 0000000..1a1cf46 --- /dev/null +++ b/packages/vitec/ContentBlocks/ContentElements/featured-content/assets/icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/packages/vitec/ContentBlocks/ContentElements/featured-content/config.yaml b/packages/vitec/ContentBlocks/ContentElements/featured-content/config.yaml new file mode 100644 index 0000000..d185539 --- /dev/null +++ b/packages/vitec/ContentBlocks/ContentElements/featured-content/config.yaml @@ -0,0 +1,129 @@ +name: vitec/featured-content +group: vitec_custom_components +prefixFields: true +prefixType: vendor + +fields: + # ────────────────────────────────────────────────────────────────────── + - identifier: tab_content + type: Tab + label: Content + + - identifier: header_section + type: Palette + label: Header + fields: + - identifier: header + useExistingField: true + required: true + - type: Linebreak + - identifier: header_layout + useExistingField: true + - identifier: header_position + useExistingField: true + - identifier: date + useExistingField: true + - type: Linebreak + - identifier: header_link + useExistingField: true + - type: Linebreak + - identifier: subheader + useExistingField: true + + - identifier: bodytext + useExistingField: true + enableRichtext: true + + - identifier: cta + type: Link + allowedTypes: + - page + - url + - file + - email + + - identifier: cta_label + type: Text + default: 'Learn more' + max: 30 + + - identifier: Vitec/ButtonStyle + type: Basic + + - identifier: featured_layout + type: Select + renderType: selectSingle + default: text_left + items: + - label: Text left, media right + value: text_left + - label: Text right, media left + value: text_right + + # ────────────────────────────────────────────────────────────────────── + - identifier: tab_media + type: Tab + label: Media + + - identifier: featured_image + type: File + minitems: 0 + maxitems: 1 + allowed: common-image-types + extendedPalette: true + + - identifier: featured_video + type: File + minitems: 0 + maxitems: 1 + allowed: mp4,webm,ogv,mov,m4v + + - identifier: featured_video_autoplay + type: Checkbox + default: 0 + + - identifier: featured_video_loop + type: Checkbox + default: 0 + + - identifier: featured_video_muted + type: Checkbox + default: 1 + + # ────────────────────────────────────────────────────────────────────── + - identifier: tab_overlay + type: Tab + label: Overlay + + - identifier: overlay_color + type: Color + valuePicker: + items: + - label: 'VITEC Blue' + value: '#26358C' + + - identifier: overlay_opacity + type: Number + format: decimal + default: 0.4 + range: + lower: 0 + upper: 1 + slider: + step: 0.05 + width: 200 + + # Horizontal position, not a vertical one: this element is wide rather than + # tall, so the overlay runs across the width. 0 = gradient starts at the very + # left edge (overlay covers everything from there), 100 = it starts at the + # right edge. Which side is covered follows featured_layout, so the text side + # stays readable. + - identifier: overlay_gradient_start + type: Number + default: 50 + range: + lower: 0 + upper: 100 + slider: + step: 1 + width: 300 diff --git a/packages/vitec/ContentBlocks/ContentElements/featured-content/language/labels.xlf b/packages/vitec/ContentBlocks/ContentElements/featured-content/language/labels.xlf new file mode 100644 index 0000000..7f2cc87 --- /dev/null +++ b/packages/vitec/ContentBlocks/ContentElements/featured-content/language/labels.xlf @@ -0,0 +1,88 @@ + + + + + + + VITEC · Featured Content + + + Wide feature block: headline + RTE text + CTA next to an image or video, with a horizontal overlay gradient. + + + + + Content + + + Media + + + Overlay + + + + + CTA Link + + + CTA Button Text + + + + Layout + + + Which side the text sits on. The media fills the other side. + + + Text left, media right + + + Text right, media left + + + + + Image + + + Video + + + If both image and video are set, the video wins and the image serves as its poster. + + + Autoplay video + + + Loop video + + + Mute video + + + + + Overlay Colour + + + Colour of the gradient laid over the image or video. Leave empty for no overlay. + + + + Overlay Opacity (0–1) + + + Strength of the overlay at its fully covered end. + + + + Gradient Start (% of width) + + + Where across the width the overlay begins to fade out. 0 = fades out right at the text edge, 100 = the overlay covers the full width. The fade always runs away from the text side, so the text stays readable. + + + + diff --git a/packages/vitec/ContentBlocks/ContentElements/featured-content/templates/backend-preview.html b/packages/vitec/ContentBlocks/ContentElements/featured-content/templates/backend-preview.html new file mode 100644 index 0000000..45c622c --- /dev/null +++ b/packages/vitec/ContentBlocks/ContentElements/featured-content/templates/backend-preview.html @@ -0,0 +1,93 @@ + + + + + + +
+ + Thumbnail: video poster falls back to the image + + + + + +
No Image
+
+
+ +
+
VITEC · Featured Content
+ +

+ + {data.header} + + ⚠ Headline missing + + +

+ + +
{data.subheader}
+
+ + +
+ {data.bodytext} +
+
+ + +
+ {data.cta_label} → +
+
+
+ +
+ + + + ◧ Text left + ◨ Text right + {data.featured_layout} + + + + + ▶ Video + + + + The preview cannot paint the styles, so the chosen one is named. + Same reasoning as in the hero section. + + + Button: {data.button_style} + + + + + Overlay: {data.overlay_color} · {data.overlay_opacity} · from {data.overlay_gradient_start}% + + + + + ⚠ Button text without link + + + + ⚠ No image or video + + +
+ +
+ +
+ diff --git a/packages/vitec/ContentBlocks/ContentElements/featured-content/templates/frontend.html b/packages/vitec/ContentBlocks/ContentElements/featured-content/templates/frontend.html new file mode 100644 index 0000000..da9c5f0 --- /dev/null +++ b/packages/vitec/ContentBlocks/ContentElements/featured-content/templates/frontend.html @@ -0,0 +1,3 @@ + + + diff --git a/packages/vitec/ContentBlocks/ContentElements/hero-section/config.yaml b/packages/vitec/ContentBlocks/ContentElements/hero-section/config.yaml index 133b936..dace0ae 100755 --- a/packages/vitec/ContentBlocks/ContentElements/hero-section/config.yaml +++ b/packages/vitec/ContentBlocks/ContentElements/hero-section/config.yaml @@ -51,9 +51,24 @@ fields: default: 'Learn more' max: 30 + - identifier: secondary_cta + type: Link + allowedTypes: + - page + - url + - file + - email + + - identifier: secondary_cta_label + type: Text + max: 30 + - identifier: Vitec/ButtonStyle type: Basic + - identifier: Vitec/SecondaryButtonStyle + type: Basic + - identifier: hero_layout_variant type: Select renderType: selectSingle diff --git a/packages/vitec/ContentBlocks/ContentElements/hero-section/language/labels.xlf b/packages/vitec/ContentBlocks/ContentElements/hero-section/language/labels.xlf index a51f62f..a0b6114 100755 --- a/packages/vitec/ContentBlocks/ContentElements/hero-section/language/labels.xlf +++ b/packages/vitec/ContentBlocks/ContentElements/hero-section/language/labels.xlf @@ -26,6 +26,17 @@ CTA Button Text + + Second CTA Link (optional) + + + Leave empty for a single button. With both link and label filled, the two buttons render side by side. + + + + Second CTA Button Text + + Hero Image diff --git a/packages/vitec/ContentBlocks/ContentElements/hero-section/templates/backend-preview.html b/packages/vitec/ContentBlocks/ContentElements/hero-section/templates/backend-preview.html index ce1e316..6d1a171 100644 --- a/packages/vitec/ContentBlocks/ContentElements/hero-section/templates/backend-preview.html +++ b/packages/vitec/ContentBlocks/ContentElements/hero-section/templates/backend-preview.html @@ -46,9 +46,14 @@ - +
- {data.cta_label} → + + {data.cta_label} → + + + {data.secondary_cta_label} → +
@@ -60,6 +65,27 @@ Background: {data.background_variant} + + The preview has no per-style colours, so the chosen styles are named + instead of painted — otherwise "Transparent White Outline" would be + indistinguishable from the default orange here. + + + Button: {data.button_style} + + + + 2nd Button: {data.secondary_button_style} + + + + + + ⚠ 2nd button without link + + + + 🏢 Logo Wall diff --git a/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/config.yaml b/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/config.yaml index 8614a56..459c53f 100755 --- a/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/config.yaml +++ b/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/config.yaml @@ -121,6 +121,29 @@ fields: type: Checkbox default: 0 + # Background colour for the whole element. No default on purpose: empty means + # "no background", so every existing record keeps the look it has today. + # The presets are the VITEC palette from Resources/Public/SCSS/_vitec.scss, + # in the same order as the button styles above so both dropdowns read alike. + # Lower-case hex, because the native colour picker emits lower case -- an + # upper-case preset would store the same colour under two spellings. + - identifier: background_color + type: Color + valuePicker: + items: + - label: 'VITEC Orange' + value: '#f47937' + - label: 'VITEC Blue' + value: '#26358c' + - label: 'VITEC Graphite' + value: '#313131' + - label: 'VITEC Midnight' + value: '#0d0d0d' + - label: 'VITEC Light Grey' + value: '#cccccc' + - label: 'White' + value: '#ffffff' + - identifier: debug type: Checkbox default: 0 diff --git a/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/language/labels.xlf b/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/language/labels.xlf index 4fb09d8..bfbf472 100755 --- a/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/language/labels.xlf +++ b/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/language/labels.xlf @@ -66,6 +66,14 @@ Render full-width (edge to edge) + + + Background Colour + + + Background for the whole element. Leave empty for no background. The list next to the field offers the VITEC palette; any other colour can still be picked freely. + + Allow Debug Output diff --git a/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/templates/backend-preview.html b/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/templates/backend-preview.html index 7c0cdcb..096c79e 100755 --- a/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/templates/backend-preview.html +++ b/packages/vitec/ContentBlocks/ContentElements/intro-paragraph/templates/backend-preview.html @@ -60,6 +60,18 @@ ↔ Full width
+ + The dot modifiers in backend-preview.css are fixed palette classes; + this colour is free-form, so the swatch carries the stored hex as an + inline style. The outline keeps white visible on the light preview. + + + + + BG: {data.background_color} + + + ⚠ Button text without link diff --git a/packages/vitec/Resources/Private/Language/locallang_buttons.xlf b/packages/vitec/Resources/Private/Language/locallang_buttons.xlf index 0a29dd3..2e47623 100755 --- a/packages/vitec/Resources/Private/Language/locallang_buttons.xlf +++ b/packages/vitec/Resources/Private/Language/locallang_buttons.xlf @@ -25,6 +25,15 @@ Dark + + Transparent, White Outline + + + Transparent, Black Outline + + + Transparent, Red Outline + Only Text (no button background) @@ -51,6 +60,15 @@ Dark + + Transparent, White Outline + + + Transparent, Black Outline + + + Transparent, Red Outline + Only Text (no button background) diff --git a/packages/vitec/Resources/Public/Css/rte-content.css b/packages/vitec/Resources/Public/Css/rte-content.css index 6dc7f54..706fda1 100644 --- a/packages/vitec/Resources/Public/Css/rte-content.css +++ b/packages/vitec/Resources/Public/Css/rte-content.css @@ -73,6 +73,29 @@ color: #26358c; } +/* Inline text colours. The names mirror the button styles above + (btn-vitec--blue -> text-vitec--blue) so both use one vocabulary. */ +.text-vitec--orange { + color: #f47937; +} + +.text-vitec--blue { + color: #26358c; +} + +.text-vitec--midnight { + color: #0d0d0d; +} + +.text-vitec--white { + color: #ffffff; + /* Editor only: white on the white editor canvas is invisible, so the preview + puts it on a dark plate. This file is loaded into the RTE iframe alone -- + the frontend styles the class itself and needs no plate. */ + background-color: #313131; + padding: 0 0.15em; +} + .text-start { text-align: left; } diff --git a/public/.htaccess b/public/.htaccess index 77216c5..26bc443 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -401,6 +401,6 @@ AuthUserFile "/usr/www/users/vitecevo/live/public/.htpasswd" AuthName "DEV" AuthType Basic - Require ip 217.70.192.164 - Require valid-user + Require ip 217.70.192.164 + Require valid-user diff --git a/public/_frontend/index.html b/public/_frontend/index.html index 3048680..f32b80b 100644 --- a/public/_frontend/index.html +++ b/public/_frontend/index.html @@ -25,8 +25,8 @@ VITEC - - + +