diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index b4866bf9..95f3b179 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -170,6 +170,7 @@ $fixer ->setFinder( PhpCsFixer\Finder::create() ->in([ + __DIR__ . '/migrations/', __DIR__ . '/src/', __DIR__ . '/tests/', ]) diff --git a/assets/sass/layout.scss b/assets/sass/layout.scss index 62b391d5..e1da34cf 100644 --- a/assets/sass/layout.scss +++ b/assets/sass/layout.scss @@ -43,3 +43,21 @@ h1.navbar-brand a { .navbar { --tblr-navbar-brand-font-size: 1rem; } + +/* user shortcuts dropdown */ +.user-shortcuts { + .dropdown-menu-card { + min-width: 260px; + } + .user-shortcuts-icon { + background-color: var(--tblr-bg-surface-secondary); + color: var(--tblr-gray-500); + height: 3.125rem; + width: 3.125rem; + margin-left: auto; + margin-right: auto; + display: flex; + align-items: center; + justify-content: center; + } +} diff --git a/assets/sass/tables.scss b/assets/sass/tables.scss index 3c04fe77..cc926fd1 100644 --- a/assets/sass/tables.scss +++ b/assets/sass/tables.scss @@ -26,7 +26,7 @@ table.dataTable { thead .sorting_asc:after, thead .sorting_desc:after { padding-left: 5px; - font-family: 'Font Awesome 5 Free'; + font-family: 'Font Awesome 6 Free'; opacity: 0.5; font-size: 12px; } diff --git a/composer.json b/composer.json index 5a657872..b606b1be 100644 --- a/composer.json +++ b/composer.json @@ -35,7 +35,7 @@ "friendsofsymfony/rest-bundle": "^3.0", "gedmo/doctrine-extensions": "^3.6", "jms/serializer-bundle": "^5.0", - "kevinpapst/tabler-bundle": "^1.0", + "kevinpapst/tabler-bundle": "dev-main", "league/csv": "^9.4", "mpdf/mpdf": "^8.0", "nelmio/api-doc-bundle": "^4.0", diff --git a/composer.lock b/composer.lock index 580abb1a..824d7bb7 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1f5d701618a13718f0b3f15d5b8200b3", + "content-hash": "70bcd229892b3c860ec8404ccf63ea91", "packages": [ { "name": "azuyalabs/yasumi", @@ -662,16 +662,16 @@ }, { "name": "doctrine/dbal", - "version": "3.7.1", + "version": "3.7.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2" + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/5b7bd66c9ff58c04c5474ab85edce442f8081cb2", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/0ac3c270590e54910715e9a1a044cc368df282b2", + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2", "shasum": "" }, "require": { @@ -687,7 +687,7 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.35", + "phpstan/phpstan": "1.10.42", "phpstan/phpstan-strict-rules": "^1.5", "phpunit/phpunit": "9.6.13", "psalm/plugin-phpunit": "0.18.4", @@ -755,7 +755,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.7.1" + "source": "https://github.com/doctrine/dbal/tree/3.7.2" }, "funding": [ { @@ -771,7 +771,7 @@ "type": "tidelift" } ], - "time": "2023-10-06T05:06:20+00:00" + "time": "2023-11-19T08:06:58+00:00" }, { "name": "doctrine/deprecations", @@ -1362,16 +1362,16 @@ }, { "name": "doctrine/migrations", - "version": "3.7.0", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "282661f27129232e94e5e4dd5cb89a95c796bec2" + "reference": "e4e0855ea993d169c8adb50e19b014e64bbdda46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/282661f27129232e94e5e4dd5cb89a95c796bec2", - "reference": "282661f27129232e94e5e4dd5cb89a95c796bec2", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/e4e0855ea993d169c8adb50e19b014e64bbdda46", + "reference": "e4e0855ea993d169c8adb50e19b014e64bbdda46", "shasum": "" }, "require": { @@ -1444,7 +1444,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.7.0" + "source": "https://github.com/doctrine/migrations/tree/3.7.1" }, "funding": [ { @@ -1460,7 +1460,7 @@ "type": "tidelift" } ], - "time": "2023-11-13T12:31:07+00:00" + "time": "2023-11-19T06:55:22+00:00" }, { "name": "doctrine/orm", @@ -2447,16 +2447,16 @@ }, { "name": "kevinpapst/tabler-bundle", - "version": "1.0.0", + "version": "dev-main", "source": { "type": "git", "url": "https://github.com/kevinpapst/TablerBundle.git", - "reference": "9554efc6f96d757decbc4b52402eb964e9c90786" + "reference": "ccc45d01cff48bca1613eac25ca484e5b51b5d06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kevinpapst/TablerBundle/zipball/9554efc6f96d757decbc4b52402eb964e9c90786", - "reference": "9554efc6f96d757decbc4b52402eb964e9c90786", + "url": "https://api.github.com/repos/kevinpapst/TablerBundle/zipball/ccc45d01cff48bca1613eac25ca484e5b51b5d06", + "reference": "ccc45d01cff48bca1613eac25ca484e5b51b5d06", "shasum": "" }, "require": { @@ -2485,6 +2485,7 @@ "suggest": { "knplabs/knp-menu-bundle": "Allows easy menu integration" }, + "default-branch": true, "type": "symfony-bundle", "autoload": { "psr-4": { @@ -2504,7 +2505,7 @@ "description": "Admin/Backend theme bundle for Symfony based on Tabler.io", "support": { "issues": "https://github.com/kevinpapst/TablerBundle/issues", - "source": "https://github.com/kevinpapst/TablerBundle/tree/1.0.0" + "source": "https://github.com/kevinpapst/TablerBundle/tree/main" }, "funding": [ { @@ -2516,7 +2517,7 @@ "type": "github" } ], - "time": "2023-09-27T13:27:36+00:00" + "time": "2023-11-29T14:19:19+00:00" }, { "name": "laminas/laminas-escaper", @@ -4075,16 +4076,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.24.2", + "version": "1.24.4", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "bcad8d995980440892759db0c32acae7c8e79442" + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bcad8d995980440892759db0c32acae7c8e79442", - "reference": "bcad8d995980440892759db0c32acae7c8e79442", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6bd0c26f3786cd9b7c359675cb789e35a8e07496", + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496", "shasum": "" }, "require": { @@ -4116,9 +4117,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.2" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4" }, - "time": "2023-09-26T12:28:12+00:00" + "time": "2023-11-26T18:29:22+00:00" }, { "name": "psr/cache", @@ -4625,7 +4626,7 @@ }, { "name": "scheb/2fa-backup-code", - "version": "v6.10.0", + "version": "v6.11.0", "source": { "type": "git", "url": "https://github.com/scheb/2fa-backup-code.git", @@ -4668,22 +4669,22 @@ "two-step" ], "support": { - "source": "https://github.com/scheb/2fa-backup-code/tree/v6.10.0" + "source": "https://github.com/scheb/2fa-backup-code/tree/v6.11.0" }, "time": "2023-11-04T12:54:57+00:00" }, { "name": "scheb/2fa-bundle", - "version": "v6.10.0", + "version": "v6.11.0", "source": { "type": "git", "url": "https://github.com/scheb/2fa-bundle.git", - "reference": "493a8712be5461ca90f4ac0eb819cfcf6cf8d009" + "reference": "fc0860b82509753f2efddfed5ade12670753b661" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scheb/2fa-bundle/zipball/493a8712be5461ca90f4ac0eb819cfcf6cf8d009", - "reference": "493a8712be5461ca90f4ac0eb819cfcf6cf8d009", + "url": "https://api.github.com/repos/scheb/2fa-bundle/zipball/fc0860b82509753f2efddfed5ade12670753b661", + "reference": "fc0860b82509753f2efddfed5ade12670753b661", "shasum": "" }, "require": { @@ -4735,22 +4736,22 @@ "two-step" ], "support": { - "source": "https://github.com/scheb/2fa-bundle/tree/v6.10.0" + "source": "https://github.com/scheb/2fa-bundle/tree/v6.11.0" }, - "time": "2023-11-04T12:54:57+00:00" + "time": "2023-11-23T15:37:28+00:00" }, { "name": "scheb/2fa-totp", - "version": "v6.10.0", + "version": "v6.11.0", "source": { "type": "git", "url": "https://github.com/scheb/2fa-totp.git", - "reference": "ce5f9ab528d00671e6580ef37a4cb49c5e373bdb" + "reference": "c90a1cf73346c973053103821f26338c6f2e22a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scheb/2fa-totp/zipball/ce5f9ab528d00671e6580ef37a4cb49c5e373bdb", - "reference": "ce5f9ab528d00671e6580ef37a4cb49c5e373bdb", + "url": "https://api.github.com/repos/scheb/2fa-totp/zipball/c90a1cf73346c973053103821f26338c6f2e22a5", + "reference": "c90a1cf73346c973053103821f26338c6f2e22a5", "shasum": "" }, "require": { @@ -4786,9 +4787,9 @@ "two-step" ], "support": { - "source": "https://github.com/scheb/2fa-totp/tree/v6.10.0" + "source": "https://github.com/scheb/2fa-totp/tree/v6.11.0" }, - "time": "2023-11-04T12:54:57+00:00" + "time": "2023-11-23T15:37:28+00:00" }, { "name": "setasign/fpdi", @@ -5013,16 +5014,16 @@ }, { "name": "symfony/cache", - "version": "v6.3.8", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "ba33517043c22c94c7ab04b056476f6f86816cf8" + "reference": "8c6e84272e4febbb1fed3c5b9f3c722537c2bd55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/ba33517043c22c94c7ab04b056476f6f86816cf8", - "reference": "ba33517043c22c94c7ab04b056476f6f86816cf8", + "url": "https://api.github.com/repos/symfony/cache/zipball/8c6e84272e4febbb1fed3c5b9f3c722537c2bd55", + "reference": "8c6e84272e4febbb1fed3c5b9f3c722537c2bd55", "shasum": "" }, "require": { @@ -5089,7 +5090,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.3.8" + "source": "https://github.com/symfony/cache/tree/v6.3.9" }, "funding": [ { @@ -5105,7 +5106,7 @@ "type": "tidelift" } ], - "time": "2023-11-07T10:17:15+00:00" + "time": "2023-11-24T13:24:35+00:00" }, { "name": "symfony/cache-contracts", @@ -5333,16 +5334,16 @@ }, { "name": "symfony/console", - "version": "v6.3.8", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92" + "reference": "0566dbd051f8648d980592c7849f5d90d2c7c60c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0d14a9f6d04d4ac38a8cea1171f4554e325dae92", - "reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92", + "url": "https://api.github.com/repos/symfony/console/zipball/0566dbd051f8648d980592c7849f5d90d2c7c60c", + "reference": "0566dbd051f8648d980592c7849f5d90d2c7c60c", "shasum": "" }, "require": { @@ -5403,7 +5404,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.8" + "source": "https://github.com/symfony/console/tree/v6.3.9" }, "funding": [ { @@ -5419,7 +5420,7 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:09:35+00:00" + "time": "2023-11-20T16:36:29+00:00" }, { "name": "symfony/css-selector", @@ -6403,16 +6404,16 @@ }, { "name": "symfony/framework-bundle", - "version": "v6.3.8", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "e88be137ea0652ee2caf2eacb21283820904be4f" + "reference": "f83d20092e98c3ae8b5874b8f0787546c5c61cda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/e88be137ea0652ee2caf2eacb21283820904be4f", - "reference": "e88be137ea0652ee2caf2eacb21283820904be4f", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/f83d20092e98c3ae8b5874b8f0787546c5c61cda", + "reference": "f83d20092e98c3ae8b5874b8f0787546c5c61cda", "shasum": "" }, "require": { @@ -6527,7 +6528,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.3.8" + "source": "https://github.com/symfony/framework-bundle/tree/v6.3.9" }, "funding": [ { @@ -6543,7 +6544,7 @@ "type": "tidelift" } ], - "time": "2023-11-09T14:35:42+00:00" + "time": "2023-11-24T10:25:33+00:00" }, { "name": "symfony/http-client", @@ -6717,16 +6718,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.3.8", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ce332676de1912c4389222987193c3ef38033df6" + "reference": "49a04fd3a21edc9ce503ab78e9f342805fefe780" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ce332676de1912c4389222987193c3ef38033df6", - "reference": "ce332676de1912c4389222987193c3ef38033df6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/49a04fd3a21edc9ce503ab78e9f342805fefe780", + "reference": "49a04fd3a21edc9ce503ab78e9f342805fefe780", "shasum": "" }, "require": { @@ -6774,7 +6775,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.3.8" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.9" }, "funding": [ { @@ -6790,20 +6791,20 @@ "type": "tidelift" } ], - "time": "2023-11-07T10:17:15+00:00" + "time": "2023-11-20T16:36:29+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.8", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "929202375ccf44a309c34aeca8305408442ebcc1" + "reference": "d63fe6b1e3ad2f037f6f000a6fc867fa8934f35c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/929202375ccf44a309c34aeca8305408442ebcc1", - "reference": "929202375ccf44a309c34aeca8305408442ebcc1", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d63fe6b1e3ad2f037f6f000a6fc867fa8934f35c", + "reference": "d63fe6b1e3ad2f037f6f000a6fc867fa8934f35c", "shasum": "" }, "require": { @@ -6887,7 +6888,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.3.8" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.9" }, "funding": [ { @@ -6903,7 +6904,7 @@ "type": "tidelift" } ], - "time": "2023-11-10T13:47:32+00:00" + "time": "2023-11-29T10:24:27+00:00" }, { "name": "symfony/intl", @@ -7947,16 +7948,16 @@ }, { "name": "symfony/property-info", - "version": "v6.3.0", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "7f3a03716112269741fe2a809f8f791a371d1fcd" + "reference": "664ae7ad443d7cc591ff3e15496b954e4cefe729" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/7f3a03716112269741fe2a809f8f791a371d1fcd", - "reference": "7f3a03716112269741fe2a809f8f791a371d1fcd", + "url": "https://api.github.com/repos/symfony/property-info/zipball/664ae7ad443d7cc591ff3e15496b954e4cefe729", + "reference": "664ae7ad443d7cc591ff3e15496b954e4cefe729", "shasum": "" }, "require": { @@ -8010,7 +8011,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.3.0" + "source": "https://github.com/symfony/property-info/tree/v6.3.9" }, "funding": [ { @@ -8026,7 +8027,7 @@ "type": "tidelift" } ], - "time": "2023-05-19T08:06:44+00:00" + "time": "2023-11-24T11:57:32+00:00" }, { "name": "symfony/rate-limiter", @@ -8614,16 +8615,16 @@ }, { "name": "symfony/serializer", - "version": "v6.3.8", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "b3ad1515a276473f7919ac97e560017284a7c4bf" + "reference": "87faafcc88ace143b30fdc34b240d9a3603bc95e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/b3ad1515a276473f7919ac97e560017284a7c4bf", - "reference": "b3ad1515a276473f7919ac97e560017284a7c4bf", + "url": "https://api.github.com/repos/symfony/serializer/zipball/87faafcc88ace143b30fdc34b240d9a3603bc95e", + "reference": "87faafcc88ace143b30fdc34b240d9a3603bc95e", "shasum": "" }, "require": { @@ -8688,7 +8689,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.3.8" + "source": "https://github.com/symfony/serializer/tree/v6.3.9" }, "funding": [ { @@ -8704,7 +8705,7 @@ "type": "tidelift" } ], - "time": "2023-11-07T10:11:25+00:00" + "time": "2023-11-29T10:00:30+00:00" }, { "name": "symfony/service-contracts", @@ -8852,16 +8853,16 @@ }, { "name": "symfony/string", - "version": "v6.3.8", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "13880a87790c76ef994c91e87efb96134522577a" + "reference": "56427887aeaf540e9bbd121ad6c43f14ad3ce136" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/13880a87790c76ef994c91e87efb96134522577a", - "reference": "13880a87790c76ef994c91e87efb96134522577a", + "url": "https://api.github.com/repos/symfony/string/zipball/56427887aeaf540e9bbd121ad6c43f14ad3ce136", + "reference": "56427887aeaf540e9bbd121ad6c43f14ad3ce136", "shasum": "" }, "require": { @@ -8918,7 +8919,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.8" + "source": "https://github.com/symfony/string/tree/v6.3.9" }, "funding": [ { @@ -8934,7 +8935,7 @@ "type": "tidelift" } ], - "time": "2023-11-09T08:28:21+00:00" + "time": "2023-11-28T20:40:29+00:00" }, { "name": "symfony/translation", @@ -9304,16 +9305,16 @@ }, { "name": "symfony/validator", - "version": "v6.3.8", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "f75b40e088d095db1e788b81605a76f4563cb80e" + "reference": "c118889931856af47b0732b609f3ac2ddccd1da6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/f75b40e088d095db1e788b81605a76f4563cb80e", - "reference": "f75b40e088d095db1e788b81605a76f4563cb80e", + "url": "https://api.github.com/repos/symfony/validator/zipball/c118889931856af47b0732b609f3ac2ddccd1da6", + "reference": "c118889931856af47b0732b609f3ac2ddccd1da6", "shasum": "" }, "require": { @@ -9380,7 +9381,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.3.8" + "source": "https://github.com/symfony/validator/tree/v6.3.9" }, "funding": [ { @@ -9396,7 +9397,7 @@ "type": "tidelift" } ], - "time": "2023-11-07T10:17:15+00:00" + "time": "2023-11-29T07:44:47+00:00" }, { "name": "symfony/var-dumper", @@ -9484,16 +9485,16 @@ }, { "name": "symfony/var-exporter", - "version": "v6.3.6", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "374d289c13cb989027274c86206ddc63b16a2441" + "reference": "a00fd2d47af5c95e95e8e371a74be2e79b95dfae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/374d289c13cb989027274c86206ddc63b16a2441", - "reference": "374d289c13cb989027274c86206ddc63b16a2441", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/a00fd2d47af5c95e95e8e371a74be2e79b95dfae", + "reference": "a00fd2d47af5c95e95e8e371a74be2e79b95dfae", "shasum": "" }, "require": { @@ -9538,7 +9539,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.3.6" + "source": "https://github.com/symfony/var-exporter/tree/v6.3.9" }, "funding": [ { @@ -9554,7 +9555,7 @@ "type": "tidelift" } ], - "time": "2023-10-13T09:16:49+00:00" + "time": "2023-11-28T20:34:48+00:00" }, { "name": "symfony/webpack-encore-bundle", @@ -9754,25 +9755,25 @@ }, { "name": "twig/cssinliner-extra", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/cssinliner-extra.git", - "reference": "59d107afea4ca58be35ae1386bd90b53424f3b34" + "reference": "259a4b861732545e0e1ecd43bf25b251494af45b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/59d107afea4ca58be35ae1386bd90b53424f3b34", - "reference": "59d107afea4ca58be35ae1386bd90b53424f3b34", + "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/259a4b861732545e0e1ecd43bf25b251494af45b", + "reference": "259a4b861732545e0e1ecd43bf25b251494af45b", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", "tijsverkoyen/css-to-inline-styles": "^2.0", - "twig/twig": "^2.7|^3.0" + "twig/twig": "^3.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.4|^6.3" + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -9803,7 +9804,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.7.1" + "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.8.0" }, "funding": [ { @@ -9815,31 +9816,31 @@ "type": "tidelift" } ], - "time": "2023-07-29T15:34:56+00:00" + "time": "2023-11-21T14:02:01+00:00" }, { "name": "twig/extra-bundle", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "f10baafe6eb0ecd615d52d5cbfb713a39f68e8f3" + "reference": "32807183753de0388c8e59f7ac2d13bb47311140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/f10baafe6eb0ecd615d52d5cbfb713a39f68e8f3", - "reference": "f10baafe6eb0ecd615d52d5cbfb713a39f68e8f3", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/32807183753de0388c8e59f7ac2d13bb47311140", + "reference": "32807183753de0388c8e59f7ac2d13bb47311140", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/framework-bundle": "^5.4|^6.0", - "symfony/twig-bundle": "^5.4|^6.0", - "twig/twig": "^2.7|^3.0" + "symfony/framework-bundle": "^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0", + "twig/twig": "^3.0" }, "require-dev": { "league/commonmark": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4|^6.3", + "symfony/phpunit-bridge": "^6.4|^7.0", "twig/cache-extra": "^3.0", "twig/cssinliner-extra": "^2.12|^3.0", "twig/html-extra": "^2.12|^3.0", @@ -9877,7 +9878,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.7.1" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.8.0" }, "funding": [ { @@ -9889,29 +9890,29 @@ "type": "tidelift" } ], - "time": "2023-07-29T15:34:56+00:00" + "time": "2023-11-21T14:02:01+00:00" }, { "name": "twig/inky-extra", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/inky-extra.git", - "reference": "c6145677b63b3fcd27b1b3bbae9e64edbf12a273" + "reference": "8c12463f6d66697347692b04b12c5c1789dc1a5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/c6145677b63b3fcd27b1b3bbae9e64edbf12a273", - "reference": "c6145677b63b3fcd27b1b3bbae9e64edbf12a273", + "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/8c12463f6d66697347692b04b12c5c1789dc1a5c", + "reference": "8c12463f6d66697347692b04b12c5c1789dc1a5c", "shasum": "" }, "require": { "lorenzo/pinky": "^1.0.5", - "php": ">=7.1.3", - "twig/twig": "^2.7|^3.0" + "php": ">=7.2.5", + "twig/twig": "^3.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.4|^6.3" + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -9943,7 +9944,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/inky-extra/tree/v3.7.1" + "source": "https://github.com/twigphp/inky-extra/tree/v3.8.0" }, "funding": [ { @@ -9955,29 +9956,29 @@ "type": "tidelift" } ], - "time": "2023-07-29T15:34:56+00:00" + "time": "2023-11-21T14:02:01+00:00" }, { "name": "twig/intl-extra", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/intl-extra.git", - "reference": "4f4fe572f635534649cc069e1dafe4a8ad63774d" + "reference": "7b3db67c700735f473a265a97e1adaeba3e6ca0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/4f4fe572f635534649cc069e1dafe4a8ad63774d", - "reference": "4f4fe572f635534649cc069e1dafe4a8ad63774d", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/7b3db67c700735f473a265a97e1adaeba3e6ca0c", + "reference": "7b3db67c700735f473a265a97e1adaeba3e6ca0c", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/intl": "^5.4|^6.0", - "twig/twig": "^2.7|^3.0" + "php": ">=7.2.5", + "symfony/intl": "^5.4|^6.0|^7.0", + "twig/twig": "^3.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.4|^6.3" + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -10007,7 +10008,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/intl-extra/tree/v3.7.1" + "source": "https://github.com/twigphp/intl-extra/tree/v3.8.0" }, "funding": [ { @@ -10019,30 +10020,30 @@ "type": "tidelift" } ], - "time": "2023-07-29T15:34:56+00:00" + "time": "2023-11-21T17:27:48+00:00" }, { "name": "twig/string-extra", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/string-extra.git", - "reference": "7230d630a25e91cd91a2bd8e2f0e872962507eab" + "reference": "b0c9037d96baff79abe368dc092a59b726517548" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/string-extra/zipball/7230d630a25e91cd91a2bd8e2f0e872962507eab", - "reference": "7230d630a25e91cd91a2bd8e2f0e872962507eab", + "url": "https://api.github.com/repos/twigphp/string-extra/zipball/b0c9037d96baff79abe368dc092a59b726517548", + "reference": "b0c9037d96baff79abe368dc092a59b726517548", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/string": "^5.4|^6.0", + "symfony/string": "^5.4|^6.0|^7.0", "symfony/translation-contracts": "^1.1|^2|^3", - "twig/twig": "^2.7|^3.0" + "twig/twig": "^3.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.4|^6.3" + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -10074,7 +10075,7 @@ "unicode" ], "support": { - "source": "https://github.com/twigphp/string-extra/tree/v3.7.1" + "source": "https://github.com/twigphp/string-extra/tree/v3.8.0" }, "funding": [ { @@ -10086,30 +10087,31 @@ "type": "tidelift" } ], - "time": "2023-07-29T15:34:56+00:00" + "time": "2023-11-21T14:02:01+00:00" }, { "name": "twig/twig", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554" + "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", - "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", + "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.22" }, "require-dev": { "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.3" + "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0" }, "type": "library", "autoload": { @@ -10145,7 +10147,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.7.1" + "source": "https://github.com/twigphp/Twig/tree/v3.8.0" }, "funding": [ { @@ -10157,7 +10159,7 @@ "type": "tidelift" } ], - "time": "2023-08-28T11:09:02+00:00" + "time": "2023-11-21T18:54:41+00:00" }, { "name": "webmozart/assert", @@ -10535,16 +10537,16 @@ }, { "name": "dama/doctrine-test-bundle", - "version": "v7.2.1", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/dmaicher/doctrine-test-bundle.git", - "reference": "175b47153609a369117d97d36049b8a8c3b69dc1" + "reference": "688eea6529ea894b83deada10c83662d7804f34b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/175b47153609a369117d97d36049b8a8c3b69dc1", - "reference": "175b47153609a369117d97d36049b8a8c3b69dc1", + "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/688eea6529ea894b83deada10c83662d7804f34b", + "reference": "688eea6529ea894b83deada10c83662d7804f34b", "shasum": "" }, "require": { @@ -10596,44 +10598,46 @@ ], "support": { "issues": "https://github.com/dmaicher/doctrine-test-bundle/issues", - "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v7.2.1" + "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v7.3.0" }, - "time": "2023-02-07T10:02:27+00:00" + "time": "2023-11-27T21:29:42+00:00" }, { "name": "doctrine/data-fixtures", - "version": "1.6.7", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "ae4e845decbe177348fdbecd04331f4fb96aa301" + "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/ae4e845decbe177348fdbecd04331f4fb96aa301", - "reference": "ae4e845decbe177348fdbecd04331f4fb96aa301", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/bbcb74f2ac6dbe81a14b3c3687d7623490a0448f", + "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f", "shasum": "" }, "require": { "doctrine/deprecations": "^0.5.3 || ^1.0", - "doctrine/persistence": "^1.3.3 || ^2.0 || ^3.0", - "php": "^7.2 || ^8.0" + "doctrine/persistence": "^2.0|^3.0", + "php": "^7.4 || ^8.0" }, "conflict": { - "doctrine/dbal": "<2.13", - "doctrine/orm": "<2.14", + "doctrine/dbal": "<3.5 || >=5", + "doctrine/orm": "<2.14 || >=4", "doctrine/phpcr-odm": "<1.3.0" }, "require-dev": { - "doctrine/coding-standard": "^11.0", - "doctrine/dbal": "^2.13 || ^3.0", + "doctrine/annotations": "^1.12 || ^2", + "doctrine/coding-standard": "^12", + "doctrine/dbal": "^3.5 || ^4", "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", - "doctrine/orm": "^2.14", + "doctrine/orm": "^2.14 || ^3", "ext-sqlite3": "*", - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^8.5 || ^9.5 || ^10.0", - "symfony/cache": "^5.0 || ^6.0", - "vimeo/psalm": "^4.10 || ^5.9" + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.6.13 || ^10.4.2", + "symfony/cache": "^5.4 || ^6.3 || ^7", + "symfony/var-exporter": "^5.4 || ^6.3 || ^7", + "vimeo/psalm": "^5.9" }, "suggest": { "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", @@ -10664,7 +10668,7 @@ ], "support": { "issues": "https://github.com/doctrine/data-fixtures/issues", - "source": "https://github.com/doctrine/data-fixtures/tree/1.6.7" + "source": "https://github.com/doctrine/data-fixtures/tree/1.7.0" }, "funding": [ { @@ -10680,26 +10684,26 @@ "type": "tidelift" } ], - "time": "2023-08-17T21:15:33+00:00" + "time": "2023-11-24T11:18:31+00:00" }, { "name": "doctrine/doctrine-fixtures-bundle", - "version": "3.5.0", + "version": "3.5.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", - "reference": "2191922463c976bd512c592d027c033e80460c6d" + "reference": "c808a0c85c38c8ee265cc8405b456c1d2b38567d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/2191922463c976bd512c592d027c033e80460c6d", - "reference": "2191922463c976bd512c592d027c033e80460c6d", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/c808a0c85c38c8ee265cc8405b456c1d2b38567d", + "reference": "c808a0c85c38c8ee265cc8405b456c1d2b38567d", "shasum": "" }, "require": { "doctrine/data-fixtures": "^1.3", "doctrine/doctrine-bundle": "^2.2", - "doctrine/orm": "^2.14.0", + "doctrine/orm": "^2.14.0 || ^3.0", "doctrine/persistence": "^2.4|^3.0", "php": "^7.4 || ^8.0", "symfony/config": "^5.4|^6.0|^7.0", @@ -10717,7 +10721,7 @@ "phpstan/phpstan": "^1.10.39", "phpunit/phpunit": "^9.6.13", "symfony/phpunit-bridge": "^6.3.6", - "vimeo/psalm": "^4.30" + "vimeo/psalm": "^5.15" }, "type": "symfony-bundle", "autoload": { @@ -10751,7 +10755,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", - "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.5.0" + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.5.1" }, "funding": [ { @@ -10767,7 +10771,7 @@ "type": "tidelift" } ], - "time": "2023-11-15T19:40:48+00:00" + "time": "2023-11-19T12:48:54+00:00" }, { "name": "fakerphp/faker", @@ -10839,50 +10843,50 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.38.2", + "version": "v3.40.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "d872cdd543797ade030aaa307c0a4954a712e081" + "reference": "27d2b3265b5d550ec411b4319967ae7cfddfb2e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/d872cdd543797ade030aaa307c0a4954a712e081", - "reference": "d872cdd543797ade030aaa307c0a4954a712e081", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/27d2b3265b5d550ec411b4319967ae7cfddfb2e0", + "reference": "27d2b3265b5d550ec411b4319967ae7cfddfb2e0", "shasum": "" }, "require": { - "composer/semver": "^3.3", + "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", "sebastian/diff": "^4.0 || ^5.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-mbstring": "^1.28", + "symfony/polyfill-php80": "^1.28", + "symfony/polyfill-php81": "^1.28", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { "facile-it/paraunit": "^1.3 || ^2.0", "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", + "keradus/cli-executor": "^2.1", "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", + "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", + "phpspec/prophecy": "^1.17", "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "symfony/phpunit-bridge": "^6.2.3", - "symfony/yaml": "^5.4 || ^6.0" + "phpunit/phpunit": "^9.6", + "symfony/phpunit-bridge": "^6.3.8 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -10920,7 +10924,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.38.2" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.40.0" }, "funding": [ { @@ -10928,7 +10932,7 @@ "type": "github" } ], - "time": "2023-11-14T00:19:22+00:00" + "time": "2023-11-26T09:25:53+00:00" }, { "name": "masterminds/html5", @@ -11166,16 +11170,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.42", + "version": "1.10.46", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "fc2316508de5453140b5cb3d3f8683a33e92f26a" + "reference": "90d3d25c5b98b8068916bbf08ce42d5cb6c54e70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/fc2316508de5453140b5cb3d3f8683a33e92f26a", - "reference": "fc2316508de5453140b5cb3d3f8683a33e92f26a", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/90d3d25c5b98b8068916bbf08ce42d5cb6c54e70", + "reference": "90d3d25c5b98b8068916bbf08ce42d5cb6c54e70", "shasum": "" }, "require": { @@ -11224,20 +11228,20 @@ "type": "tidelift" } ], - "time": "2023-11-17T15:26:57+00:00" + "time": "2023-11-28T14:57:26+00:00" }, { "name": "phpstan/phpstan-doctrine", - "version": "1.3.50", + "version": "1.3.53", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "c94f43bd2f11c249c23b8830f54c28025468a08c" + "reference": "85def57e5db6ac6c8a512200c0cfadf7b6621b10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/c94f43bd2f11c249c23b8830f54c28025468a08c", - "reference": "c94f43bd2f11c249c23b8830f54c28025468a08c", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/85def57e5db6ac6c8a512200c0cfadf7b6621b10", + "reference": "85def57e5db6ac6c8a512200c0cfadf7b6621b10", "shasum": "" }, "require": { @@ -11292,9 +11296,9 @@ "description": "Doctrine extensions for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.3.50" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.3.53" }, - "time": "2023-11-17T10:51:01+00:00" + "time": "2023-11-21T10:31:58+00:00" }, { "name": "phpstan/phpstan-phpunit", @@ -12998,16 +13002,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v6.3.4", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1" + "reference": "b7065c123ae977a008568a3d016a17a110df7a8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", - "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b7065c123ae977a008568a3d016a17a110df7a8e", + "reference": "b7065c123ae977a008568a3d016a17a110df7a8e", "shasum": "" }, "require": { @@ -13045,7 +13049,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.3.4" + "source": "https://github.com/symfony/dom-crawler/tree/v6.3.9" }, "funding": [ { @@ -13061,20 +13065,20 @@ "type": "tidelift" } ], - "time": "2023-08-01T07:43:40+00:00" + "time": "2023-11-20T16:36:29+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "45610900872a35b77db7698651f36129906041ea" + "reference": "36bc5bc71fff1f6ca9c7c7fe1e7e23f4c1ca2aa3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/45610900872a35b77db7698651f36129906041ea", - "reference": "45610900872a35b77db7698651f36129906041ea", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/36bc5bc71fff1f6ca9c7c7fe1e7e23f4c1ca2aa3", + "reference": "36bc5bc71fff1f6ca9c7c7fe1e7e23f4c1ca2aa3", "shasum": "" }, "require": { @@ -13085,7 +13089,7 @@ }, "require-dev": { "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/error-handler": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", "symfony/polyfill-php81": "^1.27" }, "bin": [ @@ -13126,7 +13130,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.3.8" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.0" }, "funding": [ { @@ -13142,7 +13146,7 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:07:48+00:00" + "time": "2023-10-31T08:18:17+00:00" }, { "name": "symfony/process", @@ -13288,16 +13292,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -13326,7 +13330,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -13334,12 +13338,14 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "kevinpapst/tabler-bundle": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { diff --git a/config/packages/scheb_2fa.yaml b/config/packages/scheb_2fa.yaml index d1de5164..92c6a452 100644 --- a/config/packages/scheb_2fa.yaml +++ b/config/packages/scheb_2fa.yaml @@ -8,9 +8,10 @@ scheb_two_factor: totp: enabled: true template: security/2fa.html.twig # Overwritten template - window: 1 # How many codes before/after the current one would be accepted as valid + leeway: 29 # How many seconds the code is valid issuer: Kimai # Issuer name used in QR code two_factor_condition: App\Security\TwoFactorCondition - # FIXME add backup codes - https://symfony.com/bundles/SchebTwoFactorBundle/current/backup_codes.html + # TODO add: backup codes - https://symfony.com/bundles/SchebTwoFactorBundle/current/backup_codes.html + # TODO add: Trusted device feature - https://github.com/scheb/2fa/blob/6.x/doc/configuration.rst diff --git a/config/packages/tabler.yaml b/config/packages/tabler.yaml index 4e55b1ec..bb926a22 100644 --- a/config/packages/tabler.yaml +++ b/config/packages/tabler.yaml @@ -110,7 +110,7 @@ tabler: profile: fas fa-user-edit profile-stats: far fa-chart-bar project: fas fa-briefcase - repeat: fas fa-redo-alt + repeat: fas fa-repeat reporting: far fa-chart-bar report: far fa-chart-bar review: fas fa-user-check diff --git a/migrations/Version20230126002049.php b/migrations/Version20230126002049.php index 5adfd095..1ec77e58 100644 --- a/migrations/Version20230126002049.php +++ b/migrations/Version20230126002049.php @@ -85,7 +85,7 @@ final class Version20230126002049 extends AbstractMigration $this->addSql("UPDATE kimai2_configuration SET `value` = '15' WHERE `name` = 'timesheet.time_increment' and `value` = '0'"); $this->addSql("UPDATE kimai2_configuration SET `value` = '5' WHERE `name` = 'timesheet.time_increment' and `value` IN ('1', '2', '3', '4')"); $this->addSql("UPDATE kimai2_configuration SET `value` = '0' WHERE `name` = 'user.registration'"); - $this->addSql("UPDATE kimai2_roles SET `name` = UPPER(`name`)"); + $this->addSql('UPDATE kimai2_roles SET `name` = UPPER(`name`)'); $this->addSql("UPDATE kimai2_invoice_templates SET `renderer` = 'service-date' WHERE `renderer` = 'freelancer'"); $this->addSql("UPDATE kimai2_invoice_templates SET `renderer` = 'invoice' WHERE `renderer` = 'default'"); $this->addSql("UPDATE kimai2_invoice_templates SET `renderer` = 'default' WHERE `renderer` = 'default-pdf'"); diff --git a/migrations/Version20230327143628.php b/migrations/Version20230327143628.php index 33e88904..ef25ab77 100644 --- a/migrations/Version20230327143628.php +++ b/migrations/Version20230327143628.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the Kimai time-tracking app. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace DoctrineMigrations; use App\Doctrine\AbstractMigration; diff --git a/migrations/Version20230606125948.php b/migrations/Version20230606125948.php index 9e5c1b7f..0897eeb9 100644 --- a/migrations/Version20230606125948.php +++ b/migrations/Version20230606125948.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the Kimai time-tracking app. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace DoctrineMigrations; use App\Doctrine\AbstractMigration; diff --git a/migrations/Version20230819090536.php b/migrations/Version20230819090536.php index ef8411c6..250fb4ff 100644 --- a/migrations/Version20230819090536.php +++ b/migrations/Version20230819090536.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the Kimai time-tracking app. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace DoctrineMigrations; use Doctrine\DBAL\Schema\Schema; diff --git a/migrations/Version20231130000719.php b/migrations/Version20231130000719.php new file mode 100644 index 00000000..38ef02fc --- /dev/null +++ b/migrations/Version20231130000719.php @@ -0,0 +1,43 @@ +addSql("delete u1 from kimai2_user_preferences u1 where u1.name like '%.%' and exists(select 1 from (SELECT name, user_id FROM kimai2_user_preferences WHERE name LIKE '%_%') u2 where u2.name = replace(u1.name, '.', '_') and u1.user_id = u2.user_id)"); + $this->addSql("update kimai2_user_preferences set `name` = replace(`name`, '.', '_')"); + } + + public function down(Schema $schema): void + { + } + + public function isTransactional(): bool + { + return false; + } +} diff --git a/package.json b/package.json index 7bacc506..35cc1b62 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@babel/core": "^7.19.6", "@babel/eslint-parser": "^7.18.2", "@babel/preset-env": "^7.19.4", - "@fortawesome/fontawesome-free": "^6.2.0", + "@fortawesome/fontawesome-free": "^6.5.0", "@fullcalendar/bootstrap5": "^5.11", "@fullcalendar/core": "^5.11", "@fullcalendar/daygrid": "^5.11", @@ -48,7 +48,6 @@ "sass-loader": "^13.2", "tom-select": "^2.2", "webpack": "^5.74.0", - "webpack-cli": "^4.10.0", - "webpack-notifier": "^1.13" + "webpack-cli": "^4.10.0" } } diff --git a/public/build/app.0ecb28c1.css b/public/build/app.0ecb28c1.css new file mode 100644 index 00000000..6f80945d --- /dev/null +++ b/public/build/app.0ecb28c1.css @@ -0,0 +1 @@ +.inline-search{max-width:200px}.inline-search #searchTerm{border-right:0}@media (min-width:360px){.inline-search{max-width:235px}}@media (min-width:768px){.inline-search{max-width:325px}.search-dropdown{width:500px}}h1.navbar-brand a span{display:inline-block;padding-top:.5rem}h1.navbar-brand a:hover{text-decoration:none}#export-buttons .dropdown-menu,.inline-search .dropdown-menu,.page-actions .dropdown-menu{z-index:1021}.navbar{--tblr-navbar-brand-font-size:1rem}.user-shortcuts .dropdown-menu-card{min-width:260px}.user-shortcuts .user-shortcuts-icon{align-items:center;background-color:var(--tblr-bg-surface-secondary);color:var(--tblr-gray-500);display:flex;height:3.125rem;justify-content:center;margin-left:auto;margin-right:auto;width:3.125rem}.error-page{margin-bottom:50px}@media print{.control-sidebar,.sf-toolbar{display:none!important}.col-print-12{width:100%}.content-wrapper{margin:0!important}section.content{margin:0;padding:0}span i.dot{display:none;margin-right:0!important}}.page-center{justify-content:center}.hidden-no-space{margin:0;padding:0}.pre-scrollable{max-height:340px;overflow-y:scroll}td.timesheet-description ul{padding-left:15px}td.timesheet-description p{margin:0}td.badges{line-height:22px}.open-edit{cursor:pointer}td.w-min,th.w-min{white-space:nowrap;width:1%}table.dataTable thead>tr>th.hw-min{white-space:normal;width:1%}.w-avatar{width:40px}.w-avatar img.avatar{max-width:40px}.list-group-item.danger{border-left:.2rem solid #d63939!important;padding-left:1.3rem}.list-group-item.success{border-left:.2rem solid #2fb344!important;padding-left:1.3rem}.box-body-scrollable{max-height:340px;overflow:auto}#activity_details_box th,#customer_details_box th,#project_details_box th{width:30%}.overlay{background:hsla(0,0%,100%,.7);height:100%;left:0;position:fixed;top:0;width:100%;z-index:1021}.overlay>.fas{color:#000;font-size:30px;left:50vw;margin-left:-15px;margin-top:-15px;position:absolute;top:50vh}table.dataTable{clear:both;margin-bottom:0!important;max-width:none!important}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;position:relative}table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{font-weight:700}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after{font-family:Font Awesome\ 6 Free;font-size:12px;opacity:.5;padding-left:5px}table.dataTable thead .sorting:after{content:"\f0dc";opacity:.2}table.dataTable thead .sorting_asc:after{content:"\f077"}table.dataTable thead .sorting_desc:after{content:"\f078"}table.dataTable thead>tr>th{vertical-align:top;white-space:nowrap}table.dataTable th:active{outline:none}table.table-bordered thead td,table.table-bordered thead th{border-left-width:0;border-top-width:0}table.table-bordered tbody td,table.table-bordered tbody th,table.table-bordered tfoot td,table.table-bordered tfoot th{border-bottom-width:0;border-left-width:0}table.table-bordered td:last-child,table.table-bordered th:last-child{border-right-width:0}@media (min-width:1200px){table.dataTable.table>tbody>tr>td{vertical-align:middle}}table.dataTable .actions{width:40px}table.dataTable tr.summary td{background-color:var(--tblr-bg-surface-secondary);border:0;font-weight:700}table.dataTable tr th.multiCheckbox{width:15px}table.dataTable tr.overlapping{border-top:2px solid rgba(214,57,57,.1)}table.dataTable tr.exported{opacity:.7}table.dataTable td .btn-group{display:flex}table.dataTable td .label{font-size:85%;line-height:24px;padding:.3em .6em}table.dataTable td span.label-invisible{opacity:.6}table.dataTable td.weekend,table.dataTable th.weekend{background-color:var(--tblr-bg-surface-secondary)}table.dataTable th.today{background-color:var(--tblr-highlight-bg)}table.dataTable td.total,table.dataTable th.total{font-weight:700}.form-dataTable table.dataTable .form-group{margin-bottom:0}table.table-hover tr.exported:hover{opacity:1}.calendar-entry ul{list-style-type:none;padding:0}.calendar-entry div{white-space:pre-line}.draggable{cursor:grab}#timesheet_calendar{--bs-gray-400:var(--tblr-border-color);--bs-gray-200:var(--tblr-gray-200)}.fc-day-sat,.fc-day-sun{background-color:var(--tblr-bg-surface-secondary)}@keyframes ticktac-blink{0%{opacity:1}5%{opacity:.95}10%{opacity:.9}15%{opacity:.85}20%{opacity:.8}25%{opacity:.75}30%{opacity:.7}35%{opacity:.65}40%{opacity:.6}45%{opacity:.65}50%{opacity:.7}55%{opacity:.75}60%{opacity:.8}65%{opacity:.85}70%{opacity:.9}75%{opacity:.95}to{opacity:1}}.ticktac-start i,.ticktac-stop i{animation:ticktac-blink 2s step-end infinite;font-size:140%}@media (max-width:991.98px){aside.navbar .btn-outline-white,header.navbar .btn-outline-white{border-color:hsla(0,0%,100%,.2)}}.ts-dropdown{z-index:1021}.ts-control>input{min-width:unset}.ts-dropdown .optgroup [data-selectable].option{padding-left:20px}.checkbox-menu.show{z-index:1021}.duration-widget .input-group{min-width:110px}.duration-widget input.duration-input{min-width:55px}#report-form div.btn-list{width:100%}#report-form div.btn-list div.selectpicker{max-width:400px;min-width:200px}#report-form div.btn-list li.dropdown-item .form-check{margin-bottom:0}.color-choice-item{border-radius:var(--tblr-border-radius);display:inline-block;height:20px;margin-right:10px;width:20px}fieldset>.mb-3.row:last-child{margin-bottom:0!important}.form-fieldset-light{background-color:unset;border-left:none;border-radius:0;border-right:none;border-top:none;margin-bottom:0}.form-fieldset-light:last-child{border:none}.modal-content{box-shadow:0 10px 80px rgba(0,0,0,.6)}.progress-group .progress-title{white-space:nowrap;width:100%}.progress-group .progress-title .progress-text{display:inline-block;width:1%}.progress-group .progress-title .progress-number{display:inline-block;float:none;width:98%}.initials{font-size:13px;font-weight:700}.avatar-xs{height:23px;width:23px}.avatar-xs .initials{font-size:10px}.avatar-sm{height:38px;width:38px}.avatar-sm .initials{font-size:17px}.avatar-md{height:45px;width:45px}.avatar-md .initials{font-size:21px}.avatar-lg{height:60px;width:60px}.avatar-lg .initials{font-size:28px}.widget-user-image{border:3px solid #fff;border-radius:50%}.widget-user-image .avatar{height:83px;width:83px}.widget-user-image .avatar .initials{font-size:40px}table.dataTable.table>tbody>tr>td.avatars .avatar{margin:1px}.avatar-list-stacked .avatar{margin-right:calc(var(--tblr-avatar-size)*-.2)!important}[data-bs-theme=dark] table.dataTable th.today{color:var(--tblr-muted)}[data-bs-theme=dark] .overlay{background:rgba(0,0,0,.5)}[data-bs-theme=dark] .overlay>.fas{color:var(--tblr-white)}section.quick-entry-page #quick_entry_form{display:none}section.quick-entry-page .ts-wrapper{display:table;table-layout:fixed}section.quick-entry-page #quick_entry_box .duration-widget .input-group{min-width:85px}section.quick-entry-page #quick_entry_box .duration-widget .btn-duration-preset{padding:7px 8px 7px 5px}section.quick-entry-page #quick_entry_box .duration-widget input{padding:7px 3px 7px 7px}fieldset legend.col-form-label{padding-top:0}fieldset.form-fieldset legend{font-size:1rem;font-weight:700}.ts-dropdown .optgroup:before{--tblr-spacer:.5rem}.dropdown-divider{--tblr-dropdown-divider-margin-y:.5rem}.dropdown-menu{background-clip:border-box}fieldset:empty{display:none}.float-help{background-color:var(--tblr-body-color);border-radius:50px;bottom:20px;height:50px;position:fixed;right:20px;text-align:center;width:50px;z-index:1021}.float-help i{color:var(--tblr-body-bg);font-size:30px;margin-top:11px}@media (max-width:767.98px){.float-help{border-radius:36px;height:36px;width:36px}.float-help i{font-size:20px;margin-top:8px}}html[dir=rtl] .fa-chevron-left:before{content:"\f054"}html[dir=rtl] .fa-chevron-right:before{content:"\f053"} \ No newline at end of file diff --git a/public/build/app.fc41168c.css b/public/build/app.fc41168c.css deleted file mode 100644 index 22a15657..00000000 --- a/public/build/app.fc41168c.css +++ /dev/null @@ -1 +0,0 @@ -.inline-search{max-width:200px}.inline-search #searchTerm{border-right:0}@media (min-width:360px){.inline-search{max-width:235px}}@media (min-width:768px){.inline-search{max-width:325px}.search-dropdown{width:500px}}h1.navbar-brand a span{display:inline-block;padding-top:.5rem}h1.navbar-brand a:hover{text-decoration:none}#export-buttons .dropdown-menu,.inline-search .dropdown-menu,.page-actions .dropdown-menu{z-index:1021}.navbar{--tblr-navbar-brand-font-size:1rem}.error-page{margin-bottom:50px}@media print{.control-sidebar,.sf-toolbar{display:none!important}.col-print-12{width:100%}.content-wrapper{margin:0!important}section.content{margin:0;padding:0}span i.dot{display:none;margin-right:0!important}}.page-center{justify-content:center}.hidden-no-space{margin:0;padding:0}.pre-scrollable{max-height:340px;overflow-y:scroll}td.timesheet-description ul{padding-left:15px}td.timesheet-description p{margin:0}td.badges{line-height:22px}.open-edit{cursor:pointer}td.w-min,th.w-min{white-space:nowrap;width:1%}table.dataTable thead>tr>th.hw-min{white-space:normal;width:1%}.w-avatar{width:40px}.w-avatar img.avatar{max-width:40px}.list-group-item.danger{border-left:.2rem solid #d63939!important;padding-left:1.3rem}.list-group-item.success{border-left:.2rem solid #2fb344!important;padding-left:1.3rem}.box-body-scrollable{max-height:340px;overflow:auto}#activity_details_box th,#customer_details_box th,#project_details_box th{width:30%}.overlay{background:hsla(0,0%,100%,.7);height:100%;left:0;position:fixed;top:0;width:100%;z-index:1021}.overlay>.fas{color:#000;font-size:30px;left:50vw;margin-left:-15px;margin-top:-15px;position:absolute;top:50vh}table.dataTable{clear:both;margin-bottom:0!important;max-width:none!important}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;position:relative}table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{font-weight:700}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after{font-family:Font Awesome\ 5 Free;font-size:12px;opacity:.5;padding-left:5px}table.dataTable thead .sorting:after{content:"\f0dc";opacity:.2}table.dataTable thead .sorting_asc:after{content:"\f077"}table.dataTable thead .sorting_desc:after{content:"\f078"}table.dataTable thead>tr>th{vertical-align:top;white-space:nowrap}table.dataTable th:active{outline:none}table.table-bordered thead td,table.table-bordered thead th{border-left-width:0;border-top-width:0}table.table-bordered tbody td,table.table-bordered tbody th,table.table-bordered tfoot td,table.table-bordered tfoot th{border-bottom-width:0;border-left-width:0}table.table-bordered td:last-child,table.table-bordered th:last-child{border-right-width:0}@media (min-width:1200px){table.dataTable.table>tbody>tr>td{vertical-align:middle}}table.dataTable .actions{width:40px}table.dataTable tr.summary td{background-color:var(--tblr-bg-surface-secondary);border:0;font-weight:700}table.dataTable tr th.multiCheckbox{width:15px}table.dataTable tr.overlapping{border-top:2px solid rgba(214,57,57,.1)}table.dataTable tr.exported{opacity:.7}table.dataTable td .btn-group{display:flex}table.dataTable td .label{font-size:85%;line-height:24px;padding:.3em .6em}table.dataTable td span.label-invisible{opacity:.6}table.dataTable td.weekend,table.dataTable th.weekend{background-color:var(--tblr-bg-surface-secondary)}table.dataTable th.today{background-color:var(--tblr-highlight-bg)}table.dataTable td.total,table.dataTable th.total{font-weight:700}.form-dataTable table.dataTable .form-group{margin-bottom:0}table.table-hover tr.exported:hover{opacity:1}.calendar-entry ul{list-style-type:none;padding:0}.calendar-entry div{white-space:pre-line}.draggable{cursor:grab}#timesheet_calendar{--bs-gray-400:var(--tblr-border-color);--bs-gray-200:var(--tblr-gray-200)}.fc-day-sat,.fc-day-sun{background-color:var(--tblr-bg-surface-secondary)}@keyframes ticktac-blink{0%{opacity:1}5%{opacity:.95}10%{opacity:.9}15%{opacity:.85}20%{opacity:.8}25%{opacity:.75}30%{opacity:.7}35%{opacity:.65}40%{opacity:.6}45%{opacity:.65}50%{opacity:.7}55%{opacity:.75}60%{opacity:.8}65%{opacity:.85}70%{opacity:.9}75%{opacity:.95}to{opacity:1}}.ticktac-start i,.ticktac-stop i{animation:ticktac-blink 2s step-end infinite;font-size:140%}@media (max-width:991.98px){aside.navbar .btn-outline-white,header.navbar .btn-outline-white{border-color:hsla(0,0%,100%,.2)}}.ts-dropdown{z-index:1021}.ts-control>input{min-width:unset}.ts-dropdown .optgroup [data-selectable].option{padding-left:20px}.checkbox-menu.show{z-index:1021}.duration-widget .input-group{min-width:110px}.duration-widget input.duration-input{min-width:55px}#report-form div.btn-list{width:100%}#report-form div.btn-list div.selectpicker{max-width:400px;min-width:200px}#report-form div.btn-list li.dropdown-item .form-check{margin-bottom:0}.color-choice-item{border-radius:var(--tblr-border-radius);display:inline-block;height:20px;margin-right:10px;width:20px}fieldset>.mb-3.row:last-child{margin-bottom:0!important}.form-fieldset-light{background-color:unset;border-left:none;border-radius:0;border-right:none;border-top:none;margin-bottom:0}.form-fieldset-light:last-child{border:none}.modal-content{box-shadow:0 10px 80px rgba(0,0,0,.6)}.progress-group .progress-title{white-space:nowrap;width:100%}.progress-group .progress-title .progress-text{display:inline-block;width:1%}.progress-group .progress-title .progress-number{display:inline-block;float:none;width:98%}.initials{font-size:13px;font-weight:700}.avatar-xs{height:23px;width:23px}.avatar-xs .initials{font-size:10px}.avatar-sm{height:38px;width:38px}.avatar-sm .initials{font-size:17px}.avatar-md{height:45px;width:45px}.avatar-md .initials{font-size:21px}.avatar-lg{height:60px;width:60px}.avatar-lg .initials{font-size:28px}.widget-user-image{border:3px solid #fff;border-radius:50%}.widget-user-image .avatar{height:83px;width:83px}.widget-user-image .avatar .initials{font-size:40px}table.dataTable.table>tbody>tr>td.avatars .avatar{margin:1px}.avatar-list-stacked .avatar{margin-right:calc(var(--tblr-avatar-size)*-.2)!important}[data-bs-theme=dark] table.dataTable th.today{color:var(--tblr-muted)}[data-bs-theme=dark] .overlay{background:rgba(0,0,0,.5)}[data-bs-theme=dark] .overlay>.fas{color:var(--tblr-white)}section.quick-entry-page #quick_entry_form{display:none}section.quick-entry-page .ts-wrapper{display:table;table-layout:fixed}section.quick-entry-page #quick_entry_box .duration-widget .input-group{min-width:85px}section.quick-entry-page #quick_entry_box .duration-widget .btn-duration-preset{padding:7px 8px 7px 5px}section.quick-entry-page #quick_entry_box .duration-widget input{padding:7px 3px 7px 7px}fieldset legend.col-form-label{padding-top:0}fieldset.form-fieldset legend{font-size:1rem;font-weight:700}.ts-dropdown .optgroup:before{--tblr-spacer:.5rem}.dropdown-divider{--tblr-dropdown-divider-margin-y:.5rem}.dropdown-menu{background-clip:border-box}fieldset:empty{display:none}.float-help{background-color:var(--tblr-body-color);border-radius:50px;bottom:20px;height:50px;position:fixed;right:20px;text-align:center;width:50px;z-index:1021}.float-help i{color:var(--tblr-body-bg);font-size:30px;margin-top:11px}@media (max-width:767.98px){.float-help{border-radius:36px;height:36px;width:36px}.float-help i{font-size:20px;margin-top:8px}}html[dir=rtl] .fa-chevron-left:before{content:"\f054"}html[dir=rtl] .fa-chevron-right:before{content:"\f053"} \ No newline at end of file diff --git a/public/build/entrypoints.json b/public/build/entrypoints.json index 32e98676..e0aa859d 100644 --- a/public/build/entrypoints.json +++ b/public/build/entrypoints.json @@ -6,7 +6,7 @@ "/build/app.63b27bee.js" ], "css": [ - "/build/app.fc41168c.css" + "/build/app.0ecb28c1.css" ] }, "export-pdf": { @@ -64,7 +64,7 @@ "integrity": { "/build/runtime.f0079159.js": "sha384-H22sAW1aTvyIPqvHOvGXWSWTxf0y6mptp+MsVmyXCfjx/WJjBbhX9gbUZ+qIuihV", "/build/app.63b27bee.js": "sha384-1CV+he7m+KfetJpq/DmRwKfUhKH4L7MImv7rRUz/mr/KNR3VkT0fQJHF7ViPTVYE", - "/build/app.fc41168c.css": "sha384-3Td9W7KogJoBiywzWOgpkPPNHEIT8/a/SkMZM5NgIRmuChj/3PeOKkOHVJQlhP2E", + "/build/app.0ecb28c1.css": "sha384-iCao48T4VAR0rv39D1+kCk8GCRtve2QDTH5gGq1I1TMXmy1xA/OPxjeBFgGKkRk+", "/build/export-pdf.d367a32e.js": "sha384-Z5baqnzjI636nYFs4g63ViIKBZKRW4Jhv/7PQmTEQlqhfA7eK0vUMUtiyy0R5A9u", "/build/export-pdf.d8a6c23b.css": "sha384-ztepocHE4rnGE9eKZ4kL6jTKaePUyiwiB9TjJjstjpf/ckcKg1HedrEOOk/8ElJg", "/build/invoice.2604495e.js": "sha384-D6JvhGSqlx7z72b/qD3nF3QDXPy+XsCSRGtWfs1icjDKOcd2UzuXwuSa/E1Fg2TJ", diff --git a/public/build/manifest.json b/public/build/manifest.json index ef38b2aa..2fbb6ade 100644 --- a/public/build/manifest.json +++ b/public/build/manifest.json @@ -1,5 +1,5 @@ { - "build/app.css": "/build/app.fc41168c.css", + "build/app.css": "/build/app.0ecb28c1.css", "build/app.js": "/build/app.63b27bee.js", "build/export-pdf.css": "/build/export-pdf.d8a6c23b.css", "build/export-pdf.js": "/build/export-pdf.d367a32e.js", diff --git a/src/Command/ListUserCommand.php b/src/Command/ListUserCommand.php new file mode 100644 index 00000000..af54e11c --- /dev/null +++ b/src/Command/ListUserCommand.php @@ -0,0 +1,49 @@ +repository->findAll(); + + $data = []; + foreach ($users as $user) { + $data[] = [ + $user->getUserIdentifier(), + $user->getEmail(), + implode(', ', $user->getRoles()), + $user->isEnabled() ? 'X' : '', + $user->getPasswordRequestedAt()?->format('Y-m-d H:i:s') + ]; + } + + $header = ['Username', 'Email', 'Roles', 'Active', 'PW Reset']; + + $output->table($header, $data); + + return Command::SUCCESS; + } +} diff --git a/src/Constants.php b/src/Constants.php index 403a1eee..bec892a7 100644 --- a/src/Constants.php +++ b/src/Constants.php @@ -17,11 +17,11 @@ class Constants /** * The current release version */ - public const VERSION = '2.4.1'; + public const VERSION = '2.5.0'; /** * The current release: major * 10000 + minor * 100 + patch */ - public const VERSION_ID = 20401; + public const VERSION_ID = 20500; /** * The software name */ diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index 56c305ac..003e2ccd 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -70,8 +70,8 @@ final class UserController extends AbstractController $table->setReloadEvents('kimai.userUpdate'); $table->addColumn('avatar', ['class' => 'alwaysVisible w-avatar', 'title' => null, 'orderBy' => false]); - $table->addColumn('user', ['class' => 'alwaysVisible', 'orderBy' => 'user']); - $table->addColumn('username', ['class' => 'd-none']); + //$table->addColumn('user', ['class' => 'alwaysVisible', 'orderBy' => 'user']); + $table->addColumn('username', ['class' => 'alwaysVisible']); $table->addColumn('alias', ['class' => 'd-none']); $table->addColumn('account_number', ['class' => 'd-none']); $table->addColumn('title', ['class' => 'd-none']); diff --git a/src/EventSubscriber/MenuBuilderSubscriber.php b/src/EventSubscriber/MenuBuilderSubscriber.php index a4f35239..3aab0ff2 100644 --- a/src/EventSubscriber/MenuBuilderSubscriber.php +++ b/src/EventSubscriber/MenuBuilderSubscriber.php @@ -9,13 +9,10 @@ namespace App\EventSubscriber; -use App\Entity\User; -use App\Event\ConfigureMainMenuEvent; use App\Utils\MenuItemModel; +use App\Utils\MenuService; use KevinPapst\TablerBundle\Event\MenuEvent; use KevinPapst\TablerBundle\Model\MenuItemInterface; -use Psr\EventDispatcher\EventDispatcherInterface; -use Symfony\Bundle\SecurityBundle\Security; use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** @@ -24,7 +21,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; */ final class MenuBuilderSubscriber implements EventSubscriberInterface { - public function __construct(private EventDispatcherInterface $eventDispatcher, private Security $security) + public function __construct(private MenuService $menuService) { } @@ -37,15 +34,7 @@ final class MenuBuilderSubscriber implements EventSubscriberInterface public function onSetupNavbar(MenuEvent $event): void { - $menuEvent = new ConfigureMainMenuEvent(); - - /** @var User $user */ - $user = $this->security->getUser(); - - // error pages don't have a user and will fail when is_granted() is called - if (null !== $user) { - $this->eventDispatcher->dispatch($menuEvent); - } + $menuEvent = $this->menuService->getKimaiMenu(); foreach ($menuEvent->getMenu()->getChildren() as $child) { if ($child->getRoute() === null && !$child->hasChildren()) { diff --git a/src/EventSubscriber/MenuFavoritesSubscriber.php b/src/EventSubscriber/MenuFavoritesSubscriber.php deleted file mode 100644 index 7d309c33..00000000 --- a/src/EventSubscriber/MenuFavoritesSubscriber.php +++ /dev/null @@ -1,61 +0,0 @@ - ['onMainMenuConfigure', 90], // see MenuSubscriber - ]; - } - - public function onMainMenuConfigure(ConfigureMainMenuEvent $menuEvent): void - { - /** @var User|null $user */ - $user = $this->security->getUser(); - if (null === $user) { - return; - } - - $userFavorites = $user->getPreferenceValue('favorite_routes'); - if (!\is_string($userFavorites) || trim($userFavorites) === '') { - return; - } - - $favMenu = $menuEvent->findById('favorites'); - if ($favMenu === null) { - return; - } - - $userFavorites = explode(',', $userFavorites); - foreach ($userFavorites as $fav) { - $tmp = $menuEvent->findById($fav); - if ($tmp !== null && !$tmp->hasChildren()) { - $favMenu->addChild(clone $tmp); - } - } - - if ($favMenu->hasChildren()) { - $favMenu->setExpanded(true); - $menuEvent->getTimesheetMenu()?->setExpanded(false); - } - } -} diff --git a/src/Twig/Runtime/MenuExtension.php b/src/Twig/Runtime/MenuExtension.php new file mode 100644 index 00000000..0032c53a --- /dev/null +++ b/src/Twig/Runtime/MenuExtension.php @@ -0,0 +1,46 @@ + + */ + public function getUserShortcuts(User $user): array + { + $shortcuts = $user->getPreferenceValue('favorite_routes'); + if (!\is_string($shortcuts) || trim($shortcuts) === '') { + return []; + } + + $favMenu = []; + + $shortcuts = explode(',', $shortcuts); + $menu = $this->menuService->getKimaiMenu(); + foreach ($shortcuts as $fav) { + $tmp = $menu->findById($fav); + if ($tmp !== null && !$tmp->hasChildren()) { + $favMenu[] = clone $tmp; + } + } + + return $favMenu; + } +} diff --git a/src/Twig/RuntimeExtensions.php b/src/Twig/RuntimeExtensions.php index 5e8c3b1b..1899bb73 100644 --- a/src/Twig/RuntimeExtensions.php +++ b/src/Twig/RuntimeExtensions.php @@ -11,6 +11,7 @@ namespace App\Twig; use App\Twig\Runtime\EncoreExtension; use App\Twig\Runtime\MarkdownExtension; +use App\Twig\Runtime\MenuExtension; use App\Twig\Runtime\QrCodeExtension; use App\Twig\Runtime\ThemeExtension; use App\Twig\Runtime\TimesheetExtension; @@ -37,6 +38,7 @@ final class RuntimeExtensions extends AbstractExtension new TwigFunction('render_widget', [WidgetExtension::class, 'renderWidget'], ['is_safe' => ['html'], 'needs_environment' => true]), new TwigFunction('icon', [RuntimeExtension::class, 'createIcon'], ['is_safe' => ['html']]), new TwigFunction('qr_code_data_uri', [QrCodeExtension::class, 'qrCodeDataUriFunction']), + new TwigFunction('user_shortcuts', [MenuExtension::class, 'getUserShortcuts']), ]; } diff --git a/src/Twig/SecurityPolicy/InvoicePolicy.php b/src/Twig/SecurityPolicy/InvoicePolicy.php index ed459228..46507ce9 100644 --- a/src/Twig/SecurityPolicy/InvoicePolicy.php +++ b/src/Twig/SecurityPolicy/InvoicePolicy.php @@ -29,7 +29,7 @@ final class InvoicePolicy implements SecurityPolicyInterface $this->policy = new ChainPolicy(); $this->policy->addPolicy(new DefaultPolicy()); $this->policy->addPolicy(new SecurityPolicy( - ['block', 'if', 'for', 'set', 'extends'], + ['block', 'if', 'for', 'set', 'extends', 'import'], [ // ================================================================= // vendor/twig/twig/src/Extension/CoreExtension.php @@ -102,9 +102,16 @@ final class InvoicePolicy implements SecurityPolicyInterface 'currency_symbol', 'language_name', 'locale_name', + 'timezone_name', 'format_currency', 'format_number', - 'format_*_number', + 'format_decimal_number', + 'format_currency_number', + 'format_percent_number', + 'format_scientific_number', + 'format_spellout_number', + 'format_ordinal_number', + 'format_duration_number', 'format_datetime', 'format_date', 'format_time', diff --git a/src/Utils/MenuService.php b/src/Utils/MenuService.php new file mode 100644 index 00000000..47b55a44 --- /dev/null +++ b/src/Utils/MenuService.php @@ -0,0 +1,40 @@ +menuEvent) { + $this->menuEvent = new ConfigureMainMenuEvent(); + /** @var User $user */ + $user = $this->security->getUser(); + + // error pages don't have a user and will fail when is_granted() is called + if (null !== $user) { + $this->eventDispatcher->dispatch($this->menuEvent); + } + } + + return $this->menuEvent; + } +} diff --git a/templates/base.html.twig b/templates/base.html.twig index e980f2e5..ec494eac 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -100,6 +100,7 @@ {% if is_granted('view_own_timesheet') %} {% include 'partials/recent-activities.html.twig' %} {% endif %} + {% include 'partials/user-shortcuts.html.twig' %} {% block navbar_extensions_after %} {% set event = trigger(constant('App\\Event\\ThemeEvent::TOOLBAR')) %} {{ event.content|raw }} diff --git a/templates/contract/status.html.twig b/templates/contract/status.html.twig index 000a75d9..57ec9f49 100644 --- a/templates/contract/status.html.twig +++ b/templates/contract/status.html.twig @@ -87,56 +87,8 @@ {% endembed %} {% endif %} - {% if withWorkHourConfiguration %} - {% set expectedWeekTimes = user.workHoursMonday + user.workHoursTuesday + user.workHoursWednesday + user.workHoursThursday + user.workHoursFriday + user.workHoursSaturday + user.workHoursSunday %} - - {% embed '@theme/embeds/card.html.twig' with {'collapsed': box_configuration.collapsed} %} - {% from "macros/status.html.twig" import status_duration %} - {% block box_title %} - {{ 'work_times_should'|trans }} - {{ status_duration(expectedWeekTimes|duration) }} - {% endblock %} - {% block box_body %} -