mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-08-29 17:25:20 +00:00
Compare commits
84 Commits
develop-20
...
develop-20
Author | SHA1 | Date | |
---|---|---|---|
|
ac3f6557de | ||
|
b0a909150c | ||
|
913f163fe4 | ||
|
3126b07b33 | ||
|
08ca90cf75 | ||
|
540ac2a277 | ||
|
ed80bed066 | ||
|
41d2541c6a | ||
|
5dedf63498 | ||
|
09bc4f41d2 | ||
|
cebf0b5c57 | ||
|
1632a57e3e | ||
|
744c4be7d1 | ||
|
bd99ef3eff | ||
|
8a86f13a5d | ||
|
7418b2f0ee | ||
|
a0e9de9312 | ||
|
7e23a6f5e8 | ||
|
44589f8744 | ||
|
d24531030f | ||
|
25bdab1346 | ||
|
41af1c863a | ||
|
76b3b18cfb | ||
|
e6fb2958a9 | ||
|
15b75b322f | ||
|
86149d1032 | ||
|
ded142cd9e | ||
|
7923eb9ec9 | ||
|
132553c108 | ||
|
c2269fc9a4 | ||
|
aed30d1499 | ||
|
84a1a876e1 | ||
|
dc675707f9 | ||
|
d5667c7ef6 | ||
|
cba1213dd1 | ||
|
7219c90957 | ||
|
af13bd991e | ||
|
48e548eb52 | ||
|
1a19e27f0e | ||
|
0cbd22426d | ||
|
d5e52e99e0 | ||
|
f52978e71f | ||
|
3a3358124d | ||
|
929808c633 | ||
|
a78df574f3 | ||
|
875cad16b6 | ||
|
7bc30192ca | ||
|
a1a8968e98 | ||
|
6abb74a038 | ||
|
2d7d05e985 | ||
|
d426e09474 | ||
|
72d55cb953 | ||
|
73ad865581 | ||
|
fefb52beb7 | ||
|
abd503543b | ||
|
e3eb550581 | ||
|
46b780758e | ||
|
b2c3ee9779 | ||
|
dca899bcee | ||
|
9667b8a948 | ||
|
661f225fe7 | ||
|
4c6fe0c8de | ||
|
78f457950e | ||
|
d831cc8df2 | ||
|
7056406afc | ||
|
c85cfcf3e6 | ||
|
db06d06789 | ||
|
a28b990cd1 | ||
|
dab4bfa7a6 | ||
|
6575236f2b | ||
|
ad582c8806 | ||
|
452e9cb953 | ||
|
a64f137b39 | ||
|
c067d6aab0 | ||
|
119b9920a6 | ||
|
99ed54fce8 | ||
|
2ea57cdd38 | ||
|
bb94bdfdaf | ||
|
4de8398cc2 | ||
|
e6e8cd5d8a | ||
|
0b200309ba | ||
|
a184548912 | ||
|
c987191212 | ||
|
7009b444d9 |
268
.ci/php-cs-fixer/composer.lock
generated
268
.ci/php-cs-fixer/composer.lock
generated
@@ -72,16 +72,16 @@
|
||||
},
|
||||
{
|
||||
"name": "composer/pcre",
|
||||
"version": "3.1.3",
|
||||
"version": "3.1.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/pcre.git",
|
||||
"reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8"
|
||||
"reference": "04229f163664973f68f38f6f73d917799168ef24"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8",
|
||||
"reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8",
|
||||
"url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24",
|
||||
"reference": "04229f163664973f68f38f6f73d917799168ef24",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -123,7 +123,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/composer/pcre/issues",
|
||||
"source": "https://github.com/composer/pcre/tree/3.1.3"
|
||||
"source": "https://github.com/composer/pcre/tree/3.1.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -139,20 +139,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-19T10:26:25+00:00"
|
||||
"time": "2024-05-27T13:40:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "composer/semver",
|
||||
"version": "3.4.0",
|
||||
"version": "3.4.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/semver.git",
|
||||
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
|
||||
"reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
|
||||
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
|
||||
"url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6",
|
||||
"reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -204,7 +204,7 @@
|
||||
"support": {
|
||||
"irc": "ircs://irc.libera.chat:6697/composer",
|
||||
"issues": "https://github.com/composer/semver/issues",
|
||||
"source": "https://github.com/composer/semver/tree/3.4.0"
|
||||
"source": "https://github.com/composer/semver/tree/3.4.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -220,7 +220,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-08-31T09:50:34+00:00"
|
||||
"time": "2024-07-12T11:35:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "composer/xdebug-handler",
|
||||
@@ -398,16 +398,16 @@
|
||||
},
|
||||
{
|
||||
"name": "friendsofphp/php-cs-fixer",
|
||||
"version": "v3.57.2",
|
||||
"version": "v3.59.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
|
||||
"reference": "22f7f3145606df92b02fb1bd22c30abfce956d3c"
|
||||
"reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/22f7f3145606df92b02fb1bd22c30abfce956d3c",
|
||||
"reference": "22f7f3145606df92b02fb1bd22c30abfce956d3c",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/30ba9ecc2b0e5205e578fe29973c15653d9bfd29",
|
||||
"reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -437,16 +437,16 @@
|
||||
"symfony/stopwatch": "^5.4 || ^6.0 || ^7.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"facile-it/paraunit": "^1.3 || ^2.0",
|
||||
"infection/infection": "^0.27.11",
|
||||
"facile-it/paraunit": "^1.3 || ^2.3",
|
||||
"infection/infection": "^0.29.5",
|
||||
"justinrainbow/json-schema": "^5.2",
|
||||
"keradus/cli-executor": "^2.1",
|
||||
"mikey179/vfsstream": "^1.6.11",
|
||||
"php-coveralls/php-coveralls": "^2.7",
|
||||
"php-cs-fixer/accessible-object": "^1.1",
|
||||
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4",
|
||||
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4",
|
||||
"phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2",
|
||||
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5",
|
||||
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5",
|
||||
"phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2",
|
||||
"symfony/var-dumper": "^5.4 || ^6.0 || ^7.0",
|
||||
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
|
||||
},
|
||||
@@ -461,7 +461,10 @@
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PhpCsFixer\\": "src/"
|
||||
}
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"src/Fixer/Internal/*"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
@@ -486,7 +489,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
|
||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.57.2"
|
||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.59.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -494,7 +497,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-05-20T20:41:57+00:00"
|
||||
"time": "2024-06-16T14:17:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/container",
|
||||
@@ -802,28 +805,28 @@
|
||||
},
|
||||
{
|
||||
"name": "react/dns",
|
||||
"version": "v1.12.0",
|
||||
"version": "v1.13.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/reactphp/dns.git",
|
||||
"reference": "c134600642fa615b46b41237ef243daa65bb64ec"
|
||||
"reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/reactphp/dns/zipball/c134600642fa615b46b41237ef243daa65bb64ec",
|
||||
"reference": "c134600642fa615b46b41237ef243daa65bb64ec",
|
||||
"url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5",
|
||||
"reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0",
|
||||
"react/cache": "^1.0 || ^0.6 || ^0.5",
|
||||
"react/event-loop": "^1.2",
|
||||
"react/promise": "^3.0 || ^2.7 || ^1.2.1"
|
||||
"react/promise": "^3.2 || ^2.7 || ^1.2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
|
||||
"react/async": "^4 || ^3 || ^2",
|
||||
"react/promise-timer": "^1.9"
|
||||
"react/async": "^4.3 || ^3 || ^2",
|
||||
"react/promise-timer": "^1.11"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -866,7 +869,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/reactphp/dns/issues",
|
||||
"source": "https://github.com/reactphp/dns/tree/v1.12.0"
|
||||
"source": "https://github.com/reactphp/dns/tree/v1.13.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -874,7 +877,7 @@
|
||||
"type": "open_collective"
|
||||
}
|
||||
],
|
||||
"time": "2023-11-29T12:41:06+00:00"
|
||||
"time": "2024-06-13T14:18:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "react/event-loop",
|
||||
@@ -1103,16 +1106,16 @@
|
||||
},
|
||||
{
|
||||
"name": "react/stream",
|
||||
"version": "v1.3.0",
|
||||
"version": "v1.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/reactphp/stream.git",
|
||||
"reference": "6fbc9672905c7d5a885f2da2fc696f65840f4a66"
|
||||
"reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/reactphp/stream/zipball/6fbc9672905c7d5a885f2da2fc696f65840f4a66",
|
||||
"reference": "6fbc9672905c7d5a885f2da2fc696f65840f4a66",
|
||||
"url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d",
|
||||
"reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1122,7 +1125,7 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"clue/stream-filter": "~1.2",
|
||||
"phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35"
|
||||
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -1169,7 +1172,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/reactphp/stream/issues",
|
||||
"source": "https://github.com/reactphp/stream/tree/v1.3.0"
|
||||
"source": "https://github.com/reactphp/stream/tree/v1.4.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1177,20 +1180,20 @@
|
||||
"type": "open_collective"
|
||||
}
|
||||
],
|
||||
"time": "2023-06-16T10:52:11+00:00"
|
||||
"time": "2024-06-11T12:45:25+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/diff",
|
||||
"version": "6.0.1",
|
||||
"version": "6.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/diff.git",
|
||||
"reference": "ab83243ecc233de5655b76f577711de9f842e712"
|
||||
"reference": "b4ccd857127db5d41a5b676f24b51371d76d8544"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ab83243ecc233de5655b76f577711de9f842e712",
|
||||
"reference": "ab83243ecc233de5655b76f577711de9f842e712",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544",
|
||||
"reference": "b4ccd857127db5d41a5b676f24b51371d76d8544",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1236,7 +1239,7 @@
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/diff/issues",
|
||||
"security": "https://github.com/sebastianbergmann/diff/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/diff/tree/6.0.1"
|
||||
"source": "https://github.com/sebastianbergmann/diff/tree/6.0.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1244,20 +1247,20 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-02T07:30:33+00:00"
|
||||
"time": "2024-07-03T04:53:05+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v7.0.7",
|
||||
"version": "v7.1.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "c981e0e9380ce9f146416bde3150c79197ce9986"
|
||||
"reference": "0aa29ca177f432ab68533432db0de059f39c92ae"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/c981e0e9380ce9f146416bde3150c79197ce9986",
|
||||
"reference": "c981e0e9380ce9f146416bde3150c79197ce9986",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/0aa29ca177f432ab68533432db0de059f39c92ae",
|
||||
"reference": "0aa29ca177f432ab68533432db0de059f39c92ae",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1321,7 +1324,7 @@
|
||||
"terminal"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/console/tree/v7.0.7"
|
||||
"source": "https://github.com/symfony/console/tree/v7.1.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1337,7 +1340,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
"time": "2024-06-28T10:03:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
@@ -1408,16 +1411,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher",
|
||||
"version": "v7.0.7",
|
||||
"version": "v7.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/event-dispatcher.git",
|
||||
"reference": "db2a7fab994d67d92356bb39c367db115d9d30f9"
|
||||
"reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/db2a7fab994d67d92356bb39c367db115d9d30f9",
|
||||
"reference": "db2a7fab994d67d92356bb39c367db115d9d30f9",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7",
|
||||
"reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1468,7 +1471,7 @@
|
||||
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/event-dispatcher/tree/v7.0.7"
|
||||
"source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1484,7 +1487,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
"time": "2024-05-31T14:57:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher-contracts",
|
||||
@@ -1564,22 +1567,24 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/filesystem",
|
||||
"version": "v7.0.7",
|
||||
"version": "v7.1.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/filesystem.git",
|
||||
"reference": "cc168be6fbdcdf3401f50ae863ee3818ed4338f5"
|
||||
"reference": "92a91985250c251de9b947a14bb2c9390b1a562c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/cc168be6fbdcdf3401f50ae863ee3818ed4338f5",
|
||||
"reference": "cc168be6fbdcdf3401f50ae863ee3818ed4338f5",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/92a91985250c251de9b947a14bb2c9390b1a562c",
|
||||
"reference": "92a91985250c251de9b947a14bb2c9390b1a562c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.2",
|
||||
"symfony/polyfill-ctype": "~1.8",
|
||||
"symfony/polyfill-mbstring": "~1.8",
|
||||
"symfony/polyfill-mbstring": "~1.8"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/process": "^6.4|^7.0"
|
||||
},
|
||||
"type": "library",
|
||||
@@ -1608,7 +1613,7 @@
|
||||
"description": "Provides basic utilities for the filesystem",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/filesystem/tree/v7.0.7"
|
||||
"source": "https://github.com/symfony/filesystem/tree/v7.1.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1624,20 +1629,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
"time": "2024-06-28T10:03:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v7.0.7",
|
||||
"version": "v7.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "4d58f0f4fe95a30d7b538d71197135483560b97c"
|
||||
"reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/4d58f0f4fe95a30d7b538d71197135483560b97c",
|
||||
"reference": "4d58f0f4fe95a30d7b538d71197135483560b97c",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6",
|
||||
"reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1672,7 +1677,7 @@
|
||||
"description": "Finds files and directories via an intuitive fluent interface",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/finder/tree/v7.0.7"
|
||||
"source": "https://github.com/symfony/finder/tree/v7.1.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1688,20 +1693,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-28T11:44:19+00:00"
|
||||
"time": "2024-05-31T14:57:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/options-resolver",
|
||||
"version": "v7.0.7",
|
||||
"version": "v7.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/options-resolver.git",
|
||||
"reference": "23cc173858776ad451e31f053b1c9f47840b2cfa"
|
||||
"reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/23cc173858776ad451e31f053b1c9f47840b2cfa",
|
||||
"reference": "23cc173858776ad451e31f053b1c9f47840b2cfa",
|
||||
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55",
|
||||
"reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1739,7 +1744,7 @@
|
||||
"options"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/options-resolver/tree/v7.0.7"
|
||||
"source": "https://github.com/symfony/options-resolver/tree/v7.1.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1755,20 +1760,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
"time": "2024-05-31T14:57:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
"version": "v1.29.0",
|
||||
"version": "v1.30.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||
"reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4"
|
||||
"reference": "0424dff1c58f028c451efff2045f5d92410bd540"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4",
|
||||
"reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540",
|
||||
"reference": "0424dff1c58f028c451efff2045f5d92410bd540",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1818,7 +1823,7 @@
|
||||
"portable"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0"
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1834,20 +1839,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-29T20:11:03+00:00"
|
||||
"time": "2024-05-31T15:07:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-grapheme",
|
||||
"version": "v1.29.0",
|
||||
"version": "v1.30.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
|
||||
"reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f"
|
||||
"reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f",
|
||||
"reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a",
|
||||
"reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1896,7 +1901,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1912,20 +1917,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-29T20:11:03+00:00"
|
||||
"time": "2024-05-31T15:07:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-normalizer",
|
||||
"version": "v1.29.0",
|
||||
"version": "v1.30.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||
"reference": "bc45c394692b948b4d383a08d7753968bed9a83d"
|
||||
"reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d",
|
||||
"reference": "bc45c394692b948b4d383a08d7753968bed9a83d",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb",
|
||||
"reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1977,7 +1982,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1993,20 +1998,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-29T20:11:03+00:00"
|
||||
"time": "2024-05-31T15:07:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.29.0",
|
||||
"version": "v1.30.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
|
||||
"reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
|
||||
"reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
|
||||
"reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2057,7 +2062,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0"
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2073,20 +2078,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-29T20:11:03+00:00"
|
||||
"time": "2024-06-19T12:30:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.29.0",
|
||||
"version": "v1.30.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
|
||||
"reference": "77fa7995ac1b21ab60769b7323d600a991a90433"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
|
||||
"reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433",
|
||||
"reference": "77fa7995ac1b21ab60769b7323d600a991a90433",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2137,7 +2142,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0"
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2153,20 +2158,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-29T20:11:03+00:00"
|
||||
"time": "2024-05-31T15:07:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php81",
|
||||
"version": "v1.29.0",
|
||||
"version": "v1.30.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php81.git",
|
||||
"reference": "c565ad1e63f30e7477fc40738343c62b40bc672d"
|
||||
"reference": "3fb075789fb91f9ad9af537c4012d523085bd5af"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d",
|
||||
"reference": "c565ad1e63f30e7477fc40738343c62b40bc672d",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af",
|
||||
"reference": "3fb075789fb91f9ad9af537c4012d523085bd5af",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2213,7 +2218,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0"
|
||||
"source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2229,20 +2234,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-29T20:11:03+00:00"
|
||||
"time": "2024-06-19T12:30:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v7.0.7",
|
||||
"version": "v7.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "3839e56b94dd1dbd13235d27504e66baf23faba0"
|
||||
"reference": "febf90124323a093c7ee06fdb30e765ca3c20028"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/3839e56b94dd1dbd13235d27504e66baf23faba0",
|
||||
"reference": "3839e56b94dd1dbd13235d27504e66baf23faba0",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028",
|
||||
"reference": "febf90124323a093c7ee06fdb30e765ca3c20028",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2274,7 +2279,7 @@
|
||||
"description": "Executes commands in sub-processes",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/process/tree/v7.0.7"
|
||||
"source": "https://github.com/symfony/process/tree/v7.1.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2290,7 +2295,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
"time": "2024-05-31T14:57:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/service-contracts",
|
||||
@@ -2377,16 +2382,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/stopwatch",
|
||||
"version": "v7.0.7",
|
||||
"version": "v7.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/stopwatch.git",
|
||||
"reference": "41a7a24aa1dc82adf46a06bc292d1923acfe6b84"
|
||||
"reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/41a7a24aa1dc82adf46a06bc292d1923acfe6b84",
|
||||
"reference": "41a7a24aa1dc82adf46a06bc292d1923acfe6b84",
|
||||
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d",
|
||||
"reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2419,7 +2424,7 @@
|
||||
"description": "Provides a way to profile code",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/stopwatch/tree/v7.0.7"
|
||||
"source": "https://github.com/symfony/stopwatch/tree/v7.1.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2435,20 +2440,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
"time": "2024-05-31T14:57:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/string",
|
||||
"version": "v7.0.7",
|
||||
"version": "v7.1.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/string.git",
|
||||
"reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63"
|
||||
"reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/e405b5424dc2528e02e31ba26b83a79fd4eb8f63",
|
||||
"reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/14221089ac66cf82e3cf3d1c1da65de305587ff8",
|
||||
"reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2462,6 +2467,7 @@
|
||||
"symfony/translation-contracts": "<2.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/emoji": "^7.1",
|
||||
"symfony/error-handler": "^6.4|^7.0",
|
||||
"symfony/http-client": "^6.4|^7.0",
|
||||
"symfony/intl": "^6.4|^7.0",
|
||||
@@ -2505,7 +2511,7 @@
|
||||
"utf8"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/string/tree/v7.0.7"
|
||||
"source": "https://github.com/symfony/string/tree/v7.1.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2521,7 +2527,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
"time": "2024-06-28T09:27:18+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
6
.github/workflows/release.yml
vendored
6
.github/workflows/release.yml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
required: true
|
||||
default: 'develop'
|
||||
schedule:
|
||||
- cron: '0 3 * * MON,THU'
|
||||
- cron: '0 3 * * MON'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
php-version: '8.3'
|
||||
extensions: mbstring, intl, zip, bcmath
|
||||
- name: crowdin action
|
||||
uses: crowdin/github-action@v1
|
||||
uses: crowdin/github-action@v2
|
||||
with:
|
||||
upload_sources: true
|
||||
download_translations: true
|
||||
@@ -125,9 +125,9 @@ jobs:
|
||||
- name: Build JS
|
||||
run: |
|
||||
npm install
|
||||
npm update
|
||||
npm run prod --workspace=v1
|
||||
npm run build --workspace=v2
|
||||
npm update
|
||||
- name: Run CI
|
||||
run: |
|
||||
rm -rf vendor composer.lock
|
||||
|
@@ -4,6 +4,7 @@ Over time, many people have contributed to Firefly III. Their efforts are not al
|
||||
Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution.
|
||||
|
||||
## 2024
|
||||
- Steve Wasiura
|
||||
- imlonghao
|
||||
- Rahman Yusuf
|
||||
- Michael Thomas
|
||||
|
@@ -58,7 +58,7 @@ class StoreRequest extends FormRequest
|
||||
$models = config('firefly.valid_attachment_models');
|
||||
$models = array_map(
|
||||
static function (string $className) {
|
||||
return str_replace('FireflyIII\\Models\\', '', $className);
|
||||
return str_replace('FireflyIII\Models\\', '', $className);
|
||||
},
|
||||
$models
|
||||
);
|
||||
|
@@ -60,7 +60,7 @@ class UpdateRequest extends FormRequest
|
||||
$models = config('firefly.valid_attachment_models');
|
||||
$models = array_map(
|
||||
static function (string $className) {
|
||||
return str_replace('FireflyIII\\Models\\', '', $className);
|
||||
return str_replace('FireflyIII\Models\\', '', $className);
|
||||
},
|
||||
$models
|
||||
);
|
||||
|
@@ -115,7 +115,7 @@ class UpdateGroupInformation extends Command
|
||||
return;
|
||||
}
|
||||
if (0 !== $result) {
|
||||
$this->friendlyPositive(sprintf('User #%d: Moved %d %s objects to the correct group.', $user->id, $result, str_replace('FireflyIII\\Models\\', '', $className)));
|
||||
$this->friendlyPositive(sprintf('User #%d: Moved %d %s objects to the correct group.', $user->id, $result, str_replace('FireflyIII\Models\\', '', $className)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -111,7 +111,7 @@ class ForceDecimalSize extends Command
|
||||
{
|
||||
// switch stuff based on database connection:
|
||||
$this->operator = 'REGEXP';
|
||||
$this->regularExpression = '\'\\\\.[\\\\d]{%d}[1-9]+\'';
|
||||
$this->regularExpression = '\'\\\.[\\\d]{%d}[1-9]+\'';
|
||||
$this->cast = 'CHAR';
|
||||
if ('pgsql' === config('database.default')) {
|
||||
$this->operator = 'SIMILAR TO';
|
||||
@@ -119,7 +119,7 @@ class ForceDecimalSize extends Command
|
||||
$this->cast = 'TEXT';
|
||||
}
|
||||
if ('sqlite' === config('database.default')) {
|
||||
$this->regularExpression = '"\\.[\d]{%d}[1-9]+"';
|
||||
$this->regularExpression = '"\.[\d]{%d}[1-9]+"';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -307,7 +307,7 @@ class ForceDecimalSize extends Command
|
||||
/** @var string $field */
|
||||
foreach ($fields as $field) {
|
||||
$value = $item->{$field};
|
||||
if (null === $value) {
|
||||
if (null === $value || '' === $value) {
|
||||
continue;
|
||||
}
|
||||
// fix $field by rounding it down correctly.
|
||||
|
@@ -33,9 +33,8 @@ use Illuminate\Console\Command;
|
||||
class CorrectAccountBalance extends Command
|
||||
{
|
||||
use ShowsFriendlyMessages;
|
||||
public const string CONFIG_NAME = '620_correct_balances';
|
||||
public const string CONFIG_NAME = '610_correct_balances';
|
||||
protected $description = 'Recalculate all account balance amounts';
|
||||
|
||||
protected $signature = 'firefly-iii:correct-account-balance {--F|force : Force the execution of this command.}';
|
||||
|
||||
public function handle(): int
|
||||
|
@@ -43,7 +43,7 @@ class AttachmentFactory
|
||||
public function create(array $data): ?Attachment
|
||||
{
|
||||
// append if necessary.
|
||||
$model = !str_contains($data['attachable_type'], 'FireflyIII') ? sprintf('FireflyIII\\Models\\%s', $data['attachable_type'])
|
||||
$model = !str_contains($data['attachable_type'], 'FireflyIII') ? sprintf('FireflyIII\Models\%s', $data['attachable_type'])
|
||||
: $data['attachable_type'];
|
||||
|
||||
// get journal instead of transaction.
|
||||
|
@@ -717,7 +717,7 @@ trait MetaCollection
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'internal_reference');
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s%%', $internalReference));
|
||||
$this->query->where('journal_meta.data', '=', $internalReference);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
@@ -121,7 +121,7 @@ class LoginController extends Controller
|
||||
|
||||
// Copied directly from AuthenticatesUsers, but with logging added:
|
||||
// If the login attempt was unsuccessful we will increment the number of attempts
|
||||
// to login and redirect the user back to the login form. Of course, when this
|
||||
// to log in and redirect the user back to the login form. Of course, when this
|
||||
// user surpasses their maximum number of attempts they will get locked out.
|
||||
$this->incrementLoginAttempts($request);
|
||||
Log::channel('audit')->warning(sprintf('Login failed. Attempt for user "%s" failed.', $request->get($this->username())));
|
||||
@@ -233,7 +233,7 @@ class LoginController extends Controller
|
||||
$storeInCookie = config('google2fa.store_in_cookie', false);
|
||||
if (false !== $storeInCookie) {
|
||||
$cookieName = config('google2fa.cookie_name', 'google2fa_token');
|
||||
request()->cookies->set($cookieName, 'invalid');
|
||||
\Cookie::queue(\Cookie::make($cookieName, 'invalid-'.time()));
|
||||
}
|
||||
$usernameField = $this->username();
|
||||
|
||||
|
@@ -185,7 +185,7 @@ class BudgetLimitController extends Controller
|
||||
$array['amount_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $limit['amount']);
|
||||
$array['days_left'] = (string)$this->activeDaysLeft($start, $end);
|
||||
// left per day:
|
||||
$array['left_per_day'] = bcdiv(bcadd($array['spent'], $array['amount']), $array['days_left']);
|
||||
$array['left_per_day'] = 0 === bccomp('0', $array['days_left']) ? bcadd($array['spent'], $array['amount']) : bcdiv(bcadd($array['spent'], $array['amount']), $array['days_left']);
|
||||
|
||||
// left per day formatted.
|
||||
$array['left_per_day_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $array['left_per_day']);
|
||||
|
@@ -81,6 +81,8 @@ class ReconcileController extends Controller
|
||||
if ($end->lt($start)) {
|
||||
[$start, $end] = [$end, $start];
|
||||
}
|
||||
$end->endOfDay();
|
||||
$start->startOfDay();
|
||||
|
||||
$route = route('accounts.reconcile.submit', [$account->id, $start->format('Ymd'), $end->format('Ymd')]);
|
||||
$selectedIds = $request->get('journals') ?? [];
|
||||
|
@@ -81,7 +81,12 @@ class RecurrenceController extends Controller
|
||||
$skip = $skip < 0 || $skip > 31 ? 0 : $skip;
|
||||
$weekend = $weekend < 1 || $weekend > 4 ? 1 : $weekend;
|
||||
|
||||
if (null === $start || null === $end || null === $firstDate || null === $endDate) {
|
||||
if (null === $endDate) {
|
||||
// safety catch:
|
||||
$endDate = now()->addYear();
|
||||
}
|
||||
|
||||
if (null === $start || null === $end || null === $firstDate) {
|
||||
return response()->json();
|
||||
}
|
||||
|
||||
|
@@ -120,7 +120,7 @@ class PreferencesController extends Controller
|
||||
// list of locales also has "equal" which makes it equal to whatever the language is.
|
||||
|
||||
try {
|
||||
$locales = json_decode((string)file_get_contents(resource_path(sprintf('lang/%s/locales.json', $language))), true, 512, JSON_THROW_ON_ERROR);
|
||||
$locales = json_decode((string)file_get_contents(resource_path(sprintf('locales/%s/locales.json', $language))), true, 512, JSON_THROW_ON_ERROR);
|
||||
} catch (\JsonException $e) {
|
||||
app('log')->error($e->getMessage());
|
||||
$locales = [];
|
||||
|
@@ -84,6 +84,7 @@ class ShowController extends Controller
|
||||
$transformer->setParameters(new ParameterBag());
|
||||
|
||||
$array = $transformer->transform($recurrence);
|
||||
|
||||
$groups = $this->recurring->getTransactions($recurrence);
|
||||
$today = today(config('app.timezone'));
|
||||
$array['repeat_until'] = null !== $array['repeat_until'] ? new Carbon($array['repeat_until']) : null;
|
||||
|
@@ -23,7 +23,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Http\Controllers\Transaction;
|
||||
|
||||
use Exception;
|
||||
use FireflyIII\Events\UpdatedTransactionGroup;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Http\Controllers\Controller;
|
||||
@@ -65,7 +64,7 @@ class ConvertController extends Controller
|
||||
$this->middleware(
|
||||
function ($request, $next) {
|
||||
$this->accountRepository = app(AccountRepositoryInterface::class);
|
||||
app('view')->share('title', (string)trans('firefly.transactions'));
|
||||
app('view')->share('title', (string) trans('firefly.transactions'));
|
||||
app('view')->share('mainTitleIcon', 'fa-exchange');
|
||||
|
||||
return $next($request);
|
||||
@@ -95,7 +94,7 @@ class ConvertController extends Controller
|
||||
|
||||
$groupTitle = $group->title ?? $first->description;
|
||||
$groupArray = $transformer->transformObject($group);
|
||||
$subTitle = (string)trans('firefly.convert_to_'.$destinationType->type, ['description' => $groupTitle]);
|
||||
$subTitle = (string) trans('firefly.convert_to_'.$destinationType->type, ['description' => $groupTitle]);
|
||||
$subTitleIcon = 'fa-exchange';
|
||||
|
||||
// get a list of asset accounts and liabilities and stuff, in various combinations:
|
||||
@@ -111,7 +110,7 @@ class ConvertController extends Controller
|
||||
|
||||
if ($sourceType->type === $destinationType->type) { // cannot convert to its own type.
|
||||
app('log')->debug('This is already a transaction of the expected type..');
|
||||
session()->flash('info', (string)trans('firefly.convert_is_already_type_'.$destinationType->type));
|
||||
session()->flash('info', (string) trans('firefly.convert_is_already_type_'.$destinationType->type));
|
||||
|
||||
return redirect(route('transactions.show', [$group->id]));
|
||||
}
|
||||
@@ -147,7 +146,7 @@ class ConvertController extends Controller
|
||||
// group accounts:
|
||||
/** @var Account $account */
|
||||
foreach ($accountList as $account) {
|
||||
$role = (string)$this->accountRepository->getMetaValue($account, 'account_role');
|
||||
$role = (string) $this->accountRepository->getMetaValue($account, 'account_role');
|
||||
$name = $account->name;
|
||||
if ('' === $role) {
|
||||
$role = 'no_account_type';
|
||||
@@ -165,7 +164,7 @@ class ConvertController extends Controller
|
||||
$role = 'revenue_account';
|
||||
}
|
||||
|
||||
$key = (string)trans('firefly.opt_group_'.$role);
|
||||
$key = (string) trans('firefly.opt_group_'.$role);
|
||||
$grouped[$key][$account->id] = $name;
|
||||
}
|
||||
|
||||
@@ -184,7 +183,7 @@ class ConvertController extends Controller
|
||||
// group accounts:
|
||||
/** @var Account $account */
|
||||
foreach ($accountList as $account) {
|
||||
$role = (string)$this->accountRepository->getMetaValue($account, 'account_role');
|
||||
$role = (string) $this->accountRepository->getMetaValue($account, 'account_role');
|
||||
$name = $account->name;
|
||||
if ('' === $role) {
|
||||
$role = 'no_account_type';
|
||||
@@ -202,7 +201,7 @@ class ConvertController extends Controller
|
||||
$role = 'expense_account';
|
||||
}
|
||||
|
||||
$key = (string)trans('firefly.opt_group_'.$role);
|
||||
$key = (string) trans('firefly.opt_group_'.$role);
|
||||
$grouped[$key][$account->id] = $name;
|
||||
}
|
||||
|
||||
@@ -225,7 +224,7 @@ class ConvertController extends Controller
|
||||
$balance = app('steam')->balance($account, today());
|
||||
$currency = $this->accountRepository->getAccountCurrency($account) ?? $defaultCurrency;
|
||||
$role = 'l_'.$account->accountType->type;
|
||||
$key = (string)trans('firefly.opt_group_'.$role);
|
||||
$key = (string) trans('firefly.opt_group_'.$role);
|
||||
$grouped[$key][$account->id] = $account->name.' ('.app('amount')->formatAnything($currency, $balance, false).')';
|
||||
}
|
||||
|
||||
@@ -247,12 +246,12 @@ class ConvertController extends Controller
|
||||
foreach ($accountList as $account) {
|
||||
$balance = app('steam')->balance($account, today());
|
||||
$currency = $this->accountRepository->getAccountCurrency($account) ?? $defaultCurrency;
|
||||
$role = (string)$this->accountRepository->getMetaValue($account, 'account_role');
|
||||
$role = (string) $this->accountRepository->getMetaValue($account, 'account_role');
|
||||
if ('' === $role) {
|
||||
$role = 'no_account_type';
|
||||
}
|
||||
|
||||
$key = (string)trans('firefly.opt_group_'.$role);
|
||||
$key = (string) trans('firefly.opt_group_'.$role);
|
||||
$grouped[$key][$account->id] = $account->name.' ('.app('amount')->formatAnything($currency, $balance, false).')';
|
||||
}
|
||||
|
||||
@@ -285,7 +284,7 @@ class ConvertController extends Controller
|
||||
// correct transfers:
|
||||
$group->refresh();
|
||||
|
||||
session()->flash('success', (string)trans('firefly.converted_to_'.$destinationType->type));
|
||||
session()->flash('success', (string) trans('firefly.converted_to_'.$destinationType->type));
|
||||
event(new UpdatedTransactionGroup($group, true, true));
|
||||
|
||||
return redirect(route('transactions.show', [$group->id]));
|
||||
@@ -306,11 +305,11 @@ class ConvertController extends Controller
|
||||
$destinationId = $data['destination_id'][$journal->id] ?? null;
|
||||
$destinationName = $data['destination_name'][$journal->id] ?? null;
|
||||
|
||||
// double check its not an empty string.
|
||||
$sourceId = '' === $sourceId || null === $sourceId ? null : (int)$sourceId;
|
||||
$sourceName = '' === $sourceName ? null : (string)$sourceName;
|
||||
$destinationId = '' === $destinationId || null === $destinationId ? null : (int)$destinationId;
|
||||
$destinationName = '' === $destinationName ? null : (string)$destinationName;
|
||||
// double check it's not an empty string.
|
||||
$sourceId = '' === $sourceId || null === $sourceId ? null : (int) $sourceId;
|
||||
$sourceName = '' === $sourceName ? null : (string) $sourceName;
|
||||
$destinationId = '' === $destinationId || null === $destinationId ? null : (int) $destinationId;
|
||||
$destinationName = '' === $destinationName ? null : (string) $destinationName;
|
||||
$validSource = $validator->validateSource(['id' => $sourceId, 'name' => $sourceName]);
|
||||
$validDestination = $validator->validateDestination(['id' => $destinationId, 'name' => $destinationName]);
|
||||
|
||||
@@ -331,6 +330,19 @@ class ConvertController extends Controller
|
||||
'type' => $transactionType->type,
|
||||
];
|
||||
|
||||
// also set the currency to the currency of the source account, in case you're converting a deposit into a transfer.
|
||||
if (TransactionType::TRANSFER === $transactionType->type && TransactionType::DEPOSIT === $journal->transactionType->type) {
|
||||
$source = $this->accountRepository->find((int) $sourceId);
|
||||
$sourceCurrency = $this->accountRepository->getAccountCurrency($source);
|
||||
$dest = $this->accountRepository->find((int) $destinationId);
|
||||
$destCurrency = $this->accountRepository->getAccountCurrency($dest);
|
||||
if (null !== $sourceCurrency && null !== $destCurrency && $sourceCurrency->code !== $destCurrency->code) {
|
||||
$update['currency_id'] = $sourceCurrency->id;
|
||||
$update['foreign_currency_id'] = $destCurrency->id;
|
||||
$update['foreign_amount'] = '1'; // not the best solution but at this point the amount is hard to get.
|
||||
}
|
||||
}
|
||||
|
||||
/** @var JournalUpdateService $service */
|
||||
$service = app(JournalUpdateService::class);
|
||||
$service->setTransactionJournal($journal);
|
||||
|
@@ -27,6 +27,7 @@ use Carbon\Carbon;
|
||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||
use FireflyIII\Support\Http\Controllers\RequestInformation;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
/**
|
||||
* Class SessionFilter.
|
||||
@@ -63,6 +64,7 @@ class Range
|
||||
{
|
||||
// ignore preference. set the range to be the current month:
|
||||
if (!app('session')->has('start') && !app('session')->has('end')) {
|
||||
Log::debug('setRange: Session has no start or end.');
|
||||
$viewRange = app('preferences')->get('viewRange', '1M')->data;
|
||||
if (is_array($viewRange)) {
|
||||
$viewRange = '1M';
|
||||
@@ -76,6 +78,8 @@ class Range
|
||||
app('session')->put('end', $end);
|
||||
}
|
||||
if (!app('session')->has('first')) {
|
||||
Log::debug('setRange: Session has no "first".');
|
||||
|
||||
/** @var JournalRepositoryInterface $repository */
|
||||
$repository = app(JournalRepositoryInterface::class);
|
||||
$journal = $repository->firstNull();
|
||||
|
@@ -28,4 +28,9 @@ use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
||||
/**
|
||||
* Class VerifyCsrfToken.
|
||||
*/
|
||||
class VerifyCsrfToken extends Middleware {}
|
||||
class VerifyCsrfToken extends Middleware
|
||||
{
|
||||
protected $except = [
|
||||
'oauth/token',
|
||||
];
|
||||
}
|
||||
|
@@ -361,11 +361,17 @@ class CreateRecurringTransactions implements ShouldQueue
|
||||
// create transaction array and send to factory.
|
||||
$groupTitle = null;
|
||||
$count = $recurrence->recurrenceTransactions->count();
|
||||
if ($count > 1) {
|
||||
// #8844, if there is one recurrence transaction, use the first title as the title.
|
||||
if (1 === $count) {
|
||||
/** @var RecurrenceTransaction $first */
|
||||
$first = $recurrence->recurrenceTransactions()->first();
|
||||
$groupTitle = $first->description;
|
||||
}
|
||||
// #8844, if there are more, use the recurrence transaction itself.
|
||||
if ($count > 1) {
|
||||
$groupTitle = $recurrence->title;
|
||||
}
|
||||
|
||||
if (0 === $count) {
|
||||
app('log')->error('No transactions to be created in this recurrence. Cannot continue.');
|
||||
|
||||
@@ -411,12 +417,12 @@ class CreateRecurringTransactions implements ShouldQueue
|
||||
/** @var RecurrenceTransaction $transaction */
|
||||
foreach ($transactions as $index => $transaction) {
|
||||
$single = [
|
||||
'type' => null === $first->transactionType ? strtolower($recurrence->transactionType->type) : strtolower($first->transactionType->type),
|
||||
'type' => null === $transaction?->transactionType?->type ? strtolower($recurrence->transactionType->type) : strtolower($transaction->transactionType->type),
|
||||
'date' => $date,
|
||||
'user' => $recurrence->user_id,
|
||||
'currency_id' => $transaction->transaction_currency_id,
|
||||
'currency_code' => null,
|
||||
'description' => $first->description,
|
||||
'description' => $transaction->description,
|
||||
'amount' => $transaction->amount,
|
||||
'budget_id' => $this->repository->getBudget($transaction),
|
||||
'budget_name' => null,
|
||||
|
@@ -28,6 +28,7 @@ use Illuminate\Support\Facades\Response;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Laravel\Passport\Passport;
|
||||
|
||||
/**
|
||||
* Class AppServiceProvider
|
||||
@@ -87,6 +88,7 @@ class AppServiceProvider extends ServiceProvider
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
Passport::ignoreRoutes();
|
||||
// Passport::ignoreMigrations();
|
||||
// Sanctum::ignoreMigrations();
|
||||
}
|
||||
|
@@ -146,7 +146,7 @@ class AttachmentRepository implements AttachmentRepositoryInterface
|
||||
// should be validated already:
|
||||
if (array_key_exists('attachable_type', $data) && array_key_exists('attachable_id', $data)) {
|
||||
$attachment->attachable_id = (int)$data['attachable_id'];
|
||||
$attachment->attachable_type = sprintf('FireflyIII\\Models\\%s', $data['attachable_type']);
|
||||
$attachment->attachable_type = sprintf('FireflyIII\Models\%s', $data['attachable_type']);
|
||||
}
|
||||
|
||||
$attachment->save();
|
||||
|
@@ -408,10 +408,16 @@ class RecurringRepository implements RecurringRepositoryInterface
|
||||
|
||||
private function filterMaxDate(?Carbon $max, array $occurrences): array
|
||||
{
|
||||
if (null === $max) {
|
||||
return $occurrences;
|
||||
}
|
||||
$filtered = [];
|
||||
if (null === $max) {
|
||||
foreach ($occurrences as $date) {
|
||||
if ($date->gt(today())) {
|
||||
$filtered[] = $date;
|
||||
}
|
||||
}
|
||||
|
||||
return $filtered;
|
||||
}
|
||||
foreach ($occurrences as $date) {
|
||||
if ($date->lte($max) && $date->gt(today())) {
|
||||
$filtered[] = $date;
|
||||
|
@@ -150,7 +150,6 @@ class RuleRepository implements RuleRepositoryInterface
|
||||
$params[] = sprintf('%s:true', OperatorQuerySearch::getRootOperator($trigger->trigger_type));
|
||||
}
|
||||
if (true === $needsContext) {
|
||||
var_dump('x');
|
||||
$params[] = sprintf('%s:"%s"', OperatorQuerySearch::getRootOperator($trigger->trigger_type), $trigger->trigger_value);
|
||||
}
|
||||
}
|
||||
|
@@ -216,7 +216,6 @@ class CreditRecalculateService
|
||||
app('log')->debug(sprintf('Destination amount "%s" is now "%s"', $dest->amount, app('steam')->negative($dest->amount)));
|
||||
$source->amount = app('steam')->positive($source->amount);
|
||||
$dest->amount = app('steam')->negative($source->amount);
|
||||
var_dump($source->foreign_amount);
|
||||
if (null !== $source->foreign_amount && '' !== $source->foreign_amount) {
|
||||
$source->foreign_amount = app('steam')->positive($source->foreign_amount);
|
||||
app('log')->debug(sprintf('Source foreign amount "%s" is now "%s"', $source->foreign_amount, app('steam')->positive($source->foreign_amount)));
|
||||
|
@@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\CurrencyExchangeRate;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\Support\CacheProperties;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
/**
|
||||
@@ -48,7 +49,11 @@ class ExchangeRateConverter
|
||||
*/
|
||||
public function convert(TransactionCurrency $from, TransactionCurrency $to, Carbon $date, string $amount): string
|
||||
{
|
||||
Log::debug('convert()');
|
||||
if (false === config('cer.enabled')) {
|
||||
Log::debug('ExchangeRateConverter: disabled, return amount as is.');
|
||||
|
||||
return $amount;
|
||||
}
|
||||
$rate = $this->getCurrencyRate($from, $to, $date);
|
||||
|
||||
return bcmul($amount, $rate);
|
||||
@@ -59,7 +64,11 @@ class ExchangeRateConverter
|
||||
*/
|
||||
public function getCurrencyRate(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): string
|
||||
{
|
||||
Log::debug('getCurrencyRate()');
|
||||
if (false === config('cer.enabled')) {
|
||||
Log::debug('ExchangeRateConverter: disabled, return "1".');
|
||||
|
||||
return '1';
|
||||
}
|
||||
$rate = $this->getRate($from, $to, $date);
|
||||
|
||||
return '0' === $rate ? '1' : $rate;
|
||||
@@ -70,25 +79,36 @@ class ExchangeRateConverter
|
||||
*/
|
||||
private function getRate(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): string
|
||||
{
|
||||
Log::debug('getRate()');
|
||||
if ($this->isPrepared && $this->noPreparedRates) {
|
||||
$fallback = $this->fallback[$from->id][$to->id] ?? '0';
|
||||
Log::debug(sprintf('Return fallback rate from #%d to #%d on %s: %s', $from->id, $to->id, $date->format('Y-m-d'), $fallback));
|
||||
$key = $this->getCacheKey($from, $to, $date);
|
||||
$res = Cache::get($key, null);
|
||||
|
||||
return $fallback;
|
||||
// find in cache
|
||||
if (null !== $res) {
|
||||
Log::debug(sprintf('ExchangeRateConverter: Return cached rate from #%d to #%d on %s.', $from->id, $to->id, $date->format('Y-m-d')));
|
||||
|
||||
return $res;
|
||||
}
|
||||
// first attempt:
|
||||
|
||||
// find in database
|
||||
$rate = $this->getFromDB($from->id, $to->id, $date->format('Y-m-d'));
|
||||
if (null !== $rate) {
|
||||
Cache::forever($key, $rate);
|
||||
Log::debug(sprintf('ExchangeRateConverter: Return DB rate from #%d to #%d on %s.', $from->id, $to->id, $date->format('Y-m-d')));
|
||||
|
||||
return $rate;
|
||||
}
|
||||
// no result. perhaps the other way around?
|
||||
|
||||
// find reverse in database
|
||||
$rate = $this->getFromDB($to->id, $from->id, $date->format('Y-m-d'));
|
||||
if (null !== $rate) {
|
||||
return bcdiv('1', $rate);
|
||||
$rate = bcdiv('1', $rate);
|
||||
Cache::forever($key, $rate);
|
||||
Log::debug(sprintf('ExchangeRateConverter: Return DB rate from #%d to #%d on %s.', $from->id, $to->id, $date->format('Y-m-d')));
|
||||
|
||||
return $rate;
|
||||
}
|
||||
|
||||
// if nothing in place, fall back on the rate for $from to EUR
|
||||
// fallback scenario.
|
||||
$first = $this->getEuroRate($from, $date);
|
||||
$second = $this->getEuroRate($to, $date);
|
||||
|
||||
@@ -96,17 +116,19 @@ class ExchangeRateConverter
|
||||
if (0 === bccomp('0', $first) || 0 === bccomp('0', $second)) {
|
||||
Log::warning(sprintf('$first is "%s" and $second is "%s"', $first, $second));
|
||||
|
||||
return '0';
|
||||
return '1';
|
||||
}
|
||||
|
||||
$second = bcdiv('1', $second);
|
||||
$rate = bcmul($first, $second);
|
||||
Log::debug(sprintf('ExchangeRateConverter: Return DB rate from #%d to #%d on %s.', $from->id, $to->id, $date->format('Y-m-d')));
|
||||
Cache::forever($key, $rate);
|
||||
|
||||
return bcmul($first, $second);
|
||||
return $rate;
|
||||
}
|
||||
|
||||
private function getFromDB(int $from, int $to, string $date): ?string
|
||||
{
|
||||
Log::debug('getFromDB()');
|
||||
if ($from === $to) {
|
||||
return '1';
|
||||
}
|
||||
@@ -115,7 +137,7 @@ class ExchangeRateConverter
|
||||
// perhaps the rate has been cached during this particular run
|
||||
$preparedRate = $this->prepared[$date][$from][$to] ?? null;
|
||||
if (null !== $preparedRate && 0 !== bccomp('0', $preparedRate)) {
|
||||
Log::debug(sprintf('Found prepared rate from #%d to #%d on %s.', $from, $to, $date));
|
||||
Log::debug(sprintf('ExchangeRateConverter: Found prepared rate from #%d to #%d on %s.', $from, $to, $date));
|
||||
|
||||
return $preparedRate;
|
||||
}
|
||||
@@ -127,7 +149,7 @@ class ExchangeRateConverter
|
||||
if ('' === $rate) {
|
||||
return null;
|
||||
}
|
||||
Log::debug(sprintf('Found cached rate from #%d to #%d on %s.', $from, $to, $date));
|
||||
Log::debug(sprintf('ExchangeRateConverter: Found !cached! rate from #%d to #%d on %s.', $from, $to, $date));
|
||||
|
||||
return $rate;
|
||||
}
|
||||
@@ -142,19 +164,19 @@ class ExchangeRateConverter
|
||||
->first()
|
||||
;
|
||||
++$this->queryCount;
|
||||
$rate = (string)$result?->rate;
|
||||
$rate = (string) $result?->rate;
|
||||
|
||||
if ('' === $rate) {
|
||||
app('log')->debug(sprintf('Found no rate for #%d->#%d (%s) in the DB.', $from, $to, $date));
|
||||
app('log')->debug(sprintf('ExchangeRateConverter: Found no rate for #%d->#%d (%s) in the DB.', $from, $to, $date));
|
||||
|
||||
return null;
|
||||
}
|
||||
if (0 === bccomp('0', $rate)) {
|
||||
app('log')->debug(sprintf('Found rate for #%d->#%d (%s) in the DB, but it\'s zero.', $from, $to, $date));
|
||||
app('log')->debug(sprintf('ExchangeRateConverter: Found rate for #%d->#%d (%s) in the DB, but it\'s zero.', $from, $to, $date));
|
||||
|
||||
return null;
|
||||
}
|
||||
app('log')->debug(sprintf('Found rate for #%d->#%d (%s) in the DB: %s.', $from, $to, $date, $rate));
|
||||
app('log')->debug(sprintf('ExchangeRateConverter: Found rate for #%d->#%d (%s) in the DB: %s.', $from, $to, $date, $rate));
|
||||
$cache->store($rate);
|
||||
|
||||
// if the rate has not been cached during this particular run, save it
|
||||
@@ -178,7 +200,6 @@ class ExchangeRateConverter
|
||||
*/
|
||||
private function getEuroRate(TransactionCurrency $currency, Carbon $date): string
|
||||
{
|
||||
Log::debug('getEuroRate()');
|
||||
$euroId = $this->getEuroId();
|
||||
if ($euroId === $currency->id) {
|
||||
return '1';
|
||||
@@ -198,7 +219,7 @@ class ExchangeRateConverter
|
||||
// grab backup values from config file:
|
||||
$backup = config(sprintf('cer.rates.%s', $currency->code));
|
||||
if (null !== $backup) {
|
||||
return bcdiv('1', (string)$backup);
|
||||
return bcdiv('1', (string) $backup);
|
||||
// app('log')->debug(sprintf('Backup rate for %s to EUR is %s.', $currency->code, $backup));
|
||||
// return $backup;
|
||||
}
|
||||
@@ -216,7 +237,7 @@ class ExchangeRateConverter
|
||||
$cache = new CacheProperties();
|
||||
$cache->addProperty('cer-euro-id');
|
||||
if ($cache->has()) {
|
||||
return (int)$cache->get();
|
||||
return (int) $cache->get();
|
||||
}
|
||||
$euro = TransactionCurrency::whereCode('EUR')->first();
|
||||
++$this->queryCount;
|
||||
@@ -233,6 +254,9 @@ class ExchangeRateConverter
|
||||
*/
|
||||
public function prepare(TransactionCurrency $from, TransactionCurrency $to, Carbon $start, Carbon $end): void
|
||||
{
|
||||
if (false === config('cer.enabled')) {
|
||||
return;
|
||||
}
|
||||
Log::debug('prepare()');
|
||||
$start->startOfDay();
|
||||
$end->endOfDay();
|
||||
@@ -305,6 +329,14 @@ class ExchangeRateConverter
|
||||
|
||||
public function summarize(): void
|
||||
{
|
||||
if (false === config('cer.enabled')) {
|
||||
return;
|
||||
}
|
||||
Log::debug(sprintf('ExchangeRateConverter ran %d queries.', $this->queryCount));
|
||||
}
|
||||
|
||||
private function getCacheKey(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): string
|
||||
{
|
||||
return sprintf('cer-%d-%d-%s', $from->id, $to->id, $date->format('Y-m-d'));
|
||||
}
|
||||
}
|
||||
|
@@ -171,6 +171,8 @@ trait AugumentData
|
||||
|
||||
/** @var BudgetLimitRepositoryInterface $blRepository */
|
||||
$blRepository = app(BudgetLimitRepositoryInterface::class);
|
||||
|
||||
$end->endOfMonth();
|
||||
// properties for cache
|
||||
$cache = new CacheProperties();
|
||||
$cache->addProperty($start);
|
||||
|
@@ -370,6 +370,7 @@ trait PeriodOverview
|
||||
$first = $this->journalRepos->firstNull();
|
||||
$start = null === $first ? new Carbon() : $first->date;
|
||||
$end = clone $theDate;
|
||||
$end = app('navigation')->endOfPeriod($end, $range);
|
||||
|
||||
app('log')->debug(sprintf('Start for getNoCategoryPeriodOverview() is %s', $start->format('Y-m-d')));
|
||||
app('log')->debug(sprintf('End for getNoCategoryPeriodOverview() is %s', $end->format('Y-m-d')));
|
||||
|
@@ -23,6 +23,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Support\Models;
|
||||
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\AccountBalance;
|
||||
use FireflyIII\Models\Transaction;
|
||||
@@ -117,16 +118,34 @@ class AccountBalanceCalculator
|
||||
$foreignCurrency = (int) $row->foreign_currency_id;
|
||||
$sumAmount = (string) $row->sum_amount;
|
||||
$sumForeignAmount = (string) $row->sum_foreign_amount;
|
||||
$sumAmount = '' === $sumAmount ? '0' : $sumAmount;
|
||||
$sumForeignAmount = '' === $sumForeignAmount ? '0' : $sumForeignAmount;
|
||||
|
||||
// first create for normal currency:
|
||||
$entry = $this->getAccountBalanceByAccount($account, $transactionCurrency);
|
||||
$entry->balance = bcadd((string) $entry->balance, $sumAmount);
|
||||
|
||||
try {
|
||||
$entry->balance = bcadd((string) $entry->balance, $sumAmount);
|
||||
} catch (\ValueError $e) {
|
||||
$message = sprintf('[a] Could not add "%s" to "%s": %s', $entry->balance, $sumAmount, $e->getMessage());
|
||||
Log::error($message);
|
||||
|
||||
throw new FireflyException($message, 0, $e);
|
||||
}
|
||||
$entry->save();
|
||||
|
||||
// then do foreign amount, if present:
|
||||
if ($foreignCurrency > 0) {
|
||||
$entry = $this->getAccountBalanceByAccount($account, $foreignCurrency);
|
||||
$entry->balance = bcadd((string) $entry->balance, $sumForeignAmount);
|
||||
$entry = $this->getAccountBalanceByAccount($account, $foreignCurrency);
|
||||
|
||||
try {
|
||||
$entry->balance = bcadd((string) $entry->balance, $sumForeignAmount);
|
||||
} catch (\ValueError $e) {
|
||||
$message = sprintf('[b] Could not add "%s" to "%s": %s', $entry->balance, $sumForeignAmount, $e->getMessage());
|
||||
Log::error($message);
|
||||
|
||||
throw new FireflyException($message, 0, $e);
|
||||
}
|
||||
$entry->save();
|
||||
}
|
||||
}
|
||||
|
@@ -750,6 +750,8 @@ class Navigation
|
||||
$function = $functionMap[$range];
|
||||
$end->{$function}(); // @phpstan-ignore-line
|
||||
|
||||
Log::debug(sprintf('updateEndDate returns "%s"', $end->format('Y-m-d')));
|
||||
|
||||
return $end;
|
||||
}
|
||||
if ('6M' === $range) {
|
||||
@@ -806,6 +808,7 @@ class Navigation
|
||||
if (array_key_exists($range, $functionMap)) {
|
||||
$function = $functionMap[$range];
|
||||
$start->{$function}(); // @phpstan-ignore-line
|
||||
Log::debug(sprintf('updateStartDate returns "%s"', $start->format('Y-m-d')));
|
||||
|
||||
return $start;
|
||||
}
|
||||
|
@@ -186,7 +186,7 @@ class General extends AbstractExtension
|
||||
$converter = new GithubFlavoredMarkdownConverter(
|
||||
[
|
||||
'allow_unsafe_links' => false,
|
||||
'max_nesting_level' => 3,
|
||||
'max_nesting_level' => 5,
|
||||
'html_input' => 'escape',
|
||||
]
|
||||
);
|
||||
|
@@ -53,7 +53,7 @@ class AttachmentTransformer extends AbstractTransformer
|
||||
'created_at' => $attachment->created_at->toAtomString(),
|
||||
'updated_at' => $attachment->updated_at->toAtomString(),
|
||||
'attachable_id' => (string)$attachment->attachable_id,
|
||||
'attachable_type' => str_replace('FireflyIII\\Models\\', '', $attachment->attachable_type),
|
||||
'attachable_type' => str_replace('FireflyIII\Models\\', '', $attachment->attachable_type),
|
||||
'md5' => $attachment->md5,
|
||||
'filename' => $attachment->filename,
|
||||
'download_url' => route('api.v1.attachments.download', [$attachment->id]),
|
||||
|
@@ -128,7 +128,8 @@ class RecurrenceTransformer extends AbstractTransformer
|
||||
];
|
||||
|
||||
// get the (future) occurrences for this specific type of repetition:
|
||||
$occurrences = $this->repository->getXOccurrencesSince($repetition, $fromDate, new Carbon(), 5);
|
||||
$amount = 'daily' === $repetition->repetition_type ? 9 : 5;
|
||||
$occurrences = $this->repository->getXOccurrencesSince($repetition, $fromDate, now(), $amount);
|
||||
|
||||
/** @var Carbon $carbon */
|
||||
foreach ($occurrences as $carbon) {
|
||||
|
@@ -106,7 +106,13 @@ trait GroupValidation
|
||||
'source_id', 'source_name', 'source_number', 'source_iban',
|
||||
'destination_id', 'destination_name', 'destination_number', 'destination_iban',
|
||||
];
|
||||
|
||||
// stop protesting when reconciliation is set to FALSE.
|
||||
|
||||
foreach ($data['transactions'] as $index => $row) {
|
||||
if (false === ($row['reconciled'] ?? false)) {
|
||||
continue;
|
||||
}
|
||||
foreach ($forbidden as $key) {
|
||||
if (array_key_exists($key, $row)) {
|
||||
$validator->errors()->add(
|
||||
|
56
changelog.md
56
changelog.md
@@ -3,6 +3,62 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## 6.1.19 - 2024-07-20
|
||||
|
||||
### Fixed
|
||||
|
||||
- [Issue 8844](https://github.com/firefly-iii/firefly-iii/issues/8844) (Split recurring transaction gets wrong (split) titles) reported by @dreautall
|
||||
- [Issue 8981](https://github.com/firefly-iii/firefly-iii/issues/8981) (bcadd() error during Docker container startup) reported by @NoiTheCat
|
||||
- [Issue 8986](https://github.com/firefly-iii/firefly-iii/issues/8986) (Search with "internal_reference_is" finds all transactions with full word of search string) reported by @baflo
|
||||
- [Issue 9009](https://github.com/firefly-iii/firefly-iii/issues/9009) (Incorrect Amount Calculation in Reconciliation for Bank Account A) reported by @realzsan3
|
||||
- [Issue 9021](https://github.com/firefly-iii/firefly-iii/issues/9021) (Incorrect "Expected Withdrawals" for Daily Recurring Transactions) reported by @xMarcii
|
||||
- [Issue 9022](https://github.com/firefly-iii/firefly-iii/issues/9022) (Calendar Not Showing Green Fields for Recurring Transactions) reported by @xMarcii
|
||||
- Improved currency exchange rate downloader
|
||||
|
||||
## 6.1.18 - 2024-06-19
|
||||
|
||||
### Fixed
|
||||
|
||||
- [Issue 8978](https://github.com/firefly-iii/firefly-iii/issues/8978) (Error! Internal Firefly III Exception: bcadd(): Argument #2 ($num2) is not well-formed) reported by @el-rhazi
|
||||
- [Issue 8977](https://github.com/firefly-iii/firefly-iii/issues/8977) (Data Importer: "500 Server Error" with Firefly III v6.1.17) reported by @qtdzz
|
||||
|
||||
### Security
|
||||
|
||||
- [CVE-2024-37893](https://www.cve.org/CVERecord?id=CVE-2024-37893)
|
||||
|
||||
## 6.1.17 - 2024-06-16
|
||||
|
||||
### Added
|
||||
|
||||
- New routine that calculates account balances, first start could take a while.
|
||||
|
||||
### Removed
|
||||
|
||||
- Removed auto-generated language files.
|
||||
|
||||
### Fixed
|
||||
|
||||
- [Issue 8907](https://github.com/firefly-iii/firefly-iii/issues/8907) (Error when adding initial balance: bcadd(): Argument #2 ($num2) must be of type string, int given) reported by @wnklmnn
|
||||
- [Issue 8911](https://github.com/firefly-iii/firefly-iii/issues/8911) (Docker container startup very slow) reported by @daften
|
||||
- [PR 8929](https://github.com/firefly-iii/firefly-iii/pull/8929) (icon title chgd from Deposit to Transfer) reported by @stevewasiura
|
||||
- [PR 8930](https://github.com/firefly-iii/firefly-iii/pull/8930) (icon title chgd from Deposit to Transfer) reported by @stevewasiura
|
||||
- [PR 8951](https://github.com/firefly-iii/firefly-iii/pull/8951) (add icon for delete action) reported by @stevewasiura
|
||||
- [PR 8957](https://github.com/firefly-iii/firefly-iii/pull/8957) (Remove nesting level for markdown) reported by @JeroenED
|
||||
- [Issue 8958](https://github.com/firefly-iii/firefly-iii/issues/8958) (Weird line appears above the UI when clicking on matching transactions for a rule) reported by @avee87
|
||||
- [Issue 8893](https://github.com/firefly-iii/firefly-iii/issues/8893) (API: `reconciled: false` does not have precedence) reported by @dreautall
|
||||
- [Issue 8954](https://github.com/firefly-iii/firefly-iii/issues/8954) (Wrong calculation of transaction without category) reported by @anarion80
|
||||
- [Issue 8927](https://github.com/firefly-iii/firefly-iii/issues/8927) (Converting deposit to transfer can set incorrect transaction currency) reported by @avee87
|
||||
- Various issues in release train.
|
||||
- There is a confirmation again before you delete data using the page in your profile
|
||||
|
||||
### Security
|
||||
|
||||
- Two (undisclosed) MFA bypass errors, reported by @Skelmis. Disclosure will follow in a few weeks.
|
||||
|
||||
### API
|
||||
|
||||
- Expand v2 chart API
|
||||
|
||||
## 6.1.16 - 2024-05-20
|
||||
|
||||
### Added
|
||||
|
908
composer.lock
generated
908
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -117,7 +117,7 @@ return [
|
||||
'expression_engine' => false,
|
||||
// see cer.php for exchange rates feature flag.
|
||||
],
|
||||
'version' => 'develop/2024-05-25',
|
||||
'version' => 'develop/2024-07-20',
|
||||
'api_version' => '2.1.0',
|
||||
'db_version' => 24,
|
||||
|
||||
|
@@ -49,10 +49,12 @@ class AccountTypeSeeder extends Seeder
|
||||
AccountType::LIABILITY_CREDIT,
|
||||
];
|
||||
foreach ($types as $type) {
|
||||
try {
|
||||
AccountType::create(['type' => $type]);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
if (null === AccountType::where('type', $type)->first()) {
|
||||
try {
|
||||
AccountType::create(['type' => $type]);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -36,7 +36,7 @@ class ConfigSeeder extends Seeder
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$entry = Configuration::where('name', 'db_version')->first();
|
||||
$entry = Configuration::where('name', 'db_version')->first();
|
||||
if (null === $entry) {
|
||||
Configuration::create(
|
||||
[
|
||||
@@ -44,11 +44,11 @@ class ConfigSeeder extends Seeder
|
||||
'data' => 1,
|
||||
]
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
if (null !== $entry) {
|
||||
$version = (int)config('firefly.db_version');
|
||||
$entry->data = $version;
|
||||
$entry->save();
|
||||
}
|
||||
$version = (int) config('firefly.db_version');
|
||||
$entry->data = $version;
|
||||
$entry->save();
|
||||
}
|
||||
}
|
||||
|
@@ -60,10 +60,12 @@ class LinkTypeSeeder extends Seeder
|
||||
],
|
||||
];
|
||||
foreach ($types as $type) {
|
||||
try {
|
||||
LinkType::create($type);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
if (null === LinkType::where('name', $type['name'])->first()) {
|
||||
try {
|
||||
LinkType::create($type);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -46,10 +46,12 @@ class PermissionSeeder extends Seeder
|
||||
],
|
||||
];
|
||||
foreach ($roles as $role) {
|
||||
try {
|
||||
Role::create($role);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
if (null === Role::where('name', $role['name'])->first()) {
|
||||
try {
|
||||
Role::create($role);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -42,6 +42,7 @@ class TransactionCurrencySeeder extends Seeder
|
||||
$currencies[] = ['code' => 'PLN', 'name' => 'Polish złoty', 'symbol' => 'zł', 'decimal_places' => 2];
|
||||
$currencies[] = ['code' => 'TRY', 'name' => 'Turkish lira', 'symbol' => '₺', 'decimal_places' => 2];
|
||||
$currencies[] = ['code' => 'DKK', 'name' => 'Dansk krone', 'symbol' => 'kr.', 'decimal_places' => 2];
|
||||
$currencies[] = ['code' => 'RON', 'name' => 'Romanian leu', 'symbol' => 'lei', 'decimal_places' => 2];
|
||||
|
||||
// american currencies
|
||||
$currencies[] = ['code' => 'USD', 'name' => 'US Dollar', 'symbol' => '$', 'decimal_places' => 2];
|
||||
@@ -71,10 +72,12 @@ class TransactionCurrencySeeder extends Seeder
|
||||
$currencies[] = ['code' => 'HRK', 'name' => 'Croatian kuna', 'symbol' => 'kn', 'decimal_places' => 2];
|
||||
|
||||
foreach ($currencies as $currency) {
|
||||
try {
|
||||
TransactionCurrency::create($currency);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
if (null === TransactionCurrency::where('code', $currency['code'])->first()) {
|
||||
try {
|
||||
TransactionCurrency::create($currency);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -44,10 +44,12 @@ class TransactionTypeSeeder extends Seeder
|
||||
];
|
||||
|
||||
foreach ($types as $type) {
|
||||
try {
|
||||
TransactionType::create(['type' => $type]);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
if (null === TransactionType::where('type', $type)->first()) {
|
||||
try {
|
||||
TransactionType::create(['type' => $type]);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -45,10 +45,12 @@ class UserRoleSeeder extends Seeder
|
||||
|
||||
/** @var string $role */
|
||||
foreach ($roles as $role) {
|
||||
try {
|
||||
UserRole::create(['title' => $role]);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
if (null === UserRole::where('title', $role)->first()) {
|
||||
try {
|
||||
UserRole::create(['title' => $role]);
|
||||
} catch (\PDOException $e) {
|
||||
// @ignoreException
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
1707
package-lock.json
generated
1707
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -9,17 +9,17 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"axios": "^1.6.8",
|
||||
"laravel-vite-plugin": "^1.0.2",
|
||||
"laravel-vite-plugin": "^1.0.5",
|
||||
"patch-package": "^8.0.0",
|
||||
"sass": "^1.75.0",
|
||||
"sass": "^1.77.8",
|
||||
"vite": "^5",
|
||||
"vite-plugin-manifest-sri": "^0.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ag-grid-community/client-side-row-model": "^31.0.3",
|
||||
"@ag-grid-community/core": "^31.0.3",
|
||||
"@ag-grid-community/infinite-row-model": "^31.0.3",
|
||||
"@ag-grid-community/styles": "^31.0.3",
|
||||
"@ag-grid-community/client-side-row-model": "^32.0.2",
|
||||
"@ag-grid-community/core": "^32.0.2",
|
||||
"@ag-grid-community/infinite-row-model": "^32.0.2",
|
||||
"@ag-grid-community/styles": "^32.0.0",
|
||||
"@fortawesome/fontawesome-free": "^6.4.0",
|
||||
"@popperjs/core": "^2.11.8",
|
||||
"admin-lte": "^4.0.0-alpha3",
|
||||
|
1
resources/locales/bg_BG/locales.json
Normal file
1
resources/locales/bg_BG/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/ca_ES/locales.json
Normal file
1
resources/locales/ca_ES/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/cs_CZ/locales.json
Normal file
1
resources/locales/cs_CZ/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/da_DK/locales.json
Normal file
1
resources/locales/da_DK/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/de_DE/locales.json
Normal file
1
resources/locales/de_DE/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/el_GR/locales.json
Normal file
1
resources/locales/el_GR/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/en_GB/locales.json
Normal file
1
resources/locales/en_GB/locales.json
Normal file
File diff suppressed because one or more lines are too long
444
resources/locales/en_US/locales.json
Normal file
444
resources/locales/en_US/locales.json
Normal file
@@ -0,0 +1,444 @@
|
||||
{
|
||||
"af_NA": "Afrikaans (Namibia)",
|
||||
"af_ZA": "Afrikaans (South Africa)",
|
||||
"ak_GH": "Akan (Ghana)",
|
||||
"sq_AL": "Albanian (Albania)",
|
||||
"sq_XK": "Albanian (Kosovo)",
|
||||
"sq_MK": "Albanian (Macedonia)",
|
||||
"am_ET": "Amharic (Ethiopia)",
|
||||
"ar_DZ": "Arabic (Algeria)",
|
||||
"ar_BH": "Arabic (Bahrain)",
|
||||
"ar_TD": "Arabic (Chad)",
|
||||
"ar_KM": "Arabic (Comoros)",
|
||||
"ar_DJ": "Arabic (Djibouti)",
|
||||
"ar_EG": "Arabic (Egypt)",
|
||||
"ar_ER": "Arabic (Eritrea)",
|
||||
"ar_IQ": "Arabic (Iraq)",
|
||||
"ar_IL": "Arabic (Israel)",
|
||||
"ar_JO": "Arabic (Jordan)",
|
||||
"ar_KW": "Arabic (Kuwait)",
|
||||
"ar_LB": "Arabic (Lebanon)",
|
||||
"ar_LY": "Arabic (Libya)",
|
||||
"ar_MR": "Arabic (Mauritania)",
|
||||
"ar_MA": "Arabic (Morocco)",
|
||||
"ar_OM": "Arabic (Oman)",
|
||||
"ar_PS": "Arabic (Palestinian Territories)",
|
||||
"ar_QA": "Arabic (Qatar)",
|
||||
"ar_SA": "Arabic (Saudi Arabia)",
|
||||
"ar_SO": "Arabic (Somalia)",
|
||||
"ar_SS": "Arabic (South Sudan)",
|
||||
"ar_SD": "Arabic (Sudan)",
|
||||
"ar_SY": "Arabic (Syria)",
|
||||
"ar_TN": "Arabic (Tunisia)",
|
||||
"ar_AE": "Arabic (United Arab Emirates)",
|
||||
"ar_EH": "Arabic (Western Sahara)",
|
||||
"ar_YE": "Arabic (Yemen)",
|
||||
"hy_AM": "Armenian (Armenia)",
|
||||
"as_IN": "Assamese (India)",
|
||||
"az_AZ": "Azerbaijani (Azerbaijan)",
|
||||
"az_Cyrl_AZ": "Azerbaijani (Cyrillic, Azerbaijan)",
|
||||
"az_Cyrl": "Azerbaijani (Cyrillic)",
|
||||
"az_Latn_AZ": "Azerbaijani (Latin, Azerbaijan)",
|
||||
"az_Latn": "Azerbaijani (Latin)",
|
||||
"bm_Latn_ML": "Bambara (Latin, Mali)",
|
||||
"bm_Latn": "Bambara (Latin)",
|
||||
"eu_ES": "Basque (Spain)",
|
||||
"be_BY": "Belarusian (Belarus)",
|
||||
"bn_BD": "Bengali (Bangladesh)",
|
||||
"bn_IN": "Bengali (India)",
|
||||
"bs_BA": "Bosnian (Bosnia & Herzegovina)",
|
||||
"bs_Cyrl_BA": "Bosnian (Cyrillic, Bosnia & Herzegovina)",
|
||||
"bs_Cyrl": "Bosnian (Cyrillic)",
|
||||
"bs_Latn_BA": "Bosnian (Latin, Bosnia & Herzegovina)",
|
||||
"bs_Latn": "Bosnian (Latin)",
|
||||
"br_FR": "Breton (France)",
|
||||
"bg_BG": "Bulgarian (Bulgaria)",
|
||||
"my_MM": "Burmese (Myanmar (Burma))",
|
||||
"ca_AD": "Catalan (Andorra)",
|
||||
"ca_FR": "Catalan (France)",
|
||||
"ca_IT": "Catalan (Italy)",
|
||||
"ca_ES": "Catalan (Spain)",
|
||||
"zh_CN": "Chinese (China)",
|
||||
"zh_HK": "Chinese (Hong Kong SAR China)",
|
||||
"zh_MO": "Chinese (Macau SAR China)",
|
||||
"zh_Hans_CN": "Chinese (Simplified, China)",
|
||||
"zh_Hans_HK": "Chinese (Simplified, Hong Kong SAR China)",
|
||||
"zh_Hans_MO": "Chinese (Simplified, Macau SAR China)",
|
||||
"zh_Hans_SG": "Chinese (Simplified, Singapore)",
|
||||
"zh_Hans": "Chinese (Simplified)",
|
||||
"zh_SG": "Chinese (Singapore)",
|
||||
"zh_TW": "Chinese (Taiwan)",
|
||||
"zh_Hant_HK": "Chinese (Traditional, Hong Kong SAR China)",
|
||||
"zh_Hant_MO": "Chinese (Traditional, Macau SAR China)",
|
||||
"zh_Hant_TW": "Chinese (Traditional, Taiwan)",
|
||||
"zh_Hant": "Chinese (Traditional)",
|
||||
"kw_GB": "Cornish (United Kingdom)",
|
||||
"hr_BA": "Croatian (Bosnia & Herzegovina)",
|
||||
"hr_HR": "Croatian (Croatia)",
|
||||
"cs_CZ": "Czech (Czech Republic)",
|
||||
"da_DK": "Danish (Denmark)",
|
||||
"da_GL": "Danish (Greenland)",
|
||||
"nl_AW": "Dutch (Aruba)",
|
||||
"nl_BE": "Dutch (Belgium)",
|
||||
"nl_BQ": "Dutch (Caribbean Netherlands)",
|
||||
"nl_CW": "Dutch (Cura\u00e7ao)",
|
||||
"nl_NL": "Dutch (Netherlands)",
|
||||
"nl_SX": "Dutch (Sint Maarten)",
|
||||
"nl_SR": "Dutch (Suriname)",
|
||||
"dz_BT": "Dzongkha (Bhutan)",
|
||||
"en_AS": "English (American Samoa)",
|
||||
"en_AI": "English (Anguilla)",
|
||||
"en_AG": "English (Antigua & Barbuda)",
|
||||
"en_AU": "English (Australia)",
|
||||
"en_BS": "English (Bahamas)",
|
||||
"en_BB": "English (Barbados)",
|
||||
"en_BE": "English (Belgium)",
|
||||
"en_BZ": "English (Belize)",
|
||||
"en_BM": "English (Bermuda)",
|
||||
"en_BW": "English (Botswana)",
|
||||
"en_IO": "English (British Indian Ocean Territory)",
|
||||
"en_VG": "English (British Virgin Islands)",
|
||||
"en_CM": "English (Cameroon)",
|
||||
"en_CA": "English (Canada)",
|
||||
"en_KY": "English (Cayman Islands)",
|
||||
"en_CX": "English (Christmas Island)",
|
||||
"en_CC": "English (Cocos (Keeling) Islands)",
|
||||
"en_CK": "English (Cook Islands)",
|
||||
"en_DG": "English (Diego Garcia)",
|
||||
"en_DM": "English (Dominica)",
|
||||
"en_ER": "English (Eritrea)",
|
||||
"en_FK": "English (Falkland Islands)",
|
||||
"en_FJ": "English (Fiji)",
|
||||
"en_GM": "English (Gambia)",
|
||||
"en_GH": "English (Ghana)",
|
||||
"en_GI": "English (Gibraltar)",
|
||||
"en_GD": "English (Grenada)",
|
||||
"en_GU": "English (Guam)",
|
||||
"en_GG": "English (Guernsey)",
|
||||
"en_GY": "English (Guyana)",
|
||||
"en_HK": "English (Hong Kong SAR China)",
|
||||
"en_IN": "English (India)",
|
||||
"en_IE": "English (Ireland)",
|
||||
"en_IM": "English (Isle of Man)",
|
||||
"en_JM": "English (Jamaica)",
|
||||
"en_JE": "English (Jersey)",
|
||||
"en_KE": "English (Kenya)",
|
||||
"en_KI": "English (Kiribati)",
|
||||
"en_LS": "English (Lesotho)",
|
||||
"en_LR": "English (Liberia)",
|
||||
"en_MO": "English (Macau SAR China)",
|
||||
"en_MG": "English (Madagascar)",
|
||||
"en_MW": "English (Malawi)",
|
||||
"en_MY": "English (Malaysia)",
|
||||
"en_MT": "English (Malta)",
|
||||
"en_MH": "English (Marshall Islands)",
|
||||
"en_MU": "English (Mauritius)",
|
||||
"en_FM": "English (Micronesia)",
|
||||
"en_MS": "English (Montserrat)",
|
||||
"en_NA": "English (Namibia)",
|
||||
"en_NR": "English (Nauru)",
|
||||
"en_NZ": "English (New Zealand)",
|
||||
"en_NG": "English (Nigeria)",
|
||||
"en_NU": "English (Niue)",
|
||||
"en_NF": "English (Norfolk Island)",
|
||||
"en_MP": "English (Northern Mariana Islands)",
|
||||
"en_PK": "English (Pakistan)",
|
||||
"en_PW": "English (Palau)",
|
||||
"en_PG": "English (Papua New Guinea)",
|
||||
"en_PH": "English (Philippines)",
|
||||
"en_PN": "English (Pitcairn Islands)",
|
||||
"en_PR": "English (Puerto Rico)",
|
||||
"en_RW": "English (Rwanda)",
|
||||
"en_WS": "English (Samoa)",
|
||||
"en_SC": "English (Seychelles)",
|
||||
"en_SL": "English (Sierra Leone)",
|
||||
"en_SG": "English (Singapore)",
|
||||
"en_SX": "English (Sint Maarten)",
|
||||
"en_SB": "English (Solomon Islands)",
|
||||
"en_ZA": "English (South Africa)",
|
||||
"en_SS": "English (South Sudan)",
|
||||
"en_SH": "English (St. Helena)",
|
||||
"en_KN": "English (St. Kitts & Nevis)",
|
||||
"en_LC": "English (St. Lucia)",
|
||||
"en_VC": "English (St. Vincent & Grenadines)",
|
||||
"en_SD": "English (Sudan)",
|
||||
"en_SZ": "English (Swaziland)",
|
||||
"en_TZ": "English (Tanzania)",
|
||||
"en_TK": "English (Tokelau)",
|
||||
"en_TO": "English (Tonga)",
|
||||
"en_TT": "English (Trinidad & Tobago)",
|
||||
"en_TC": "English (Turks & Caicos Islands)",
|
||||
"en_TV": "English (Tuvalu)",
|
||||
"en_UM": "English (U.S. Outlying Islands)",
|
||||
"en_VI": "English (U.S. Virgin Islands)",
|
||||
"en_UG": "English (Uganda)",
|
||||
"en_GB": "English (United Kingdom)",
|
||||
"en_US": "English (United States)",
|
||||
"en_VU": "English (Vanuatu)",
|
||||
"en_ZM": "English (Zambia)",
|
||||
"en_ZW": "English (Zimbabwe)",
|
||||
"et_EE": "Estonian (Estonia)",
|
||||
"ee_GH": "Ewe (Ghana)",
|
||||
"ee_TG": "Ewe (Togo)",
|
||||
"fo_FO": "Faroese (Faroe Islands)",
|
||||
"fi_FI": "Finnish (Finland)",
|
||||
"fr_DZ": "French (Algeria)",
|
||||
"fr_BE": "French (Belgium)",
|
||||
"fr_BJ": "French (Benin)",
|
||||
"fr_BF": "French (Burkina Faso)",
|
||||
"fr_BI": "French (Burundi)",
|
||||
"fr_CM": "French (Cameroon)",
|
||||
"fr_CA": "French (Canada)",
|
||||
"fr_CF": "French (Central African Republic)",
|
||||
"fr_TD": "French (Chad)",
|
||||
"fr_KM": "French (Comoros)",
|
||||
"fr_CG": "French (Congo - Brazzaville)",
|
||||
"fr_CD": "French (Congo - Kinshasa)",
|
||||
"fr_CI": "French (C\u00f4te d\u2019Ivoire)",
|
||||
"fr_DJ": "French (Djibouti)",
|
||||
"fr_GQ": "French (Equatorial Guinea)",
|
||||
"fr_FR": "French (France)",
|
||||
"fr_GF": "French (French Guiana)",
|
||||
"fr_PF": "French (French Polynesia)",
|
||||
"fr_GA": "French (Gabon)",
|
||||
"fr_GP": "French (Guadeloupe)",
|
||||
"fr_GN": "French (Guinea)",
|
||||
"fr_HT": "French (Haiti)",
|
||||
"fr_LU": "French (Luxembourg)",
|
||||
"fr_MG": "French (Madagascar)",
|
||||
"fr_ML": "French (Mali)",
|
||||
"fr_MQ": "French (Martinique)",
|
||||
"fr_MR": "French (Mauritania)",
|
||||
"fr_MU": "French (Mauritius)",
|
||||
"fr_YT": "French (Mayotte)",
|
||||
"fr_MC": "French (Monaco)",
|
||||
"fr_MA": "French (Morocco)",
|
||||
"fr_NC": "French (New Caledonia)",
|
||||
"fr_NE": "French (Niger)",
|
||||
"fr_RE": "French (R\u00e9union)",
|
||||
"fr_RW": "French (Rwanda)",
|
||||
"fr_SN": "French (Senegal)",
|
||||
"fr_SC": "French (Seychelles)",
|
||||
"fr_BL": "French (St. Barth\u00e9lemy)",
|
||||
"fr_MF": "French (St. Martin)",
|
||||
"fr_PM": "French (St. Pierre & Miquelon)",
|
||||
"fr_CH": "French (Switzerland)",
|
||||
"fr_SY": "French (Syria)",
|
||||
"fr_TG": "French (Togo)",
|
||||
"fr_TN": "French (Tunisia)",
|
||||
"fr_VU": "French (Vanuatu)",
|
||||
"fr_WF": "French (Wallis & Futuna)",
|
||||
"ff_CM": "Fulah (Cameroon)",
|
||||
"ff_GN": "Fulah (Guinea)",
|
||||
"ff_MR": "Fulah (Mauritania)",
|
||||
"ff_SN": "Fulah (Senegal)",
|
||||
"gl_ES": "Galician (Spain)",
|
||||
"lg_UG": "Ganda (Uganda)",
|
||||
"ka_GE": "Georgian (Georgia)",
|
||||
"de_AT": "German (Austria)",
|
||||
"de_BE": "German (Belgium)",
|
||||
"de_DE": "German (Germany)",
|
||||
"de_LI": "German (Liechtenstein)",
|
||||
"de_LU": "German (Luxembourg)",
|
||||
"de_CH": "German (Switzerland)",
|
||||
"el_CY": "Greek (Cyprus)",
|
||||
"el_GR": "Greek (Greece)",
|
||||
"gu_IN": "Gujarati (India)",
|
||||
"ha_GH": "Hausa (Ghana)",
|
||||
"ha_Latn_GH": "Hausa (Latin, Ghana)",
|
||||
"ha_Latn_NE": "Hausa (Latin, Niger)",
|
||||
"ha_Latn_NG": "Hausa (Latin, Nigeria)",
|
||||
"ha_Latn": "Hausa (Latin)",
|
||||
"ha_NE": "Hausa (Niger)",
|
||||
"ha_NG": "Hausa (Nigeria)",
|
||||
"he_IL": "Hebrew (Israel)",
|
||||
"hi_IN": "Hindi (India)",
|
||||
"hu_HU": "Hungarian (Hungary)",
|
||||
"is_IS": "Icelandic (Iceland)",
|
||||
"ig_NG": "Igbo (Nigeria)",
|
||||
"id_ID": "Indonesian (Indonesia)",
|
||||
"ga_IE": "Irish (Ireland)",
|
||||
"it_IT": "Italian (Italy)",
|
||||
"it_SM": "Italian (San Marino)",
|
||||
"it_CH": "Italian (Switzerland)",
|
||||
"ja_JP": "Japanese (Japan)",
|
||||
"kl_GL": "Kalaallisut (Greenland)",
|
||||
"kn_IN": "Kannada (India)",
|
||||
"ks_Arab_IN": "Kashmiri (Arabic, India)",
|
||||
"ks_Arab": "Kashmiri (Arabic)",
|
||||
"ks_IN": "Kashmiri (India)",
|
||||
"kk_Cyrl_KZ": "Kazakh (Cyrillic, Kazakhstan)",
|
||||
"kk_Cyrl": "Kazakh (Cyrillic)",
|
||||
"kk_KZ": "Kazakh (Kazakhstan)",
|
||||
"km_KH": "Khmer (Cambodia)",
|
||||
"ki_KE": "Kikuyu (Kenya)",
|
||||
"rw_RW": "Kinyarwanda (Rwanda)",
|
||||
"ko_KP": "Korean (North Korea)",
|
||||
"ko_KR": "Korean (South Korea)",
|
||||
"ky_Cyrl_KG": "Kyrgyz (Cyrillic, Kyrgyzstan)",
|
||||
"ky_Cyrl": "Kyrgyz (Cyrillic)",
|
||||
"ky_KG": "Kyrgyz (Kyrgyzstan)",
|
||||
"lo_LA": "Lao (Laos)",
|
||||
"lv_LV": "Latvian (Latvia)",
|
||||
"ln_AO": "Lingala (Angola)",
|
||||
"ln_CF": "Lingala (Central African Republic)",
|
||||
"ln_CG": "Lingala (Congo - Brazzaville)",
|
||||
"ln_CD": "Lingala (Congo - Kinshasa)",
|
||||
"lt_LT": "Lithuanian (Lithuania)",
|
||||
"lu_CD": "Luba-Katanga (Congo - Kinshasa)",
|
||||
"lb_LU": "Luxembourgish (Luxembourg)",
|
||||
"mk_MK": "Macedonian (Macedonia)",
|
||||
"mg_MG": "Malagasy (Madagascar)",
|
||||
"ms_BN": "Malay (Brunei)",
|
||||
"ms_Latn_BN": "Malay (Latin, Brunei)",
|
||||
"ms_Latn_MY": "Malay (Latin, Malaysia)",
|
||||
"ms_Latn_SG": "Malay (Latin, Singapore)",
|
||||
"ms_Latn": "Malay (Latin)",
|
||||
"ms_MY": "Malay (Malaysia)",
|
||||
"ms_SG": "Malay (Singapore)",
|
||||
"ml_IN": "Malayalam (India)",
|
||||
"mt_MT": "Maltese (Malta)",
|
||||
"gv_IM": "Manx (Isle of Man)",
|
||||
"mr_IN": "Marathi (India)",
|
||||
"mn_Cyrl_MN": "Mongolian (Cyrillic, Mongolia)",
|
||||
"mn_Cyrl": "Mongolian (Cyrillic)",
|
||||
"mn_MN": "Mongolian (Mongolia)",
|
||||
"ne_IN": "Nepali (India)",
|
||||
"ne_NP": "Nepali (Nepal)",
|
||||
"nd_ZW": "North Ndebele (Zimbabwe)",
|
||||
"se_FI": "Northern Sami (Finland)",
|
||||
"se_NO": "Northern Sami (Norway)",
|
||||
"se_SE": "Northern Sami (Sweden)",
|
||||
"no_NO": "Norwegian (Norway)",
|
||||
"nb_NO": "Norwegian Bokm\u00e5l (Norway)",
|
||||
"nb_SJ": "Norwegian Bokm\u00e5l (Svalbard & Jan Mayen)",
|
||||
"nn_NO": "Norwegian Nynorsk (Norway)",
|
||||
"or_IN": "Oriya (India)",
|
||||
"om_ET": "Oromo (Ethiopia)",
|
||||
"om_KE": "Oromo (Kenya)",
|
||||
"os_GE": "Ossetic (Georgia)",
|
||||
"os_RU": "Ossetic (Russia)",
|
||||
"ps_AF": "Pashto (Afghanistan)",
|
||||
"fa_AF": "Persian (Afghanistan)",
|
||||
"fa_IR": "Persian (Iran)",
|
||||
"pl_PL": "Polish (Poland)",
|
||||
"pt_AO": "Portuguese (Angola)",
|
||||
"pt_BR": "Portuguese (Brazil)",
|
||||
"pt_CV": "Portuguese (Cape Verde)",
|
||||
"pt_GW": "Portuguese (Guinea-Bissau)",
|
||||
"pt_MO": "Portuguese (Macau SAR China)",
|
||||
"pt_MZ": "Portuguese (Mozambique)",
|
||||
"pt_PT": "Portuguese (Portugal)",
|
||||
"pt_ST": "Portuguese (S\u00e3o Tom\u00e9 & Pr\u00edncipe)",
|
||||
"pt_TL": "Portuguese (Timor-Leste)",
|
||||
"pa_Arab_PK": "Punjabi (Arabic, Pakistan)",
|
||||
"pa_Arab": "Punjabi (Arabic)",
|
||||
"pa_Guru_IN": "Punjabi (Gurmukhi, India)",
|
||||
"pa_Guru": "Punjabi (Gurmukhi)",
|
||||
"pa_IN": "Punjabi (India)",
|
||||
"pa_PK": "Punjabi (Pakistan)",
|
||||
"qu_BO": "Quechua (Bolivia)",
|
||||
"qu_EC": "Quechua (Ecuador)",
|
||||
"qu_PE": "Quechua (Peru)",
|
||||
"ro_MD": "Romanian (Moldova)",
|
||||
"ro_RO": "Romanian (Romania)",
|
||||
"rm_CH": "Romansh (Switzerland)",
|
||||
"rn_BI": "Rundi (Burundi)",
|
||||
"ru_BY": "Russian (Belarus)",
|
||||
"ru_KZ": "Russian (Kazakhstan)",
|
||||
"ru_KG": "Russian (Kyrgyzstan)",
|
||||
"ru_MD": "Russian (Moldova)",
|
||||
"ru_RU": "Russian (Russia)",
|
||||
"ru_UA": "Russian (Ukraine)",
|
||||
"sg_CF": "Sango (Central African Republic)",
|
||||
"gd_GB": "Scottish Gaelic (United Kingdom)",
|
||||
"sr_BA": "Serbian (Bosnia & Herzegovina)",
|
||||
"sr_Cyrl_BA": "Serbian (Cyrillic, Bosnia & Herzegovina)",
|
||||
"sr_Cyrl_XK": "Serbian (Cyrillic, Kosovo)",
|
||||
"sr_Cyrl_ME": "Serbian (Cyrillic, Montenegro)",
|
||||
"sr_Cyrl_RS": "Serbian (Cyrillic, Serbia)",
|
||||
"sr_Cyrl": "Serbian (Cyrillic)",
|
||||
"sr_XK": "Serbian (Kosovo)",
|
||||
"sr_Latn_BA": "Serbian (Latin, Bosnia & Herzegovina)",
|
||||
"sr_Latn_XK": "Serbian (Latin, Kosovo)",
|
||||
"sr_Latn_ME": "Serbian (Latin, Montenegro)",
|
||||
"sr_Latn_RS": "Serbian (Latin, Serbia)",
|
||||
"sr_Latn": "Serbian (Latin)",
|
||||
"sr_ME": "Serbian (Montenegro)",
|
||||
"sr_RS": "Serbian (Serbia)",
|
||||
"sh_BA": "Serbo-Croatian (Bosnia & Herzegovina)",
|
||||
"sn_ZW": "Shona (Zimbabwe)",
|
||||
"ii_CN": "Sichuan Yi (China)",
|
||||
"si_LK": "Sinhala (Sri Lanka)",
|
||||
"sk_SK": "Slovak (Slovakia)",
|
||||
"sl_SI": "Slovenian (Slovenia)",
|
||||
"so_DJ": "Somali (Djibouti)",
|
||||
"so_ET": "Somali (Ethiopia)",
|
||||
"so_KE": "Somali (Kenya)",
|
||||
"so_SO": "Somali (Somalia)",
|
||||
"es_AR": "Spanish (Argentina)",
|
||||
"es_BO": "Spanish (Bolivia)",
|
||||
"es_IC": "Spanish (Canary Islands)",
|
||||
"es_EA": "Spanish (Ceuta & Melilla)",
|
||||
"es_CL": "Spanish (Chile)",
|
||||
"es_CO": "Spanish (Colombia)",
|
||||
"es_CR": "Spanish (Costa Rica)",
|
||||
"es_CU": "Spanish (Cuba)",
|
||||
"es_DO": "Spanish (Dominican Republic)",
|
||||
"es_EC": "Spanish (Ecuador)",
|
||||
"es_SV": "Spanish (El Salvador)",
|
||||
"es_GQ": "Spanish (Equatorial Guinea)",
|
||||
"es_GT": "Spanish (Guatemala)",
|
||||
"es_HN": "Spanish (Honduras)",
|
||||
"es_MX": "Spanish (Mexico)",
|
||||
"es_NI": "Spanish (Nicaragua)",
|
||||
"es_PA": "Spanish (Panama)",
|
||||
"es_PY": "Spanish (Paraguay)",
|
||||
"es_PE": "Spanish (Peru)",
|
||||
"es_PH": "Spanish (Philippines)",
|
||||
"es_PR": "Spanish (Puerto Rico)",
|
||||
"es_ES": "Spanish (Spain)",
|
||||
"es_US": "Spanish (United States)",
|
||||
"es_UY": "Spanish (Uruguay)",
|
||||
"es_VE": "Spanish (Venezuela)",
|
||||
"sw_KE": "Swahili (Kenya)",
|
||||
"sw_TZ": "Swahili (Tanzania)",
|
||||
"sw_UG": "Swahili (Uganda)",
|
||||
"sv_AX": "Swedish (\u00c5land Islands)",
|
||||
"sv_FI": "Swedish (Finland)",
|
||||
"sv_SE": "Swedish (Sweden)",
|
||||
"tl_PH": "Tagalog (Philippines)",
|
||||
"ta_IN": "Tamil (India)",
|
||||
"ta_MY": "Tamil (Malaysia)",
|
||||
"ta_SG": "Tamil (Singapore)",
|
||||
"ta_LK": "Tamil (Sri Lanka)",
|
||||
"te_IN": "Telugu (India)",
|
||||
"th_TH": "Thai (Thailand)",
|
||||
"bo_CN": "Tibetan (China)",
|
||||
"bo_IN": "Tibetan (India)",
|
||||
"ti_ER": "Tigrinya (Eritrea)",
|
||||
"ti_ET": "Tigrinya (Ethiopia)",
|
||||
"to_TO": "Tongan (Tonga)",
|
||||
"tr_CY": "Turkish (Cyprus)",
|
||||
"tr_TR": "Turkish (Turkey)",
|
||||
"uk_UA": "Ukrainian (Ukraine)",
|
||||
"ur_IN": "Urdu (India)",
|
||||
"ur_PK": "Urdu (Pakistan)",
|
||||
"ug_Arab_CN": "Uyghur (Arabic, China)",
|
||||
"ug_Arab": "Uyghur (Arabic)",
|
||||
"ug_CN": "Uyghur (China)",
|
||||
"uz_AF": "Uzbek (Afghanistan)",
|
||||
"uz_Arab_AF": "Uzbek (Arabic, Afghanistan)",
|
||||
"uz_Arab": "Uzbek (Arabic)",
|
||||
"uz_Cyrl_UZ": "Uzbek (Cyrillic, Uzbekistan)",
|
||||
"uz_Cyrl": "Uzbek (Cyrillic)",
|
||||
"uz_Latn_UZ": "Uzbek (Latin, Uzbekistan)",
|
||||
"uz_Latn": "Uzbek (Latin)",
|
||||
"uz_UZ": "Uzbek (Uzbekistan)",
|
||||
"vi_VN": "Vietnamese (Vietnam)",
|
||||
"cy_GB": "Welsh (United Kingdom)",
|
||||
"fy_NL": "Western Frisian (Netherlands)",
|
||||
"yo_BJ": "Yoruba (Benin)",
|
||||
"yo_NG": "Yoruba (Nigeria)",
|
||||
"zu_ZA": "Zulu (South Africa)"
|
||||
}
|
1
resources/locales/es_ES/locales.json
Normal file
1
resources/locales/es_ES/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/fi_FI/locales.json
Normal file
1
resources/locales/fi_FI/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/fr_FR/locales.json
Normal file
1
resources/locales/fr_FR/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/hu_HU/locales.json
Normal file
1
resources/locales/hu_HU/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/id_ID/locales.json
Normal file
1
resources/locales/id_ID/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/it_IT/locales.json
Normal file
1
resources/locales/it_IT/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/ja_JP/locales.json
Normal file
1
resources/locales/ja_JP/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/ko_KR/locales.json
Normal file
1
resources/locales/ko_KR/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/nb_NO/locales.json
Normal file
1
resources/locales/nb_NO/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/nl_NL/locales.json
Normal file
1
resources/locales/nl_NL/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/nn_NO/locales.json
Normal file
1
resources/locales/nn_NO/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/pl_PL/locales.json
Normal file
1
resources/locales/pl_PL/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/pt_BR/locales.json
Normal file
1
resources/locales/pt_BR/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/pt_PT/locales.json
Normal file
1
resources/locales/pt_PT/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/ro_RO/locales.json
Normal file
1
resources/locales/ro_RO/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/ru_RU/locales.json
Normal file
1
resources/locales/ru_RU/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/sk_SK/locales.json
Normal file
1
resources/locales/sk_SK/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/sl_SI/locales.json
Normal file
1
resources/locales/sl_SI/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/sv_SE/locales.json
Normal file
1
resources/locales/sv_SE/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/th_TH/locales.json
Normal file
1
resources/locales/th_TH/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/tr_TR/locales.json
Normal file
1
resources/locales/tr_TR/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/uk_UA/locales.json
Normal file
1
resources/locales/uk_UA/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/vi_VN/locales.json
Normal file
1
resources/locales/vi_VN/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/zh_CN/locales.json
Normal file
1
resources/locales/zh_CN/locales.json
Normal file
File diff suppressed because one or more lines are too long
1
resources/locales/zh_TW/locales.json
Normal file
1
resources/locales/zh_TW/locales.json
Normal file
File diff suppressed because one or more lines are too long
@@ -63,6 +63,8 @@
|
||||
<div class="btn-group btn-group-xs">
|
||||
<a href="{{ route('transactions.edit', [journal.transaction_group_id]) }}" class="btn btn-xs btn-default"><span
|
||||
class="fa fa-fw fa-pencil"></span></a>
|
||||
<a href="{{ route('transactions.delete', [journal.transaction_group_id]) }}" class="btn btn-danger"><span
|
||||
class="fa fa-trash"></span></a>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
@@ -78,7 +80,7 @@
|
||||
{% endif %}
|
||||
|
||||
{% if journal.transaction_type_type == 'Transfer' %}
|
||||
<span class="fa fa-exchange fa-fw" title="{{ trans('firefly.Deposit') }}"></span>
|
||||
<span class="fa fa-exchange fa-fw" title="{{ trans('firefly.Transfer') }}"></span>
|
||||
{% endif %}
|
||||
|
||||
{% if journal.transaction_type_type == 'Reconciliation' %}
|
||||
|
@@ -47,7 +47,7 @@
|
||||
{% endif %}
|
||||
|
||||
{% if transaction.transaction_type_type == 'Transfer' %}
|
||||
<span class="fa fa-exchange fa-fw" title="{{ trans('firefly.Deposit') }}"></span>
|
||||
<span class="fa fa-exchange fa-fw" title="{{ trans('firefly.Transfer') }}"></span>
|
||||
{% endif %}
|
||||
|
||||
{% if transaction.transaction_type_type == 'Reconciliation' %}
|
||||
|
@@ -615,7 +615,9 @@ Route::group(
|
||||
Route::delete('{recurrence}', ['uses' => 'DestroyController@destroy', 'as' => 'delete']);
|
||||
|
||||
Route::get('{recurrence}/transactions', ['uses' => 'ListController@transactions', 'as' => 'transactions']);
|
||||
Route::post('trigger', ['uses' => 'RecurrenceController@trigger', 'as' => 'trigger']);
|
||||
|
||||
// controller does not exist:
|
||||
// Route::post('trigger', ['uses' => 'RecurrenceController@trigger', 'as' => 'trigger']);
|
||||
}
|
||||
);
|
||||
|
||||
|
@@ -25,6 +25,38 @@ if (!defined('DATEFORMAT')) {
|
||||
define('DATEFORMAT', '(19|20)[0-9]{2}-?[0-9]{2}-?[0-9]{2}');
|
||||
}
|
||||
|
||||
// laravel passport routes
|
||||
Route::group(
|
||||
[
|
||||
'as' => 'passport.',
|
||||
'prefix' => config('passport.path', 'oauth'),
|
||||
'namespace' => '\Laravel\Passport\Http\Controllers',
|
||||
],
|
||||
function (): void {
|
||||
// routes with no extra middleware
|
||||
Route::post('/token', ['uses' => 'AccessTokenController@issueToken', 'as' => 'token', 'middleware' => 'throttle']);
|
||||
Route::get('/authorize', ['uses' => 'AuthorizationController@authorize', 'as' => 'authorizations.authorize', 'middleware' => 'user-full-auth']);
|
||||
|
||||
// the rest
|
||||
$guard = config('passport.guard', null);
|
||||
Route::middleware(['web', $guard ? 'auth:'.$guard : 'auth'])->group(function (): void {
|
||||
Route::post('/token/refresh', ['uses' => 'TransientTokenController@refresh', 'as' => 'token.refresh']);
|
||||
Route::post('/authorize', ['uses' => 'ApproveAuthorizationController@approve', 'as' => 'authorizations.approve']);
|
||||
Route::delete('/authorize', ['uses' => 'DenyAuthorizationController@deny', 'as' => 'authorizations.deny']);
|
||||
Route::get('/tokens', ['uses' => 'AuthorizedAccessTokenController@forUser', 'as' => 'tokens.index']);
|
||||
Route::delete('/tokens/{token_id}', ['uses' => 'AuthorizedAccessTokenController@destroy', 'as' => 'tokens.destroy']);
|
||||
Route::get('/clients', ['uses' => 'ClientController@forUser', 'as' => 'clients.index']);
|
||||
Route::post('/clients', ['uses' => 'ClientController@store', 'as' => 'clients.store']);
|
||||
Route::put('/clients/{client_id}', ['uses' => 'ClientController@update', 'as' => 'clients.update']);
|
||||
Route::delete('/clients/{client_id}', ['uses' => 'ClientController@destroy', 'as' => 'clients.destroy']);
|
||||
Route::get('/scopes', ['uses' => 'ScopeController@all', 'as' => 'scopes.index']);
|
||||
Route::get('/personal-access-tokens', ['uses' => 'PersonalAccessTokenController@forUser', 'as' => 'personal.tokens.index']);
|
||||
Route::post('/personal-access-tokens', ['uses' => 'PersonalAccessTokenController@store', 'as' => 'personal.tokens.store']);
|
||||
Route::delete('/personal-access-tokens/{token_id}', ['uses' => 'PersonalAccessTokenController@destroy', 'as' => 'personal.tokens.destroy']);
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
Route::group(
|
||||
[
|
||||
'namespace' => 'FireflyIII\Http\Controllers\System',
|
||||
@@ -726,7 +758,7 @@ Route::group(
|
||||
Route::get('frontpage/piggy-banks', ['uses' => 'Json\FrontpageController@piggyBanks', 'as' => 'fp.piggy-banks']);
|
||||
|
||||
// currency conversion:
|
||||
Route::get('rate/{fromCurrencyCode}/{toCurrencyCode}/{date}', ['uses' => 'Json\ExchangeController@getRate', 'as' => 'rate']);
|
||||
// Route::get('rate/{fromCurrencyCode}/{toCurrencyCode}/{date}', ['uses' => 'Json\ExchangeController@getRate', 'as' => 'rate']);
|
||||
|
||||
// intro things:
|
||||
Route::post('intro/finished/{route}/{specificPage?}', ['uses' => 'Json\IntroController@postFinished', 'as' => 'intro.finished']);
|
||||
@@ -1355,7 +1387,7 @@ Route::group(
|
||||
Route::get('', ['uses' => 'UserGroup\IndexController@index', 'as' => 'index']);
|
||||
Route::get('create', ['uses' => 'UserGroup\CreateController@create', 'as' => 'create']);
|
||||
Route::get('edit/{userGroup}', ['uses' => 'UserGroup\EditController@edit', 'as' => 'edit']);
|
||||
Route::get('show/{userGroup}', ['uses' => 'UserGroup\ShowController@show', 'as' => 'show']);
|
||||
// Route::get('show/{userGroup}', ['uses' => 'UserGroup\ShowController@show', 'as' => 'show']);
|
||||
|
||||
// Route::post('rescan/{bill}', ['uses' => 'Bill\ShowController@rescan', 'as' => 'rescan']);
|
||||
// Route::get('delete/{bill}', ['uses' => 'Bill\DeleteController@delete', 'as' => 'delete']);
|
||||
|
Reference in New Issue
Block a user