Update various things. I know, great description.

This commit is contained in:
James Cole
2023-11-30 17:28:44 +01:00
parent 627db2c2df
commit 271e4271eb
100 changed files with 488 additions and 409 deletions

View File

@@ -539,43 +539,46 @@
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v6.3.8", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92" "reference": "64e06788686633deb8d9a7c75ab31bcf4b233a26"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/0d14a9f6d04d4ac38a8cea1171f4554e325dae92", "url": "https://api.github.com/repos/symfony/console/zipball/64e06788686633deb8d9a7c75ab31bcf4b233a26",
"reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92", "reference": "64e06788686633deb8d9a7c75ab31bcf4b233a26",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3",
"symfony/string": "^5.4|^6.0" "symfony/string": "^6.4|^7.0"
}, },
"conflict": { "conflict": {
"symfony/dependency-injection": "<5.4", "symfony/dependency-injection": "<6.4",
"symfony/dotenv": "<5.4", "symfony/dotenv": "<6.4",
"symfony/event-dispatcher": "<5.4", "symfony/event-dispatcher": "<6.4",
"symfony/lock": "<5.4", "symfony/lock": "<6.4",
"symfony/process": "<5.4" "symfony/process": "<6.4"
}, },
"provide": { "provide": {
"psr/log-implementation": "1.0|2.0|3.0" "psr/log-implementation": "1.0|2.0|3.0"
}, },
"require-dev": { "require-dev": {
"psr/log": "^1|^2|^3", "psr/log": "^1|^2|^3",
"symfony/config": "^5.4|^6.0", "symfony/config": "^6.4|^7.0",
"symfony/dependency-injection": "^5.4|^6.0", "symfony/dependency-injection": "^6.4|^7.0",
"symfony/event-dispatcher": "^5.4|^6.0", "symfony/event-dispatcher": "^6.4|^7.0",
"symfony/lock": "^5.4|^6.0", "symfony/http-foundation": "^6.4|^7.0",
"symfony/process": "^5.4|^6.0", "symfony/http-kernel": "^6.4|^7.0",
"symfony/var-dumper": "^5.4|^6.0" "symfony/lock": "^6.4|^7.0",
"symfony/messenger": "^6.4|^7.0",
"symfony/process": "^6.4|^7.0",
"symfony/stopwatch": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -609,7 +612,7 @@
"terminal" "terminal"
], ],
"support": { "support": {
"source": "https://github.com/symfony/console/tree/v6.3.8" "source": "https://github.com/symfony/console/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -625,7 +628,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-10-31T08:09:35+00:00" "time": "2023-11-20T16:43:42+00:00"
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
@@ -696,24 +699,24 @@
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v6.3.2", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher.git", "url": "https://github.com/symfony/event-dispatcher.git",
"reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" "reference": "c459b40ffe67c49af6fd392aac374c9edf8a027e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c459b40ffe67c49af6fd392aac374c9edf8a027e",
"reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "reference": "c459b40ffe67c49af6fd392aac374c9edf8a027e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.2",
"symfony/event-dispatcher-contracts": "^2.5|^3" "symfony/event-dispatcher-contracts": "^2.5|^3"
}, },
"conflict": { "conflict": {
"symfony/dependency-injection": "<5.4", "symfony/dependency-injection": "<6.4",
"symfony/service-contracts": "<2.5" "symfony/service-contracts": "<2.5"
}, },
"provide": { "provide": {
@@ -722,13 +725,13 @@
}, },
"require-dev": { "require-dev": {
"psr/log": "^1|^2|^3", "psr/log": "^1|^2|^3",
"symfony/config": "^5.4|^6.0", "symfony/config": "^6.4|^7.0",
"symfony/dependency-injection": "^5.4|^6.0", "symfony/dependency-injection": "^6.4|^7.0",
"symfony/error-handler": "^5.4|^6.0", "symfony/error-handler": "^6.4|^7.0",
"symfony/expression-language": "^5.4|^6.0", "symfony/expression-language": "^6.4|^7.0",
"symfony/http-foundation": "^5.4|^6.0", "symfony/http-foundation": "^6.4|^7.0",
"symfony/service-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3",
"symfony/stopwatch": "^5.4|^6.0" "symfony/stopwatch": "^6.4|^7.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -756,7 +759,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -772,7 +775,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-07-06T06:56:43+00:00" "time": "2023-07-27T16:29:09+00:00"
}, },
{ {
"name": "symfony/event-dispatcher-contracts", "name": "symfony/event-dispatcher-contracts",
@@ -852,20 +855,20 @@
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
"version": "v6.3.1", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/filesystem.git", "url": "https://github.com/symfony/filesystem.git",
"reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7",
"reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.2",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8" "symfony/polyfill-mbstring": "~1.8"
}, },
@@ -895,7 +898,7 @@
"description": "Provides basic utilities for the filesystem", "description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/filesystem/tree/v6.3.1" "source": "https://github.com/symfony/filesystem/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -911,27 +914,27 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-06-01T08:30:39+00:00" "time": "2023-07-27T06:33:22+00:00"
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
"version": "v6.3.5", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/finder.git", "url": "https://github.com/symfony/finder.git",
"reference": "a1b31d88c0e998168ca7792f222cbecee47428c4" "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/a1b31d88c0e998168ca7792f222cbecee47428c4", "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56",
"reference": "a1b31d88c0e998168ca7792f222cbecee47428c4", "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1" "php": ">=8.2"
}, },
"require-dev": { "require-dev": {
"symfony/filesystem": "^6.0" "symfony/filesystem": "^6.4|^7.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -959,7 +962,7 @@
"description": "Finds files and directories via an intuitive fluent interface", "description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/finder/tree/v6.3.5" "source": "https://github.com/symfony/finder/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -975,24 +978,24 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-09-26T12:56:25+00:00" "time": "2023-10-31T17:59:56+00:00"
}, },
{ {
"name": "symfony/options-resolver", "name": "symfony/options-resolver",
"version": "v6.3.0", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/options-resolver.git", "url": "https://github.com/symfony/options-resolver.git",
"reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" "reference": "700ff4096e346f54cb628ea650767c8130f1001f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", "url": "https://api.github.com/repos/symfony/options-resolver/zipball/700ff4096e346f54cb628ea650767c8130f1001f",
"reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", "reference": "700ff4096e346f54cb628ea650767c8130f1001f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3" "symfony/deprecation-contracts": "^2.5|^3"
}, },
"type": "library", "type": "library",
@@ -1026,7 +1029,7 @@
"options" "options"
], ],
"support": { "support": {
"source": "https://github.com/symfony/options-resolver/tree/v6.3.0" "source": "https://github.com/symfony/options-resolver/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -1042,7 +1045,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-05-12T14:21:09+00:00" "time": "2023-08-08T10:20:21+00:00"
}, },
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
@@ -1538,20 +1541,20 @@
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v6.3.4", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" "reference": "13bdb1670c7f510494e04fcb2bfa29af63db9c0d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", "url": "https://api.github.com/repos/symfony/process/zipball/13bdb1670c7f510494e04fcb2bfa29af63db9c0d",
"reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", "reference": "13bdb1670c7f510494e04fcb2bfa29af63db9c0d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1" "php": ">=8.2"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -1579,7 +1582,7 @@
"description": "Executes commands in sub-processes", "description": "Executes commands in sub-processes",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/process/tree/v6.3.4" "source": "https://github.com/symfony/process/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -1595,7 +1598,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-08-07T10:39:22+00:00" "time": "2023-11-20T16:43:42+00:00"
}, },
{ {
"name": "symfony/service-contracts", "name": "symfony/service-contracts",
@@ -1681,20 +1684,20 @@
}, },
{ {
"name": "symfony/stopwatch", "name": "symfony/stopwatch",
"version": "v6.3.0", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/stopwatch.git", "url": "https://github.com/symfony/stopwatch.git",
"reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" "reference": "7bbfa3dd564a0ce12eb4acaaa46823c740f9cb7a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", "url": "https://api.github.com/repos/symfony/stopwatch/zipball/7bbfa3dd564a0ce12eb4acaaa46823c740f9cb7a",
"reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", "reference": "7bbfa3dd564a0ce12eb4acaaa46823c740f9cb7a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.2",
"symfony/service-contracts": "^2.5|^3" "symfony/service-contracts": "^2.5|^3"
}, },
"type": "library", "type": "library",
@@ -1723,7 +1726,7 @@
"description": "Provides a way to profile code", "description": "Provides a way to profile code",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/stopwatch/tree/v6.3.0" "source": "https://github.com/symfony/stopwatch/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -1739,24 +1742,24 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-02-16T10:14:28+00:00" "time": "2023-07-05T13:06:06+00:00"
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
"version": "v6.3.8", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/string.git", "url": "https://github.com/symfony/string.git",
"reference": "13880a87790c76ef994c91e87efb96134522577a" "reference": "92bd2bfbba476d4a1838e5e12168bef2fd1e6620"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/13880a87790c76ef994c91e87efb96134522577a", "url": "https://api.github.com/repos/symfony/string/zipball/92bd2bfbba476d4a1838e5e12168bef2fd1e6620",
"reference": "13880a87790c76ef994c91e87efb96134522577a", "reference": "92bd2bfbba476d4a1838e5e12168bef2fd1e6620",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.2",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-grapheme": "~1.0",
"symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0",
@@ -1766,11 +1769,11 @@
"symfony/translation-contracts": "<2.5" "symfony/translation-contracts": "<2.5"
}, },
"require-dev": { "require-dev": {
"symfony/error-handler": "^5.4|^6.0", "symfony/error-handler": "^6.4|^7.0",
"symfony/http-client": "^5.4|^6.0", "symfony/http-client": "^6.4|^7.0",
"symfony/intl": "^6.2", "symfony/intl": "^6.4|^7.0",
"symfony/translation-contracts": "^2.5|^3.0", "symfony/translation-contracts": "^2.5|^3.0",
"symfony/var-exporter": "^5.4|^6.0" "symfony/var-exporter": "^6.4|^7.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -1809,7 +1812,7 @@
"utf8" "utf8"
], ],
"support": { "support": {
"source": "https://github.com/symfony/string/tree/v6.3.8" "source": "https://github.com/symfony/string/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -1825,7 +1828,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-11-09T08:28:21+00:00" "time": "2023-11-29T08:40:23+00:00"
} }
], ],
"packages-dev": [], "packages-dev": [],

