From 43603c49909d0f438b48086e181bd662a64a9887 Mon Sep 17 00:00:00 2001 From: JC5 Date: Sat, 28 Jun 2025 09:25:23 +0200 Subject: [PATCH 1/9] =?UTF-8?q?=F0=9F=A4=96=20Auto=20commit=20for=20releas?= =?UTF-8?q?e=20'develop'=20on=202025-06-28?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/firefly.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/firefly.php b/config/firefly.php index fb5d7949a5..6d4d7d1d96 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -78,7 +78,7 @@ return [ 'running_balance_column' => env('USE_RUNNING_BALANCE', false), // see cer.php for exchange rates feature flag. ], - 'version' => '6.2.19', + 'version' => 'develop/2025-06-28', 'api_version' => '2.1.0', // field is no longer used. 'db_version' => 25, From f0a1913dc66697a447af945e7ef2bd112802903f Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 29 Jun 2025 06:46:40 +0200 Subject: [PATCH 2/9] Enable new query parser by default. --- .env.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 282c144904..7e9d697581 100644 --- a/.env.example +++ b/.env.example @@ -329,7 +329,7 @@ FIREFLY_III_LAYOUT=v1 # Which Query Parser implementation to use for the search engine and rules # 'new' is experimental, 'legacy' is the classic one # -QUERY_PARSER_IMPLEMENTATION=legacy +QUERY_PARSER_IMPLEMENTATION=new # # Please make sure this URL matches the external URL of your Firefly III installation. From 41d4fab071958baedda5b2aebca69b7990965d3f Mon Sep 17 00:00:00 2001 From: JC5 Date: Sun, 29 Jun 2025 16:44:10 +0200 Subject: [PATCH 3/9] =?UTF-8?q?=F0=9F=A4=96=20Auto=20commit=20for=20releas?= =?UTF-8?q?e=20'develop'=20on=202025-06-29?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .ci/php-cs-fixer/composer.lock | 12 +-- composer.lock | 134 ++++++++++++------------ config/firefly.php | 2 +- package-lock.json | 18 ++-- resources/assets/v1/src/locales/ca.json | 26 ++--- 5 files changed, 96 insertions(+), 96 deletions(-) diff --git a/.ci/php-cs-fixer/composer.lock b/.ci/php-cs-fixer/composer.lock index 4967d366a8..4ad923fd42 100644 --- a/.ci/php-cs-fixer/composer.lock +++ b/.ci/php-cs-fixer/composer.lock @@ -1256,16 +1256,16 @@ }, { "name": "symfony/console", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44" + "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44", + "url": "https://api.github.com/repos/symfony/console/zipball/9e27aecde8f506ba0fd1d9989620c04a87697101", + "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101", "shasum": "" }, "require": { @@ -1330,7 +1330,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.0" + "source": "https://github.com/symfony/console/tree/v7.3.1" }, "funding": [ { @@ -1346,7 +1346,7 @@ "type": "tidelift" } ], - "time": "2025-05-24T10:34:04+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/deprecation-contracts", diff --git a/composer.lock b/composer.lock index fc34e67d23..d52168a813 100644 --- a/composer.lock +++ b/composer.lock @@ -6407,16 +6407,16 @@ }, { "name": "symfony/cache", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "c4b217b578c11ec764867aa0c73e602c602965de" + "reference": "a7c6caa9d6113cebfb3020b427bcb021ebfdfc9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/c4b217b578c11ec764867aa0c73e602c602965de", - "reference": "c4b217b578c11ec764867aa0c73e602c602965de", + "url": "https://api.github.com/repos/symfony/cache/zipball/a7c6caa9d6113cebfb3020b427bcb021ebfdfc9e", + "reference": "a7c6caa9d6113cebfb3020b427bcb021ebfdfc9e", "shasum": "" }, "require": { @@ -6485,7 +6485,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.3.0" + "source": "https://github.com/symfony/cache/tree/v7.3.1" }, "funding": [ { @@ -6501,7 +6501,7 @@ "type": "tidelift" } ], - "time": "2025-05-06T19:00:13+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/cache-contracts", @@ -6655,16 +6655,16 @@ }, { "name": "symfony/console", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44" + "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44", + "url": "https://api.github.com/repos/symfony/console/zipball/9e27aecde8f506ba0fd1d9989620c04a87697101", + "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101", "shasum": "" }, "require": { @@ -6729,7 +6729,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.0" + "source": "https://github.com/symfony/console/tree/v7.3.1" }, "funding": [ { @@ -6745,7 +6745,7 @@ "type": "tidelift" } ], - "time": "2025-05-24T10:34:04+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/css-selector", @@ -6881,16 +6881,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "cf68d225bc43629de4ff54778029aee6dc191b83" + "reference": "35b55b166f6752d6aaf21aa042fc5ed280fce235" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/cf68d225bc43629de4ff54778029aee6dc191b83", - "reference": "cf68d225bc43629de4ff54778029aee6dc191b83", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/35b55b166f6752d6aaf21aa042fc5ed280fce235", + "reference": "35b55b166f6752d6aaf21aa042fc5ed280fce235", "shasum": "" }, "require": { @@ -6938,7 +6938,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.3.0" + "source": "https://github.com/symfony/error-handler/tree/v7.3.1" }, "funding": [ { @@ -6954,7 +6954,7 @@ "type": "tidelift" } ], - "time": "2025-05-29T07:19:49+00:00" + "time": "2025-06-13T07:48:40+00:00" }, { "name": "symfony/event-dispatcher", @@ -7242,16 +7242,16 @@ }, { "name": "symfony/http-client", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "57e4fb86314015a695a750ace358d07a7e37b8a9" + "reference": "4403d87a2c16f33345dca93407a8714ee8c05a64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/57e4fb86314015a695a750ace358d07a7e37b8a9", - "reference": "57e4fb86314015a695a750ace358d07a7e37b8a9", + "url": "https://api.github.com/repos/symfony/http-client/zipball/4403d87a2c16f33345dca93407a8714ee8c05a64", + "reference": "4403d87a2c16f33345dca93407a8714ee8c05a64", "shasum": "" }, "require": { @@ -7263,6 +7263,7 @@ }, "conflict": { "amphp/amp": "<2.5", + "amphp/socket": "<1.1", "php-http/discovery": "<1.15", "symfony/http-foundation": "<6.4" }, @@ -7275,7 +7276,6 @@ "require-dev": { "amphp/http-client": "^4.2.1|^5.0", "amphp/http-tunnel": "^1.0|^2.0", - "amphp/socket": "^1.1", "guzzlehttp/promises": "^1.4|^2.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", @@ -7317,7 +7317,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.3.0" + "source": "https://github.com/symfony/http-client/tree/v7.3.1" }, "funding": [ { @@ -7333,7 +7333,7 @@ "type": "tidelift" } ], - "time": "2025-05-02T08:23:16+00:00" + "time": "2025-06-28T07:58:39+00:00" }, { "name": "symfony/http-client-contracts", @@ -7415,16 +7415,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "4236baf01609667d53b20371486228231eb135fd" + "reference": "23dd60256610c86a3414575b70c596e5deff6ed9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4236baf01609667d53b20371486228231eb135fd", - "reference": "4236baf01609667d53b20371486228231eb135fd", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/23dd60256610c86a3414575b70c596e5deff6ed9", + "reference": "23dd60256610c86a3414575b70c596e5deff6ed9", "shasum": "" }, "require": { @@ -7474,7 +7474,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.3.0" + "source": "https://github.com/symfony/http-foundation/tree/v7.3.1" }, "funding": [ { @@ -7490,20 +7490,20 @@ "type": "tidelift" } ], - "time": "2025-05-12T14:48:23+00:00" + "time": "2025-06-23T15:07:14+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f" + "reference": "1644879a66e4aa29c36fe33dfa6c54b450ce1831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ac7b8e163e8c83dce3abcc055a502d4486051a9f", - "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1644879a66e4aa29c36fe33dfa6c54b450ce1831", + "reference": "1644879a66e4aa29c36fe33dfa6c54b450ce1831", "shasum": "" }, "require": { @@ -7588,7 +7588,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.3.0" + "source": "https://github.com/symfony/http-kernel/tree/v7.3.1" }, "funding": [ { @@ -7604,20 +7604,20 @@ "type": "tidelift" } ], - "time": "2025-05-29T07:47:32+00:00" + "time": "2025-06-28T08:24:55+00:00" }, { "name": "symfony/mailer", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c" + "reference": "b5db5105b290bdbea5ab27b89c69effcf1cb3368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/0f375bbbde96ae8c78e4aa3e63aabd486e33364c", - "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c", + "url": "https://api.github.com/repos/symfony/mailer/zipball/b5db5105b290bdbea5ab27b89c69effcf1cb3368", + "reference": "b5db5105b290bdbea5ab27b89c69effcf1cb3368", "shasum": "" }, "require": { @@ -7668,7 +7668,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.3.0" + "source": "https://github.com/symfony/mailer/tree/v7.3.1" }, "funding": [ { @@ -7684,20 +7684,20 @@ "type": "tidelift" } ], - "time": "2025-04-04T09:51:09+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/mailgun-mailer", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/mailgun-mailer.git", - "reference": "3c1dfd9ff0a487a4116baec42d11ae21a061e3f1" + "reference": "8c18f2bff4e70ed5669ab8228302edd2fecd689b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/3c1dfd9ff0a487a4116baec42d11ae21a061e3f1", - "reference": "3c1dfd9ff0a487a4116baec42d11ae21a061e3f1", + "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/8c18f2bff4e70ed5669ab8228302edd2fecd689b", + "reference": "8c18f2bff4e70ed5669ab8228302edd2fecd689b", "shasum": "" }, "require": { @@ -7737,7 +7737,7 @@ "description": "Symfony Mailgun Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailgun-mailer/tree/v7.3.0" + "source": "https://github.com/symfony/mailgun-mailer/tree/v7.3.1" }, "funding": [ { @@ -7753,7 +7753,7 @@ "type": "tidelift" } ], - "time": "2024-09-28T08:24:38+00:00" + "time": "2025-06-20T16:15:52+00:00" }, { "name": "symfony/mime", @@ -8940,16 +8940,16 @@ }, { "name": "symfony/translation", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "4aba29076a29a3aa667e09b791e5f868973a8667" + "reference": "241d5ac4910d256660238a7ecf250deba4c73063" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/4aba29076a29a3aa667e09b791e5f868973a8667", - "reference": "4aba29076a29a3aa667e09b791e5f868973a8667", + "url": "https://api.github.com/repos/symfony/translation/zipball/241d5ac4910d256660238a7ecf250deba4c73063", + "reference": "241d5ac4910d256660238a7ecf250deba4c73063", "shasum": "" }, "require": { @@ -9016,7 +9016,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.0" + "source": "https://github.com/symfony/translation/tree/v7.3.1" }, "funding": [ { @@ -9032,7 +9032,7 @@ "type": "tidelift" } ], - "time": "2025-05-29T07:19:49+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/translation-contracts", @@ -9114,16 +9114,16 @@ }, { "name": "symfony/uid", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3" + "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/7beeb2b885cd584cd01e126c5777206ae4c3c6a3", - "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3", + "url": "https://api.github.com/repos/symfony/uid/zipball/a69f69f3159b852651a6bf45a9fdd149520525bb", + "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb", "shasum": "" }, "require": { @@ -9168,7 +9168,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.3.0" + "source": "https://github.com/symfony/uid/tree/v7.3.1" }, "funding": [ { @@ -9184,20 +9184,20 @@ "type": "tidelift" } ], - "time": "2025-05-24T14:28:13+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.3.0", + "version": "v7.3.1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e" + "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/548f6760c54197b1084e1e5c71f6d9d523f2f78e", - "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6e209fbe5f5a7b6043baba46fe5735a4b85d0d42", + "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42", "shasum": "" }, "require": { @@ -9252,7 +9252,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.3.0" + "source": "https://github.com/symfony/var-dumper/tree/v7.3.1" }, "funding": [ { @@ -9268,7 +9268,7 @@ "type": "tidelift" } ], - "time": "2025-04-27T18:39:23+00:00" + "time": "2025-06-27T19:55:54+00:00" }, { "name": "symfony/var-exporter", diff --git a/config/firefly.php b/config/firefly.php index 6d4d7d1d96..492eeb6efe 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -78,7 +78,7 @@ return [ 'running_balance_column' => env('USE_RUNNING_BALANCE', false), // see cer.php for exchange rates feature flag. ], - 'version' => 'develop/2025-06-28', + 'version' => 'develop/2025-06-29', 'api_version' => '2.1.0', // field is no longer used. 'db_version' => 25, diff --git a/package-lock.json b/package-lock.json index 5e9dd2dae3..ce0f8a2c5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3110,9 +3110,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.6.tgz", - "integrity": "sha512-ZOyn+gOs749xU7ovp+Ibj0g1o3dFRqsfPnT22C2t5JzcRvgsEDpGawPbCISGKLudJk9Y0wiu9sYd6kUh0pc9TA==", + "version": "24.0.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.7.tgz", + "integrity": "sha512-YIEUUr4yf8q8oQoXPpSlnvKNVKDQlPMWrmOcgzoduo7kvA2UF0/BwJ/eMKFTiTtkNL17I0M6Xe2tvwFU7be6iw==", "dev": true, "license": "MIT", "dependencies": { @@ -5151,9 +5151,9 @@ } }, "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -12361,9 +12361,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", "engines": { diff --git a/resources/assets/v1/src/locales/ca.json b/resources/assets/v1/src/locales/ca.json index 2b79ef92b0..e4bc5e6740 100644 --- a/resources/assets/v1/src/locales/ca.json +++ b/resources/assets/v1/src/locales/ca.json @@ -2,7 +2,7 @@ "firefly": { "administrations_page_title": "Administracions financeres", "administrations_index_menu": "Administracions financeres", - "expires_at": "Expires at", + "expires_at": "Caduca a les", "temp_administrations_introduction": "Firefly III aviat podr\u00e0 gestionar diverses administracions financeres. Ara mateix, nom\u00e9s en teniu una. Podeu definir el t\u00edtol d'aquesta administraci\u00f3 i la seva moneda nativa. Aix\u00f2 substitueix la configuraci\u00f3 anterior on definiu la vostra \"moneda predeterminada\". Aquesta configuraci\u00f3 ara est\u00e0 vinculada a l'administraci\u00f3 financera i pot ser diferent per a cada administraci\u00f3.", "administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.", "administrations_page_edit_sub_title_js": "Edita l'administraci\u00f3 financera \"{title}\"", @@ -46,7 +46,7 @@ "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s) unless you remove the reconciliation flag.", "tags": "Etiquetes", "no_budget": "(cap pressupost)", - "no_bill": "(no subscription)", + "no_bill": "(cap subscripci\u00f3)", "category": "Categoria", "attachments": "Adjunts", "notes": "Notes", @@ -62,7 +62,7 @@ "destination_account_reconciliation": "No pots editar el compte de dest\u00ed d'una transacci\u00f3 de reconciliaci\u00f3.", "source_account_reconciliation": "No pots editar el compte d'origen d'una transacci\u00f3 de consolidaci\u00f3.", "budget": "Pressupost", - "bill": "Subscription", + "bill": "Subscripci\u00f3", "you_create_withdrawal": "Est\u00e0s creant una retirada.", "you_create_transfer": "Est\u00e0s creant una transfer\u00e8ncia.", "you_create_deposit": "Est\u00e0s creant un ingr\u00e9s.", @@ -140,21 +140,21 @@ "response": "Resposta", "visit_webhook_url": "Visitar l'URL del webhook", "reset_webhook_secret": "Reiniciar el secret del webhook", - "header_exchange_rates": "Exchange rates", + "header_exchange_rates": "Tipus de canvi", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in the documentation<\/a>.", - "exchange_rates_from_to": "Between {from} and {to} (and the other way around)", + "exchange_rates_from_to": "Entre {from} i {to} (i a la inversa)", "exchange_rates_intro_rates": "Firefly III uses the following exchange rates. The inverse is automatically calculated when it is not provided. If no exchange rate exists for the date of the transaction, Firefly III will go back in time to find one. If none are present, the rate \"1\" will be used.", - "header_exchange_rates_rates": "Exchange rates", - "header_exchange_rates_table": "Table with exchange rates", - "help_rate_form": "On this day, how many {to} will you get for one {from}?", - "add_new_rate": "Add a new exchange rate", - "save_new_rate": "Save new rate" + "header_exchange_rates_rates": "Tipus de canvi", + "header_exchange_rates_table": "Taula amb els tipus de canvi", + "help_rate_form": "El dia d'avui, quants {to} obtindr\u00e0s amb un {from}?", + "add_new_rate": "Afegeix un nou tipus de canvi", + "save_new_rate": "Desa nou tipus" }, "form": { "url": "URL", "active": "Actiu", "interest_date": "Data d'inter\u00e8s", - "administration_currency": "Native currency", + "administration_currency": "Moneda nativa", "title": "T\u00edtol", "date": "Data", "book_date": "Data de registre", @@ -169,12 +169,12 @@ "webhook_delivery": "Lliurament", "from_currency_to_currency": "{from} → {to}", "to_currency_from_currency": "{to} → {from}", - "rate": "Rate" + "rate": "Taxa" }, "list": { "title": "T\u00edtol", "active": "Est\u00e0 actiu?", - "native_currency": "Native currency", + "native_currency": "Moneda nativa", "trigger": "Activador", "response": "Resposta", "delivery": "Lliurament", From cca53cb0e84df00f85ff89a275f70d52a945db1f Mon Sep 17 00:00:00 2001 From: JC5 Date: Mon, 30 Jun 2025 05:33:09 +0200 Subject: [PATCH 4/9] =?UTF-8?q?=F0=9F=A4=96=20Auto=20commit=20for=20releas?= =?UTF-8?q?e=20'develop'=20on=202025-06-30?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.lock | 12 ++++++------ config/firefly.php | 2 +- package-lock.json | 40 +++++++++++++--------------------------- 3 files changed, 20 insertions(+), 34 deletions(-) diff --git a/composer.lock b/composer.lock index d52168a813..d22080bff3 100644 --- a/composer.lock +++ b/composer.lock @@ -4805,16 +4805,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.45", + "version": "3.0.46", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "bd81b90d5963c6b9d87de50357585375223f4dd8" + "reference": "56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/bd81b90d5963c6b9d87de50357585375223f4dd8", - "reference": "bd81b90d5963c6b9d87de50357585375223f4dd8", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6", + "reference": "56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6", "shasum": "" }, "require": { @@ -4895,7 +4895,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.45" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.46" }, "funding": [ { @@ -4911,7 +4911,7 @@ "type": "tidelift" } ], - "time": "2025-06-22T22:54:43+00:00" + "time": "2025-06-26T16:29:55+00:00" }, { "name": "pragmarx/google2fa", diff --git a/config/firefly.php b/config/firefly.php index 492eeb6efe..df250d3e6c 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -78,7 +78,7 @@ return [ 'running_balance_column' => env('USE_RUNNING_BALANCE', false), // see cer.php for exchange rates feature flag. ], - 'version' => 'develop/2025-06-29', + 'version' => 'develop/2025-06-30', 'api_version' => '2.1.0', // field is no longer used. 'db_version' => 25, diff --git a/package-lock.json b/package-lock.json index ce0f8a2c5e..cbaae088d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2119,18 +2119,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.9.tgz", + "integrity": "sha512-xpz6C/vXOegF9VEtlMBlkNNIjHrLhKaFBsO4lmQGr00x5BHp7p+oliR6i7LwIcM5cZU2VjLSwm2R+/zj5IjPWg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -2143,20 +2139,10 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.7.tgz", + "integrity": "sha512-maArE+jvYbj06DXh2iFlXSSDjTWXODlPTQHdDRQdGoYw7KvT4SfYCnPHfCyww8Z3JqFsW0BBjPLj8A2fwAvv7Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2165,16 +2151,16 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.1.tgz", + "integrity": "sha512-mBLKRHc7Ffw/hObYb9+cunuGNjshQk+vZdwZBJoqiysK/mW3Jq0UXosq8aIhMnLevANhR9yoYfdUEOHg6M9y0g==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.26", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.26.tgz", + "integrity": "sha512-Z9rjt4BUVEbLFpw0qjCklVxxf421wrmcbP4w+LmBUxYCyJTYYSclgJD0YsCgGqQCtCIPiz7kjbYYJiAKhjJ3kA==", "dev": true, "license": "MIT", "dependencies": { From ebfdeeedaa69e79a32fd01b9040e316cd4f00e2c Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 30 Jun 2025 20:28:29 +0200 Subject: [PATCH 5/9] Fix #10517 --- app/Http/Middleware/Authenticate.php | 5 ++++- app/Support/Authentication/RemoteUserGuard.php | 13 +++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 6957627628..a0319eb8cd 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -97,6 +97,9 @@ class Authenticate } foreach ($guards as $guard) { + if ('api' !== $guard) { + $this->auth->guard($guard)->authenticate(); + } $result = $this->auth->guard($guard)->check(); if ($result) { $user = $this->auth->guard($guard)->user(); @@ -107,7 +110,7 @@ class Authenticate } } - // this is a massive hack, but if the hander has the oauth exception + // this is a massive hack, but if the handler has the oauth exception // at this point we can report its error instead of a generic one. $message = 'Unauthenticated.'; if (Handler::$lastError instanceof OAuthServerException) { diff --git a/app/Support/Authentication/RemoteUserGuard.php b/app/Support/Authentication/RemoteUserGuard.php index ab21cdf260..fdd4d6f901 100644 --- a/app/Support/Authentication/RemoteUserGuard.php +++ b/app/Support/Authentication/RemoteUserGuard.php @@ -25,6 +25,7 @@ declare(strict_types=1); namespace FireflyIII\Support\Authentication; use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Support\Facades\Preferences; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\Guard; @@ -55,7 +56,7 @@ class RemoteUserGuard implements Guard public function authenticate(): void { - Log::debug(sprintf('Now at %s', __METHOD__)); + Log::debug(sprintf('Now at %s', __METHOD__)); if ($this->user instanceof User) { Log::debug(sprintf('%s is found: #%d, "%s".', $this->user::class, $this->user->id, $this->user->email)); @@ -66,7 +67,7 @@ class RemoteUserGuard implements Guard $userID = request()->server($header) ?? null; if (function_exists('apache_request_headers')) { - Log::debug('Use apache_request_headers to find user ID.'); + Log::debug('Use apache_request_headers to find user ID.'); $userID = request()->server($header) ?? apache_request_headers()[$header] ?? null; } @@ -76,7 +77,7 @@ class RemoteUserGuard implements Guard throw new FireflyException('The guard header was unexpectedly empty. See the logs.'); } - Log::debug(sprintf('User ID found in header is "%s"', $userID)); + Log::debug(sprintf('User ID found in header is "%s"', $userID)); /** @var User $retrievedUser */ $retrievedUser = $this->provider->retrieveById($userID); @@ -86,14 +87,14 @@ class RemoteUserGuard implements Guard if (null !== $header) { $emailAddress = (string) (request()->server($header) ?? apache_request_headers()[$header] ?? null); - $preference = app('preferences')->getForUser($retrievedUser, 'remote_guard_alt_email'); + $preference = Preferences::getForUser($retrievedUser, 'remote_guard_alt_email'); if ('' !== $emailAddress && null === $preference && $emailAddress !== $userID) { - app('preferences')->setForUser($retrievedUser, 'remote_guard_alt_email', $emailAddress); + Preferences::setForUser($retrievedUser, 'remote_guard_alt_email', $emailAddress); } // if the pref isn't null and the object returned isn't null, update the email address. if ('' !== $emailAddress && null !== $preference && $emailAddress !== $preference->data) { - app('preferences')->setForUser($retrievedUser, 'remote_guard_alt_email', $emailAddress); + Preferences::setForUser($retrievedUser, 'remote_guard_alt_email', $emailAddress); } } From 8e93af5cc7685b9e79f9d9314968d4203081d2e4 Mon Sep 17 00:00:00 2001 From: James Cole Date: Tue, 1 Jul 2025 19:31:27 +0200 Subject: [PATCH 6/9] Fix #10535 --- .../Webhook/StandardMessageGenerator.php | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/app/Generator/Webhook/StandardMessageGenerator.php b/app/Generator/Webhook/StandardMessageGenerator.php index 2f93fe2303..4ea278779b 100644 --- a/app/Generator/Webhook/StandardMessageGenerator.php +++ b/app/Generator/Webhook/StandardMessageGenerator.php @@ -32,11 +32,14 @@ use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\Webhook; use FireflyIII\Models\WebhookMessage; +use FireflyIII\Support\Facades\Amount; +use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment; use FireflyIII\Transformers\AccountTransformer; use FireflyIII\Transformers\TransactionGroupTransformer; use FireflyIII\User; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Log; use Ramsey\Uuid\Uuid; use Symfony\Component\HttpFoundation\ParameterBag; @@ -59,14 +62,14 @@ class StandardMessageGenerator implements MessageGeneratorInterface public function generateMessages(): void { - app('log')->debug(__METHOD__); + Log::debug(__METHOD__); // get the webhooks: if (0 === $this->webhooks->count()) { $this->webhooks = $this->getWebhooks(); } // do some debugging - app('log')->debug( + Log::debug( sprintf('StandardMessageGenerator will generate messages for %d object(s) and %d webhook(s).', $this->objects->count(), $this->webhooks->count()) ); $this->run(); @@ -79,13 +82,13 @@ class StandardMessageGenerator implements MessageGeneratorInterface private function run(): void { - app('log')->debug('Now in StandardMessageGenerator::run'); + Log::debug('Now in StandardMessageGenerator::run'); /** @var Webhook $webhook */ foreach ($this->webhooks as $webhook) { $this->runWebhook($webhook); } - app('log')->debug('Done with StandardMessageGenerator::run'); + Log::debug('Done with StandardMessageGenerator::run'); } /** @@ -93,7 +96,7 @@ class StandardMessageGenerator implements MessageGeneratorInterface */ private function runWebhook(Webhook $webhook): void { - app('log')->debug(sprintf('Now in runWebhook(#%d)', $webhook->id)); + Log::debug(sprintf('Now in runWebhook(#%d)', $webhook->id)); /** @var Model $object */ foreach ($this->objects as $object) { @@ -108,7 +111,7 @@ class StandardMessageGenerator implements MessageGeneratorInterface { $class = $model::class; // Line is ignored because all of Firefly III's Models have an id property. - app('log')->debug(sprintf('Now in generateMessage(#%d, %s#%d)', $webhook->id, $class, $model->id)); + Log::debug(sprintf('Now in generateMessage(#%d, %s#%d)', $webhook->id, $class, $model->id)); $uuid = Uuid::uuid4(); $basicMessage = [ @@ -125,7 +128,7 @@ class StandardMessageGenerator implements MessageGeneratorInterface switch ($class) { default: // Line is ignored because all of Firefly III's Models have an id property. - app('log')->error( + Log::error( sprintf('Webhook #%d was given %s#%d to deal with but can\'t extract user ID from it.', $webhook->id, $class, $model->id) ); @@ -141,7 +144,7 @@ class StandardMessageGenerator implements MessageGeneratorInterface // then depends on the response what to put in the message: switch ($webhook->response) { default: - app('log')->error( + Log::error( sprintf('The response code for webhook #%d is "%d" and the message generator cant handle it. Soft fail.', $webhook->id, $webhook->response) ); @@ -159,10 +162,10 @@ class StandardMessageGenerator implements MessageGeneratorInterface try { $basicMessage['content'] = $transformer->transformObject($model); } catch (FireflyException $e) { - app('log')->error( + Log::error( sprintf('The transformer could not include the requested transaction group for webhook #%d: %s', $webhook->id, $e->getMessage()) ); - app('log')->error($e->getTraceAsString()); + Log::error($e->getTraceAsString()); return; } @@ -172,6 +175,10 @@ class StandardMessageGenerator implements MessageGeneratorInterface case WebhookResponse::ACCOUNTS->value: /** @var TransactionGroup $model */ $accounts = $this->collectAccounts($model); + $enrichment = new AccountEnrichment(); + $enrichment->setUser($model->user); + $enrichment->setNative(Amount::getNativeCurrencyByUserGroup($model->userGroup)); + $accounts = $enrichment->enrich($accounts); foreach ($accounts as $account) { $transformer = new AccountTransformer(); $transformer->setParameters(new ParameterBag()); @@ -210,7 +217,7 @@ class StandardMessageGenerator implements MessageGeneratorInterface $webhookMessage->uuid = $message['uuid']; $webhookMessage->message = $message; $webhookMessage->save(); - app('log')->debug(sprintf('Stored new webhook message #%d', $webhookMessage->id)); + Log::debug(sprintf('Stored new webhook message #%d', $webhookMessage->id)); } public function setObjects(Collection $objects): void From 784494871dc120da47b982a3a448a908e7ca45d4 Mon Sep 17 00:00:00 2001 From: James Cole Date: Tue, 1 Jul 2025 19:33:43 +0200 Subject: [PATCH 7/9] Fix #10530 --- app/TransactionRules/Actions/SetDescription.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/TransactionRules/Actions/SetDescription.php b/app/TransactionRules/Actions/SetDescription.php index cec857fc5a..1a0ac77257 100644 --- a/app/TransactionRules/Actions/SetDescription.php +++ b/app/TransactionRules/Actions/SetDescription.php @@ -28,6 +28,7 @@ use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\TransactionRules\Traits\RefreshNotesTrait; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; /** * Class SetDescription. @@ -51,7 +52,12 @@ class SetDescription implements ActionInterface $after = $this->action->getValue($journal); // replace newlines. - $after = str_replace(["\r", "\n", "\t", "\036", "\025"], '', $after); + $after = trim(str_replace(["\r", "\n", "\t", "\036", "\025"], '', $after)); + + if('' === $after) { + Log::warning('Action resulted in an empty description, reset to default value.'); + $after = '(no description)'; + } DB::table('transaction_journals') ->where('id', '=', $journal['transaction_journal_id']) From 80c2f1ea3fbdb93d380d184c6b0be3d488248a86 Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 2 Jul 2025 05:59:25 +0200 Subject: [PATCH 8/9] Update changelog. --- changelog.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/changelog.md b/changelog.md index 34827566ca..3702b6b65b 100644 --- a/changelog.md +++ b/changelog.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## 6.2.20 - 2025-07-02 + +### Changed + +- New query parser is now the default. + +### Fixed + +- #10517 +- #10530 +- #10535 + ## 6.2.19 - 2025-06-29 ### Changed From 323d04fe6cb2a6dd1c317cb8d05231f2b6c0d838 Mon Sep 17 00:00:00 2001 From: JC5 Date: Wed, 2 Jul 2025 06:03:17 +0200 Subject: [PATCH 9/9] =?UTF-8?q?=F0=9F=A4=96=20Auto=20commit=20for=20releas?= =?UTF-8?q?e=20'v6.2.20'=20on=202025-07-02?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .ci/php-cs-fixer/composer.lock | 53 ++++++++------- .../Webhook/StandardMessageGenerator.php | 4 +- app/Http/Controllers/Controller.php | 25 +++---- .../Authentication/RemoteUserGuard.php | 6 +- .../Actions/SetDescription.php | 2 +- changelog.md | 6 +- config/firefly.php | 2 +- package-lock.json | 67 ++++++++++--------- 8 files changed, 87 insertions(+), 78 deletions(-) diff --git a/.ci/php-cs-fixer/composer.lock b/.ci/php-cs-fixer/composer.lock index 4ad923fd42..da18bed2c8 100644 --- a/.ci/php-cs-fixer/composer.lock +++ b/.ci/php-cs-fixer/composer.lock @@ -406,58 +406,59 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.75.0", + "version": "v3.76.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "399a128ff2fdaf4281e4e79b755693286cdf325c" + "reference": "0e3c484cef0ae9314b0f85986a36296087432c40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/399a128ff2fdaf4281e4e79b755693286cdf325c", - "reference": "399a128ff2fdaf4281e4e79b755693286cdf325c", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/0e3c484cef0ae9314b0f85986a36296087432c40", + "reference": "0e3c484cef0ae9314b0f85986a36296087432c40", "shasum": "" }, "require": { "clue/ndjson-react": "^1.0", "composer/semver": "^3.4", - "composer/xdebug-handler": "^3.0.3", + "composer/xdebug-handler": "^3.0.5", "ext-filter": "*", "ext-hash": "*", "ext-json": "*", "ext-tokenizer": "*", "fidry/cpu-core-counter": "^1.2", "php": "^7.4 || ^8.0", - "react/child-process": "^0.6.5", + "react/child-process": "^0.6.6", "react/event-loop": "^1.0", - "react/promise": "^2.0 || ^3.0", + "react/promise": "^2.11 || ^3.0", "react/socket": "^1.0", "react/stream": "^1.0", - "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0", - "symfony/console": "^5.4 || ^6.4 || ^7.0", - "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", - "symfony/finder": "^5.4 || ^6.4 || ^7.0", - "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", - "symfony/polyfill-mbstring": "^1.31", - "symfony/polyfill-php80": "^1.31", - "symfony/polyfill-php81": "^1.31", - "symfony/process": "^5.4 || ^6.4 || ^7.2", - "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", + "symfony/console": "^5.4.45 || ^6.4.13 || ^7.0", + "symfony/event-dispatcher": "^5.4.45 || ^6.4.13 || ^7.0", + "symfony/filesystem": "^5.4.45 || ^6.4.13 || ^7.0", + "symfony/finder": "^5.4.45 || ^6.4.17 || ^7.0", + "symfony/options-resolver": "^5.4.45 || ^6.4.16 || ^7.0", + "symfony/polyfill-mbstring": "^1.32", + "symfony/polyfill-php80": "^1.32", + "symfony/polyfill-php81": "^1.32", + "symfony/process": "^5.4.47 || ^6.4.20 || ^7.2", + "symfony/stopwatch": "^5.4.45 || ^6.4.19 || ^7.0" }, "require-dev": { "facile-it/paraunit": "^1.3.1 || ^2.6", "infection/infection": "^0.29.14", - "justinrainbow/json-schema": "^5.3 || ^6.2", - "keradus/cli-executor": "^2.1", + "justinrainbow/json-schema": "^5.3 || ^6.4", + "keradus/cli-executor": "^2.2", "mikey179/vfsstream": "^1.6.12", - "php-coveralls/php-coveralls": "^2.7", + "php-coveralls/php-coveralls": "^2.8", "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", - "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.12", - "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.3", - "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.3" + "phpunit/phpunit": "^9.6.23 || ^10.5.47 || ^11.5.25", + "symfony/polyfill-php84": "^1.32", + "symfony/var-dumper": "^5.4.48 || ^6.4.23 || ^7.3.1", + "symfony/yaml": "^5.4.45 || ^6.4.23 || ^7.3.1" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -498,7 +499,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.75.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.76.0" }, "funding": [ { @@ -506,7 +507,7 @@ "type": "github" } ], - "time": "2025-03-31T18:40:42+00:00" + "time": "2025-06-30T14:15:06+00:00" }, { "name": "psr/container", diff --git a/app/Generator/Webhook/StandardMessageGenerator.php b/app/Generator/Webhook/StandardMessageGenerator.php index 4ea278779b..dbb3516dfc 100644 --- a/app/Generator/Webhook/StandardMessageGenerator.php +++ b/app/Generator/Webhook/StandardMessageGenerator.php @@ -175,10 +175,10 @@ class StandardMessageGenerator implements MessageGeneratorInterface case WebhookResponse::ACCOUNTS->value: /** @var TransactionGroup $model */ $accounts = $this->collectAccounts($model); - $enrichment = new AccountEnrichment(); + $enrichment = new AccountEnrichment(); $enrichment->setUser($model->user); $enrichment->setNative(Amount::getNativeCurrencyByUserGroup($model->userGroup)); - $accounts = $enrichment->enrich($accounts); + $accounts = $enrichment->enrich($accounts); foreach ($accounts as $account) { $transformer = new AccountTransformer(); $transformer->setParameters(new ParameterBag()); diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 7756ca861b..daa9da7db8 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers; -use function Safe\realpath; -use function Safe\ini_get; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Support\Facades\Amount; use FireflyIII\Support\Facades\Steam; @@ -38,6 +36,9 @@ use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\View; use Illuminate\Support\Facades\Route; +use function Safe\realpath; +use function Safe\ini_get; + /** * Class Controller. * @@ -78,12 +79,12 @@ abstract class Controller extends BaseController View::share('featuringWebhooks', true === config('firefly.feature_flags.webhooks') && true === config('firefly.allow_webhooks')); // share custom auth guard info. - $authGuard = config('firefly.authentication_guard'); - $logoutUrl = config('firefly.custom_logout_url'); + $authGuard = config('firefly.authentication_guard'); + $logoutUrl = config('firefly.custom_logout_url'); // overrule v2 layout back to v1. if ('true' === request()->get('force_default_layout') && 'v2' === config('view.layout')) { - //config('view.layout','v1'); + // config('view.layout','v1'); Config::set('view.layout', 'v1'); View::getFinder()->setPaths([realpath(base_path('resources/views'))]); // @phpstan-ignore-line } @@ -92,15 +93,15 @@ abstract class Controller extends BaseController View::share('logoutUrl', $logoutUrl); // upload size - $maxFileSize = Steam::phpBytes((string) ini_get('upload_max_filesize')); - $maxPostSize = Steam::phpBytes((string) ini_get('post_max_size')); - $uploadSize = min($maxFileSize, $maxPostSize); + $maxFileSize = Steam::phpBytes((string) ini_get('upload_max_filesize')); + $maxPostSize = Steam::phpBytes((string) ini_get('post_max_size')); + $uploadSize = min($maxFileSize, $maxPostSize); View::share('uploadSize', $uploadSize); // share is alpha, is beta - $isAlpha = false; - $isBeta = false; - $isDevelop = false; + $isAlpha = false; + $isBeta = false; + $isDevelop = false; if (str_contains((string) config('firefly.version'), 'alpha')) { $isAlpha = true; } @@ -118,7 +119,7 @@ abstract class Controller extends BaseController $this->middleware( function ($request, $next): mixed { - $locale = Steam::getLocale(); + $locale = Steam::getLocale(); // translations for specific strings: $this->monthFormat = (string) trans('config.month_js', [], $locale); $this->monthAndDayFormat = (string) trans('config.month_and_day_js', [], $locale); diff --git a/app/Support/Authentication/RemoteUserGuard.php b/app/Support/Authentication/RemoteUserGuard.php index fdd4d6f901..7870187a34 100644 --- a/app/Support/Authentication/RemoteUserGuard.php +++ b/app/Support/Authentication/RemoteUserGuard.php @@ -56,7 +56,7 @@ class RemoteUserGuard implements Guard public function authenticate(): void { - Log::debug(sprintf('Now at %s', __METHOD__)); + Log::debug(sprintf('Now at %s', __METHOD__)); if ($this->user instanceof User) { Log::debug(sprintf('%s is found: #%d, "%s".', $this->user::class, $this->user->id, $this->user->email)); @@ -67,7 +67,7 @@ class RemoteUserGuard implements Guard $userID = request()->server($header) ?? null; if (function_exists('apache_request_headers')) { - Log::debug('Use apache_request_headers to find user ID.'); + Log::debug('Use apache_request_headers to find user ID.'); $userID = request()->server($header) ?? apache_request_headers()[$header] ?? null; } @@ -77,7 +77,7 @@ class RemoteUserGuard implements Guard throw new FireflyException('The guard header was unexpectedly empty. See the logs.'); } - Log::debug(sprintf('User ID found in header is "%s"', $userID)); + Log::debug(sprintf('User ID found in header is "%s"', $userID)); /** @var User $retrievedUser */ $retrievedUser = $this->provider->retrieveById($userID); diff --git a/app/TransactionRules/Actions/SetDescription.php b/app/TransactionRules/Actions/SetDescription.php index 1a0ac77257..d6cc04fd6a 100644 --- a/app/TransactionRules/Actions/SetDescription.php +++ b/app/TransactionRules/Actions/SetDescription.php @@ -54,7 +54,7 @@ class SetDescription implements ActionInterface // replace newlines. $after = trim(str_replace(["\r", "\n", "\t", "\036", "\025"], '', $after)); - if('' === $after) { + if ('' === $after) { Log::warning('Action resulted in an empty description, reset to default value.'); $after = '(no description)'; } diff --git a/changelog.md b/changelog.md index 3702b6b65b..ea91d1cca9 100644 --- a/changelog.md +++ b/changelog.md @@ -11,9 +11,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed -- #10517 -- #10530 -- #10535 +- [Issue 10517](https://github.com/firefly-iii/firefly-iii/issues/10517) (401 when trying to create personal access token with Remote user authentication) reported by @MaxPelly +- [Discussion 10530](https://github.com/orgs/firefly-iii/discussions/10530) (Find and delete transactions with empty descriptions) started by @umfk +- [Issue 10535](https://github.com/firefly-iii/firefly-iii/issues/10535) (Internal Firefly III Exception: Undefined array key "currency") reported by @MaelFr ## 6.2.19 - 2025-06-29 diff --git a/config/firefly.php b/config/firefly.php index df250d3e6c..8e5a06c280 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -78,7 +78,7 @@ return [ 'running_balance_column' => env('USE_RUNNING_BALANCE', false), // see cer.php for exchange rates feature flag. ], - 'version' => 'develop/2025-06-30', + 'version' => '6.2.20', 'api_version' => '2.1.0', // field is no longer used. 'db_version' => 25, diff --git a/package-lock.json b/package-lock.json index cbaae088d8..cac46c29d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2119,9 +2119,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.9.tgz", - "integrity": "sha512-xpz6C/vXOegF9VEtlMBlkNNIjHrLhKaFBsO4lmQGr00x5BHp7p+oliR6i7LwIcM5cZU2VjLSwm2R+/zj5IjPWg==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "dev": true, "license": "MIT", "dependencies": { @@ -2140,9 +2140,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.7.tgz", - "integrity": "sha512-maArE+jvYbj06DXh2iFlXSSDjTWXODlPTQHdDRQdGoYw7KvT4SfYCnPHfCyww8Z3JqFsW0BBjPLj8A2fwAvv7Q==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", + "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2151,16 +2151,16 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.1.tgz", - "integrity": "sha512-mBLKRHc7Ffw/hObYb9+cunuGNjshQk+vZdwZBJoqiysK/mW3Jq0UXosq8aIhMnLevANhR9yoYfdUEOHg6M9y0g==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.26", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.26.tgz", - "integrity": "sha512-Z9rjt4BUVEbLFpw0qjCklVxxf421wrmcbP4w+LmBUxYCyJTYYSclgJD0YsCgGqQCtCIPiz7kjbYYJiAKhjJ3kA==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3096,9 +3096,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.7.tgz", - "integrity": "sha512-YIEUUr4yf8q8oQoXPpSlnvKNVKDQlPMWrmOcgzoduo7kvA2UF0/BwJ/eMKFTiTtkNL17I0M6Xe2tvwFU7be6iw==", + "version": "24.0.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.10.tgz", + "integrity": "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==", "dev": true, "license": "MIT", "dependencies": { @@ -3601,9 +3601,9 @@ } }, "node_modules/admin-lte": { - "version": "4.0.0-rc2", - "resolved": "https://registry.npmjs.org/admin-lte/-/admin-lte-4.0.0-rc2.tgz", - "integrity": "sha512-VMi9+Fl/Eu/XFFH3V86jcIgiKs/VqKStKvDxZbdEcgEwXgjV/d2MP76UEnanVIjnC3lxqXESzmzu1iAhnNtlzg==", + "version": "4.0.0-rc3", + "resolved": "https://registry.npmjs.org/admin-lte/-/admin-lte-4.0.0-rc3.tgz", + "integrity": "sha512-BKEGJknLiNW/l++6tjO9YIy2x6il4y/S977cSaRfi+wadZF3xe7U+vDR8q2H99CVC49VmPqRwb36hiyEVmBQTw==", "license": "MIT" }, "node_modules/ajv": { @@ -5636,9 +5636,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.177", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.177.tgz", - "integrity": "sha512-7EH2G59nLsEMj97fpDuvVcYi6lwTcM1xuWw3PssD8xzboAW7zj7iB3COEEEATUfjLHrs5uKBLQT03V/8URx06g==", + "version": "1.5.178", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.178.tgz", + "integrity": "sha512-wObbz/ar3Bc6e4X5vf0iO8xTN8YAjN/tgiAOJLr7yjYFtP9wAjq8Mb5h0yn6kResir+VYx2DXBj9NNobs0ETSA==", "dev": true, "license": "ISC" }, @@ -6997,9 +6997,9 @@ } }, "node_modules/i18next": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.2.1.tgz", - "integrity": "sha512-+UoXK5wh+VlE1Zy5p6MjcvctHXAhRwQKCxiJD8noKZzIXmnAX8gdHX5fLPA3MEVxEN4vbZkQFy8N0LyD9tUqPw==", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.3.0.tgz", + "integrity": "sha512-ZSQIiNGfqSG6yoLHaCvrkPp16UejHI8PCDxFYaNG/1qxtmqNmqEg4JlWKlxkrUmrin2sEjsy+Mjy1TRozBhOgw==", "funding": [ { "type": "individual", @@ -7016,7 +7016,7 @@ ], "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.1" + "@babel/runtime": "^7.27.6" }, "peerDependencies": { "typescript": "^5" @@ -10459,17 +10459,24 @@ "license": "ISC" }, "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "dev": true, "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/shallow-clone": {