Version 2.0.1 (#3853)
* configure email validation mode to fix deprecation message * allow to use non brand icon in saml provider * new method getCalculatedDuration() * getRawData() by id * only stop entries if new one is running * fix validator tampering with timesheet duration * fix allow setting null as customer * bump packages
This commit is contained in:
377
composer.lock
generated
377
composer.lock
generated
@@ -658,16 +658,16 @@
|
||||
},
|
||||
{
|
||||
"name": "doctrine/dbal",
|
||||
"version": "3.5.3",
|
||||
"version": "3.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/dbal.git",
|
||||
"reference": "88fa7e5189fd5ec6682477044264dc0ed4e3aa1e"
|
||||
"reference": "85b98cb23c8af471a67abfe14485da696bcabc2e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/dbal/zipball/88fa7e5189fd5ec6682477044264dc0ed4e3aa1e",
|
||||
"reference": "88fa7e5189fd5ec6682477044264dc0ed4e3aa1e",
|
||||
"url": "https://api.github.com/repos/doctrine/dbal/zipball/85b98cb23c8af471a67abfe14485da696bcabc2e",
|
||||
"reference": "85b98cb23c8af471a67abfe14485da696bcabc2e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -680,11 +680,12 @@
|
||||
"psr/log": "^1|^2|^3"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "11.0.0",
|
||||
"doctrine/coding-standard": "11.1.0",
|
||||
"fig/log-test": "^1",
|
||||
"jetbrains/phpstorm-stubs": "2022.3",
|
||||
"phpstan/phpstan": "1.9.4",
|
||||
"phpstan/phpstan": "1.9.14",
|
||||
"phpstan/phpstan-strict-rules": "^1.4",
|
||||
"phpunit/phpunit": "9.5.27",
|
||||
"phpunit/phpunit": "9.6.3",
|
||||
"psalm/plugin-phpunit": "0.18.4",
|
||||
"squizlabs/php_codesniffer": "3.7.1",
|
||||
"symfony/cache": "^5.4|^6.0",
|
||||
@@ -749,7 +750,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/dbal/issues",
|
||||
"source": "https://github.com/doctrine/dbal/tree/3.5.3"
|
||||
"source": "https://github.com/doctrine/dbal/tree/3.6.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -765,7 +766,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-01-12T10:21:44+00:00"
|
||||
"time": "2023-02-07T22:52:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/deprecations",
|
||||
@@ -1342,16 +1343,16 @@
|
||||
},
|
||||
{
|
||||
"name": "doctrine/migrations",
|
||||
"version": "3.5.5",
|
||||
"version": "3.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/migrations.git",
|
||||
"reference": "4b1e2b6ba71d21d0c5be22ed03b6fc954d20b204"
|
||||
"reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/migrations/zipball/4b1e2b6ba71d21d0c5be22ed03b6fc954d20b204",
|
||||
"reference": "4b1e2b6ba71d21d0c5be22ed03b6fc954d20b204",
|
||||
"url": "https://api.github.com/repos/doctrine/migrations/zipball/e542ad8bcd606d7a18d0875babb8a6d963c9c059",
|
||||
"reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1359,11 +1360,11 @@
|
||||
"doctrine/dbal": "^3.5.1",
|
||||
"doctrine/deprecations": "^0.5.3 || ^1",
|
||||
"doctrine/event-manager": "^1.2 || ^2.0",
|
||||
"friendsofphp/proxy-manager-lts": "^1.0",
|
||||
"php": "^7.4 || ^8.0",
|
||||
"php": "^8.1",
|
||||
"psr/log": "^1.1.3 || ^2 || ^3",
|
||||
"symfony/console": "^4.4.16 || ^5.4 || ^6.0",
|
||||
"symfony/stopwatch": "^4.4 || ^5.4 || ^6.0"
|
||||
"symfony/stopwatch": "^4.4 || ^5.4 || ^6.0",
|
||||
"symfony/var-exporter": "^6.2"
|
||||
},
|
||||
"conflict": {
|
||||
"doctrine/orm": "<2.12"
|
||||
@@ -1379,7 +1380,7 @@
|
||||
"phpstan/phpstan-phpunit": "^1.1",
|
||||
"phpstan/phpstan-strict-rules": "^1.1",
|
||||
"phpstan/phpstan-symfony": "^1.1",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"phpunit/phpunit": "^9.5.24",
|
||||
"symfony/cache": "^4.4 || ^5.4 || ^6.0",
|
||||
"symfony/process": "^4.4 || ^5.4 || ^6.0",
|
||||
"symfony/yaml": "^4.4 || ^5.4 || ^6.0"
|
||||
@@ -1424,7 +1425,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/migrations/issues",
|
||||
"source": "https://github.com/doctrine/migrations/tree/3.5.5"
|
||||
"source": "https://github.com/doctrine/migrations/tree/3.6.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1440,7 +1441,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-01-18T12:44:30+00:00"
|
||||
"time": "2023-02-15T18:49:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/orm",
|
||||
@@ -1946,88 +1947,6 @@
|
||||
},
|
||||
"time": "2022-09-18T07:06:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "friendsofphp/proxy-manager-lts",
|
||||
"version": "v1.0.14",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git",
|
||||
"reference": "a527c9d9d5348e012bd24482d83a5cd643bcbc9e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/a527c9d9d5348e012bd24482d83a5cd643bcbc9e",
|
||||
"reference": "a527c9d9d5348e012bd24482d83a5cd643bcbc9e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"laminas/laminas-code": "~3.4.1|^4.0",
|
||||
"php": ">=7.1",
|
||||
"symfony/filesystem": "^4.4.17|^5.0|^6.0"
|
||||
},
|
||||
"conflict": {
|
||||
"laminas/laminas-stdlib": "<3.2.1",
|
||||
"zendframework/zend-stdlib": "<3.2.1"
|
||||
},
|
||||
"replace": {
|
||||
"ocramius/proxy-manager": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-phar": "*",
|
||||
"symfony/phpunit-bridge": "^5.4|^6.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
"name": "ocramius/proxy-manager",
|
||||
"url": "https://github.com/Ocramius/ProxyManager"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"ProxyManager\\": "src/ProxyManager"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Marco Pivetta",
|
||||
"email": "ocramius@gmail.com",
|
||||
"homepage": "https://ocramius.github.io/"
|
||||
},
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
}
|
||||
],
|
||||
"description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager",
|
||||
"homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts",
|
||||
"keywords": [
|
||||
"aop",
|
||||
"lazy loading",
|
||||
"proxy",
|
||||
"proxy pattern",
|
||||
"service proxies"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues",
|
||||
"source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.14"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/Ocramius",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-01-30T10:40:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "friendsofsymfony/rest-bundle",
|
||||
"version": "3.5.0",
|
||||
@@ -2297,16 +2216,16 @@
|
||||
},
|
||||
{
|
||||
"name": "jms/metadata",
|
||||
"version": "2.7.0",
|
||||
"version": "2.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/schmittjoh/metadata.git",
|
||||
"reference": "283c714831d272d78ddd6e52e08ac16d76be30fd"
|
||||
"reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/schmittjoh/metadata/zipball/283c714831d272d78ddd6e52e08ac16d76be30fd",
|
||||
"reference": "283c714831d272d78ddd6e52e08ac16d76be30fd",
|
||||
"url": "https://api.github.com/repos/schmittjoh/metadata/zipball/7ca240dcac0c655eb15933ee55736ccd2ea0d7a6",
|
||||
"reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2317,7 +2236,7 @@
|
||||
"doctrine/coding-standard": "^8.0",
|
||||
"mikey179/vfsstream": "^1.6.7",
|
||||
"phpunit/phpunit": "^8.5|^9.0",
|
||||
"psr/container": "^1.0",
|
||||
"psr/container": "^1.0|^2.0",
|
||||
"symfony/cache": "^3.1|^4.0|^5.0",
|
||||
"symfony/dependency-injection": "^3.1|^4.0|^5.0"
|
||||
},
|
||||
@@ -2355,9 +2274,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/schmittjoh/metadata/issues",
|
||||
"source": "https://github.com/schmittjoh/metadata/tree/2.7.0"
|
||||
"source": "https://github.com/schmittjoh/metadata/tree/2.8.0"
|
||||
},
|
||||
"time": "2022-09-13T19:18:27+00:00"
|
||||
"time": "2023-02-15T13:44:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "jms/serializer",
|
||||
@@ -2616,69 +2535,6 @@
|
||||
],
|
||||
"time": "2023-01-25T22:01:15+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laminas/laminas-code",
|
||||
"version": "4.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laminas/laminas-code.git",
|
||||
"reference": "dd19fe8e07cc3f374308565667eecd4958c22106"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laminas/laminas-code/zipball/dd19fe8e07cc3f374308565667eecd4958c22106",
|
||||
"reference": "dd19fe8e07cc3f374308565667eecd4958c22106",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "~8.1.0 || ~8.2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/annotations": "^1.13.3",
|
||||
"ext-phar": "*",
|
||||
"laminas/laminas-coding-standard": "^2.3.0",
|
||||
"laminas/laminas-stdlib": "^3.6.1",
|
||||
"phpunit/phpunit": "^9.5.26",
|
||||
"psalm/plugin-phpunit": "^0.18.0",
|
||||
"vimeo/psalm": "^5.1.0"
|
||||
},
|
||||
"suggest": {
|
||||
"doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features",
|
||||
"laminas/laminas-stdlib": "Laminas\\Stdlib component"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Laminas\\Code\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"description": "Extensions to the PHP Reflection API, static code scanning, and code generation",
|
||||
"homepage": "https://laminas.dev",
|
||||
"keywords": [
|
||||
"code",
|
||||
"laminas",
|
||||
"laminasframework"
|
||||
],
|
||||
"support": {
|
||||
"chat": "https://laminas.dev/chat",
|
||||
"docs": "https://docs.laminas.dev/laminas-code/",
|
||||
"forum": "https://discourse.laminas.dev",
|
||||
"issues": "https://github.com/laminas/laminas-code/issues",
|
||||
"rss": "https://github.com/laminas/laminas-code/releases.atom",
|
||||
"source": "https://github.com/laminas/laminas-code"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://funding.communitybridge.org/projects/laminas-project",
|
||||
"type": "community_bridge"
|
||||
}
|
||||
],
|
||||
"time": "2022-12-08T02:08:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laminas/laminas-escaper",
|
||||
"version": "2.12.0",
|
||||
@@ -3477,29 +3333,30 @@
|
||||
},
|
||||
{
|
||||
"name": "nelmio/cors-bundle",
|
||||
"version": "2.2.0",
|
||||
"version": "2.3.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nelmio/NelmioCorsBundle.git",
|
||||
"reference": "0ee5ee30b0ee08ea122d431ae6e0ddeb87f035c0"
|
||||
"reference": "185d2c0ae50a3f0b628790170164d5f1c5b7c281"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/0ee5ee30b0ee08ea122d431ae6e0ddeb87f035c0",
|
||||
"reference": "0ee5ee30b0ee08ea122d431ae6e0ddeb87f035c0",
|
||||
"url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/185d2c0ae50a3f0b628790170164d5f1c5b7c281",
|
||||
"reference": "185d2c0ae50a3f0b628790170164d5f1c5b7c281",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"symfony/framework-bundle": "^4.3 || ^5.0 || ^6.0"
|
||||
"psr/log": "^1.0 || ^2.0 || ^3.0",
|
||||
"symfony/framework-bundle": "^4.4 || ^5.4 || ^6.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.2",
|
||||
"symfony/phpunit-bridge": "^4.3 || ^5.0 || ^6.0"
|
||||
"symfony/phpunit-bridge": "^4.4 || ^5.4 || ^6.0"
|
||||
},
|
||||
"type": "symfony-bundle",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.0.x-dev"
|
||||
"dev-master": "2.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -3532,9 +3389,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/nelmio/NelmioCorsBundle/issues",
|
||||
"source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.2.0"
|
||||
"source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.3.1"
|
||||
},
|
||||
"time": "2021-12-01T09:34:27+00:00"
|
||||
"time": "2023-02-16T08:49:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "onelogin/php-saml",
|
||||
@@ -4034,16 +3891,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpoffice/phpspreadsheet",
|
||||
"version": "1.27.0",
|
||||
"version": "1.27.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
|
||||
"reference": "eeb8582f9cabf5a7f4ef78015691163233a1834f"
|
||||
"reference": "ef4e6ef74990239946d3983451a9bbed5ef1be5d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/eeb8582f9cabf5a7f4ef78015691163233a1834f",
|
||||
"reference": "eeb8582f9cabf5a7f4ef78015691163233a1834f",
|
||||
"url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/ef4e6ef74990239946d3983451a9bbed5ef1be5d",
|
||||
"reference": "ef4e6ef74990239946d3983451a9bbed5ef1be5d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4070,7 +3927,7 @@
|
||||
"psr/simple-cache": "^1.0 || ^2.0 || ^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "dev-master",
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "dev-main",
|
||||
"dompdf/dompdf": "^1.0 || ^2.0",
|
||||
"friendsofphp/php-cs-fixer": "^3.2",
|
||||
"mitoteam/jpgraph": "^10.2.4",
|
||||
@@ -4133,9 +3990,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
|
||||
"source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.27.0"
|
||||
"source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.27.1"
|
||||
},
|
||||
"time": "2023-01-24T20:07:45+00:00"
|
||||
"time": "2023-02-08T07:02:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpoffice/phpword",
|
||||
@@ -4252,16 +4109,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpdoc-parser",
|
||||
"version": "1.16.0",
|
||||
"version": "1.16.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpdoc-parser.git",
|
||||
"reference": "57090cfccbfaa639e703c007486d605a6e80f56d"
|
||||
"reference": "e27e92d939e2e3636f0a1f0afaba59692c0bf571"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/57090cfccbfaa639e703c007486d605a6e80f56d",
|
||||
"reference": "57090cfccbfaa639e703c007486d605a6e80f56d",
|
||||
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/e27e92d939e2e3636f0a1f0afaba59692c0bf571",
|
||||
"reference": "e27e92d939e2e3636f0a1f0afaba59692c0bf571",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4291,9 +4148,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.16.0"
|
||||
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.16.1"
|
||||
},
|
||||
"time": "2023-01-29T14:41:23+00:00"
|
||||
"time": "2023-02-07T18:11:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/cache",
|
||||
@@ -4919,16 +4776,16 @@
|
||||
},
|
||||
{
|
||||
"name": "setasign/fpdi",
|
||||
"version": "v2.3.6",
|
||||
"version": "v2.3.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Setasign/FPDI.git",
|
||||
"reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31"
|
||||
"reference": "bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Setasign/FPDI/zipball/6231e315f73e4f62d72b73f3d6d78ff0eed93c31",
|
||||
"reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31",
|
||||
"url": "https://api.github.com/repos/Setasign/FPDI/zipball/bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05",
|
||||
"reference": "bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4979,7 +4836,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/Setasign/FPDI/issues",
|
||||
"source": "https://github.com/Setasign/FPDI/tree/v2.3.6"
|
||||
"source": "https://github.com/Setasign/FPDI/tree/v2.3.7"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -4987,7 +4844,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-02-11T11:37:01+00:00"
|
||||
"time": "2023-02-09T10:38:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spomky-labs/otphp",
|
||||
@@ -9909,16 +9766,16 @@
|
||||
},
|
||||
{
|
||||
"name": "twig/cssinliner-extra",
|
||||
"version": "v3.5.0",
|
||||
"version": "v3.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/cssinliner-extra.git",
|
||||
"reference": "2917fc4a5d4d2a95dcaf79f0c21c0c2a0a30eff4"
|
||||
"reference": "381877765d17b0178322d68b818e0c67f9c93187"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/2917fc4a5d4d2a95dcaf79f0c21c0c2a0a30eff4",
|
||||
"reference": "2917fc4a5d4d2a95dcaf79f0c21c0c2a0a30eff4",
|
||||
"url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/381877765d17b0178322d68b818e0c67f9c93187",
|
||||
"reference": "381877765d17b0178322d68b818e0c67f9c93187",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -9963,7 +9820,7 @@
|
||||
"twig"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/twigphp/cssinliner-extra/tree/v3.5.0"
|
||||
"source": "https://github.com/twigphp/cssinliner-extra/tree/v3.5.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -9975,20 +9832,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-12-27T12:23:36+00:00"
|
||||
"time": "2023-02-08T07:44:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "twig/extra-bundle",
|
||||
"version": "v3.5.0",
|
||||
"version": "v3.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/twig-extra-bundle.git",
|
||||
"reference": "edfcdbdc943b52101011d57ec546af393dc56537"
|
||||
"reference": "a961e553a624eebdbd423ad5ab931497ca6d87cd"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/edfcdbdc943b52101011d57ec546af393dc56537",
|
||||
"reference": "edfcdbdc943b52101011d57ec546af393dc56537",
|
||||
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/a961e553a624eebdbd423ad5ab931497ca6d87cd",
|
||||
"reference": "a961e553a624eebdbd423ad5ab931497ca6d87cd",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -10042,7 +9899,7 @@
|
||||
"twig"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.5.0"
|
||||
"source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.5.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -10054,20 +9911,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-12-27T12:23:36+00:00"
|
||||
"time": "2023-02-08T07:44:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "twig/inky-extra",
|
||||
"version": "v3.5.0",
|
||||
"version": "v3.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/inky-extra.git",
|
||||
"reference": "2845c9c7ad25227c3b79285a2421ee9cebbf48e8"
|
||||
"reference": "4efde499b99942a27e206898e55208a8692c16ca"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/inky-extra/zipball/2845c9c7ad25227c3b79285a2421ee9cebbf48e8",
|
||||
"reference": "2845c9c7ad25227c3b79285a2421ee9cebbf48e8",
|
||||
"url": "https://api.github.com/repos/twigphp/inky-extra/zipball/4efde499b99942a27e206898e55208a8692c16ca",
|
||||
"reference": "4efde499b99942a27e206898e55208a8692c16ca",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -10113,7 +9970,7 @@
|
||||
"twig"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/twigphp/inky-extra/tree/v3.5.0"
|
||||
"source": "https://github.com/twigphp/inky-extra/tree/v3.5.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -10125,20 +9982,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-12-27T12:23:36+00:00"
|
||||
"time": "2023-02-08T07:44:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "twig/intl-extra",
|
||||
"version": "v3.5.0",
|
||||
"version": "v3.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/intl-extra.git",
|
||||
"reference": "92f2c73471e077d0f72195a331c9a245da2010cd"
|
||||
"reference": "c3ebfac1624228c0556de57a34af6b7d83a1a408"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/intl-extra/zipball/92f2c73471e077d0f72195a331c9a245da2010cd",
|
||||
"reference": "92f2c73471e077d0f72195a331c9a245da2010cd",
|
||||
"url": "https://api.github.com/repos/twigphp/intl-extra/zipball/c3ebfac1624228c0556de57a34af6b7d83a1a408",
|
||||
"reference": "c3ebfac1624228c0556de57a34af6b7d83a1a408",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -10182,7 +10039,7 @@
|
||||
"twig"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/twigphp/intl-extra/tree/v3.5.0"
|
||||
"source": "https://github.com/twigphp/intl-extra/tree/v3.5.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -10194,20 +10051,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-12-27T12:23:36+00:00"
|
||||
"time": "2023-02-08T07:44:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "twig/string-extra",
|
||||
"version": "v3.5.0",
|
||||
"version": "v3.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/string-extra.git",
|
||||
"reference": "73c458625c685b3cb3986ec2f5f83ebd1247bcb3"
|
||||
"reference": "e8403cf7140319917577604be406dfb371246437"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/string-extra/zipball/73c458625c685b3cb3986ec2f5f83ebd1247bcb3",
|
||||
"reference": "73c458625c685b3cb3986ec2f5f83ebd1247bcb3",
|
||||
"url": "https://api.github.com/repos/twigphp/string-extra/zipball/e8403cf7140319917577604be406dfb371246437",
|
||||
"reference": "e8403cf7140319917577604be406dfb371246437",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -10254,7 +10111,7 @@
|
||||
"unicode"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/twigphp/string-extra/tree/v3.5.0"
|
||||
"source": "https://github.com/twigphp/string-extra/tree/v3.5.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -10266,20 +10123,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-12-27T12:23:36+00:00"
|
||||
"time": "2023-02-08T07:44:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v3.5.0",
|
||||
"version": "v3.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "3ffcf4b7d890770466da3b2666f82ac054e7ec72"
|
||||
"reference": "a6e0510cc793912b451fd40ab983a1d28f611c15"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/3ffcf4b7d890770466da3b2666f82ac054e7ec72",
|
||||
"reference": "3ffcf4b7d890770466da3b2666f82ac054e7ec72",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/a6e0510cc793912b451fd40ab983a1d28f611c15",
|
||||
"reference": "a6e0510cc793912b451fd40ab983a1d28f611c15",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -10330,7 +10187,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/twigphp/Twig/issues",
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.5.0"
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.5.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -10342,7 +10199,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-12-27T12:28:18+00:00"
|
||||
"time": "2023-02-08T07:49:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
@@ -10503,16 +10360,16 @@
|
||||
},
|
||||
{
|
||||
"name": "zircote/swagger-php",
|
||||
"version": "4.6.1",
|
||||
"version": "4.6.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/zircote/swagger-php.git",
|
||||
"reference": "e449670473d7ecaff75dff744e8e9be68a79a44c"
|
||||
"reference": "14d6c5e2bde957e03a3a5496a3b18419a0480199"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/zircote/swagger-php/zipball/e449670473d7ecaff75dff744e8e9be68a79a44c",
|
||||
"reference": "e449670473d7ecaff75dff744e8e9be68a79a44c",
|
||||
"url": "https://api.github.com/repos/zircote/swagger-php/zipball/14d6c5e2bde957e03a3a5496a3b18419a0480199",
|
||||
"reference": "14d6c5e2bde957e03a3a5496a3b18419a0480199",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -10575,9 +10432,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/zircote/swagger-php/issues",
|
||||
"source": "https://github.com/zircote/swagger-php/tree/4.6.1"
|
||||
"source": "https://github.com/zircote/swagger-php/tree/4.6.2"
|
||||
},
|
||||
"time": "2023-02-03T01:25:00+00:00"
|
||||
"time": "2023-02-14T22:54:06+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [
|
||||
@@ -11020,16 +10877,16 @@
|
||||
},
|
||||
{
|
||||
"name": "friendsofphp/php-cs-fixer",
|
||||
"version": "v3.14.3",
|
||||
"version": "v3.14.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
|
||||
"reference": "b418036b95b4936a33fe906245d3044395935e73"
|
||||
"reference": "1b3d9dba63d93b8a202c31e824748218781eae6b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b418036b95b4936a33fe906245d3044395935e73",
|
||||
"reference": "b418036b95b4936a33fe906245d3044395935e73",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/1b3d9dba63d93b8a202c31e824748218781eae6b",
|
||||
"reference": "1b3d9dba63d93b8a202c31e824748218781eae6b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -11040,7 +10897,7 @@
|
||||
"ext-json": "*",
|
||||
"ext-tokenizer": "*",
|
||||
"php": "^7.4 || ^8.0",
|
||||
"sebastian/diff": "^4.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",
|
||||
@@ -11098,7 +10955,7 @@
|
||||
"description": "A tool to automatically fix PHP code style",
|
||||
"support": {
|
||||
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
|
||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.3"
|
||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -11106,7 +10963,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-01-30T00:24:29+00:00"
|
||||
"time": "2023-02-09T21:49:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "masterminds/html5",
|
||||
@@ -11346,16 +11203,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "1.9.16",
|
||||
"version": "1.9.18",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "922e2689bb180575d0f57de0443c431a5a698e8f"
|
||||
"reference": "f2d5cf71be91172a57c649770b73c20ebcffb0bf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/922e2689bb180575d0f57de0443c431a5a698e8f",
|
||||
"reference": "922e2689bb180575d0f57de0443c431a5a698e8f",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/f2d5cf71be91172a57c649770b73c20ebcffb0bf",
|
||||
"reference": "f2d5cf71be91172a57c649770b73c20ebcffb0bf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -11385,7 +11242,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan/issues",
|
||||
"source": "https://github.com/phpstan/phpstan/tree/1.9.16"
|
||||
"source": "https://github.com/phpstan/phpstan/tree/1.9.18"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -11401,7 +11258,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-02-07T10:42:21+00:00"
|
||||
"time": "2023-02-17T15:01:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-doctrine",
|
||||
@@ -11475,16 +11332,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-phpunit",
|
||||
"version": "1.3.3",
|
||||
"version": "1.3.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan-phpunit.git",
|
||||
"reference": "54a24bd23e9e80ee918cdc24f909d376c2e273f7"
|
||||
"reference": "d77af96c1aaec28f7c0293677132eaaad079e01b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/54a24bd23e9e80ee918cdc24f909d376c2e273f7",
|
||||
"reference": "54a24bd23e9e80ee918cdc24f909d376c2e273f7",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/d77af96c1aaec28f7c0293677132eaaad079e01b",
|
||||
"reference": "d77af96c1aaec28f7c0293677132eaaad079e01b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -11521,9 +11378,9 @@
|
||||
"description": "PHPUnit extensions and rules for PHPStan",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan-phpunit/issues",
|
||||
"source": "https://github.com/phpstan/phpstan-phpunit/tree/1.3.3"
|
||||
"source": "https://github.com/phpstan/phpstan-phpunit/tree/1.3.4"
|
||||
},
|
||||
"time": "2022-12-21T15:25:00+00:00"
|
||||
"time": "2023-02-09T08:05:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-strict-rules",
|
||||
|
||||
@@ -21,6 +21,9 @@ framework:
|
||||
mailer:
|
||||
dsn: '%env(MAILER_URL)%'
|
||||
|
||||
validation:
|
||||
email_validation_mode: html5
|
||||
|
||||
when@dev:
|
||||
framework:
|
||||
mailer:
|
||||
|
||||
15
phpstan.neon
15
phpstan.neon
@@ -7135,11 +7135,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Security/SessionHandler.php
|
||||
|
||||
-
|
||||
message: "#^Cannot call method getTimestamp\\(\\) on DateTime\\|null\\.$#"
|
||||
count: 1
|
||||
path: src/Timesheet/Calculator/DurationCalculator.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Timesheet\\\\DateTimeFactory\\:\\:createWeekDateTime\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
@@ -7280,11 +7275,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Timesheet/Rounding/FloorRounding.php
|
||||
|
||||
-
|
||||
message: "#^Cannot call method getTimestamp\\(\\) on DateTime\\|null\\.$#"
|
||||
count: 1
|
||||
path: src/Timesheet/RoundingService.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Timesheet\\\\RoundingService\\:\\:__construct\\(\\) has parameter \\$rules with no value type specified in iterable type array\\.$#"
|
||||
count: 1
|
||||
@@ -7965,11 +7955,6 @@ parameters:
|
||||
count: 2
|
||||
path: src/Validator/Constraints/TimesheetLockdownValidator.php
|
||||
|
||||
-
|
||||
message: "#^Cannot call method getTimestamp\\(\\) on DateTime\\|null\\.$#"
|
||||
count: 2
|
||||
path: src/Validator/Constraints/TimesheetLongRunningValidator.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$timesheet \\(App\\\\Entity\\\\Timesheet\\) of method App\\\\Validator\\\\Constraints\\\\TimesheetLongRunningValidator\\:\\:validate\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Validator\\\\ConstraintValidatorInterface\\:\\:validate\\(\\)$#"
|
||||
count: 2
|
||||
|
||||
@@ -17,11 +17,11 @@ class Constants
|
||||
/**
|
||||
* The current release version
|
||||
*/
|
||||
public const VERSION = '2.0.0';
|
||||
public const VERSION = '2.0.1';
|
||||
/**
|
||||
* The current release: major * 10000 + minor * 100 + patch
|
||||
*/
|
||||
public const VERSION_ID = 20000;
|
||||
public const VERSION_ID = 20001;
|
||||
/**
|
||||
* The software name
|
||||
*/
|
||||
|
||||
@@ -21,12 +21,13 @@ final class UTCDateTimeType extends DateTimeType
|
||||
private static ?\DateTimeZone $utc = null;
|
||||
|
||||
/**
|
||||
* @param mixed $value
|
||||
* @param T $value
|
||||
* @param AbstractPlatform $platform
|
||||
* @return mixed|string
|
||||
* @return (T is null ? null : string)
|
||||
* @template T<\DateTime>
|
||||
* @throws ConversionException
|
||||
*/
|
||||
public function convertToDatabaseValue($value, AbstractPlatform $platform): mixed
|
||||
public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string
|
||||
{
|
||||
if ($value instanceof \DateTime) {
|
||||
$value = clone $value;
|
||||
|
||||
@@ -184,7 +184,7 @@ class Project implements EntityWithMetaFields, EntityWithBudget
|
||||
return $this->customer;
|
||||
}
|
||||
|
||||
public function setCustomer(Customer $customer): Project
|
||||
public function setCustomer(?Customer $customer): Project
|
||||
{
|
||||
$this->customer = $customer;
|
||||
|
||||
|
||||
@@ -322,12 +322,21 @@ class Timesheet implements EntityWithMetaFields, ExportableItem
|
||||
{
|
||||
// only auto calculate if manually set duration is null - the result is important for eg. validations
|
||||
if ($calculate && $this->duration === null && $this->begin !== null && $this->end !== null) {
|
||||
return $this->end->getTimestamp() - $this->begin->getTimestamp();
|
||||
return $this->getCalculatedDuration();
|
||||
}
|
||||
|
||||
return $this->duration;
|
||||
}
|
||||
|
||||
public function getCalculatedDuration(): ?int
|
||||
{
|
||||
if ($this->begin !== null && $this->end !== null) {
|
||||
return $this->end->getTimestamp() - $this->begin->getTimestamp();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
* @return Timesheet
|
||||
|
||||
@@ -51,10 +51,10 @@ class TimesheetRepository extends EntityRepository
|
||||
/**
|
||||
* Fetches the raw data of a timesheet, to allow comparison e.g. of submitted and previously stored data.
|
||||
*
|
||||
* @param Timesheet $id
|
||||
* @param int $id
|
||||
* @return array
|
||||
*/
|
||||
public function getRawData(Timesheet $id): array
|
||||
public function getRawData(int $id): array
|
||||
{
|
||||
$qb = $this->createQueryBuilder('t');
|
||||
$qb
|
||||
|
||||
@@ -28,7 +28,7 @@ final class DurationCalculator implements CalculatorInterface
|
||||
return;
|
||||
}
|
||||
|
||||
$duration = $record->getEnd()->getTimestamp() - $record->getBegin()->getTimestamp();
|
||||
$duration = $record->getCalculatedDuration();
|
||||
$record->setDuration($duration);
|
||||
|
||||
$this->roundings->applyRoundings($record);
|
||||
|
||||
@@ -116,7 +116,7 @@ final class RoundingService
|
||||
$rounder->roundEnd($record, $rounding['end']);
|
||||
|
||||
if ($record->getBegin() !== null) {
|
||||
$duration = $record->getEnd()->getTimestamp() - $record->getBegin()->getTimestamp();
|
||||
$duration = $record->getCalculatedDuration();
|
||||
$record->setDuration($duration);
|
||||
|
||||
$rounder->roundDuration($record, $rounding['duration']);
|
||||
|
||||
@@ -127,14 +127,16 @@ final class TimesheetService
|
||||
$this->repository->save($timesheet);
|
||||
$this->dispatcher->dispatch(new TimesheetCreatePostEvent($timesheet));
|
||||
|
||||
// TODO really stop always or only if $timesheet->getEnd() === null
|
||||
try {
|
||||
$this->stopActiveEntries($timesheet);
|
||||
} catch (ValidationFailedException $vex) {
|
||||
// could happen for timesheets that were started in the future (end before begin)
|
||||
// or if you try to create a new timesheet while an old one is running for too long
|
||||
throw new ValidationFailedException($vex->getViolations(), 'Cannot stop running timesheet');
|
||||
if ($timesheet->isRunning()) {
|
||||
try {
|
||||
$this->stopActiveEntries($timesheet);
|
||||
} catch (ValidationFailedException $vex) {
|
||||
// could happen for timesheets that were started in the future (end before begin)
|
||||
// or if you try to create a new timesheet while an old one is running for too long
|
||||
throw new ValidationFailedException($vex->getViolations(), 'Cannot stop running timesheet');
|
||||
}
|
||||
}
|
||||
|
||||
$this->repository->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$this->repository->rollback();
|
||||
|
||||
@@ -73,10 +73,24 @@ final class TimesheetBudgetUsedValidator extends ConstraintValidator
|
||||
return;
|
||||
}
|
||||
|
||||
$id = $timesheet->getId();
|
||||
|
||||
// when changing the date via the calendar and/or the API, the duration will not be reset by the
|
||||
// duration calculator (which runs after validation!) so we manually reset the duration before
|
||||
$timesheet->setDuration(null);
|
||||
$duration = $timesheet->getDuration();
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Old solution (buggy) - duration MAY NOT BE RESET!
|
||||
// this will cause the timesheet to be deleted in the Weekly-QuickEntry-Flow
|
||||
// ------------------------------------------------------------------------
|
||||
// $timesheet->setDuration(null);
|
||||
// $duration = $timesheet->getDuration();
|
||||
|
||||
// another possible solution is cloning the timesheet
|
||||
// $timesheet = clone $timesheet;
|
||||
// $timesheet->setDuration(null);
|
||||
// $duration = $timesheet->getDuration();
|
||||
|
||||
$duration = $timesheet->getCalculatedDuration();
|
||||
|
||||
$timeRate = $this->rateService->calculate($timesheet);
|
||||
$rate = $timeRate->getRate();
|
||||
@@ -89,8 +103,8 @@ final class TimesheetBudgetUsedValidator extends ConstraintValidator
|
||||
$customerRate = $rate;
|
||||
$monthWasChanged = false;
|
||||
|
||||
if ($timesheet->getId() !== null) {
|
||||
$rawData = $this->timesheetRepository->getRawData($timesheet);
|
||||
if ($id !== null) {
|
||||
$rawData = $this->timesheetRepository->getRawData($id);
|
||||
|
||||
$activityId = (int) $rawData['activity'];
|
||||
$projectId = (int) $rawData['project'];
|
||||
|
||||
@@ -39,9 +39,12 @@ final class TimesheetLongRunningValidator extends ConstraintValidator
|
||||
return;
|
||||
}
|
||||
|
||||
/** @var int $duration */
|
||||
$duration = $timesheet->getCalculatedDuration();
|
||||
|
||||
// one year is currently the maximum that can be logged (which is already not logically)
|
||||
// the database column could hold more data, but let's limit it here
|
||||
if ($timesheet->getDuration() > 31536000) {
|
||||
if ($duration > 31536000) {
|
||||
$this->context->buildViolation($constraint->maximumMessage)
|
||||
->setTranslationDomain('validators')
|
||||
->atPath('duration')
|
||||
@@ -57,7 +60,6 @@ final class TimesheetLongRunningValidator extends ConstraintValidator
|
||||
return;
|
||||
}
|
||||
|
||||
$duration = $timesheet->getEnd()->getTimestamp() - $timesheet->getBegin()->getTimestamp();
|
||||
// float on purpose, because one second more than the configured minutes is already too long
|
||||
$minutes = $duration / 60;
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ final class TimesheetZeroDurationValidator extends ConstraintValidator
|
||||
|
||||
$duration = 0;
|
||||
if ($timesheet->getEnd() !== null && $timesheet->getBegin() !== null) {
|
||||
$duration = $timesheet->getEnd()->getTimestamp() - $timesheet->getBegin()->getTimestamp();
|
||||
$duration = $timesheet->getCalculatedDuration();
|
||||
}
|
||||
|
||||
if ($duration <= 0) {
|
||||
|
||||
@@ -129,9 +129,6 @@
|
||||
"ref": "bb31a3bbec00a8fc8aa1c9fbf9b0ef9fc492f93d"
|
||||
}
|
||||
},
|
||||
"friendsofphp/proxy-manager-lts": {
|
||||
"version": "v1.0.3"
|
||||
},
|
||||
"friendsofsymfony/rest-bundle": {
|
||||
"version": "2.2",
|
||||
"recipe": {
|
||||
@@ -165,9 +162,6 @@
|
||||
"kevinpapst/tabler-bundle": {
|
||||
"version": "dev-initial"
|
||||
},
|
||||
"laminas/laminas-code": {
|
||||
"version": "3.4.1"
|
||||
},
|
||||
"laminas/laminas-escaper": {
|
||||
"version": "2.7.0"
|
||||
},
|
||||
|
||||
@@ -58,7 +58,11 @@
|
||||
<a href="{{ path('saml_login') }}" id="social-login-button" tabindex="50" class="btn btn-white w-50">
|
||||
{% set provider = saml_config.getProvider() %}
|
||||
{% if provider is not null %}
|
||||
<i class="icon fab fa-{{ provider}} text-{{ provider }}"></i>
|
||||
{% if 'fa-' in provider %}
|
||||
<i class="icon {{ provider }} text-{{ provider|replace({'fas ': '', 'far ': '', 'fab ': ''}) }}"></i>
|
||||
{% else %}
|
||||
<i class="icon fab fa-{{ provider }} text-{{ provider }}"></i>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{{ saml_config.getTitle()|trans }}
|
||||
</a>
|
||||
|
||||
@@ -25,7 +25,7 @@ use PHPUnit\Framework\TestCase;
|
||||
*/
|
||||
class TimesheetTest extends TestCase
|
||||
{
|
||||
public function testDefaultValues()
|
||||
public function testDefaultValues(): void
|
||||
{
|
||||
$sut = new Timesheet();
|
||||
self::assertEquals('timesheet', $sut->getType());
|
||||
@@ -36,6 +36,9 @@ class TimesheetTest extends TestCase
|
||||
self::assertTrue($sut->isBillable());
|
||||
self::assertNull($sut->getModifiedAt());
|
||||
self::assertSame(0, $sut->getDuration());
|
||||
self::assertSame(0, $sut->getDuration(true));
|
||||
self::assertSame(0, $sut->getDuration(false));
|
||||
self::assertNull($sut->getCalculatedDuration());
|
||||
self::assertNull($sut->getUser());
|
||||
self::assertNull($sut->getActivity());
|
||||
self::assertNull($sut->getProject());
|
||||
@@ -57,7 +60,7 @@ class TimesheetTest extends TestCase
|
||||
self::assertNull($sut->getMetaField('foo'));
|
||||
}
|
||||
|
||||
public function testValueCanBeNull()
|
||||
public function testValueCanBeNull(): void
|
||||
{
|
||||
$sut = new Timesheet();
|
||||
self::assertEquals(0, $sut->getDuration());
|
||||
@@ -72,7 +75,7 @@ class TimesheetTest extends TestCase
|
||||
self::assertNull($sut->getInternalRate());
|
||||
}
|
||||
|
||||
protected function getEntity()
|
||||
protected function getEntity(): Timesheet
|
||||
{
|
||||
$customer = new Customer('Test Customer');
|
||||
|
||||
@@ -92,7 +95,7 @@ class TimesheetTest extends TestCase
|
||||
return $entity;
|
||||
}
|
||||
|
||||
public function testTags()
|
||||
public function testTags(): void
|
||||
{
|
||||
$sut = new Timesheet();
|
||||
$tag = new Tag();
|
||||
@@ -115,7 +118,7 @@ class TimesheetTest extends TestCase
|
||||
$this->assertEmpty($sut->getTags());
|
||||
}
|
||||
|
||||
public function testMetaFields()
|
||||
public function testMetaFields(): void
|
||||
{
|
||||
$sut = new Timesheet();
|
||||
$meta = new TimesheetMeta();
|
||||
@@ -143,7 +146,7 @@ class TimesheetTest extends TestCase
|
||||
self::assertCount(2, $sut->getVisibleMetaFields());
|
||||
}
|
||||
|
||||
public function testBillable()
|
||||
public function testBillable(): void
|
||||
{
|
||||
$sut = new Timesheet();
|
||||
self::assertTrue($sut->isBillable());
|
||||
@@ -153,7 +156,7 @@ class TimesheetTest extends TestCase
|
||||
self::assertTrue($sut->isBillable());
|
||||
}
|
||||
|
||||
public function testCategory()
|
||||
public function testCategory(): void
|
||||
{
|
||||
$sut = new Timesheet();
|
||||
self::assertInstanceOf(Timesheet::class, $sut->setCategory(Timesheet::HOLIDAY));
|
||||
@@ -173,7 +176,7 @@ class TimesheetTest extends TestCase
|
||||
$sut->setCategory('foo');
|
||||
}
|
||||
|
||||
public function testClone()
|
||||
public function testClone(): void
|
||||
{
|
||||
$sut = new Timesheet();
|
||||
$sut->setExported(true);
|
||||
@@ -207,4 +210,61 @@ class TimesheetTest extends TestCase
|
||||
self::assertEquals($clone->getEnd(), $sut->getEnd());
|
||||
self::assertFalse($clone->isExported());
|
||||
}
|
||||
|
||||
public function testDuration(): void
|
||||
{
|
||||
$sut = new Timesheet();
|
||||
|
||||
self::assertSame(0, $sut->getDuration());
|
||||
self::assertSame(0, $sut->getDuration(true));
|
||||
self::assertSame(0, $sut->getDuration(false));
|
||||
self::assertNull($sut->getCalculatedDuration());
|
||||
|
||||
$sut->setDuration(null);
|
||||
|
||||
self::assertNull($sut->getDuration());
|
||||
self::assertNull($sut->getDuration(true));
|
||||
self::assertNull($sut->getDuration(false));
|
||||
self::assertNull($sut->getCalculatedDuration());
|
||||
|
||||
$begin = new \DateTime('2023-02-17 18:00:00');
|
||||
$sut->setBegin($begin);
|
||||
|
||||
self::assertNull($sut->getDuration());
|
||||
self::assertNull($sut->getDuration(true));
|
||||
self::assertNull($sut->getDuration(false));
|
||||
self::assertNull($sut->getCalculatedDuration());
|
||||
|
||||
$sut->setDuration(0);
|
||||
|
||||
self::assertSame(0, $sut->getDuration());
|
||||
self::assertSame(0, $sut->getDuration(true));
|
||||
self::assertSame(0, $sut->getDuration(false));
|
||||
self::assertNull($sut->getCalculatedDuration());
|
||||
|
||||
$end = clone $begin;
|
||||
$end->modify('+2 hours');
|
||||
$sut->setEnd($end);
|
||||
|
||||
self::assertSame(0, $sut->getDuration());
|
||||
self::assertSame(0, $sut->getDuration(true));
|
||||
self::assertSame(0, $sut->getDuration(false));
|
||||
self::assertEquals(7200, $sut->getCalculatedDuration());
|
||||
|
||||
$sut->setDuration(7200);
|
||||
|
||||
self::assertSame(7200, $sut->getDuration());
|
||||
self::assertSame(7200, $sut->getDuration(true));
|
||||
self::assertSame(7200, $sut->getDuration(false));
|
||||
self::assertEquals(7200, $sut->getCalculatedDuration());
|
||||
|
||||
$end = clone $begin;
|
||||
$end->modify('+1 hours');
|
||||
$sut->setEnd($end);
|
||||
|
||||
self::assertSame(7200, $sut->getDuration());
|
||||
self::assertSame(7200, $sut->getDuration(true));
|
||||
self::assertSame(7200, $sut->getDuration(false));
|
||||
self::assertEquals(3600, $sut->getCalculatedDuration());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -418,6 +418,7 @@ class TimesheetBudgetUsedValidatorTest extends ConstraintValidatorTestCase
|
||||
$timesheet->method('getRate')->willReturn($rawData['rate']);
|
||||
$timesheet->method('getBegin')->willReturn($begin);
|
||||
$timesheet->method('getEnd')->willReturn($end);
|
||||
$timesheet->method('getCalculatedDuration')->willReturn($end->getTimestamp() - $begin->getTimestamp());
|
||||
$timesheet->method('getDuration')->willReturn($end->getTimestamp() - $begin->getTimestamp());
|
||||
$timesheet->method('getUser')->willReturn(new User());
|
||||
$timesheet->method('getProject')->willReturn($project);
|
||||
|
||||
@@ -77,10 +77,13 @@ class TimesheetLongRunningValidatorTest extends ConstraintValidatorTestCase
|
||||
|
||||
public function testLongRunningTriggersOverMaximum()
|
||||
{
|
||||
$begin = new \DateTime();
|
||||
$end = clone $begin;
|
||||
$end->modify('+31536060 seconds');
|
||||
|
||||
$timesheet = new Timesheet();
|
||||
$timesheet->setBegin(new \DateTime());
|
||||
$timesheet->setEnd(new \DateTime());
|
||||
$timesheet->setDuration(31536060);
|
||||
$timesheet->setBegin($begin);
|
||||
$timesheet->setEnd($end);
|
||||
|
||||
$this->validator->validate($timesheet, new TimesheetLongRunning());
|
||||
|
||||
|
||||
@@ -1042,11 +1042,6 @@ parameters:
|
||||
count: 1
|
||||
path: API/ProjectControllerTest.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$customer of method App\\\\Entity\\\\Project\\:\\:setCustomer\\(\\) expects App\\\\Entity\\\\Customer, App\\\\Entity\\\\Customer\\|null given\\.$#"
|
||||
count: 3
|
||||
path: API/ProjectControllerTest.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$customer of method App\\\\Entity\\\\Team\\:\\:addCustomer\\(\\) expects App\\\\Entity\\\\Customer, App\\\\Entity\\\\Customer\\|null given\\.$#"
|
||||
count: 1
|
||||
@@ -5187,46 +5182,6 @@ parameters:
|
||||
count: 1
|
||||
path: Entity/TimesheetTest.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:getEntity\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: Entity/TimesheetTest.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testBillable\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: Entity/TimesheetTest.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testCategory\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: Entity/TimesheetTest.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testClone\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: Entity/TimesheetTest.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testDefaultValues\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: Entity/TimesheetTest.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testMetaFields\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: Entity/TimesheetTest.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testTags\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: Entity/TimesheetTest.php
|
||||
|
||||
-
|
||||
message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testValueCanBeNull\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: Entity/TimesheetTest.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$name of method App\\\\Entity\\\\Timesheet\\:\\:getMetaField\\(\\) expects string, string\\|null given\\.$#"
|
||||
count: 1
|
||||
|
||||
Reference in New Issue
Block a user