106
.ci/phpmd/composer.lock generated
View File

@@ -146,23 +146,24 @@
}, },
{ {
"name": "pdepend/pdepend", "name": "pdepend/pdepend",
"version": "2.15.1", "version": "2.16.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/pdepend/pdepend.git", "url": "https://github.com/pdepend/pdepend.git",
"reference": "d12f25bcdfb7754bea458a4a5cb159d55e9950d0" "reference": "8dfc0c46529e2073fa97986552f80646eedac562"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/pdepend/pdepend/zipball/d12f25bcdfb7754bea458a4a5cb159d55e9950d0", "url": "https://api.github.com/repos/pdepend/pdepend/zipball/8dfc0c46529e2073fa97986552f80646eedac562",
"reference": "d12f25bcdfb7754bea458a4a5cb159d55e9950d0", "reference": "8dfc0c46529e2073fa97986552f80646eedac562",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.3.7", "php": ">=5.3.7",
"symfony/config": "^2.3.0|^3|^4|^5|^6.0", "symfony/config": "^2.3.0|^3|^4|^5|^6.0|^7.0",
"symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0", "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0|^7.0",
"symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0" "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0|^7.0",
"symfony/polyfill-mbstring": "^1.19"
}, },
"require-dev": { "require-dev": {
"easy-doc/easy-doc": "0.0.0|^1.2.3", "easy-doc/easy-doc": "0.0.0|^1.2.3",
@@ -197,7 +198,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/pdepend/pdepend/issues", "issues": "https://github.com/pdepend/pdepend/issues",
"source": "https://github.com/pdepend/pdepend/tree/2.15.1" "source": "https://github.com/pdepend/pdepend/tree/2.16.0"
}, },
"funding": [ "funding": [
{ {
@@ -205,7 +206,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-09-28T12:00:56+00:00" "time": "2023-11-29T08:52:35+00:00"
}, },
{ {
"name": "phpmd/phpmd", "name": "phpmd/phpmd",
@@ -396,34 +397,34 @@
}, },
{ {
"name": "symfony/config", "name": "symfony/config",
"version": "v6.3.8", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/config.git", "url": "https://github.com/symfony/config.git",
"reference": "b7a63887960359e5b59b15826fa9f9be10acbe88" "reference": "8789646600f4e7e451dde9e1dc81cfa429f3857a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/b7a63887960359e5b59b15826fa9f9be10acbe88", "url": "https://api.github.com/repos/symfony/config/zipball/8789646600f4e7e451dde9e1dc81cfa429f3857a",
"reference": "b7a63887960359e5b59b15826fa9f9be10acbe88", "reference": "8789646600f4e7e451dde9e1dc81cfa429f3857a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3", "symfony/deprecation-contracts": "^2.5|^3",
"symfony/filesystem": "^5.4|^6.0", "symfony/filesystem": "^6.4|^7.0",
"symfony/polyfill-ctype": "~1.8" "symfony/polyfill-ctype": "~1.8"
}, },
"conflict": { "conflict": {
"symfony/finder": "<5.4", "symfony/finder": "<6.4",
"symfony/service-contracts": "<2.5" "symfony/service-contracts": "<2.5"
}, },
"require-dev": { "require-dev": {
"symfony/event-dispatcher": "^5.4|^6.0", "symfony/event-dispatcher": "^6.4|^7.0",
"symfony/finder": "^5.4|^6.0", "symfony/finder": "^6.4|^7.0",
"symfony/messenger": "^5.4|^6.0", "symfony/messenger": "^6.4|^7.0",
"symfony/service-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3",
"symfony/yaml": "^5.4|^6.0" "symfony/yaml": "^6.4|^7.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -451,7 +452,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/config/tree/v6.3.8" "source": "https://github.com/symfony/config/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -467,44 +468,43 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-11-09T08:28:21+00:00" "time": "2023-11-09T08:30:23+00:00"
}, },
{ {
"name": "symfony/dependency-injection", "name": "symfony/dependency-injection",
"version": "v6.3.8", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dependency-injection.git", "url": "https://github.com/symfony/dependency-injection.git",
"reference": "1f30f545c4151f611148fc19e28d54d39e0a00bc" "reference": "71c053f3284a57d611e11bd7d7f1a76de8514a07"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/1f30f545c4151f611148fc19e28d54d39e0a00bc", "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/71c053f3284a57d611e11bd7d7f1a76de8514a07",
"reference": "1f30f545c4151f611148fc19e28d54d39e0a00bc", "reference": "71c053f3284a57d611e11bd7d7f1a76de8514a07",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.2",
"psr/container": "^1.1|^2.0", "psr/container": "^1.1|^2.0",
"symfony/deprecation-contracts": "^2.5|^3", "symfony/deprecation-contracts": "^2.5|^3",
"symfony/service-contracts": "^2.5|^3.0", "symfony/service-contracts": "^3.3",
"symfony/var-exporter": "^6.2.10" "symfony/var-exporter": "^6.4|^7.0"
}, },
"conflict": { "conflict": {
"ext-psr": "<1.1|>=2", "ext-psr": "<1.1|>=2",
"symfony/config": "<6.1", "symfony/config": "<6.4",
"symfony/finder": "<5.4", "symfony/finder": "<6.4",
"symfony/proxy-manager-bridge": "<6.3", "symfony/yaml": "<6.4"
"symfony/yaml": "<5.4"
}, },
"provide": { "provide": {
"psr/container-implementation": "1.1|2.0", "psr/container-implementation": "1.1|2.0",
"symfony/service-implementation": "1.1|2.0|3.0" "symfony/service-implementation": "1.1|2.0|3.0"
}, },
"require-dev": { "require-dev": {
"symfony/config": "^6.1", "symfony/config": "^6.4|^7.0",
"symfony/expression-language": "^5.4|^6.0", "symfony/expression-language": "^6.4|^7.0",
"symfony/yaml": "^5.4|^6.0" "symfony/yaml": "^6.4|^7.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -532,7 +532,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application", "description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/dependency-injection/tree/v6.3.8" "source": "https://github.com/symfony/dependency-injection/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -548,7 +548,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-10-31T08:07:48+00:00" "time": "2023-11-15T15:38:56+00:00"
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
@@ -619,20 +619,20 @@
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
"version": "v6.3.1", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/filesystem.git", "url": "https://github.com/symfony/filesystem.git",
"reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7",
"reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.2",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8" "symfony/polyfill-mbstring": "~1.8"
}, },
@@ -662,7 +662,7 @@
"description": "Provides basic utilities for the filesystem", "description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/filesystem/tree/v6.3.1" "source": "https://github.com/symfony/filesystem/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -678,7 +678,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-06-01T08:30:39+00:00" "time": "2023-07-27T06:33:22+00:00"
}, },
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
@@ -929,23 +929,23 @@
}, },
{ {
"name": "symfony/var-exporter", "name": "symfony/var-exporter",
"version": "v6.3.6", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/var-exporter.git", "url": "https://github.com/symfony/var-exporter.git",
"reference": "374d289c13cb989027274c86206ddc63b16a2441" "reference": "d97726e8d254a2d5512b2b4ba204735d84e7167d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/374d289c13cb989027274c86206ddc63b16a2441", "url": "https://api.github.com/repos/symfony/var-exporter/zipball/d97726e8d254a2d5512b2b4ba204735d84e7167d",
"reference": "374d289c13cb989027274c86206ddc63b16a2441", "reference": "d97726e8d254a2d5512b2b4ba204735d84e7167d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1" "php": ">=8.2"
}, },
"require-dev": { "require-dev": {
"symfony/var-dumper": "^5.4|^6.0" "symfony/var-dumper": "^6.4|^7.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -983,7 +983,7 @@
"serialize" "serialize"
], ],
"support": { "support": {
"source": "https://github.com/symfony/var-exporter/tree/v6.3.6" "source": "https://github.com/symfony/var-exporter/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@@ -999,7 +999,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-10-13T09:16:49+00:00" "time": "2023-11-29T08:40:23+00:00"
} }
], ],
"aliases": [], "aliases": [],

View File

@@ -30,6 +30,7 @@ use FireflyIII\Api\V1\Requests\Data\DateRequest;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType; use FireflyIII\Models\AccountType;
use FireflyIII\Models\Preference;
use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Support\Http\Api\ApiSupport; use FireflyIII\Support\Http\Api\ApiSupport;
use FireflyIII\User; use FireflyIII\User;
@@ -90,6 +91,7 @@ class AccountController extends Controller
// user's preferences // user's preferences
$defaultSet = $this->repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray(); $defaultSet = $this->repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray();
/** @var Preference $frontPage */
$frontPage = app('preferences')->get('frontPageAccounts', $defaultSet); $frontPage = app('preferences')->get('frontPageAccounts', $defaultSet);
$default = app('amount')->getDefaultCurrency(); $default = app('amount')->getDefaultCurrency();

View File

