Release 2.52 (#5874)

This commit is contained in:
Kevin Papst
2026-03-16 17:44:12 +01:00
committed by GitHub
parent 70b4fbcae8
commit cad9f58703
9 changed files with 161 additions and 150 deletions

View File

@@ -18,15 +18,15 @@
.public-holiday { color: var(--kimai-public-holiday); }
.holiday { color: var(--kimai-holiday); }
.sickness { color: var(--kimai-sickness); }
.sickness, .sickness-child { color: var(--kimai-sickness); }
.time-off { color: var(--kimai-time-off); }
.other { color: var(--kimai-other); }
.other, .parental, .unpaid-vacation { color: var(--kimai-other); }
.bg-public-holiday{ background-color: var(--kimai-public-holiday-bg); --tblr-table-bg: var(--kimai-public-holiday-bg); i.fas{ color: var(--kimai-public-holiday); } };
.bg-holiday { background-color: var(--kimai-holiday-bg); --tblr-table-bg: var(--kimai-holiday-bg); i.fas{ color: var(--kimai-holiday); } };
.bg-sickness { background-color: var(--kimai-sickness-bg); --tblr-table-bg: var(--kimai-sickness-bg); i.fas{ color: var(--kimai-sickness); } };
.bg-sickness, .bg-sickness-child { background-color: var(--kimai-sickness-bg); --tblr-table-bg: var(--kimai-sickness-bg); i.fas{ color: var(--kimai-sickness); } };
.bg-time-off { background-color: var(--kimai-time-off-bg); --tblr-table-bg: var(--kimai-time-off-bg); i.fas{ color: var(--kimai-time-off); } };
.bg-other { background-color: var(--kimai-other-bg); --tblr-table-bg: var(--kimai-other-bg); i.fas{ color: var(--kimai-other); } };
.bg-other, .bg-parental, .bg-unpaid-vacation { background-color: var(--kimai-other-bg); --tblr-table-bg: var(--kimai-other-bg); i.fas{ color: var(--kimai-other); } };
.bg-unexpected { background-color: var(--kimai-unexpected-bg); --tblr-table-bg: var(--kimai-unexpected-bg); };
.bg-missing { background-color: var(--kimai-missing-bg); --tblr-table-bg: var(--kimai-missing-bg); };

267
composer.lock generated
View File

@@ -3234,16 +3234,16 @@
},
{
"name": "mpdf/mpdf",
"version": "v8.2.7",
"version": "v8.3.1",
"source": {
"type": "git",
"url": "https://github.com/mpdf/mpdf.git",
"reference": "b59670a09498689c33ce639bac8f5ba26721dab3"
"reference": "2a454ec334109911fdb323a284c19dbf3f049810"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mpdf/mpdf/zipball/b59670a09498689c33ce639bac8f5ba26721dab3",
"reference": "b59670a09498689c33ce639bac8f5ba26721dab3",
"url": "https://api.github.com/repos/mpdf/mpdf/zipball/2a454ec334109911fdb323a284c19dbf3f049810",
"reference": "2a454ec334109911fdb323a284c19dbf3f049810",
"shasum": ""
},
"require": {
@@ -3267,6 +3267,7 @@
},
"suggest": {
"ext-bcmath": "Needed for generation of some types of barcodes",
"ext-imagick": "Needed if developing the Mpdf library",
"ext-xml": "Needed mainly for SVG manipulation",
"ext-zlib": "Needed for compression of embedded resources, such as fonts"
},
@@ -3311,7 +3312,7 @@
"type": "custom"
}
],
"time": "2025-12-01T10:18:02+00:00"
"time": "2026-03-11T10:58:44+00:00"
},
{
"name": "mpdf/psr-http-message-shim",
@@ -4932,16 +4933,16 @@
},
{
"name": "robrichards/xmlseclibs",
"version": "3.1.4",
"version": "3.1.5",
"source": {
"type": "git",
"url": "https://github.com/robrichards/xmlseclibs.git",
"reference": "bc87389224c6de95802b505e5265b0ec2c5bcdbd"
"reference": "03062be78178cbb5e8f605cd255dc32a14981f92"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/bc87389224c6de95802b505e5265b0ec2c5bcdbd",
"reference": "bc87389224c6de95802b505e5265b0ec2c5bcdbd",
"url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/03062be78178cbb5e8f605cd255dc32a14981f92",
"reference": "03062be78178cbb5e8f605cd255dc32a14981f92",
"shasum": ""
},
"require": {
@@ -4968,9 +4969,9 @@
],
"support": {
"issues": "https://github.com/robrichards/xmlseclibs/issues",
"source": "https://github.com/robrichards/xmlseclibs/tree/3.1.4"
"source": "https://github.com/robrichards/xmlseclibs/tree/3.1.5"
},
"time": "2025-12-08T11:57:53+00:00"
"time": "2026-03-13T10:31:56+00:00"
},
{
"name": "scheb/2fa-backup-code",
@@ -5188,27 +5189,27 @@
},
{
"name": "setasign/fpdi",
"version": "v2.6.4",
"version": "v2.6.6",
"source": {
"type": "git",
"url": "https://github.com/Setasign/FPDI.git",
"reference": "4b53852fde2734ec6a07e458a085db627c60eada"
"reference": "de0cf35911be3e9ea63b48e0f307883b1c7c48ac"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Setasign/FPDI/zipball/4b53852fde2734ec6a07e458a085db627c60eada",
"reference": "4b53852fde2734ec6a07e458a085db627c60eada",
"url": "https://api.github.com/repos/Setasign/FPDI/zipball/de0cf35911be3e9ea63b48e0f307883b1c7c48ac",
"reference": "de0cf35911be3e9ea63b48e0f307883b1c7c48ac",
"shasum": ""
},
"require": {
"ext-zlib": "*",
"php": "^7.1 || ^8.0"
"php": ">=7.2 <=8.5.99999"
},
"conflict": {
"setasign/tfpdf": "<1.31"
},
"require-dev": {
"phpunit/phpunit": "^7",
"phpunit/phpunit": "^8.5.52",
"setasign/fpdf": "~1.8.6",
"setasign/tfpdf": "~1.33",
"squizlabs/php_codesniffer": "^3.5",
@@ -5248,7 +5249,7 @@
],
"support": {
"issues": "https://github.com/Setasign/FPDI/issues",
"source": "https://github.com/Setasign/FPDI/tree/v2.6.4"
"source": "https://github.com/Setasign/FPDI/tree/v2.6.6"
},
"funding": [
{
@@ -5256,20 +5257,20 @@
"type": "tidelift"
}
],
"time": "2025-08-05T09:57:14+00:00"
"time": "2026-03-13T08:38:20+00:00"
},
{
"name": "smalot/pdfparser",
"version": "v2.12.3",
"version": "v2.12.4",
"source": {
"type": "git",
"url": "https://github.com/smalot/pdfparser.git",
"reference": "61c9bcafcb92899b76d8ebda6508267bae77e264"
"reference": "028d7cc0ceff323bc001d763caa2bbdf611866c4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/smalot/pdfparser/zipball/61c9bcafcb92899b76d8ebda6508267bae77e264",
"reference": "61c9bcafcb92899b76d8ebda6508267bae77e264",
"url": "https://api.github.com/repos/smalot/pdfparser/zipball/028d7cc0ceff323bc001d763caa2bbdf611866c4",
"reference": "028d7cc0ceff323bc001d763caa2bbdf611866c4",
"shasum": ""
},
"require": {
@@ -5305,9 +5306,9 @@
],
"support": {
"issues": "https://github.com/smalot/pdfparser/issues",
"source": "https://github.com/smalot/pdfparser/tree/v2.12.3"
"source": "https://github.com/smalot/pdfparser/tree/v2.12.4"
},
"time": "2026-01-08T08:04:04+00:00"
"time": "2026-03-10T15:39:47+00:00"
},
{
"name": "spomky-labs/otphp",
@@ -5454,16 +5455,16 @@
},
{
"name": "symfony/cache",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "a0a1690543329685c044362c873b78c6de9d4faa"
"reference": "77f5eca135d1b5471de4301b99496649e4f62878"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/a0a1690543329685c044362c873b78c6de9d4faa",
"reference": "a0a1690543329685c044362c873b78c6de9d4faa",
"url": "https://api.github.com/repos/symfony/cache/zipball/77f5eca135d1b5471de4301b99496649e4f62878",
"reference": "77f5eca135d1b5471de4301b99496649e4f62878",
"shasum": ""
},
"require": {
@@ -5530,7 +5531,7 @@
"psr6"
],
"support": {
"source": "https://github.com/symfony/cache/tree/v6.4.34"
"source": "https://github.com/symfony/cache/tree/v6.4.35"
},
"funding": [
{
@@ -5550,7 +5551,7 @@
"type": "tidelift"
}
],
"time": "2026-02-20T15:06:30+00:00"
"time": "2026-03-05T20:47:12+00:00"
},
{
"name": "symfony/cache-contracts",
@@ -5787,16 +5788,16 @@
},
{
"name": "symfony/console",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "7b1f1c37eff5910ddda2831345467e593a5120ad"
"reference": "49257c96304c508223815ee965c251e7c79e614e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/7b1f1c37eff5910ddda2831345467e593a5120ad",
"reference": "7b1f1c37eff5910ddda2831345467e593a5120ad",
"url": "https://api.github.com/repos/symfony/console/zipball/49257c96304c508223815ee965c251e7c79e614e",
"reference": "49257c96304c508223815ee965c251e7c79e614e",
"shasum": ""
},
"require": {
@@ -5861,7 +5862,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v6.4.34"
"source": "https://github.com/symfony/console/tree/v6.4.35"
},
"funding": [
{
@@ -5881,7 +5882,7 @@
"type": "tidelift"
}
],
"time": "2026-02-23T15:42:15+00:00"
"time": "2026-03-06T13:31:08+00:00"
},
{
"name": "symfony/css-selector",
@@ -5954,16 +5955,16 @@
},
{
"name": "symfony/dependency-injection",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "91e49958b8a6092e48e4711894a1aeb1b151c62a"
"reference": "d95712d0e9446b9f244b64811ffb6af7b7434213"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/91e49958b8a6092e48e4711894a1aeb1b151c62a",
"reference": "91e49958b8a6092e48e4711894a1aeb1b151c62a",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d95712d0e9446b9f244b64811ffb6af7b7434213",
"reference": "d95712d0e9446b9f244b64811ffb6af7b7434213",
"shasum": ""
},
"require": {
@@ -6015,7 +6016,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dependency-injection/tree/v6.4.34"
"source": "https://github.com/symfony/dependency-injection/tree/v6.4.35"
},
"funding": [
{
@@ -6035,7 +6036,7 @@
"type": "tidelift"
}
],
"time": "2026-02-24T15:33:38+00:00"
"time": "2026-02-26T12:16:01+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -6218,16 +6219,16 @@
},
{
"name": "symfony/dotenv",
"version": "v6.4.30",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
"reference": "924edbc9631b75302def0258ed1697948b17baf6"
"reference": "148138ead5d7bb582e93a9cc19b134b42a370365"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/924edbc9631b75302def0258ed1697948b17baf6",
"reference": "924edbc9631b75302def0258ed1697948b17baf6",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/148138ead5d7bb582e93a9cc19b134b42a370365",
"reference": "148138ead5d7bb582e93a9cc19b134b42a370365",
"shasum": ""
},
"require": {
@@ -6272,7 +6273,7 @@
"environment"
],
"support": {
"source": "https://github.com/symfony/dotenv/tree/v6.4.30"
"source": "https://github.com/symfony/dotenv/tree/v6.4.35"
},
"funding": [
{
@@ -6292,7 +6293,7 @@
"type": "tidelift"
}
],
"time": "2025-11-14T17:33:48+00:00"
"time": "2026-02-26T10:15:49+00:00"
},
{
"name": "symfony/error-handler",
@@ -6814,16 +6815,16 @@
},
{
"name": "symfony/form",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
"reference": "ed9275a133809bb48d949ba6dfdc808a819ebea2"
"reference": "37b2f68f4cfb8c35fdd0d5a02ba216b5e119f762"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/form/zipball/ed9275a133809bb48d949ba6dfdc808a819ebea2",
"reference": "ed9275a133809bb48d949ba6dfdc808a819ebea2",
"url": "https://api.github.com/repos/symfony/form/zipball/37b2f68f4cfb8c35fdd0d5a02ba216b5e119f762",
"reference": "37b2f68f4cfb8c35fdd0d5a02ba216b5e119f762",
"shasum": ""
},
"require": {
@@ -6891,7 +6892,7 @@
"description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/form/tree/v6.4.34"
"source": "https://github.com/symfony/form/tree/v6.4.35"
},
"funding": [
{
@@ -6911,20 +6912,20 @@
"type": "tidelift"
}
],
"time": "2026-02-23T17:59:52+00:00"
"time": "2026-03-04T16:19:23+00:00"
},
{
"name": "symfony/framework-bundle",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
"reference": "5b5d19473f22d699811a41b01cef2462bc42b238"
"reference": "2e065db347ef1c2d1d4b916c860f9782c9060221"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/5b5d19473f22d699811a41b01cef2462bc42b238",
"reference": "5b5d19473f22d699811a41b01cef2462bc42b238",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/2e065db347ef1c2d1d4b916c860f9782c9060221",
"reference": "2e065db347ef1c2d1d4b916c860f9782c9060221",
"shasum": ""
},
"require": {
@@ -7044,7 +7045,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/framework-bundle/tree/v6.4.34"
"source": "https://github.com/symfony/framework-bundle/tree/v6.4.35"
},
"funding": [
{
@@ -7064,7 +7065,7 @@
"type": "tidelift"
}
],
"time": "2026-02-24T16:00:52+00:00"
"time": "2026-03-06T11:15:58+00:00"
},
{
"name": "symfony/http-client",
@@ -7244,16 +7245,16 @@
},
{
"name": "symfony/http-foundation",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "5bb346d1b4b2a616e5c3d99b3ee4d5810735c535"
"reference": "cffffd0a2c037117b742b4f8b379a22a2a33f6d2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/5bb346d1b4b2a616e5c3d99b3ee4d5810735c535",
"reference": "5bb346d1b4b2a616e5c3d99b3ee4d5810735c535",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/cffffd0a2c037117b742b4f8b379a22a2a33f6d2",
"reference": "cffffd0a2c037117b742b4f8b379a22a2a33f6d2",
"shasum": ""
},
"require": {
@@ -7301,7 +7302,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v6.4.34"
"source": "https://github.com/symfony/http-foundation/tree/v6.4.35"
},
"funding": [
{
@@ -7321,20 +7322,20 @@
"type": "tidelift"
}
],
"time": "2026-02-21T15:48:41+00:00"
"time": "2026-03-06T11:15:58+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "006a49fc4f41ee21a6ca61e69caed1c30b29f07c"
"reference": "ece1a0da7745a5243683f178155c0412c92691eb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/006a49fc4f41ee21a6ca61e69caed1c30b29f07c",
"reference": "006a49fc4f41ee21a6ca61e69caed1c30b29f07c",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/ece1a0da7745a5243683f178155c0412c92691eb",
"reference": "ece1a0da7745a5243683f178155c0412c92691eb",
"shasum": ""
},
"require": {
@@ -7419,7 +7420,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v6.4.34"
"source": "https://github.com/symfony/http-kernel/tree/v6.4.35"
},
"funding": [
{
@@ -7439,7 +7440,7 @@
"type": "tidelift"
}
],
"time": "2026-02-26T08:27:11+00:00"
"time": "2026-03-06T16:28:07+00:00"
},
{
"name": "symfony/intl",
@@ -7614,16 +7615,16 @@
},
{
"name": "symfony/mime",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "2b32fbbe10b36a8379efab6e702ad8b917151839"
"reference": "b5cce719de25bebd6345c7709774f9ac63ff5cdf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/2b32fbbe10b36a8379efab6e702ad8b917151839",
"reference": "2b32fbbe10b36a8379efab6e702ad8b917151839",
"url": "https://api.github.com/repos/symfony/mime/zipball/b5cce719de25bebd6345c7709774f9ac63ff5cdf",
"reference": "b5cce719de25bebd6345c7709774f9ac63ff5cdf",
"shasum": ""
},
"require": {
@@ -7679,7 +7680,7 @@
"mime-type"
],
"support": {
"source": "https://github.com/symfony/mime/tree/v6.4.34"
"source": "https://github.com/symfony/mime/tree/v6.4.35"
},
"funding": [
{
@@ -7699,7 +7700,7 @@
"type": "tidelift"
}
],
"time": "2026-02-02T17:01:23+00:00"
"time": "2026-03-05T11:25:28+00:00"
},
{
"name": "symfony/monolog-bridge",
@@ -8409,16 +8410,16 @@
},
{
"name": "symfony/rate-limiter",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/rate-limiter.git",
"reference": "ac5269c18a29f9892db8e48296af2793f57527dc"
"reference": "6540413badbf393692e8d419eb3abccca34b6e25"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/rate-limiter/zipball/ac5269c18a29f9892db8e48296af2793f57527dc",
"reference": "ac5269c18a29f9892db8e48296af2793f57527dc",
"url": "https://api.github.com/repos/symfony/rate-limiter/zipball/6540413badbf393692e8d419eb3abccca34b6e25",
"reference": "6540413badbf393692e8d419eb3abccca34b6e25",
"shasum": ""
},
"require": {
@@ -8460,7 +8461,7 @@
"rate-limiter"
],
"support": {
"source": "https://github.com/symfony/rate-limiter/tree/v6.4.34"
"source": "https://github.com/symfony/rate-limiter/tree/v6.4.35"
},
"funding": [
{
@@ -8480,7 +8481,7 @@
"type": "tidelift"
}
],
"time": "2026-02-25T10:56:12+00:00"
"time": "2026-03-03T13:58:39+00:00"
},
{
"name": "symfony/routing",
@@ -9024,16 +9025,16 @@
},
{
"name": "symfony/serializer",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
"reference": "26446be5ec3d84c2aa16a08e195c783e3d4c2af7"
"reference": "fc13cffae86138d3624eff9013724ea1d3e796b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/serializer/zipball/26446be5ec3d84c2aa16a08e195c783e3d4c2af7",
"reference": "26446be5ec3d84c2aa16a08e195c783e3d4c2af7",
"url": "https://api.github.com/repos/symfony/serializer/zipball/fc13cffae86138d3624eff9013724ea1d3e796b4",
"reference": "fc13cffae86138d3624eff9013724ea1d3e796b4",
"shasum": ""
},
"require": {
@@ -9102,7 +9103,7 @@
"description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/serializer/tree/v6.4.34"
"source": "https://github.com/symfony/serializer/tree/v6.4.35"
},
"funding": [
{
@@ -9122,7 +9123,7 @@
"type": "tidelift"
}
],
"time": "2026-02-24T16:55:33+00:00"
"time": "2026-03-06T11:03:24+00:00"
},
{
"name": "symfony/service-contracts",
@@ -9549,16 +9550,16 @@
},
{
"name": "symfony/twig-bridge",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
"reference": "5169074f4a88dfb02eeccddaba78edfdf212a9b2"
"reference": "352acf608d1c9c00692fc3bba9f445176c14ce0f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/5169074f4a88dfb02eeccddaba78edfdf212a9b2",
"reference": "5169074f4a88dfb02eeccddaba78edfdf212a9b2",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/352acf608d1c9c00692fc3bba9f445176c14ce0f",
"reference": "352acf608d1c9c00692fc3bba9f445176c14ce0f",
"shasum": ""
},
"require": {
@@ -9638,7 +9639,7 @@
"description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bridge/tree/v6.4.34"
"source": "https://github.com/symfony/twig-bridge/tree/v6.4.35"
},
"funding": [
{
@@ -9658,7 +9659,7 @@
"type": "tidelift"
}
],
"time": "2026-02-23T18:17:33+00:00"
"time": "2026-03-04T15:30:31+00:00"
},
{
"name": "symfony/twig-bundle",
@@ -9750,16 +9751,16 @@
},
{
"name": "symfony/validator",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
"reference": "7c3897b7f739d4ab913481e680405ca82d08084d"
"reference": "9dc02b6c7502f7c4b68a741d2826bbec061c5953"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/7c3897b7f739d4ab913481e680405ca82d08084d",
"reference": "7c3897b7f739d4ab913481e680405ca82d08084d",
"url": "https://api.github.com/repos/symfony/validator/zipball/9dc02b6c7502f7c4b68a741d2826bbec061c5953",
"reference": "9dc02b6c7502f7c4b68a741d2826bbec061c5953",
"shasum": ""
},
"require": {
@@ -9827,7 +9828,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/validator/tree/v6.4.34"
"source": "https://github.com/symfony/validator/tree/v6.4.35"
},
"funding": [
{
@@ -9847,7 +9848,7 @@
"type": "tidelift"
}
],
"time": "2026-02-23T17:49:24+00:00"
"time": "2026-03-02T17:53:19+00:00"
},
{
"name": "symfony/var-dumper",
@@ -10807,16 +10808,16 @@
},
{
"name": "zircote/swagger-php",
"version": "5.8.2",
"version": "5.8.3",
"source": {
"type": "git",
"url": "https://github.com/zircote/swagger-php.git",
"reference": "18ee6592518238a5a6c9905aae4926d5bbc65754"
"reference": "098223019f764a16715f64089a58606096719c98"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/zircote/swagger-php/zipball/18ee6592518238a5a6c9905aae4926d5bbc65754",
"reference": "18ee6592518238a5a6c9905aae4926d5bbc65754",
"url": "https://api.github.com/repos/zircote/swagger-php/zipball/098223019f764a16715f64089a58606096719c98",
"reference": "098223019f764a16715f64089a58606096719c98",
"shasum": ""
},
"require": {
@@ -10889,7 +10890,7 @@
],
"support": {
"issues": "https://github.com/zircote/swagger-php/issues",
"source": "https://github.com/zircote/swagger-php/tree/5.8.2"
"source": "https://github.com/zircote/swagger-php/tree/5.8.3"
},
"funding": [
{
@@ -10897,7 +10898,7 @@
"type": "github"
}
],
"time": "2026-02-10T20:10:15+00:00"
"time": "2026-03-02T00:47:18+00:00"
}
],
"packages-dev": [
@@ -11835,16 +11836,16 @@
},
{
"name": "phpstan/phpstan-doctrine",
"version": "2.0.18",
"version": "2.0.20",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-doctrine.git",
"reference": "44a216a5cd9fe52be489dcf1e2d565c473daa1ca"
"reference": "72f4f7a02d6c98d9101e8616e0488bc0a785196d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/44a216a5cd9fe52be489dcf1e2d565c473daa1ca",
"reference": "44a216a5cd9fe52be489dcf1e2d565c473daa1ca",
"url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/72f4f7a02d6c98d9101e8616e0488bc0a785196d",
"reference": "72f4f7a02d6c98d9101e8616e0488bc0a785196d",
"shasum": ""
},
"require": {
@@ -11905,9 +11906,9 @@
],
"support": {
"issues": "https://github.com/phpstan/phpstan-doctrine/issues",
"source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.18"
"source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.20"
},
"time": "2026-02-24T10:01:00+00:00"
"time": "2026-03-13T13:44:51+00:00"
},
{
"name": "phpstan/phpstan-phpunit",
@@ -14073,16 +14074,16 @@
},
{
"name": "symfony/debug-bundle",
"version": "v6.4.27",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-bundle.git",
"reference": "21a61c55192d558a6b81cdb12e8c010fc9474fe0"
"reference": "eb79084c2c9778559b21f61cb1507cbd580cc6e1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/21a61c55192d558a6b81cdb12e8c010fc9474fe0",
"reference": "21a61c55192d558a6b81cdb12e8c010fc9474fe0",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/eb79084c2c9778559b21f61cb1507cbd580cc6e1",
"reference": "eb79084c2c9778559b21f61cb1507cbd580cc6e1",
"shasum": ""
},
"require": {
@@ -14127,7 +14128,7 @@
"description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/debug-bundle/tree/v6.4.27"
"source": "https://github.com/symfony/debug-bundle/tree/v6.4.35"
},
"funding": [
{
@@ -14147,7 +14148,7 @@
"type": "tidelift"
}
],
"time": "2025-10-11T17:35:31+00:00"
"time": "2026-03-02T09:25:10+00:00"
},
{
"name": "symfony/dom-crawler",
@@ -14222,16 +14223,16 @@
},
{
"name": "symfony/phpunit-bridge",
"version": "v6.4.26",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
"reference": "406aa80401bf960e7a173a3ccf268ae82b6bc93f"
"reference": "10b3646a631191501e73e83211fed9b19413e54e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/406aa80401bf960e7a173a3ccf268ae82b6bc93f",
"reference": "406aa80401bf960e7a173a3ccf268ae82b6bc93f",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/10b3646a631191501e73e83211fed9b19413e54e",
"reference": "10b3646a631191501e73e83211fed9b19413e54e",
"shasum": ""
},
"require": {
@@ -14287,7 +14288,7 @@
"testing"
],
"support": {
"source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.26"
"source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.35"
},
"funding": [
{
@@ -14307,20 +14308,20 @@
"type": "tidelift"
}
],
"time": "2025-09-12T08:37:02+00:00"
"time": "2026-03-04T13:04:47+00:00"
},
{
"name": "symfony/web-profiler-bundle",
"version": "v6.4.34",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
"reference": "848bc5d5745500f855bb201d57ae066fd7e67448"
"reference": "ae7fc9802c6eef1fa5078efad3c72db836ffcb9d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/848bc5d5745500f855bb201d57ae066fd7e67448",
"reference": "848bc5d5745500f855bb201d57ae066fd7e67448",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/ae7fc9802c6eef1fa5078efad3c72db836ffcb9d",
"reference": "ae7fc9802c6eef1fa5078efad3c72db836ffcb9d",
"shasum": ""
},
"require": {
@@ -14373,7 +14374,7 @@
"dev"
],
"support": {
"source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.34"
"source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.35"
},
"funding": [
{
@@ -14393,7 +14394,7 @@
"type": "tidelift"
}
],
"time": "2026-02-05T15:19:06+00:00"
"time": "2026-03-03T10:22:09+00:00"
},
{
"name": "theseer/tokenizer",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -6,7 +6,7 @@
"/build/app.41748d55.js"
],
"css": [
"/build/app.6bfb9c66.css"
"/build/app.99ea4166.css"
]
},
"app-rtl": {
@@ -15,7 +15,7 @@
"/build/app-rtl.15853b82.js"
],
"css": [
"/build/app-rtl.16271884.css"
"/build/app-rtl.16262d9a.css"
]
},
"export-pdf": {
@@ -82,9 +82,9 @@
"integrity": {
"/build/runtime.684e9f6d.js": "sha384-suKiEX2de4fdNqQzdYbUd6osp4AepD9FiMXl+1QdvgMW9dcQqUWQNQasf3KWzwLr",
"/build/app.41748d55.js": "sha384-iVPHnOXYjVDuq8567h8I3U2gl5SCV3mNMFNQCJdgMiNuFMZ4KO7PXOLanjgcGzTt",
"/build/app.6bfb9c66.css": "sha384-38+zSolYBrZdSwNcrDi5qCaQGCQlBJRKwtsJV+pnrf8rCCpf6z/M7fEpV4tS79Sz",
"/build/app.99ea4166.css": "sha384-OF0ozOygdShRhEacN7Tb8YtDSXABczVqjmXRYQjX1YGTmuRQMNCipFTqzHd9IyCH",
"/build/app-rtl.15853b82.js": "sha384-UnKKgLMu9FnRT+CFE0no/+UiUks012bYriQdUWa6f02mo6Lswl947mPybjvKL503",
"/build/app-rtl.16271884.css": "sha384-P1x4vYfjfM4JL55NQ3sfLiy+BSy8cM4bNcshj9M62nMJ4JD2xAWUioNv6VrmaK7U",
"/build/app-rtl.16262d9a.css": "sha384-CjN7UFkBszmM9k6xfN8LWH79IOsgpVTwwHoffvAOc04j9+y904uDw/Y+LnSQmrDj",
"/build/export-pdf.395749ab.js": "sha384-3Hjvmu4FC/0dhHnR8kyRBU7k2xMNy1lxBpGgOkrw8PxXnwyQDM8/5bQmkJbjVT1+",
"/build/export-pdf.d8a6c23b.css": "sha384-ztepocHE4rnGE9eKZ4kL6jTKaePUyiwiB9TjJjstjpf/ckcKg1HedrEOOk/8ElJg",
"/build/invoice.42b319e4.js": "sha384-xxK7sCe/ZhTjMPFPeX1xvILURxNRZz2hJHZxAGVaw9zE6TC++2/6y2eKqg8cz852",

View File

@@ -1,7 +1,7 @@
{
"build/app.css": "/build/app.6bfb9c66.css",
"build/app.css": "/build/app.99ea4166.css",
"build/app.js": "/build/app.41748d55.js",
"build/app-rtl.css": "/build/app-rtl.16271884.css",
"build/app-rtl.css": "/build/app-rtl.16262d9a.css",
"build/app-rtl.js": "/build/app-rtl.15853b82.js",
"build/export-pdf.css": "/build/export-pdf.d8a6c23b.css",
"build/export-pdf.js": "/build/export-pdf.395749ab.js",

View File

@@ -17,11 +17,11 @@ final class Constants
/**
* The current release version
*/
public const VERSION = '2.51.0';
public const VERSION = '2.52.0';
/**
* The current release: major * 10000 + minor * 100 + patch
*/
public const VERSION_ID = 25100;
public const VERSION_ID = 25200;
/**
* The software name
*/

View File

@@ -44,7 +44,7 @@ final class LocaleFormatExtensions extends AbstractExtension implements LocaleAw
// cannot be deleted right now, needs to be kept for invoice and export templates
new TwigFilter('date_full', [$this, 'dateTime'], ['deprecation_info' => new DeprecatedCallableInfo('Kimai', '2.0', 'date_time')]),
new TwigFilter('date_format', [$this, 'dateFormat']),
new TwigFilter('date_weekday', [$this, 'dateWeekday']),
new TwigFilter('date_weekday', [$this, 'dateWeekday'], ['is_safe' => ['html']]),
new TwigFilter('time', [$this, 'time']),
new TwigFilter('duration', [$this, 'duration']),
new TwigFilter('chart_duration', [$this, 'durationChart']),
@@ -144,9 +144,9 @@ final class LocaleFormatExtensions extends AbstractExtension implements LocaleAw
return (string) $this->getFormatter()->dateFormat($date, $format);
}
public function dateWeekday(\DateTimeInterface $date): string
public function dateWeekday(\DateTimeInterface $date, string $spacer = ' '): string
{
return $this->dayName($date, true) . ' ' . $this->getFormatter()->dateFormat($date, 'd');
return $this->dayName($date, true) . $spacer . $this->getFormatter()->dateFormat($date, 'd');
}
public function time(\DateTimeInterface|string|null $date): string

View File

@@ -590,4 +590,14 @@ class LocaleFormatExtensionsTest extends TestCase
self::assertEquals('34.29', $sut->durationChart(123456));
self::assertEquals('-34.29', $sut->durationChart(-123456));
}
public function testDateWeekday(): void
{
$dateTime = new \DateTimeImmutable('2026-08-13 08:00:00 Europe/Berlin');
$sut = $this->getSut('en', $this->localeEn);
self::assertEquals('Thu 13', $sut->dateWeekday($dateTime));
self::assertEquals('Thu#-#13', $sut->dateWeekday($dateTime, '#-#'));
self::assertEquals('Thu<br>13', $sut->dateWeekday($dateTime, '<br>'));
}
}