@@ -27,6 +27,8 @@ namespace FireflyIII\Api\V1\Controllers;
use Carbon\Carbon; use Carbon\Carbon;
use Carbon\Exceptions\InvalidDateException; use Carbon\Exceptions\InvalidDateException;
use Carbon\Exceptions\InvalidFormatException; use Carbon\Exceptions\InvalidFormatException;
use FireflyIII\Models\Preference;
use FireflyIII\User;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Validation\ValidatesRequests;
@@ -141,7 +143,10 @@ abstract class Controller extends BaseController
'limit' === $integer && // @phpstan-ignore-line 'limit' === $integer && // @phpstan-ignore-line
auth()->check()) { auth()->check()) {
// set default for user: // set default for user:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; /** @var User $user */
$user = auth()->user();
/** @var Preference $pageSize */
$pageSize = (int)app('preferences')->getForUser($user, 'listPageSize', 50)->data;
$bag->set($integer, $pageSize); $bag->set($integer, $pageSize);
} }
} }

View File

@@ -35,6 +35,7 @@ use FireflyIII\Models\RuleGroup;
use FireflyIII\Models\Tag; use FireflyIII\Models\Tag;
use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
/** /**
@@ -51,6 +52,7 @@ class PurgeController extends Controller
*/ */
public function purge(): JsonResponse public function purge(): JsonResponse
{ {
/** @var User $user */
$user = auth()->user(); $user = auth()->user();
// some manual code, too lazy to call all repositories. // some manual code, too lazy to call all repositories.

View File

@@ -82,75 +82,75 @@ class StoreRequest extends FormRequest
foreach ($this->get('transactions') as $transaction) { foreach ($this->get('transactions') as $transaction) {
$object = new NullArrayObject($transaction); $object = new NullArrayObject($transaction);
$return[] = [ $return[] = [
'type' => $this->clearString($object['type'], false), 'type' => $this->clearString($object['type']),
'date' => $this->dateFromValue($object['date']), 'date' => $this->dateFromValue($object['date']),
'order' => $this->integerFromValue((string)$object['order']), 'order' => $this->integerFromValue((string)$object['order']),
'currency_id' => $this->integerFromValue((string)$object['currency_id']), 'currency_id' => $this->integerFromValue((string)$object['currency_id']),
'currency_code' => $this->clearString((string)$object['currency_code'], false), 'currency_code' => $this->clearString((string)$object['currency_code']),
// foreign currency info: // foreign currency info:
'foreign_currency_id' => $this->integerFromValue((string)$object['foreign_currency_id']), 'foreign_currency_id' => $this->integerFromValue((string)$object['foreign_currency_id']),
'foreign_currency_code' => $this->clearString((string)$object['foreign_currency_code'], false), 'foreign_currency_code' => $this->clearString((string)$object['foreign_currency_code']),
// amount and foreign amount. Cannot be 0. // amount and foreign amount. Cannot be 0.
'amount' => $this->clearString((string)$object['amount'], false), 'amount' => $this->clearString((string)$object['amount']),
'foreign_amount' => $this->clearString((string)$object['foreign_amount'], false), 'foreign_amount' => $this->clearString((string)$object['foreign_amount']),
// description. // description.
'description' => $this->clearString($object['description'], false), 'description' => $this->clearString($object['description'], false),
// source of transaction. If everything is null, assume cash account. // source of transaction. If everything is null, assume cash account.
'source_id' => $this->integerFromValue((string)$object['source_id']), 'source_id' => $this->integerFromValue((string)$object['source_id']),
'source_name' => $this->clearString((string)$object['source_name'], false), 'source_name' => $this->clearString((string)$object['source_name']),
'source_iban' => $this->clearString((string)$object['source_iban'], false), 'source_iban' => $this->clearString((string)$object['source_iban']),
'source_number' => $this->clearString((string)$object['source_number'], false), 'source_number' => $this->clearString((string)$object['source_number']),
'source_bic' => $this->clearString((string)$object['source_bic'], false), 'source_bic' => $this->clearString((string)$object['source_bic']),
// destination of transaction. If everything is null, assume cash account. // destination of transaction. If everything is null, assume cash account.
'destination_id' => $this->integerFromValue((string)$object['destination_id']), 'destination_id' => $this->integerFromValue((string)$object['destination_id']),
'destination_name' => $this->clearString((string)$object['destination_name'], false), 'destination_name' => $this->clearString((string)$object['destination_name']),
'destination_iban' => $this->clearString((string)$object['destination_iban'], false), 'destination_iban' => $this->clearString((string)$object['destination_iban']),
'destination_number' => $this->clearString((string)$object['destination_number'], false), 'destination_number' => $this->clearString((string)$object['destination_number']),
'destination_bic' => $this->clearString((string)$object['destination_bic'], false), 'destination_bic' => $this->clearString((string)$object['destination_bic']),
// budget info // budget info
'budget_id' => $this->integerFromValue((string)$object['budget_id']), 'budget_id' => $this->integerFromValue((string)$object['budget_id']),
'budget_name' => $this->clearString((string)$object['budget_name'], false), 'budget_name' => $this->clearString((string)$object['budget_name']),
// category info // category info
'category_id' => $this->integerFromValue((string)$object['category_id']), 'category_id' => $this->integerFromValue((string)$object['category_id']),
'category_name' => $this->clearString((string)$object['category_name'], false), 'category_name' => $this->clearString((string)$object['category_name']),
// journal bill reference. Optional. Will only work for withdrawals // journal bill reference. Optional. Will only work for withdrawals
'bill_id' => $this->integerFromValue((string)$object['bill_id']), 'bill_id' => $this->integerFromValue((string)$object['bill_id']),
'bill_name' => $this->clearString((string)$object['bill_name'], false), 'bill_name' => $this->clearString((string)$object['bill_name']),
// piggy bank reference. Optional. Will only work for transfers // piggy bank reference. Optional. Will only work for transfers
'piggy_bank_id' => $this->integerFromValue((string)$object['piggy_bank_id']), 'piggy_bank_id' => $this->integerFromValue((string)$object['piggy_bank_id']),
'piggy_bank_name' => $this->clearString((string)$object['piggy_bank_name'], false), 'piggy_bank_name' => $this->clearString((string)$object['piggy_bank_name']),
// some other interesting properties // some other interesting properties
'reconciled' => $this->convertBoolean((string)$object['reconciled']), 'reconciled' => $this->convertBoolean((string)$object['reconciled']),
'notes' => $this->clearString((string)$object['notes']), 'notes' => $this->clearStringKeepNewlines((string)$object['notes']),
'tags' => $this->arrayFromValue($object['tags']), 'tags' => $this->arrayFromValue($object['tags']),
// all custom fields: // all custom fields:
'internal_reference' => $this->clearString((string)$object['internal_reference'], false), 'internal_reference' => $this->clearString((string)$object['internal_reference']),
'external_id' => $this->clearString((string)$object['external_id'], false), 'external_id' => $this->clearString((string)$object['external_id']),
'original_source' => sprintf('ff3-v%s|api-v%s', config('firefly.version'), config('firefly.api_version')), 'original_source' => sprintf('ff3-v%s|api-v%s', config('firefly.version'), config('firefly.api_version')),
'recurrence_id' => $this->integerFromValue($object['recurrence_id']), 'recurrence_id' => $this->integerFromValue($object['recurrence_id']),
'bunq_payment_id' => $this->clearString((string)$object['bunq_payment_id'], false), 'bunq_payment_id' => $this->clearString((string)$object['bunq_payment_id']),
'external_url' => $this->clearString((string)$object['external_url'], false), 'external_url' => $this->clearString((string)$object['external_url']),
'sepa_cc' => $this->clearString((string)$object['sepa_cc'], false), 'sepa_cc' => $this->clearString((string)$object['sepa_cc']),
'sepa_ct_op' => $this->clearString((string)$object['sepa_ct_op'], false), 'sepa_ct_op' => $this->clearString((string)$object['sepa_ct_op']),
'sepa_ct_id' => $this->clearString((string)$object['sepa_ct_id'], false), 'sepa_ct_id' => $this->clearString((string)$object['sepa_ct_id']),
'sepa_db' => $this->clearString((string)$object['sepa_db'], false), 'sepa_db' => $this->clearString((string)$object['sepa_db']),
'sepa_country' => $this->clearString((string)$object['sepa_country'], false), 'sepa_country' => $this->clearString((string)$object['sepa_country']),
'sepa_ep' => $this->clearString((string)$object['sepa_ep'], false), 'sepa_ep' => $this->clearString((string)$object['sepa_ep']),
'sepa_ci' => $this->clearString((string)$object['sepa_ci'], false), 'sepa_ci' => $this->clearString((string)$object['sepa_ci']),
'sepa_batch_id' => $this->clearString((string)$object['sepa_batch_id'], false), 'sepa_batch_id' => $this->clearString((string)$object['sepa_batch_id']),
// custom date fields. Must be Carbon objects. Presence is optional. // custom date fields. Must be Carbon objects. Presence is optional.
'interest_date' => $this->dateFromValue($object['interest_date']), 'interest_date' => $this->dateFromValue($object['interest_date']),
'book_date' => $this->dateFromValue($object['book_date']), 'book_date' => $this->dateFromValue($object['book_date']),

View File

@@ -215,7 +215,7 @@ class UpdateRequest extends FormRequest
{ {
foreach ($this->stringFields as $fieldName) { foreach ($this->stringFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) { if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->clearString((string)$transaction[$fieldName], false); $current[$fieldName] = $this->clearString((string)$transaction[$fieldName]);
} }
} }
@@ -232,7 +232,7 @@ class UpdateRequest extends FormRequest
{ {
foreach ($this->textareaFields as $fieldName) { foreach ($this->textareaFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) { if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->clearString((string)$transaction[$fieldName]); $current[$fieldName] = $this->clearStringKeepNewlines((string)$transaction[$fieldName]); // keep newlines
} }
} }

View File

@@ -65,8 +65,9 @@ class DestroyController extends Controller
{ {
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
// to access this function: must be group owner or sysadmin.
// need owner role or system owner role to delete user group. // need owner role or system owner role to delete user group.
$access = $user->hasRoleInGroup($userGroup, UserRoleEnum::OWNER, false, true); $access = $user->hasSpecificRoleInGroup($userGroup, UserRoleEnum::OWNER) || $user->hasRole('owner');
if (false === $access) { if (false === $access) {
throw new NotFoundHttpException(); throw new NotFoundHttpException();
} }

View File

@@ -93,75 +93,75 @@ class StoreRequest extends FormRequest
foreach ($this->get('transactions') as $transaction) { foreach ($this->get('transactions') as $transaction) {
$object = new NullArrayObject($transaction); $object = new NullArrayObject($transaction);
$return[] = [ $return[] = [
'type' => $this->clearString($object['type'], false), 'type' => $this->clearString($object['type']),
'date' => $this->dateFromValue($object['date']), 'date' => $this->dateFromValue($object['date']),
'order' => $this->integerFromValue((string)$object['order']), 'order' => $this->integerFromValue((string)$object['order']),
'currency_id' => $this->integerFromValue((string)$object['currency_id']), 'currency_id' => $this->integerFromValue((string)$object['currency_id']),
'currency_code' => $this->clearString((string)$object['currency_code'], false), 'currency_code' => $this->clearString((string)$object['currency_code']),
// foreign currency info: // foreign currency info:
'foreign_currency_id' => $this->integerFromValue((string)$object['foreign_currency_id']), 'foreign_currency_id' => $this->integerFromValue((string)$object['foreign_currency_id']),
'foreign_currency_code' => $this->clearString((string)$object['foreign_currency_code'], false), 'foreign_currency_code' => $this->clearString((string)$object['foreign_currency_code']),
// amount and foreign amount. Cannot be 0. // amount and foreign amount. Cannot be 0.
'amount' => $this->clearString((string)$object['amount'], false), 'amount' => $this->clearString((string)$object['amount']),
'foreign_amount' => $this->clearString((string)$object['foreign_amount'], false), 'foreign_amount' => $this->clearString((string)$object['foreign_amount']),
// description. // description.
'description' => $this->clearString($object['description'], false), 'description' => $this->clearString($object['description']),
// source of transaction. If everything is null, assume cash account. // source of transaction. If everything is null, assume cash account.
'source_id' => $this->integerFromValue((string)$object['source_id']), 'source_id' => $this->integerFromValue((string)$object['source_id']),
'source_name' => $this->clearString((string)$object['source_name'], false), 'source_name' => $this->clearString((string)$object['source_name']),
'source_iban' => $this->clearString((string)$object['source_iban'], false), 'source_iban' => $this->clearString((string)$object['source_iban']),
'source_number' => $this->clearString((string)$object['source_number'], false), 'source_number' => $this->clearString((string)$object['source_number']),
'source_bic' => $this->clearString((string)$object['source_bic'], false), 'source_bic' => $this->clearString((string)$object['source_bic']),
// destination of transaction. If everything is null, assume cash account. // destination of transaction. If everything is null, assume cash account.
'destination_id' => $this->integerFromValue((string)$object['destination_id']), 'destination_id' => $this->integerFromValue((string)$object['destination_id']),
'destination_name' => $this->clearString((string)$object['destination_name'], false), 'destination_name' => $this->clearString((string)$object['destination_name']),
'destination_iban' => $this->clearString((string)$object['destination_iban'], false), 'destination_iban' => $this->clearString((string)$object['destination_iban']),
'destination_number' => $this->clearString((string)$object['destination_number'], false), 'destination_number' => $this->clearString((string)$object['destination_number']),
'destination_bic' => $this->clearString((string)$object['destination_bic'], false), 'destination_bic' => $this->clearString((string)$object['destination_bic']),
// budget info // budget info
'budget_id' => $this->integerFromValue((string)$object['budget_id']), 'budget_id' => $this->integerFromValue((string)$object['budget_id']),
'budget_name' => $this->clearString((string)$object['budget_name'], false), 'budget_name' => $this->clearString((string)$object['budget_name']),
// category info // category info
'category_id' => $this->integerFromValue((string)$object['category_id']), 'category_id' => $this->integerFromValue((string)$object['category_id']),
'category_name' => $this->clearString((string)$object['category_name'], false), 'category_name' => $this->clearString((string)$object['category_name']),
// journal bill reference. Optional. Will only work for withdrawals // journal bill reference. Optional. Will only work for withdrawals
'bill_id' => $this->integerFromValue((string)$object['bill_id']), 'bill_id' => $this->integerFromValue((string)$object['bill_id']),
'bill_name' => $this->clearString((string)$object['bill_name'], false), 'bill_name' => $this->clearString((string)$object['bill_name']),
// piggy bank reference. Optional. Will only work for transfers // piggy bank reference. Optional. Will only work for transfers
'piggy_bank_id' => $this->integerFromValue((string)$object['piggy_bank_id']), 'piggy_bank_id' => $this->integerFromValue((string)$object['piggy_bank_id']),
'piggy_bank_name' => $this->clearString((string)$object['piggy_bank_name'], false), 'piggy_bank_name' => $this->clearString((string)$object['piggy_bank_name']),
// some other interesting properties // some other interesting properties
'reconciled' => $this->convertBoolean((string)$object['reconciled']), 'reconciled' => $this->convertBoolean((string)$object['reconciled']),
'notes' => $this->clearString((string)$object['notes']), 'notes' => $this->clearStringKeepNewlines((string)$object['notes']),
'tags' => $this->arrayFromValue($object['tags']), 'tags' => $this->arrayFromValue($object['tags']),
// all custom fields: // all custom fields:
'internal_reference' => $this->clearString((string)$object['internal_reference'], false), 'internal_reference' => $this->clearString((string)$object['internal_reference']),
'external_id' => $this->clearString((string)$object['external_id'], false), 'external_id' => $this->clearString((string)$object['external_id']),
'original_source' => sprintf('ff3-v%s|api-v%s', config('firefly.version'), config('firefly.api_version')), 'original_source' => sprintf('ff3-v%s|api-v%s', config('firefly.version'), config('firefly.api_version')),
'recurrence_id' => $this->integerFromValue($object['recurrence_id']), 'recurrence_id' => $this->integerFromValue($object['recurrence_id']),
'bunq_payment_id' => $this->clearString((string)$object['bunq_payment_id'], false), 'bunq_payment_id' => $this->clearString((string)$object['bunq_payment_id']),
'external_url' => $this->clearString((string)$object['external_url'], false), 'external_url' => $this->clearString((string)$object['external_url']),
'sepa_cc' => $this->clearString((string)$object['sepa_cc'], false), 'sepa_cc' => $this->clearString((string)$object['sepa_cc']),
'sepa_ct_op' => $this->clearString((string)$object['sepa_ct_op'], false), 'sepa_ct_op' => $this->clearString((string)$object['sepa_ct_op']),
'sepa_ct_id' => $this->clearString((string)$object['sepa_ct_id'], false), 'sepa_ct_id' => $this->clearString((string)$object['sepa_ct_id']),
'sepa_db' => $this->clearString((string)$object['sepa_db'], false), 'sepa_db' => $this->clearString((string)$object['sepa_db']),
'sepa_country' => $this->clearString((string)$object['sepa_country'], false), 'sepa_country' => $this->clearString((string)$object['sepa_country']),
'sepa_ep' => $this->clearString((string)$object['sepa_ep'], false), 'sepa_ep' => $this->clearString((string)$object['sepa_ep']),
'sepa_ci' => $this->clearString((string)$object['sepa_ci'], false), 'sepa_ci' => $this->clearString((string)$object['sepa_ci']),
'sepa_batch_id' => $this->clearString((string)$object['sepa_batch_id'], false), 'sepa_batch_id' => $this->clearString((string)$object['sepa_batch_id']),
// custom date fields. Must be Carbon objects. Presence is optional. // custom date fields. Must be Carbon objects. Presence is optional.
'interest_date' => $this->dateFromValue($object['interest_date']), 'interest_date' => $this->dateFromValue($object['interest_date']),
'book_date' => $this->dateFromValue($object['book_date']), 'book_date' => $this->dateFromValue($object['book_date']),

View File

@@ -42,6 +42,7 @@ class TriggeredAuditLog extends Event
/** /**
* Create a new event instance. * Create a new event instance.
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/ */
public function __construct(Model $changer, Model $auditable, string $field, mixed $before, mixed $after) public function __construct(Model $changer, Model $auditable, string $field, mixed $before, mixed $after)
{ {

View File

@@ -117,7 +117,8 @@ class UserGroup extends Model
} }
// need at least ready only to be aware of the user group's existence, // need at least ready only to be aware of the user group's existence,
// but owner/full role (in the group) or global owner role may overrule this. // but owner/full role (in the group) or global owner role may overrule this.
if ($user->hasRoleInGroup($userGroup, UserRoleEnum::READ_ONLY, true, true)) { $access = $user->hasRoleInGroupOrOwner($userGroup, UserRoleEnum::READ_ONLY) || $user->hasRole('owner');
if ($access) {
return $userGroup; return $userGroup;
} }
} }

View File

@@ -41,6 +41,7 @@ class AuthServiceProvider extends ServiceProvider
/** /**
* Register any authentication / authorization services. * Register any authentication / authorization services.
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
* *
* @return void * @return void
*/ */

View File

@@ -120,7 +120,6 @@ class JournalCLIRepository implements JournalCLIRepositoryInterface
$cache->addProperty($field); $cache->addProperty($field);
if ($cache->has()) { if ($cache->has()) {
$result = null;
return new Carbon($cache->get()); return new Carbon($cache->get());
} }

View File

@@ -40,6 +40,8 @@ class IsAssetAccountId implements ValidationRule
* @param Closure $fail * @param Closure $fail
* *
* @return void * @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {

View File

@@ -38,6 +38,8 @@ class IsBoolean implements ValidationRule
* @param Closure $fail * @param Closure $fail
* *
* @return void * @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {

View File

@@ -41,6 +41,8 @@ class IsDateOrTime implements ValidationRule
* @param Closure $fail * @param Closure $fail
* *
* @return void * @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {

View File

@@ -40,6 +40,8 @@ class IsTransferAccount implements ValidationRule
* @param Closure $fail * @param Closure $fail
* *
* @return void * @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {
@@ -59,7 +61,7 @@ class IsTransferAccount implements ValidationRule
$validAccount = $validator->validateSource(['id' => (int)$value,]); $validAccount = $validator->validateSource(['id' => (int)$value,]);
app('log')->debug(sprintf('Search by id (%d), result is %s.', (int)$value, var_export($validAccount, true))); app('log')->debug(sprintf('Search by id (%d), result is %s.', (int)$value, var_export($validAccount, true)));
if(false === $validAccount) { if (false === $validAccount) {
$fail('validation.not_transfer_account')->translate(); $fail('validation.not_transfer_account')->translate();
} }
} }

View File

@@ -82,6 +82,8 @@ class IsValidAttachmentModel implements ValidationRule
* @param Closure $fail * @param Closure $fail
* *
* @return void * @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {
@@ -89,26 +91,19 @@ class IsValidAttachmentModel implements ValidationRule
$fail('validation.model_id_invalid')->translate(); $fail('validation.model_id_invalid')->translate();
return; return;
} }
$methods = [ $result = match ($this->model) {
Account::class => 'validateAccount', Account::class => $this->validateAccount((int)$value),
Bill::class => 'validateBill', Bill::class => $this->validateBill((int)$value),
Budget::class => 'validateBudget', Budget::class => $this->validateBudget((int)$value),
Category::class => 'validateCategory', Category::class => $this->validateCategory((int)$value),
PiggyBank::class => 'validatePiggyBank', PiggyBank::class => $this->validatePiggyBank((int)$value),
Tag::class => 'validateTag', Tag::class => $this->validateTag((int)$value),
Transaction::class => 'validateTransaction', Transaction::class => $this->validateTransaction((int)$value),
TransactionJournal::class => 'validateJournal', TransactionJournal::class => $this->validateJournal((int)$value),
]; default => false,
if (!array_key_exists($this->model, $methods)) { };
app('log')->error(sprintf('Cannot validate model "%s" in %s.', substr($this->model, 0, 20), __METHOD__));
$fail('validation.model_id_invalid')->translate(); if (false === $result) {
return;
}
$method = $methods[$this->model];
$result = $this->$method((int)$value); // @phpstan-ignore-line
if(false === $result) {
$fail('validation.model_id_invalid')->translate(); $fail('validation.model_id_invalid')->translate();
} }
} }

View File

@@ -60,6 +60,8 @@ class IsValidBulkClause implements ValidationRule
* @param Closure $fail * @param Closure $fail
* *
* @return void * @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {

View File

@@ -48,6 +48,8 @@ class LessThanPiggyTarget implements ValidationRule
* @param Closure $fail * @param Closure $fail
* *
* @return void * @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {

View File

@@ -79,6 +79,8 @@ class UniqueAccountNumber implements ValidationRule
* @param Closure $fail * @param Closure $fail
* *
* @return void * @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {

View File

@@ -95,6 +95,8 @@ class UniqueIban implements ValidationRule
* *
* @return bool * @return bool
* *
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*
*/ */
public function passes($attribute, $value): bool public function passes($attribute, $value): bool
{ {

View File

@@ -41,6 +41,8 @@ class ValidJournals implements ValidationRule
* @param Closure $fail * @param Closure $fail
* *
* @return void * @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {

View File

@@ -39,6 +39,8 @@ class ValidRecurrenceRepetitionType implements ValidationRule
* @param string $attribute * @param string $attribute
* @param mixed $value * @param mixed $value
* @param Closure $fail * @param Closure $fail
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {

View File

@@ -41,6 +41,8 @@ class ValidRecurrenceRepetitionValue implements ValidationRule
* @param Closure $fail * @param Closure $fail
* *
* @return void * @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public function validate(string $attribute, mixed $value, Closure $fail): void public function validate(string $attribute, mixed $value, Closure $fail): void
{ {
@@ -62,12 +64,12 @@ class ValidRecurrenceRepetitionValue implements ValidationRule
// Value is like: weekly,7 // Value is like: weekly,7
if (str_starts_with($value, 'weekly') && $this->validateWeekly($value)) { if (str_starts_with($value, 'weekly') && $this->validateWeekly($value)) {
return ; return;
} }
// Value is like: yearly,2018-01-01 // Value is like: yearly,2018-01-01
if (str_starts_with($value, 'yearly') && $this->validateYearly($value)) { if (str_starts_with($value, 'yearly') && $this->validateYearly($value)) {
return ; return;
} }
$fail('validation.valid_recurrence_rep_type')->translate(); $fail('validation.valid_recurrence_rep_type')->translate();

View File

@@ -273,7 +273,6 @@ class CreditRecalculateService
$journal = $transaction->transactionJournal; $journal = $transaction->transactionJournal;
$foreignCurrency = $transaction->foreignCurrency; $foreignCurrency = $transaction->foreignCurrency;
$accountCurrency = $this->repository->getAccountCurrency($account); $accountCurrency = $this->repository->getAccountCurrency($account);
$groupId = $journal->transaction_group_id;
$decimals = $accountCurrency->decimal_places; $decimals = $accountCurrency->decimal_places;
$type = $journal->transactionType->type; $type = $journal->transactionType->type;
/** @var Transaction $destTransaction */ /** @var Transaction $destTransaction */

View File

@@ -41,7 +41,7 @@ class RemoteUserGuard implements Guard
{ {
protected Application $application; protected Application $application;
protected UserProvider $provider; protected UserProvider $provider;
protected User|null $user; protected User | null $user;
/** /**
* Create a new authentication guard. * Create a new authentication guard.
@@ -156,8 +156,9 @@ class RemoteUserGuard implements Guard
/** /**
* @inheritDoc * @inheritDoc
* @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function id(): int|string|null public function id(): int | string | null
{ {
app('log')->debug(sprintf('Now at %s', __METHOD__)); app('log')->debug(sprintf('Now at %s', __METHOD__));
return $this->user?->id; return $this->user?->id;

View File

@@ -45,6 +45,7 @@ class DynamicConfigKey
* *
* @return string * @return string
* @throws NotFoundHttpException * @throws NotFoundHttpException
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public static function routeBinder(string $value, Route $route): string public static function routeBinder(string $value, Route $route): string
{ {

View File

@@ -62,6 +62,8 @@ class EitherConfigKey
* *
* @return string * @return string
* @throws NotFoundHttpException * @throws NotFoundHttpException
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/ */
public static function routeBinder(string $value, Route $route): string public static function routeBinder(string $value, Route $route): string
{ {

View File

@@ -935,7 +935,7 @@ class ExportDataGenerator
$journal['budget_name'], $journal['budget_name'],
$journal['bill_name'], $journal['bill_name'],
$this->mergeTags($journal['tags']), $this->mergeTags($journal['tags']),
$this->clearString($journal['notes'], true), $this->clearStringKeepNewlines($journal['notes']),
// export also the optional fields (ALL) // export also the optional fields (ALL)

View File

@@ -32,7 +32,7 @@ trait ReturnsIntegerIdTrait
{ {
/** /**
* Get the ID * Get the ID
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return Attribute * @return Attribute
*/ */
protected function id(): Attribute protected function id(): Attribute

View File

@@ -178,6 +178,7 @@ trait AppendsLocationData
* @param bool $default * @param bool $default
* *
* @return mixed * @return mixed
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
abstract public function boolean($key = null, $default = false); abstract public function boolean($key = null, $default = false);

View File

@@ -60,7 +60,8 @@ trait ChecksLogin
/** @var UserRoleEnum $role */ /** @var UserRoleEnum $role */
foreach ($this->acceptedRoles as $role) { foreach ($this->acceptedRoles as $role) {
// system owner cannot overrule this, MUST be member of the group. // system owner cannot overrule this, MUST be member of the group.
if ($user->hasRoleInGroup($userGroup, $role, true, false)) { $access = $user->hasRoleInGroupOrOwner($userGroup, $role);
if ($access) {
return true; return true;
} }
} }

View File

@@ -34,60 +34,8 @@ use Illuminate\Support\Collection;
*/ */
trait ConvertsDataTypes trait ConvertsDataTypes
{ {
/** private array $characters
* Return integer value. = [
*
* @param string $field
*
* @return int
*/
public function convertInteger(string $field): int
{
return (int)$this->get($field);
}
/**
* Abstract method that always exists in the Request classes that use this
* trait, OR a stub needs to be added by any other class that uses this train.
*
* @param string $key
* @param mixed|null $default
*
* @return mixed
*/
abstract public function get(string $key, mixed $default = null): mixed;
/**
* Return string value.
*
* @param string $field
*
* @return string
*/
public function convertString(string $field): string
{
$entry = $this->get($field);
if (!is_scalar($entry)) {
return '';
}
return (string) $this->clearString((string)$entry, false);
}
/**
* @param string|null $string
* @param bool $keepNewlines
*
* @return string|null
*/
public function clearString(?string $string, bool $keepNewlines = true): ?string
{
if (null === $string) {
return null;
}
if ('' === $string) {
return '';
}
$search = [
"\0", // NUL "\0", // NUL
"\f", // form feed "\f", // form feed
"\v", // vertical tab "\v", // vertical tab
@@ -136,24 +84,91 @@ trait ConvertsDataTypes
"\u{202F}", // narrow no-break space "\u{202F}", // narrow no-break space
"\u{3000}", // ideographic space "\u{3000}", // ideographic space
"\u{FEFF}", // zero width no -break space "\u{FEFF}", // zero width no -break space
"\r", // carriage return
]; ];
$replace = "\x20"; // plain old normal space
$string = str_replace($search, $replace, $string);
$secondSearch = $keepNewlines ? ["\r"] : ["\r", "\n", "\t", "\036", "\025"]; /**
$string = str_replace($secondSearch, '', $string); * Return integer value.
*
* @param string $field
*
* @return int
*/
public function convertInteger(string $field): int
{
return (int)$this->get($field);
}
/**
* Abstract method that always exists in the Request classes that use this
* trait, OR a stub needs to be added by any other class that uses this train.
*
* @param string $key
* @param mixed|null $default
*
* @return mixed
*/
abstract public function get(string $key, mixed $default = null): mixed;
/**
* Return string value.
*
* @param string $field
*
* @return string
*/
public function convertString(string $field): string
{
$entry = $this->get($field);
if (!is_scalar($entry)) {
return '';
}
return (string)$this->clearString((string)$entry);
}
/**
* @param string|null $string
*
* @return string|null
*/
public function clearString(?string $string): ?string
{
$string = $this->clearStringKeepNewlines($string);
// clear zalgo text (TODO also in API v2)
$string = preg_replace('/(\pM{2})\pM+/u', '\1', $string);
if (null === $string) { if (null === $string) {
return null; return null;
} }
if ('' === $string) { if ('' === $string) {
return ''; return '';
} }
// then remove newlines too:
$string = str_replace(["\r", "\n", "\t", "\036", "\025"], '', $string);
return trim($string); return trim($string);
} }
/**
* @param string|null $string
*
* @return string|null
*/
public function clearStringKeepNewlines(?string $string): ?string
{
if (null === $string) {
return null;
}
if ('' === $string) {
return '';
}
$string = str_replace($this->characters, "\x20", $string);
// clear zalgo text (TODO also in API v2)
$string = preg_replace('/(\pM{2})\pM+/u', '\1', $string);
return trim((string)$string);
}
/** /**
* TODO duplicate, see SelectTransactionsRequest * TODO duplicate, see SelectTransactionsRequest
* *
@@ -166,7 +181,8 @@ trait ConvertsDataTypes
/** @var AccountRepositoryInterface $repository */ /** @var AccountRepositoryInterface $repository */
$repository = app(AccountRepositoryInterface::class); $repository = app(AccountRepositoryInterface::class);
if (method_exists($this, 'validateUserGroup')) { /** @phpstan-ignore-line */ if (method_exists($this, 'validateUserGroup')) {
/** @phpstan-ignore-line */
$userGroup = $this->validateUserGroup($this); $userGroup = $this->validateUserGroup($this);
if (null !== $userGroup) { if (null !== $userGroup) {
$repository->setUserGroup($userGroup); $repository->setUserGroup($userGroup);
@@ -199,7 +215,7 @@ trait ConvertsDataTypes
*/ */
public function stringWithNewlines(string $field): string public function stringWithNewlines(string $field): string
{ {
return (string) $this->clearString((string)($this->get($field) ?? '')); return (string)$this->clearStringKeepNewlines((string)($this->get($field) ?? ''));
} }
/** /**
@@ -274,7 +290,7 @@ trait ConvertsDataTypes
return null; return null;
} }
if(false === $carbon) { if (false === $carbon) {
app('log')->error(sprintf('[2] "%s" is of an invalid format.', $value)); app('log')->error(sprintf('[2] "%s" is of an invalid format.', $value));
return null; return null;
} }
@@ -383,7 +399,7 @@ trait ConvertsDataTypes
{ {
$result = null; $result = null;
try { try {
$result = '' !== (string) $this->get($field) ? new Carbon((string)$this->get($field), config('app.timezone')) : null; $result = '' !== (string)$this->get($field) ? new Carbon((string)$this->get($field), config('app.timezone')) : null;
} catch (InvalidFormatException $e) { } catch (InvalidFormatException $e) {
// @ignoreException // @ignoreException
} }

View File

@@ -1363,6 +1363,7 @@ class OperatorQuerySearch implements SearchInterface
* @param int $searchDirection * @param int $searchDirection
* @param int $stringPosition * @param int $stringPosition
* @param bool $prohibited * @param bool $prohibited
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
private function searchAccount(string $value, int $searchDirection, int $stringPosition, bool $prohibited = false): void private function searchAccount(string $value, int $searchDirection, int $stringPosition, bool $prohibited = false): void
{ {
@@ -1432,6 +1433,7 @@ class OperatorQuerySearch implements SearchInterface
} }
/** /**
* TODO make enums
* searchDirection: 1 = source (default), 2 = destination, 3 = both * searchDirection: 1 = source (default), 2 = destination, 3 = both
* stringPosition: 1 = start (default), 2 = end, 3 = contains, 4 = is * stringPosition: 1 = start (default), 2 = end, 3 = contains, 4 = is
* *
@@ -1439,6 +1441,7 @@ class OperatorQuerySearch implements SearchInterface
* @param int $searchDirection * @param int $searchDirection
* @param int $stringPosition * @param int $stringPosition
* @param bool $prohibited * @param bool $prohibited
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
private function searchAccountNr(string $value, int $searchDirection, int $stringPosition, bool $prohibited = false): void private function searchAccountNr(string $value, int $searchDirection, int $stringPosition, bool $prohibited = false): void
{ {
@@ -1580,6 +1583,7 @@ class OperatorQuerySearch implements SearchInterface
/** /**
* *
* @throws FireflyException * @throws FireflyException
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
private function setExactDateParams(array $range, bool $prohibited = false): void private function setExactDateParams(array $range, bool $prohibited = false): void
{ {
@@ -1654,6 +1658,7 @@ class OperatorQuerySearch implements SearchInterface
/** /**
* *
* @throws FireflyException * @throws FireflyException
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
private function setDateBeforeParams(array $range, bool $prohibited = false): void private function setDateBeforeParams(array $range, bool $prohibited = false): void
{ {
@@ -1700,6 +1705,7 @@ class OperatorQuerySearch implements SearchInterface
/** /**
* *
* @throws FireflyException * @throws FireflyException
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
private function setDateAfterParams(array $range, bool $prohibited = false): void private function setDateAfterParams(array $range, bool $prohibited = false): void
{ {
@@ -1745,6 +1751,7 @@ class OperatorQuerySearch implements SearchInterface
/** /**
* @throws FireflyException * @throws FireflyException
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
private function setExactMetaDateParams(string $field, array $range, bool $prohibited = false): void private function setExactMetaDateParams(string $field, array $range, bool $prohibited = false): void
{ {
@@ -1820,6 +1827,7 @@ class OperatorQuerySearch implements SearchInterface
/** /**
* @throws FireflyException * @throws FireflyException
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
private function setMetaDateBeforeParams(string $field, array $range, bool $prohibited = false): void private function setMetaDateBeforeParams(string $field, array $range, bool $prohibited = false): void
{ {
@@ -1865,6 +1873,7 @@ class OperatorQuerySearch implements SearchInterface
/** /**
* @throws FireflyException * @throws FireflyException
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
private function setMetaDateAfterParams(string $field, array $range, bool $prohibited = false): void private function setMetaDateAfterParams(string $field, array $range, bool $prohibited = false): void
{ {
@@ -1910,6 +1919,7 @@ class OperatorQuerySearch implements SearchInterface
/** /**
* @throws FireflyException * @throws FireflyException
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
private function setExactObjectDateParams(string $field, array $range, bool $prohibited = false): void private function setExactObjectDateParams(string $field, array $range, bool $prohibited = false): void
{ {
@@ -1985,6 +1995,7 @@ class OperatorQuerySearch implements SearchInterface
/** /**
* *
* @throws FireflyException * @throws FireflyException
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
private function setObjectDateBeforeParams(string $field, array $range, bool $prohibited = false): void private function setObjectDateBeforeParams(string $field, array $range, bool $prohibited = false): void
{ {
@@ -2031,6 +2042,7 @@ class OperatorQuerySearch implements SearchInterface
/** /**
* *
* @throws FireflyException * @throws FireflyException
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
private function setObjectDateAfterParams(string $field, array $range, bool $prohibited = false): void private function setObjectDateAfterParams(string $field, array $range, bool $prohibited = false): void
{ {

View File

@@ -449,7 +449,7 @@ class Steam
// but we need to convert each transaction separately because the date difference may // but we need to convert each transaction separately because the date difference may
// incur huge currency changes. // incur huge currency changes.
$converter = new ExchangeRateConverter(); $converter = new ExchangeRateConverter();
foreach ($new as $index => $set) { foreach ($new as $set) {
foreach ($set as $transaction) { foreach ($set as $transaction) {
$date = Carbon::createFromFormat('Y-m-d H:i:s', $transaction['date']); $date = Carbon::createFromFormat('Y-m-d H:i:s', $transaction['date']);
if(false === $date) { if(false === $date) {

View File

@@ -73,7 +73,7 @@ class AppendNotesToDescription implements ActionInterface
// only append if there is something to append // only append if there is something to append
if ('' !== $note->text) { if ('' !== $note->text) {
$before = $object->description; $before = $object->description;
$object->description = trim(sprintf('%s %s', $object->description, (string)$this->clearString($note->text, false))); $object->description = trim(sprintf('%s %s', $object->description, (string)$this->clearString($note->text)));
$object->save(); $object->save();
app('log')->debug(sprintf('Journal description is updated to "%s".', $object->description)); app('log')->debug(sprintf('Journal description is updated to "%s".', $object->description));

View File

@@ -80,7 +80,7 @@ class MoveNotesToDescription implements ActionInterface
} }
$before = $object->description; $before = $object->description;
$beforeNote = $note->text; $beforeNote = $note->text;
$object->description = (string)$this->clearString($note->text, false); $object->description = (string)$this->clearString($note->text);
$object->save(); $object->save();
$note->delete(); $note->delete();

View File

@@ -510,15 +510,11 @@ class SearchRuleEngine implements RuleEngineInterface
*/ */
private function fireGroup(RuleGroup $group): void private function fireGroup(RuleGroup $group): void
{ {
$all = false;
app('log')->debug(sprintf('Going to fire group #%d with %d rule(s)', $group->id, $group->rules->count())); app('log')->debug(sprintf('Going to fire group #%d with %d rule(s)', $group->id, $group->rules->count()));
/** @var Rule $rule */ /** @var Rule $rule */
foreach ($group->rules as $rule) { foreach ($group->rules as $rule) {
app('log')->debug(sprintf('Going to fire rule #%d from group #%d', $rule->id, $group->id)); app('log')->debug(sprintf('Going to fire rule #%d from group #%d', $rule->id, $group->id));
$result = $this->fireRule($rule); $result = $this->fireRule($rule);
if (true === $result) {
$all = true;
}
if (true === $result && true === $rule->stop_processing) { if (true === $result && true === $rule->stop_processing) {
app('log')->debug(sprintf('The rule was triggered and rule->stop_processing = true, so group #%d will stop processing further rules.', $group->id)); app('log')->debug(sprintf('The rule was triggered and rule->stop_processing = true, so group #%d will stop processing further rules.', $group->id));

View File

@@ -382,8 +382,8 @@ class TransactionGroupTransformer extends AbstractTransformer
$destination = $this->getDestinationTransaction($journal); $destination = $this->getDestinationTransaction($journal);
$type = $journal->transactionType->type; $type = $journal->transactionType->type;
$currency = $source->transactionCurrency; $currency = $source->transactionCurrency;
$amount = app('steam')->bcround($this->getAmount($type, $source->amount), $currency->decimal_places ?? 0); $amount = app('steam')->bcround($this->getAmount($source->amount), $currency->decimal_places ?? 0);
$foreignAmount = $this->getForeignAmount($type, null === $source->foreign_amount ? null : $source->foreign_amount); $foreignAmount = $this->getForeignAmount(null === $source->foreign_amount ? null : $source->foreign_amount);
$metaFieldData = $this->groupRepos->getMetaFields($journal->id, $this->metaFields); $metaFieldData = $this->groupRepos->getMetaFields($journal->id, $this->metaFields);
$metaDates = $this->getDates($this->groupRepos->getMetaDateFields($journal->id, $this->metaDateFields)); $metaDates = $this->getDates($this->groupRepos->getMetaDateFields($journal->id, $this->metaDateFields));
$foreignCurrency = $this->getForeignCurrency($source->foreignCurrency); $foreignCurrency = $this->getForeignCurrency($source->foreignCurrency);
@@ -521,23 +521,21 @@ class TransactionGroupTransformer extends AbstractTransformer
} }
/** /**
* @param string $type
* @param string $amount * @param string $amount
* *
* @return string * @return string
*/ */
private function getAmount(string $type, string $amount): string private function getAmount(string $amount): string
{ {
return app('steam')->positive($amount); return app('steam')->positive($amount);
} }
/** /**
* @param string $type
* @param string|null $foreignAmount * @param string|null $foreignAmount
* *
* @return string|null * @return string|null
*/ */
private function getForeignAmount(string $type, ?string $foreignAmount): ?string private function getForeignAmount(?string $foreignAmount): ?string
{ {
$result = null; $result = null;
if (null !== $foreignAmount && '' !== $foreignAmount && bccomp('0', $foreignAmount) !== 0) { if (null !== $foreignAmount && '' !== $foreignAmount && bccomp('0', $foreignAmount) !== 0) {

View File

@@ -65,8 +65,8 @@ class BudgetTransformer extends AbstractTransformer
public function transform(Budget $budget): array public function transform(Budget $budget): array
{ {
//$this->opsRepository->setUser($budget->user); //$this->opsRepository->setUser($budget->user);
$start = $this->parameters->get('start'); //$start = $this->parameters->get('start');
$end = $this->parameters->get('end'); //$end = $this->parameters->get('end');
//$autoBudget = $this->repository->getAutoBudget($budget); //$autoBudget = $this->repository->getAutoBudget($budget);
// $spent = []; // $spent = [];
// if (null !== $start && null !== $end) { // if (null !== $start && null !== $end) {

View File

@@ -58,7 +58,7 @@ class UserGroupTransformer extends AbstractTransformer
/** @var UserGroup $userGroup */ /** @var UserGroup $userGroup */
foreach ($objects as $userGroup) { foreach ($objects as $userGroup) {
$userGroupId = $userGroup->id; $userGroupId = $userGroup->id;
$access = $user->hasRoleInGroup($userGroup, UserRoleEnum::VIEW_MEMBERSHIPS, true, true); $access = $user->hasRoleInGroupOrOwner($userGroup, UserRoleEnum::VIEW_MEMBERSHIPS) || $user->hasRole('owner');
if ($access) { if ($access) {
$groupMemberships = $userGroup->groupMemberships()->get(); $groupMemberships = $userGroup->groupMemberships()->get();
/** @var GroupMembership $groupMembership */ /** @var GroupMembership $groupMembership */

View File

@@ -360,32 +360,47 @@ class User extends Authenticatable
return 'objectguid'; return 'objectguid';
} }
/** /**
* Does the user have role X in group Y? * Does the user have role X in group Y?
* *
* @param UserGroup $userGroup
* @param UserRoleEnum $role
*
* @return bool
*/
public function hasSpecificRoleInGroup(UserGroup $userGroup, UserRoleEnum $role): bool
{
return $this->hasAnyRoleInGroup($userGroup, [$role]);
}
/**
* Does the user have role X in group Y, or is the user the group owner of has full rights to the group?
*
* If $allowOverride is set to true, then the roles FULL or OWNER will also be checked, * If $allowOverride is set to true, then the roles FULL or OWNER will also be checked,
* which means that in most cases the user DOES have access, regardless of the original role submitted in $role. * which means that in most cases the user DOES have access, regardless of the original role submitted in $role.
* *
* @param UserGroup $userGroup * @param UserGroup $userGroup
* @param UserRoleEnum $role * @param UserRoleEnum $role
* @param bool $allowGroupOverride
* @param bool $allowSystemOverride
* *
* @return bool * @return bool
*/ */
public function hasRoleInGroup(UserGroup $userGroup, UserRoleEnum $role, bool $allowGroupOverride = false, bool $allowSystemOverride = false): bool public function hasRoleInGroupOrOwner(UserGroup $userGroup, UserRoleEnum $role): bool
{ {
if ($allowSystemOverride && $this->hasRole('owner')) { $roles = [$role->value, UserRoleEnum::OWNER->value, UserRoleEnum::FULL->value];
app('log')->debug(sprintf('hasRoleInGroup: user "#%d %s" is system owner and allowSystemOverride = true, return true', $this->id, $this->email)); return $this->hasAnyRoleInGroup($userGroup, $roles);
return true;
} }
$roles = [$role->value];
if ($allowGroupOverride) { /**
$roles[] = UserRoleEnum::OWNER->value; * Does the user have role X, Y or Z in group A?
$roles[] = UserRoleEnum::FULL->value; *
} * @param UserGroup $userGroup
app('log')->debug(sprintf('in hasRoleInGroup(%s)', implode(', ', $roles))); * @param array $roles
*
* @return bool
*/
private function hasAnyRoleInGroup(UserGroup $userGroup, array $roles): bool
{
app('log')->debug(sprintf('in hasAnyRoleInGroup(%s)', implode(', ', $roles)));
/** @var Collection $dbRoles */ /** @var Collection $dbRoles */
$dbRoles = UserRole::whereIn('title', $roles)->get(); $dbRoles = UserRole::whereIn('title', $roles)->get();
if (0 === $dbRoles->count()) { if (0 === $dbRoles->count()) {
@@ -433,15 +448,12 @@ class User extends Authenticatable
$userGroup->title $userGroup->title
)); ));
return false; return false;
// // not necessary, should always return true:
// $result = $groupMembership->userRole->title === $role->value;
// app('log')->error(sprintf('Does user #%d "%s" have role "%s" in user group #%d "%s"? %s',
// $this->id, $this->email,
// $role->value, $userGroup->id, $userGroup->title, var_export($result, true)));
// return $result;
} }
/** /**
* This method refers to the "global" role a user can have, outside of any group they may be part of.
*
* @param string $role * @param string $role
* *
* @return bool * @return bool
@@ -684,7 +696,7 @@ class User extends Authenticatable
*/ */
public function userGroup(): BelongsTo public function userGroup(): BelongsTo
{ {
return $this->belongsTo(UserGroup::class,); return $this->belongsTo(UserGroup::class, );
} }
/** /**

View File

@@ -127,7 +127,7 @@ trait DepositValidation
// if there is an iban, it can only be in use by a valid source type, or we will fail. // if there is an iban, it can only be in use by a valid source type, or we will fail.
if (null !== $accountIban && '' !== $accountIban) { if (null !== $accountIban && '' !== $accountIban) {
app('log')->debug('Check if there is not already an account with this IBAN'); app('log')->debug('Check if there is not already another account with this IBAN');
$existing = $this->findExistingAccount($validTypes, ['iban' => $accountIban], true); $existing = $this->findExistingAccount($validTypes, ['iban' => $accountIban], true);
if (null !== $existing) { if (null !== $existing) {
$this->sourceError = (string)trans('validation.deposit_src_iban_exists'); $this->sourceError = (string)trans('validation.deposit_src_iban_exists');

View File

@@ -265,6 +265,7 @@ class AccountValidator
* @param bool $inverse * @param bool $inverse
* *
* @return Account|null * @return Account|null
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
*/ */
protected function findExistingAccount(array $validTypes, array $data, bool $inverse = false): ?Account protected function findExistingAccount(array $validTypes, array $data, bool $inverse = false): ?Account
{ {

View File

@@ -563,7 +563,7 @@ trait TransactionValidation
return; return;
} }
$transactions = $this->getTransactionsArray($validator); $transactions = $this->getTransactionsArray($validator);
foreach ($transactions as $key => $value) { foreach (array_keys($transactions) as $key) {
if (!is_int($key)) { if (!is_int($key)) {
$validator->errors()->add('transactions.0.description', (string)trans('validation.at_least_one_transaction')); $validator->errors()->add('transactions.0.description', (string)trans('validation.at_least_one_transaction'));
app('log')->debug('Added error: at_least_one_transaction.'); app('log')->debug('Added error: at_least_one_transaction.');

View File

@@ -54,7 +54,7 @@ class CreateSupportTables extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -45,6 +45,7 @@ class CreateUsersTable extends Migration
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
* *
*/ */
public function up(): void public function up(): void

View File

@@ -72,6 +72,7 @@ class CreateMainTables extends Migration
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
* *
*/ */
public function up(): void public function up(): void

View File

@@ -33,15 +33,12 @@ class ChangesFor3101 extends Migration
/** /**
* Reverse the migrations. * Reverse the migrations.
*/ */
public function down(): void public function down(): void {}
{
}
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
* *
*/ */
public function up(): void public function up(): void {}
{
}
} }

View File

@@ -38,12 +38,11 @@ class FixNullables extends Migration
/** /**
* Reverse the migrations. * Reverse the migrations.
*/ */
public function down(): void public function down(): void {}
{
}
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
* *
*/ */
public function up(): void public function up(): void

View File

@@ -55,6 +55,7 @@ class ExpandTransactionsTable extends Migration
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
* *
*/ */
public function up(): void public function up(): void

View File

@@ -42,7 +42,7 @@ class ChangesForV410 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -54,6 +54,7 @@ class ChangesForV420 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
* *
*/ */
public function up(): void public function up(): void

View File

@@ -42,7 +42,7 @@ class ChangesForV430 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -112,7 +112,7 @@ class ChangesForV431 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -60,7 +60,7 @@ class ChangesForV440 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -84,7 +84,7 @@ class ChangesForV450 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -44,7 +44,7 @@ class ChangesForV470 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -56,7 +56,7 @@ class ChangesForV470a extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -44,6 +44,7 @@ class CreateOauthAuthCodesTable extends Migration
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -44,6 +44,7 @@ class CreateOauthAccessTokensTable extends Migration
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -44,6 +44,7 @@ class CreateOauthRefreshTokensTable extends Migration
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -44,6 +44,7 @@ class CreateOauthClientsTable extends Migration
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -44,6 +44,7 @@ class CreateOauthPersonalAccessClientsTable extends Migration
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -74,6 +74,7 @@ class ChangesForV472 extends Migration
* Run the migrations. * Run the migrations.
* *
* @return void * @return void
* @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -77,7 +77,7 @@ class ChangesForV473 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -36,16 +36,13 @@ class ChangesForV474 extends Migration
* *
* @return void * @return void
*/ */
public function down(): void public function down(): void {}
{
}
/** /**
* Run the migrations. * Run the migrations.
* *
* @return void * @return void
* @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void {}
{
}
} }

View File

@@ -49,7 +49,7 @@ class ChangesForV475 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -63,7 +63,7 @@ class ChangesForV477 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -58,7 +58,7 @@ class ChangesForV479 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -47,7 +47,7 @@ class ChangesForV4710 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -46,7 +46,7 @@ class ChangesForV4711 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -45,7 +45,7 @@ class ChangesForV4712 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -58,7 +58,7 @@ class FixLdapConfiguration extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -113,7 +113,7 @@ class ChangesForV480 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -46,7 +46,7 @@ class MakeLocationsTable extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -45,7 +45,7 @@ class ChangesForV520 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -46,7 +46,7 @@ class ChangesForV530 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -59,7 +59,7 @@ class ChangesForV530a extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -100,7 +100,7 @@ class ChangesForV540 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -124,7 +124,7 @@ class ChangesForV550 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -62,7 +62,7 @@ class ChangesForV550b2 extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -52,6 +52,7 @@ class AddLdapColumnsToUsersTable extends Migration
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -44,7 +44,7 @@ class ExtendCurrencyInfo extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -42,7 +42,7 @@ class DropTeleTable extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -107,7 +107,7 @@ class UserGroups extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -44,7 +44,7 @@ class CreateLocalPersonalAccessTokensTable extends Migration
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -34,7 +34,7 @@ use Illuminate\Support\Facades\Schema;
return new class () extends Migration { return new class () extends Migration {
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -30,7 +30,7 @@ use Illuminate\Support\Facades\Schema;
return new class () extends Migration { return new class () extends Migration {
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -30,7 +30,7 @@ use Illuminate\Support\Facades\Schema;
return new class () extends Migration { return new class () extends Migration {
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -30,7 +30,7 @@ use Illuminate\Support\Facades\Schema;
return new class () extends Migration { return new class () extends Migration {
/** /**
* Run the migrations. * Run the migrations.
* * @SuppressWarnings(PHPMD.ShortMethodName)
* @return void * @return void
*/ */
public function up(): void public function up(): void

View File

@@ -35,6 +35,7 @@ use Illuminate\Support\Facades\Schema;
return new class () extends Migration { return new class () extends Migration {
/** /**
* Run the migrations. * Run the migrations.
* @SuppressWarnings(PHPMD.ShortMethodName)
*/ */
public function up(): void public function up(): void
{ {

View File

@@ -30,6 +30,7 @@ use Illuminate\Support\Facades\Schema;
return new class () extends Migration { return new class () extends Migration {
/** /**
* @SuppressWarnings(PHPMD.ShortMethodName)
* Run the migrations. * Run the migrations.
*/ */
public function up(): void public function up(): void

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -863,7 +863,10 @@ export default {
// console.log('Length == 1, set date to today.'); // console.log('Length == 1, set date to today.');
// set first date. // set first date.
let today = new Date(); let today = new Date();
this.transactions[0].date = today.getFullYear() + '-' + ("0" + (today.getMonth() + 1)).slice(-2) + '-' + ("0" + today.getDate()).slice(-2); this.transactions[0].date = today.getFullYear() + '-' + ("0" + (today.getMonth() + 1)).slice(-2) + '-' + ("0" + today.getDate()).slice(-2)
+ 'T00:00';
//console.log(this.transactions[0].date);
// call for extra clear thing: // call for extra clear thing:
// this.clearSource(0); // this.clearSource(0);
//this.clearDestination(0); //this.clearDestination(0);

View File

@@ -451,11 +451,10 @@ export default {
if (typeof window.expectedSourceTypes === 'undefined') { if (typeof window.expectedSourceTypes === 'undefined') {
console.error('window.expectedSourceTypes is unexpectedly empty.') console.error('window.expectedSourceTypes is unexpectedly empty.')
} }
this.transactions.push({ this.transactions.push({
transaction_journal_id: transaction.transaction_journal_id, transaction_journal_id: transaction.transaction_journal_id,
description: transaction.description, description: transaction.description,
date: transaction.date.substr(0, 10), date: transaction.date.substring(0, 16),
amount: this.roundNumber(this.positiveAmount(transaction.amount), transaction.currency_decimal_places), amount: this.roundNumber(this.positiveAmount(transaction.amount), transaction.currency_decimal_places),
category: transaction.category_name, category: transaction.category_name,
errors: { errors: {

View File

@@ -200,7 +200,7 @@ export default {
this.getCurrencies(1); this.getCurrencies(1);
}, },
getCurrencies: function(page) { getCurrencies: function(page) {
console.log('loadCurrencies on page ' + page); // console.log('loadCurrencies on page ' + page);
let url = document.getElementsByTagName('base')[0].href + "api/v1/currencies?page=" + page; let url = document.getElementsByTagName('base')[0].href + "api/v1/currencies?page=" + page;
axios.get(url, {}).then((res) => { axios.get(url, {}).then((res) => {

View File

@@ -32,8 +32,7 @@
autocomplete="off" autocomplete="off"
class="form-control" class="form-control"
name="date[]" name="date[]"
type="datetime-local"
type="date"
v-bind:placeholder="$t('firefly.date')" v-bind:placeholder="$t('firefly.date')"
v-bind:title="$t('firefly.date')" @input="handleInput" v-bind:title="$t('firefly.date')" @input="handleInput"
> >